From 8998e3abaedd9bd87962a70cb773ab659b0675d7 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 26 Dec 2019 21:33:12 -0500 Subject: [PATCH 001/171] laughable gdi progress --- .../controllers/algo/auto_generated_enums.cpp | 2 ++ firmware/config/engines/engines.mk | 1 + firmware/config/engines/vw.cpp | 2 +- firmware/config/engines/vw.h | 7 ++----- firmware/config/engines/vw_b6.cpp | 19 +++++++++++++++++++ firmware/config/engines/vw_b6.h | 10 ++++++++++ .../controllers/algo/auto_generated_enums.cpp | 2 ++ .../controllers/algo/engine_configuration.cpp | 1 + firmware/controllers/algo/rusefi_enums.h | 2 ++ 9 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 firmware/config/engines/vw_b6.cpp create mode 100644 firmware/config/engines/vw_b6.h diff --git a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp index 1ee2fa9a3b..14ee7f8858 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp +++ b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp @@ -659,6 +659,8 @@ case TOYOTA_JZS147: return "TOYOTA_JZS147"; case VAG_18_TURBO: return "VAG_18_TURBO"; +case VW_B6: + return "VW_B6"; case VW_ABA: return "VW_ABA"; case ZIL_130: diff --git a/firmware/config/engines/engines.mk b/firmware/config/engines/engines.mk index 3801df7aed..6352602767 100644 --- a/firmware/config/engines/engines.mk +++ b/firmware/config/engines/engines.mk @@ -27,6 +27,7 @@ ENGINES_SRC_CPP = $(PROJECT_DIR)/config/engines/ford_aspire.cpp \ $(PROJECT_DIR)/config/engines/mitsubishi.cpp \ $(PROJECT_DIR)/config/engines/dodge_ram.cpp \ $(PROJECT_DIR)/config/engines/vw.cpp \ + $(PROJECT_DIR)/config/engines/vw_b6.cpp \ $(PROJECT_DIR)/config/engines/dodge_stratus.cpp \ $(PROJECT_DIR)/config/engines/chevrolet_camaro_4.cpp \ $(PROJECT_DIR)/config/engines/suzuki_vitara.cpp \ diff --git a/firmware/config/engines/vw.cpp b/firmware/config/engines/vw.cpp index 259b20f35f..968487ef8f 100644 --- a/firmware/config/engines/vw.cpp +++ b/firmware/config/engines/vw.cpp @@ -4,7 +4,7 @@ * set engine_type 32 * * @date May 24, 2015 - * @author Andrey Belomutskiy, (c) 2012-2018 + * @author Andrey Belomutskiy, (c) 2012-2019 */ #include "global.h" diff --git a/firmware/config/engines/vw.h b/firmware/config/engines/vw.h index c419b0ea95..d8528faf64 100644 --- a/firmware/config/engines/vw.h +++ b/firmware/config/engines/vw.h @@ -2,14 +2,11 @@ * @file vw.h * * @date May 24, 2015 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef CONFIG_ENGINES_VW_H_ -#define CONFIG_ENGINES_VW_H_ +#pragma once #include "engine_configuration.h" void setVwAba(DECLARE_CONFIG_PARAMETER_SIGNATURE); - -#endif /* CONFIG_ENGINES_VW_H_ */ diff --git a/firmware/config/engines/vw_b6.cpp b/firmware/config/engines/vw_b6.cpp new file mode 100644 index 0000000000..813a550586 --- /dev/null +++ b/firmware/config/engines/vw_b6.cpp @@ -0,0 +1,19 @@ +/* + * @file vw_b6.cpp + * + * @date Dec 26, 2019 + * @author Andrey Belomutskiy, (c) 2012-2019 + */ + +#include "engine.h" +#include "vw_b6.h" + +EXTERN_CONFIG; + +/** + * set engine_type 62 + */ + + + + diff --git a/firmware/config/engines/vw_b6.h b/firmware/config/engines/vw_b6.h new file mode 100644 index 0000000000..b679aa10a1 --- /dev/null +++ b/firmware/config/engines/vw_b6.h @@ -0,0 +1,10 @@ +/* + * @file vw_b6.h + * + * @date Dec 26, 2019 + * @author Andrey Belomutskiy, (c) 2012-2019 + */ + +#pragma once + +void setVwPassatB6(DECLARE_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/algo/auto_generated_enums.cpp b/firmware/controllers/algo/auto_generated_enums.cpp index 8cffe770b9..faf4d88f64 100644 --- a/firmware/controllers/algo/auto_generated_enums.cpp +++ b/firmware/controllers/algo/auto_generated_enums.cpp @@ -803,6 +803,8 @@ case TOYOTA_JZS147: return "TOYOTA_JZS147"; case VAG_18_TURBO: return "VAG_18_TURBO"; +case VW_B6: + return "VW_B6"; case VW_ABA: return "VW_ABA"; case ZIL_130: diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index e26c18c861..f176831f3f 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -66,6 +66,7 @@ #include "test_engine.h" #include "sachs.h" #include "vw.h" +#include "vw_b6.h" #include "daihatsu.h" #include "chevrolet_camaro_4.h" #include "suzuki_vitara.h" diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index a9a94ada4d..07f1fde8cf 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -181,6 +181,8 @@ typedef enum { PROTEUS = 61, + VW_B6 = 62, + /** * this configuration has as few pins configured as possible */ From d03135aa134f45af18475cecf2d4dd3d71e7c478 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 26 Dec 2019 22:29:04 -0500 Subject: [PATCH 002/171] would URLs work? --- firmware/hw_layer/mc33816/mc33816.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 firmware/hw_layer/mc33816/mc33816.md diff --git a/firmware/hw_layer/mc33816/mc33816.md b/firmware/hw_layer/mc33816/mc33816.md new file mode 100644 index 0000000000..ed604ed4e0 --- /dev/null +++ b/firmware/hw_layer/mc33816/mc33816.md @@ -0,0 +1,4 @@ + +https://www.nxp.com/files-static/training_pdf/FTF/2012/americas/WBNR_FTF12_AUT_F0098.pdf has many cool pictures explaining the whole thing. + +https://www.nxp.com/docs/en/application-note/AN4849.pdf is literaly a complete example of a four cylinder internal combustion engine (ICE) injector drive. \ No newline at end of file From 5665e439543b7b47d0ea2420a061db9e50343ea0 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 12 Feb 2020 08:04:33 -0500 Subject: [PATCH 003/171] tle8888 output fix --- firmware/hw_layer/pin_repository.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index d6f9e347fd..9514c4d911 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -58,15 +58,17 @@ extern "C" { } static void tle8888_dump_regs(void) { - int i; - uint16_t tmp; - + // since responses are always in the NEXT transmission we will have this one first tle8888_read_reg(0, NULL); - for (i = 0; i < 0x7e + 1; i++) { - tle8888_read_reg(i, &tmp); + scheduleMsg(&logger, "register: data"); + for (for request = 0; request < 0x7e + 1; request++) { + uint16_t tmp; + tle8888_read_reg(request, &tmp); + uint8_t response = (tmp >> 1) & 0x7f + uint8_t data = (tmp >> 8) & 0xff); - scheduleMsg(&logger, "%02x: %02x", tmp & 0x7f ,(tmp >> 8) & 0xff); + scheduleMsg(&logger, "%02x: %02x", response, data); } } From 4dbff5ff306c5490b247b9cc69e3b063528951c9 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 12 Feb 2020 08:15:55 -0500 Subject: [PATCH 004/171] tle8888 output fix --- firmware/hw_layer/drivers/gpio/tle8888.c | 2 +- firmware/hw_layer/pin_repository.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/hw_layer/drivers/gpio/tle8888.c b/firmware/hw_layer/drivers/gpio/tle8888.c index 92b721334c..ac397cb5e7 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.c +++ b/firmware/hw_layer/drivers/gpio/tle8888.c @@ -611,7 +611,7 @@ int tle8888SpiStartupExchange(struct tle8888_priv *chip) { /* in config counted from 1 */ mask = (1 << (out - 1)); - /* check if output already ocupied */ + /* check if output already occupied */ if (chip->o_direct_mask & mask) { /* incorrect config? */ return -1; diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index 9514c4d911..c27eccc9a4 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -62,11 +62,11 @@ static void tle8888_dump_regs(void) tle8888_read_reg(0, NULL); scheduleMsg(&logger, "register: data"); - for (for request = 0; request < 0x7e + 1; request++) { + for (int request = 0; request < 0x7e + 1; request++) { uint16_t tmp; tle8888_read_reg(request, &tmp); - uint8_t response = (tmp >> 1) & 0x7f - uint8_t data = (tmp >> 8) & 0xff); + uint8_t response = (tmp >> 1) & 0x7f; + uint8_t data = (tmp >> 8) & 0xff; scheduleMsg(&logger, "%02x: %02x", response, data); } From 86b3332cfe433d2f2ea0174018ebe026cb80eab5 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 12 Feb 2020 08:24:24 -0500 Subject: [PATCH 005/171] have nothing else to do :( --- firmware/hw_layer/drivers/gpio/tle8888.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/hw_layer/drivers/gpio/tle8888.c b/firmware/hw_layer/drivers/gpio/tle8888.c index ac397cb5e7..9008be0285 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.c +++ b/firmware/hw_layer/drivers/gpio/tle8888.c @@ -595,10 +595,10 @@ int tle8888SpiStartupExchange(struct tle8888_priv *chip) { /* map and enable outputs for direct driven channels */ for (int i = 0; i < TLE8888_DIRECT_MISC; i++) { - int out; - uint32_t mask; - out = cfg->direct_io[i].output; + + + int out = cfg->direct_io[i].output; /* not used? */ if (out == 0) @@ -609,7 +609,7 @@ int tle8888SpiStartupExchange(struct tle8888_priv *chip) { return -1; /* in config counted from 1 */ - mask = (1 << (out - 1)); + uint32_t mask = (1 << (out - 1)); /* check if output already occupied */ if (chip->o_direct_mask & mask) { From 74ead04e848f5bab2cc5e1b60763f6ced486b805 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 12 Feb 2020 08:34:26 -0500 Subject: [PATCH 006/171] tle8888 dump at init --- firmware/hw_layer/drivers/gpio/tle8888.c | 1 + firmware/hw_layer/pin_repository.cpp | 2 +- firmware/hw_layer/pin_repository.h | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/firmware/hw_layer/drivers/gpio/tle8888.c b/firmware/hw_layer/drivers/gpio/tle8888.c index 9008be0285..02a929a750 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.c +++ b/firmware/hw_layer/drivers/gpio/tle8888.c @@ -650,6 +650,7 @@ int tle8888SpiStartupExchange(struct tle8888_priv *chip) { tle8888_spi_rw(chip, CMD_VRSCONFIG1(MODE_MANUAL << 2), NULL); } + tle8888_dump_regs(); return 0; } diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index c27eccc9a4..f2971b77e6 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -56,7 +56,7 @@ static PinRepository instance; extern "C" { extern void tle8888_read_reg(uint16_t reg, uint16_t *val); } -static void tle8888_dump_regs(void) +void tle8888_dump_regs(void) { // since responses are always in the NEXT transmission we will have this one first tle8888_read_reg(0, NULL); diff --git a/firmware/hw_layer/pin_repository.h b/firmware/hw_layer/pin_repository.h index 4e83e18186..c5b3d2bd69 100644 --- a/firmware/hw_layer/pin_repository.h +++ b/firmware/hw_layer/pin_repository.h @@ -28,6 +28,8 @@ class PinRepository { void initPinRepository(void); EXTERNC bool brain_pin_is_onchip(brain_pin_e brainPin); EXTERNC bool brain_pin_is_ext(brain_pin_e brainPin); +EXTERNC void tle8888_dump_regs(void); + /** * Usually high-level code would invoke efiSetPadMode, not this method directly */ From 3b61334714248b6514bab5f2acb1ab3294579e0c Mon Sep 17 00:00:00 2001 From: dron0gus Date: Wed, 12 Feb 2020 16:53:35 +0300 Subject: [PATCH 007/171] tle8888: disable diagnostic for outputs (#1144) DS is not clear, may be tle8888 clears OE bit in case of error on output. --- firmware/hw_layer/drivers/gpio/tle8888.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/firmware/hw_layer/drivers/gpio/tle8888.c b/firmware/hw_layer/drivers/gpio/tle8888.c index 02a929a750..cb3b4eb479 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.c +++ b/firmware/hw_layer/drivers/gpio/tle8888.c @@ -98,6 +98,7 @@ typedef enum { #define FWDStat1 0x38 #define CMD_FWDStat1 CMD_R(FWDStat1) +#define CMD_OUTCONFIG(n, d) CMD_WR(0x40 + (n), d) //#define CMD_VRSCONFIG0(d) CMD_WR(0x49, d) #define CMD_VRSCONFIG1(d) CMD_WR(0x4a, d) #define CMD_INCONFIG(n, d) CMD_WR(0x53 + (n & 0x03), d) @@ -639,6 +640,11 @@ int tle8888SpiStartupExchange(struct tle8888_priv *chip) { tle8888_spi_rw(chip, CMD_DDCONFIG(i, dd), NULL); } + /* Debug: disable diagnostic */ + for (int i = 0; i <= 5; i++) { + tle8888_spi_rw(chip, CMD_OUTCONFIG(i, 0), NULL); + } + /* enable outputs */ tle8888_spi_rw(chip, CMD_OE_SET, NULL); From 01855b9c8513fc9555eeb8df53c05af19896eb68 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 12 Feb 2020 08:53:50 -0500 Subject: [PATCH 008/171] more commands --- firmware/hw_layer/pin_repository.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index f2971b77e6..52fb026ebd 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -16,6 +16,7 @@ #include "eficonsole.h" #include "memstreams.h" #include "drivers/gpio/gpio_ext.h" +#include "tle8888.h" #ifndef BOARD_EXT_PINREPOPINS #define BOARD_EXT_PINREPOPINS 0 @@ -182,6 +183,7 @@ void initPinRepository(void) { addConsoleAction(CMD_PINS, reportPins); addConsoleAction("tle8888", tle8888_dump_regs); + addConsoleAction("tle8888init", requestTLE8888initialization); } bool brain_pin_is_onchip(brain_pin_e brainPin) From 6c843e6954838ad60c00a4ba9955372c80644110 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 12 Feb 2020 17:19:58 -0500 Subject: [PATCH 009/171] tle8888 refactoring already - extracting method --- firmware/hw_layer/drivers/gpio/tle8888.h | 2 ++ firmware/hw_layer/pin_repository.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/firmware/hw_layer/drivers/gpio/tle8888.h b/firmware/hw_layer/drivers/gpio/tle8888.h index 4c06013b54..5595f5a3dd 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.h +++ b/firmware/hw_layer/drivers/gpio/tle8888.h @@ -25,6 +25,8 @@ // we can change this value on TLE8888QK but we probably do not have a reason to change #define Window_watchdog_close_window_time_ms 100.8 +#define getRegisterFromResponse(x) (x >> 1) & 0x7f + // unchangeable value for TLE8888QK // unused for now //#define Window_watchdog_open_window_time_ms 12.8 diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index 52fb026ebd..cf295f9fd7 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -66,7 +66,7 @@ void tle8888_dump_regs(void) for (int request = 0; request < 0x7e + 1; request++) { uint16_t tmp; tle8888_read_reg(request, &tmp); - uint8_t response = (tmp >> 1) & 0x7f; + uint8_t response = getRegisterFromResponse(tmp); uint8_t data = (tmp >> 8) & 0xff; scheduleMsg(&logger, "%02x: %02x", response, data); From efc8d69085dea8a80200fdf3d134f2118e5bd29b Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 12 Feb 2020 17:23:22 -0500 Subject: [PATCH 010/171] and fixing build now! --- firmware/hw_layer/drivers/gpio/tle8888.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/hw_layer/drivers/gpio/tle8888.h b/firmware/hw_layer/drivers/gpio/tle8888.h index 5595f5a3dd..4a00c3b835 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.h +++ b/firmware/hw_layer/drivers/gpio/tle8888.h @@ -25,7 +25,7 @@ // we can change this value on TLE8888QK but we probably do not have a reason to change #define Window_watchdog_close_window_time_ms 100.8 -#define getRegisterFromResponse(x) (x >> 1) & 0x7f +#define getRegisterFromResponse(x) (((x) >> 1) & 0x7f) // unchangeable value for TLE8888QK // unused for now From deb73f505b06ec10da641ae0a2cc959f57b8514e Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 12 Feb 2020 17:37:45 -0500 Subject: [PATCH 011/171] #917 progress --- firmware/hw_layer/drivers/gpio/tle8888.c | 45 ++++++++++++++++++------ 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/firmware/hw_layer/drivers/gpio/tle8888.c b/firmware/hw_layer/drivers/gpio/tle8888.c index cb3b4eb479..a7cbe131c4 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.c +++ b/firmware/hw_layer/drivers/gpio/tle8888.c @@ -87,16 +87,19 @@ typedef enum { */ #define CMD_UNLOCK CMD_WR(0x1e, 0x01) +#define WWDStat 0x36 +#define FWDStat0 0x37 +#define FWDStat1 0x38 + /* Status registers */ #define CMD_OPSTAT0 CMD_R(0x34) #define CMD_OPSTAT1 CMD_R(0x35) -#define CMD_WWDSTAT CMD_R(0x36) -#define CMD_FWDSTAT(n) CMD_R(0x37 + ((n) & 0x01)) +#define CMD_WWDSTAT CMD_R(WWDStat) +#define CMD_FWDSTAT0 CMD_R(FWDStat0) +#define CMD_FWDSTAT1 CMD_R(FWDStat1) #define CMD_TECSTAT CMD_R(0x39) #define CMD_WdDiag CMD_R(0x2e) -#define FWDStat1 0x38 -#define CMD_FWDStat1 CMD_R(FWDStat1) #define CMD_OUTCONFIG(n, d) CMD_WR(0x40 + (n), d) //#define CMD_VRSCONFIG0(d) CMD_WR(0x49, d) @@ -162,6 +165,8 @@ static uint16_t wdDiagResponse = 0; //static_assert(TLE8888_POLL_INTERVAL_MS < Window_watchdog_open_window_time_ms) static bool needInitialSpi = true; +static bool isWatchdogHappy = false; +static bool wasWatchdogHappy = false; int resetCounter = 0; float vBattForTle8888 = 0; @@ -205,12 +210,16 @@ static const char* tle8888_pin_names[TLE8888_OUTPUTS] = { "TLE8888.IGN1", "TLE8888.IGN2", "TLE8888.IGN3", "TLE8888.IGN4" }; +#define getWindowWatchdog() ((WindowWatchdogErrorCounterValue >> 8) & 0x3f) +#define getFunctionalWatchdog() ((FunctionalWatchdogPassCounterValue >> 8) & 0x3f) +#define getTotalErrorCounter() ((TotalErrorCounterValue >> 8) & 0x3f) + #if EFI_TUNER_STUDIO void tle8888PostState(TsDebugChannels *debugChannels) { - debugChannels->debugIntField1 = (WindowWatchdogErrorCounterValue >> 8) & 0x3f; - debugChannels->debugIntField2 = (FunctionalWatchdogPassCounterValue >> 8) & 0x3f; - debugChannels->debugIntField3 = (TotalErrorCounterValue >> 8) & 0x3f; + debugChannels->debugIntField1 = getWindowWatchdog(); + debugChannels->debugIntField2 = getFunctionalWatchdog(); + debugChannels->debugIntField3 = getTotalErrorCounter(); //debugChannels->debugIntField1 = tle8888SpiCounter; //debugChannels->debugIntField2 = spiTxb; //debugChannels->debugIntField3 = spiRxb; @@ -433,17 +442,33 @@ void watchdogLogic(struct tle8888_priv *chip) { /* the address and content of the selected register is transmitted with the * next SPI transmission (for not existing addresses or wrong access mode * the data is always '0' */ - tle8888_spi_rw(chip, CMD_FWDStat1, &maybeFirstResponse); + tle8888_spi_rw(chip, CMD_FWDSTAT1, &maybeFirstResponse); // here we get response of the 'FWDStat1' above tle8888_spi_rw(chip, CMD_WdDiag, &functionWDrx); - handleFWDStat1(chip, (functionWDrx & 0xff) >> 1, (functionWDrx >> 8) & 0xff); + handleFWDStat1(chip, getRegisterFromResponse(functionWDrx), (functionWDrx >> 8) & 0xff); lastFunctionWatchdogTimeNt = nowNt; } tle8888_spi_rw(chip, CMD_WWDSTAT, NULL); - tle8888_spi_rw(chip, CMD_FWDSTAT(0), &WindowWatchdogErrorCounterValue); + tle8888_spi_rw(chip, CMD_FWDSTAT0, &WindowWatchdogErrorCounterValue); tle8888_spi_rw(chip, CMD_TECSTAT, &FunctionalWatchdogPassCounterValue); tle8888_spi_rw(chip, CMD_TECSTAT, &TotalErrorCounterValue); + + + // sanity checking that we are looking at the right responses + if (getRegisterFromResponse(WindowWatchdogErrorCounterValue) == WWDStat && + getRegisterFromResponse(FunctionalWatchdogPassCounterValue) == FWDStat0 + ) { + + wasWatchdogHappy = isWatchdogHappy; + // reset state for error counters has us start in Safe Mode + isWatchdogHappy = getWindowWatchdog() == 0 && getFunctionalWatchdog() == 0; + + + } + + + } int tle8888SpiStartupExchange(struct tle8888_priv *chip); From 333a7a66086a9b0831fc99c6bb80ce861249c606 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 12 Feb 2020 19:32:40 -0500 Subject: [PATCH 012/171] TLE8888 watchdog #917 --- firmware/hw_layer/drivers/gpio/tle8888.c | 178 +++++++++++------------ 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/firmware/hw_layer/drivers/gpio/tle8888.c b/firmware/hw_layer/drivers/gpio/tle8888.c index a7cbe131c4..c16ba542c0 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.c +++ b/firmware/hw_layer/drivers/gpio/tle8888.c @@ -430,6 +430,89 @@ static void handleFWDStat1(struct tle8888_priv *chip, int registerNum, int data) tle8888_spi_rw(chip, CMD_WdDiag, &wdDiagResponse); } +int startupConfiguration(struct tle8888_priv *chip) { + const struct tle8888_config *cfg = chip->cfg; + uint16_t response = 0; + /* Set LOCK bit to 0 */ + // second 0x13D=317 => 0x35=53 + tle8888_spi_rw(chip, CMD_UNLOCK, &response); + if (response == 53) { + tle8888initResponsesAccumulator += 8; + } + initResponse1 = response; + + chip->o_direct_mask = 0; + chip->o_oe_mask = 0; + /* enable direct drive of OUTPUT4..1 + * ...still need INJEN signal */ + chip->o_direct_mask |= 0x0000000f; + chip->o_oe_mask |= 0x0000000f; + /* enable direct drive of IGN4..1 + * ...still need IGNEN signal */ + chip->o_direct_mask |= 0x0f000000; + chip->o_oe_mask |= 0x0f000000; + + /* map and enable outputs for direct driven channels */ + for (int i = 0; i < TLE8888_DIRECT_MISC; i++) { + int out = cfg->direct_io[i].output; + + /* not used? */ + if (out == 0) + continue; + + /* OUT1..4 driven direct only through dedicated pins */ + if (out < 5) + return -1; + + /* in config counted from 1 */ + uint32_t mask = (1 << (out - 1)); + + /* check if output already occupied */ + if (chip->o_direct_mask & mask) { + /* incorrect config? */ + return -1; + } + + /* enable direct drive and output enable */ + chip->o_direct_mask |= mask; + chip->o_oe_mask |= mask; + + /* set INCONFIG - aux input mapping */ + tle8888_spi_rw(chip, CMD_INCONFIG(i, out - 5), NULL); + } + + /* enable all ouputs + * TODO: add API to enable/disable? */ + chip->o_oe_mask |= 0x0ffffff0; + + /* set OE and DD registers */ + for (int i = 0; i < 4; i++) { + uint8_t oe, dd; + + oe = (chip->o_oe_mask >> (8 * i)) & 0xff; + dd = (chip->o_direct_mask >> (8 * i)) & 0xff; + tle8888_spi_rw(chip, CMD_OECONFIG(i, oe), NULL); + tle8888_spi_rw(chip, CMD_DDCONFIG(i, dd), NULL); + } + + /* Debug: disable diagnostic */ + for (int i = 0; i <= 5; i++) { + tle8888_spi_rw(chip, CMD_OUTCONFIG(i, 0), NULL); + } + + /* enable outputs */ + tle8888_spi_rw(chip, CMD_OE_SET, NULL); + + if (cfg->hallMode) { + /** + * By default "auto detection mode for VR sensor signals" is used + * We know that for short Hall signals like Miata NB2 crank sensor this does not work well above certain RPM. + */ + tle8888_spi_rw(chip, CMD_VRSCONFIG1(MODE_MANUAL << 2), NULL); + } + return 0; +} + void watchdogLogic(struct tle8888_priv *chip) { efitick_t nowNt = getTimeNowNt(); if (nowNt - lastWindowWatchdogTimeNt > MS2NT(Window_watchdog_close_window_time_ms)) { @@ -462,18 +545,15 @@ void watchdogLogic(struct tle8888_priv *chip) { wasWatchdogHappy = isWatchdogHappy; // reset state for error counters has us start in Safe Mode - isWatchdogHappy = getWindowWatchdog() == 0 && getFunctionalWatchdog() == 0; - - + isWatchdogHappy = (getWindowWatchdog() == 0 && getFunctionalWatchdog() == 0); + if (!wasWatchdogHappy && isWatchdogHappy) { + startupConfiguration(chip); + } } - - - } int tle8888SpiStartupExchange(struct tle8888_priv *chip); - static THD_FUNCTION(tle8888_driver_thread, p) { (void)p; @@ -492,7 +572,7 @@ static THD_FUNCTION(tle8888_driver_thread, p) { } if (needInitialSpi) { - needInitialSpi = false; + wasWatchdogHappy = isWatchdogHappy = needInitialSpi = false; for (int i = 0; i < BOARD_TLE8888_COUNT; i++) { struct tle8888_priv *chip = &chips[i]; @@ -568,8 +648,6 @@ int tle8888_writePad(void *data, unsigned int pin, int value) { * @return 0 for valid configuration, -1 for invalid configuration */ int tle8888SpiStartupExchange(struct tle8888_priv *chip) { - const struct tle8888_config *cfg = chip->cfg; - tle8888reinitializationCounter++; tle8888initResponsesAccumulator = 0; @@ -600,86 +678,8 @@ int tle8888SpiStartupExchange(struct tle8888_priv *chip) { */ chThdSleepMilliseconds(3); - /* Set LOCK bit to 0 */ - // second 0x13D=317 => 0x35=53 - tle8888_spi_rw(chip, CMD_UNLOCK, &response); - if (response == 53) { - tle8888initResponsesAccumulator += 8; - } - initResponse1 = response; + startupConfiguration(chip); - chip->o_direct_mask = 0; - chip->o_oe_mask = 0; - /* enable direct drive of OUTPUT4..1 - * ...still need INJEN signal */ - chip->o_direct_mask |= 0x0000000f; - chip->o_oe_mask |= 0x0000000f; - /* enable direct drive of IGN4..1 - * ...still need IGNEN signal */ - chip->o_direct_mask |= 0x0f000000; - chip->o_oe_mask |= 0x0f000000; - - /* map and enable outputs for direct driven channels */ - for (int i = 0; i < TLE8888_DIRECT_MISC; i++) { - - - - int out = cfg->direct_io[i].output; - - /* not used? */ - if (out == 0) - continue; - - /* OUT1..4 driven direct only through dedicated pins */ - if (out < 5) - return -1; - - /* in config counted from 1 */ - uint32_t mask = (1 << (out - 1)); - - /* check if output already occupied */ - if (chip->o_direct_mask & mask) { - /* incorrect config? */ - return -1; - } - - /* enable direct drive and output enable */ - chip->o_direct_mask |= mask; - chip->o_oe_mask |= mask; - - /* set INCONFIG - aux input mapping */ - tle8888_spi_rw(chip, CMD_INCONFIG(i, out - 5), NULL); - } - - /* enable all ouputs - * TODO: add API to enable/disable? */ - chip->o_oe_mask |= 0x0ffffff0; - - /* set OE and DD registers */ - for (int i = 0; i < 4; i++) { - uint8_t oe, dd; - - oe = (chip->o_oe_mask >> (8 * i)) & 0xff; - dd = (chip->o_direct_mask >> (8 * i)) & 0xff; - tle8888_spi_rw(chip, CMD_OECONFIG(i, oe), NULL); - tle8888_spi_rw(chip, CMD_DDCONFIG(i, dd), NULL); - } - - /* Debug: disable diagnostic */ - for (int i = 0; i <= 5; i++) { - tle8888_spi_rw(chip, CMD_OUTCONFIG(i, 0), NULL); - } - - /* enable outputs */ - tle8888_spi_rw(chip, CMD_OE_SET, NULL); - - if (cfg->hallMode) { - /** - * By default "auto detection mode for VR sensor signals" is used - * We know that for short Hall signals like Miata NB2 crank sensor this does not work well above certain RPM. - */ - tle8888_spi_rw(chip, CMD_VRSCONFIG1(MODE_MANUAL << 2), NULL); - } tle8888_dump_regs(); return 0; From aed1152c7a91036df191be62038707961b682b5f Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 12 Feb 2020 22:15:36 -0500 Subject: [PATCH 013/171] MRE divider --- .../config/boards/microrusefi/board_configuration.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index d7d800c212..9e7f6e7f90 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -59,10 +59,16 @@ static void setLedPins() { } static void setupVbatt() { +/* + below 0.4 // 1k high side/1.5k low side = 1.6667 ratio divider engineConfiguration->analogInputDividerCoefficient = 2.5f / 1.5f; +*/ - // 39k high side/10k low side multiplied by above analogInputDividerCoefficient = 8.166666f + // 6.8k high side/10k low side = 1.6667 ratio divider + engineConfiguration->analogInputDividerCoefficient = 16.8f / 10f; + + // R139=39k high side/R141=10k low side multiplied by above analogInputDividerCoefficient = 8.166666f engineConfiguration->vbattDividerCoeff = (49.0f / 10.0f) * engineConfiguration->analogInputDividerCoefficient; engineConfiguration->vbattAdcChannel = EFI_ADC_11; From 67c4fe9f63ee209e66ac844d702a0f91cf746580 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 12 Feb 2020 22:56:31 -0500 Subject: [PATCH 014/171] catching up --- firmware/tunerstudio/rusefi_kinetis.ini | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 125b2dc43c..dd562c1ae6 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Feb 04 00:55:30 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Feb 12 20:10:22 EST 2020 pageSize = 20000 page = 1 @@ -1341,8 +1341,8 @@ fileVersion = { 20191221 } ; throttle, pedal - TPSValue = scalar, U16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,U16, 22, "%",{1/100}, 0 + TPSValue = scalar, S16, 20, "%",{1/100}, 0 + throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 tpsADC = scalar, U16, 24, "ADC", 1, 0.0; ; air flow/mass measurments @@ -1375,9 +1375,9 @@ fileVersion = { 20191221 } ; Corrections injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, U16, 64, "%",{1/100}, 0 - cltCorrection = scalar, U16, 66, "%",{1/100}, 0 - baroCorrection = scalar, U16, 68, "%",{1/100}, 0 + iatCorrection = scalar, S16, 64, "%",{1/100}, 0 + cltCorrection = scalar, S16, 66, "%",{1/100}, 0 + baroCorrection = scalar, S16, 68, "%",{1/100}, 0 fuelPidCorrection=scalar, S16, 70, "ms",{1/300}, 0 ; Wall model AE @@ -1393,7 +1393,7 @@ fileVersion = { 20191221 } ; Ignition ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, U16, 88, "%",{1/100}, 0 + coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 ; Idle & ETB idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 @@ -3116,7 +3116,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSolenoid, "Solenoid" field = "Idle Solenoid Pin Mode", idle_solenoidPinMode, !useStepperIdle field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle - field = "Second Idle Solenoid Pin", secondSolenoidPin, !useStepperIdle && isDoubleSolenoidIdle + field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle dialog = idleStepper, "Stepper" From fe063d53cda82b783c58f0a3e79a96b003e6a87a Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 12 Feb 2020 23:16:46 -0500 Subject: [PATCH 015/171] proper 'f' syntax --- firmware/config/boards/microrusefi/board_configuration.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 9e7f6e7f90..02d51d1149 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -66,8 +66,9 @@ static void setupVbatt() { */ // 6.8k high side/10k low side = 1.6667 ratio divider - engineConfiguration->analogInputDividerCoefficient = 16.8f / 10f; + engineConfiguration->analogInputDividerCoefficient = 16.8f / 10.0f; + // set vbatt_divider 8.16 // R139=39k high side/R141=10k low side multiplied by above analogInputDividerCoefficient = 8.166666f engineConfiguration->vbattDividerCoeff = (49.0f / 10.0f) * engineConfiguration->analogInputDividerCoefficient; engineConfiguration->vbattAdcChannel = EFI_ADC_11; From f020a0b0a11131b42b86c4a7ff28361392096813 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 13 Feb 2020 23:25:09 -0500 Subject: [PATCH 016/171] code style --- simulator/simulator/adc_inputs.h | 4 +--- simulator/simulator/boards.h | 4 +--- simulator/simulator/efifeatures.h | 6 +----- simulator/simulator/framework.h | 5 ++--- simulator/simulator/global.h | 6 +----- simulator/simulator/os_access.h | 4 +--- simulator/simulator/rusEfiFunctionalTest.h | 5 +---- 7 files changed, 8 insertions(+), 26 deletions(-) diff --git a/simulator/simulator/adc_inputs.h b/simulator/simulator/adc_inputs.h index ffc9bea71f..b81afd9d9e 100644 --- a/simulator/simulator/adc_inputs.h +++ b/simulator/simulator/adc_inputs.h @@ -5,9 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef ADC_INPUTS_H_ -#define ADC_INPUTS_H_ +#pragma once #include "adc_math.h" -#endif /* ADC_INPUTS_H_ */ diff --git a/simulator/simulator/boards.h b/simulator/simulator/boards.h index 1f39606f55..b930a769ab 100644 --- a/simulator/simulator/boards.h +++ b/simulator/simulator/boards.h @@ -1,6 +1,5 @@ -#ifndef BOARDS_FT_H_ -#define BOARDS_FT_H_ +#pragma once #define ADC_LOGIC_TPS 0 #define ADC_LOGIC_AFR 0 @@ -52,4 +51,3 @@ extern "C" } #endif /* __cplusplus */ -#endif /* BOARDS_FT_H_ */ diff --git a/simulator/simulator/efifeatures.h b/simulator/simulator/efifeatures.h index d1499e4d3f..1f7ec3f885 100644 --- a/simulator/simulator/efifeatures.h +++ b/simulator/simulator/efifeatures.h @@ -5,8 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef EFIFEATURES_H_ -#define EFIFEATURES_H_ +#pragma once #include "rusefi_true.h" @@ -147,6 +146,3 @@ #define EFI_BOARD_TEST FALSE #define EFI_JOYSTICK FALSE - - -#endif /* EFIFEATURES_H_ */ diff --git a/simulator/simulator/framework.h b/simulator/simulator/framework.h index dc5d42c520..558cc3de7f 100644 --- a/simulator/simulator/framework.h +++ b/simulator/simulator/framework.h @@ -4,8 +4,8 @@ * @date Sep 25, 2014 * @author Andrey Belomutskiy, (c) 2012-2014 */ -#ifndef FRAMEWORK_H_ -#define FRAMEWORK_H_ + +#pragma once #ifdef __cplusplus extern "C" @@ -18,4 +18,3 @@ void initTestStream(BaseChannel *ts); } #endif /* __cplusplus */ -#endif /* FRAMEWORK_H_ */ diff --git a/simulator/simulator/global.h b/simulator/simulator/global.h index 21be30174d..dc1a498826 100644 --- a/simulator/simulator/global.h +++ b/simulator/simulator/global.h @@ -7,8 +7,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef GLOBAL_H_ -#define GLOBAL_H_ +#pragma once #include @@ -78,6 +77,3 @@ void applyNewConfiguration(void); #define hal_lld_get_counter_value() 0 -#endif /* GLOBAL_H_ */ - - diff --git a/simulator/simulator/os_access.h b/simulator/simulator/os_access.h index 2a60d97240..dcfd7d8648 100644 --- a/simulator/simulator/os_access.h +++ b/simulator/simulator/os_access.h @@ -7,8 +7,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef OS_ACCESS_H_ -#define OS_ACCESS_H_ +#pragma once #ifdef __cplusplus extern "C" @@ -24,4 +23,3 @@ extern "C" #define HAS_OS_ACCESS -#endif /* OS_ACCESS_H_ */ diff --git a/simulator/simulator/rusEfiFunctionalTest.h b/simulator/simulator/rusEfiFunctionalTest.h index cd31068ece..94dcf83727 100644 --- a/simulator/simulator/rusEfiFunctionalTest.h +++ b/simulator/simulator/rusEfiFunctionalTest.h @@ -5,8 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef RUSEFIFUNCTIONALTEST_H_ -#define RUSEFIFUNCTIONALTEST_H_ +#pragma once #ifdef __cplusplus extern "C" @@ -20,5 +19,3 @@ void logMsg(const char *fmt, ...); #ifdef __cplusplus } #endif /* __cplusplus */ - -#endif /* RUSEFIFUNCTIONALTEST_H_ */ From 75d94171315c836279350cabe20a1154fee11c94 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Feb 2020 00:37:36 -0500 Subject: [PATCH 017/171] miata vvt trigger decoding is broken #1145 --- .../trigger/decoders/trigger_mazda.cpp | 2 + unit_tests/tests/test_symmetrical_crank.cpp | 67 +++++++++++++++++++ unit_tests/tests/tests.mk | 1 + 3 files changed, 70 insertions(+) create mode 100644 unit_tests/tests/test_symmetrical_crank.cpp diff --git a/firmware/controllers/trigger/decoders/trigger_mazda.cpp b/firmware/controllers/trigger/decoders/trigger_mazda.cpp index 9a4f48dfa6..7356d38ec4 100644 --- a/firmware/controllers/trigger/decoders/trigger_mazda.cpp +++ b/firmware/controllers/trigger/decoders/trigger_mazda.cpp @@ -95,7 +95,9 @@ void initializeMazdaMiataNb2Crank(TriggerWaveform *s) { s->tdcPosition = 60 + 655; s->setTriggerSynchronizationGap2(0.35f, 0.98f); + // 384 s->addEvent720(o + 4 * 56.0f, T_PRIMARY, TV_FALL); + // 400 s->addEvent720(o + 4 * 60.0f, T_PRIMARY, TV_RISE); s->addEvent720(o + 4 * 136.0f, T_PRIMARY, TV_FALL); s->addEvent720(o + 4 * 140.0f, T_PRIMARY, TV_RISE); diff --git a/unit_tests/tests/test_symmetrical_crank.cpp b/unit_tests/tests/test_symmetrical_crank.cpp new file mode 100644 index 0000000000..26c49ff9ce --- /dev/null +++ b/unit_tests/tests/test_symmetrical_crank.cpp @@ -0,0 +1,67 @@ +/* + * @file test_symmetrical_crank.cpp + * + * @date Feb 14, 2020 + * @author Andrey Belomutskiy, (c) 2012-2020 + */ + +#include "engine_test_helper.h" + +TEST(engine, testSymmetricalCrank) { + + WITH_ENGINE_TEST_HELPER(MAZDA_MIATA_2003); + + float x = 0.02; + + ASSERT_EQ( 0, GET_RPM()) << "RPM#0"; + + eth.fireFall(x * 384); + eth.fireRise(x * 16); + eth.fireFall(x * 304); + eth.fireRise(x * 16); + ASSERT_EQ( 0, GET_RPM()) << "RPM#1"; + + eth.fireFall(x * 384); + eth.fireRise(x * 16); + eth.fireFall(x * 304); + eth.fireRise(x * 16); + ASSERT_EQ( 0, GET_RPM()) << "RPM#2"; + + eth.fireFall(x * 384); + eth.fireRise(x * 16); + ASSERT_EQ( 549, GET_RPM()) << "RPM#2.5"; + eth.fireFall(x * 304); + eth.fireRise(x * 16); + ASSERT_EQ( 549, GET_RPM()) << "RPM#3"; + + eth.fireFall(x * 384); + eth.fireRise(x * 16); + eth.fireFall(x * 304); + eth.fireRise(x * 16); + ASSERT_EQ( 549, GET_RPM()) << "RPM#4"; + + eth.fireFall(x * 384); + eth.fireRise(x * 16); + eth.fireFall(x * 304); + eth.fireRise(x * 16); + ASSERT_EQ( 549, GET_RPM()) << "RPM#5"; + + eth.fireFall(x * 384); + eth.fireRise(x * 16); + eth.fireFall(x * 304); + eth.fireRise(x * 16); + ASSERT_EQ( 549, GET_RPM()) << "RPM#6"; + + eth.fireFall(x * 384); + eth.fireRise(x * 16); + eth.fireFall(x * 304); + eth.fireRise(x * 16); + ASSERT_EQ( 374, GET_RPM()) << "RPM#7"; + + eth.fireFall(x * 384); + eth.fireRise(x * 16); + eth.fireFall(x * 304); + eth.fireRise(x * 16); + ASSERT_EQ( 374, GET_RPM()) << "RPM#8"; + +} diff --git a/unit_tests/tests/tests.mk b/unit_tests/tests/tests.mk index f3f3b35a19..61e1d94923 100644 --- a/unit_tests/tests/tests.mk +++ b/unit_tests/tests/tests.mk @@ -11,6 +11,7 @@ TESTS_SRC_CPP = \ tests/test_miata_na6_real_cranking.cpp \ tests/test_fasterEngineSpinningUp.cpp \ tests/test_dwell_corner_case_issue_796.cpp \ + tests/test_symmetrical_crank.cpp \ tests/test_idle_controller.cpp \ tests/test_trigger_decoder.cpp \ tests/test_trigger_noiseless.cpp \ From 97900525965372cdd8edfb939bfe426764025d26 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Feb 2020 09:33:29 -0500 Subject: [PATCH 018/171] miata vvt trigger decoding is broken #1145 --- unit_tests/tests/test_symmetrical_crank.cpp | 67 +++++++-------------- 1 file changed, 21 insertions(+), 46 deletions(-) diff --git a/unit_tests/tests/test_symmetrical_crank.cpp b/unit_tests/tests/test_symmetrical_crank.cpp index 26c49ff9ce..6135694e35 100644 --- a/unit_tests/tests/test_symmetrical_crank.cpp +++ b/unit_tests/tests/test_symmetrical_crank.cpp @@ -7,61 +7,36 @@ #include "engine_test_helper.h" +static void postFourEvents(EngineTestHelper *eth, float mult) { + eth->fireFall(mult * 384); + eth->fireRise(mult * 16); + eth->fireFall(mult * 304); + eth->fireRise(mult * 16); +} + TEST(engine, testSymmetricalCrank) { WITH_ENGINE_TEST_HELPER(MAZDA_MIATA_2003); + // this test is not about isFasterEngineSpinUpEnabled so let's disable it to simplify things + CONFIG(isFasterEngineSpinUpEnabled) = false; + float x = 0.02; ASSERT_EQ( 0, GET_RPM()) << "RPM#0"; - eth.fireFall(x * 384); - eth.fireRise(x * 16); - eth.fireFall(x * 304); - eth.fireRise(x * 16); - ASSERT_EQ( 0, GET_RPM()) << "RPM#1"; + for (int i = 0; i < 8 ; i++) { + postFourEvents(ð, x); + ASSERT_EQ( 0, GET_RPM()) << "RPM#0"; + } - eth.fireFall(x * 384); - eth.fireRise(x * 16); - eth.fireFall(x * 304); - eth.fireRise(x * 16); - ASSERT_EQ( 0, GET_RPM()) << "RPM#2"; + x = 0.1; + postFourEvents(ð, x); + ASSERT_EQ( 1041, GET_RPM()) << "RPM#11"; - eth.fireFall(x * 384); - eth.fireRise(x * 16); - ASSERT_EQ( 549, GET_RPM()) << "RPM#2.5"; - eth.fireFall(x * 304); - eth.fireRise(x * 16); - ASSERT_EQ( 549, GET_RPM()) << "RPM#3"; - - eth.fireFall(x * 384); - eth.fireRise(x * 16); - eth.fireFall(x * 304); - eth.fireRise(x * 16); - ASSERT_EQ( 549, GET_RPM()) << "RPM#4"; - - eth.fireFall(x * 384); - eth.fireRise(x * 16); - eth.fireFall(x * 304); - eth.fireRise(x * 16); - ASSERT_EQ( 549, GET_RPM()) << "RPM#5"; - - eth.fireFall(x * 384); - eth.fireRise(x * 16); - eth.fireFall(x * 304); - eth.fireRise(x * 16); - ASSERT_EQ( 549, GET_RPM()) << "RPM#6"; - - eth.fireFall(x * 384); - eth.fireRise(x * 16); - eth.fireFall(x * 304); - eth.fireRise(x * 16); - ASSERT_EQ( 374, GET_RPM()) << "RPM#7"; - - eth.fireFall(x * 384); - eth.fireRise(x * 16); - eth.fireFall(x * 304); - eth.fireRise(x * 16); - ASSERT_EQ( 374, GET_RPM()) << "RPM#8"; + postFourEvents(ð, x); + ASSERT_EQ( 1041, GET_RPM()) << "RPM#11"; + postFourEvents(ð, x); + ASSERT_EQ( 1041, GET_RPM()) << "RPM#11"; } From 243a532f84855806a14787ae8562d0bdc1a292fc Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Feb 2020 10:49:22 -0500 Subject: [PATCH 019/171] miata vvt trigger decoding is broken #1145 --- unit_tests/tests/test_symmetrical_crank.cpp | 31 ++++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/unit_tests/tests/test_symmetrical_crank.cpp b/unit_tests/tests/test_symmetrical_crank.cpp index 6135694e35..e0f726929f 100644 --- a/unit_tests/tests/test_symmetrical_crank.cpp +++ b/unit_tests/tests/test_symmetrical_crank.cpp @@ -21,22 +21,39 @@ TEST(engine, testSymmetricalCrank) { // this test is not about isFasterEngineSpinUpEnabled so let's disable it to simplify things CONFIG(isFasterEngineSpinUpEnabled) = false; - float x = 0.02; + + ASSERT_EQ(FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR, engine->getOperationMode(PASS_ENGINE_PARAMETER_SIGNATURE)); + + float mult = 0.02; ASSERT_EQ( 0, GET_RPM()) << "RPM#0"; - for (int i = 0; i < 8 ; i++) { - postFourEvents(ð, x); + postFourEvents(ð, mult); + ASSERT_EQ( 0, GET_RPM()) << "RPM#0"; + + eth.fireFall(mult * 384); + eth.fireRise(mult * 16); + eth.fireFall(mult * 304); + ASSERT_FALSE(engine->triggerCentral.triggerState.shaft_is_synchronized); + eth.fireRise(mult * 16); + ASSERT_TRUE(engine->triggerCentral.triggerState.shaft_is_synchronized); + + ASSERT_EQ( 0, GET_RPM()) << "RPM#0"; + + + + for (int i = 0; i < 6 ; i++) { + postFourEvents(ð, mult); ASSERT_EQ( 0, GET_RPM()) << "RPM#0"; } - x = 0.1; - postFourEvents(ð, x); + mult = 0.1; + postFourEvents(ð, mult); ASSERT_EQ( 1041, GET_RPM()) << "RPM#11"; - postFourEvents(ð, x); + postFourEvents(ð, mult); ASSERT_EQ( 1041, GET_RPM()) << "RPM#11"; - postFourEvents(ð, x); + postFourEvents(ð, mult); ASSERT_EQ( 1041, GET_RPM()) << "RPM#11"; } From e9a3b218c4ae5dae51cdd7a5db389b2b8649e7b1 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Feb 2020 13:02:27 -0500 Subject: [PATCH 020/171] miata vvt trigger decoding is broken #1145 --- firmware/controllers/engine_controller.cpp | 2 +- .../controllers/trigger/trigger_central.cpp | 4 +--- .../controllers/trigger/trigger_central.h | 3 +++ unit_tests/tests/test_cam_vtt_input.cpp | 24 ++++++++++++++----- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 2aa0d96e54..b3774e5652 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -843,6 +843,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200211; + return 201200214; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/controllers/trigger/trigger_central.cpp b/firmware/controllers/trigger/trigger_central.cpp index 4cbd508835..09654f64ce 100644 --- a/firmware/controllers/trigger/trigger_central.cpp +++ b/firmware/controllers/trigger/trigger_central.cpp @@ -361,9 +361,7 @@ void TriggerCentral::handleShaftSignal(trigger_event_e signal, efitick_t timesta // That's easy - trigger cycle matches engine cycle triggerIndexForListeners = triggerState.getCurrentIndex(); } else { - // todo: should this logic reuse getCycleDuration? - bool isCrankDriven = operationMode == FOUR_STROKE_CRANK_SENSOR || operationMode == FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR; - int crankDivider = isCrankDriven ? 2 : 4; + int crankDivider = operationMode == FOUR_STROKE_CRANK_SENSOR ? 2 : SYMMETRICAL_CRANK_SENSOR_DIVIDER; int crankInternalIndex = triggerState.getTotalRevolutionCounter() % crankDivider; diff --git a/firmware/controllers/trigger/trigger_central.h b/firmware/controllers/trigger/trigger_central.h index c3c578bca7..0587a3a023 100644 --- a/firmware/controllers/trigger/trigger_central.h +++ b/firmware/controllers/trigger/trigger_central.h @@ -12,6 +12,8 @@ #include "trigger_decoder.h" #include "trigger_central_generated.h" + + class Engine; typedef void (*ShaftPositionListener)(trigger_event_e signal, uint32_t index, efitick_t edgeTimestamp DECLARE_ENGINE_PARAMETER_SUFFIX); @@ -79,3 +81,4 @@ void onConfigurationChangeTriggerCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE); bool checkIfTriggerConfigChanged(DECLARE_ENGINE_PARAMETER_SIGNATURE); bool isTriggerConfigChanged(DECLARE_ENGINE_PARAMETER_SIGNATURE); +#define SYMMETRICAL_CRANK_SENSOR_DIVIDER 4 diff --git a/unit_tests/tests/test_cam_vtt_input.cpp b/unit_tests/tests/test_cam_vtt_input.cpp index fddfeb1c3e..1add03ace1 100644 --- a/unit_tests/tests/test_cam_vtt_input.cpp +++ b/unit_tests/tests/test_cam_vtt_input.cpp @@ -123,12 +123,24 @@ TEST(sensors, testNB2CamInput) { eth.setTriggerType(TT_ONE PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_EQ( 0, GET_RPM()) << "testNB2CamInput RPM"; - for (int i = 0; i < 5;i++) { - eth.fireRise(50); + for (int i = 0; i < 7;i++) { + eth.fireRise(25); + ASSERT_EQ( 0, GET_RPM()) << "testNB2CamInput RPM"; } + eth.fireRise(25); + // first time we have RPM ASSERT_EQ(1200, GET_RPM()) << "testNB2CamInput RPM"; - // this would be ignored since we only consude one kind the other kind of fronts here + int totalRevolutionCountBeforeVvtSync = 10; + // need to be out of VVT sync to see VVT sync in action + eth.fireRise(25); + eth.fireRise(25); + ASSERT_EQ(totalRevolutionCountBeforeVvtSync, engine->triggerCentral.triggerState.getTotalRevolutionCounter()); + ASSERT_TRUE((totalRevolutionCountBeforeVvtSync % SYMMETRICAL_CRANK_SENSOR_DIVIDER) != 0); + + eth.moveTimeForwardUs(MS2US(3)); // shifting VVT phase a few anlges + + // this would be ignored since we only consume the other kind of fronts here hwHandleVvtCamSignal(TV_FALL, getTimeNowNt() PASS_ENGINE_PARAMETER_SUFFIX); eth.moveTimeForwardUs(MS2US(20)); // this would be be first VVT signal - gap duration would be calculated against 'DEEP_IN_THE_PAST_SECONDS' initial value @@ -139,13 +151,13 @@ TEST(sensors, testNB2CamInput) { hwHandleVvtCamSignal(TV_RISE, getTimeNowNt() PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_FLOAT_EQ(0, engine->triggerCentral.getVVTPosition()); - ASSERT_EQ(5, engine->triggerCentral.triggerState.getTotalRevolutionCounter()); + ASSERT_EQ(totalRevolutionCountBeforeVvtSync, engine->triggerCentral.triggerState.getTotalRevolutionCounter()); eth.moveTimeForwardUs(MS2US(130)); // this third important front would give us first comparison between two real gaps hwHandleVvtCamSignal(TV_RISE, getTimeNowNt() PASS_ENGINE_PARAMETER_SUFFIX); - ASSERT_NEAR(-46, engine->triggerCentral.getVVTPosition(), EPS3D); + ASSERT_NEAR(-67.6, engine->triggerCentral.getVVTPosition(), EPS3D); // actually position based on VVT! - ASSERT_EQ(8, engine->triggerCentral.triggerState.getTotalRevolutionCounter()); + ASSERT_EQ(totalRevolutionCountBeforeVvtSync + 2, engine->triggerCentral.triggerState.getTotalRevolutionCounter()); } From 1ac264acc07c147de3255169963fe19ea8e12100 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Feb 2020 22:27:37 -0500 Subject: [PATCH 021/171] unit test refactoring --- .../test/ConfigFieldParserIssue1057Test.java | 10 +--------- .../com/rusefi/test/ConfigFieldParserTest.java | 16 ++-------------- .../rusefi/test/TestJavaFieldsConsumer.java | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 23 deletions(-) create mode 100644 java_tools/configuration_definition/src/com/rusefi/test/TestJavaFieldsConsumer.java diff --git a/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserIssue1057Test.java b/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserIssue1057Test.java index 61d06e81b8..d6c263e34f 100644 --- a/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserIssue1057Test.java +++ b/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserIssue1057Test.java @@ -15,15 +15,7 @@ public class ConfigFieldParserIssue1057Test { @Test public void testBitsPadding() throws IOException { ReaderState state = new ReaderState(); - JavaFieldsConsumer javaFieldsConsumer = new JavaFieldsConsumer(state) { - @Override - public void startFile() { - } - - @Override - public void endFile() { - } - }; + JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state); String inputString = "struct pid_s\nbit activateAuxPid1;\n" + "int fieldName;\n" + diff --git a/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserTest.java b/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserTest.java index b71c29e17b..bdc336aadb 100644 --- a/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserTest.java +++ b/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserTest.java @@ -45,7 +45,7 @@ public class ConfigFieldParserTest { ReaderState state = new ReaderState(); BufferedReader reader = new BufferedReader(new StringReader(test)); - JavaFieldsConsumer javaFieldsConsumer = createTestJavaConsumer(state); + JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state); state.readBufferedReader(reader, Arrays.asList(javaFieldsConsumer)); assertEquals(16, TypesHelper.getElementSize(state, "pid_s")); @@ -77,7 +77,7 @@ public class ConfigFieldParserTest { ""; BufferedReader reader = new BufferedReader(new StringReader(test)); - JavaFieldsConsumer javaFieldsConsumer = createTestJavaConsumer(state); + JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state); FsioSettingsConsumer fsioSettingsConsumer = new FsioSettingsConsumer(state) { @Override @@ -162,18 +162,6 @@ public class ConfigFieldParserTest { } } - private JavaFieldsConsumer createTestJavaConsumer(ReaderState state) { - return new JavaFieldsConsumer(state) { - @Override - public void startFile() { - } - - @Override - public void endFile() { - } - }; - } - @Test public void testParseLine() { ReaderState state = new ReaderState(); diff --git a/java_tools/configuration_definition/src/com/rusefi/test/TestJavaFieldsConsumer.java b/java_tools/configuration_definition/src/com/rusefi/test/TestJavaFieldsConsumer.java new file mode 100644 index 0000000000..5d4b53a687 --- /dev/null +++ b/java_tools/configuration_definition/src/com/rusefi/test/TestJavaFieldsConsumer.java @@ -0,0 +1,18 @@ +package com.rusefi.test; + +import com.rusefi.ReaderState; +import com.rusefi.output.JavaFieldsConsumer; + +public class TestJavaFieldsConsumer extends JavaFieldsConsumer { + public TestJavaFieldsConsumer(ReaderState state) { + super(state); + } + + @Override + public void startFile() { + } + + @Override + public void endFile() { + } +} From 7e02210cb870c1d0fd1674ad0e75242a3f465db3 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Feb 2020 22:44:59 -0500 Subject: [PATCH 022/171] adding flexibility --- .../com/rusefi/output/TSProjectConsumer.java | 12 +++-- .../src/com/rusefi/test/BitParsingTest.java | 50 +++++++++++++++++++ .../src/com/rusefi/util/LazyFile.java | 4 +- .../src/com/rusefi/util/Output.java | 9 ++++ 4 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java create mode 100644 java_tools/enum_to_string/src/com/rusefi/util/Output.java diff --git a/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java b/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java index ada71f1d87..0a61b7897a 100644 --- a/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java +++ b/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java @@ -2,6 +2,7 @@ package com.rusefi.output; import com.rusefi.*; import com.rusefi.util.LazyFile; +import com.rusefi.util.Output; import com.rusefi.util.SystemOut; import java.io.*; @@ -99,13 +100,17 @@ public class TSProjectConsumer implements ConfigurationConsumer { return tsPosition; } - private void writeTunerStudioFile(String tsPath, String fieldsSection) throws IOException { + protected void writeTunerStudioFile(String tsPath, String fieldsSection) throws IOException { TsFileContent tsContent = readTsFile(tsPath); SystemOut.println("Got " + tsContent.getPrefix().length() + "/" + tsContent.getPostfix().length() + " of " + TS_FILE_INPUT_NAME); // File.getPath() would eliminate potential separator at the end of the path String fileName = new File(tsPath).getPath() + File.separator + TS_FILE_OUTPUT_NAME; - LazyFile tsHeader = new LazyFile(fileName); + Output tsHeader = new LazyFile(fileName); + writeContent(fieldsSection, tsContent, tsHeader); + } + + protected void writeContent(String fieldsSection, TsFileContent tsContent, Output tsHeader) throws IOException { tsHeader.write(tsContent.getPrefix()); tsHeader.write("; " + CONFIG_DEFINITION_START + ConfigDefinition.EOL); @@ -184,8 +189,7 @@ public class TSProjectConsumer implements ConfigurationConsumer { } @Override - public void startFile() throws IOException { - + public void startFile() { } @Override diff --git a/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java b/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java new file mode 100644 index 0000000000..0662dc3508 --- /dev/null +++ b/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java @@ -0,0 +1,50 @@ +package com.rusefi.test; + +import com.rusefi.ReaderState; +import com.rusefi.TsFileContent; +import com.rusefi.output.JavaFieldsConsumer; +import com.rusefi.output.TSProjectConsumer; +import com.rusefi.util.Output; +import org.junit.Test; + +import java.io.*; +import java.util.Arrays; + +public class BitParsingTest { + @Test + public void testBitParser() throws IOException { + ReaderState state = new ReaderState(); + + String inputString = "struct pid_s\nbit activateAuxPid1;\n" + + "bit fieldName;\n" + + "end_struct\n"; + BufferedReader reader = new BufferedReader(new StringReader(inputString)); + + StringWriter sw = new StringWriter(); + + TSProjectConsumer javaFieldsConsumer = new TSProjectConsumer(new CharArrayWriter(), "", state) { + @Override + protected void writeTunerStudioFile(String tsPath, String fieldsSection) throws IOException { + writeContent(fieldsSection, new TsFileContent("", ""), createOutput(sw)); + } + }; + state.readBufferedReader(reader, Arrays.asList(javaFieldsConsumer)); + + System.out.printf("start[" + sw.toString() + "]end"); + + } + + private Output createOutput(StringWriter sw) { + return new Output() { + @Override + public void write(String line) { + sw.write(line); + } + + @Override + public void close() { + + } + }; + } +} diff --git a/java_tools/enum_to_string/src/com/rusefi/util/LazyFile.java b/java_tools/enum_to_string/src/com/rusefi/util/LazyFile.java index 2265c65cb7..88d6162385 100644 --- a/java_tools/enum_to_string/src/com/rusefi/util/LazyFile.java +++ b/java_tools/enum_to_string/src/com/rusefi/util/LazyFile.java @@ -8,7 +8,7 @@ import java.util.regex.Pattern; /** * This file would override file content only of content has changed, disregarding the magic tag line. */ -public class LazyFile { +public class LazyFile implements Output { public static final String LAZY_FILE_TAG = "was generated automatically by rusEfi tool "; private static final String PROPERTY_NAME = "rusefi.generator.lazyfile.enabled"; private static boolean ENABLED = Boolean.getBoolean(PROPERTY_NAME); @@ -26,12 +26,14 @@ public class LazyFile { this.filename = filename; } + @Override public void write(String line) { content.append(line); if (!line.contains(LAZY_FILE_TAG)) contentWithoutTag.append(line); } + @Override public void close() throws IOException { String fileContent = unifySpaces(readCurrentContent(filename)); String newContent = unifySpaces(contentWithoutTag.toString().trim()); diff --git a/java_tools/enum_to_string/src/com/rusefi/util/Output.java b/java_tools/enum_to_string/src/com/rusefi/util/Output.java new file mode 100644 index 0000000000..10b0a4f3a2 --- /dev/null +++ b/java_tools/enum_to_string/src/com/rusefi/util/Output.java @@ -0,0 +1,9 @@ +package com.rusefi.util; + +import java.io.IOException; + +public interface Output { + void write(String line); + + void close() throws IOException; +} From 64c83fa4cd0cee9e486a91c84a74a99babb4adf8 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Feb 2020 23:03:26 -0500 Subject: [PATCH 023/171] he owes me one now --- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 4 +-- firmware/tunerstudio/rusefi_frankenso.ini | 4 +-- firmware/tunerstudio/rusefi_kinetis.ini | 4 +-- firmware/tunerstudio/rusefi_microrusefi.ini | 4 +-- firmware/tunerstudio/rusefi_prometheus.ini | 4 +-- firmware/tunerstudio/rusefi_proteus.ini | 4 +-- java_tools/ConfigDefinition.jar | Bin 148447 -> 156307 bytes .../src/com/rusefi/ConfigField.java | 23 +++++++++++++++--- .../src/com/rusefi/ConfigStructure.java | 4 +-- .../src/com/rusefi/ReaderState.java | 10 +++++--- .../com/rusefi/output/TSProjectConsumer.java | 2 +- .../src/com/rusefi/test/BitParsingTest.java | 10 +++++--- 13 files changed, 50 insertions(+), 25 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 6f8105a82d..177b2c0f84 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -340,7 +340,7 @@ bit issue_294_27; bit issue_294_28; bit issue_294_29; bit issue_294_30; -bit issue_294_31; +bit issue_294_31,si_example,nada_example; int16_t tpsMin;Closed throttle. todo: extract these two fields into a structure\nSee also tps1_1AdcChannel\nset tps_min X;"ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 2ec110d43c..a10799af11 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:28 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:29 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 9dfd362add..c14e47984f 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:35 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:35 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index dd562c1ae6..b1eb9398df 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Feb 12 20:10:22 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Feb 14 23:02:42 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 1ff4961886..1003686ebc 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:31 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:32 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index d87b04a411..014eb6b25d 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:38 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:37 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index ae99dea994..7e9f09de44 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:41 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:40 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 29ee78d137b8d4089a1b1e8517cf5238821a6ea1..3fda580daca0761237d5b4ecb748c1095a42fab6 100644 GIT binary patch delta 49357 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 1 ? bitNameParts[1] : null; + String falseName = bitNameParts.length > 2 ? bitNameParts[2] : null; + + ConfigField bitField = new ConfigField(state, bitNameParts[0], comment, null, BOOLEAN_T, 0, null, false, false, null, -1, trueName, falseName); if (state.stack.isEmpty()) throw new IllegalStateException("Parent structure expected"); ConfigStructure structure = state.stack.peek(); @@ -210,7 +214,7 @@ public class ReaderState { structure.addC(cf); for (int i = 1; i <= cf.getArraySize(); i++) { ConfigField element = new ConfigField(state, cf.getName() + i, cf.getComment(), null, - cf.getType(), 1, cf.getTsInfo(), false, false, cf.getName(), i); + cf.getType(), 1, cf.getTsInfo(), false, false, cf.getName(), i, null, null); structure.addTs(element); } } else { diff --git a/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java b/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java index 0a61b7897a..14aa502e53 100644 --- a/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java +++ b/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java @@ -49,7 +49,7 @@ public class TSProjectConsumer implements ConfigurationConsumer { tsHeader.write("= bits, U32, "); tsHeader.write("\t" + tsPosition + ", ["); tsHeader.write(bitIndex + ":" + bitIndex); - tsHeader.write("], \"false\", \"true\""); + tsHeader.write("], \"" + configField.getFalseName() + "\", \"" + configField.getTrueName() + "\""); tsHeader.write(EOL); tsPosition += configField.getSize(next); diff --git a/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java b/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java index 0662dc3508..6bf20aa811 100644 --- a/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java +++ b/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java @@ -2,7 +2,6 @@ package com.rusefi.test; import com.rusefi.ReaderState; import com.rusefi.TsFileContent; -import com.rusefi.output.JavaFieldsConsumer; import com.rusefi.output.TSProjectConsumer; import com.rusefi.util.Output; import org.junit.Test; @@ -10,13 +9,16 @@ import org.junit.Test; import java.io.*; import java.util.Arrays; +import static org.junit.Assert.assertTrue; + public class BitParsingTest { @Test public void testBitParser() throws IOException { ReaderState state = new ReaderState(); - String inputString = "struct pid_s\nbit activateAuxPid1;\n" + - "bit fieldName;\n" + + String inputString = "struct pid_s\n" + + ReaderState.BIT + " fieldName\n" + + ReaderState.BIT + " fieldName2,si,nada;comment\n" + "end_struct\n"; BufferedReader reader = new BufferedReader(new StringReader(inputString)); @@ -32,6 +34,8 @@ public class BitParsingTest { System.out.printf("start[" + sw.toString() + "]end"); + assertTrue(sw.toString().contains("\"false\", \"true\"")); + assertTrue(sw.toString().contains("\"nada\", \"si\"")); } private Output createOutput(StringWriter sw) { From c4e1e1e928413b1a253d489f81289176c7db1fb3 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 15 Feb 2020 19:17:42 -0500 Subject: [PATCH 024/171] dreams about useFixedMsForCranking --- .../algo/engine_configuration_generated_structures.h | 6 +++--- .../kinetis/config/controllers/algo/rusefi_generated.h | 4 ++-- .../generated/engine_configuration_generated_structures.h | 6 +++--- firmware/controllers/generated/rusefi_generated.h | 4 ++-- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 5 +++-- firmware/tunerstudio/rusefi.input | 1 + firmware/tunerstudio/rusefi_frankenso.ini | 5 +++-- firmware/tunerstudio/rusefi_kinetis.ini | 5 +++-- firmware/tunerstudio/rusefi_microrusefi.ini | 5 +++-- firmware/tunerstudio/rusefi_prometheus.ini | 5 +++-- firmware/tunerstudio/rusefi_proteus.ini | 5 +++-- .../models/src/com/rusefi/config/generated/Fields.java | 8 ++++---- 13 files changed, 34 insertions(+), 27 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index f083369f9f..dcc5b34468 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Feb 04 00:55:30 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Feb 15 19:17:00 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -622,7 +622,7 @@ struct engine_configuration_s { bool antiLagEnabled : 1; /** offset 76 bit 23 */ - bool issue_294_24 : 1; + bool useFixedMsForCranking : 1; /** offset 76 bit 24 */ bool issue_294_25 : 1; @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Feb 04 00:55:30 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Feb 15 19:17:00 EST 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 7656defff2..dd4cb62c6e 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1359,8 +1359,6 @@ #define isMapAveragingEnabled_offset_hex 5c4 #define isSdCardEnabled_offset 744 #define isSdCardEnabled_offset_hex 2e8 -#define issue_294_24_offset 76 -#define issue_294_24_offset_hex 4c #define issue_294_25_offset 76 #define issue_294_25_offset_hex 4c #define issue_294_26_offset 76 @@ -2176,6 +2174,8 @@ #define useETBforIdleControl_offset_hex 2e8 #define useFixedBaroCorrFromMap_offset 1476 #define useFixedBaroCorrFromMap_offset_hex 5c4 +#define useFixedMsForCranking_offset 76 +#define useFixedMsForCranking_offset_hex 4c #define useFSIO10ForServo3_offset 1464 #define useFSIO10ForServo3_offset_hex 5b8 #define useFSIO11ForServo4_offset 1464 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 8768b8a7ed..97f70e5910 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 00:55:12 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:46 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -622,7 +622,7 @@ struct engine_configuration_s { bool antiLagEnabled : 1; /** offset 76 bit 23 */ - bool issue_294_24 : 1; + bool useFixedMsForCranking : 1; /** offset 76 bit 24 */ bool issue_294_25 : 1; @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 00:55:12 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:46 EST 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 85f8585ee0..2f08aa77a4 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1359,8 +1359,6 @@ #define isMapAveragingEnabled_offset_hex 5c4 #define isSdCardEnabled_offset 744 #define isSdCardEnabled_offset_hex 2e8 -#define issue_294_24_offset 76 -#define issue_294_24_offset_hex 4c #define issue_294_25_offset 76 #define issue_294_25_offset_hex 4c #define issue_294_26_offset 76 @@ -2176,6 +2174,8 @@ #define useETBforIdleControl_offset_hex 2e8 #define useFixedBaroCorrFromMap_offset 1476 #define useFixedBaroCorrFromMap_offset_hex 5c4 +#define useFixedMsForCranking_offset 76 +#define useFixedMsForCranking_offset_hex 4c #define useFSIO10ForServo3_offset 1464 #define useFSIO10ForServo3_offset_hex 5b8 #define useFSIO11ForServo4_offset 1464 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 177b2c0f84..ac26fb35a3 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -333,7 +333,7 @@ bit absoluteFuelPressure;+If your fuel regulator does not have vacuum line bit launchControlEnabled; bit rollingLaunchEnabled; bit antiLagEnabled; -bit issue_294_24; +bit useFixedMsForCranking,Fixed,Fuel Map; bit issue_294_25; bit issue_294_26; bit issue_294_27; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index a10799af11..e7dd6a0031 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:29 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:46 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - issue_294_24 = bits, U32, 76, [23:23], "false", "true" + useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3474,6 +3474,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" + field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} field = "Base fuel pulse width", cranking_baseFuel dialog = crankingIAC, "IAC" diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 03b434576d..a1d4638725 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2350,6 +2350,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" + field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} field = "Base fuel pulse width", cranking_baseFuel dialog = crankingIAC, "IAC" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index c14e47984f..9a0a5b2db4 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:35 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:52 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - issue_294_24 = bits, U32, 76, [23:23], "false", "true" + useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3474,6 +3474,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" + field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} field = "Base fuel pulse width", cranking_baseFuel dialog = crankingIAC, "IAC" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index b1eb9398df..3e2e997a99 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Feb 14 23:02:42 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Feb 15 19:17:00 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - issue_294_24 = bits, U32, 76, [23:23], "false", "true" + useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3474,6 +3474,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" + field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} field = "Base fuel pulse width", cranking_baseFuel dialog = crankingIAC, "IAC" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 1003686ebc..b9ea392a0e 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:32 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:49 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - issue_294_24 = bits, U32, 76, [23:23], "false", "true" + useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3457,6 +3457,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" + field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} field = "Base fuel pulse width", cranking_baseFuel dialog = crankingIAC, "IAC" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 014eb6b25d..97661282db 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:37 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:54 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - issue_294_24 = bits, U32, 76, [23:23], "false", "true" + useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3470,6 +3470,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" + field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} field = "Base fuel pulse width", cranking_baseFuel dialog = crankingIAC, "IAC" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 7e9f09de44..ba613db936 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:40 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:57 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - issue_294_24 = bits, U32, 76, [23:23], "false", "true" + useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3474,6 +3474,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" + field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} field = "Base fuel pulse width", cranking_baseFuel dialog = crankingIAC, "IAC" diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 35a54f9a26..18b3e3078e 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 00:55:12 EST 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:46 EST 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -900,7 +900,6 @@ public class Fields { public static final int isManualSpinningMode_offset = 1476; public static final int isMapAveragingEnabled_offset = 1476; public static final int isSdCardEnabled_offset = 744; - public static final int issue_294_24_offset = 76; public static final int issue_294_25_offset = 76; public static final int issue_294_26_offset = 76; public static final int issue_294_27_offset = 76; @@ -1422,6 +1421,7 @@ public class Fields { public static final int useConstantDwellDuringCranking_offset = 1464; public static final int useETBforIdleControl_offset = 744; public static final int useFixedBaroCorrFromMap_offset = 1476; + public static final int useFixedMsForCranking_offset = 76; public static final int useFSIO10ForServo3_offset = 1464; public static final int useFSIO11ForServo4_offset = 1464; public static final int useFSIO12ForIdleOffset_offset = 1464; @@ -1505,7 +1505,7 @@ public class Fields { public static final Field LAUNCHCONTROLENABLED = Field.create("LAUNCHCONTROLENABLED", 76, FieldType.BIT, 20); public static final Field ROLLINGLAUNCHENABLED = Field.create("ROLLINGLAUNCHENABLED", 76, FieldType.BIT, 21); public static final Field ANTILAGENABLED = Field.create("ANTILAGENABLED", 76, FieldType.BIT, 22); - public static final Field ISSUE_294_24 = Field.create("ISSUE_294_24", 76, FieldType.BIT, 23); + public static final Field USEFIXEDMSFORCRANKING = Field.create("USEFIXEDMSFORCRANKING", 76, FieldType.BIT, 23); public static final Field ISSUE_294_25 = Field.create("ISSUE_294_25", 76, FieldType.BIT, 24); public static final Field ISSUE_294_26 = Field.create("ISSUE_294_26", 76, FieldType.BIT, 25); public static final Field ISSUE_294_27 = Field.create("ISSUE_294_27", 76, FieldType.BIT, 26); @@ -2413,7 +2413,7 @@ public class Fields { LAUNCHCONTROLENABLED, ROLLINGLAUNCHENABLED, ANTILAGENABLED, - ISSUE_294_24, + USEFIXEDMSFORCRANKING, ISSUE_294_25, ISSUE_294_26, ISSUE_294_27, From d5faa3b517730511325a640c58b6fefcf88b082d Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 16 Feb 2020 16:13:15 -0500 Subject: [PATCH 025/171] making migration seamless on useRunningMathForCranking --- .../algo/engine_configuration_generated_structures.h | 6 +++--- .../kinetis/config/controllers/algo/rusefi_generated.h | 4 ++-- .../generated/engine_configuration_generated_structures.h | 6 +++--- firmware/controllers/generated/rusefi_generated.h | 4 ++-- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 8 ++++---- firmware/tunerstudio/rusefi.input | 4 ++-- firmware/tunerstudio/rusefi_frankenso.ini | 8 ++++---- firmware/tunerstudio/rusefi_kinetis.ini | 8 ++++---- firmware/tunerstudio/rusefi_microrusefi.ini | 8 ++++---- firmware/tunerstudio/rusefi_prometheus.ini | 8 ++++---- firmware/tunerstudio/rusefi_proteus.ini | 8 ++++---- .../models/src/com/rusefi/config/generated/Fields.java | 8 ++++---- 13 files changed, 41 insertions(+), 41 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index dcc5b34468..4fa221b2d4 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Feb 15 19:17:00 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Feb 16 16:11:47 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -622,7 +622,7 @@ struct engine_configuration_s { bool antiLagEnabled : 1; /** offset 76 bit 23 */ - bool useFixedMsForCranking : 1; + bool useRunningMathForCranking : 1; /** offset 76 bit 24 */ bool issue_294_25 : 1; @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Feb 15 19:17:00 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Feb 16 16:11:47 EST 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index dd4cb62c6e..8b87720c44 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -2174,8 +2174,6 @@ #define useETBforIdleControl_offset_hex 2e8 #define useFixedBaroCorrFromMap_offset 1476 #define useFixedBaroCorrFromMap_offset_hex 5c4 -#define useFixedMsForCranking_offset 76 -#define useFixedMsForCranking_offset_hex 4c #define useFSIO10ForServo3_offset 1464 #define useFSIO10ForServo3_offset_hex 5b8 #define useFSIO11ForServo4_offset 1464 @@ -2218,6 +2216,8 @@ #define useNoiselessTriggerDecoder_offset_hex 2e8 #define useOnlyRisingEdgeForTrigger_offset 1476 #define useOnlyRisingEdgeForTrigger_offset_hex 5c4 +#define useRunningMathForCranking_offset 76 +#define useRunningMathForCranking_offset_hex 4c #define useSeparateAdvanceForCranking_offset 1476 #define useSeparateAdvanceForCranking_offset_hex 5c4 #define useSeparateAdvanceForIdle_offset 1476 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 97f70e5910..adfd3d482e 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:46 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:34 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -622,7 +622,7 @@ struct engine_configuration_s { bool antiLagEnabled : 1; /** offset 76 bit 23 */ - bool useFixedMsForCranking : 1; + bool useRunningMathForCranking : 1; /** offset 76 bit 24 */ bool issue_294_25 : 1; @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:46 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:34 EST 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 2f08aa77a4..70bc613b86 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -2174,8 +2174,6 @@ #define useETBforIdleControl_offset_hex 2e8 #define useFixedBaroCorrFromMap_offset 1476 #define useFixedBaroCorrFromMap_offset_hex 5c4 -#define useFixedMsForCranking_offset 76 -#define useFixedMsForCranking_offset_hex 4c #define useFSIO10ForServo3_offset 1464 #define useFSIO10ForServo3_offset_hex 5b8 #define useFSIO11ForServo4_offset 1464 @@ -2218,6 +2216,8 @@ #define useNoiselessTriggerDecoder_offset_hex 2e8 #define useOnlyRisingEdgeForTrigger_offset 1476 #define useOnlyRisingEdgeForTrigger_offset_hex 5c4 +#define useRunningMathForCranking_offset 76 +#define useRunningMathForCranking_offset_hex 4c #define useSeparateAdvanceForCranking_offset 1476 #define useSeparateAdvanceForCranking_offset_hex 5c4 #define useSeparateAdvanceForIdle_offset 1476 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index ac26fb35a3..65e1113a71 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -333,7 +333,7 @@ bit absoluteFuelPressure;+If your fuel regulator does not have vacuum line bit launchControlEnabled; bit rollingLaunchEnabled; bit antiLagEnabled; -bit useFixedMsForCranking,Fixed,Fuel Map; +bit useRunningMathForCranking,Fixed,Fuel Map; bit issue_294_25; bit issue_294_26; bit issue_294_27; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index e7dd6a0031..716d1ba0db 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:46 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:34 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3474,8 +3474,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" - field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} - field = "Base fuel pulse width", cranking_baseFuel + field = "Fuel Source For Cranking", useRunningMathForCranking + field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index a1d4638725..d8e98b4524 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2350,8 +2350,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" - field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} - field = "Base fuel pulse width", cranking_baseFuel + field = "Fuel Source For Cranking", useRunningMathForCranking + field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 9a0a5b2db4..a83cfb146e 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:52 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:39 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3474,8 +3474,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" - field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} - field = "Base fuel pulse width", cranking_baseFuel + field = "Fuel Source For Cranking", useRunningMathForCranking + field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 3e2e997a99..c8d183620b 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Feb 15 19:17:00 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Feb 16 16:11:47 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3474,8 +3474,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" - field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} - field = "Base fuel pulse width", cranking_baseFuel + field = "Fuel Source For Cranking", useRunningMathForCranking + field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index b9ea392a0e..9e28fdec18 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:49 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:37 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3457,8 +3457,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" - field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} - field = "Base fuel pulse width", cranking_baseFuel + field = "Fuel Source For Cranking", useRunningMathForCranking + field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 97661282db..bfa2c593f8 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:54 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:42 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3470,8 +3470,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" - field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} - field = "Base fuel pulse width", cranking_baseFuel + field = "Fuel Source For Cranking", useRunningMathForCranking + field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index ba613db936..3ac877843b 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:57 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:45 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useFixedMsForCranking = bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" @@ -3474,8 +3474,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingFuel, "Fuel" field = "Injection mode", crankingInjectionMode field = "!Value '1' is currently recommended" - field = "Fuel Source For Cranking", cranking_baseFuel, {useFixedMsForCranking == 1} - field = "Base fuel pulse width", cranking_baseFuel + field = "Fuel Source For Cranking", useRunningMathForCranking + field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 18b3e3078e..3d279f841d 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Feb 15 19:16:46 EST 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:34 EST 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1421,7 +1421,6 @@ public class Fields { public static final int useConstantDwellDuringCranking_offset = 1464; public static final int useETBforIdleControl_offset = 744; public static final int useFixedBaroCorrFromMap_offset = 1476; - public static final int useFixedMsForCranking_offset = 76; public static final int useFSIO10ForServo3_offset = 1464; public static final int useFSIO11ForServo4_offset = 1464; public static final int useFSIO12ForIdleOffset_offset = 1464; @@ -1443,6 +1442,7 @@ public class Fields { public static final int useLinearIatSensor_offset = 1464; public static final int useNoiselessTriggerDecoder_offset = 744; public static final int useOnlyRisingEdgeForTrigger_offset = 1476; + public static final int useRunningMathForCranking_offset = 76; public static final int useSeparateAdvanceForCranking_offset = 1476; public static final int useSeparateAdvanceForIdle_offset = 1476; public static final int useSeparateVeForIdle_offset = 1476; @@ -1505,7 +1505,7 @@ public class Fields { public static final Field LAUNCHCONTROLENABLED = Field.create("LAUNCHCONTROLENABLED", 76, FieldType.BIT, 20); public static final Field ROLLINGLAUNCHENABLED = Field.create("ROLLINGLAUNCHENABLED", 76, FieldType.BIT, 21); public static final Field ANTILAGENABLED = Field.create("ANTILAGENABLED", 76, FieldType.BIT, 22); - public static final Field USEFIXEDMSFORCRANKING = Field.create("USEFIXEDMSFORCRANKING", 76, FieldType.BIT, 23); + public static final Field USERUNNINGMATHFORCRANKING = Field.create("USERUNNINGMATHFORCRANKING", 76, FieldType.BIT, 23); public static final Field ISSUE_294_25 = Field.create("ISSUE_294_25", 76, FieldType.BIT, 24); public static final Field ISSUE_294_26 = Field.create("ISSUE_294_26", 76, FieldType.BIT, 25); public static final Field ISSUE_294_27 = Field.create("ISSUE_294_27", 76, FieldType.BIT, 26); @@ -2413,7 +2413,7 @@ public class Fields { LAUNCHCONTROLENABLED, ROLLINGLAUNCHENABLED, ANTILAGENABLED, - USEFIXEDMSFORCRANKING, + USERUNNINGMATHFORCRANKING, ISSUE_294_25, ISSUE_294_26, ISSUE_294_27, From ca1d44ae2cb87760d6d74e449b2b290228f3aa2c Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sun, 16 Feb 2020 16:59:33 -0500 Subject: [PATCH 026/171] vbatt MRE happiness --- firmware/config/boards/microrusefi/board_configuration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 02d51d1149..300a911dfd 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -70,7 +70,7 @@ static void setupVbatt() { // set vbatt_divider 8.16 // R139=39k high side/R141=10k low side multiplied by above analogInputDividerCoefficient = 8.166666f - engineConfiguration->vbattDividerCoeff = (49.0f / 10.0f) * engineConfiguration->analogInputDividerCoefficient; + engineConfiguration->vbattDividerCoeff = (49.0f / 10.0f); engineConfiguration->vbattAdcChannel = EFI_ADC_11; engineConfiguration->adcVcc = 3.29f; From 269050d19733d34970220f0e93b18a7069e2361a Mon Sep 17 00:00:00 2001 From: Fabien Poussin Date: Tue, 18 Feb 2020 14:10:37 +0100 Subject: [PATCH 027/171] LGTM configuration file (#1148) * Adding LGTM config file * LGTM update --- lgtm.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 lgtm.yml diff --git a/lgtm.yml b/lgtm.yml new file mode 100644 index 0000000000..d3b73bf454 --- /dev/null +++ b/lgtm.yml @@ -0,0 +1,12 @@ +extraction: + cpp: + after_prepare: + - "export GCC=gcc-arm-none-eabi-9-2019-q4-major" + - "wget https://github.com/rusefi/build_support/raw/master/${GCC}-x86_64-linux.tar.xz -O compiler.tar.xz" + - "tar xf compiler.tar.xz -C ${LGTM_WORKSPACE}" + - "mv ${LGTM_WORKSPACE}/${GCC} ${LGTM_WORKSPACE}/gcc-arm" + index: + build_command: + - "export PATH=${LGTM_WORKSPACE}/gcc-arm/bin:${PATH}" + - "cd firmware" + - "make -j $(nproc) PROJECT_BOARD=microrusefi PROJECT_CPU=ARCH_STM32F4" From b84971cc6a735cfa6e4f425c4a0eb220290e118a Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 18 Feb 2020 08:16:19 -0500 Subject: [PATCH 028/171] code style & pleasing LGTM --- firmware/config/engines/daihatsu.h | 2 ++ firmware/hw_layer/AdcConfiguration.h | 5 ++--- firmware/hw_layer/adc_external.h | 4 +--- firmware/hw_layer/adc_inputs.h | 4 +--- firmware/hw_layer/backup_ram.h | 4 +--- firmware/hw_layer/digital_input_exti.h | 2 ++ firmware/hw_layer/flash.h | 5 ++--- firmware/hw_layer/hardware.h | 4 +--- firmware/hw_layer/hip9011.h | 1 - firmware/hw_layer/io_pins.h | 4 +--- firmware/hw_layer/max31855.h | 4 +--- firmware/hw_layer/mc33816.h | 4 +--- firmware/hw_layer/mc33816_data.h | 4 +--- firmware/hw_layer/mcp3208.h | 4 +--- firmware/hw_layer/pwm_generator.h | 4 +--- firmware/hw_layer/rtc_helper.h | 5 +---- firmware/hw_layer/servo.h | 5 ++--- 17 files changed, 21 insertions(+), 44 deletions(-) diff --git a/firmware/config/engines/daihatsu.h b/firmware/config/engines/daihatsu.h index b7726fecab..d1aea0c9d0 100644 --- a/firmware/config/engines/daihatsu.h +++ b/firmware/config/engines/daihatsu.h @@ -5,6 +5,8 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ +#pragma once + #include "engine_configuration.h" void setDaihatsu(DECLARE_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/hw_layer/AdcConfiguration.h b/firmware/hw_layer/AdcConfiguration.h index e63486e19c..a9829c251f 100644 --- a/firmware/hw_layer/AdcConfiguration.h +++ b/firmware/hw_layer/AdcConfiguration.h @@ -4,8 +4,8 @@ * @date May 3, 2014 * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef ADCCONFIGURATION_H_ -#define ADCCONFIGURATION_H_ + +#pragma once #if HAL_USE_ADC @@ -54,4 +54,3 @@ private: #endif /* HAL_USE_ADC */ -#endif /* ADCCONFIGURATION_H_ */ diff --git a/firmware/hw_layer/adc_external.h b/firmware/hw_layer/adc_external.h index 647fdd712e..663d608e1f 100644 --- a/firmware/hw_layer/adc_external.h +++ b/firmware/hw_layer/adc_external.h @@ -7,8 +7,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef ADC_EXTERNAL_H_ -#define ADC_EXTERNAL_H_ +#pragma once #include "mcp3208.h" @@ -16,4 +15,3 @@ #define adcToVoltsDivided(adc) (5.0f / 4095 * adc) #define getVoltageDivided(msg, channel) (channel == EFI_ADC_NONE ? 66.66 : adcToVoltsDivided(getAdcValue(msg, channel))) -#endif /* ADC_EXTERNAL_H_ */ diff --git a/firmware/hw_layer/adc_inputs.h b/firmware/hw_layer/adc_inputs.h index 08c06bbcde..6bf231b9a4 100644 --- a/firmware/hw_layer/adc_inputs.h +++ b/firmware/hw_layer/adc_inputs.h @@ -6,8 +6,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef ADC_INPUTS_H_ -#define ADC_INPUTS_H_ +#pragma once #include "global.h" #include "adc_math.h" @@ -52,4 +51,3 @@ void removeChannel(const char *name, adc_channel_e setting); #define getAdcValue(msg, channel) 0 #endif /* HAL_USE_ADC */ -#endif /* ADC_INPUTS_H_ */ diff --git a/firmware/hw_layer/backup_ram.h b/firmware/hw_layer/backup_ram.h index 7392cc55b4..f9839305bc 100644 --- a/firmware/hw_layer/backup_ram.h +++ b/firmware/hw_layer/backup_ram.h @@ -5,8 +5,7 @@ * @date Dec 19, 2017 */ -#ifndef BACKUP_RAM_H_ -#define BACKUP_RAM_H_ +#pragma once #include "global.h" #include "efi_gpio.h" @@ -43,4 +42,3 @@ uint32_t backupRamLoad(backup_ram_e idx); // use backup-power RTC registers (non-volatile memory) to store the data void backupRamSave(backup_ram_e idx, uint32_t value); -#endif /* BACKUP_RAM_H_ */ diff --git a/firmware/hw_layer/digital_input_exti.h b/firmware/hw_layer/digital_input_exti.h index 643eb4876a..6d4ab49f07 100644 --- a/firmware/hw_layer/digital_input_exti.h +++ b/firmware/hw_layer/digital_input_exti.h @@ -5,6 +5,8 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ +#pragma once + #include "digital_input.h" #if HAL_USE_PAL diff --git a/firmware/hw_layer/flash.h b/firmware/hw_layer/flash.h index f5a15dd87c..91e3494b7e 100644 --- a/firmware/hw_layer/flash.h +++ b/firmware/hw_layer/flash.h @@ -2,8 +2,8 @@ * @file flash.h * */ -#ifndef FLASH_H -#define FLASH_H + +#pragma once #include "global.h" @@ -165,4 +165,3 @@ int flashWrite(flashaddr_t address, const char* buffer, size_t size); } #endif /* __cplusplus */ -#endif /* FLASH_H */ diff --git a/firmware/hw_layer/hardware.h b/firmware/hw_layer/hardware.h index 6f13ac80dd..a7acd7028f 100644 --- a/firmware/hw_layer/hardware.h +++ b/firmware/hw_layer/hardware.h @@ -5,8 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef HARDWARE_H_ -#define HARDWARE_H_ +#pragma once #include "global.h" @@ -56,4 +55,3 @@ void setBor(int borValue); #endif /* __cplusplus */ -#endif /* HARDWARE_H_ */ diff --git a/firmware/hw_layer/hip9011.h b/firmware/hw_layer/hip9011.h index badd527780..218687d706 100644 --- a/firmware/hw_layer/hip9011.h +++ b/firmware/hw_layer/hip9011.h @@ -8,7 +8,6 @@ #pragma once - // 0b01110001 #define SET_ADVANCED_MODE 0x71 diff --git a/firmware/hw_layer/io_pins.h b/firmware/hw_layer/io_pins.h index 65bb2f9b9b..c991cb6bce 100644 --- a/firmware/hw_layer/io_pins.h +++ b/firmware/hw_layer/io_pins.h @@ -6,8 +6,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef IO_PINS_H_ -#define IO_PINS_H_ +#pragma once #include "global.h" @@ -63,4 +62,3 @@ EXTERNC void efiIcuStart(const char *msg, ICUDriver *icup, const ICUConfig *conf #endif /* HAL_USE_ICU */ #endif /* EFI_GPIO_HARDWARE */ -#endif /* IO_PINS_H_ */ diff --git a/firmware/hw_layer/max31855.h b/firmware/hw_layer/max31855.h index 508515a601..7dcd43ff0d 100644 --- a/firmware/hw_layer/max31855.h +++ b/firmware/hw_layer/max31855.h @@ -5,8 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef MAX31855_H_ -#define MAX31855_H_ +#pragma once #include "global.h" #include "engine_configuration.h" @@ -17,4 +16,3 @@ void initMax31855(Logging *sharedLogger, spi_device_e device, egt_cs_array_t max uint16_t getEgtValue(int egtChannel); -#endif /* MAX31855_H_ */ diff --git a/firmware/hw_layer/mc33816.h b/firmware/hw_layer/mc33816.h index 72a0cdfde2..ee5bfd0f98 100644 --- a/firmware/hw_layer/mc33816.h +++ b/firmware/hw_layer/mc33816.h @@ -5,8 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef HW_LAYER_MC33816_H_ -#define HW_LAYER_MC33816_H_ +#pragma once const int MAX_SPI_MODE_A_TRANSFER_SIZE = 31; //max size for register config transfer @@ -25,4 +24,3 @@ enum { void initMc33816(void); -#endif /* HW_LAYER_MC33816_H_ */ diff --git a/firmware/hw_layer/mc33816_data.h b/firmware/hw_layer/mc33816_data.h index ddbed415d1..7a62faaa32 100644 --- a/firmware/hw_layer/mc33816_data.h +++ b/firmware/hw_layer/mc33816_data.h @@ -5,8 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef HW_LAYER_MC33816_DATA_H_ -#define HW_LAYER_MC33816_DATA_H_ +#pragma once extern const unsigned short MC33816_code_RAM1[62]; // CODE RAM CH 1 extern const unsigned short MC33816_code_RAM2[43]; // CODE RAM CH 2 @@ -17,4 +16,3 @@ extern const unsigned short MC33816_ch2_config[19]; // CH 2 configurations extern const unsigned short MC33816_io_config[44]; // IO configurations extern const unsigned short MC33816_diag_config[44]; // diag configurations -#endif /* HW_LAYER_MC33816_DATA_H_ */ diff --git a/firmware/hw_layer/mcp3208.h b/firmware/hw_layer/mcp3208.h index addd62b123..1ae5d93923 100644 --- a/firmware/hw_layer/mcp3208.h +++ b/firmware/hw_layer/mcp3208.h @@ -13,8 +13,7 @@ * */ -#ifndef MCP3208_H_ -#define MCP3208_H_ +#pragma once #include "global.h" @@ -43,4 +42,3 @@ int getMcp3208adc(int channel); #endif /* EFI_MCP_3208 */ -#endif /* MCP3208_H_ */ diff --git a/firmware/hw_layer/pwm_generator.h b/firmware/hw_layer/pwm_generator.h index ef290ace31..47c07129a0 100644 --- a/firmware/hw_layer/pwm_generator.h +++ b/firmware/hw_layer/pwm_generator.h @@ -5,8 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef PWM_GENERATOR_H_ -#define PWM_GENERATOR_H_ +#pragma once #include "global.h" #include "pwm_generator_logic.h" @@ -23,4 +22,3 @@ void initPwmGenerator(void); */ void applyPinState(int stateIndex, PwmConfig* state) /* pwm_gen_callback */; -#endif /* PWM_GENERATOR_H_ */ diff --git a/firmware/hw_layer/rtc_helper.h b/firmware/hw_layer/rtc_helper.h index 27667161da..2902cf5838 100644 --- a/firmware/hw_layer/rtc_helper.h +++ b/firmware/hw_layer/rtc_helper.h @@ -6,8 +6,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef RTC_HELPER_H_ -#define RTC_HELPER_H_ +#pragma once void printDateTime(void); void setDateTime(const char *strDate); @@ -16,5 +15,3 @@ void date_set_tm(struct tm *); void date_get_tm(struct tm *); void dateToString(char *buffer); bool dateToStringShort(char *lcd_str); - -#endif /* RTC_HELPER_H_ */ diff --git a/firmware/hw_layer/servo.h b/firmware/hw_layer/servo.h index 161598f6c7..e1da3e235b 100644 --- a/firmware/hw_layer/servo.h +++ b/firmware/hw_layer/servo.h @@ -4,11 +4,10 @@ * @date Jan 3, 2015 * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef HW_LAYER_SERVO_H_ -#define HW_LAYER_SERVO_H_ + +#pragma once #include "global.h" void initServo(void); -#endif /* HW_LAYER_SERVO_H_ */ From ec5ec558c2f29f2e39a24ee90a98aff3d639ce63 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 18 Feb 2020 10:47:39 -0500 Subject: [PATCH 029/171] my take on useRunningMathForCranking --- firmware/controllers/algo/fuel_math.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 7eda572be1..39db2b0ecd 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -52,7 +52,12 @@ DISPLAY_TEXT(eol); DISPLAY(DISPLAY_IF(isCrankingState)) floatms_t getCrankingFuel3(float coolantTemperature, uint32_t revolutionCounterSinceStart DECLARE_ENGINE_PARAMETER_SUFFIX) { // these magic constants are in Celsius - float baseCrankingFuel = engineConfiguration->cranking.baseFuel; + float baseCrankingFuel; + if (engineConfiguration->useRunningMathForCranking) { + baseCrankingFuel = engine->engineState.running.baseFuel; + } else { + baseCrankingFuel = engineConfiguration->cranking.baseFuel; + } /** * Cranking fuel changes over time */ From 548ecc8cfbb27412eb6deca7087c55e1f55adab2 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 18 Feb 2020 16:38:57 -0500 Subject: [PATCH 030/171] bugfix - new option was flipped in TS --- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_frankenso.ini | 4 ++-- firmware/tunerstudio/rusefi_kinetis.ini | 4 ++-- firmware/tunerstudio/rusefi_microrusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_prometheus.ini | 4 ++-- firmware/tunerstudio/rusefi_proteus.ini | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 65e1113a71..5d9480ee93 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -333,7 +333,7 @@ bit absoluteFuelPressure;+If your fuel regulator does not have vacuum line bit launchControlEnabled; bit rollingLaunchEnabled; bit antiLagEnabled; -bit useRunningMathForCranking,Fixed,Fuel Map; +bit useRunningMathForCranking,Fuel Map,Fixed; bit issue_294_25; bit issue_294_26; bit issue_294_27; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 716d1ba0db..7948c1c7fd 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:34 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:11 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index a83cfb146e..2da91c6144 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:39 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:17 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index c8d183620b..12b707c4d3 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Feb 16 16:11:47 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Feb 18 16:38:24 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 9e28fdec18..a3dadc0b67 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:37 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:14 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index bfa2c593f8..730e357ac2 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:42 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:19 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 3ac877843b..ecf9acde95 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:45 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:22 EST 2020 pageSize = 20000 page = 1 @@ -117,7 +117,7 @@ page = 1 launchControlEnabled = bits, U32, 76, [20:20], "false", "true" rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fuel Map", "Fixed" + useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" issue_294_25 = bits, U32, 76, [24:24], "false", "true" issue_294_26 = bits, U32, 76, [25:25], "false", "true" issue_294_27 = bits, U32, 76, [26:26], "false", "true" From 84995652df53ce1d5f22c5060d8d3e86b8bb77c4 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Tue, 18 Feb 2020 17:53:56 -0500 Subject: [PATCH 031/171] reviving FRANKENSO_QA_ENGINE --- firmware/config/engines/custom_engine.cpp | 3 +++ firmware/controllers/algo/engine_configuration.cpp | 4 +++- firmware/controllers/engine_controller.cpp | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/firmware/config/engines/custom_engine.cpp b/firmware/config/engines/custom_engine.cpp index 7c142c6233..9867658a30 100644 --- a/firmware/config/engines/custom_engine.cpp +++ b/firmware/config/engines/custom_engine.cpp @@ -190,6 +190,9 @@ void setFrankensoConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { #endif /* EFI_CAN_SUPPORT */ } +/** + * set engine_type 49 + */ void setFrankensoBoardTestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { setFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index f5733d1a3b..d2c9b6bd9a 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -1110,9 +1110,11 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb */ switch (engineType) { case DEFAULT_FRANKENSO: - case FRANKENSO_QA_ENGINE: setFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; + case FRANKENSO_QA_ENGINE: + setFrankensoBoardTestConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); + break; case BMW_M73_F: setEngineBMW_M73_Frankenso(PASS_CONFIG_PARAMETER_SIGNATURE); break; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index b3774e5652..9b27499697 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -843,6 +843,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200214; + return 201200216; } #endif /* EFI_UNIT_TEST */ From a7e5e5280b8c0ca179279fb9cbab73f247ae77b9 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 19 Feb 2020 22:34:38 -0500 Subject: [PATCH 032/171] proteus --- firmware/config/boards/proteus/board_configuration.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/firmware/config/boards/proteus/board_configuration.cpp b/firmware/config/boards/proteus/board_configuration.cpp index 05542a0911..2ef5b209a4 100644 --- a/firmware/config/boards/proteus/board_configuration.cpp +++ b/firmware/config/boards/proteus/board_configuration.cpp @@ -177,4 +177,7 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; engineConfiguration->injectionMode = IM_SIMULTANEOUS; + + CONFIG(fanPin) = GPIOE_1; + CONFIG(fuelPumpPin) = GPIOE_2; } From 2bace565d24076dcdae562190210fce7d336ef92 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 19 Feb 2020 22:34:51 -0500 Subject: [PATCH 033/171] M73 --- firmware/config/engines/bmw_m73.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index bce28f0186..064aa23699 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -213,6 +213,14 @@ GPIOA_6 } +/** + * set engine_type 63 + */ void setEngineBMW_M73_Proteus(DECLARE_CONFIG_PARAMETER_SIGNATURE) { m73engine(PASS_CONFIG_PARAMETER_SIGNATURE); + + // 12 injectors defined in boards/proteus/board_configuration.cpp + + engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_6; + } From 59ff1713c280f768fdbf62b3d53cc63cbfe7af0a Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 21 Feb 2020 19:31:36 -0500 Subject: [PATCH 034/171] "so I guess defaults are fine then, maybe add main relay = PB9" --- firmware/config/boards/proteus/board_configuration.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/config/boards/proteus/board_configuration.cpp b/firmware/config/boards/proteus/board_configuration.cpp index 2ef5b209a4..4cda2086d8 100644 --- a/firmware/config/boards/proteus/board_configuration.cpp +++ b/firmware/config/boards/proteus/board_configuration.cpp @@ -178,6 +178,7 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; engineConfiguration->injectionMode = IM_SIMULTANEOUS; + CONFIG(mainRelayPin) = GPIOB_9; CONFIG(fanPin) = GPIOE_1; CONFIG(fuelPumpPin) = GPIOE_2; } From 6038dc203b9b03878ec076c11fa7f770d1aa8e26 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 21 Feb 2020 16:35:11 -0800 Subject: [PATCH 035/171] minor simplify spark (#1150) * simplify * rename --- .../controllers/engine_cycle/spark_logic.cpp | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/firmware/controllers/engine_cycle/spark_logic.cpp b/firmware/controllers/engine_cycle/spark_logic.cpp index d324ba2840..46e0125dd1 100644 --- a/firmware/controllers/engine_cycle/spark_logic.cpp +++ b/firmware/controllers/engine_cycle/spark_logic.cpp @@ -139,14 +139,19 @@ if (engineConfiguration->debugMode == DBG_DWELL_METRIC) { float ratio = NT2US(actualDwellDurationNt) / 1000.0 / event->sparkDwell; // todo: smarted solution for index to field mapping - if (event->cylinderIndex == 0) { + switch (event->cylinderIndex) { + case 0: tsOutputChannels.debugFloatField1 = ratio; - } else if (event->cylinderIndex == 1) { + break; + case 1: tsOutputChannels.debugFloatField2 = ratio; - } else if (event->cylinderIndex == 2) { + break; + case 2: tsOutputChannels.debugFloatField3 = ratio; - } else if (event->cylinderIndex == 3) { + break; + case 3: tsOutputChannels.debugFloatField4 = ratio; + break; } #endif @@ -271,10 +276,10 @@ bool scheduleOrQueue(AngleBasedEvent *event, } } -static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventIndex, IgnitionEvent *iEvent, +static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventIndex, IgnitionEvent *event, int rpm, efitick_t edgeTimestamp DECLARE_ENGINE_PARAMETER_SUFFIX) { - angle_t sparkAngle = iEvent->sparkAngle; + angle_t sparkAngle = event->sparkAngle; const floatms_t dwellMs = ENGINE(engineState.sparkDwell); if (cisnan(dwellMs) || dwellMs <= 0) { warning(CUSTOM_DWELL, "invalid dwell to handle: %.2f at %d", dwellMs, rpm); @@ -285,7 +290,7 @@ static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventI return; } - floatus_t chargeDelayUs = ENGINE(rpmCalculator.oneDegreeUs) * iEvent->dwellPosition.angleOffsetFromTriggerEvent; + floatus_t chargeDelayUs = ENGINE(rpmCalculator.oneDegreeUs) * event->dwellPosition.angleOffsetFromTriggerEvent; int isIgnitionError = chargeDelayUs < 0; ignitionErrorDetection.add(isIgnitionError); if (isIgnitionError) { @@ -296,22 +301,15 @@ static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventI return; } - iEvent->sparkId = engine->globalSparkIdCounter++; - - /** - * We are alternating two event lists in order to avoid a potential issue around revolution boundary - * when an event is scheduled within the next revolution. - */ - scheduling_s * sUp = &iEvent->dwellStartTimer; - + event->sparkId = engine->globalSparkIdCounter++; /** * The start of charge is always within the current trigger event range, so just plain time-based scheduling */ if (!limitedSpark) { #if SPARK_EXTREME_LOGGING - scheduleMsg(logger, "scheduling sparkUp ind=%d %d %s now=%d %d later id=%d", trgEventIndex, getRevolutionCounter(), iEvent->getOutputForLoggins()->name, (int)getTimeNowUs(), (int)chargeDelayUs, - iEvent->sparkId); + scheduleMsg(logger, "scheduling sparkUp ind=%d %d %s now=%d %d later id=%d", trgEventIndex, getRevolutionCounter(), event->getOutputForLoggins()->name, (int)getTimeNowUs(), (int)chargeDelayUs, + event->sparkId); #endif /* FUEL_MATH_EXTREME_LOGGING */ @@ -320,7 +318,7 @@ static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventI * This way we make sure that coil dwell started while spark was enabled would fire and not burn * the coil. */ - engine->executor.scheduleByTimestampNt(sUp, edgeTimestamp + US2NT(chargeDelayUs), { &turnSparkPinHigh, iEvent }); + engine->executor.scheduleByTimestampNt(&event->dwellStartTimer, edgeTimestamp + US2NT(chargeDelayUs), { &turnSparkPinHigh, event }); } /** * Spark event is often happening during a later trigger event timeframe @@ -330,15 +328,15 @@ static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventI assertAngleRange(sparkAngle, "findAngle#a5", CUSTOM_ERR_6549); - bool scheduled = scheduleOrQueue(&iEvent->sparkEvent, trgEventIndex, edgeTimestamp, sparkAngle, { fireSparkAndPrepareNextSchedule, iEvent } PASS_ENGINE_PARAMETER_SUFFIX); + bool scheduled = scheduleOrQueue(&event->sparkEvent, trgEventIndex, edgeTimestamp, sparkAngle, { fireSparkAndPrepareNextSchedule, event } PASS_ENGINE_PARAMETER_SUFFIX); if (scheduled) { #if SPARK_EXTREME_LOGGING - scheduleMsg(logger, "scheduling sparkDown ind=%d %d %s now=%d later id=%d", trgEventIndex, getRevolutionCounter(), iEvent->getOutputForLoggins()->name, (int)getTimeNowUs(), iEvent->sparkId); + scheduleMsg(logger, "scheduling sparkDown ind=%d %d %s now=%d later id=%d", trgEventIndex, getRevolutionCounter(), event->getOutputForLoggins()->name, (int)getTimeNowUs(), event->sparkId); #endif /* FUEL_MATH_EXTREME_LOGGING */ } else { #if SPARK_EXTREME_LOGGING - scheduleMsg(logger, "to queue sparkDown ind=%d %d %s now=%d for id=%d", trgEventIndex, getRevolutionCounter(), iEvent->getOutputForLoggins()->name, (int)getTimeNowUs(), iEvent->sparkEvent.position.triggerEventIndex); + scheduleMsg(logger, "to queue sparkDown ind=%d %d %s now=%d for id=%d", trgEventIndex, getRevolutionCounter(), event->getOutputForLoggins()->name, (int)getTimeNowUs(), event->sparkEvent.position.triggerEventIndex); #endif /* FUEL_MATH_EXTREME_LOGGING */ } @@ -346,9 +344,9 @@ static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventI #if EFI_UNIT_TEST if (verboseMode) { - printf("spark dwell@ %d/%d spark@ %d/%d id=%d\r\n", iEvent->dwellPosition.triggerEventIndex, (int)iEvent->dwellPosition.angleOffsetFromTriggerEvent, - iEvent->sparkEvent.position.triggerEventIndex, (int)iEvent->sparkEvent.position.angleOffsetFromTriggerEvent, - iEvent->sparkId); + printf("spark dwell@ %d/%d spark@ %d/%d id=%d\r\n", event->dwellPosition.triggerEventIndex, (int)event->dwellPosition.angleOffsetFromTriggerEvent, + event->sparkEvent.position.triggerEventIndex, (int)event->sparkEvent.position.angleOffsetFromTriggerEvent, + event->sparkId); } #endif } From bb25c0a7163ced5a0112d87f1255fa071017a9fc Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 21 Feb 2020 19:50:43 -0500 Subject: [PATCH 036/171] poke CI --- firmware/svnversion.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/svnversion.h b/firmware/svnversion.h index 8895695227..84ea22fcd0 100644 --- a/firmware/svnversion.h +++ b/firmware/svnversion.h @@ -1,12 +1,12 @@ // This file was generated by Version2Header -// Fri Jan 31 01:23:06 EST 2020 +// Fri Feb 21 19:49:57 EST 2020 #ifndef GIT_HASH -#define GIT_HASH "d48a57d599dcaa48b15e95be2a9fa0c4fb9361ff" +#define GIT_HASH "6038dc203b9b03878ec076c11fa7f770d1aa8e26" #endif #ifndef VCS_VERSION -#define VCS_VERSION "21477" +#define VCS_VERSION "21586" #endif From c61293d89d92a62ad2bbf65f46bbeb21dcc6b2b9 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 21 Feb 2020 20:02:07 -0500 Subject: [PATCH 037/171] 6 channel low side images --- hardware/1A_injector_6-channels/6_channel.jpg | Bin 0 -> 177880 bytes .../6_channel_render.png | Bin 0 -> 70251 bytes hardware/1A_injector_6-channels/readme.md | 3 +++ 3 files changed, 3 insertions(+) create mode 100644 hardware/1A_injector_6-channels/6_channel.jpg create mode 100644 hardware/1A_injector_6-channels/6_channel_render.png create mode 100644 hardware/1A_injector_6-channels/readme.md diff --git a/hardware/1A_injector_6-channels/6_channel.jpg b/hardware/1A_injector_6-channels/6_channel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c24d5e441898b5b2422af1c6bb12ffeaa12c8cd GIT binary patch literal 177880 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≥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

7Fh>$SpP&x-JgUDb3 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 k-;)204*!2d#jYnT%`ct3zm5WZo*|c Date: Fri, 21 Feb 2020 20:08:16 -0500 Subject: [PATCH 038/171] explicit cross-referencing --- firmware/config/boards/proteus/board_configuration.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/firmware/config/boards/proteus/board_configuration.cpp b/firmware/config/boards/proteus/board_configuration.cpp index 4cda2086d8..56e39d8ae6 100644 --- a/firmware/config/boards/proteus/board_configuration.cpp +++ b/firmware/config/boards/proteus/board_configuration.cpp @@ -178,7 +178,10 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; engineConfiguration->injectionMode = IM_SIMULTANEOUS; + // output 13 CONFIG(mainRelayPin) = GPIOB_9; + // output 15 CONFIG(fanPin) = GPIOE_1; + // output 16 CONFIG(fuelPumpPin) = GPIOE_2; } From e100e6b43def2df1ec665aa469781d9607a16a13 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 22 Feb 2020 12:27:43 -0500 Subject: [PATCH 039/171] broken IMG link --- hardware/1A_injector_6-channels/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/1A_injector_6-channels/readme.md b/hardware/1A_injector_6-channels/readme.md index 8f4f237d6d..08022aa86f 100644 --- a/hardware/1A_injector_6-channels/readme.md +++ b/hardware/1A_injector_6-channels/readme.md @@ -1,3 +1,3 @@ ![Render](6_channel_render.png) -![Photo](6_channel.png) \ No newline at end of file +![Photo](6_channel.jpg) \ No newline at end of file From 40145ab09cdc6e8352a1beed58300359d4a7bf59 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 22 Feb 2020 13:04:19 -0500 Subject: [PATCH 040/171] minor progress --- firmware/config/boards/clean_env_variables.bat | 2 +- firmware/controllers/engine_controller.cpp | 2 +- firmware/controllers/settings.cpp | 18 +++--------------- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/firmware/config/boards/clean_env_variables.bat b/firmware/config/boards/clean_env_variables.bat index d0dba99e47..7148b891c1 100644 --- a/firmware/config/boards/clean_env_variables.bat +++ b/firmware/config/boards/clean_env_variables.bat @@ -1,4 +1,4 @@ - +@echo off echo clean_env_variables.bat: Cleaning up so that no one inherits any of these values set DEBUG_LEVEL_OPT= set EXTRA_PARAMS= diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 9b27499697..9becb4ec95 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -843,6 +843,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200216; + return 201200222; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 6ee9e8c282..bb860edfe2 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -587,10 +587,6 @@ static void setGlobalFuelCorrection(float value) { engineConfiguration->globalFuelCorrection = value; } -static void setCltBias(float value) { - engineConfiguration->clt.config.bias_resistor = value; -} - static void setFanSetting(float onTempC, float offTempC) { if (onTempC <= offTempC) { scheduleMsg(&logger, "ON temp [%.2f] should be above OFF temp [%.2f]", onTempC, offTempC); @@ -600,14 +596,6 @@ static void setFanSetting(float onTempC, float offTempC) { engineConfiguration->fanOffTemperature = offTempC; } -static void setIatBias(float value) { - engineConfiguration->iat.config.bias_resistor = value; -} - -static void setVBattDivider(float value) { - engineConfiguration->vbattDividerCoeff = value; -} - static void setWholeTimingMap(float value) { // todo: table helper? scheduleMsg(&logger, "Setting whole timing map to %.2f", value); @@ -1095,6 +1083,9 @@ const plain_get_float_s getF_plain[] = { {"injection_offset", &engineConfiguration->extraInjectionOffset}, {"global_trigger_offset_angle", &engineConfiguration->globalTriggerAngleOffset}, {"global_fuel_correction", &engineConfiguration->globalFuelCorrection}, + {"vbatt_divider", &engineConfiguration->vbattDividerCoeff}, + {"clt_bias", &engineConfiguration->clt.config.bias_resistor}, + {"iat_bias", &engineConfiguration->iat.config.bias_resistor}, {"cranking_fuel", &engineConfiguration->cranking.baseFuel}, {"cranking_timing_angle", &engineConfiguration->crankingTimingAngle}, {"cranking_charge_angle", &engineConfiguration->crankingChargeAngle}, @@ -1199,9 +1190,6 @@ const command_f_s commandsF[] = { {"cranking_iac", setCrankingIACExtra}, {"cranking_timing_angle", setCrankingTimingAngle}, {"cranking_charge_angle", setCrankingChargeAngle}, - {"vbatt_divider", setVBattDivider}, - {"clt_bias", setCltBias}, - {"iat_bias", setIatBias}, {"tps_accel_threshold", setTpsAccelThr}, {"tps_decel_threshold", setTpsDecelThr}, {"tps_decel_multiplier", setTpsDecelMult}, From b01a2cf4c82ec6ac3656ed5587ef3c3ab5c2e828 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 22 Feb 2020 14:49:49 -0500 Subject: [PATCH 041/171] happy new year --- java_console/ui/src/com/rusefi/Launcher.java | 2 +- java_console/ui/src/com/rusefi/StartupFrame.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index bc115f7a21..e01e7c1761 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -49,7 +49,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20191225; + public static final int CONSOLE_VERSION = 20200222; public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); diff --git a/java_console/ui/src/com/rusefi/StartupFrame.java b/java_console/ui/src/com/rusefi/StartupFrame.java index 48881d635e..f7cf5f5171 100644 --- a/java_console/ui/src/com/rusefi/StartupFrame.java +++ b/java_console/ui/src/com/rusefi/StartupFrame.java @@ -38,7 +38,7 @@ public class StartupFrame { // todo: figure out a better way to work with absolute path private static final String APPICON = "appicon.png"; private static final String LOGO = "logo.gif"; - public static final String LINK_TEXT = "rusEfi (c) 2012-2019"; + public static final String LINK_TEXT = "rusEfi (c) 2012-2020"; private static final String URI = "http://rusefi.com/?java_console"; // private static final int RUSEFI_ORANGE = 0xff7d03; From dd07e37ab35f3ae414ca584478807f72f7b259e3 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 22 Feb 2020 15:17:30 -0500 Subject: [PATCH 042/171] better (?) error handling --- java_console/logging/src/com/rusefi/FileLog.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/java_console/logging/src/com/rusefi/FileLog.java b/java_console/logging/src/com/rusefi/FileLog.java index d10fc6a3c4..d29607f5fc 100644 --- a/java_console/logging/src/com/rusefi/FileLog.java +++ b/java_console/logging/src/com/rusefi/FileLog.java @@ -3,6 +3,7 @@ package com.rusefi; import com.opensr5.Logger; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; @@ -126,14 +127,18 @@ public enum FileLog { public void log(Throwable exception) { if (fileLog == null) - throw new NullPointerException("fileLog"); + throw new NullPointerException("fileLog while " + exception); OutputStreamWriter os = new OutputStreamWriter(fileLog); exception.printStackTrace(new PrintWriter(os)); } public void logException(String msg, Throwable e) { logLine(msg + e); - log(e); e.printStackTrace(); + if (fileLog == null) { + JOptionPane.showConfirmDialog(null, msg + " " + e, "no log and Exception Occurred", JOptionPane.DEFAULT_OPTION); + return; + } + log(e); } } \ No newline at end of file From d576b8e627f89bce974de607b55d00bfa5cf3005 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 22 Feb 2020 15:37:58 -0500 Subject: [PATCH 043/171] live docs: whitespace support --- java_tools/ConfigDefinition.jar | Bin 156307 -> 154604 bytes .../com/rusefi/ldmp/LiveDocsMetaParser.java | 9 ++++++++ .../ldmp/test/LiveDocsMetaParserTest.java | 21 ++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 3fda580daca0761237d5b4ecb748c1095a42fab6..c6e15c8e746b3ebe5a316d159ae12c0e27803c3a 100644 GIT binary patch delta 18502 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 delta 19968 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 J8ThmY_&@2hwb1|o diff --git a/java_tools/configuration_definition/src/com/rusefi/ldmp/LiveDocsMetaParser.java b/java_tools/configuration_definition/src/com/rusefi/ldmp/LiveDocsMetaParser.java index c6a56d97a7..d8ddc7a333 100644 --- a/java_tools/configuration_definition/src/com/rusefi/ldmp/LiveDocsMetaParser.java +++ b/java_tools/configuration_definition/src/com/rusefi/ldmp/LiveDocsMetaParser.java @@ -24,6 +24,7 @@ public class LiveDocsMetaParser { private static final String DISPLAY_IF = "DISPLAY_IF"; private static final String DISPLAY_ELSE = "DISPLAY_ELSE"; private static final String DISPLAY_ENDIF = "DISPLAY_ENDIF"; + private static final char QUOTE_SYMBOL = '"'; private static StringBuilder prefix = new StringBuilder(); private static String readLineByLine(String filePath) throws IOException { @@ -87,6 +88,14 @@ public class LiveDocsMetaParser { } else if (DISPLAY_TEXT.equalsIgnoreCase(token)) { if (s.hasNext()) { String config = s.next(); + if (config.startsWith(String.valueOf(QUOTE_SYMBOL))) { + config = config.substring(1); + while (!config.endsWith(String.valueOf(QUOTE_SYMBOL))) { + String next = s.next(); + config += ' ' + next; + } + config = config.substring(0, config.length() - 1); + } SystemOut.println("Display test " + config); result.add(new TextRequest(config)); } diff --git a/java_tools/configuration_definition/src/com/rusefi/ldmp/test/LiveDocsMetaParserTest.java b/java_tools/configuration_definition/src/com/rusefi/ldmp/test/LiveDocsMetaParserTest.java index 1cf723fe77..39f237ad61 100644 --- a/java_tools/configuration_definition/src/com/rusefi/ldmp/test/LiveDocsMetaParserTest.java +++ b/java_tools/configuration_definition/src/com/rusefi/ldmp/test/LiveDocsMetaParserTest.java @@ -37,6 +37,27 @@ public class LiveDocsMetaParserTest { assertEquals(3, r.first().size()); } + + @Test + public void parseTextWithSpecialCharacters() { + MetaInfo r = LiveDocsMetaParser.parse( + "DISPLAY_TEXT(\"Analog: !MCU_reads\");" + ); + assertEquals(1, r.first().size()); + TextRequest request = (TextRequest) r.first().get(0); + assertEquals("Analog: !MCU_reads", request.getValue()); + } + + @Test + public void parseTextWithSpecialCharactersAndSpaces() { + MetaInfo r = LiveDocsMetaParser.parse( + "DISPLAY_TEXT(\"Analog: !MCU_reads\");" + ); + assertEquals(1, r.first().size()); + TextRequest request = (TextRequest) r.first().get(0); + assertEquals("Analog: !MCU_reads", request.getValue()); + } + @Test public void parseDisplayConfig() { MetaInfo r = LiveDocsMetaParser.parse("\t\t// DISPLAY_TEXT(interpolate(\")\n" + From 1fd4e016936c2738e1f35d495dfa324df6309b9f Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 22 Feb 2020 15:38:21 -0500 Subject: [PATCH 044/171] better script name --- ...en_config2.bat => gen_live_documentation.bat} | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) rename firmware/{gen_config2.bat => gen_live_documentation.bat} (83%) diff --git a/firmware/gen_config2.bat b/firmware/gen_live_documentation.bat similarity index 83% rename from firmware/gen_config2.bat rename to firmware/gen_live_documentation.bat index 662000653e..69e286c6d8 100644 --- a/firmware/gen_config2.bat +++ b/firmware/gen_live_documentation.bat @@ -1,43 +1,43 @@ rem TODO better place for this stuff, more automation so that each file does not need to be handled separately. maybe regexp? -rm gen_config2.log +rm gen_live_documentation.log -java -DSystemOut.name=gen_config2 ^ +java -DSystemOut.name=gen_live_documentation ^ -jar ../java_tools/ConfigDefinition.jar ^ -definition integration/pid_state.txt ^ -java_destination ../java_console/models/src/com/rusefi/config/generated/PidState.java ^ -c_destination controllers/generated/pid_state_generated.h -java -DSystemOut.name=gen_config2 ^ +java -DSystemOut.name=gen_live_documentation ^ -jar ../java_tools/ConfigDefinition.jar ^ -definition integration/engine_state.txt ^ -java_destination ../java_console/models/src/com/rusefi/config/generated/EngineState.java ^ -c_destination controllers/generated/engine_state_generated.h -java -DSystemOut.name=gen_config2 ^ +java -DSystemOut.name=gen_live_documentation ^ -jar ../java_tools/ConfigDefinition.jar ^ -definition integration/thermistor_state.txt ^ -java_destination ../java_console/models/src/com/rusefi/config/generated/ThermistorState.java ^ -c_destination controllers/generated/thermistor_generated.h -java -DSystemOut.name=gen_config2 ^ +java -DSystemOut.name=gen_live_documentation ^ -jar ../java_tools/ConfigDefinition.jar ^ -definition integration/trigger_central.txt ^ -java_destination ../java_console/models/src/com/rusefi/config/generated/TriggerCentral.java ^ -c_destination controllers/generated/trigger_central_generated.h -java -DSystemOut.name=gen_config2 ^ +java -DSystemOut.name=gen_live_documentation ^ -jar ../java_tools/ConfigDefinition.jar ^ -definition integration/trigger_state.txt ^ -java_destination ../java_console/models/src/com/rusefi/config/generated/TriggerState.java ^ -c_destination controllers/generated/trigger_state_generated.h -java -DSystemOut.name=gen_config2 ^ +java -DSystemOut.name=gen_live_documentation ^ -jar ../java_tools/ConfigDefinition.jar ^ -definition integration/wall_fuel_state.txt ^ -java_destination ../java_console/models/src/com/rusefi/config/generated/WallFuelState.java ^ -c_destination controllers/generated/wall_fuel_generated.h -java -DSystemOut.name=gen_config2 ^ +java -DSystemOut.name=gen_live_documentation ^ -cp ../java_tools/ConfigDefinition.jar;../java_tools/configuration_definition/lib/snakeyaml.jar ^ com.rusefi.ldmp.UsagesReader integration/LiveData.yaml From 299dd7e836037bbb23594010c79a8d56a7d3f5f3 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 22 Feb 2020 15:39:00 -0500 Subject: [PATCH 045/171] better trigger LiveDocs --- firmware/controllers/trigger/trigger_decoder.cpp | 8 ++++---- .../src/com/rusefi/ldmp/generated/TriggerDecoderMeta.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/firmware/controllers/trigger/trigger_decoder.cpp b/firmware/controllers/trigger/trigger_decoder.cpp index ab2a70a929..e896531167 100644 --- a/firmware/controllers/trigger/trigger_decoder.cpp +++ b/firmware/controllers/trigger/trigger_decoder.cpp @@ -479,16 +479,16 @@ void TriggerState::decodeTriggerEvent(TriggerWaveform *triggerShape, const Trigg DISPLAY_STATE(Trigger_Central) DISPLAY(DISPLAY_CONFIG(TRIGGERINPUTPINS1)); - DISPLAY_TEXT(Trigger_1_Fall); + DISPLAY_TEXT("Trigger 1: Fall"); DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS1)); - DISPLAY_TEXT(Rise); + DISPLAY_TEXT(", Rise"); DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS2)); DISPLAY_TEXT(EOL); DISPLAY(DISPLAY_CONFIG(TRIGGERINPUTPINS2)); - DISPLAY_TEXT(Trigger_2_Fall); + DISPLAY_TEXT("Trigger 2: Fall"); DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS3)); - DISPLAY_TEXT(Rise); + DISPLAY_TEXT(", Rise"); DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS4)); DISPLAY_TEXT(EOL); diff --git a/java_console/ui/src/com/rusefi/ldmp/generated/TriggerDecoderMeta.java b/java_console/ui/src/com/rusefi/ldmp/generated/TriggerDecoderMeta.java index 420ada2bda..e81912e87d 100644 --- a/java_console/ui/src/com/rusefi/ldmp/generated/TriggerDecoderMeta.java +++ b/java_console/ui/src/com/rusefi/ldmp/generated/TriggerDecoderMeta.java @@ -8,15 +8,15 @@ public class TriggerDecoderMeta { new FieldRequest("Trigger_State", "currentGap"), new TextRequest("EOL"), new ConfigRequest("TRIGGERINPUTPINS1"), - new TextRequest("Trigger_1_Fall"), + new TextRequest("Trigger 1: Fall"), new FieldRequest("Trigger_Central", "HWEVENTCOUNTERS1"), - new TextRequest("Rise"), + new TextRequest(", Rise"), new FieldRequest("Trigger_Central", "HWEVENTCOUNTERS2"), new TextRequest("EOL"), new ConfigRequest("TRIGGERINPUTPINS2"), - new TextRequest("Trigger_2_Fall"), + new TextRequest("Trigger 2: Fall"), new FieldRequest("Trigger_Central", "HWEVENTCOUNTERS3"), - new TextRequest("Rise"), + new TextRequest(", Rise"), new FieldRequest("Trigger_Central", "HWEVENTCOUNTERS4"), new TextRequest("EOL"), new TextRequest("VVT_1"), From 04a4e2bca357aed751d76b47c52382dc6504e555 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 22 Feb 2020 23:18:02 -0500 Subject: [PATCH 046/171] ETB: expand automated testing #115 --- firmware/controllers/actuators/electronic_throttle.cpp | 2 ++ unit_tests/tests/test_etb.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index f984efe1af..81e4e426e2 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -2,6 +2,8 @@ * @file electronic_throttle.cpp * @brief Electronic Throttle driver * + * @see test test_etb.cpp + * * * Limited user documentation at https://github.com/rusefi/rusefi_documentation/wiki/HOWTO_electronic_throttle_body * diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index ee31447da9..5e8dcf7df4 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -61,6 +61,10 @@ TEST(etb, singleEtbInitialization) { ASSERT_EQ(0, mocks[1].startCount) << "2nd start"; + // todo: set mock pedal position + // todo: set mock ETB throttle position + // todo: invoke EtbController#PeriodicTask a few times and assert that duty cycle changes + } From b4c371f44de8425a9abbb5ba2c7f148217b7f6e5 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 23 Feb 2020 09:16:11 -0500 Subject: [PATCH 047/171] v12 --- firmware/config/engines/bmw_m73.cpp | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index 064aa23699..1f3dfd912d 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -215,6 +215,38 @@ GPIOA_6 /** * set engine_type 63 + * + * black#3 : orange : injector #1 + * black#4 : blue : injector #3 + * black#5 : white : injector #5 + * black#6 : green : injector #6 + * black#7 : orange : injector #7 + * black#8 : blue : injector #9 + * black#9 : white : injector #11 + * black#15: blue : injector #2 + * black#16: white : injector #4 + * black#19: green : injector #8 + * black#20: : injector #10 + * black#21: : injector #12 + * + * + * small#5 : : VR1 pos + * small#8 : : ETB1- + * small#13: blue : VR1 neg + * small#15: orange : ETB1+ + * small#18: red : ignition power / ECU power source + * small#19: black : GND + * small#21: blue : ETB2- + * small#22: orange : ETB2+ + * small#23: red : ETB/high-side power from main relay + * + * + * + * white#9 : orange : +5v + * white#18: red + * white#23: black : Sensor Ground + * white#24: red : TPS#1 + * */ void setEngineBMW_M73_Proteus(DECLARE_CONFIG_PARAMETER_SIGNATURE) { m73engine(PASS_CONFIG_PARAMETER_SIGNATURE); @@ -223,4 +255,8 @@ void setEngineBMW_M73_Proteus(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_6; + // TPS#2 = Analog volt +// engineConfiguration->tps2_1AdcChannel = EFI_ADC_; + + } From 97d68ccbfabd4f91580a7629d0dc0563a7cb74d3 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 24 Feb 2020 00:12:26 -0500 Subject: [PATCH 048/171] MRE technical info --- firmware/config/boards/microrusefi/mapping.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/firmware/config/boards/microrusefi/mapping.yaml b/firmware/config/boards/microrusefi/mapping.yaml index ba489507c3..64c529422b 100644 --- a/firmware/config/boards/microrusefi/mapping.yaml +++ b/firmware/config/boards/microrusefi/mapping.yaml @@ -37,21 +37,33 @@ switch_inputs: GPIOG_1: "Clutch Switch" analog_inputs: + # PA0 EFI_ADC_0: "18 - AN temp 1" + # PA1 EFI_ADC_1: "23 - AN temp 2" + # PA2 EFI_ADC_2: "24 - AN temp 3" + # PA3 EFI_ADC_3: "22 - AN temp 4" + # PA4 EFI_ADC_4: "28 - AN volt 10" + # PA6 EFI_ADC_6: "26 - AN volt 2" + # PA7 EFI_ADC_7: "31 - AN volt 3" # PB0 EFI_ADC_8: "36 - AN volt 8" # PB1 EFI_ADC_9: "40 - AN volt 9" + # PC0 EFI_ADC_10: "27 - AN volt 1" + # PC1 EFI_ADC_11: "Battery Sense" + # PC2 EFI_ADC_12: "19 - AN volt 4" # PC3 EFI_ADC_13: "20 - AN volt 5" + # PC4 EFI_ADC_14: "32 - AN volt 6" + # PC5 EFI_ADC_15: "30 - AN volt 7" From 9decb79a5ec09033ae4749bfd81f5e13e6200188 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 24 Feb 2020 00:12:51 -0500 Subject: [PATCH 049/171] migrate slow ADC to software timer so that TIM8 is also available for input capture #630 --- firmware/config/stm32f4ems/mcuconf.h | 1 - 1 file changed, 1 deletion(-) diff --git a/firmware/config/stm32f4ems/mcuconf.h b/firmware/config/stm32f4ems/mcuconf.h index bc971dc229..dd7fcbf145 100644 --- a/firmware/config/stm32f4ems/mcuconf.h +++ b/firmware/config/stm32f4ems/mcuconf.h @@ -276,7 +276,6 @@ // todo: https://github.com/rusefi/rusefi/issues/630 ? #define STM32_PWM_USE_TIM4 TRUE #define STM32_PWM_USE_TIM5 FALSE -// todo: https://github.com/rusefi/rusefi/issues/630 ? #define STM32_PWM_USE_TIM8 FALSE #define STM32_PWM_USE_TIM9 FALSE #define STM32_PWM_TIM1_IRQ_PRIORITY 7 From 9c0bcd4be089aae2dbdfa7f5ce78be49682c3a6d Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 24 Feb 2020 00:20:36 -0500 Subject: [PATCH 050/171] v12 --- firmware/config/engines/bmw_m73.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index 1f3dfd912d..9325eb3389 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -231,7 +231,7 @@ GPIOA_6 * * * small#5 : : VR1 pos - * small#8 : : ETB1- + * small#8 : blue : ETB1- * small#13: blue : VR1 neg * small#15: orange : ETB1+ * small#18: red : ignition power / ECU power source From 0b72db0811a62391edc7ee32a0bcdaf59a45a8a1 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 24 Feb 2020 13:47:10 -0800 Subject: [PATCH 051/171] split out scaled channel header (#1156) * split out scaled channel header * update header --- .../binary/tunerstudio_configuration.h | 48 +--------------- firmware/util/scaled_channel.h | 56 +++++++++++++++++++ 2 files changed, 58 insertions(+), 46 deletions(-) create mode 100644 firmware/util/scaled_channel.h diff --git a/firmware/console/binary/tunerstudio_configuration.h b/firmware/console/binary/tunerstudio_configuration.h index 9ecb914ed5..1ad46c2793 100644 --- a/firmware/console/binary/tunerstudio_configuration.h +++ b/firmware/console/binary/tunerstudio_configuration.h @@ -8,54 +8,12 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef TUNERSTUDIO_CONFIGURATION_H_ -#define TUNERSTUDIO_CONFIGURATION_H_ +#pragma once #include "rusefi_types.h" -#include "rusefi_generated.h" - +#include "scaled_channel.h" #include "tunerstudio_debug_struct.h" -// This class lets us transparently store something at a ratio inside an integer type -// Just use it like a float - you can read and write to it, like this: -// scaled_channel myVar; -// myVar = 2.4f; // converts to an int, stores 24 -// float x = myVar; // converts back to float, returns 2.4f -template -class scaled_channel { -public: - scaled_channel() : m_value(static_cast(0)) { } - scaled_channel(float val) - : m_value(val * mult) - { - } - - // Allow reading back out as a float (note: this may be lossy!) - operator float() const { - return m_value / (float)mult; - } - -private: - T m_value; -}; - -// We need to guarantee that scaled values containing some type are the same size -// as that underlying type. We rely on the class only having a single member for -// this trick to work. -static_assert(sizeof(scaled_channel) == 1); -static_assert(sizeof(scaled_channel) == 2); -static_assert(sizeof(scaled_channel) == 4); -static_assert(sizeof(scaled_channel) == 4); - -// Common scaling options - use these if you can! -using scaled_temperature = scaled_channel; // +-327 deg C at 0.01 deg resolution -using scaled_ms = scaled_channel; // +- 100ms at 0.003ms precision -using scaled_percent = scaled_channel; // +-327% at 0.01% resolution -using scaled_pressure = scaled_channel; // 0-2000kPa (~300psi) at 0.03kPa resolution -using scaled_angle = scaled_channel; // +-655 degrees at 0.02 degree resolution -using scaled_voltage = scaled_channel; // 0-65v at 1mV resolution -using scaled_afr = scaled_channel; // 0-65afr at 0.001 resolution - typedef struct { uint16_t values[EGT_CHANNEL_COUNT]; } egt_values_s; @@ -230,5 +188,3 @@ typedef struct { } TunerStudioOutputChannels; extern TunerStudioOutputChannels tsOutputChannels; - -#endif /* TUNERSTUDIO_CONFIGURATION_H_ */ diff --git a/firmware/util/scaled_channel.h b/firmware/util/scaled_channel.h new file mode 100644 index 0000000000..d01f354d52 --- /dev/null +++ b/firmware/util/scaled_channel.h @@ -0,0 +1,56 @@ +/* + * @file scaled_channel.h + * @brief Scaled channel storage for binary formats + * + * Storage of values (floating point, usually) scaled in integer storage, for transmission over the wire. + * This includes Tunerstudio serial/USB, and CAN. + * + * @date Feb 24, 2020 + * @author Matthew Kennedy, (c) 2020 + */ + +#pragma once + +#include + +#include "rusefi_generated.h" + +// This class lets us transparently store something at a ratio inside an integer type +// Just use it like a float - you can read and write to it, like this: +// scaled_channel myVar; +// myVar = 2.4f; // converts to an int, stores 24 +// float x = myVar; // converts back to float, returns 2.4f +template +class scaled_channel { +public: + scaled_channel() : m_value(static_cast(0)) { } + scaled_channel(float val) + : m_value(val * mult) + { + } + + // Allow reading back out as a float (note: this may be lossy!) + operator float() const { + return m_value / (float)mult; + } + +private: + T m_value; +}; + +// We need to guarantee that scaled values containing some type are the same size +// as that underlying type. We rely on the class only having a single member for +// this trick to work. +static_assert(sizeof(scaled_channel) == 1); +static_assert(sizeof(scaled_channel) == 2); +static_assert(sizeof(scaled_channel) == 4); +static_assert(sizeof(scaled_channel) == 4); + +// Common scaling options - use these if you can! +using scaled_temperature = scaled_channel; // +-327 deg C at 0.01 deg resolution +using scaled_ms = scaled_channel; // +- 100ms at 0.003ms precision +using scaled_percent = scaled_channel; // +-327% at 0.01% resolution +using scaled_pressure = scaled_channel; // 0-2000kPa (~300psi) at 0.03kPa resolution +using scaled_angle = scaled_channel; // +-655 degrees at 0.02 degree resolution +using scaled_voltage = scaled_channel; // 0-65v at 1mV resolution +using scaled_afr = scaled_channel; // 0-65afr at 0.001 resolution From 8647abd22b6596e1ebd9fa0a49d42434af66a441 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 24 Feb 2020 16:08:02 -0800 Subject: [PATCH 052/171] Add single flag for omitting PnP configs (#1157) * switch to single enable flag * engine_configuration.cpp --- firmware/config/boards/kinetis/efifeatures.h | 9 +-- firmware/config/boards/skeleton/efifeatures.h | 12 +-- firmware/config/engines/dodge_neon.cpp | 5 -- firmware/config/engines/dodge_neon.h | 4 - .../config/engines/ford_1995_inline_6.cpp | 4 - firmware/config/engines/ford_aspire.cpp | 4 - firmware/config/engines/ford_fiesta.cpp | 4 - firmware/config/engines/ford_fiesta.h | 7 +- firmware/config/engines/nissan_primera.cpp | 3 - firmware/config/engines/nissan_primera.h | 4 - firmware/config/stm32f4ems/efifeatures.h | 9 +-- .../controllers/algo/engine_configuration.cpp | 74 ++++++++----------- simulator/simulator/efifeatures.h | 9 +-- unit_tests/efifeatures.h | 9 +-- 14 files changed, 46 insertions(+), 111 deletions(-) diff --git a/firmware/config/boards/kinetis/efifeatures.h b/firmware/config/boards/kinetis/efifeatures.h index ab140bd599..448c642511 100644 --- a/firmware/config/boards/kinetis/efifeatures.h +++ b/firmware/config/boards/kinetis/efifeatures.h @@ -208,14 +208,9 @@ #endif /** - * While we embed multiple PnP configurations into the same firmware binary, these marcoses give us control - * over which configurations go into the binary + * Should PnP engine configurations be included in the binary? */ -#define EFI_SUPPORT_DODGE_NEON FALSE -#define EFI_SUPPORT_FORD_ASPIRE FALSE -#define EFI_SUPPORT_FORD_FIESTA FALSE -#define EFI_SUPPORT_NISSAN_PRIMERA FALSE -#define EFI_SUPPORT_1995_FORD_INLINE_6 FALSE +#define EFI_INCLUDE_ENGINE_PRESETS FALSE #ifndef EFI_ENGINE_SNIFFER #define EFI_ENGINE_SNIFFER FALSE diff --git a/firmware/config/boards/skeleton/efifeatures.h b/firmware/config/boards/skeleton/efifeatures.h index 38d6d4886a..e17d06b02d 100644 --- a/firmware/config/boards/skeleton/efifeatures.h +++ b/firmware/config/boards/skeleton/efifeatures.h @@ -221,14 +221,10 @@ #define EFI_USB_SERIAL TRUE -// For now we can still embed all car configurations into the firmware binary. -// These give us control over which configurations go in. - -#define EFI_SUPPORT_DODGE_NEON TRUE -#define EFI_SUPPORT_FORD_ASPIRE TRUE -#define EFI_SUPPORT_FORD_FIESTA TRUE -#define EFI_SUPPORT_NISSAN_PRIMERA TRUE -#define EFI_SUPPORT_1995_FORD_INLINE_6 TRUE +/** + * Should PnP engine configurations be included in the binary? + */ +#define EFI_INCLUDE_ENGINE_PRESETS TRUE #ifndef EFI_ENGINE_SNIFFER #define EFI_ENGINE_SNIFFER TRUE diff --git a/firmware/config/engines/dodge_neon.cpp b/firmware/config/engines/dodge_neon.cpp index 05395a80ed..c2b441c480 100644 --- a/firmware/config/engines/dodge_neon.cpp +++ b/firmware/config/engines/dodge_neon.cpp @@ -14,8 +14,6 @@ #include "global.h" -#if EFI_SUPPORT_DODGE_NEON - #include "dodge_neon.h" #include "engine_configuration.h" #include "thermistors.h" @@ -502,6 +500,3 @@ void setDodgeNeonNGCEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // end of setDodgeNeonNGCEngineConfiguration } - -#endif /* EFI_SUPPORT_DODGE_NEON */ - diff --git a/firmware/config/engines/dodge_neon.h b/firmware/config/engines/dodge_neon.h index f942b2fe4a..dfb360cc8a 100644 --- a/firmware/config/engines/dodge_neon.h +++ b/firmware/config/engines/dodge_neon.h @@ -9,8 +9,6 @@ #ifndef DODGE_NEON_H_ #define DODGE_NEON_H_ -#if EFI_SUPPORT_DODGE_NEON - #include "engine_configuration.h" void setDodgeNeon1995EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); @@ -22,6 +20,4 @@ void setDodgeNeonNGCEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); */ void setDodgeNeonNGCEngineConfigurationCrankBased(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* EFI_SUPPORT_DODGE_NEON */ - #endif /* DODGE_NEON_H_ */ diff --git a/firmware/config/engines/ford_1995_inline_6.cpp b/firmware/config/engines/ford_1995_inline_6.cpp index cd486aee4d..9ccdc14d08 100644 --- a/firmware/config/engines/ford_1995_inline_6.cpp +++ b/firmware/config/engines/ford_1995_inline_6.cpp @@ -16,8 +16,6 @@ #include "engine_math.h" #include "allsensors.h" -#if EFI_SUPPORT_1995_FORD_INLINE_6 - EXTERN_CONFIG; /** @@ -101,5 +99,3 @@ void setFordInline6(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->logicAnalyzerPins[0] = GPIOC_6; engineConfiguration->logicAnalyzerPins[1] = GPIOE_5; } - -#endif /* EFI_SUPPORT_1995_FORD_INLINE_6 */ diff --git a/firmware/config/engines/ford_aspire.cpp b/firmware/config/engines/ford_aspire.cpp index aa10c3b6a8..656e1035b0 100644 --- a/firmware/config/engines/ford_aspire.cpp +++ b/firmware/config/engines/ford_aspire.cpp @@ -18,8 +18,6 @@ #include "advance_map.h" #include "engine_configuration.h" -#if EFI_SUPPORT_FORD_ASPIRE - #if DEFAULT_FUEL_LOAD_COUNT == FUEL_LOAD_COUNT /** @@ -161,5 +159,3 @@ void setFordAspireEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->engineSnifferRpmThreshold = 13000; engineConfiguration->sensorSnifferRpmThreshold = 13000; } - -#endif /* EFI_SUPPORT_FORD_ASPIRE */ diff --git a/firmware/config/engines/ford_fiesta.cpp b/firmware/config/engines/ford_fiesta.cpp index 8c6c1d8695..1dba680d14 100644 --- a/firmware/config/engines/ford_fiesta.cpp +++ b/firmware/config/engines/ford_fiesta.cpp @@ -11,8 +11,6 @@ #include "global.h" -#if EFI_SUPPORT_FORD_FIESTA - #include "ford_fiesta.h" #include "engine_math.h" @@ -30,5 +28,3 @@ void setFordFiestaDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) engineConfiguration->mafAdcChannel = EFI_ADC_14; // engineConfiguration->mafAdcChannel = EFI_ADC_NONE; this would kill functional tests } - -#endif /* EFI_SUPPORT_FORD_FIESTA */ diff --git a/firmware/config/engines/ford_fiesta.h b/firmware/config/engines/ford_fiesta.h index a54242aa27..4d0eaacc7a 100644 --- a/firmware/config/engines/ford_fiesta.h +++ b/firmware/config/engines/ford_fiesta.h @@ -5,13 +5,8 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef FORD_FIESTA_H_ -#define FORD_FIESTA_H_ -#if EFI_SUPPORT_FORD_FIESTA +#pragma once #include "engine_configuration.h" void setFordFiestaDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE); - -#endif /* EFI_SUPPORT_FORD_FIESTA */ -#endif /* FORD_FIESTA_H_ */ diff --git a/firmware/config/engines/nissan_primera.cpp b/firmware/config/engines/nissan_primera.cpp index 6113c24213..0df1bfc048 100644 --- a/firmware/config/engines/nissan_primera.cpp +++ b/firmware/config/engines/nissan_primera.cpp @@ -10,7 +10,6 @@ #include "global.h" -#if EFI_SUPPORT_NISSAN_PRIMERA #include "nissan_primera.h" EXTERN_CONFIG; @@ -32,5 +31,3 @@ void setNissanPrimeraEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { void setNissanPrimeraEngineConfiguration_360(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->trigger.type = TT_NISSAN_SR20VE_360; } - -#endif /* EFI_SUPPORT_NISSAN_PRIMERA */ diff --git a/firmware/config/engines/nissan_primera.h b/firmware/config/engines/nissan_primera.h index 636ce285e1..93ea1d1546 100644 --- a/firmware/config/engines/nissan_primera.h +++ b/firmware/config/engines/nissan_primera.h @@ -7,11 +7,7 @@ #pragma once -#if EFI_SUPPORT_NISSAN_PRIMERA - #include "engine_configuration.h" void setNissanPrimeraEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); void setNissanPrimeraEngineConfiguration_360(DECLARE_CONFIG_PARAMETER_SIGNATURE); - -#endif /* EFI_SUPPORT_NISSAN_PRIMERA */ diff --git a/firmware/config/stm32f4ems/efifeatures.h b/firmware/config/stm32f4ems/efifeatures.h index dbab14d5cb..a2a529d4c2 100644 --- a/firmware/config/stm32f4ems/efifeatures.h +++ b/firmware/config/stm32f4ems/efifeatures.h @@ -244,14 +244,9 @@ #endif /** - * While we embed multiple PnP configurations into the same firmware binary, these marcoses give us control - * over which configurations go into the binary + * Should PnP engine configurations be included in the binary? */ -#define EFI_SUPPORT_DODGE_NEON TRUE -#define EFI_SUPPORT_FORD_ASPIRE TRUE -#define EFI_SUPPORT_FORD_FIESTA TRUE -#define EFI_SUPPORT_NISSAN_PRIMERA TRUE -#define EFI_SUPPORT_1995_FORD_INLINE_6 TRUE +#define EFI_INCLUDE_ENGINE_PRESETS TRUE #ifndef EFI_ENGINE_SNIFFER #define EFI_ENGINE_SNIFFER TRUE diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index d2c9b6bd9a..e0318e0ce3 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -708,7 +708,7 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setLinearCurve(engineConfiguration->fsioCurve3Bins, 0, 100, 1); setLinearCurve(engineConfiguration->fsioCurve4Bins, 0, 100, 1); - +#if EFI_ENGINE_CONTROL setDefaultWarmupIdleCorrection(PASS_CONFIG_PARAMETER_SIGNATURE); setDefaultWarmupFuelEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); @@ -999,7 +999,7 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->tpsAccelLength = 12; engineConfiguration->tpsAccelEnrichmentThreshold = 40; // TPS % change, per engine cycle - +#endif // EFI_ENGINE_CONTROL #if EFI_FSIO /** * to test: @@ -1109,6 +1109,32 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb * And override them with engine-specific defaults */ switch (engineType) { + case MICRO_RUS_EFI: +// todo: is it time to replace MICRO_RUS_EFI, PROTEUS, PROMETHEUS_DEFAULTS with MINIMAL_PINS? maybe rename MINIMAL_PINS to DEFAULT? + case PROTEUS: + case PROMETHEUS_DEFAULTS: + case MINIMAL_PINS: + // all basic settings are already set in prepareVoidConfiguration(), no need to set anything here + // nothing to do - we do it all in setBoardConfigurationOverrides + break; + case MRE_BOARD_TEST: + mreBoardTest(PASS_CONFIG_PARAMETER_SIGNATURE); + break; + case TEST_ENGINE: + setTestEngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); + break; +#if EFI_UNIT_TEST + case TEST_ISSUE_366_BOTH: + setTestEngineIssue366both(PASS_CONFIG_PARAMETER_SIGNATURE); + break; + case TEST_ISSUE_366_RISE: + setTestEngineIssue366rise(PASS_CONFIG_PARAMETER_SIGNATURE); + break; + case ISSUE_898: + setIssue898(PASS_CONFIG_PARAMETER_SIGNATURE); + break; +#endif // EFI_UNIT_TEST +#if EFI_INCLUDE_ENGINE_PRESETS case DEFAULT_FRANKENSO: setFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; @@ -1127,29 +1153,12 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb case MRE_MIATA_NA6: setMiataNA6_VAF_MRE(PASS_CONFIG_PARAMETER_SIGNATURE); break; -#if EFI_UNIT_TEST - case ISSUE_898: - setIssue898(PASS_CONFIG_PARAMETER_SIGNATURE); - break; -#endif case MRE_MIATA_NB2_MTB: setMiataNB2_MRE_MTB(PASS_CONFIG_PARAMETER_SIGNATURE); break; case MRE_MIATA_NB2: setMiataNB2_MRE_ETB(PASS_CONFIG_PARAMETER_SIGNATURE); break; - case MICRO_RUS_EFI: -// todo: is it time to replace MICRO_RUS_EFI, PROTEUS, PROMETHEUS_DEFAULTS with MINIMAL_PINS? maybe rename MINIMAL_PINS to DEFAULT? - case PROTEUS: - case PROMETHEUS_DEFAULTS: - case MINIMAL_PINS: - // all basic settings are already set in prepareVoidConfiguration(), no need to set anything here - // nothing to do - we do it all in setBoardConfigurationOverrides - break; - case MRE_BOARD_TEST: - mreBoardTest(PASS_CONFIG_PARAMETER_SIGNATURE); - break; -#if EFI_SUPPORT_DODGE_NEON case DODGE_NEON_1995: setDodgeNeon1995EngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; @@ -1160,23 +1169,15 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb case LADA_KALINA: setLadaKalina(PASS_CONFIG_PARAMETER_SIGNATURE); break; - -#endif /* EFI_SUPPORT_DODGE_NEON */ -#if EFI_SUPPORT_FORD_ASPIRE case FORD_ASPIRE_1996: setFordAspireEngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; -#endif /* EFI_SUPPORT_FORD_ASPIRE */ -#if EFI_SUPPORT_FORD_FIESTA case FORD_FIESTA: setFordFiestaDefaultEngineConfiguration(PASS_ENGINE_PARAMETER_SIGNATURE); break; -#endif /* EFI_SUPPORT_FORD_FIESTA */ -#if EFI_SUPPORT_NISSAN_PRIMERA case NISSAN_PRIMERA: setNissanPrimeraEngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; -#endif case HONDA_ACCORD_CD: setHondaAccordConfigurationThreeWires(PASS_CONFIG_PARAMETER_SIGNATURE); break; @@ -1216,11 +1217,9 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb case MITSU_4G93: setMitsubishiConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; -#if EFI_SUPPORT_1995_FORD_INLINE_6 case FORD_INLINE_6_1995: setFordInline6(PASS_CONFIG_PARAMETER_SIGNATURE); break; -#endif /* EFI_SUPPORT_1995_FORD_INLINE_6 */ case GY6_139QMB: setGy6139qmbDefaultEngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; @@ -1269,21 +1268,6 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb case VW_ABA: setVwAba(PASS_CONFIG_PARAMETER_SIGNATURE); break; -#if EFI_UNIT_TEST - case TEST_ISSUE_366_BOTH: - setTestEngineIssue366both(PASS_CONFIG_PARAMETER_SIGNATURE); - break; - case TEST_ISSUE_366_RISE: - setTestEngineIssue366rise(PASS_CONFIG_PARAMETER_SIGNATURE); - break; -#else - case TEST_ISSUE_366_BOTH: - case TEST_ISSUE_366_RISE: -#endif - - case TEST_ENGINE: - setTestEngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); - break; case MAZDA_MIATA_2003: setMazdaMiata2003EngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; @@ -1317,7 +1301,7 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb case TOYOTA_JZS147: setToyota_jzs147EngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; - +#endif // EFI_INCLUDE_ENGINE_PRESETS default: warning(CUSTOM_UNEXPECTED_ENGINE_TYPE, "Unexpected engine type: %d", engineType); } diff --git a/simulator/simulator/efifeatures.h b/simulator/simulator/efifeatures.h index 1f7ec3f885..da667200d6 100644 --- a/simulator/simulator/efifeatures.h +++ b/simulator/simulator/efifeatures.h @@ -62,11 +62,10 @@ #define EFI_MAP_AVERAGING TRUE #define EFI_ALTERNATOR_CONTROL TRUE -#define EFI_SUPPORT_DODGE_NEON TRUE -#define EFI_SUPPORT_FORD_ASPIRE TRUE -#define EFI_SUPPORT_FORD_FIESTA TRUE -#define EFI_SUPPORT_NISSAN_PRIMERA TRUE -#define EFI_SUPPORT_1995_FORD_INLINE_6 TRUE +/** + * Should PnP engine configurations be included in the binary? + */ +#define EFI_INCLUDE_ENGINE_PRESETS TRUE #define EFI_ENGINE_AUDI_AAN FALSE #define EFI_ENGINE_SNOW_BLOWER FALSE diff --git a/unit_tests/efifeatures.h b/unit_tests/efifeatures.h index f9795529ad..47f7cd739b 100644 --- a/unit_tests/efifeatures.h +++ b/unit_tests/efifeatures.h @@ -47,11 +47,10 @@ #define EFI_CLI_SUPPORT FALSE -#define EFI_SUPPORT_FORD_ASPIRE TRUE -#define EFI_SUPPORT_DODGE_NEON TRUE -#define EFI_SUPPORT_1995_FORD_INLINE_6 TRUE -#define EFI_SUPPORT_FORD_FIESTA TRUE -#define EFI_SUPPORT_NISSAN_PRIMERA TRUE +/** + * Should PnP engine configurations be included in the binary? + */ +#define EFI_INCLUDE_ENGINE_PRESETS TRUE #define EFI_SIGNAL_EXECUTOR_ONE_TIMER FALSE #define EFI_SIGNAL_EXECUTOR_SLEEP FALSE From 836aca5426bc205f7ec518ae0f08e9c7bc20909e Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 24 Feb 2020 18:49:04 -0800 Subject: [PATCH 053/171] default to O2 (#1155) --- firmware/Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index 9342d8f8dd..c104fb43aa 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -22,8 +22,11 @@ include rusefi.mk # for 'release' options see 'clean_compile_two_versions.bat' file ifeq ($(DEBUG_LEVEL_OPT),) - # this value would be used by default. For 'release' configuration override with '-O2' or something along these lines - DEBUG_LEVEL_OPT = -O0 -ggdb -g3 + # Default to a release build - but leave in debug info. It doesn't change the hex/bin output. + DEBUG_LEVEL_OPT = -O2 -ggdb -g3 + # Comment the above and uncomment the line below if you want to debug the firmware (it's difficult-to-impossible + # to debug firmware with optimization enabled). + # DEBUG_LEVEL_OPT = -O0 -ggdb -g3 endif From 6307a446d3360b5c2fe886eb3fee366a70d5820b Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 25 Feb 2020 16:46:23 -0800 Subject: [PATCH 054/171] Omit canned configs from Proteus (#1159) * omit presets from proteus * ifdef guard --- firmware/config/boards/proteus/board.mk | 2 +- firmware/config/stm32f4ems/efifeatures.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/firmware/config/boards/proteus/board.mk b/firmware/config/boards/proteus/board.mk index 83e6d059c4..fd22b21c7e 100644 --- a/firmware/config/boards/proteus/board.mk +++ b/firmware/config/boards/proteus/board.mk @@ -9,4 +9,4 @@ BOARDINC = $(PROJECT_DIR)/config/boards/nucleo_f767 $(PROJECT_DIR)/config/stm32f LDSCRIPT= $(PROJECT_DIR)/config/boards/nucleo_f767/STM32F76xxI.ld # Override DEFAULT_ENGINE_TYPE -DDEFS += -DSTM32F767xx -DEFI_USE_OSC=TRUE -DEFI_FATAL_ERROR_PIN=GPIOE_3 -DFIRMWARE_ID=\"proteus\" -DDEFAULT_ENGINE_TYPE=PROTEUS -DUSE_ADC3_VBATT_HACK -DSTM32_ADC_USE_ADC3=TRUE +DDEFS += -DSTM32F767xx -DEFI_USE_OSC=TRUE -DEFI_FATAL_ERROR_PIN=GPIOE_3 -DFIRMWARE_ID=\"proteus\" -DDEFAULT_ENGINE_TYPE=PROTEUS -DUSE_ADC3_VBATT_HACK -DSTM32_ADC_USE_ADC3=TRUE -DEFI_INCLUDE_ENGINE_PRESETS=FALSE diff --git a/firmware/config/stm32f4ems/efifeatures.h b/firmware/config/stm32f4ems/efifeatures.h index a2a529d4c2..38f54a6c1d 100644 --- a/firmware/config/stm32f4ems/efifeatures.h +++ b/firmware/config/stm32f4ems/efifeatures.h @@ -246,7 +246,9 @@ /** * Should PnP engine configurations be included in the binary? */ +#ifndef EFI_INCLUDE_ENGINE_PRESETS #define EFI_INCLUDE_ENGINE_PRESETS TRUE +#endif #ifndef EFI_ENGINE_SNIFFER #define EFI_ENGINE_SNIFFER TRUE From f33a9bb9cf5c9008828976190b7d0d071c99b180 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 25 Feb 2020 20:33:27 -0500 Subject: [PATCH 055/171] feedback --- hardware/Common_Rail_MC33816/known_issues.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hardware/Common_Rail_MC33816/known_issues.txt b/hardware/Common_Rail_MC33816/known_issues.txt index 1a21f0f02e..2e58267e3a 100644 --- a/hardware/Common_Rail_MC33816/known_issues.txt +++ b/hardware/Common_Rail_MC33816/known_issues.txt @@ -4,5 +4,8 @@ 4) RESOLVED IN R0.2 Jumpers are not needed. Connect VccIO->VccIO_Ext and Clk->Y1-3 5) RESOLVED IN R0.2 D9 had wrong footprint blah. Wrong pin numbers to wrong pins. 6) RESOLVED IN R0.2 D10 --> D10_2, and D11 --> D11_2 should be the same package, they were 2 different / wrong footprints. - - 2) RESOLVED IN R0.3 Moved several 0805 components to the back side of the PCB for lower cost assembly. \ No newline at end of file + 7) RESOLVED IN R0.3 Moved several 0805 components to the back side of the PCB for lower cost assembly. + 8) J15 needs silk and larger hole. J20 needs silk and should use same larger terminal as J8-J9-J10 + 9) +10) +11) \ No newline at end of file From d875899373d1f4e1cb462c7b351a4a7953fd1201 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 25 Feb 2020 20:37:46 -0500 Subject: [PATCH 056/171] more of same --- hardware/Common_Rail_MC33816/known_issues.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/Common_Rail_MC33816/known_issues.txt b/hardware/Common_Rail_MC33816/known_issues.txt index 2e58267e3a..681eb9a89d 100644 --- a/hardware/Common_Rail_MC33816/known_issues.txt +++ b/hardware/Common_Rail_MC33816/known_issues.txt @@ -6,6 +6,6 @@ 6) RESOLVED IN R0.2 D10 --> D10_2, and D11 --> D11_2 should be the same package, they were 2 different / wrong footprints. 7) RESOLVED IN R0.3 Moved several 0805 components to the back side of the PCB for lower cost assembly. 8) J15 needs silk and larger hole. J20 needs silk and should use same larger terminal as J8-J9-J10 - 9) + 9) J15 & J20 silk ^^^ should be on both top and bottom sides of the board 10) 11) \ No newline at end of file From ce2ec3d544b694fdf6c586e5dd34457fe27dbee4 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 25 Feb 2020 21:35:21 -0500 Subject: [PATCH 057/171] TEST_33816 --- .../controllers/algo/auto_generated_enums.cpp | 2 ++ .../subaru-ej20gn/board_configuration.cpp | 2 +- firmware/config/engines/custom_engine.cpp | 11 +++++++++++ firmware/config/engines/custom_engine.h | 1 + firmware/config/engines/mazda_miata_1_6.cpp | 2 +- firmware/config/engines/vw.cpp | 2 +- .../controllers/algo/auto_generated_enums.cpp | 2 ++ .../controllers/algo/engine_configuration.cpp | 3 +++ firmware/controllers/algo/rusefi_enums.h | 2 ++ firmware/hw_layer/hardware.cpp | 2 +- firmware/hw_layer/mc33816.cpp | 17 ++++++++++------- firmware/hw_layer/mc33816.h | 4 +++- 12 files changed, 38 insertions(+), 12 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp index 13218c4504..15385a2f0d 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp +++ b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp @@ -661,6 +661,8 @@ case TOYOTA_JZS147: return "TOYOTA_JZS147"; case VAG_18_TURBO: return "VAG_18_TURBO"; +case TEST_33816: + return "TEST_33816"; case VW_B6: return "VW_B6"; case VW_ABA: diff --git a/firmware/config/boards/subaru-ej20gn/board_configuration.cpp b/firmware/config/boards/subaru-ej20gn/board_configuration.cpp index e6dc998cbc..52a9c24fcb 100644 --- a/firmware/config/boards/subaru-ej20gn/board_configuration.cpp +++ b/firmware/config/boards/subaru-ej20gn/board_configuration.cpp @@ -78,7 +78,7 @@ void setSdCardConfigurationOverrides(void) { engineConfiguration->is_enabled_spi_1 = false; engineConfiguration->sdCardSpiDevice = SPI_DEVICE_1; engineConfiguration->sdCardCsPin = GPIOA_2; - engineConfiguration->isSdCardEnabled = false; + CONFIG(isSdCardEnabled) = false; } /** diff --git a/firmware/config/engines/custom_engine.cpp b/firmware/config/engines/custom_engine.cpp index 9867658a30..66a5898906 100644 --- a/firmware/config/engines/custom_engine.cpp +++ b/firmware/config/engines/custom_engine.cpp @@ -514,3 +514,14 @@ void mreBoardTest(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->injectionPins[2 - 1] = GPIOE_10; #endif /* BOARD_TLE8888_COUNT */ } + +void setTest33816EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + + CONFIG(mc33816_cs) = GPIOD_7; + CONFIG(mc33816_rstb) = GPIOD_5; + CONFIG(mc33816_driven) = GPIOD_6; + + CONFIG(isSdCardEnabled) = false; + + CONFIG(mc33816spiDevice) = SPI_DEVICE_3; +} diff --git a/firmware/config/engines/custom_engine.h b/firmware/config/engines/custom_engine.h index b65364af23..c9eee29c30 100644 --- a/firmware/config/engines/custom_engine.h +++ b/firmware/config/engines/custom_engine.h @@ -21,3 +21,4 @@ void setIssue898(DECLARE_CONFIG_PARAMETER_SIGNATURE); void mreBoardTest(DECLARE_CONFIG_PARAMETER_SIGNATURE); +void setTest33816EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/config/engines/mazda_miata_1_6.cpp b/firmware/config/engines/mazda_miata_1_6.cpp index 7e58256695..8fc3cf6353 100644 --- a/firmware/config/engines/mazda_miata_1_6.cpp +++ b/firmware/config/engines/mazda_miata_1_6.cpp @@ -203,7 +203,7 @@ void setMiataNA6_MAP_Frankenso(DECLARE_CONFIG_PARAMETER_SIGNATURE) { setFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); engineConfiguration->isHip9011Enabled = false; - engineConfiguration->isSdCardEnabled = false; + CONFIG(isSdCardEnabled) = false; setMiataNA6_settings(PASS_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/config/engines/vw.cpp b/firmware/config/engines/vw.cpp index 6840cbca3c..280cee6cf8 100644 --- a/firmware/config/engines/vw.cpp +++ b/firmware/config/engines/vw.cpp @@ -60,7 +60,7 @@ void setVwAba(DECLARE_CONFIG_PARAMETER_SIGNATURE) { setFuelTablesLoadBin(20, mapRange PASS_CONFIG_PARAMETER_SUFFIX); setTimingLoadBin(20, mapRange PASS_CONFIG_PARAMETER_SUFFIX); - engineConfiguration->isSdCardEnabled = false; + CONFIG(isSdCardEnabled) = false; engineConfiguration->tpsMin = 740; engineConfiguration->tpsMax = 135; } diff --git a/firmware/controllers/algo/auto_generated_enums.cpp b/firmware/controllers/algo/auto_generated_enums.cpp index 032b1aa40e..666efbd60d 100644 --- a/firmware/controllers/algo/auto_generated_enums.cpp +++ b/firmware/controllers/algo/auto_generated_enums.cpp @@ -805,6 +805,8 @@ case TOYOTA_JZS147: return "TOYOTA_JZS147"; case VAG_18_TURBO: return "VAG_18_TURBO"; +case TEST_33816: + return "TEST_33816"; case VW_B6: return "VW_B6"; case VW_ABA: diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index e0318e0ce3..60e18f5107 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -1301,6 +1301,9 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb case TOYOTA_JZS147: setToyota_jzs147EngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; + case TEST_33816: + setTest33816EngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); + break; #endif // EFI_INCLUDE_ENGINE_PRESETS default: warning(CUSTOM_UNEXPECTED_ENGINE_TYPE, "Unexpected engine type: %d", engineType); diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index ba0dc7cd1b..493d5d67c4 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -193,6 +193,8 @@ typedef enum { SUBARUEJ20G_DEFAULTS = 101, VAG_18_TURBO = 102, + TEST_33816 = 103, + Force_4_bytes_size_engine_type = ENUM_32_BITS, } engine_type_e; diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 3a87c09798..069eef4a25 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -507,7 +507,7 @@ void initHardware(Logging *l) { initOutputPins(PASS_ENGINE_PARAMETER_SIGNATURE); #if EFI_MC33816 - initMc33816(); + initMc33816(sharedLogger); #endif /* EFI_MC33816 */ #if EFI_MAX_31855 diff --git a/firmware/hw_layer/mc33816.cpp b/firmware/hw_layer/mc33816.cpp index 2ef446503d..f3034604d5 100644 --- a/firmware/hw_layer/mc33816.cpp +++ b/firmware/hw_layer/mc33816.cpp @@ -28,6 +28,9 @@ static OutputPin chipSelect; static OutputPin resetB; static OutputPin driven; +static unsigned short mcChipId; +static Logging* logger; + static SPIConfig spiCfg = { .circular = false, .end_cb = NULL, .ssport = NULL, @@ -43,7 +46,7 @@ static SPIDriver *driver; static void showStats() { - + scheduleMsg(logger, "MC %d", mcChipId); } // Mostly unused @@ -71,7 +74,7 @@ static void spi_writew(unsigned short param) { //spiUnselect(driver); } -static unsigned short id() { +static unsigned short readId() { spiSelect(driver); spi_writew(0xBAA1); unsigned short ID = recv_16bit_spi(); @@ -95,8 +98,7 @@ static void setup_spi() { spiUnselect(driver); } -static void enable_flash() -{ +static void enable_flash() { spiSelect(driver); spi_writew(0x2001); //ch1 spi_writew(0x0018); //enable flash @@ -261,7 +263,8 @@ static void download_register(int r_target) { spiUnselect(driver); } -void initMc33816() { +void initMc33816(Logging *sharedLogger) { + logger = sharedLogger; // default spi3mosiPin PB5 // default spi3misoPin PB4 // default spi3sckPin PB3 @@ -296,7 +299,7 @@ void initMc33816() { spiStart(driver, &spiCfg); - //addConsoleAction("mc33_stats", showStats); + addConsoleAction("mc33_stats", showStats); //addConsoleActionI("mc33_send", sendWord); // Does starting turn this high to begin with?? @@ -309,7 +312,7 @@ void initMc33816() { chThdSleepMilliseconds(10); setup_spi(); - int mc_id = id(); + mcChipId = readId(); download_RAM(CODE_RAM1); // transfers code RAM1 download_RAM(CODE_RAM2); // transfers code RAM2 diff --git a/firmware/hw_layer/mc33816.h b/firmware/hw_layer/mc33816.h index ee5bfd0f98..00295b0f5e 100644 --- a/firmware/hw_layer/mc33816.h +++ b/firmware/hw_layer/mc33816.h @@ -7,6 +7,8 @@ #pragma once +#include "global.h" + const int MAX_SPI_MODE_A_TRANSFER_SIZE = 31; //max size for register config transfer enum { @@ -22,5 +24,5 @@ enum { REG_DIAG }; -void initMc33816(void); +void initMc33816(Logging *logger); From 1ce1f43a4970b679437db0a3869f5b1f46b15b23 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Tue, 25 Feb 2020 22:01:13 -0500 Subject: [PATCH 058/171] fresh generated --- .../generated/engine_state_generated.h | 184 +++++++++++++++++- .../generated/trigger_central_generated.h | 6 +- .../rusefi/config/generated/EngineState.java | 122 +++++++++++- 3 files changed, 306 insertions(+), 6 deletions(-) diff --git a/firmware/controllers/generated/engine_state_generated.h b/firmware/controllers/generated/engine_state_generated.h index f888117f58..9c6d5554aa 100644 --- a/firmware/controllers/generated/engine_state_generated.h +++ b/firmware/controllers/generated/engine_state_generated.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/engine_state.txt Tue Nov 05 23:21:45 EST 2019 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/engine_state.txt Sat Feb 22 15:19:24 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_STATE_GENERATED_H @@ -9,6 +9,99 @@ struct speed_density_s { /** offset 0 bit 0 */ bool isTChargeAirModel : 1; + /** + offset 0 bit 1 */ + bool unusedBit_1_1 : 1; + /** + offset 0 bit 2 */ + bool unusedBit_1_2 : 1; + /** + offset 0 bit 3 */ + bool unusedBit_1_3 : 1; + /** + offset 0 bit 4 */ + bool unusedBit_1_4 : 1; + /** + offset 0 bit 5 */ + bool unusedBit_1_5 : 1; + /** + offset 0 bit 6 */ + bool unusedBit_1_6 : 1; + /** + offset 0 bit 7 */ + bool unusedBit_1_7 : 1; + /** + offset 0 bit 8 */ + bool unusedBit_1_8 : 1; + /** + offset 0 bit 9 */ + bool unusedBit_1_9 : 1; + /** + offset 0 bit 10 */ + bool unusedBit_1_10 : 1; + /** + offset 0 bit 11 */ + bool unusedBit_1_11 : 1; + /** + offset 0 bit 12 */ + bool unusedBit_1_12 : 1; + /** + offset 0 bit 13 */ + bool unusedBit_1_13 : 1; + /** + offset 0 bit 14 */ + bool unusedBit_1_14 : 1; + /** + offset 0 bit 15 */ + bool unusedBit_1_15 : 1; + /** + offset 0 bit 16 */ + bool unusedBit_1_16 : 1; + /** + offset 0 bit 17 */ + bool unusedBit_1_17 : 1; + /** + offset 0 bit 18 */ + bool unusedBit_1_18 : 1; + /** + offset 0 bit 19 */ + bool unusedBit_1_19 : 1; + /** + offset 0 bit 20 */ + bool unusedBit_1_20 : 1; + /** + offset 0 bit 21 */ + bool unusedBit_1_21 : 1; + /** + offset 0 bit 22 */ + bool unusedBit_1_22 : 1; + /** + offset 0 bit 23 */ + bool unusedBit_1_23 : 1; + /** + offset 0 bit 24 */ + bool unusedBit_1_24 : 1; + /** + offset 0 bit 25 */ + bool unusedBit_1_25 : 1; + /** + offset 0 bit 26 */ + bool unusedBit_1_26 : 1; + /** + offset 0 bit 27 */ + bool unusedBit_1_27 : 1; + /** + offset 0 bit 28 */ + bool unusedBit_1_28 : 1; + /** + offset 0 bit 29 */ + bool unusedBit_1_29 : 1; + /** + offset 0 bit 30 */ + bool unusedBit_1_30 : 1; + /** + offset 0 bit 31 */ + bool unusedBit_1_31 : 1; /** * Speed-density logic: calculated air mass in one cylinder, in grams * offset 4 @@ -210,6 +303,93 @@ struct engine_state2_s { /** offset 88 bit 2 */ bool isAutomaticIdle : 1; + /** + offset 88 bit 3 */ + bool unusedBit_14_3 : 1; + /** + offset 88 bit 4 */ + bool unusedBit_14_4 : 1; + /** + offset 88 bit 5 */ + bool unusedBit_14_5 : 1; + /** + offset 88 bit 6 */ + bool unusedBit_14_6 : 1; + /** + offset 88 bit 7 */ + bool unusedBit_14_7 : 1; + /** + offset 88 bit 8 */ + bool unusedBit_14_8 : 1; + /** + offset 88 bit 9 */ + bool unusedBit_14_9 : 1; + /** + offset 88 bit 10 */ + bool unusedBit_14_10 : 1; + /** + offset 88 bit 11 */ + bool unusedBit_14_11 : 1; + /** + offset 88 bit 12 */ + bool unusedBit_14_12 : 1; + /** + offset 88 bit 13 */ + bool unusedBit_14_13 : 1; + /** + offset 88 bit 14 */ + bool unusedBit_14_14 : 1; + /** + offset 88 bit 15 */ + bool unusedBit_14_15 : 1; + /** + offset 88 bit 16 */ + bool unusedBit_14_16 : 1; + /** + offset 88 bit 17 */ + bool unusedBit_14_17 : 1; + /** + offset 88 bit 18 */ + bool unusedBit_14_18 : 1; + /** + offset 88 bit 19 */ + bool unusedBit_14_19 : 1; + /** + offset 88 bit 20 */ + bool unusedBit_14_20 : 1; + /** + offset 88 bit 21 */ + bool unusedBit_14_21 : 1; + /** + offset 88 bit 22 */ + bool unusedBit_14_22 : 1; + /** + offset 88 bit 23 */ + bool unusedBit_14_23 : 1; + /** + offset 88 bit 24 */ + bool unusedBit_14_24 : 1; + /** + offset 88 bit 25 */ + bool unusedBit_14_25 : 1; + /** + offset 88 bit 26 */ + bool unusedBit_14_26 : 1; + /** + offset 88 bit 27 */ + bool unusedBit_14_27 : 1; + /** + offset 88 bit 28 */ + bool unusedBit_14_28 : 1; + /** + offset 88 bit 29 */ + bool unusedBit_14_29 : 1; + /** + offset 88 bit 30 */ + bool unusedBit_14_30 : 1; + /** + offset 88 bit 31 */ + bool unusedBit_14_31 : 1; /** * offset 92 */ @@ -250,4 +430,4 @@ typedef struct engine_state2_s engine_state2_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/engine_state.txt Tue Nov 05 23:21:45 EST 2019 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/engine_state.txt Sat Feb 22 15:19:24 EST 2020 diff --git a/firmware/controllers/generated/trigger_central_generated.h b/firmware/controllers/generated/trigger_central_generated.h index 21164bd4e0..b8a35d41fc 100644 --- a/firmware/controllers/generated/trigger_central_generated.h +++ b/firmware/controllers/generated/trigger_central_generated.h @@ -1,10 +1,10 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/trigger_central.txt Tue Sep 03 19:14:15 EDT 2019 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/trigger_central.txt Sat Feb 22 15:19:25 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_TRIGGER_CENTRAL_GENERATED_H #define CONTROLLERS_GENERATED_TRIGGER_CENTRAL_GENERATED_H #include "rusefi_types.h" -#define HW_EVENT_TYPES (2 * PWM_PHASE_MAX_WAVE_PER_PWM) +#define HW_EVENT_TYPES 6 // start of trigger_central_s struct trigger_central_s { trigger_central_s(); @@ -31,4 +31,4 @@ typedef struct trigger_central_s trigger_central_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/trigger_central.txt Tue Sep 03 19:14:15 EDT 2019 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/trigger_central.txt Sat Feb 22 15:19:25 EST 2020 diff --git a/java_console/models/src/com/rusefi/config/generated/EngineState.java b/java_console/models/src/com/rusefi/config/generated/EngineState.java index 27f70e16cf..c8567ccdff 100644 --- a/java_console/models/src/com/rusefi/config/generated/EngineState.java +++ b/java_console/models/src/com/rusefi/config/generated/EngineState.java @@ -1,12 +1,43 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/engine_state.txt Tue Nov 05 23:21:45 EST 2019 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/engine_state.txt Sat Feb 22 15:19:24 EST 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; public class EngineState { public static final Field ISTCHARGEAIRMODEL = Field.create("ISTCHARGEAIRMODEL", 0, FieldType.BIT, 0); + public static final Field UNUSEDBIT_1_1 = Field.create("UNUSEDBIT_1_1", 0, FieldType.BIT, 1); + public static final Field UNUSEDBIT_1_2 = Field.create("UNUSEDBIT_1_2", 0, FieldType.BIT, 2); + public static final Field UNUSEDBIT_1_3 = Field.create("UNUSEDBIT_1_3", 0, FieldType.BIT, 3); + public static final Field UNUSEDBIT_1_4 = Field.create("UNUSEDBIT_1_4", 0, FieldType.BIT, 4); + public static final Field UNUSEDBIT_1_5 = Field.create("UNUSEDBIT_1_5", 0, FieldType.BIT, 5); + public static final Field UNUSEDBIT_1_6 = Field.create("UNUSEDBIT_1_6", 0, FieldType.BIT, 6); + public static final Field UNUSEDBIT_1_7 = Field.create("UNUSEDBIT_1_7", 0, FieldType.BIT, 7); + public static final Field UNUSEDBIT_1_8 = Field.create("UNUSEDBIT_1_8", 0, FieldType.BIT, 8); + public static final Field UNUSEDBIT_1_9 = Field.create("UNUSEDBIT_1_9", 0, FieldType.BIT, 9); + public static final Field UNUSEDBIT_1_10 = Field.create("UNUSEDBIT_1_10", 0, FieldType.BIT, 10); + public static final Field UNUSEDBIT_1_11 = Field.create("UNUSEDBIT_1_11", 0, FieldType.BIT, 11); + public static final Field UNUSEDBIT_1_12 = Field.create("UNUSEDBIT_1_12", 0, FieldType.BIT, 12); + public static final Field UNUSEDBIT_1_13 = Field.create("UNUSEDBIT_1_13", 0, FieldType.BIT, 13); + public static final Field UNUSEDBIT_1_14 = Field.create("UNUSEDBIT_1_14", 0, FieldType.BIT, 14); + public static final Field UNUSEDBIT_1_15 = Field.create("UNUSEDBIT_1_15", 0, FieldType.BIT, 15); + public static final Field UNUSEDBIT_1_16 = Field.create("UNUSEDBIT_1_16", 0, FieldType.BIT, 16); + public static final Field UNUSEDBIT_1_17 = Field.create("UNUSEDBIT_1_17", 0, FieldType.BIT, 17); + public static final Field UNUSEDBIT_1_18 = Field.create("UNUSEDBIT_1_18", 0, FieldType.BIT, 18); + public static final Field UNUSEDBIT_1_19 = Field.create("UNUSEDBIT_1_19", 0, FieldType.BIT, 19); + public static final Field UNUSEDBIT_1_20 = Field.create("UNUSEDBIT_1_20", 0, FieldType.BIT, 20); + public static final Field UNUSEDBIT_1_21 = Field.create("UNUSEDBIT_1_21", 0, FieldType.BIT, 21); + public static final Field UNUSEDBIT_1_22 = Field.create("UNUSEDBIT_1_22", 0, FieldType.BIT, 22); + public static final Field UNUSEDBIT_1_23 = Field.create("UNUSEDBIT_1_23", 0, FieldType.BIT, 23); + public static final Field UNUSEDBIT_1_24 = Field.create("UNUSEDBIT_1_24", 0, FieldType.BIT, 24); + public static final Field UNUSEDBIT_1_25 = Field.create("UNUSEDBIT_1_25", 0, FieldType.BIT, 25); + public static final Field UNUSEDBIT_1_26 = Field.create("UNUSEDBIT_1_26", 0, FieldType.BIT, 26); + public static final Field UNUSEDBIT_1_27 = Field.create("UNUSEDBIT_1_27", 0, FieldType.BIT, 27); + public static final Field UNUSEDBIT_1_28 = Field.create("UNUSEDBIT_1_28", 0, FieldType.BIT, 28); + public static final Field UNUSEDBIT_1_29 = Field.create("UNUSEDBIT_1_29", 0, FieldType.BIT, 29); + public static final Field UNUSEDBIT_1_30 = Field.create("UNUSEDBIT_1_30", 0, FieldType.BIT, 30); + public static final Field UNUSEDBIT_1_31 = Field.create("UNUSEDBIT_1_31", 0, FieldType.BIT, 31); public static final Field AIRMASSINONECYLINDER = Field.create("AIRMASSINONECYLINDER", 4, FieldType.FLOAT); public static final Field TCHARGE = Field.create("TCHARGE", 8, FieldType.FLOAT); public static final Field TCHARGEK = Field.create("TCHARGEK", 12, FieldType.FLOAT); @@ -31,6 +62,35 @@ public class EngineState { public static final Field ISCRANKINGSTATE = Field.create("ISCRANKINGSTATE", 88, FieldType.BIT, 0); public static final Field HASETBPEDALPOSITIONSENSOR = Field.create("HASETBPEDALPOSITIONSENSOR", 88, FieldType.BIT, 1); public static final Field ISAUTOMATICIDLE = Field.create("ISAUTOMATICIDLE", 88, FieldType.BIT, 2); + public static final Field UNUSEDBIT_14_3 = Field.create("UNUSEDBIT_14_3", 88, FieldType.BIT, 3); + public static final Field UNUSEDBIT_14_4 = Field.create("UNUSEDBIT_14_4", 88, FieldType.BIT, 4); + public static final Field UNUSEDBIT_14_5 = Field.create("UNUSEDBIT_14_5", 88, FieldType.BIT, 5); + public static final Field UNUSEDBIT_14_6 = Field.create("UNUSEDBIT_14_6", 88, FieldType.BIT, 6); + public static final Field UNUSEDBIT_14_7 = Field.create("UNUSEDBIT_14_7", 88, FieldType.BIT, 7); + public static final Field UNUSEDBIT_14_8 = Field.create("UNUSEDBIT_14_8", 88, FieldType.BIT, 8); + public static final Field UNUSEDBIT_14_9 = Field.create("UNUSEDBIT_14_9", 88, FieldType.BIT, 9); + public static final Field UNUSEDBIT_14_10 = Field.create("UNUSEDBIT_14_10", 88, FieldType.BIT, 10); + public static final Field UNUSEDBIT_14_11 = Field.create("UNUSEDBIT_14_11", 88, FieldType.BIT, 11); + public static final Field UNUSEDBIT_14_12 = Field.create("UNUSEDBIT_14_12", 88, FieldType.BIT, 12); + public static final Field UNUSEDBIT_14_13 = Field.create("UNUSEDBIT_14_13", 88, FieldType.BIT, 13); + public static final Field UNUSEDBIT_14_14 = Field.create("UNUSEDBIT_14_14", 88, FieldType.BIT, 14); + public static final Field UNUSEDBIT_14_15 = Field.create("UNUSEDBIT_14_15", 88, FieldType.BIT, 15); + public static final Field UNUSEDBIT_14_16 = Field.create("UNUSEDBIT_14_16", 88, FieldType.BIT, 16); + public static final Field UNUSEDBIT_14_17 = Field.create("UNUSEDBIT_14_17", 88, FieldType.BIT, 17); + public static final Field UNUSEDBIT_14_18 = Field.create("UNUSEDBIT_14_18", 88, FieldType.BIT, 18); + public static final Field UNUSEDBIT_14_19 = Field.create("UNUSEDBIT_14_19", 88, FieldType.BIT, 19); + public static final Field UNUSEDBIT_14_20 = Field.create("UNUSEDBIT_14_20", 88, FieldType.BIT, 20); + public static final Field UNUSEDBIT_14_21 = Field.create("UNUSEDBIT_14_21", 88, FieldType.BIT, 21); + public static final Field UNUSEDBIT_14_22 = Field.create("UNUSEDBIT_14_22", 88, FieldType.BIT, 22); + public static final Field UNUSEDBIT_14_23 = Field.create("UNUSEDBIT_14_23", 88, FieldType.BIT, 23); + public static final Field UNUSEDBIT_14_24 = Field.create("UNUSEDBIT_14_24", 88, FieldType.BIT, 24); + public static final Field UNUSEDBIT_14_25 = Field.create("UNUSEDBIT_14_25", 88, FieldType.BIT, 25); + public static final Field UNUSEDBIT_14_26 = Field.create("UNUSEDBIT_14_26", 88, FieldType.BIT, 26); + public static final Field UNUSEDBIT_14_27 = Field.create("UNUSEDBIT_14_27", 88, FieldType.BIT, 27); + public static final Field UNUSEDBIT_14_28 = Field.create("UNUSEDBIT_14_28", 88, FieldType.BIT, 28); + public static final Field UNUSEDBIT_14_29 = Field.create("UNUSEDBIT_14_29", 88, FieldType.BIT, 29); + public static final Field UNUSEDBIT_14_30 = Field.create("UNUSEDBIT_14_30", 88, FieldType.BIT, 30); + public static final Field UNUSEDBIT_14_31 = Field.create("UNUSEDBIT_14_31", 88, FieldType.BIT, 31); public static final Field CRANKING_BASEFUEL = Field.create("CRANKING_BASEFUEL", 92, FieldType.FLOAT); public static final Field CRANKING_COOLANTTEMPERATURECOEFFICIENT = Field.create("CRANKING_COOLANTTEMPERATURECOEFFICIENT", 96, FieldType.FLOAT); public static final Field CRANKING_TPSCOEFFICIENT = Field.create("CRANKING_TPSCOEFFICIENT", 100, FieldType.FLOAT); @@ -51,6 +111,37 @@ public class EngineState { public static final Field CLTTIMINGCORRECTION = Field.create("CLTTIMINGCORRECTION", 160, FieldType.FLOAT); public static final Field[] VALUES = { ISTCHARGEAIRMODEL, + UNUSEDBIT_1_1, + UNUSEDBIT_1_2, + UNUSEDBIT_1_3, + UNUSEDBIT_1_4, + UNUSEDBIT_1_5, + UNUSEDBIT_1_6, + UNUSEDBIT_1_7, + UNUSEDBIT_1_8, + UNUSEDBIT_1_9, + UNUSEDBIT_1_10, + UNUSEDBIT_1_11, + UNUSEDBIT_1_12, + UNUSEDBIT_1_13, + UNUSEDBIT_1_14, + UNUSEDBIT_1_15, + UNUSEDBIT_1_16, + UNUSEDBIT_1_17, + UNUSEDBIT_1_18, + UNUSEDBIT_1_19, + UNUSEDBIT_1_20, + UNUSEDBIT_1_21, + UNUSEDBIT_1_22, + UNUSEDBIT_1_23, + UNUSEDBIT_1_24, + UNUSEDBIT_1_25, + UNUSEDBIT_1_26, + UNUSEDBIT_1_27, + UNUSEDBIT_1_28, + UNUSEDBIT_1_29, + UNUSEDBIT_1_30, + UNUSEDBIT_1_31, AIRMASSINONECYLINDER, TCHARGE, TCHARGEK, @@ -75,6 +166,35 @@ public class EngineState { ISCRANKINGSTATE, HASETBPEDALPOSITIONSENSOR, ISAUTOMATICIDLE, + UNUSEDBIT_14_3, + UNUSEDBIT_14_4, + UNUSEDBIT_14_5, + UNUSEDBIT_14_6, + UNUSEDBIT_14_7, + UNUSEDBIT_14_8, + UNUSEDBIT_14_9, + UNUSEDBIT_14_10, + UNUSEDBIT_14_11, + UNUSEDBIT_14_12, + UNUSEDBIT_14_13, + UNUSEDBIT_14_14, + UNUSEDBIT_14_15, + UNUSEDBIT_14_16, + UNUSEDBIT_14_17, + UNUSEDBIT_14_18, + UNUSEDBIT_14_19, + UNUSEDBIT_14_20, + UNUSEDBIT_14_21, + UNUSEDBIT_14_22, + UNUSEDBIT_14_23, + UNUSEDBIT_14_24, + UNUSEDBIT_14_25, + UNUSEDBIT_14_26, + UNUSEDBIT_14_27, + UNUSEDBIT_14_28, + UNUSEDBIT_14_29, + UNUSEDBIT_14_30, + UNUSEDBIT_14_31, CRANKING_BASEFUEL, CRANKING_COOLANTTEMPERATURECOEFFICIENT, CRANKING_TPSCOEFFICIENT, From c35f4aa2e301b5d42d99a87438aa5d7860beb228 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Tue, 25 Feb 2020 22:38:08 -0500 Subject: [PATCH 059/171] more mc33816 --- .../microrusefi/board_configuration.cpp | 2 +- .../boards/prometheus/board_configuration.cpp | 2 +- .../boards/skeleton/board_configuration.cpp | 2 +- firmware/config/engines/custom_engine.cpp | 21 +++++++++++++++++++ firmware/controllers/engine_controller.cpp | 2 +- firmware/hw_layer/mc33816.cpp | 4 ++++ hardware/Common_Rail_MC33816/known_issues.txt | 2 +- 7 files changed, 30 insertions(+), 5 deletions(-) diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 300a911dfd..620d3ceddd 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -78,7 +78,7 @@ static void setupVbatt() { static void setupTle8888() { // Enable spi3 - engineConfiguration->is_enabled_spi_3 = true; + CONFIG(is_enabled_spi_3) = true; // Wire up spi3 engineConfiguration->spi3mosiPin = GPIOB_5; diff --git a/firmware/config/boards/prometheus/board_configuration.cpp b/firmware/config/boards/prometheus/board_configuration.cpp index 97d8fdb404..46a7522095 100644 --- a/firmware/config/boards/prometheus/board_configuration.cpp +++ b/firmware/config/boards/prometheus/board_configuration.cpp @@ -224,7 +224,7 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->is_enabled_spi_1 = true; engineConfiguration->is_enabled_spi_2 = false; - engineConfiguration->is_enabled_spi_3 = true; + CONFIG(is_enabled_spi_3) = true; engineConfiguration->spi1mosiPin = GPIOB_5; engineConfiguration->spi1MosiMode = PO_DEFAULT; // PAL_STM32_OTYPE_PUSHPULL diff --git a/firmware/config/boards/skeleton/board_configuration.cpp b/firmware/config/boards/skeleton/board_configuration.cpp index 641145b987..ebc6aae926 100644 --- a/firmware/config/boards/skeleton/board_configuration.cpp +++ b/firmware/config/boards/skeleton/board_configuration.cpp @@ -42,7 +42,7 @@ EXTERN_ENGINE; // This shows a SPI connected TLE8888. static void setupTle8888() { // Enable the SPI channel and set up the SPI pins - engineConfiguration->is_enabled_spi_3 = true; + CONFIG(is_enabled_spi_3) = true; engineConfiguration->spi3mosiPin = GPIOB_5; engineConfiguration->spi3misoPin = GPIOB_4; engineConfiguration->spi3sckPin = GPIOB_3; diff --git a/firmware/config/engines/custom_engine.cpp b/firmware/config/engines/custom_engine.cpp index 66a5898906..346da06eea 100644 --- a/firmware/config/engines/custom_engine.cpp +++ b/firmware/config/engines/custom_engine.cpp @@ -515,12 +515,33 @@ void mreBoardTest(DECLARE_CONFIG_PARAMETER_SIGNATURE) { #endif /* BOARD_TLE8888_COUNT */ } +/** + * set engine_type 103 + */ void setTest33816EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + // grey + // default spi3mosiPin PB5 + // white + // default spi3misoPin PB4 + // violet + // default spi3sckPin PB3 + + + // blue CONFIG(mc33816_cs) = GPIOD_7; + // green CONFIG(mc33816_rstb) = GPIOD_5; + // yellow CONFIG(mc33816_driven) = GPIOD_6; + // enable_spi 3 + CONFIG(is_enabled_spi_3) = true; + // Wire up spi3 + engineConfiguration->spi3mosiPin = GPIOB_5; + engineConfiguration->spi3misoPin = GPIOB_4; + engineConfiguration->spi3sckPin = GPIOB_3; + CONFIG(isSdCardEnabled) = false; CONFIG(mc33816spiDevice) = SPI_DEVICE_3; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 9becb4ec95..b67742df20 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -843,6 +843,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200222; + return 201200225; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/hw_layer/mc33816.cpp b/firmware/hw_layer/mc33816.cpp index f3034604d5..ba55c7c788 100644 --- a/firmware/hw_layer/mc33816.cpp +++ b/firmware/hw_layer/mc33816.cpp @@ -265,6 +265,10 @@ static void download_register(int r_target) { void initMc33816(Logging *sharedLogger) { logger = sharedLogger; + + // + // see setTest33816EngineConfiguration + // // default spi3mosiPin PB5 // default spi3misoPin PB4 // default spi3sckPin PB3 diff --git a/hardware/Common_Rail_MC33816/known_issues.txt b/hardware/Common_Rail_MC33816/known_issues.txt index 681eb9a89d..fa1ace0b5d 100644 --- a/hardware/Common_Rail_MC33816/known_issues.txt +++ b/hardware/Common_Rail_MC33816/known_issues.txt @@ -7,5 +7,5 @@ 7) RESOLVED IN R0.3 Moved several 0805 components to the back side of the PCB for lower cost assembly. 8) J15 needs silk and larger hole. J20 needs silk and should use same larger terminal as J8-J9-J10 9) J15 & J20 silk ^^^ should be on both top and bottom sides of the board -10) +10) power LED. back side is pretty much free pre-assembled, front side is manual assembly. maybe one LED on each side? 11) \ No newline at end of file From ada5d5fee7b9740f316e3e9cb4eb4222d7c884b6 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 25 Feb 2020 20:52:11 -0800 Subject: [PATCH 060/171] insert dsb on flash write (#1160) --- firmware/hw_layer/ports/stm32/flash.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/firmware/hw_layer/ports/stm32/flash.c b/firmware/hw_layer/ports/stm32/flash.c index a68d0b4fd2..999210952a 100644 --- a/firmware/hw_layer/ports/stm32/flash.c +++ b/firmware/hw_layer/ports/stm32/flash.c @@ -194,6 +194,12 @@ static void flashWriteData(flashaddr_t address, const flashdata_t data) { /* Write the data */ *(flashdata_t*) address = data; + // Cortex-M7 (STM32F7/H7) can execute out order - need to force a full flush + // so that we actually wait for the operation to complete! +#if CORTEX_MODEL == 7 + __DSB(); +#endif + /* Wait for completion */ flashWaitWhileBusy(); From 6c747ebbbe8fcb99745ab864cc763cee749eb707 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 26 Feb 2020 14:30:02 -0800 Subject: [PATCH 061/171] this flag did nothing (#1161) --- firmware/config/boards/kinetis/efifeatures.h | 2 -- firmware/config/boards/skeleton/efifeatures.h | 2 -- firmware/config/stm32f4ems/efifeatures.h | 2 -- firmware/hw_layer/hardware.cpp | 11 +++++++---- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/firmware/config/boards/kinetis/efifeatures.h b/firmware/config/boards/kinetis/efifeatures.h index 448c642511..be0073d6ac 100644 --- a/firmware/config/boards/kinetis/efifeatures.h +++ b/firmware/config/boards/kinetis/efifeatures.h @@ -117,8 +117,6 @@ */ #define EFI_ENGINE_CONTROL TRUE -#define EFI_SPEED_DENSITY TRUE - /** * MCP42010 digital potentiometer support. This could be useful if you are stimulating some * stock ECU diff --git a/firmware/config/boards/skeleton/efifeatures.h b/firmware/config/boards/skeleton/efifeatures.h index e17d06b02d..2f44af7dd0 100644 --- a/firmware/config/boards/skeleton/efifeatures.h +++ b/firmware/config/boards/skeleton/efifeatures.h @@ -162,8 +162,6 @@ #define EFI_ENGINE_CONTROL TRUE -#define EFI_SPEED_DENSITY TRUE - #define EFI_ANALOG_SENSORS TRUE diff --git a/firmware/config/stm32f4ems/efifeatures.h b/firmware/config/stm32f4ems/efifeatures.h index 38f54a6c1d..8cdadab69d 100644 --- a/firmware/config/stm32f4ems/efifeatures.h +++ b/firmware/config/stm32f4ems/efifeatures.h @@ -124,8 +124,6 @@ */ #define EFI_ENGINE_CONTROL TRUE -#define EFI_SPEED_DENSITY TRUE - /** * MCP42010 digital potentiometer support. This could be useful if you are stimulating some * stock ECU diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 069eef4a25..d8b019f3a6 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -54,13 +54,13 @@ #include "mc33816.h" #endif /* EFI_MC33816 */ -#if EFI_SPEED_DENSITY +#if EFI_MAP_AVERAGING #include "map_averaging.h" -#endif /* EFI_SPEED_DENSITY */ +#endif #if EFI_INTERNAL_FLASH #include "flash_main.h" -#endif /* EFI_INTERNAL_FLASH */ +#endif EXTERN_ENGINE ; @@ -217,7 +217,7 @@ void adc_callback_fast(ADCDriver *adcp, adcsample_t *buffer, size_t n) { */ efiAssertVoid(CUSTOM_ERR_6676, getCurrentRemainingStack() > 128, "lowstck#9b"); -#if EFI_SENSOR_CHART +#if EFI_SENSOR_CHART && EFI_SHAFT_POSITION_INPUT if (ENGINE(sensorChartMode) == SC_AUX_FAST1) { float voltage = getAdcValue("fAux1", engineConfiguration->auxFastSensor1_adcChannel); scAddData(getCrankshaftAngleNt(getTimeNowNt() PASS_ENGINE_PARAMETER_SUFFIX), voltage); @@ -500,8 +500,11 @@ void initHardware(Logging *l) { #if HAL_USE_SPI initSpiModules(engineConfiguration); #endif /* HAL_USE_SPI */ + +#if BOARD_EXT_GPIOCHIPS > 0 // initSmartGpio depends on 'initSpiModules' initSmartGpio(PASS_ENGINE_PARAMETER_SIGNATURE); +#endif // output pins potentially depend on 'initSmartGpio' initOutputPins(PASS_ENGINE_PARAMETER_SIGNATURE); From 397907a06f33031efe8c97bc613ac40df9190bca Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 26 Feb 2020 15:16:35 -0800 Subject: [PATCH 062/171] Support disabling most/all features (#1162) * this flag did nothing * guard features properly --- firmware/console/binary/tunerstudio.cpp | 4 +-- firmware/console/status_loop.cpp | 15 ++++++++--- firmware/controllers/algo/advance_map.cpp | 3 +++ firmware/controllers/algo/engine.cpp | 5 +++- firmware/controllers/algo/engine.h | 2 ++ firmware/controllers/algo/fuel_math.cpp | 2 +- firmware/controllers/core/fsio_impl.cpp | 2 ++ firmware/controllers/engine_controller.cpp | 6 +++++ .../controllers/engine_cycle/spark_logic.cpp | 4 +++ firmware/controllers/flash_main.cpp | 3 +++ firmware/controllers/math/engine_math.cpp | 4 +-- firmware/controllers/sensors/map.cpp | 2 ++ firmware/controllers/settings.cpp | 25 ++++++------------- .../controllers/trigger/trigger_decoder.h | 13 +++++----- firmware/development/logic_analyzer.cpp | 6 +++++ firmware/hw_layer/pin_repository.cpp | 3 +++ 16 files changed, 67 insertions(+), 32 deletions(-) diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index 94d07d1b1d..2d648aa57c 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -801,8 +801,8 @@ int tunerStudioHandleCrcCommand(ts_channel_s *tsChannel, char *data, int incomin tsOutputChannels.debugIntField3 = index; } -#if EFI_PROD_CODE - executeTSCommand(subsystem, index); +#if EFI_PROD_CODE && EFI_ENGINE_CONTROL + executeTSCommand(subsystem, index); #endif /* EFI_PROD_CODE */ sendOkResponse(tsChannel, TS_CRC); } diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index 2c4d452e26..169efde629 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -310,7 +310,10 @@ static void printSensors(Logging *log) { if (hasMapSensor(PASS_ENGINE_PARAMETER_SIGNATURE)) { reportSensorF(log, GAUGE_NAME_FUEL_VE, "%", engine->engineState.currentBaroCorrectedVE * PERCENT_MULT, 2); } + +#if EFI_SHAFT_POSITION_INPUT reportSensorF(log, GAUGE_NAME_VVT, "deg", engine->triggerCentral.getVVTPosition(), 1); +#endif float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE); reportSensorF(log, GAUGE_NAME_ENGINE_LOAD, "x", engineLoad, 2); @@ -767,7 +770,9 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ // 136 tsOutputChannels->pedalPosition = hasPedalPositionSensor(PASS_ENGINE_PARAMETER_SIGNATURE) ? getPedalPosition(PASS_ENGINE_PARAMETER_SIGNATURE) : 0; // 140 +#if EFI_ENGINE_CONTROL tsOutputChannels->injectorDutyCycle = getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX); +#endif // 148 tsOutputChannels->fuelTankLevel = engine->sensors.fuelTankLevel; // 160 @@ -785,8 +790,12 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ // 224 efitimesec_t timeSeconds = getTimeNowSeconds(); tsOutputChannels->timeSeconds = timeSeconds; + +#if EFI_SHAFT_POSITION_INPUT // 248 tsOutputChannels->vvtPosition = engine->triggerCentral.getVVTPosition(); +#endif + // 252 tsOutputChannels->engineMode = packEngineMode(PASS_ENGINE_PARAMETER_SIGNATURE); // 120 @@ -817,9 +826,6 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ tsOutputChannels->hasFatalError = hasFirmwareError(); - tsOutputChannels->coilDutyCycle = getCoilDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX); - - tsOutputChannels->isWarnNow = engine->engineState.warnings.isWarningNow(timeSeconds, true); #if EFI_HIP_9011 tsOutputChannels->isKnockChipOk = (instance.invalidHip9011ResponsesCount == 0); @@ -894,6 +900,7 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ tsOutputChannels->brakePedalState = engine->brakePedalState; tsOutputChannels->acSwitchState = engine->acSwitchState; +#if EFI_ENGINE_CONTROL // tCharge depends on the previous state, so we should use the stored value. tsOutputChannels->tCharge = ENGINE(engineState.sd.tCharge); float timing = engine->engineState.timingAdvance; @@ -903,6 +910,8 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ tsOutputChannels->crankingFuelMs = engine->isCylinderCleanupMode ? 0 : getCrankingFuel(PASS_ENGINE_PARAMETER_SIGNATURE); tsOutputChannels->chargeAirMass = engine->engineState.sd.airMassInOneCylinder; + tsOutputChannels->coilDutyCycle = getCoilDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_ENGINE_CONTROL switch (engineConfiguration->debugMode) { case DBG_AUX_TEMPERATURE: diff --git a/firmware/controllers/algo/advance_map.cpp b/firmware/controllers/algo/advance_map.cpp index 63acaf87df..5cef2cb8d9 100644 --- a/firmware/controllers/algo/advance_map.cpp +++ b/firmware/controllers/algo/advance_map.cpp @@ -28,6 +28,8 @@ #include "idle_thread.h" #include "allsensors.h" +#if EFI_ENGINE_CONTROL + EXTERN_ENGINE ; @@ -328,3 +330,4 @@ void buildTimingMap(float advanceMax DECLARE_CONFIG_PARAMETER_SUFFIX) { } } +#endif // EFI_ENGINE_CONTROL diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index b83b2b8d99..dbb347c80c 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -243,6 +243,7 @@ void Engine::preCalculate(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #endif } +#if EFI_SHAFT_POSITION_INPUT void Engine::OnTriggerStateDecodingError() { Engine *engine = this; EXPAND_Engine; @@ -340,7 +341,7 @@ void Engine::OnTriggerSyncronization(bool wasSynchronized) { } } - +#endif void Engine::setConfig(persistent_config_s *config) { this->config = config; @@ -487,11 +488,13 @@ void Engine::periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineState.periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); +#if EFI_ENGINE_CONTROL engine->m.beforeFuelCalc = getTimeNowLowerNt(); int rpm = GET_RPM(); ENGINE(injectionDuration) = getInjectionDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX); engine->m.fuelCalcTime = getTimeNowLowerNt() - engine->m.beforeFuelCalc; +#endif } void doScheduleStopEngine(DECLARE_ENGINE_PARAMETER_SIGNATURE) { diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index d73c1741e8..502322661a 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -58,11 +58,13 @@ public: cyclic_buffer triggerErrorDetection; +#if EFI_SHAFT_POSITION_INPUT void OnTriggerStateDecodingError(); void OnTriggerStateProperState(efitick_t nowNt) override; void OnTriggerSyncronization(bool wasSynchronized) override; void OnTriggerInvalidIndex(int currentIndex) override; void OnTriggerSynchronizationLost() override; +#endif void setConfig(persistent_config_s *config); injection_mode_e getCurrentInjectionMode(DECLARE_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 39db2b0ecd..72bb80fb9e 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -247,7 +247,7 @@ percent_t getInjectorDutyCycle(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { floatms_t getInjectionDuration(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { ScopePerf perf(PE::GetInjectionDuration); -#if EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT +#if EFI_SHAFT_POSITION_INPUT bool isCranking = ENGINE(rpmCalculator).isCranking(PASS_ENGINE_PARAMETER_SIGNATURE); injection_mode_e mode = isCranking ? engineConfiguration->crankingInjectionMode : diff --git a/firmware/controllers/core/fsio_impl.cpp b/firmware/controllers/core/fsio_impl.cpp index 4fb636c12d..fff60bdd1a 100644 --- a/firmware/controllers/core/fsio_impl.cpp +++ b/firmware/controllers/core/fsio_impl.cpp @@ -135,9 +135,11 @@ float getEngineValue(le_action_e action DECLARE_ENGINE_PARAMETER_SUFFIX) { return getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE); case LE_METHOD_MAP: return getMap(PASS_ENGINE_PARAMETER_SIGNATURE); +#if EFI_SHAFT_POSITION_INPUT case LE_METHOD_INTAKE_VVT: case LE_METHOD_EXHAUST_VVT: return engine->triggerCentral.getVVTPosition(); +#endif case LE_METHOD_TIME_SINCE_BOOT: return getTimeNowSeconds(); diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index b67742df20..524e1d2f66 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -101,9 +101,11 @@ EXTERN_ENGINE; void initDataStructures(DECLARE_ENGINE_PARAMETER_SIGNATURE) { +#if EFI_ENGINE_CONTROL initFuelMap(PASS_ENGINE_PARAMETER_SIGNATURE); initTimingMap(PASS_ENGINE_PARAMETER_SIGNATURE); initSpeedDensity(PASS_ENGINE_PARAMETER_SIGNATURE); +#endif // EFI_ENGINE_CONTROL } static void mostCommonInitEngineController(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { @@ -194,7 +196,11 @@ class EngineStateBlinkingTask : public PeriodicTimerController { void PeriodicTask() override { counter++; +#if EFI_SHAFT_POSITION_INPUT bool is_running = ENGINE(rpmCalculator).isRunning(PASS_ENGINE_PARAMETER_SIGNATURE); +#else + bool is_running = false; +#endif if (is_running) { // blink in running mode diff --git a/firmware/controllers/engine_cycle/spark_logic.cpp b/firmware/controllers/engine_cycle/spark_logic.cpp index 46e0125dd1..1bfb581238 100644 --- a/firmware/controllers/engine_cycle/spark_logic.cpp +++ b/firmware/controllers/engine_cycle/spark_logic.cpp @@ -13,6 +13,8 @@ #include "event_queue.h" #include "perf_trace.h" +#if EFI_ENGINE_CONTROL + #if EFI_TUNER_STUDIO #include "tunerstudio_configuration.h" #endif /* EFI_TUNER_STUDIO */ @@ -495,3 +497,5 @@ percent_t getCoilDutyCycle(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { floatms_t engineCycleDuration = getCrankshaftRevolutionTimeMs(rpm) * (engine->getOperationMode(PASS_ENGINE_PARAMETER_SIGNATURE) == TWO_STROKE ? 1 : 2); return 100 * totalPerCycle / engineCycleDuration; } + +#endif // EFI_ENGINE_CONTROL diff --git a/firmware/controllers/flash_main.cpp b/firmware/controllers/flash_main.cpp index 772808599e..8f93fad206 100644 --- a/firmware/controllers/flash_main.cpp +++ b/firmware/controllers/flash_main.cpp @@ -94,7 +94,10 @@ void writeToFlashNow(void) { scheduleMsg(logger, "Flashing failed"); } assertEngineReference(); + +#if EFI_SHAFT_POSITION_INPUT resetMaxValues(); +#endif } static bool isValidCrc(persistent_config_container_s *state) { diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index e97d11e4dc..1f7a9e3c5d 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -520,8 +520,6 @@ void prepareOutputSignals(DECLARE_ENGINE_PARAMETER_SIGNATURE) { TRIGGER_WAVEFORM(prepareShape()); } -#endif /* EFI_ENGINE_CONTROL */ - void setFuelRpmBin(float from, float to DECLARE_CONFIG_PARAMETER_SUFFIX) { setLinearCurve(config->fuelRpmBins, from, to); } @@ -554,3 +552,5 @@ void setAlgorithm(engine_load_mode_e algo DECLARE_CONFIG_PARAMETER_SUFFIX) { void setFlatInjectorLag(float value DECLARE_CONFIG_PARAMETER_SUFFIX) { setArrayValues(engineConfiguration->injector.battLagCorr, value); } + +#endif /* EFI_ENGINE_CONTROL */ diff --git a/firmware/controllers/sensors/map.cpp b/firmware/controllers/sensors/map.cpp index f393719d3d..09a1e40edb 100644 --- a/firmware/controllers/sensors/map.cpp +++ b/firmware/controllers/sensors/map.cpp @@ -227,10 +227,12 @@ static void printMAPInfo(void) { if (engineConfiguration->hasFrequencyReportingMapSensor) { scheduleMsg(logger, "instant value=%.2fHz @ %s", mapFreq, hwPortname(CONFIG(frequencyReportingMapInputPin))); } else { +#if EFI_MAP_AVERAGING scheduleMsg(logger, "map type=%d/%s MAP=%.2fkPa mapMinBufferLength=%d", engineConfiguration->map.sensor.type, getAir_pressure_sensor_type_e(engineConfiguration->map.sensor.type), getMap(), mapMinBufferLength); +#endif // EFI_MAP_AVERAGING adc_channel_e mapAdc = engineConfiguration->map.sensor.hwChannel; static char pinNameBuffer[16]; diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index bb860edfe2..57c1c254f7 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -134,22 +134,14 @@ const char* getConfigurationName(engine_type_e engineType) { switch (engineType) { case DEFAULT_FRANKENSO: return "DEFAULT_FRANKENSO"; -#if EFI_SUPPORT_DODGE_NEON case DODGE_NEON_1995: return "Neon95"; -#endif /* EFI_SUPPORT_DODGE_NEON */ -#if EFI_SUPPORT_FORD_ASPIRE case FORD_ASPIRE_1996: return "Aspire"; -#endif /* EFI_SUPPORT_FORD_ASPIRE */ -#if EFI_SUPPORT_FORD_FIESTA case FORD_FIESTA: return "Fiesta"; -#endif /* EFI_SUPPORT_FORD_FIESTA */ -#if EFI_SUPPORT_NISSAN_PRIMERA case NISSAN_PRIMERA: return "Primera"; -#endif /* EFI_SUPPORT_NISSAN_PRIMERA */ case HONDA_ACCORD_CD: return "Accord3"; case HONDA_ACCORD_CD_TWO_WIRES: @@ -1051,7 +1043,6 @@ const plain_get_integer_s getI_plain[] = { {"warning_period", (int*)&engineConfiguration->warningPeriod}, {"hard_limit", &engineConfiguration->rpmHardLimit}, // {"firing_order", setFiringOrder}, -// {"algorithm", setAlgorithmInt}, // {"injection_pin_mode", setInjectionPinMode}, // {"ignition_pin_mode", setIgnitionPinMode}, // {"idle_pin_mode", setIdlePinMode}, @@ -1169,7 +1160,8 @@ typedef struct { } command_f_s; const command_f_s commandsF[] = { -#if EFI_ENGINE_CONTROL && EFI_ENABLE_MOCK_ADC +#if EFI_ENGINE_CONTROL +#if EFI_ENABLE_MOCK_ADC {MOCK_IAT_COMMAND, setMockIatVoltage}, {MOCK_PPS_POSITION_COMMAND, setMockThrottlePedalPosition}, {MOCK_PPS_VOLTAGE_COMMAND, setMockThrottlePedalSensorVoltage}, @@ -1179,9 +1171,7 @@ const command_f_s commandsF[] = { {MOCK_MAP_COMMAND, setMockMapVoltage}, {"mock_vbatt_voltage", setMockVBattVoltage}, {MOCK_CLT_COMMAND, setMockCltVoltage}, -#endif /* EFI_ENGINE_CONTROL && EFI_ENABLE_MOCK_ADC */ - {"fsio_curve_1_value", setFsioCurve1Value}, - {"fsio_curve_2_value", setFsioCurve2Value}, +#endif // EFI_ENABLE_MOCK_ADC {"ignition_offset", setIgnitionOffset}, {"injection_offset", setInjectionOffset}, {"global_trigger_offset_angle", setGlobalTriggerAngleOffset}, @@ -1199,6 +1189,9 @@ const command_f_s commandsF[] = { {"engine_decel_threshold", setDecelThr}, {"engine_decel_multiplier", setDecelMult}, {"flat_injector_lag", setFlatInjectorLag}, +#endif // EFI_ENGINE_CONTROL + {"fsio_curve_1_value", setFsioCurve1Value}, + {"fsio_curve_2_value", setFsioCurve2Value}, #if EFI_PROD_CODE #if EFI_VEHICLE_SPEED {"mock_vehicle_speed", setMockVehicleSpeed}, @@ -1236,6 +1229,7 @@ static void setTpsErrorDetectionTooHigh(int v) { const command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode}, {"call_from_pitstop", setCallFromPitStop}, +#if EFI_ENGINE_CONTROL {"cranking_rpm", setCrankingRpm}, {"cranking_injection_mode", setCrankingInjectionMode}, {"injection_mode", setInjectionMode}, @@ -1259,6 +1253,7 @@ const command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode}, {"idle_solenoid_freq", setIdleSolenoidFrequency}, {"tps_accel_len", setTpsAccelLen}, {"engine_load_accel_len", setEngineLoadAccelLen}, +#endif // EFI_ENGINE_CONTROL #if EFI_PROD_CODE {"bor", setBor}, #if EFI_CAN_SUPPORT @@ -1408,10 +1403,6 @@ void initSettings(void) { addConsoleActionII("set_toothed_wheel", setToothedWheel); - - // flat curve - constant injector lag regardless of voltage - addConsoleActionF("set_flat_injector_lag", setFlatInjectorLag); - addConsoleActionFF("set_injector_lag", setInjectorLag); addConsoleActionFF("set_fan", setFanSetting); diff --git a/firmware/controllers/trigger/trigger_decoder.h b/firmware/controllers/trigger/trigger_decoder.h index 69b8eaa77c..9583a88222 100644 --- a/firmware/controllers/trigger/trigger_decoder.h +++ b/firmware/controllers/trigger/trigger_decoder.h @@ -14,12 +14,13 @@ class TriggerState; -class TriggerStateListener { - public: - virtual void OnTriggerStateProperState(efitick_t nowNt) = 0; - virtual void OnTriggerSyncronization(bool wasSynchronized) = 0; - virtual void OnTriggerInvalidIndex(int currentIndex) = 0; - virtual void OnTriggerSynchronizationLost() = 0; +struct TriggerStateListener { +#if EFI_SHAFT_POSITION_INPUT + virtual void OnTriggerStateProperState(efitick_t nowNt) = 0; + virtual void OnTriggerSyncronization(bool wasSynchronized) = 0; + virtual void OnTriggerInvalidIndex(int currentIndex) = 0; + virtual void OnTriggerSynchronizationLost() = 0; +#endif }; typedef void (*TriggerStateCallback)(TriggerState *); diff --git a/firmware/development/logic_analyzer.cpp b/firmware/development/logic_analyzer.cpp index bcb9e4cc36..c1c5d9eb66 100644 --- a/firmware/development/logic_analyzer.cpp +++ b/firmware/development/logic_analyzer.cpp @@ -79,7 +79,11 @@ void WaveReader::onFallEvent() { efitick_t width = nowUs - widthEventTimeUs; last_wave_high_widthUs = width; +#if EFI_SHAFT_POSITION_INPUT int revolutionCounter = getRevolutionCounter(); +#else + int revolutionCounter = 0; +#endif totalOnTimeAccumulatorUs += width; if (currentRevolutionCounter != revolutionCounter) { @@ -227,7 +231,9 @@ void initWaveAnalyzer(Logging *sharedLogger) { initWave(PROTOCOL_WA_CHANNEL_3, 2); initWave(PROTOCOL_WA_CHANNEL_4, 3); +#if EFI_SHAFT_POSITION_INPUT addTriggerEventListener(waTriggerEventListener, "wave analyzer", engine); +#endif addConsoleAction("waveinfo", showWaveInfo); diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index cf295f9fd7..249eb57a53 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -182,8 +182,11 @@ void initPinRepository(void) { initialized = true; addConsoleAction(CMD_PINS, reportPins); + +#if (BOARD_TLE8888_COUNT > 0) addConsoleAction("tle8888", tle8888_dump_regs); addConsoleAction("tle8888init", requestTLE8888initialization); +#endif } bool brain_pin_is_onchip(brain_pin_e brainPin) From 3312dd8112d0bfa1e675b678651ba360eccaffbc Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 27 Feb 2020 01:11:44 -0500 Subject: [PATCH 063/171] verboseTLE8888 --- .../algo/engine_configuration_generated_structures.h | 6 +++--- .../kinetis/config/controllers/algo/rusefi_generated.h | 4 ++-- .../generated/engine_configuration_generated_structures.h | 6 +++--- firmware/controllers/generated/rusefi_generated.h | 4 ++-- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_frankenso.ini | 4 ++-- firmware/tunerstudio/rusefi_kinetis.ini | 4 ++-- firmware/tunerstudio/rusefi_microrusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_prometheus.ini | 4 ++-- firmware/tunerstudio/rusefi_proteus.ini | 4 ++-- .../models/src/com/rusefi/config/generated/Fields.java | 8 ++++---- 12 files changed, 27 insertions(+), 27 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 4fa221b2d4..647e992dae 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Feb 16 16:11:47 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Feb 27 01:01:33 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1294,7 +1294,7 @@ struct engine_configuration_s { bool useLcdScreen : 1; /** offset 744 bit 13 */ - bool unusedAnotherOne : 1; + bool verboseTLE8888 : 1; /** offset 744 bit 14 */ bool unusedOldWarmupAfr : 1; @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Feb 16 16:11:47 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Feb 27 01:01:33 EST 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 8b87720c44..d2010dd6e4 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -2072,8 +2072,6 @@ #define unused_former_warmup_target_afr_offset_hex 830 #define unused_offset 972 #define unused_offset_hex 3cc -#define unusedAnotherOne_offset 744 -#define unusedAnotherOne_offset_hex 2e8 #define unusedAtOldBoardConfigurationEnd_offset 1052 #define unusedAtOldBoardConfigurationEnd_offset_hex 41c #define unusedBit4_1476_offset 1476 @@ -2249,6 +2247,8 @@ #define vehicleSpeedSensorInputPin_offset_hex 3c8 #define veLoadBins_offset 18464 #define veLoadBins_offset_hex 4820 +#define verboseTLE8888_offset 744 +#define verboseTLE8888_offset_hex 2e8 #define verboseTriggerSynchDetails_offset 1476 #define verboseTriggerSynchDetails_offset_hex 5c4 #define veRpmBins_offset 18528 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index adfd3d482e..54c4daf4b5 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:34 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:20 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1294,7 +1294,7 @@ struct engine_configuration_s { bool useLcdScreen : 1; /** offset 744 bit 13 */ - bool unusedAnotherOne : 1; + bool verboseTLE8888 : 1; /** offset 744 bit 14 */ bool unusedOldWarmupAfr : 1; @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:34 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:20 EST 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 70bc613b86..123717a5c8 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -2072,8 +2072,6 @@ #define unused_former_warmup_target_afr_offset_hex 830 #define unused_offset 972 #define unused_offset_hex 3cc -#define unusedAnotherOne_offset 744 -#define unusedAnotherOne_offset_hex 2e8 #define unusedAtOldBoardConfigurationEnd_offset 1052 #define unusedAtOldBoardConfigurationEnd_offset_hex 41c #define unusedBit4_1476_offset 1476 @@ -2249,6 +2247,8 @@ #define vehicleSpeedSensorInputPin_offset_hex 3c8 #define veLoadBins_offset 18464 #define veLoadBins_offset_hex 4820 +#define verboseTLE8888_offset 744 +#define verboseTLE8888_offset_hex 2e8 #define verboseTriggerSynchDetails_offset 1476 #define verboseTriggerSynchDetails_offset_hex 5c4 #define veRpmBins_offset 18528 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 5d9480ee93..562ecae6c1 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -631,7 +631,7 @@ bit is_enabled_spi_2 bit enabledStep1Limiter; bit useTpicAdvancedMode; bit useLcdScreen; - bit unusedAnotherOne; + bit verboseTLE8888; bit unusedOldWarmupAfr; bit onOffAlternatorLogic; +This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control. bit isCJ125Enabled diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 7948c1c7fd..d083888c3c 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:11 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:20 EST 2020 pageSize = 20000 page = 1 @@ -377,7 +377,7 @@ page = 1 enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" - unusedAnotherOne = bits, U32, 744, [13:13], "false", "true" + verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 2da91c6144..ab70964013 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:17 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:28 EST 2020 pageSize = 20000 page = 1 @@ -377,7 +377,7 @@ page = 1 enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" - unusedAnotherOne = bits, U32, 744, [13:13], "false", "true" + verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 12b707c4d3..3963a29d12 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Feb 18 16:38:24 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Feb 27 01:01:33 EST 2020 pageSize = 20000 page = 1 @@ -377,7 +377,7 @@ page = 1 enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" - unusedAnotherOne = bits, U32, 744, [13:13], "false", "true" + verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index a3dadc0b67..1395264d5a 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:14 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:26 EST 2020 pageSize = 20000 page = 1 @@ -377,7 +377,7 @@ page = 1 enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" - unusedAnotherOne = bits, U32, 744, [13:13], "false", "true" + verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 730e357ac2..0b73cf40fe 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:19 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:30 EST 2020 pageSize = 20000 page = 1 @@ -377,7 +377,7 @@ page = 1 enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" - unusedAnotherOne = bits, U32, 744, [13:13], "false", "true" + verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index ecf9acde95..9b0430f35b 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 18 16:38:22 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:31 EST 2020 pageSize = 20000 page = 1 @@ -377,7 +377,7 @@ page = 1 enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" - unusedAnotherOne = bits, U32, 744, [13:13], "false", "true" + verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 3d279f841d..ad2daf96a7 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Feb 16 16:11:34 EST 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:20 EST 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1370,7 +1370,6 @@ public class Fields { public static final int unused_former_warmup_target_afr_offset = 2096; public static final int unused_former_warmup_target_afr_offset_hex = 830; public static final int unused_offset = 972; - public static final int unusedAnotherOne_offset = 744; public static final int unusedAtOldBoardConfigurationEnd_offset = 1052; public static final int unusedBit4_1476_offset = 1476; public static final int unusedBit_250_10_offset = 976; @@ -1461,6 +1460,7 @@ public class Fields { public static final int vehicleSpeedSensorInputPin_offset = 968; public static final int veLoadBins_offset = 18464; public static final int veLoadBins_offset_hex = 4820; + public static final int verboseTLE8888_offset = 744; public static final int verboseTriggerSynchDetails_offset = 1476; public static final int veRpmBins_offset = 18528; public static final int veRpmBins_offset_hex = 4860; @@ -1763,7 +1763,7 @@ public class Fields { public static final Field ENABLEDSTEP1LIMITER = Field.create("ENABLEDSTEP1LIMITER", 744, FieldType.BIT, 10); public static final Field USETPICADVANCEDMODE = Field.create("USETPICADVANCEDMODE", 744, FieldType.BIT, 11); public static final Field USELCDSCREEN = Field.create("USELCDSCREEN", 744, FieldType.BIT, 12); - public static final Field UNUSEDANOTHERONE = Field.create("UNUSEDANOTHERONE", 744, FieldType.BIT, 13); + public static final Field VERBOSETLE8888 = Field.create("VERBOSETLE8888", 744, FieldType.BIT, 13); public static final Field UNUSEDOLDWARMUPAFR = Field.create("UNUSEDOLDWARMUPAFR", 744, FieldType.BIT, 14); public static final Field ONOFFALTERNATORLOGIC = Field.create("ONOFFALTERNATORLOGIC", 744, FieldType.BIT, 15); public static final Field ISCJ125ENABLED = Field.create("ISCJ125ENABLED", 744, FieldType.BIT, 16); @@ -2661,7 +2661,7 @@ public class Fields { ENABLEDSTEP1LIMITER, USETPICADVANCEDMODE, USELCDSCREEN, - UNUSEDANOTHERONE, + VERBOSETLE8888, UNUSEDOLDWARMUPAFR, ONOFFALTERNATORLOGIC, ISCJ125ENABLED, From 89e6a3354539e07bf500995508ef9926334cf11f Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 27 Feb 2020 01:32:26 -0500 Subject: [PATCH 064/171] giving C code access to CONFIG --- .../controllers/algo/engine_configuration.h | 11 +------- .../algo/persistent_configuration.h | 19 +++++++++++++ firmware/controllers/global_shared.h | 27 ++++++++++++------- 3 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 firmware/controllers/algo/persistent_configuration.h diff --git a/firmware/controllers/algo/engine_configuration.h b/firmware/controllers/algo/engine_configuration.h index 97ed15c0da..5b98393966 100644 --- a/firmware/controllers/algo/engine_configuration.h +++ b/firmware/controllers/algo/engine_configuration.h @@ -8,9 +8,7 @@ #pragma once -#include "globalaccess.h" -#include "crc.h" -#include "engine_configuration_generated_structures.h" +#include "persistent_configuration.h" #ifndef DEFAULT_ENGINE_TYPE #define DEFAULT_ENGINE_TYPE DEFAULT_FRANKENSO @@ -26,13 +24,6 @@ float getRpmMultiplier(operation_mode_e mode); void setOperationMode(engine_configuration_s *engineConfiguration, operation_mode_e mode); -typedef struct { - int version; - int size; - persistent_config_s persistentConfiguration; - crc_t value; -} persistent_config_container_s; - void prepareVoidConfiguration(engine_configuration_s *activeConfiguration); void setTargetRpmCurve(int rpm DECLARE_CONFIG_PARAMETER_SUFFIX); int getTargetRpmForIdleCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/algo/persistent_configuration.h b/firmware/controllers/algo/persistent_configuration.h new file mode 100644 index 0000000000..041a76da14 --- /dev/null +++ b/firmware/controllers/algo/persistent_configuration.h @@ -0,0 +1,19 @@ +/* + * @file persistent_configuration.h + * + * @date Feb 27, 2020 + * @author Andrey Belomutskiy, (c) 2012-2020 + */ + +#pragma once + +#include "globalaccess.h" +#include "crc.h" +#include "engine_configuration_generated_structures.h" + +typedef struct { + int version; + int size; + persistent_config_s persistentConfiguration; + crc_t value; +} persistent_config_container_s; diff --git a/firmware/controllers/global_shared.h b/firmware/controllers/global_shared.h index 313414ad84..21bf5e8b60 100644 --- a/firmware/controllers/global_shared.h +++ b/firmware/controllers/global_shared.h @@ -32,10 +32,24 @@ #define EXTERN_CONFIG \ extern engine_configuration_s *engineConfiguration; \ - extern engine_configuration_s & activeConfiguration; \ + extern engine_configuration_s activeConfiguration; \ extern persistent_config_container_s persistentState; \ extern persistent_config_s *config; \ + +/** + * this macro allows the compiled to figure out the complete static address, that's a performance + * optimization which is hopefully useful at least for anything trigger-related + * + * this is related to the fact that for unit tests we prefer to explicitly pass references in method signature thus code covered by + * unit tests would need to use by-reference access. These macro allow us to have faster by-address access in real firmware and by-reference + * access in unit tests + */ +#define CONFIG(x) persistentState.persistentConfiguration.engineConfiguration.x + + +#ifdef __cplusplus + #define EXTERN_ENGINE \ extern Engine ___engine; \ extern Engine *engine; \ @@ -58,15 +72,6 @@ #define PASS_CONFIG_PARAMETER_SIGNATURE #define PASS_CONFIG_PARAMETER_SUFFIX -/** - * this macro allows the compiled to figure out the complete static address, that's a performance - * optimization which is hopefully useful at least for anything trigger-related - * - * this is related to the fact that for unit tests we prefer to explicitly pass references in method signature thus code covered by - * unit tests would need to use by-reference access. These macro allow us to have faster by-address access in real firmware and by-reference - * access in unit tests - */ -#define CONFIG(x) persistentState.persistentConfiguration.engineConfiguration.x #define ENGINE(x) ___engine.x #define DEFINE_CONFIG_PARAM(x, y) @@ -74,3 +79,5 @@ #define PASS_CONFIG_PARAM(x) #define EXPECTED_REMAINING_STACK 128 + +#endif /* __cplusplus */ From 877d140ffc747802492bef58de5e1c88f2761be0 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 27 Feb 2020 01:51:21 -0500 Subject: [PATCH 065/171] fixing build --- firmware/controllers/global_shared.h | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/firmware/controllers/global_shared.h b/firmware/controllers/global_shared.h index 21bf5e8b60..d0bb855ee4 100644 --- a/firmware/controllers/global_shared.h +++ b/firmware/controllers/global_shared.h @@ -30,12 +30,10 @@ #include "global.h" -#define EXTERN_CONFIG \ +#define EXTERN_ENGINE_CONFIGURATION \ extern engine_configuration_s *engineConfiguration; \ - extern engine_configuration_s activeConfiguration; \ extern persistent_config_container_s persistentState; \ - extern persistent_config_s *config; \ - + extern persistent_config_s *config; /** * this macro allows the compiled to figure out the complete static address, that's a performance @@ -47,9 +45,19 @@ */ #define CONFIG(x) persistentState.persistentConfiguration.engineConfiguration.x - #ifdef __cplusplus +/** + * & is reference in C++ (not C) + * Ref is a pointer that: + * you access with dot instead of arrow + * Cannot be null + * This is about EFI_ACTIVE_CONFIGURATION_IN_FLASH + */ +#define EXTERN_CONFIG \ + EXTERN_ENGINE_CONFIGURATION \ + extern engine_configuration_s & activeConfiguration; \ + #define EXTERN_ENGINE \ extern Engine ___engine; \ extern Engine *engine; \ From 8c38bd5ad19e27013676649dcb18860ce084313f Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 27 Feb 2020 02:11:20 -0500 Subject: [PATCH 066/171] verboseTLE8888 --- firmware/controllers/settings.cpp | 2 ++ firmware/hw_layer/drivers/gpio/tle8888.c | 26 ++++++++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 57c1c254f7..65206cf40f 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -887,6 +887,8 @@ static void enableOrDisable(const char *param, bool isEnabled) { engine->hwTriggerInputEnabled = isEnabled; } else if (strEqualCaseInsensitive(param, "useTLE8888_cranking_hack")) { CONFIG(useTLE8888_cranking_hack) = isEnabled; + } else if (strEqualCaseInsensitive(param, "verboseTLE8888")) { + CONFIG(verboseTLE8888) = isEnabled; } else if (strEqualCaseInsensitive(param, "etb_auto")) { engine->etbAutoTune = isEnabled; } else if (strEqualCaseInsensitive(param, "cranking_constant_dwell")) { diff --git a/firmware/hw_layer/drivers/gpio/tle8888.c b/firmware/hw_layer/drivers/gpio/tle8888.c index c16ba542c0..49cf72ab44 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.c +++ b/firmware/hw_layer/drivers/gpio/tle8888.c @@ -35,11 +35,14 @@ #if (BOARD_TLE8888_COUNT > 0) +#include "persistent_configuration.h" #include "hardware.h" #include "gpio/gpio_ext.h" #include "pin_repository.h" #include "os_util.h" +EXTERN_ENGINE_CONFIGURATION; + /* * TODO list: */ @@ -167,12 +170,16 @@ static uint16_t wdDiagResponse = 0; static bool needInitialSpi = true; static bool isWatchdogHappy = false; static bool wasWatchdogHappy = false; -int resetCounter = 0; + +static int selfResetCounter = 0; +static int lowVoltageResetCounter = 0; +static int requestedResetCounter = 0; +int tle8888reinitializationCounter = 0; + float vBattForTle8888 = 0; // set debug_mode 31 static int tle8888SpiCounter = 0; -int tle8888reinitializationCounter = 0; // that's a strange variable for troubleshooting int tle8888initResponsesAccumulator = 0; static int initResponse0 = 0; @@ -215,6 +222,7 @@ static const char* tle8888_pin_names[TLE8888_OUTPUTS] = { #define getTotalErrorCounter() ((TotalErrorCounterValue >> 8) & 0x3f) #if EFI_TUNER_STUDIO +// set debug_mode 31 void tle8888PostState(TsDebugChannels *debugChannels) { debugChannels->debugIntField1 = getWindowWatchdog(); @@ -229,7 +237,7 @@ void tle8888PostState(TsDebugChannels *debugChannels) { debugChannels->debugFloatField2 = initResponse1; debugChannels->debugFloatField3 = chips[0].OpStat[1]; - debugChannels->debugFloatField4 = resetCounter; + debugChannels->debugFloatField4 = selfResetCounter * 1000000 + requestedResetCounter * 10000 + lowVoltageResetCounter; debugChannels->debugFloatField5 = functionWDrx; debugChannels->debugFloatField6 = wdDiagResponse; } @@ -567,7 +575,10 @@ static THD_FUNCTION(tle8888_driver_thread, p) { if (vBattForTle8888 < 7) { // we assume TLE8888 is down and we should not bother with SPI communication - needInitialSpi = true; + if (!needInitialSpi) { + needInitialSpi = true; + lowVoltageResetCounter++; + } continue; // we should not bother communicating with TLE8888 until we have +12 } @@ -603,7 +614,7 @@ static THD_FUNCTION(tle8888_driver_thread, p) { /* if bit OE is cleared - reset happened */ if (!(chip->OpStat[1] & (1 << 6))) { needInitialSpi = true; - resetCounter++; + selfResetCounter++; } } } @@ -611,6 +622,7 @@ static THD_FUNCTION(tle8888_driver_thread, p) { void requestTLE8888initialization(void) { needInitialSpi = true; + requestedResetCounter++; } /*==========================================================================*/ @@ -681,7 +693,9 @@ int tle8888SpiStartupExchange(struct tle8888_priv *chip) { startupConfiguration(chip); - tle8888_dump_regs(); + if (CONFIG(verboseTLE8888)) { + tle8888_dump_regs(); + } return 0; } From 1acbac9896aaf129f058b7a4780d512f7e2b004a Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 27 Feb 2020 02:21:01 -0500 Subject: [PATCH 067/171] we need tpsinfo especially when data is invalid! --- firmware/controllers/settings.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 65206cf40f..ec334bfeb2 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -404,8 +404,7 @@ void printTPSInfo(void) { auto raw = Sensor::getRaw(SensorType::Tps1); if (!tps.Valid) { - scheduleMsg(&logger, "NO TPS SENSOR"); - return; + scheduleMsg(&logger, "TPS not valid"); } static char pinNameBuffer[16]; From 95160967dd6d78b335246483969a352f1155cf1f Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 27 Feb 2020 03:21:42 -0500 Subject: [PATCH 068/171] throttle2Position progress --- .../kinetis/config/controllers/algo/rusefi_generated.h | 2 +- firmware/console/binary/tunerstudio_configuration.h | 3 +++ firmware/controllers/generated/rusefi_generated.h | 2 +- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 6 ++++-- firmware/tunerstudio/rusefi.input | 2 ++ firmware/tunerstudio/rusefi_frankenso.ini | 6 ++++-- firmware/tunerstudio/rusefi_kinetis.ini | 6 ++++-- firmware/tunerstudio/rusefi_microrusefi.ini | 6 ++++-- firmware/tunerstudio/rusefi_prometheus.ini | 6 ++++-- firmware/tunerstudio/rusefi_proteus.ini | 6 ++++-- .../models/src/com/rusefi/config/generated/Fields.java | 4 ++-- 12 files changed, 34 insertions(+), 17 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index d2010dd6e4..3582229468 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -2027,7 +2027,7 @@ #define triggerSimulatorPins3_offset 738 #define triggerSimulatorPins3_offset_hex 2e2 #define TS_FILE_VERSION 20191221 -#define TS_OUTPUT_SIZE 220 +#define TS_OUTPUT_SIZE 240 #define ts_show_cj125 true #define ts_show_egt true #define ts_show_etb true diff --git a/firmware/console/binary/tunerstudio_configuration.h b/firmware/console/binary/tunerstudio_configuration.h index 1ad46c2793..829bd7be5b 100644 --- a/firmware/console/binary/tunerstudio_configuration.h +++ b/firmware/console/binary/tunerstudio_configuration.h @@ -178,6 +178,9 @@ typedef struct { // EGT egt_values_s egtValues; // 204 + scaled_percent throttle2Position; // 220 + + uint8_t unusedAtTheEnd[18]; // we have some unused bytes to allow compatible TS changes // Temporary - will remove soon TsDebugChannels* getDebugChannels() { diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 123717a5c8..a2ec49b23d 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -2027,7 +2027,7 @@ #define triggerSimulatorPins3_offset 738 #define triggerSimulatorPins3_offset_hex 2e2 #define TS_FILE_VERSION 20191221 -#define TS_OUTPUT_SIZE 220 +#define TS_OUTPUT_SIZE 240 #define ts_show_cj125 true #define ts_show_egt true #define ts_show_etb true diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 562ecae6c1..046842d2bd 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -68,7 +68,7 @@ struct_no_prefix engine_configuration_s #define ETB_BIAS_CURVE_LENGTH 8 ! this is here so that rusEfi console can access it, too -#define TS_OUTPUT_SIZE 220 +#define TS_OUTPUT_SIZE 240 #define MAP_ANGLE_SIZE 8 #define MAP_WINDOW_SIZE 8 diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index d083888c3c..dfd8d5e3ac 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:20 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:14:33 EST 2020 pageSize = 20000 page = 1 @@ -1285,7 +1285,7 @@ fileVersion = { 20191221 } ochGetCommand = "O%2o%2c" ; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 220 + ochBlockSize = 240 ; ; see TunerStudioOutputChannels struct @@ -1456,6 +1456,8 @@ fileVersion = { 20191221 } egt6 = scalar, S16, 214, "deg C", 1, 0 egt7 = scalar, S16, 216, "deg C", 1, 0 egt8 = scalar, S16, 218, "deg C", 1, 0 +; + TPS2Value = scalar, S16, 220, "%",{1/100}, 0 ; diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index d8e98b4524..0f5f4a35f0 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -332,6 +332,8 @@ fileVersion = { @@TS_FILE_VERSION@@ } egt6 = scalar, S16, 214, "deg C", 1, 0 egt7 = scalar, S16, 216, "deg C", 1, 0 egt8 = scalar, S16, 218, "deg C", 1, 0 +; + TPS2Value = scalar, S16, 220, "%",{1/@@PACK_MULT_PERCENT@@}, 0 ; diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index ab70964013..a41ffa317f 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:28 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:15:06 EST 2020 pageSize = 20000 page = 1 @@ -1285,7 +1285,7 @@ fileVersion = { 20191221 } ochGetCommand = "O%2o%2c" ; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 220 + ochBlockSize = 240 ; ; see TunerStudioOutputChannels struct @@ -1456,6 +1456,8 @@ fileVersion = { 20191221 } egt6 = scalar, S16, 214, "deg C", 1, 0 egt7 = scalar, S16, 216, "deg C", 1, 0 egt8 = scalar, S16, 218, "deg C", 1, 0 +; + TPS2Value = scalar, S16, 220, "%",{1/100}, 0 ; diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 3963a29d12..94953e3a60 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Feb 27 01:01:33 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Feb 27 03:15:44 EST 2020 pageSize = 20000 page = 1 @@ -1285,7 +1285,7 @@ fileVersion = { 20191221 } ochGetCommand = "O%2o%2c" ; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 220 + ochBlockSize = 240 ; ; see TunerStudioOutputChannels struct @@ -1456,6 +1456,8 @@ fileVersion = { 20191221 } egt6 = scalar, S16, 214, "deg C", 1, 0 egt7 = scalar, S16, 216, "deg C", 1, 0 egt8 = scalar, S16, 218, "deg C", 1, 0 +; + TPS2Value = scalar, S16, 220, "%",{1/100}, 0 ; diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 1395264d5a..0fb78a2e6d 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:26 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:14:53 EST 2020 pageSize = 20000 page = 1 @@ -1285,7 +1285,7 @@ fileVersion = { 20191221 } ochGetCommand = "O%2o%2c" ; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 220 + ochBlockSize = 240 ; ; see TunerStudioOutputChannels struct @@ -1456,6 +1456,8 @@ fileVersion = { 20191221 } egt6 = scalar, S16, 214, "deg C", 1, 0 egt7 = scalar, S16, 216, "deg C", 1, 0 egt8 = scalar, S16, 218, "deg C", 1, 0 +; + TPS2Value = scalar, S16, 220, "%",{1/100}, 0 ; diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 0b73cf40fe..18d04bcc22 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:30 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:15:18 EST 2020 pageSize = 20000 page = 1 @@ -1285,7 +1285,7 @@ fileVersion = { 20191221 } ochGetCommand = "O%2o%2c" ; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 220 + ochBlockSize = 240 ; ; see TunerStudioOutputChannels struct @@ -1456,6 +1456,8 @@ fileVersion = { 20191221 } egt6 = scalar, S16, 214, "deg C", 1, 0 egt7 = scalar, S16, 216, "deg C", 1, 0 egt8 = scalar, S16, 218, "deg C", 1, 0 +; + TPS2Value = scalar, S16, 220, "%",{1/100}, 0 ; diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 9b0430f35b..6155859f13 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:31 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:15:31 EST 2020 pageSize = 20000 page = 1 @@ -1285,7 +1285,7 @@ fileVersion = { 20191221 } ochGetCommand = "O%2o%2c" ; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 220 + ochBlockSize = 240 ; ; see TunerStudioOutputChannels struct @@ -1456,6 +1456,8 @@ fileVersion = { 20191221 } egt6 = scalar, S16, 214, "deg C", 1, 0 egt7 = scalar, S16, 216, "deg C", 1, 0 egt8 = scalar, S16, 218, "deg C", 1, 0 +; + TPS2Value = scalar, S16, 220, "%",{1/100}, 0 ; diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index ad2daf96a7..16712049c9 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:20 EST 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:14:33 EST 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1350,7 +1350,7 @@ public class Fields { public static final int triggerSimulatorPins2_offset = 737; public static final int triggerSimulatorPins3_offset = 738; public static final int TS_FILE_VERSION = 20191221; - public static final int TS_OUTPUT_SIZE = 220; + public static final int TS_OUTPUT_SIZE = 240; public static final String TS_SIGNATURE = "rusEFI v1.08"; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; From 8cd3470caf6c83deef2ca81a00cd12e555b10ade Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 27 Feb 2020 03:28:49 -0500 Subject: [PATCH 069/171] throttle2Position --- firmware/console/status_loop.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index 169efde629..d6dfa7bf6c 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -724,11 +724,15 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ // offset 8 tsOutputChannels->intakeAirTemperature = intake; - SensorResult tps = Sensor::get(SensorType::Tps1); - tsOutputChannels->throttlePosition = tps.Value; - tsOutputChannels->isTpsError = !tps.Valid; + SensorResult tps1 = Sensor::get(SensorType::Tps1); + tsOutputChannels->throttlePosition = tps1.Value; + tsOutputChannels->isTpsError = !tps1.Valid; tsOutputChannels->tpsADC = convertVoltageTo10bitADC(Sensor::getRaw(SensorType::Tps1)); + SensorResult tps2 = Sensor::get(SensorType::Tps2); + tsOutputChannels->throttle2Position = tps2.Value; + + // offset 16 tsOutputChannels->massAirFlowVoltage = hasMafSensor() ? getMafVoltage(PASS_ENGINE_PARAMETER_SIGNATURE) : 0; From 8a40c69180e1b9a3933a304a0f14d040ec13081c Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 27 Feb 2020 03:29:03 -0500 Subject: [PATCH 070/171] v12 --- firmware/config/engines/bmw_m73.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index 9325eb3389..067fc61c3a 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -133,6 +133,7 @@ void setEngineBMW_M73_Frankenso(DECLARE_CONFIG_PARAMETER_SIGNATURE) { } // BMW_M73_M +// set engine_type 24 void setEngineBMW_M73_Manhattan(DECLARE_CONFIG_PARAMETER_SIGNATURE) { m73engine(PASS_CONFIG_PARAMETER_SIGNATURE); @@ -175,7 +176,7 @@ GPIOA_6 // For example TLE7209 - two control wires: // PWM on both wires - one to open, another to close // ETB motor NEG pin # - white wire - OUT 1 - + // green input wire engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_6; // set_analog_input_pin tps PA3 engineConfiguration->tps1_1AdcChannel = EFI_ADC_3; // PA3 @@ -255,6 +256,11 @@ void setEngineBMW_M73_Proteus(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_6; + // set vbatt_divider 8.16 + // engineConfiguration->vbattDividerCoeff = (49.0f / 10.0f) * 16.8f / 10.0f; + // todo: figure out exact values from TLE8888 breakout board used by Manhattan + engineConfiguration->vbattDividerCoeff = 7.6; + // TPS#2 = Analog volt // engineConfiguration->tps2_1AdcChannel = EFI_ADC_; From 17af8e27f7748d0e07a476d066edea44a87f70e8 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 27 Feb 2020 21:28:31 -0500 Subject: [PATCH 071/171] todo NB2 --- firmware/config/engines/mazda_miata_vvt.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index db3d16e121..5c88cfa6b5 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -527,6 +527,12 @@ static void setMiataNB2_MRE_common(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // TLE8888_PIN_23: "33 - GP Out 3" engineConfiguration->malfunctionIndicatorPin = TLE8888_PIN_23; + + // todo: alternator warn + // TLE8888_PIN_24: "43 - GP Out 4" + // todo: AC fan + // TLE8888_PIN_22: "34 - GP Out 2" + engineConfiguration->isFasterEngineSpinUpEnabled = true; // set_analog_input_pin pps PA7 From df993c47f6edc21f62eee32c8ac30e15de0cdb0d Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 28 Feb 2020 18:12:22 -0500 Subject: [PATCH 072/171] PC simulator: TS over HW VSP wants lower blockingFactor fix #794 --- firmware/tunerstudio/rusefi.ini | 4 ++-- firmware/tunerstudio/rusefi.input | 2 +- firmware/tunerstudio/rusefi_frankenso.ini | 4 ++-- firmware/tunerstudio/rusefi_kinetis.ini | 4 ++-- firmware/tunerstudio/rusefi_microrusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_prometheus.ini | 4 ++-- firmware/tunerstudio/rusefi_proteus.ini | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index dfd8d5e3ac..86afc14072 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; delayAfterPortOpen = 500 - blockingFactor = 400 ; max chunk size + blockingFactor = 256 ; max chunk size ;end communication settings ; name = bits, type, offset, bits @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:14:33 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:43 EST 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 0f5f4a35f0..425c2ba61c 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; delayAfterPortOpen = 500 - blockingFactor = 400 ; max chunk size + blockingFactor = 256 ; max chunk size ;end communication settings ; name = bits, type, offset, bits diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index a41ffa317f..286363d714 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; delayAfterPortOpen = 500 - blockingFactor = 400 ; max chunk size + blockingFactor = 256 ; max chunk size ;end communication settings ; name = bits, type, offset, bits @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:15:06 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:50 EST 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 94953e3a60..0b258fafa6 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; delayAfterPortOpen = 500 - blockingFactor = 400 ; max chunk size + blockingFactor = 256 ; max chunk size ;end communication settings ; name = bits, type, offset, bits @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Feb 27 03:15:44 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Feb 28 18:12:00 EST 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 0fb78a2e6d..b495beacbf 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; delayAfterPortOpen = 500 - blockingFactor = 400 ; max chunk size + blockingFactor = 256 ; max chunk size ;end communication settings ; name = bits, type, offset, bits @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:14:53 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:46 EST 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 18d04bcc22..c1dc643396 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; delayAfterPortOpen = 500 - blockingFactor = 400 ; max chunk size + blockingFactor = 256 ; max chunk size ;end communication settings ; name = bits, type, offset, bits @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:15:18 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:53 EST 2020 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 6155859f13..b800c4e0f2 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; delayAfterPortOpen = 500 - blockingFactor = 400 ; max chunk size + blockingFactor = 256 ; max chunk size ;end communication settings ; name = bits, type, offset, bits @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:15:31 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:57 EST 2020 pageSize = 20000 page = 1 From cb68381e954fde464c7fcb9fc019e56959460cde Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 28 Feb 2020 20:04:16 -0500 Subject: [PATCH 073/171] issues --- hardware/Common_Rail_MC33816/known_issues.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hardware/Common_Rail_MC33816/known_issues.txt b/hardware/Common_Rail_MC33816/known_issues.txt index fa1ace0b5d..85101a923d 100644 --- a/hardware/Common_Rail_MC33816/known_issues.txt +++ b/hardware/Common_Rail_MC33816/known_issues.txt @@ -8,4 +8,8 @@ 8) J15 needs silk and larger hole. J20 needs silk and should use same larger terminal as J8-J9-J10 9) J15 & J20 silk ^^^ should be on both top and bottom sides of the board 10) power LED. back side is pretty much free pre-assembled, front side is manual assembly. maybe one LED on each side? -11) \ No newline at end of file +11) J5&J6 why do we need as jumpers? Shall we connect those permanently since looks like those shall be connected? +12) move more small stuff to same (back) side +13) +14) +15) \ No newline at end of file From f088bcf1f12111ee6e428a289603199207ff0f7a Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 29 Feb 2020 23:15:04 -0500 Subject: [PATCH 074/171] MRE PNP --- firmware/config/engines/mazda_miata_vvt.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index 5c88cfa6b5..f69d8f13b0 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -529,9 +529,10 @@ static void setMiataNB2_MRE_common(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // todo: alternator warn - // TLE8888_PIN_24: "43 - GP Out 4" + // ? + // todo: AC fan - // TLE8888_PIN_22: "34 - GP Out 2" + // TLE8888_PIN_24: "43 - GP Out 4" engineConfiguration->isFasterEngineSpinUpEnabled = true; From 948bb2e70a5960ff925c537d6b35cc92fd037239 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 29 Feb 2020 23:22:39 -0500 Subject: [PATCH 075/171] mapping docs --- .../config/boards/microrusefi/mapping.yaml | 5 +++++ firmware/config/boards/proteus/mapping.yaml | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/firmware/config/boards/microrusefi/mapping.yaml b/firmware/config/boards/microrusefi/mapping.yaml index 64c529422b..e156c7587b 100644 --- a/firmware/config/boards/microrusefi/mapping.yaml +++ b/firmware/config/boards/microrusefi/mapping.yaml @@ -1,3 +1,8 @@ +# +# microRusEfi board +# https://github.com/rusefi/rusefi_documentation/wiki/Hardware_microRusEfi_wiring +# + outputs: # TLE8888 injector channels GPIOE_14: "37 - Injector 1" diff --git a/firmware/config/boards/proteus/mapping.yaml b/firmware/config/boards/proteus/mapping.yaml index 5b70f69a56..3256ac8626 100644 --- a/firmware/config/boards/proteus/mapping.yaml +++ b/firmware/config/boards/proteus/mapping.yaml @@ -1,3 +1,8 @@ +# +# proteus board +# https://github.com/mck1117/proteus/blob/master/readme_pinout.md +# + outputs: GPIOD_7: "Lowside 1" GPIOG_9: "Lowside 2" @@ -53,19 +58,35 @@ switch_inputs: GPIOE_15: "Digital 6" analog_inputs: + # PA0 EFI_ADC_0: "Analog Volt 5" + # PA1 EFI_ADC_1: "Analog Volt 6" + # PA2 EFI_ADC_2: "Analog Volt 7" + # PA3 EFI_ADC_3: "Analog Volt 8" + # PA4 EFI_ADC_4: "Analog Volt 9" + # PA5 EFI_ADC_5: "Analog Volt 10" + # PA6 EFI_ADC_6: "Analog Volt 11" + # PA7 EFI_ADC_7: "Analog Volt 12" + # CLT = Analog Temp 3 = PB0 EFI_ADC_8: "Analog Temp 3" + # PB1 EFI_ADC_9: "Analog Temp 4" + # MAP = Analog volt 1 = PC0 EFI_ADC_10: "Analog Volt 1" + # TPS = Analog volt 2 = PC1 EFI_ADC_11: "Analog Volt 2" + # PC2 EFI_ADC_12: "Analog Volt 3" + # PC3 EFI_ADC_13: "Analog Volt 4" + # PC4 EFI_ADC_14: "Analog Temp 1" + # IAT = Analog Temp 2 = PC5 EFI_ADC_15: "Analog Temp 2" From c553877d3d375a068a3e62ba58685dc51f142ecd Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 1 Mar 2020 09:21:39 -0500 Subject: [PATCH 076/171] hiding "Analog divider" from MRE --- .../boards/kinetis/config/controllers/algo/rusefi_generated.h | 1 + firmware/config/boards/microrusefi/prepend.txt | 1 + firmware/controllers/generated/rusefi_generated.h | 1 + firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.input | 2 +- firmware/tunerstudio/rusefi_microrusefi.ini | 3 +-- 6 files changed, 6 insertions(+), 4 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 3582229468..a8647b27fa 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -2028,6 +2028,7 @@ #define triggerSimulatorPins3_offset_hex 2e2 #define TS_FILE_VERSION 20191221 #define TS_OUTPUT_SIZE 240 +#define ts_show_analog_divider true #define ts_show_cj125 true #define ts_show_egt true #define ts_show_etb true diff --git a/firmware/config/boards/microrusefi/prepend.txt b/firmware/config/boards/microrusefi/prepend.txt index efc5cc3fbb..c5f12627e7 100644 --- a/firmware/config/boards/microrusefi/prepend.txt +++ b/firmware/config/boards/microrusefi/prepend.txt @@ -6,3 +6,4 @@ #define ts_show_egt false #define ts_show_gps false #define ts_show_etb_pins false +#define ts_show_analog_divider false diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index a2ec49b23d..cd9ef07ed5 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -2028,6 +2028,7 @@ #define triggerSimulatorPins3_offset_hex 2e2 #define TS_FILE_VERSION 20191221 #define TS_OUTPUT_SIZE 240 +#define ts_show_analog_divider true #define ts_show_cj125 true #define ts_show_egt true #define ts_show_etb true diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 046842d2bd..557cacd6c2 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -1410,4 +1410,4 @@ end_struct #define ts_show_joystick true #define ts_show_egt true #define ts_show_gps true - +#define ts_show_analog_divider true diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 425c2ba61c..2e946dd59e 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2239,7 +2239,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider", analogInputDividerCoefficient + field = "Analog divider", analogInputDividerCoefficient@@if_ts_show_analog_divider field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index b495beacbf..d693d8c4a9 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:46 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 09:19:06 EST 2020 pageSize = 20000 page = 1 @@ -3347,7 +3347,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider", analogInputDividerCoefficient field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} From 15d9a9a0443c283b73b5e4f6b64ea86fdbe8fc7a Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 1 Mar 2020 14:20:06 -0500 Subject: [PATCH 077/171] wow, apparently we have some 55 pin board?! --- .../963063-15.kicad_pcb | 1130 ++--- .../963063-15-B_Cu.gbl | 3793 ----------------- .../963063-15-B_Mask.gbs | 195 - .../963063-15-B_Paste.gbp | 12 - .../963063-15-B_SilkS.gbo | 494 --- .../963063-15-Edge_Cuts.gbr | 22 - .../963063-15-F_Cu.gtl | 1463 ------- .../963063-15-F_Mask.gts | 195 - .../963063-15-F_Paste.gtp | 12 - .../963063-15-F_SilkS.gto | 1409 ------ .../963063-15.drl | 194 - ...963063-15_55_pin_connector_gerbers_0_0.zip | Bin 0 -> 24692 bytes ...963063-15_55_pin_connector_gerbers_0_1.zip | Bin 0 -> 33361 bytes 13 files changed, 421 insertions(+), 8498 deletions(-) delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Cu.gbl delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Mask.gbs delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Paste.gbp delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_SilkS.gbo delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-Edge_Cuts.gbr delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Cu.gtl delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Mask.gts delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Paste.gtp delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_SilkS.gto delete mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15.drl create mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15_55_pin_connector_gerbers_0_0.zip create mode 100644 hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15_55_pin_connector_gerbers_0_1.zip diff --git a/hardware/963063-15_55_pin_connector/963063-15.kicad_pcb b/hardware/963063-15_55_pin_connector/963063-15.kicad_pcb index abf31886f5..bdc48fa3b6 100644 --- a/hardware/963063-15_55_pin_connector/963063-15.kicad_pcb +++ b/hardware/963063-15_55_pin_connector/963063-15.kicad_pcb @@ -1,11 +1,11 @@ -(kicad_pcb (version 3) (host pcbnew "(2013-07-07 BZR 4022)-stable") +(kicad_pcb (version 4) (host pcbnew 4.0.7) (general (links 111) (no_connects 2) - (area 122.428573 107.150001 295.050001 197.375001) + (area 122.578573 107.300001 295.050001 197.375001) (thickness 1.6) - (drawings 32) + (drawings 52) (tracks 239) (zones 0) (modules 10) @@ -14,21 +14,21 @@ (page A3) (layers - (15 F.Cu signal) - (0 B.Cu signal) - (16 B.Adhes user) - (17 F.Adhes user) - (18 B.Paste user) - (19 F.Paste user) - (20 B.SilkS user) - (21 F.SilkS user) - (22 B.Mask user) - (23 F.Mask user) - (24 Dwgs.User user) - (25 Cmts.User user) - (26 Eco1.User user) - (27 Eco2.User user) - (28 Edge.Cuts user) + (0 F.Cu signal hide) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user hide) + (35 F.Paste user) + (36 B.SilkS user hide) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) ) (setup @@ -68,7 +68,7 @@ (aux_axis_origin 0 0) (visible_elements 7FFFFFFF) (pcbplotparams - (layerselection 3178497) + (layerselection 0x010fc_80000001) (usegerberextensions true) (excludeedgelayer true) (linewidth 0.150000) @@ -84,15 +84,14 @@ (psa4output false) (plotreference true) (plotvalue true) - (plotothertext true) (plotinvisibletext false) (padsonsilk false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) - (drillshape 1) + (drillshape 0) (scaleselection 1) - (outputdirectory "")) + (outputdirectory 963063-15_55_pin_connector_gerbers)) ) (net 0 "") @@ -160,7 +159,6 @@ (via_drill 0.635) (uvia_dia 0.508) (uvia_drill 0.127) - (add_net "") (add_net GND) (add_net N-000001) (add_net N-0000010) @@ -263,158 +261,82 @@ (fp_line (start -47.5 5) (end 47.5 5) (layer F.SilkS) (width 0.15)) (fp_line (start 47.5 5) (end 47.5 -5) (layer F.SilkS) (width 0.15)) (fp_line (start 47.5 -5) (end -47.5 -5) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -45 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 13 N-000002) - ) - (pad 2 thru_hole circle (at -40 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 24 N-000003) - ) - (pad 3 thru_hole circle (at -35 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 35 N-000004) - ) - (pad 4 thru_hole circle (at -30 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 45 N-000005) - ) - (pad 5 thru_hole circle (at -25 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 53 N-000006) - ) - (pad 6 thru_hole circle (at -20 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 54 N-000007) - ) - (pad 7 thru_hole circle (at -15 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 55 N-000008) - ) - (pad 8 thru_hole circle (at -10 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 56 N-000009) - ) - (pad 9 thru_hole circle (at -5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 3 N-0000010) - ) - (pad 10 thru_hole circle (at 0 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 4 N-0000011) - ) - (pad 11 thru_hole circle (at 5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 2 N-000001) - ) - (pad 12 thru_hole circle (at 10 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 6 N-0000013) - ) - (pad 13 thru_hole circle (at 15 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 7 N-0000014) - ) - (pad 14 thru_hole circle (at 20 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 8 N-0000015) - ) - (pad 15 thru_hole circle (at 25 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 9 N-0000016) - ) - (pad 16 thru_hole circle (at 30 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 10 N-0000017) - ) - (pad 17 thru_hole circle (at 35 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 11 N-0000018) - ) - (pad 18 thru_hole circle (at 40 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 12 N-0000019) - ) - (pad 19 thru_hole circle (at 45 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 14 N-0000020) - ) - (pad 1 thru_hole circle (at -45 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 13 N-000002) - ) - (pad 2 thru_hole circle (at -40 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 24 N-000003) - ) - (pad 3 thru_hole circle (at -35 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 35 N-000004) - ) - (pad 4 thru_hole circle (at -30 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 45 N-000005) - ) - (pad 5 thru_hole circle (at -25 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 53 N-000006) - ) - (pad 6 thru_hole circle (at -20 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 54 N-000007) - ) - (pad 7 thru_hole circle (at -15 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 55 N-000008) - ) - (pad 8 thru_hole circle (at -10 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 56 N-000009) - ) - (pad 9 thru_hole circle (at -5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 3 N-0000010) - ) - (pad 10 thru_hole circle (at 0 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 4 N-0000011) - ) - (pad 11 thru_hole circle (at 5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 2 N-000001) - ) - (pad 12 thru_hole circle (at 10 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 6 N-0000013) - ) - (pad 13 thru_hole circle (at 15 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 7 N-0000014) - ) - (pad 14 thru_hole circle (at 20 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 8 N-0000015) - ) - (pad 15 thru_hole circle (at 25 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 9 N-0000016) - ) - (pad 16 thru_hole circle (at 30 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 10 N-0000017) - ) - (pad 17 thru_hole circle (at 35 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 11 N-0000018) - ) - (pad 18 thru_hole circle (at 40 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 12 N-0000019) - ) - (pad 19 thru_hole circle (at 45 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 14 N-0000020) - ) + (pad 1 thru_hole circle (at -45 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 13 N-000002)) + (pad 2 thru_hole circle (at -40 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 24 N-000003)) + (pad 3 thru_hole circle (at -35 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 35 N-000004)) + (pad 4 thru_hole circle (at -30 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 45 N-000005)) + (pad 5 thru_hole circle (at -25 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 53 N-000006)) + (pad 6 thru_hole circle (at -20 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 54 N-000007)) + (pad 7 thru_hole circle (at -15 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 55 N-000008)) + (pad 8 thru_hole circle (at -10 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 56 N-000009)) + (pad 9 thru_hole circle (at -5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 3 N-0000010)) + (pad 10 thru_hole circle (at 0 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 4 N-0000011)) + (pad 11 thru_hole circle (at 5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 2 N-000001)) + (pad 12 thru_hole circle (at 10 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 6 N-0000013)) + (pad 13 thru_hole circle (at 15 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 7 N-0000014)) + (pad 14 thru_hole circle (at 20 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 8 N-0000015)) + (pad 15 thru_hole circle (at 25 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 9 N-0000016)) + (pad 16 thru_hole circle (at 30 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 10 N-0000017)) + (pad 17 thru_hole circle (at 35 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 11 N-0000018)) + (pad 18 thru_hole circle (at 40 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 12 N-0000019)) + (pad 19 thru_hole circle (at 45 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 14 N-0000020)) + (pad 1 thru_hole circle (at -45 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 13 N-000002)) + (pad 2 thru_hole circle (at -40 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 24 N-000003)) + (pad 3 thru_hole circle (at -35 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 35 N-000004)) + (pad 4 thru_hole circle (at -30 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 45 N-000005)) + (pad 5 thru_hole circle (at -25 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 53 N-000006)) + (pad 6 thru_hole circle (at -20 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 54 N-000007)) + (pad 7 thru_hole circle (at -15 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 55 N-000008)) + (pad 8 thru_hole circle (at -10 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 56 N-000009)) + (pad 9 thru_hole circle (at -5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 3 N-0000010)) + (pad 10 thru_hole circle (at 0 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 4 N-0000011)) + (pad 11 thru_hole circle (at 5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 2 N-000001)) + (pad 12 thru_hole circle (at 10 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 6 N-0000013)) + (pad 13 thru_hole circle (at 15 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 7 N-0000014)) + (pad 14 thru_hole circle (at 20 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 8 N-0000015)) + (pad 15 thru_hole circle (at 25 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 9 N-0000016)) + (pad 16 thru_hole circle (at 30 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 10 N-0000017)) + (pad 17 thru_hole circle (at 35 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 11 N-0000018)) + (pad 18 thru_hole circle (at 40 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 12 N-0000019)) + (pad 19 thru_hole circle (at 45 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 14 N-0000020)) ) (module CON18X5 (layer F.Cu) (tedit 5421131E) (tstamp 54212E8B) @@ -460,150 +382,78 @@ (fp_line (start -35 5) (end -35 -5) (layer F.SilkS) (width 0.15)) (fp_line (start -40 -5) (end -40 5) (layer F.SilkS) (width 0.15)) (fp_line (start -45 -5) (end -45 5) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -42.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 15 N-0000021) - ) - (pad 2 thru_hole circle (at -37.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 16 N-0000022) - ) - (pad 3 thru_hole circle (at -32.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 29 N-0000034) - ) - (pad 4 thru_hole circle (at -27.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 42 N-0000047) - ) - (pad 5 thru_hole circle (at -22.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 43 N-0000048) - ) - (pad 6 thru_hole circle (at -17.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 44 N-0000049) - ) - (pad 7 thru_hole circle (at -12.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 46 N-0000050) - ) - (pad 8 thru_hole circle (at -7.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 47 N-0000051) - ) - (pad 9 thru_hole circle (at -2.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 48 N-0000052) - ) - (pad 10 thru_hole circle (at 2.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 49 N-0000053) - ) - (pad 11 thru_hole circle (at 7.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 50 N-0000054) - ) - (pad 12 thru_hole circle (at 12.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 51 N-0000055) - ) - (pad 13 thru_hole circle (at 17.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 52 N-0000056) - ) - (pad 14 thru_hole circle (at 22.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 41 N-0000046) - ) - (pad 15 thru_hole circle (at 27.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 18 N-0000024) - ) - (pad 16 thru_hole circle (at 32.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 19 N-0000025) - ) - (pad 17 thru_hole circle (at 37.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 20 N-0000026) - ) - (pad 18 thru_hole circle (at 42.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 21 N-0000027) - ) - (pad 1 thru_hole circle (at -42.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 15 N-0000021) - ) - (pad 2 thru_hole circle (at -37.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 16 N-0000022) - ) - (pad 3 thru_hole circle (at -32.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 29 N-0000034) - ) - (pad 4 thru_hole circle (at -27.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 42 N-0000047) - ) - (pad 5 thru_hole circle (at -22.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 43 N-0000048) - ) - (pad 6 thru_hole circle (at -17.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 44 N-0000049) - ) - (pad 7 thru_hole circle (at -12.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 46 N-0000050) - ) - (pad 8 thru_hole circle (at -7.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 47 N-0000051) - ) - (pad 9 thru_hole circle (at -2.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 48 N-0000052) - ) - (pad 10 thru_hole circle (at 2.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 49 N-0000053) - ) - (pad 11 thru_hole circle (at 7.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 50 N-0000054) - ) - (pad 12 thru_hole circle (at 12.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 51 N-0000055) - ) - (pad 13 thru_hole circle (at 17.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 52 N-0000056) - ) - (pad 14 thru_hole circle (at 22.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 41 N-0000046) - ) - (pad 15 thru_hole circle (at 27.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 18 N-0000024) - ) - (pad 16 thru_hole circle (at 32.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 19 N-0000025) - ) - (pad 17 thru_hole circle (at 37.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 20 N-0000026) - ) - (pad 18 thru_hole circle (at 42.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 21 N-0000027) - ) + (pad 1 thru_hole circle (at -42.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 15 N-0000021)) + (pad 2 thru_hole circle (at -37.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 16 N-0000022)) + (pad 3 thru_hole circle (at -32.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 29 N-0000034)) + (pad 4 thru_hole circle (at -27.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 42 N-0000047)) + (pad 5 thru_hole circle (at -22.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 43 N-0000048)) + (pad 6 thru_hole circle (at -17.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 44 N-0000049)) + (pad 7 thru_hole circle (at -12.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 46 N-0000050)) + (pad 8 thru_hole circle (at -7.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 47 N-0000051)) + (pad 9 thru_hole circle (at -2.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 48 N-0000052)) + (pad 10 thru_hole circle (at 2.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 49 N-0000053)) + (pad 11 thru_hole circle (at 7.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 50 N-0000054)) + (pad 12 thru_hole circle (at 12.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 51 N-0000055)) + (pad 13 thru_hole circle (at 17.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 52 N-0000056)) + (pad 14 thru_hole circle (at 22.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 41 N-0000046)) + (pad 15 thru_hole circle (at 27.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 18 N-0000024)) + (pad 16 thru_hole circle (at 32.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 19 N-0000025)) + (pad 17 thru_hole circle (at 37.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 20 N-0000026)) + (pad 18 thru_hole circle (at 42.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 21 N-0000027)) + (pad 1 thru_hole circle (at -42.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 15 N-0000021)) + (pad 2 thru_hole circle (at -37.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 16 N-0000022)) + (pad 3 thru_hole circle (at -32.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 29 N-0000034)) + (pad 4 thru_hole circle (at -27.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 42 N-0000047)) + (pad 5 thru_hole circle (at -22.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 43 N-0000048)) + (pad 6 thru_hole circle (at -17.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 44 N-0000049)) + (pad 7 thru_hole circle (at -12.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 46 N-0000050)) + (pad 8 thru_hole circle (at -7.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 47 N-0000051)) + (pad 9 thru_hole circle (at -2.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 48 N-0000052)) + (pad 10 thru_hole circle (at 2.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 49 N-0000053)) + (pad 11 thru_hole circle (at 7.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 50 N-0000054)) + (pad 12 thru_hole circle (at 12.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 51 N-0000055)) + (pad 13 thru_hole circle (at 17.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 52 N-0000056)) + (pad 14 thru_hole circle (at 22.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 41 N-0000046)) + (pad 15 thru_hole circle (at 27.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 18 N-0000024)) + (pad 16 thru_hole circle (at 32.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 19 N-0000025)) + (pad 17 thru_hole circle (at 37.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 20 N-0000026)) + (pad 18 thru_hole circle (at 42.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 21 N-0000027)) ) (module CON18X5 (layer F.Cu) (tedit 5421131E) (tstamp 54212ED5) @@ -649,150 +499,78 @@ (fp_line (start -35 5) (end -35 -5) (layer F.SilkS) (width 0.15)) (fp_line (start -40 -5) (end -40 5) (layer F.SilkS) (width 0.15)) (fp_line (start -45 -5) (end -45 5) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -42.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 22 N-0000028) - ) - (pad 2 thru_hole circle (at -37.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 23 N-0000029) - ) - (pad 3 thru_hole circle (at -32.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 25 N-0000030) - ) - (pad 4 thru_hole circle (at -27.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 26 N-0000031) - ) - (pad 5 thru_hole circle (at -22.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 27 N-0000032) - ) - (pad 6 thru_hole circle (at -17.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 28 N-0000033) - ) - (pad 7 thru_hole circle (at -12.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 17 N-0000023) - ) - (pad 8 thru_hole circle (at -7.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 30 N-0000035) - ) - (pad 9 thru_hole circle (at -2.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 31 N-0000036) - ) - (pad 10 thru_hole circle (at 2.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 32 N-0000037) - ) - (pad 11 thru_hole circle (at 7.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 33 N-0000038) - ) - (pad 12 thru_hole circle (at 12.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 34 N-0000039) - ) - (pad 13 thru_hole circle (at 17.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 36 N-0000040) - ) - (pad 14 thru_hole circle (at 22.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 37 N-0000041) - ) - (pad 15 thru_hole circle (at 27.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 38 N-0000042) - ) - (pad 16 thru_hole circle (at 32.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 39 N-0000043) - ) - (pad 17 thru_hole circle (at 37.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 40 N-0000044) - ) - (pad 18 thru_hole circle (at 42.5 2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 5 N-0000012) - ) - (pad 1 thru_hole circle (at -42.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 22 N-0000028) - ) - (pad 2 thru_hole circle (at -37.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 23 N-0000029) - ) - (pad 3 thru_hole circle (at -32.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 25 N-0000030) - ) - (pad 4 thru_hole circle (at -27.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 26 N-0000031) - ) - (pad 5 thru_hole circle (at -22.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 27 N-0000032) - ) - (pad 6 thru_hole circle (at -17.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 28 N-0000033) - ) - (pad 7 thru_hole circle (at -12.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 17 N-0000023) - ) - (pad 8 thru_hole circle (at -7.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 30 N-0000035) - ) - (pad 9 thru_hole circle (at -2.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 31 N-0000036) - ) - (pad 10 thru_hole circle (at 2.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 32 N-0000037) - ) - (pad 11 thru_hole circle (at 7.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 33 N-0000038) - ) - (pad 12 thru_hole circle (at 12.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 34 N-0000039) - ) - (pad 13 thru_hole circle (at 17.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 36 N-0000040) - ) - (pad 14 thru_hole circle (at 22.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 37 N-0000041) - ) - (pad 15 thru_hole circle (at 27.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 38 N-0000042) - ) - (pad 16 thru_hole circle (at 32.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 39 N-0000043) - ) - (pad 17 thru_hole circle (at 37.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 40 N-0000044) - ) - (pad 18 thru_hole circle (at 42.5 -2.5 180) (size 2.5 2.5) (drill 1) - (layers *.Cu *.Mask F.SilkS) - (net 5 N-0000012) - ) + (pad 1 thru_hole circle (at -42.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 22 N-0000028)) + (pad 2 thru_hole circle (at -37.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 23 N-0000029)) + (pad 3 thru_hole circle (at -32.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 25 N-0000030)) + (pad 4 thru_hole circle (at -27.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 26 N-0000031)) + (pad 5 thru_hole circle (at -22.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 27 N-0000032)) + (pad 6 thru_hole circle (at -17.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 28 N-0000033)) + (pad 7 thru_hole circle (at -12.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 17 N-0000023)) + (pad 8 thru_hole circle (at -7.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 30 N-0000035)) + (pad 9 thru_hole circle (at -2.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 31 N-0000036)) + (pad 10 thru_hole circle (at 2.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 32 N-0000037)) + (pad 11 thru_hole circle (at 7.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 33 N-0000038)) + (pad 12 thru_hole circle (at 12.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 34 N-0000039)) + (pad 13 thru_hole circle (at 17.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 36 N-0000040)) + (pad 14 thru_hole circle (at 22.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 37 N-0000041)) + (pad 15 thru_hole circle (at 27.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 38 N-0000042)) + (pad 16 thru_hole circle (at 32.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 39 N-0000043)) + (pad 17 thru_hole circle (at 37.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 40 N-0000044)) + (pad 18 thru_hole circle (at 42.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 5 N-0000012)) + (pad 1 thru_hole circle (at -42.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 22 N-0000028)) + (pad 2 thru_hole circle (at -37.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 23 N-0000029)) + (pad 3 thru_hole circle (at -32.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 25 N-0000030)) + (pad 4 thru_hole circle (at -27.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 26 N-0000031)) + (pad 5 thru_hole circle (at -22.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 27 N-0000032)) + (pad 6 thru_hole circle (at -17.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 28 N-0000033)) + (pad 7 thru_hole circle (at -12.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 17 N-0000023)) + (pad 8 thru_hole circle (at -7.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 30 N-0000035)) + (pad 9 thru_hole circle (at -2.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 31 N-0000036)) + (pad 10 thru_hole circle (at 2.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 32 N-0000037)) + (pad 11 thru_hole circle (at 7.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 33 N-0000038)) + (pad 12 thru_hole circle (at 12.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 34 N-0000039)) + (pad 13 thru_hole circle (at 17.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 36 N-0000040)) + (pad 14 thru_hole circle (at 22.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 37 N-0000041)) + (pad 15 thru_hole circle (at 27.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 38 N-0000042)) + (pad 16 thru_hole circle (at 32.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 39 N-0000043)) + (pad 17 thru_hole circle (at 37.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 40 N-0000044)) + (pad 18 thru_hole circle (at 42.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 5 N-0000012)) ) (module 1pin (layer F.Cu) (tedit 200000) (tstamp 5421474E) @@ -807,9 +585,7 @@ (effects (font (size 1.016 1.016) (thickness 0.254))) ) (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) ) (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54214759) @@ -824,9 +600,7 @@ (effects (font (size 1.016 1.016) (thickness 0.254))) ) (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) ) (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54214764) @@ -841,9 +615,7 @@ (effects (font (size 1.016 1.016) (thickness 0.254))) ) (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) ) (module 1pin (layer F.Cu) (tedit 200000) (tstamp 5421476F) @@ -858,9 +630,7 @@ (effects (font (size 1.016 1.016) (thickness 0.254))) ) (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) ) (module PIN_ARRAY_1 (layer F.Cu) (tedit 542125D8) (tstamp 5421477F) @@ -878,10 +648,8 @@ (fp_line (start -1.27 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.1524)) (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.1524)) (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.1524)) - (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask F.SilkS) - (net 1 GND) - ) + (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 GND)) (model pin_array\pin_1.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -904,10 +672,8 @@ (fp_line (start -1.27 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.1524)) (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.1524)) (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.1524)) - (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask F.SilkS) - (net 1 GND) - ) + (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 GND)) (model pin_array\pin_1.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -957,234 +723,180 @@ (fp_line (start 47.5 2) (end -47.5 2) (layer F.SilkS) (width 0.15)) (fp_line (start -47.5 2) (end -43.5 -9) (layer F.SilkS) (width 0.15)) (fp_line (start -43.5 -9) (end 43.5 -9) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at 45 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 13 N-000002) - ) - (pad 2 thru_hole circle (at 40 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 24 N-000003) - ) - (pad 3 thru_hole circle (at 35 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 35 N-000004) - ) - (pad 4 thru_hole circle (at 30 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 45 N-000005) - ) - (pad 5 thru_hole circle (at 25 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 53 N-000006) - ) - (pad 6 thru_hole circle (at 20 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 54 N-000007) - ) - (pad 7 thru_hole circle (at 15 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 55 N-000008) - ) - (pad 8 thru_hole circle (at 10 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 56 N-000009) - ) - (pad 9 thru_hole circle (at 5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 3 N-0000010) - ) - (pad 10 thru_hole circle (at 0 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 4 N-0000011) - ) - (pad 11 thru_hole circle (at -5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 2 N-000001) - ) - (pad 12 thru_hole circle (at -10 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 6 N-0000013) - ) - (pad 13 thru_hole circle (at -15 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 7 N-0000014) - ) - (pad 14 thru_hole circle (at -20 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 8 N-0000015) - ) - (pad 15 thru_hole circle (at -25 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 9 N-0000016) - ) - (pad 16 thru_hole circle (at -30 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 10 N-0000017) - ) - (pad 17 thru_hole circle (at -35 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 11 N-0000018) - ) - (pad 18 thru_hole circle (at -40 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 12 N-0000019) - ) - (pad 19 thru_hole circle (at -45 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 14 N-0000020) - ) - (pad 20 thru_hole circle (at 42.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 15 N-0000021) - ) - (pad 21 thru_hole circle (at 37.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 16 N-0000022) - ) - (pad 22 thru_hole circle (at 32.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 29 N-0000034) - ) - (pad 23 thru_hole circle (at 27.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 42 N-0000047) - ) - (pad 24 thru_hole circle (at 22.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 43 N-0000048) - ) - (pad 25 thru_hole circle (at 17.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 44 N-0000049) - ) - (pad 26 thru_hole circle (at 12.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 46 N-0000050) - ) - (pad 27 thru_hole circle (at 7.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 47 N-0000051) - ) - (pad 28 thru_hole circle (at 2.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 48 N-0000052) - ) - (pad 29 thru_hole circle (at -2.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 49 N-0000053) - ) - (pad 30 thru_hole circle (at -7.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 50 N-0000054) - ) - (pad 31 thru_hole circle (at -12.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 51 N-0000055) - ) - (pad 32 thru_hole circle (at -17.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 52 N-0000056) - ) - (pad 33 thru_hole circle (at -22.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 41 N-0000046) - ) - (pad 34 thru_hole circle (at -27.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 18 N-0000024) - ) - (pad 35 thru_hole circle (at -32.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 19 N-0000025) - ) - (pad 36 thru_hole circle (at -37.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 20 N-0000026) - ) - (pad 37 thru_hole circle (at -42.5 0) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 21 N-0000027) - ) - (pad 38 thru_hole circle (at 42.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 22 N-0000028) - ) - (pad 39 thru_hole circle (at 37.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 23 N-0000029) - ) - (pad 40 thru_hole circle (at 32.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 25 N-0000030) - ) - (pad 41 thru_hole circle (at 27.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 26 N-0000031) - ) - (pad 42 thru_hole circle (at 22.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 27 N-0000032) - ) - (pad 43 thru_hole circle (at 17.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 28 N-0000033) - ) - (pad 44 thru_hole circle (at 12.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 17 N-0000023) - ) - (pad 45 thru_hole circle (at 7.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 30 N-0000035) - ) - (pad 46 thru_hole circle (at 2.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 31 N-0000036) - ) - (pad 47 thru_hole circle (at -2.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 32 N-0000037) - ) - (pad 48 thru_hole circle (at -7.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 33 N-0000038) - ) - (pad 49 thru_hole circle (at -12.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 34 N-0000039) - ) - (pad 50 thru_hole circle (at -17.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 36 N-0000040) - ) - (pad 51 thru_hole circle (at -22.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 37 N-0000041) - ) - (pad 52 thru_hole circle (at -27.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 38 N-0000042) - ) - (pad 53 thru_hole circle (at -32.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 39 N-0000043) - ) - (pad 54 thru_hole circle (at -37.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 40 N-0000044) - ) - (pad 55 thru_hole circle (at -42.5 -7.5) (size 2 2) (drill 1.4) - (layers *.Cu *.Mask F.SilkS) - (net 5 N-0000012) - ) - (pad ~ thru_hole circle (at -54.5 -2) (size 4 4) (drill 4) - (layers *.Cu *.Mask F.SilkS) - ) - (pad ~ thru_hole circle (at 54.5 -2) (size 4 4) (drill 4) - (layers *.Cu *.Mask F.SilkS) - ) + (pad 1 thru_hole circle (at 45 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 13 N-000002)) + (pad 2 thru_hole circle (at 40 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 24 N-000003)) + (pad 3 thru_hole circle (at 35 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 35 N-000004)) + (pad 4 thru_hole circle (at 30 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 45 N-000005)) + (pad 5 thru_hole circle (at 25 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 53 N-000006)) + (pad 6 thru_hole circle (at 20 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 54 N-000007)) + (pad 7 thru_hole circle (at 15 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 55 N-000008)) + (pad 8 thru_hole circle (at 10 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 56 N-000009)) + (pad 9 thru_hole circle (at 5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 3 N-0000010)) + (pad 10 thru_hole circle (at 0 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 4 N-0000011)) + (pad 11 thru_hole circle (at -5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 2 N-000001)) + (pad 12 thru_hole circle (at -10 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 6 N-0000013)) + (pad 13 thru_hole circle (at -15 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 7 N-0000014)) + (pad 14 thru_hole circle (at -20 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 8 N-0000015)) + (pad 15 thru_hole circle (at -25 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 9 N-0000016)) + (pad 16 thru_hole circle (at -30 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 10 N-0000017)) + (pad 17 thru_hole circle (at -35 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 11 N-0000018)) + (pad 18 thru_hole circle (at -40 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 12 N-0000019)) + (pad 19 thru_hole circle (at -45 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 14 N-0000020)) + (pad 20 thru_hole circle (at 42.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 15 N-0000021)) + (pad 21 thru_hole circle (at 37.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 16 N-0000022)) + (pad 22 thru_hole circle (at 32.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 29 N-0000034)) + (pad 23 thru_hole circle (at 27.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 42 N-0000047)) + (pad 24 thru_hole circle (at 22.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 43 N-0000048)) + (pad 25 thru_hole circle (at 17.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 44 N-0000049)) + (pad 26 thru_hole circle (at 12.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 46 N-0000050)) + (pad 27 thru_hole circle (at 7.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 47 N-0000051)) + (pad 28 thru_hole circle (at 2.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 48 N-0000052)) + (pad 29 thru_hole circle (at -2.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 49 N-0000053)) + (pad 30 thru_hole circle (at -7.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 50 N-0000054)) + (pad 31 thru_hole circle (at -12.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 51 N-0000055)) + (pad 32 thru_hole circle (at -17.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 52 N-0000056)) + (pad 33 thru_hole circle (at -22.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 41 N-0000046)) + (pad 34 thru_hole circle (at -27.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 18 N-0000024)) + (pad 35 thru_hole circle (at -32.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 19 N-0000025)) + (pad 36 thru_hole circle (at -37.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 20 N-0000026)) + (pad 37 thru_hole circle (at -42.5 0) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 21 N-0000027)) + (pad 38 thru_hole circle (at 42.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 22 N-0000028)) + (pad 39 thru_hole circle (at 37.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 23 N-0000029)) + (pad 40 thru_hole circle (at 32.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 25 N-0000030)) + (pad 41 thru_hole circle (at 27.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 26 N-0000031)) + (pad 42 thru_hole circle (at 22.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 27 N-0000032)) + (pad 43 thru_hole circle (at 17.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 28 N-0000033)) + (pad 44 thru_hole circle (at 12.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 17 N-0000023)) + (pad 45 thru_hole circle (at 7.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 30 N-0000035)) + (pad 46 thru_hole circle (at 2.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 31 N-0000036)) + (pad 47 thru_hole circle (at -2.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 32 N-0000037)) + (pad 48 thru_hole circle (at -7.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 33 N-0000038)) + (pad 49 thru_hole circle (at -12.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 34 N-0000039)) + (pad 50 thru_hole circle (at -17.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 36 N-0000040)) + (pad 51 thru_hole circle (at -22.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 37 N-0000041)) + (pad 52 thru_hole circle (at -27.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 38 N-0000042)) + (pad 53 thru_hole circle (at -32.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 39 N-0000043)) + (pad 54 thru_hole circle (at -37.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 40 N-0000044)) + (pad 55 thru_hole circle (at -42.5 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask F.SilkS) + (net 5 N-0000012)) + (pad ~ thru_hole circle (at -54.5 -2) (size 4 4) (drill 4) (layers *.Cu *.Mask F.SilkS)) + (pad ~ thru_hole circle (at 54.5 -2) (size 4 4) (drill 4) (layers *.Cu *.Mask F.SilkS)) ) + (gr_text "44 45 46" (at 227.584 124.968 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text "39 40 41 42 43" (at 247.65 124.968 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 41 (at 247.65 124.968 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 45 (at 227.584 124.968 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 50 (at 202.692 124.968 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text "48 49 50 51 52" (at 202.692 124.968 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text "27 28 29 30 31 32 33" (at 212.344 134.874 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text "36 35 34 33 32" (at 192.786 134.874 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text "25 24 23 22 21" (at 247.65 135.128 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text "22 23 24 25 26" (at 242.57 134.874 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 4 (at 249.936 145.034 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text "2 3 4 5 6 7" (at 247.396 144.78 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 15 (at 195.072 145.034 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 12 (at 210.058 145.034 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text "10 11 12 13 14" (at 210.058 145.034 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text "15 16 17 18" (at 187.706 145.034 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 8 (at 229.87 145.034 180) (layer F.SilkS) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 8 (at 229.87 145.034 180) (layer B.SilkS) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text "rusEfi 55 pin\n0.1" (at 282.448 147.066 180) (layer F.SilkS) + (effects (font (size 2 2) (thickness 0.3))) + ) + (gr_text "rusEfi 55 pin\n0.1" (at 282.448 147.066 180) (layer B.SilkS) + (effects (font (size 2 2) (thickness 0.3)) (justify mirror)) + ) (gr_line (start 265 120) (end 265 130) (angle 90) (layer B.SilkS) (width 0.2)) (gr_line (start 175 120) (end 265 120) (angle 90) (layer B.SilkS) (width 0.2)) (gr_line (start 175 130) (end 175 120) (angle 90) (layer B.SilkS) (width 0.2)) diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Cu.gbl b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Cu.gbl deleted file mode 100644 index aeb16db957..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Cu.gbl +++ /dev/null @@ -1,3793 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -%ADD11C,0.0984252*% -%ADD12C,0.16*% -%ADD13R,0.06X0.06*% -%ADD14C,0.0787402*% -%ADD15C,0.15748*% -%ADD16C,0.0590551*% -%ADD17C,0.011811*% -G04 APERTURE END LIST* -G54D10* -G54D11* -X104330Y-56102D03* -X102362Y-56102D03* -X100393Y-56102D03* -X98425Y-56102D03* -X96456Y-56102D03* -X94488Y-56102D03* -X92519Y-56102D03* -X90551Y-56102D03* -X88582Y-56102D03* -X86614Y-56102D03* -X84645Y-56102D03* -X82677Y-56102D03* -X80708Y-56102D03* -X78740Y-56102D03* -X76771Y-56102D03* -X74803Y-56102D03* -X72834Y-56102D03* -X70866Y-56102D03* -X68897Y-56102D03* -X104330Y-58070D03* -X102362Y-58070D03* -X100393Y-58070D03* -X98425Y-58070D03* -X96456Y-58070D03* -X94488Y-58070D03* -X92519Y-58070D03* -X90551Y-58070D03* -X88582Y-58070D03* -X86614Y-58070D03* -X84645Y-58070D03* -X82677Y-58070D03* -X80708Y-58070D03* -X78740Y-58070D03* -X76771Y-58070D03* -X74803Y-58070D03* -X72834Y-58070D03* -X70866Y-58070D03* -X68897Y-58070D03* -X103346Y-52165D03* -X101377Y-52165D03* -X99409Y-52165D03* -X97440Y-52165D03* -X95472Y-52165D03* -X93503Y-52165D03* -X91535Y-52165D03* -X89566Y-52165D03* -X87598Y-52165D03* -X85629Y-52165D03* -X83661Y-52165D03* -X81692Y-52165D03* -X79724Y-52165D03* -X77755Y-52165D03* -X75787Y-52165D03* -X73818Y-52165D03* -X71850Y-52165D03* -X69881Y-52165D03* -X103346Y-54133D03* -X101377Y-54133D03* -X99409Y-54133D03* -X97440Y-54133D03* -X95472Y-54133D03* -X93503Y-54133D03* -X91535Y-54133D03* -X89566Y-54133D03* -X87598Y-54133D03* -X85629Y-54133D03* -X83661Y-54133D03* -X81692Y-54133D03* -X79724Y-54133D03* -X77755Y-54133D03* -X75787Y-54133D03* -X73818Y-54133D03* -X71850Y-54133D03* -X69881Y-54133D03* -X103346Y-48228D03* -X101377Y-48228D03* -X99409Y-48228D03* -X97440Y-48228D03* -X95472Y-48228D03* -X93503Y-48228D03* -X91535Y-48228D03* -X89566Y-48228D03* -X87598Y-48228D03* -X85629Y-48228D03* -X83661Y-48228D03* -X81692Y-48228D03* -X79724Y-48228D03* -X77755Y-48228D03* -X75787Y-48228D03* -X73818Y-48228D03* -X71850Y-48228D03* -X69881Y-48228D03* -X103346Y-50196D03* -X101377Y-50196D03* -X99409Y-50196D03* -X97440Y-50196D03* -X95472Y-50196D03* -X93503Y-50196D03* -X91535Y-50196D03* -X89566Y-50196D03* -X87598Y-50196D03* -X85629Y-50196D03* -X83661Y-50196D03* -X81692Y-50196D03* -X79724Y-50196D03* -X77755Y-50196D03* -X75787Y-50196D03* -X73818Y-50196D03* -X71850Y-50196D03* -X69881Y-50196D03* -G54D12* -X114173Y-49212D03* -X114173Y-64960D03* -X59055Y-64960D03* -X59055Y-49212D03* -G54D13* -X62007Y-53149D03* -X111220Y-53149D03* -G54D14* -X104330Y-62992D03* -X102362Y-62992D03* -X100393Y-62992D03* -X98425Y-62992D03* -X96456Y-62992D03* -X94488Y-62992D03* -X92519Y-62992D03* -X90551Y-62992D03* -X88582Y-62992D03* -X86614Y-62992D03* -X84645Y-62992D03* -X82677Y-62992D03* -X80708Y-62992D03* -X78740Y-62992D03* -X76771Y-62992D03* -X74803Y-62992D03* -X72834Y-62992D03* -X70866Y-62992D03* -X68897Y-62992D03* -X103346Y-62992D03* -X101377Y-62992D03* -X99409Y-62992D03* -X97440Y-62992D03* -X95472Y-62992D03* -X93503Y-62992D03* -X91535Y-62992D03* -X89566Y-62992D03* -X87598Y-62992D03* -X85629Y-62992D03* -X83661Y-62992D03* -X81692Y-62992D03* -X79724Y-62992D03* -X77755Y-62992D03* -X75787Y-62992D03* -X73818Y-62992D03* -X71850Y-62992D03* -X69881Y-62992D03* -X103346Y-60039D03* -X101377Y-60039D03* -X99409Y-60039D03* -X97440Y-60039D03* -X95472Y-60039D03* -X93503Y-60039D03* -X91535Y-60039D03* -X89566Y-60039D03* -X87598Y-60039D03* -X85629Y-60039D03* -X83661Y-60039D03* -X81692Y-60039D03* -X79724Y-60039D03* -X77755Y-60039D03* -X75787Y-60039D03* -X73818Y-60039D03* -X71850Y-60039D03* -X69881Y-60039D03* -G54D15* -X65157Y-62204D03* -X108070Y-62204D03* -G54D16* -X103346Y-54133D02* -X103346Y-52165D01* -X103346Y-62992D02* -X103346Y-61417D01* -X103346Y-58464D02* -X103346Y-54133D01* -X104330Y-59448D02* -X103346Y-58464D01* -X104330Y-60433D02* -X104330Y-59448D01* -X103346Y-61417D02* -X104330Y-60433D01* -X77755Y-62992D02* -X77755Y-61417D01* -X77755Y-58464D02* -X77755Y-54133D01* -X78740Y-59448D02* -X77755Y-58464D01* -X78740Y-60433D02* -X78740Y-59448D01* -X77755Y-61417D02* -X78740Y-60433D01* -X77755Y-54133D02* -X77755Y-52165D01* -X75787Y-54133D02* -X75787Y-52165D01* -X75787Y-62992D02* -X75787Y-61417D01* -X75787Y-58464D02* -X75787Y-52165D01* -X76771Y-59448D02* -X75787Y-58464D01* -X76771Y-60433D02* -X76771Y-59448D01* -X75787Y-61417D02* -X76771Y-60433D01* -X73818Y-54133D02* -X73818Y-52165D01* -X73818Y-62992D02* -X73818Y-61417D01* -X73818Y-58464D02* -X73818Y-52165D01* -X74803Y-59448D02* -X73818Y-58464D01* -X74803Y-60433D02* -X74803Y-59448D01* -X73818Y-61417D02* -X74803Y-60433D01* -X71850Y-54133D02* -X71850Y-52165D01* -X71850Y-62992D02* -X71850Y-61417D01* -X71850Y-58464D02* -X71850Y-52165D01* -X72834Y-59448D02* -X71850Y-58464D01* -X72834Y-60433D02* -X72834Y-59448D01* -X71850Y-61417D02* -X72834Y-60433D01* -X69881Y-62992D02* -X69881Y-61417D01* -X69881Y-58464D02* -X69881Y-54133D01* -X70866Y-59448D02* -X69881Y-58464D01* -X70866Y-60433D02* -X70866Y-59448D01* -X69881Y-61417D02* -X70866Y-60433D01* -X69881Y-54133D02* -X69881Y-52165D01* -X101377Y-54133D02* -X101377Y-52165D01* -X101377Y-62992D02* -X101377Y-62598D01* -X101377Y-62598D02* -X101377Y-62992D01* -X101377Y-62992D02* -X101377Y-61417D01* -X101377Y-58464D02* -X101377Y-52165D01* -X102362Y-59448D02* -X101377Y-58464D01* -X102362Y-60433D02* -X102362Y-59448D01* -X101377Y-61417D02* -X102362Y-60433D01* -X79724Y-54133D02* -X79724Y-52165D01* -X79724Y-62992D02* -X79724Y-61417D01* -X79724Y-58464D02* -X79724Y-52165D01* -X80708Y-59448D02* -X79724Y-58464D01* -X80708Y-60433D02* -X80708Y-59448D01* -X79724Y-61417D02* -X80708Y-60433D01* -X99409Y-54133D02* -X99409Y-52165D01* -X99409Y-62992D02* -X99409Y-61417D01* -X99409Y-58464D02* -X99409Y-52165D01* -X100393Y-59448D02* -X99409Y-58464D01* -X100393Y-60433D02* -X100393Y-59448D01* -X99409Y-61417D02* -X100393Y-60433D01* -X97440Y-54133D02* -X97440Y-52165D01* -X97440Y-62992D02* -X97440Y-61417D01* -X97440Y-58464D02* -X97440Y-52165D01* -X98425Y-59448D02* -X97440Y-58464D01* -X98425Y-60433D02* -X98425Y-59448D01* -X97440Y-61417D02* -X98425Y-60433D01* -X95472Y-54133D02* -X95472Y-52165D01* -X95472Y-62992D02* -X95472Y-61417D01* -X95472Y-58464D02* -X95472Y-52165D01* -X96456Y-59448D02* -X95472Y-58464D01* -X96456Y-60433D02* -X96456Y-59448D01* -X95472Y-61417D02* -X96456Y-60433D01* -X93503Y-54133D02* -X93503Y-52165D01* -X93503Y-62992D02* -X93503Y-61417D01* -X93503Y-58464D02* -X93503Y-52165D01* -X94488Y-59448D02* -X93503Y-58464D01* -X94488Y-60433D02* -X94488Y-59448D01* -X93503Y-61417D02* -X94488Y-60433D01* -X91535Y-54133D02* -X91535Y-52165D01* -X91535Y-62992D02* -X91535Y-61417D01* -X91535Y-58464D02* -X91535Y-52165D01* -X92519Y-59448D02* -X91535Y-58464D01* -X92519Y-60433D02* -X92519Y-59448D01* -X91535Y-61417D02* -X92519Y-60433D01* -X89566Y-52165D02* -X89566Y-54133D01* -X89566Y-62992D02* -X89566Y-61417D01* -X89566Y-58464D02* -X89566Y-54133D01* -X90551Y-59448D02* -X89566Y-58464D01* -X90551Y-60433D02* -X90551Y-59448D01* -X89566Y-61417D02* -X90551Y-60433D01* -X87598Y-54133D02* -X87598Y-52165D01* -X87598Y-62992D02* -X87598Y-61417D01* -X87598Y-58464D02* -X87598Y-52165D01* -X88582Y-59448D02* -X87598Y-58464D01* -X88582Y-60433D02* -X88582Y-59448D01* -X87598Y-61417D02* -X88582Y-60433D01* -X85629Y-62992D02* -X85629Y-61417D01* -X85629Y-58464D02* -X85629Y-54133D01* -X86614Y-59448D02* -X85629Y-58464D01* -X86614Y-59842D02* -X86614Y-59448D01* -X86614Y-60433D02* -X86614Y-59842D01* -X85629Y-61417D02* -X86614Y-60433D01* -X85629Y-54133D02* -X85629Y-52165D01* -X83661Y-54133D02* -X83661Y-52165D01* -X83661Y-62992D02* -X83661Y-61417D01* -X83661Y-58464D02* -X83661Y-52165D01* -X84645Y-59448D02* -X83661Y-58464D01* -X84645Y-60433D02* -X84645Y-59448D01* -X83661Y-61417D02* -X84645Y-60433D01* -X81692Y-54133D02* -X81692Y-52165D01* -X81692Y-62992D02* -X81692Y-61417D01* -X81692Y-58464D02* -X81692Y-52165D01* -X82677Y-59448D02* -X81692Y-58464D01* -X82677Y-60433D02* -X82677Y-59448D01* -X81692Y-61417D02* -X82677Y-60433D01* -G54D10* -G36* -X115866Y-66653D02* -X115229Y-66653D01* -X115229Y-64751D01* -X115229Y-49003D01* -X115068Y-48615D01* -X114772Y-48317D01* -X114384Y-48156D01* -X113964Y-48156D01* -X113575Y-48316D01* -X113278Y-48613D01* -X113117Y-49001D01* -X113117Y-49421D01* -X113277Y-49809D01* -X113574Y-50107D01* -X113962Y-50268D01* -X114382Y-50268D01* -X114770Y-50108D01* -X115067Y-49811D01* -X115228Y-49423D01* -X115229Y-49003D01* -X115229Y-64751D01* -X115068Y-64363D01* -X114772Y-64065D01* -X114384Y-63904D01* -X113964Y-63904D01* -X113575Y-64064D01* -X113278Y-64361D01* -X113117Y-64749D01* -X113117Y-65169D01* -X113277Y-65557D01* -X113574Y-65855D01* -X113962Y-66016D01* -X114382Y-66016D01* -X114770Y-65856D01* -X115067Y-65559D01* -X115228Y-65171D01* -X115229Y-64751D01* -X115229Y-66653D01* -X111679Y-66653D01* -X111679Y-53418D01* -X111679Y-52881D01* -X111679Y-52817D01* -X111655Y-52759D01* -X111610Y-52714D01* -X111551Y-52690D01* -X111378Y-52690D01* -X111338Y-52730D01* -X111338Y-53031D01* -X111639Y-53031D01* -X111679Y-52991D01* -X111679Y-52881D01* -X111679Y-53418D01* -X111679Y-53307D01* -X111639Y-53267D01* -X111338Y-53267D01* -X111338Y-53568D01* -X111378Y-53608D01* -X111551Y-53608D01* -X111610Y-53584D01* -X111655Y-53539D01* -X111679Y-53481D01* -X111679Y-53418D01* -X111679Y-66653D01* -X111102Y-66653D01* -X111102Y-53568D01* -X111102Y-53267D01* -X111102Y-53031D01* -X111102Y-52730D01* -X111062Y-52690D01* -X110888Y-52690D01* -X110830Y-52714D01* -X110785Y-52759D01* -X110761Y-52817D01* -X110761Y-52881D01* -X110761Y-52991D01* -X110801Y-53031D01* -X111102Y-53031D01* -X111102Y-53267D01* -X110801Y-53267D01* -X110761Y-53307D01* -X110761Y-53418D01* -X110761Y-53481D01* -X110785Y-53539D01* -X110830Y-53584D01* -X110888Y-53608D01* -X111062Y-53608D01* -X111102Y-53568D01* -X111102Y-66653D01* -X109114Y-66653D01* -X109114Y-61998D01* -X108955Y-61614D01* -X108662Y-61320D01* -X108279Y-61161D01* -X107864Y-61161D01* -X107480Y-61319D01* -X107186Y-61612D01* -X107027Y-61996D01* -X107027Y-62411D01* -X107185Y-62794D01* -X107479Y-63088D01* -X107862Y-63247D01* -X108277Y-63248D01* -X108661Y-63089D01* -X108954Y-62796D01* -X109113Y-62413D01* -X109114Y-61998D01* -X109114Y-66653D01* -X105078Y-66653D01* -X105078Y-57922D01* -X104965Y-57647D01* -X104754Y-57437D01* -X104480Y-57322D01* -X104182Y-57322D01* -X103907Y-57436D01* -X103897Y-57446D01* -X103897Y-56727D01* -X103906Y-56736D01* -X104181Y-56850D01* -X104478Y-56850D01* -X104753Y-56736D01* -X104964Y-56526D01* -X105078Y-56251D01* -X105078Y-55954D01* -X104965Y-55679D01* -X104754Y-55468D01* -X104480Y-55354D01* -X104182Y-55354D01* -X103907Y-55467D01* -X103897Y-55477D01* -X103897Y-54640D01* -X103980Y-54558D01* -X104094Y-54283D01* -X104094Y-53985D01* -X103980Y-53710D01* -X103897Y-53627D01* -X103897Y-52672D01* -X103980Y-52589D01* -X104094Y-52314D01* -X104094Y-52017D01* -X104094Y-50048D01* -X103980Y-49773D01* -X103770Y-49563D01* -X103495Y-49448D01* -X103198Y-49448D01* -X102923Y-49562D01* -X102712Y-49772D01* -X102598Y-50047D01* -X102598Y-50344D01* -X102711Y-50620D01* -X102922Y-50830D01* -X103197Y-50944D01* -X103494Y-50945D01* -X103769Y-50831D01* -X103980Y-50621D01* -X104094Y-50346D01* -X104094Y-50048D01* -X104094Y-52017D01* -X103980Y-51742D01* -X103770Y-51531D01* -X103495Y-51417D01* -X103198Y-51417D01* -X102923Y-51530D01* -X102712Y-51741D01* -X102598Y-52015D01* -X102598Y-52313D01* -X102711Y-52588D01* -X102795Y-52672D01* -X102795Y-53627D01* -X102712Y-53709D01* -X102598Y-53984D01* -X102598Y-54281D01* -X102711Y-54557D01* -X102795Y-54640D01* -X102795Y-55477D01* -X102786Y-55468D01* -X102511Y-55354D01* -X102214Y-55354D01* -X101939Y-55467D01* -X101929Y-55477D01* -X101929Y-54640D01* -X102011Y-54558D01* -X102125Y-54283D01* -X102126Y-53985D01* -X102012Y-53710D01* -X101929Y-53627D01* -X101929Y-52672D01* -X102011Y-52589D01* -X102125Y-52314D01* -X102126Y-52017D01* -X102126Y-50048D01* -X102012Y-49773D01* -X101802Y-49563D01* -X101527Y-49448D01* -X101229Y-49448D01* -X100954Y-49562D01* -X100744Y-49772D01* -X100630Y-50047D01* -X100629Y-50344D01* -X100743Y-50620D01* -X100953Y-50830D01* -X101228Y-50944D01* -X101526Y-50945D01* -X101801Y-50831D01* -X102011Y-50621D01* -X102125Y-50346D01* -X102126Y-50048D01* -X102126Y-52017D01* -X102012Y-51742D01* -X101802Y-51531D01* -X101527Y-51417D01* -X101229Y-51417D01* -X100954Y-51530D01* -X100744Y-51741D01* -X100630Y-52015D01* -X100629Y-52313D01* -X100743Y-52588D01* -X100826Y-52672D01* -X100826Y-53627D01* -X100744Y-53709D01* -X100630Y-53984D01* -X100629Y-54281D01* -X100743Y-54557D01* -X100826Y-54640D01* -X100826Y-55477D01* -X100817Y-55468D01* -X100543Y-55354D01* -X100245Y-55354D01* -X99970Y-55467D01* -X99960Y-55477D01* -X99960Y-54640D01* -X100043Y-54558D01* -X100157Y-54283D01* -X100157Y-53985D01* -X100043Y-53710D01* -X99960Y-53627D01* -X99960Y-52672D01* -X100043Y-52589D01* -X100157Y-52314D01* -X100157Y-52017D01* -X100157Y-50048D01* -X100043Y-49773D01* -X99833Y-49563D01* -X99558Y-49448D01* -X99261Y-49448D01* -X98986Y-49562D01* -X98775Y-49772D01* -X98661Y-50047D01* -X98661Y-50344D01* -X98774Y-50620D01* -X98985Y-50830D01* -X99260Y-50944D01* -X99557Y-50945D01* -X99832Y-50831D01* -X100043Y-50621D01* -X100157Y-50346D01* -X100157Y-50048D01* -X100157Y-52017D01* -X100043Y-51742D01* -X99833Y-51531D01* -X99558Y-51417D01* -X99261Y-51417D01* -X98986Y-51530D01* -X98775Y-51741D01* -X98661Y-52015D01* -X98661Y-52313D01* -X98774Y-52588D01* -X98858Y-52672D01* -X98858Y-53627D01* -X98775Y-53709D01* -X98661Y-53984D01* -X98661Y-54281D01* -X98774Y-54557D01* -X98858Y-54640D01* -X98858Y-55477D01* -X98849Y-55468D01* -X98574Y-55354D01* -X98277Y-55354D01* -X98002Y-55467D01* -X97992Y-55477D01* -X97992Y-54640D01* -X98074Y-54558D01* -X98188Y-54283D01* -X98189Y-53985D01* -X98075Y-53710D01* -X97992Y-53627D01* -X97992Y-52672D01* -X98074Y-52589D01* -X98188Y-52314D01* -X98189Y-52017D01* -X98189Y-50048D01* -X98075Y-49773D01* -X97865Y-49563D01* -X97590Y-49448D01* -X97292Y-49448D01* -X97017Y-49562D01* -X96807Y-49772D01* -X96693Y-50047D01* -X96692Y-50344D01* -X96806Y-50620D01* -X97016Y-50830D01* -X97291Y-50944D01* -X97589Y-50945D01* -X97864Y-50831D01* -X98074Y-50621D01* -X98188Y-50346D01* -X98189Y-50048D01* -X98189Y-52017D01* -X98075Y-51742D01* -X97865Y-51531D01* -X97590Y-51417D01* -X97292Y-51417D01* -X97017Y-51530D01* -X96807Y-51741D01* -X96693Y-52015D01* -X96692Y-52313D01* -X96806Y-52588D01* -X96889Y-52672D01* -X96889Y-53627D01* -X96807Y-53709D01* -X96693Y-53984D01* -X96692Y-54281D01* -X96806Y-54557D01* -X96889Y-54640D01* -X96889Y-55477D01* -X96880Y-55468D01* -X96606Y-55354D01* -X96308Y-55354D01* -X96033Y-55467D01* -X96023Y-55477D01* -X96023Y-54640D01* -X96106Y-54558D01* -X96220Y-54283D01* -X96220Y-53985D01* -X96106Y-53710D01* -X96023Y-53627D01* -X96023Y-52672D01* -X96106Y-52589D01* -X96220Y-52314D01* -X96220Y-52017D01* -X96220Y-50048D01* -X96106Y-49773D01* -X95896Y-49563D01* -X95621Y-49448D01* -X95324Y-49448D01* -X95049Y-49562D01* -X94838Y-49772D01* -X94724Y-50047D01* -X94724Y-50344D01* -X94837Y-50620D01* -X95048Y-50830D01* -X95322Y-50944D01* -X95620Y-50945D01* -X95895Y-50831D01* -X96106Y-50621D01* -X96220Y-50346D01* -X96220Y-50048D01* -X96220Y-52017D01* -X96106Y-51742D01* -X95896Y-51531D01* -X95621Y-51417D01* -X95324Y-51417D01* -X95049Y-51530D01* -X94838Y-51741D01* -X94724Y-52015D01* -X94724Y-52313D01* -X94837Y-52588D01* -X94921Y-52672D01* -X94921Y-53627D01* -X94838Y-53709D01* -X94724Y-53984D01* -X94724Y-54281D01* -X94837Y-54557D01* -X94921Y-54640D01* -X94921Y-55477D01* -X94912Y-55468D01* -X94637Y-55354D01* -X94340Y-55354D01* -X94065Y-55467D01* -X94055Y-55477D01* -X94055Y-54640D01* -X94137Y-54558D01* -X94251Y-54283D01* -X94252Y-53985D01* -X94138Y-53710D01* -X94055Y-53627D01* -X94055Y-52672D01* -X94137Y-52589D01* -X94251Y-52314D01* -X94252Y-52017D01* -X94252Y-50048D01* -X94138Y-49773D01* -X93928Y-49563D01* -X93653Y-49448D01* -X93355Y-49448D01* -X93080Y-49562D01* -X92870Y-49772D01* -X92756Y-50047D01* -X92755Y-50344D01* -X92869Y-50620D01* -X93079Y-50830D01* -X93354Y-50944D01* -X93652Y-50945D01* -X93927Y-50831D01* -X94137Y-50621D01* -X94251Y-50346D01* -X94252Y-50048D01* -X94252Y-52017D01* -X94138Y-51742D01* -X93928Y-51531D01* -X93653Y-51417D01* -X93355Y-51417D01* -X93080Y-51530D01* -X92870Y-51741D01* -X92756Y-52015D01* -X92755Y-52313D01* -X92869Y-52588D01* -X92952Y-52672D01* -X92952Y-53627D01* -X92870Y-53709D01* -X92756Y-53984D01* -X92755Y-54281D01* -X92869Y-54557D01* -X92952Y-54640D01* -X92952Y-55477D01* -X92943Y-55468D01* -X92669Y-55354D01* -X92371Y-55354D01* -X92096Y-55467D01* -X92086Y-55477D01* -X92086Y-54640D01* -X92169Y-54558D01* -X92283Y-54283D01* -X92283Y-53985D01* -X92169Y-53710D01* -X92086Y-53627D01* -X92086Y-52672D01* -X92169Y-52589D01* -X92283Y-52314D01* -X92283Y-52017D01* -X92283Y-50048D01* -X92169Y-49773D01* -X91959Y-49563D01* -X91684Y-49448D01* -X91387Y-49448D01* -X91112Y-49562D01* -X90901Y-49772D01* -X90787Y-50047D01* -X90787Y-50344D01* -X90900Y-50620D01* -X91111Y-50830D01* -X91385Y-50944D01* -X91683Y-50945D01* -X91958Y-50831D01* -X92169Y-50621D01* -X92283Y-50346D01* -X92283Y-50048D01* -X92283Y-52017D01* -X92169Y-51742D01* -X91959Y-51531D01* -X91684Y-51417D01* -X91387Y-51417D01* -X91112Y-51530D01* -X90901Y-51741D01* -X90787Y-52015D01* -X90787Y-52313D01* -X90900Y-52588D01* -X90984Y-52672D01* -X90984Y-53627D01* -X90901Y-53709D01* -X90787Y-53984D01* -X90787Y-54281D01* -X90900Y-54557D01* -X90984Y-54640D01* -X90984Y-55477D01* -X90975Y-55468D01* -X90700Y-55354D01* -X90403Y-55354D01* -X90128Y-55467D01* -X90118Y-55477D01* -X90118Y-54640D01* -X90200Y-54558D01* -X90314Y-54283D01* -X90315Y-53985D01* -X90201Y-53710D01* -X90118Y-53627D01* -X90118Y-52672D01* -X90200Y-52589D01* -X90314Y-52314D01* -X90315Y-52017D01* -X90315Y-50048D01* -X90201Y-49773D01* -X89991Y-49563D01* -X89716Y-49448D01* -X89418Y-49448D01* -X89143Y-49562D01* -X88933Y-49772D01* -X88819Y-50047D01* -X88818Y-50344D01* -X88932Y-50620D01* -X89142Y-50830D01* -X89417Y-50944D01* -X89715Y-50945D01* -X89990Y-50831D01* -X90200Y-50621D01* -X90314Y-50346D01* -X90315Y-50048D01* -X90315Y-52017D01* -X90201Y-51742D01* -X89991Y-51531D01* -X89716Y-51417D01* -X89418Y-51417D01* -X89143Y-51530D01* -X88933Y-51741D01* -X88819Y-52015D01* -X88818Y-52313D01* -X88932Y-52588D01* -X89015Y-52672D01* -X89015Y-53627D01* -X88933Y-53709D01* -X88819Y-53984D01* -X88818Y-54281D01* -X88932Y-54557D01* -X89015Y-54640D01* -X89015Y-55477D01* -X89006Y-55468D01* -X88732Y-55354D01* -X88434Y-55354D01* -X88159Y-55467D01* -X88149Y-55477D01* -X88149Y-54640D01* -X88232Y-54558D01* -X88346Y-54283D01* -X88346Y-53985D01* -X88232Y-53710D01* -X88149Y-53627D01* -X88149Y-52672D01* -X88232Y-52589D01* -X88346Y-52314D01* -X88346Y-52017D01* -X88346Y-50048D01* -X88232Y-49773D01* -X88022Y-49563D01* -X87747Y-49448D01* -X87450Y-49448D01* -X87175Y-49562D01* -X86964Y-49772D01* -X86850Y-50047D01* -X86850Y-50344D01* -X86963Y-50620D01* -X87174Y-50830D01* -X87448Y-50944D01* -X87746Y-50945D01* -X88021Y-50831D01* -X88232Y-50621D01* -X88346Y-50346D01* -X88346Y-50048D01* -X88346Y-52017D01* -X88232Y-51742D01* -X88022Y-51531D01* -X87747Y-51417D01* -X87450Y-51417D01* -X87175Y-51530D01* -X86964Y-51741D01* -X86850Y-52015D01* -X86850Y-52313D01* -X86963Y-52588D01* -X87047Y-52672D01* -X87047Y-53627D01* -X86964Y-53709D01* -X86850Y-53984D01* -X86850Y-54281D01* -X86963Y-54557D01* -X87047Y-54640D01* -X87047Y-55477D01* -X87038Y-55468D01* -X86763Y-55354D01* -X86466Y-55354D01* -X86191Y-55467D01* -X86181Y-55477D01* -X86181Y-54640D01* -X86263Y-54558D01* -X86377Y-54283D01* -X86378Y-53985D01* -X86264Y-53710D01* -X86181Y-53627D01* -X86181Y-52672D01* -X86263Y-52589D01* -X86377Y-52314D01* -X86378Y-52017D01* -X86378Y-50048D01* -X86264Y-49773D01* -X86054Y-49563D01* -X85779Y-49448D01* -X85481Y-49448D01* -X85206Y-49562D01* -X84996Y-49772D01* -X84882Y-50047D01* -X84881Y-50344D01* -X84995Y-50620D01* -X85205Y-50830D01* -X85480Y-50944D01* -X85778Y-50945D01* -X86053Y-50831D01* -X86263Y-50621D01* -X86377Y-50346D01* -X86378Y-50048D01* -X86378Y-52017D01* -X86264Y-51742D01* -X86054Y-51531D01* -X85779Y-51417D01* -X85481Y-51417D01* -X85206Y-51530D01* -X84996Y-51741D01* -X84882Y-52015D01* -X84881Y-52313D01* -X84995Y-52588D01* -X85078Y-52672D01* -X85078Y-53627D01* -X84996Y-53709D01* -X84882Y-53984D01* -X84881Y-54281D01* -X84995Y-54557D01* -X85078Y-54640D01* -X85078Y-55477D01* -X85069Y-55468D01* -X84795Y-55354D01* -X84497Y-55354D01* -X84222Y-55467D01* -X84212Y-55477D01* -X84212Y-54640D01* -X84295Y-54558D01* -X84409Y-54283D01* -X84409Y-53985D01* -X84295Y-53710D01* -X84212Y-53627D01* -X84212Y-52672D01* -X84295Y-52589D01* -X84409Y-52314D01* -X84409Y-52017D01* -X84409Y-50048D01* -X84295Y-49773D01* -X84085Y-49563D01* -X83810Y-49448D01* -X83513Y-49448D01* -X83238Y-49562D01* -X83027Y-49772D01* -X82913Y-50047D01* -X82913Y-50344D01* -X83026Y-50620D01* -X83237Y-50830D01* -X83511Y-50944D01* -X83809Y-50945D01* -X84084Y-50831D01* -X84295Y-50621D01* -X84409Y-50346D01* -X84409Y-50048D01* -X84409Y-52017D01* -X84295Y-51742D01* -X84085Y-51531D01* -X83810Y-51417D01* -X83513Y-51417D01* -X83238Y-51530D01* -X83027Y-51741D01* -X82913Y-52015D01* -X82913Y-52313D01* -X83026Y-52588D01* -X83110Y-52672D01* -X83110Y-53627D01* -X83027Y-53709D01* -X82913Y-53984D01* -X82913Y-54281D01* -X83026Y-54557D01* -X83110Y-54640D01* -X83110Y-55477D01* -X83101Y-55468D01* -X82826Y-55354D01* -X82529Y-55354D01* -X82253Y-55467D01* -X82244Y-55477D01* -X82244Y-54640D01* -X82326Y-54558D01* -X82440Y-54283D01* -X82441Y-53985D01* -X82327Y-53710D01* -X82244Y-53627D01* -X82244Y-52672D01* -X82326Y-52589D01* -X82440Y-52314D01* -X82441Y-52017D01* -X82441Y-50048D01* -X82327Y-49773D01* -X82117Y-49563D01* -X81842Y-49448D01* -X81544Y-49448D01* -X81269Y-49562D01* -X81059Y-49772D01* -X80945Y-50047D01* -X80944Y-50344D01* -X81058Y-50620D01* -X81268Y-50830D01* -X81543Y-50944D01* -X81841Y-50945D01* -X82116Y-50831D01* -X82326Y-50621D01* -X82440Y-50346D01* -X82441Y-50048D01* -X82441Y-52017D01* -X82327Y-51742D01* -X82117Y-51531D01* -X81842Y-51417D01* -X81544Y-51417D01* -X81269Y-51530D01* -X81059Y-51741D01* -X80945Y-52015D01* -X80944Y-52313D01* -X81058Y-52588D01* -X81141Y-52672D01* -X81141Y-53627D01* -X81059Y-53709D01* -X80945Y-53984D01* -X80944Y-54281D01* -X81058Y-54557D01* -X81141Y-54640D01* -X81141Y-55477D01* -X81132Y-55468D01* -X80858Y-55354D01* -X80560Y-55354D01* -X80285Y-55467D01* -X80275Y-55477D01* -X80275Y-54640D01* -X80358Y-54558D01* -X80472Y-54283D01* -X80472Y-53985D01* -X80358Y-53710D01* -X80275Y-53627D01* -X80275Y-52672D01* -X80358Y-52589D01* -X80472Y-52314D01* -X80472Y-52017D01* -X80472Y-50048D01* -X80358Y-49773D01* -X80148Y-49563D01* -X79873Y-49448D01* -X79576Y-49448D01* -X79301Y-49562D01* -X79090Y-49772D01* -X78976Y-50047D01* -X78976Y-50344D01* -X79089Y-50620D01* -X79300Y-50830D01* -X79574Y-50944D01* -X79872Y-50945D01* -X80147Y-50831D01* -X80358Y-50621D01* -X80472Y-50346D01* -X80472Y-50048D01* -X80472Y-52017D01* -X80358Y-51742D01* -X80148Y-51531D01* -X79873Y-51417D01* -X79576Y-51417D01* -X79301Y-51530D01* -X79090Y-51741D01* -X78976Y-52015D01* -X78976Y-52313D01* -X79089Y-52588D01* -X79173Y-52672D01* -X79173Y-53627D01* -X79090Y-53709D01* -X78976Y-53984D01* -X78976Y-54281D01* -X79089Y-54557D01* -X79173Y-54640D01* -X79173Y-55477D01* -X79164Y-55468D01* -X78889Y-55354D01* -X78592Y-55354D01* -X78316Y-55467D01* -X78307Y-55477D01* -X78307Y-54640D01* -X78389Y-54558D01* -X78503Y-54283D01* -X78504Y-53985D01* -X78390Y-53710D01* -X78307Y-53627D01* -X78307Y-52672D01* -X78389Y-52589D01* -X78503Y-52314D01* -X78504Y-52017D01* -X78504Y-50048D01* -X78390Y-49773D01* -X78180Y-49563D01* -X77905Y-49448D01* -X77607Y-49448D01* -X77332Y-49562D01* -X77122Y-49772D01* -X77008Y-50047D01* -X77007Y-50344D01* -X77121Y-50620D01* -X77331Y-50830D01* -X77606Y-50944D01* -X77904Y-50945D01* -X78179Y-50831D01* -X78389Y-50621D01* -X78503Y-50346D01* -X78504Y-50048D01* -X78504Y-52017D01* -X78390Y-51742D01* -X78180Y-51531D01* -X77905Y-51417D01* -X77607Y-51417D01* -X77332Y-51530D01* -X77122Y-51741D01* -X77008Y-52015D01* -X77007Y-52313D01* -X77121Y-52588D01* -X77204Y-52672D01* -X77204Y-53627D01* -X77122Y-53709D01* -X77008Y-53984D01* -X77007Y-54281D01* -X77121Y-54557D01* -X77204Y-54640D01* -X77204Y-55477D01* -X77195Y-55468D01* -X76921Y-55354D01* -X76623Y-55354D01* -X76348Y-55467D01* -X76338Y-55477D01* -X76338Y-54640D01* -X76421Y-54558D01* -X76535Y-54283D01* -X76535Y-53985D01* -X76421Y-53710D01* -X76338Y-53627D01* -X76338Y-52672D01* -X76421Y-52589D01* -X76535Y-52314D01* -X76535Y-52017D01* -X76535Y-50048D01* -X76421Y-49773D01* -X76211Y-49563D01* -X75936Y-49448D01* -X75639Y-49448D01* -X75364Y-49562D01* -X75153Y-49772D01* -X75039Y-50047D01* -X75039Y-50344D01* -X75152Y-50620D01* -X75363Y-50830D01* -X75637Y-50944D01* -X75935Y-50945D01* -X76210Y-50831D01* -X76421Y-50621D01* -X76535Y-50346D01* -X76535Y-50048D01* -X76535Y-52017D01* -X76421Y-51742D01* -X76211Y-51531D01* -X75936Y-51417D01* -X75639Y-51417D01* -X75364Y-51530D01* -X75153Y-51741D01* -X75039Y-52015D01* -X75039Y-52313D01* -X75152Y-52588D01* -X75236Y-52672D01* -X75236Y-53627D01* -X75153Y-53709D01* -X75039Y-53984D01* -X75039Y-54281D01* -X75152Y-54557D01* -X75236Y-54640D01* -X75236Y-55477D01* -X75227Y-55468D01* -X74952Y-55354D01* -X74655Y-55354D01* -X74379Y-55467D01* -X74370Y-55477D01* -X74370Y-54640D01* -X74452Y-54558D01* -X74566Y-54283D01* -X74567Y-53985D01* -X74453Y-53710D01* -X74370Y-53627D01* -X74370Y-52672D01* -X74452Y-52589D01* -X74566Y-52314D01* -X74567Y-52017D01* -X74567Y-50048D01* -X74453Y-49773D01* -X74243Y-49563D01* -X73968Y-49448D01* -X73670Y-49448D01* -X73395Y-49562D01* -X73185Y-49772D01* -X73070Y-50047D01* -X73070Y-50344D01* -X73184Y-50620D01* -X73394Y-50830D01* -X73669Y-50944D01* -X73967Y-50945D01* -X74242Y-50831D01* -X74452Y-50621D01* -X74566Y-50346D01* -X74567Y-50048D01* -X74567Y-52017D01* -X74453Y-51742D01* -X74243Y-51531D01* -X73968Y-51417D01* -X73670Y-51417D01* -X73395Y-51530D01* -X73185Y-51741D01* -X73070Y-52015D01* -X73070Y-52313D01* -X73184Y-52588D01* -X73267Y-52672D01* -X73267Y-53627D01* -X73185Y-53709D01* -X73070Y-53984D01* -X73070Y-54281D01* -X73184Y-54557D01* -X73267Y-54640D01* -X73267Y-55477D01* -X73258Y-55468D01* -X72984Y-55354D01* -X72686Y-55354D01* -X72411Y-55467D01* -X72401Y-55477D01* -X72401Y-54640D01* -X72484Y-54558D01* -X72598Y-54283D01* -X72598Y-53985D01* -X72484Y-53710D01* -X72401Y-53627D01* -X72401Y-52672D01* -X72484Y-52589D01* -X72598Y-52314D01* -X72598Y-52017D01* -X72598Y-50048D01* -X72484Y-49773D01* -X72274Y-49563D01* -X71999Y-49448D01* -X71702Y-49448D01* -X71427Y-49562D01* -X71216Y-49772D01* -X71102Y-50047D01* -X71102Y-50344D01* -X71215Y-50620D01* -X71426Y-50830D01* -X71700Y-50944D01* -X71998Y-50945D01* -X72273Y-50831D01* -X72484Y-50621D01* -X72598Y-50346D01* -X72598Y-50048D01* -X72598Y-52017D01* -X72484Y-51742D01* -X72274Y-51531D01* -X71999Y-51417D01* -X71702Y-51417D01* -X71427Y-51530D01* -X71216Y-51741D01* -X71102Y-52015D01* -X71102Y-52313D01* -X71215Y-52588D01* -X71299Y-52672D01* -X71299Y-53627D01* -X71216Y-53709D01* -X71102Y-53984D01* -X71102Y-54281D01* -X71215Y-54557D01* -X71299Y-54640D01* -X71299Y-55477D01* -X71290Y-55468D01* -X71015Y-55354D01* -X70718Y-55354D01* -X70442Y-55467D01* -X70433Y-55477D01* -X70433Y-54640D01* -X70515Y-54558D01* -X70629Y-54283D01* -X70630Y-53985D01* -X70516Y-53710D01* -X70433Y-53627D01* -X70433Y-52672D01* -X70515Y-52589D01* -X70629Y-52314D01* -X70630Y-52017D01* -X70630Y-50048D01* -X70516Y-49773D01* -X70306Y-49563D01* -X70031Y-49448D01* -X69733Y-49448D01* -X69458Y-49562D01* -X69248Y-49772D01* -X69133Y-50047D01* -X69133Y-50344D01* -X69247Y-50620D01* -X69457Y-50830D01* -X69732Y-50944D01* -X70030Y-50945D01* -X70305Y-50831D01* -X70515Y-50621D01* -X70629Y-50346D01* -X70630Y-50048D01* -X70630Y-52017D01* -X70516Y-51742D01* -X70306Y-51531D01* -X70031Y-51417D01* -X69733Y-51417D01* -X69458Y-51530D01* -X69248Y-51741D01* -X69133Y-52015D01* -X69133Y-52313D01* -X69247Y-52588D01* -X69330Y-52672D01* -X69330Y-53627D01* -X69248Y-53709D01* -X69133Y-53984D01* -X69133Y-54281D01* -X69247Y-54557D01* -X69330Y-54640D01* -X69330Y-55477D01* -X69321Y-55468D01* -X69047Y-55354D01* -X68749Y-55354D01* -X68474Y-55467D01* -X68263Y-55678D01* -X68149Y-55952D01* -X68149Y-56250D01* -X68263Y-56525D01* -X68473Y-56736D01* -X68748Y-56850D01* -X69045Y-56850D01* -X69320Y-56736D01* -X69330Y-56727D01* -X69330Y-57445D01* -X69321Y-57437D01* -X69047Y-57322D01* -X68749Y-57322D01* -X68474Y-57436D01* -X68263Y-57646D01* -X68149Y-57921D01* -X68149Y-58219D01* -X68263Y-58494D01* -X68473Y-58704D01* -X68748Y-58818D01* -X69045Y-58819D01* -X69320Y-58705D01* -X69369Y-58657D01* -X69372Y-58675D01* -X69492Y-58854D01* -X70039Y-59401D01* -X70011Y-59389D01* -X69753Y-59389D01* -X69514Y-59488D01* -X69331Y-59670D01* -X69232Y-59909D01* -X69232Y-60168D01* -X69330Y-60406D01* -X69513Y-60589D01* -X69752Y-60688D01* -X69830Y-60688D01* -X69492Y-61027D01* -X69372Y-61206D01* -X69330Y-61417D01* -X69330Y-62506D01* -X69266Y-62441D01* -X69027Y-62342D01* -X68768Y-62342D01* -X68530Y-62441D01* -X68347Y-62623D01* -X68248Y-62862D01* -X68247Y-63120D01* -X68346Y-63359D01* -X68529Y-63542D01* -X68767Y-63641D01* -X69026Y-63641D01* -X69265Y-63543D01* -X69389Y-63418D01* -X69513Y-63542D01* -X69752Y-63641D01* -X70010Y-63641D01* -X70249Y-63543D01* -X70374Y-63418D01* -X70497Y-63542D01* -X70736Y-63641D01* -X70994Y-63641D01* -X71233Y-63543D01* -X71358Y-63418D01* -X71481Y-63542D01* -X71720Y-63641D01* -X71979Y-63641D01* -X72217Y-63543D01* -X72342Y-63418D01* -X72466Y-63542D01* -X72704Y-63641D01* -X72963Y-63641D01* -X73202Y-63543D01* -X73326Y-63418D01* -X73450Y-63542D01* -X73689Y-63641D01* -X73947Y-63641D01* -X74186Y-63543D01* -X74311Y-63418D01* -X74434Y-63542D01* -X74673Y-63641D01* -X74931Y-63641D01* -X75170Y-63543D01* -X75295Y-63418D01* -X75418Y-63542D01* -X75657Y-63641D01* -X75916Y-63641D01* -X76154Y-63543D01* -X76279Y-63418D01* -X76403Y-63542D01* -X76641Y-63641D01* -X76900Y-63641D01* -X77139Y-63543D01* -X77263Y-63418D01* -X77387Y-63542D01* -X77626Y-63641D01* -X77884Y-63641D01* -X78123Y-63543D01* -X78248Y-63418D01* -X78371Y-63542D01* -X78610Y-63641D01* -X78868Y-63641D01* -X79107Y-63543D01* -X79232Y-63418D01* -X79355Y-63542D01* -X79594Y-63641D01* -X79853Y-63641D01* -X80091Y-63543D01* -X80216Y-63418D01* -X80340Y-63542D01* -X80578Y-63641D01* -X80837Y-63641D01* -X81076Y-63543D01* -X81200Y-63418D01* -X81324Y-63542D01* -X81563Y-63641D01* -X81821Y-63641D01* -X82060Y-63543D01* -X82185Y-63418D01* -X82308Y-63542D01* -X82547Y-63641D01* -X82805Y-63641D01* -X83044Y-63543D01* -X83169Y-63418D01* -X83292Y-63542D01* -X83531Y-63641D01* -X83790Y-63641D01* -X84028Y-63543D01* -X84153Y-63418D01* -X84277Y-63542D01* -X84515Y-63641D01* -X84774Y-63641D01* -X85013Y-63543D01* -X85137Y-63418D01* -X85261Y-63542D01* -X85500Y-63641D01* -X85758Y-63641D01* -X85997Y-63543D01* -X86122Y-63418D01* -X86245Y-63542D01* -X86484Y-63641D01* -X86742Y-63641D01* -X86981Y-63543D01* -X87106Y-63418D01* -X87229Y-63542D01* -X87468Y-63641D01* -X87727Y-63641D01* -X87965Y-63543D01* -X88090Y-63418D01* -X88214Y-63542D01* -X88452Y-63641D01* -X88711Y-63641D01* -X88950Y-63543D01* -X89074Y-63418D01* -X89198Y-63542D01* -X89437Y-63641D01* -X89695Y-63641D01* -X89934Y-63543D01* -X90059Y-63418D01* -X90182Y-63542D01* -X90421Y-63641D01* -X90679Y-63641D01* -X90918Y-63543D01* -X91043Y-63418D01* -X91166Y-63542D01* -X91405Y-63641D01* -X91664Y-63641D01* -X91902Y-63543D01* -X92027Y-63418D01* -X92151Y-63542D01* -X92389Y-63641D01* -X92648Y-63641D01* -X92887Y-63543D01* -X93011Y-63418D01* -X93135Y-63542D01* -X93374Y-63641D01* -X93632Y-63641D01* -X93871Y-63543D01* -X93996Y-63418D01* -X94119Y-63542D01* -X94358Y-63641D01* -X94616Y-63641D01* -X94855Y-63543D01* -X94980Y-63418D01* -X95103Y-63542D01* -X95342Y-63641D01* -X95601Y-63641D01* -X95839Y-63543D01* -X95964Y-63418D01* -X96088Y-63542D01* -X96326Y-63641D01* -X96585Y-63641D01* -X96824Y-63543D01* -X96948Y-63418D01* -X97072Y-63542D01* -X97311Y-63641D01* -X97569Y-63641D01* -X97808Y-63543D01* -X97933Y-63418D01* -X98056Y-63542D01* -X98295Y-63641D01* -X98553Y-63641D01* -X98792Y-63543D01* -X98917Y-63418D01* -X99040Y-63542D01* -X99279Y-63641D01* -X99538Y-63641D01* -X99776Y-63543D01* -X99901Y-63418D01* -X100025Y-63542D01* -X100263Y-63641D01* -X100522Y-63641D01* -X100761Y-63543D01* -X100885Y-63418D01* -X101009Y-63542D01* -X101248Y-63641D01* -X101506Y-63641D01* -X101745Y-63543D01* -X101870Y-63418D01* -X101993Y-63542D01* -X102232Y-63641D01* -X102490Y-63641D01* -X102729Y-63543D01* -X102854Y-63418D01* -X102978Y-63542D01* -X103216Y-63641D01* -X103475Y-63641D01* -X103713Y-63543D01* -X103838Y-63418D01* -X103962Y-63542D01* -X104200Y-63641D01* -X104459Y-63641D01* -X104698Y-63543D01* -X104881Y-63360D01* -X104980Y-63121D01* -X104980Y-62863D01* -X104881Y-62624D01* -X104699Y-62441D01* -X104460Y-62342D01* -X104202Y-62342D01* -X103963Y-62441D01* -X103897Y-62506D01* -X103897Y-61645D01* -X104720Y-60822D01* -X104720Y-60822D01* -X104839Y-60643D01* -X104881Y-60433D01* -X104881Y-60433D01* -X104881Y-59448D01* -X104881Y-59448D01* -X104839Y-59237D01* -X104720Y-59059D01* -X104720Y-59059D01* -X104479Y-58818D01* -X104753Y-58705D01* -X104964Y-58495D01* -X105078Y-58220D01* -X105078Y-57922D01* -X105078Y-66653D01* -X66200Y-66653D01* -X66200Y-61998D01* -X66042Y-61614D01* -X65749Y-61320D01* -X65365Y-61161D01* -X64950Y-61161D01* -X64567Y-61319D01* -X64273Y-61612D01* -X64114Y-61996D01* -X64113Y-62411D01* -X64272Y-62794D01* -X64565Y-63088D01* -X64949Y-63247D01* -X65364Y-63248D01* -X65747Y-63089D01* -X66041Y-62796D01* -X66200Y-62413D01* -X66200Y-61998D01* -X66200Y-66653D01* -X62466Y-66653D01* -X62466Y-53418D01* -X62466Y-52881D01* -X62466Y-52817D01* -X62442Y-52759D01* -X62397Y-52714D01* -X62339Y-52690D01* -X62165Y-52690D01* -X62125Y-52730D01* -X62125Y-53031D01* -X62427Y-53031D01* -X62466Y-52991D01* -X62466Y-52881D01* -X62466Y-53418D01* -X62466Y-53307D01* -X62427Y-53267D01* -X62125Y-53267D01* -X62125Y-53568D01* -X62165Y-53608D01* -X62339Y-53608D01* -X62397Y-53584D01* -X62442Y-53539D01* -X62466Y-53481D01* -X62466Y-53418D01* -X62466Y-66653D01* -X61889Y-66653D01* -X61889Y-53568D01* -X61889Y-53267D01* -X61889Y-53031D01* -X61889Y-52730D01* -X61850Y-52690D01* -X61676Y-52690D01* -X61617Y-52714D01* -X61573Y-52759D01* -X61548Y-52817D01* -X61548Y-52881D01* -X61548Y-52991D01* -X61588Y-53031D01* -X61889Y-53031D01* -X61889Y-53267D01* -X61588Y-53267D01* -X61548Y-53307D01* -X61548Y-53418D01* -X61548Y-53481D01* -X61573Y-53539D01* -X61617Y-53584D01* -X61676Y-53608D01* -X61850Y-53608D01* -X61889Y-53568D01* -X61889Y-66653D01* -X60111Y-66653D01* -X60111Y-64751D01* -X60111Y-49003D01* -X59950Y-48615D01* -X59654Y-48317D01* -X59266Y-48156D01* -X58846Y-48156D01* -X58457Y-48316D01* -X58160Y-48613D01* -X57999Y-49001D01* -X57999Y-49421D01* -X58159Y-49809D01* -X58456Y-50107D01* -X58844Y-50268D01* -X59264Y-50268D01* -X59652Y-50108D01* -X59949Y-49811D01* -X60110Y-49423D01* -X60111Y-49003D01* -X60111Y-64751D01* -X59950Y-64363D01* -X59654Y-64065D01* -X59266Y-63904D01* -X58846Y-63904D01* -X58457Y-64064D01* -X58160Y-64361D01* -X57999Y-64749D01* -X57999Y-65169D01* -X58159Y-65557D01* -X58456Y-65855D01* -X58844Y-66016D01* -X59264Y-66016D01* -X59652Y-65856D01* -X59949Y-65559D01* -X60110Y-65171D01* -X60111Y-64751D01* -X60111Y-66653D01* -X57362Y-66653D01* -X57362Y-47519D01* -X69638Y-47519D01* -X69458Y-47593D01* -X69248Y-47804D01* -X69133Y-48078D01* -X69133Y-48376D01* -X69247Y-48651D01* -X69457Y-48862D01* -X69732Y-48976D01* -X70030Y-48976D01* -X70305Y-48862D01* -X70515Y-48652D01* -X70629Y-48377D01* -X70630Y-48080D01* -X70516Y-47805D01* -X70306Y-47594D01* -X70125Y-47519D01* -X71606Y-47519D01* -X71427Y-47593D01* -X71216Y-47804D01* -X71102Y-48078D01* -X71102Y-48376D01* -X71215Y-48651D01* -X71426Y-48862D01* -X71700Y-48976D01* -X71998Y-48976D01* -X72273Y-48862D01* -X72484Y-48652D01* -X72598Y-48377D01* -X72598Y-48080D01* -X72484Y-47805D01* -X72274Y-47594D01* -X72094Y-47519D01* -X73575Y-47519D01* -X73395Y-47593D01* -X73185Y-47804D01* -X73070Y-48078D01* -X73070Y-48376D01* -X73184Y-48651D01* -X73394Y-48862D01* -X73669Y-48976D01* -X73967Y-48976D01* -X74242Y-48862D01* -X74452Y-48652D01* -X74566Y-48377D01* -X74567Y-48080D01* -X74453Y-47805D01* -X74243Y-47594D01* -X74062Y-47519D01* -X75543Y-47519D01* -X75364Y-47593D01* -X75153Y-47804D01* -X75039Y-48078D01* -X75039Y-48376D01* -X75152Y-48651D01* -X75363Y-48862D01* -X75637Y-48976D01* -X75935Y-48976D01* -X76210Y-48862D01* -X76421Y-48652D01* -X76535Y-48377D01* -X76535Y-48080D01* -X76421Y-47805D01* -X76211Y-47594D01* -X76031Y-47519D01* -X77512Y-47519D01* -X77332Y-47593D01* -X77122Y-47804D01* -X77008Y-48078D01* -X77007Y-48376D01* -X77121Y-48651D01* -X77331Y-48862D01* -X77606Y-48976D01* -X77904Y-48976D01* -X78179Y-48862D01* -X78389Y-48652D01* -X78503Y-48377D01* -X78504Y-48080D01* -X78390Y-47805D01* -X78180Y-47594D01* -X77999Y-47519D01* -X79480Y-47519D01* -X79301Y-47593D01* -X79090Y-47804D01* -X78976Y-48078D01* -X78976Y-48376D01* -X79089Y-48651D01* -X79300Y-48862D01* -X79574Y-48976D01* -X79872Y-48976D01* -X80147Y-48862D01* -X80358Y-48652D01* -X80472Y-48377D01* -X80472Y-48080D01* -X80358Y-47805D01* -X80148Y-47594D01* -X79968Y-47519D01* -X81449Y-47519D01* -X81269Y-47593D01* -X81059Y-47804D01* -X80945Y-48078D01* -X80944Y-48376D01* -X81058Y-48651D01* -X81268Y-48862D01* -X81543Y-48976D01* -X81841Y-48976D01* -X82116Y-48862D01* -X82326Y-48652D01* -X82440Y-48377D01* -X82441Y-48080D01* -X82327Y-47805D01* -X82117Y-47594D01* -X81936Y-47519D01* -X83417Y-47519D01* -X83238Y-47593D01* -X83027Y-47804D01* -X82913Y-48078D01* -X82913Y-48376D01* -X83026Y-48651D01* -X83237Y-48862D01* -X83511Y-48976D01* -X83809Y-48976D01* -X84084Y-48862D01* -X84295Y-48652D01* -X84409Y-48377D01* -X84409Y-48080D01* -X84295Y-47805D01* -X84085Y-47594D01* -X83905Y-47519D01* -X85386Y-47519D01* -X85206Y-47593D01* -X84996Y-47804D01* -X84882Y-48078D01* -X84881Y-48376D01* -X84995Y-48651D01* -X85205Y-48862D01* -X85480Y-48976D01* -X85778Y-48976D01* -X86053Y-48862D01* -X86263Y-48652D01* -X86377Y-48377D01* -X86378Y-48080D01* -X86264Y-47805D01* -X86054Y-47594D01* -X85873Y-47519D01* -X87354Y-47519D01* -X87175Y-47593D01* -X86964Y-47804D01* -X86850Y-48078D01* -X86850Y-48376D01* -X86963Y-48651D01* -X87174Y-48862D01* -X87448Y-48976D01* -X87746Y-48976D01* -X88021Y-48862D01* -X88232Y-48652D01* -X88346Y-48377D01* -X88346Y-48080D01* -X88232Y-47805D01* -X88022Y-47594D01* -X87842Y-47519D01* -X89323Y-47519D01* -X89143Y-47593D01* -X88933Y-47804D01* -X88819Y-48078D01* -X88818Y-48376D01* -X88932Y-48651D01* -X89142Y-48862D01* -X89417Y-48976D01* -X89715Y-48976D01* -X89990Y-48862D01* -X90200Y-48652D01* -X90314Y-48377D01* -X90315Y-48080D01* -X90201Y-47805D01* -X89991Y-47594D01* -X89810Y-47519D01* -X91291Y-47519D01* -X91112Y-47593D01* -X90901Y-47804D01* -X90787Y-48078D01* -X90787Y-48376D01* -X90900Y-48651D01* -X91111Y-48862D01* -X91385Y-48976D01* -X91683Y-48976D01* -X91958Y-48862D01* -X92169Y-48652D01* -X92283Y-48377D01* -X92283Y-48080D01* -X92169Y-47805D01* -X91959Y-47594D01* -X91779Y-47519D01* -X93260Y-47519D01* -X93080Y-47593D01* -X92870Y-47804D01* -X92756Y-48078D01* -X92755Y-48376D01* -X92869Y-48651D01* -X93079Y-48862D01* -X93354Y-48976D01* -X93652Y-48976D01* -X93927Y-48862D01* -X94137Y-48652D01* -X94251Y-48377D01* -X94252Y-48080D01* -X94138Y-47805D01* -X93928Y-47594D01* -X93747Y-47519D01* -X95228Y-47519D01* -X95049Y-47593D01* -X94838Y-47804D01* -X94724Y-48078D01* -X94724Y-48376D01* -X94837Y-48651D01* -X95048Y-48862D01* -X95322Y-48976D01* -X95620Y-48976D01* -X95895Y-48862D01* -X96106Y-48652D01* -X96220Y-48377D01* -X96220Y-48080D01* -X96106Y-47805D01* -X95896Y-47594D01* -X95716Y-47519D01* -X97197Y-47519D01* -X97017Y-47593D01* -X96807Y-47804D01* -X96693Y-48078D01* -X96692Y-48376D01* -X96806Y-48651D01* -X97016Y-48862D01* -X97291Y-48976D01* -X97589Y-48976D01* -X97864Y-48862D01* -X98074Y-48652D01* -X98188Y-48377D01* -X98189Y-48080D01* -X98075Y-47805D01* -X97865Y-47594D01* -X97684Y-47519D01* -X99165Y-47519D01* -X98986Y-47593D01* -X98775Y-47804D01* -X98661Y-48078D01* -X98661Y-48376D01* -X98774Y-48651D01* -X98985Y-48862D01* -X99260Y-48976D01* -X99557Y-48976D01* -X99832Y-48862D01* -X100043Y-48652D01* -X100157Y-48377D01* -X100157Y-48080D01* -X100043Y-47805D01* -X99833Y-47594D01* -X99653Y-47519D01* -X101134Y-47519D01* -X100954Y-47593D01* -X100744Y-47804D01* -X100630Y-48078D01* -X100629Y-48376D01* -X100743Y-48651D01* -X100953Y-48862D01* -X101228Y-48976D01* -X101526Y-48976D01* -X101801Y-48862D01* -X102011Y-48652D01* -X102125Y-48377D01* -X102126Y-48080D01* -X102012Y-47805D01* -X101802Y-47594D01* -X101621Y-47519D01* -X103102Y-47519D01* -X102923Y-47593D01* -X102712Y-47804D01* -X102598Y-48078D01* -X102598Y-48376D01* -X102711Y-48651D01* -X102922Y-48862D01* -X103197Y-48976D01* -X103494Y-48976D01* -X103769Y-48862D01* -X103980Y-48652D01* -X104094Y-48377D01* -X104094Y-48080D01* -X103980Y-47805D01* -X103770Y-47594D01* -X103590Y-47519D01* -X115866Y-47519D01* -X115866Y-66653D01* -X115866Y-66653D01* -G37* -G54D17* -X115866Y-66653D02* -X115229Y-66653D01* -X115229Y-64751D01* -X115229Y-49003D01* -X115068Y-48615D01* -X114772Y-48317D01* -X114384Y-48156D01* -X113964Y-48156D01* -X113575Y-48316D01* -X113278Y-48613D01* -X113117Y-49001D01* -X113117Y-49421D01* -X113277Y-49809D01* -X113574Y-50107D01* -X113962Y-50268D01* -X114382Y-50268D01* -X114770Y-50108D01* -X115067Y-49811D01* -X115228Y-49423D01* -X115229Y-49003D01* -X115229Y-64751D01* -X115068Y-64363D01* -X114772Y-64065D01* -X114384Y-63904D01* -X113964Y-63904D01* -X113575Y-64064D01* -X113278Y-64361D01* -X113117Y-64749D01* -X113117Y-65169D01* -X113277Y-65557D01* -X113574Y-65855D01* -X113962Y-66016D01* -X114382Y-66016D01* -X114770Y-65856D01* -X115067Y-65559D01* -X115228Y-65171D01* -X115229Y-64751D01* -X115229Y-66653D01* -X111679Y-66653D01* -X111679Y-53418D01* -X111679Y-52881D01* -X111679Y-52817D01* -X111655Y-52759D01* -X111610Y-52714D01* -X111551Y-52690D01* -X111378Y-52690D01* -X111338Y-52730D01* -X111338Y-53031D01* -X111639Y-53031D01* -X111679Y-52991D01* -X111679Y-52881D01* -X111679Y-53418D01* -X111679Y-53307D01* -X111639Y-53267D01* -X111338Y-53267D01* -X111338Y-53568D01* -X111378Y-53608D01* -X111551Y-53608D01* -X111610Y-53584D01* -X111655Y-53539D01* -X111679Y-53481D01* -X111679Y-53418D01* -X111679Y-66653D01* -X111102Y-66653D01* -X111102Y-53568D01* -X111102Y-53267D01* -X111102Y-53031D01* -X111102Y-52730D01* -X111062Y-52690D01* -X110888Y-52690D01* -X110830Y-52714D01* -X110785Y-52759D01* -X110761Y-52817D01* -X110761Y-52881D01* -X110761Y-52991D01* -X110801Y-53031D01* -X111102Y-53031D01* -X111102Y-53267D01* -X110801Y-53267D01* -X110761Y-53307D01* -X110761Y-53418D01* -X110761Y-53481D01* -X110785Y-53539D01* -X110830Y-53584D01* -X110888Y-53608D01* -X111062Y-53608D01* -X111102Y-53568D01* -X111102Y-66653D01* -X109114Y-66653D01* -X109114Y-61998D01* -X108955Y-61614D01* -X108662Y-61320D01* -X108279Y-61161D01* -X107864Y-61161D01* -X107480Y-61319D01* -X107186Y-61612D01* -X107027Y-61996D01* -X107027Y-62411D01* -X107185Y-62794D01* -X107479Y-63088D01* -X107862Y-63247D01* -X108277Y-63248D01* -X108661Y-63089D01* -X108954Y-62796D01* -X109113Y-62413D01* -X109114Y-61998D01* -X109114Y-66653D01* -X105078Y-66653D01* -X105078Y-57922D01* -X104965Y-57647D01* -X104754Y-57437D01* -X104480Y-57322D01* -X104182Y-57322D01* -X103907Y-57436D01* -X103897Y-57446D01* -X103897Y-56727D01* -X103906Y-56736D01* -X104181Y-56850D01* -X104478Y-56850D01* -X104753Y-56736D01* -X104964Y-56526D01* -X105078Y-56251D01* -X105078Y-55954D01* -X104965Y-55679D01* -X104754Y-55468D01* -X104480Y-55354D01* -X104182Y-55354D01* -X103907Y-55467D01* -X103897Y-55477D01* -X103897Y-54640D01* -X103980Y-54558D01* -X104094Y-54283D01* -X104094Y-53985D01* -X103980Y-53710D01* -X103897Y-53627D01* -X103897Y-52672D01* -X103980Y-52589D01* -X104094Y-52314D01* -X104094Y-52017D01* -X104094Y-50048D01* -X103980Y-49773D01* -X103770Y-49563D01* -X103495Y-49448D01* -X103198Y-49448D01* -X102923Y-49562D01* -X102712Y-49772D01* -X102598Y-50047D01* -X102598Y-50344D01* -X102711Y-50620D01* -X102922Y-50830D01* -X103197Y-50944D01* -X103494Y-50945D01* -X103769Y-50831D01* -X103980Y-50621D01* -X104094Y-50346D01* -X104094Y-50048D01* -X104094Y-52017D01* -X103980Y-51742D01* -X103770Y-51531D01* -X103495Y-51417D01* -X103198Y-51417D01* -X102923Y-51530D01* -X102712Y-51741D01* -X102598Y-52015D01* -X102598Y-52313D01* -X102711Y-52588D01* -X102795Y-52672D01* -X102795Y-53627D01* -X102712Y-53709D01* -X102598Y-53984D01* -X102598Y-54281D01* -X102711Y-54557D01* -X102795Y-54640D01* -X102795Y-55477D01* -X102786Y-55468D01* -X102511Y-55354D01* -X102214Y-55354D01* -X101939Y-55467D01* -X101929Y-55477D01* -X101929Y-54640D01* -X102011Y-54558D01* -X102125Y-54283D01* -X102126Y-53985D01* -X102012Y-53710D01* -X101929Y-53627D01* -X101929Y-52672D01* -X102011Y-52589D01* -X102125Y-52314D01* -X102126Y-52017D01* -X102126Y-50048D01* -X102012Y-49773D01* -X101802Y-49563D01* -X101527Y-49448D01* -X101229Y-49448D01* -X100954Y-49562D01* -X100744Y-49772D01* -X100630Y-50047D01* -X100629Y-50344D01* -X100743Y-50620D01* -X100953Y-50830D01* -X101228Y-50944D01* -X101526Y-50945D01* -X101801Y-50831D01* -X102011Y-50621D01* -X102125Y-50346D01* -X102126Y-50048D01* -X102126Y-52017D01* -X102012Y-51742D01* -X101802Y-51531D01* -X101527Y-51417D01* -X101229Y-51417D01* -X100954Y-51530D01* -X100744Y-51741D01* -X100630Y-52015D01* -X100629Y-52313D01* -X100743Y-52588D01* -X100826Y-52672D01* -X100826Y-53627D01* -X100744Y-53709D01* -X100630Y-53984D01* -X100629Y-54281D01* -X100743Y-54557D01* -X100826Y-54640D01* -X100826Y-55477D01* -X100817Y-55468D01* -X100543Y-55354D01* -X100245Y-55354D01* -X99970Y-55467D01* -X99960Y-55477D01* -X99960Y-54640D01* -X100043Y-54558D01* -X100157Y-54283D01* -X100157Y-53985D01* -X100043Y-53710D01* -X99960Y-53627D01* -X99960Y-52672D01* -X100043Y-52589D01* -X100157Y-52314D01* -X100157Y-52017D01* -X100157Y-50048D01* -X100043Y-49773D01* -X99833Y-49563D01* -X99558Y-49448D01* -X99261Y-49448D01* -X98986Y-49562D01* -X98775Y-49772D01* -X98661Y-50047D01* -X98661Y-50344D01* -X98774Y-50620D01* -X98985Y-50830D01* -X99260Y-50944D01* -X99557Y-50945D01* -X99832Y-50831D01* -X100043Y-50621D01* -X100157Y-50346D01* -X100157Y-50048D01* -X100157Y-52017D01* -X100043Y-51742D01* -X99833Y-51531D01* -X99558Y-51417D01* -X99261Y-51417D01* -X98986Y-51530D01* -X98775Y-51741D01* -X98661Y-52015D01* -X98661Y-52313D01* -X98774Y-52588D01* -X98858Y-52672D01* -X98858Y-53627D01* -X98775Y-53709D01* -X98661Y-53984D01* -X98661Y-54281D01* -X98774Y-54557D01* -X98858Y-54640D01* -X98858Y-55477D01* -X98849Y-55468D01* -X98574Y-55354D01* -X98277Y-55354D01* -X98002Y-55467D01* -X97992Y-55477D01* -X97992Y-54640D01* -X98074Y-54558D01* -X98188Y-54283D01* -X98189Y-53985D01* -X98075Y-53710D01* -X97992Y-53627D01* -X97992Y-52672D01* -X98074Y-52589D01* -X98188Y-52314D01* -X98189Y-52017D01* -X98189Y-50048D01* -X98075Y-49773D01* -X97865Y-49563D01* -X97590Y-49448D01* -X97292Y-49448D01* -X97017Y-49562D01* -X96807Y-49772D01* -X96693Y-50047D01* -X96692Y-50344D01* -X96806Y-50620D01* -X97016Y-50830D01* -X97291Y-50944D01* -X97589Y-50945D01* -X97864Y-50831D01* -X98074Y-50621D01* -X98188Y-50346D01* -X98189Y-50048D01* -X98189Y-52017D01* -X98075Y-51742D01* -X97865Y-51531D01* -X97590Y-51417D01* -X97292Y-51417D01* -X97017Y-51530D01* -X96807Y-51741D01* -X96693Y-52015D01* -X96692Y-52313D01* -X96806Y-52588D01* -X96889Y-52672D01* -X96889Y-53627D01* -X96807Y-53709D01* -X96693Y-53984D01* -X96692Y-54281D01* -X96806Y-54557D01* -X96889Y-54640D01* -X96889Y-55477D01* -X96880Y-55468D01* -X96606Y-55354D01* -X96308Y-55354D01* -X96033Y-55467D01* -X96023Y-55477D01* -X96023Y-54640D01* -X96106Y-54558D01* -X96220Y-54283D01* -X96220Y-53985D01* -X96106Y-53710D01* -X96023Y-53627D01* -X96023Y-52672D01* -X96106Y-52589D01* -X96220Y-52314D01* -X96220Y-52017D01* -X96220Y-50048D01* -X96106Y-49773D01* -X95896Y-49563D01* -X95621Y-49448D01* -X95324Y-49448D01* -X95049Y-49562D01* -X94838Y-49772D01* -X94724Y-50047D01* -X94724Y-50344D01* -X94837Y-50620D01* -X95048Y-50830D01* -X95322Y-50944D01* -X95620Y-50945D01* -X95895Y-50831D01* -X96106Y-50621D01* -X96220Y-50346D01* -X96220Y-50048D01* -X96220Y-52017D01* -X96106Y-51742D01* -X95896Y-51531D01* -X95621Y-51417D01* -X95324Y-51417D01* -X95049Y-51530D01* -X94838Y-51741D01* -X94724Y-52015D01* -X94724Y-52313D01* -X94837Y-52588D01* -X94921Y-52672D01* -X94921Y-53627D01* -X94838Y-53709D01* -X94724Y-53984D01* -X94724Y-54281D01* -X94837Y-54557D01* -X94921Y-54640D01* -X94921Y-55477D01* -X94912Y-55468D01* -X94637Y-55354D01* -X94340Y-55354D01* -X94065Y-55467D01* -X94055Y-55477D01* -X94055Y-54640D01* -X94137Y-54558D01* -X94251Y-54283D01* -X94252Y-53985D01* -X94138Y-53710D01* -X94055Y-53627D01* -X94055Y-52672D01* -X94137Y-52589D01* -X94251Y-52314D01* -X94252Y-52017D01* -X94252Y-50048D01* -X94138Y-49773D01* -X93928Y-49563D01* -X93653Y-49448D01* -X93355Y-49448D01* -X93080Y-49562D01* -X92870Y-49772D01* -X92756Y-50047D01* -X92755Y-50344D01* -X92869Y-50620D01* -X93079Y-50830D01* -X93354Y-50944D01* -X93652Y-50945D01* -X93927Y-50831D01* -X94137Y-50621D01* -X94251Y-50346D01* -X94252Y-50048D01* -X94252Y-52017D01* -X94138Y-51742D01* -X93928Y-51531D01* -X93653Y-51417D01* -X93355Y-51417D01* -X93080Y-51530D01* -X92870Y-51741D01* -X92756Y-52015D01* -X92755Y-52313D01* -X92869Y-52588D01* -X92952Y-52672D01* -X92952Y-53627D01* -X92870Y-53709D01* -X92756Y-53984D01* -X92755Y-54281D01* -X92869Y-54557D01* -X92952Y-54640D01* -X92952Y-55477D01* -X92943Y-55468D01* -X92669Y-55354D01* -X92371Y-55354D01* -X92096Y-55467D01* -X92086Y-55477D01* -X92086Y-54640D01* -X92169Y-54558D01* -X92283Y-54283D01* -X92283Y-53985D01* -X92169Y-53710D01* -X92086Y-53627D01* -X92086Y-52672D01* -X92169Y-52589D01* -X92283Y-52314D01* -X92283Y-52017D01* -X92283Y-50048D01* -X92169Y-49773D01* -X91959Y-49563D01* -X91684Y-49448D01* -X91387Y-49448D01* -X91112Y-49562D01* -X90901Y-49772D01* -X90787Y-50047D01* -X90787Y-50344D01* -X90900Y-50620D01* -X91111Y-50830D01* -X91385Y-50944D01* -X91683Y-50945D01* -X91958Y-50831D01* -X92169Y-50621D01* -X92283Y-50346D01* -X92283Y-50048D01* -X92283Y-52017D01* -X92169Y-51742D01* -X91959Y-51531D01* -X91684Y-51417D01* -X91387Y-51417D01* -X91112Y-51530D01* -X90901Y-51741D01* -X90787Y-52015D01* -X90787Y-52313D01* -X90900Y-52588D01* -X90984Y-52672D01* -X90984Y-53627D01* -X90901Y-53709D01* -X90787Y-53984D01* -X90787Y-54281D01* -X90900Y-54557D01* -X90984Y-54640D01* -X90984Y-55477D01* -X90975Y-55468D01* -X90700Y-55354D01* -X90403Y-55354D01* -X90128Y-55467D01* -X90118Y-55477D01* -X90118Y-54640D01* -X90200Y-54558D01* -X90314Y-54283D01* -X90315Y-53985D01* -X90201Y-53710D01* -X90118Y-53627D01* -X90118Y-52672D01* -X90200Y-52589D01* -X90314Y-52314D01* -X90315Y-52017D01* -X90315Y-50048D01* -X90201Y-49773D01* -X89991Y-49563D01* -X89716Y-49448D01* -X89418Y-49448D01* -X89143Y-49562D01* -X88933Y-49772D01* -X88819Y-50047D01* -X88818Y-50344D01* -X88932Y-50620D01* -X89142Y-50830D01* -X89417Y-50944D01* -X89715Y-50945D01* -X89990Y-50831D01* -X90200Y-50621D01* -X90314Y-50346D01* -X90315Y-50048D01* -X90315Y-52017D01* -X90201Y-51742D01* -X89991Y-51531D01* -X89716Y-51417D01* -X89418Y-51417D01* -X89143Y-51530D01* -X88933Y-51741D01* -X88819Y-52015D01* -X88818Y-52313D01* -X88932Y-52588D01* -X89015Y-52672D01* -X89015Y-53627D01* -X88933Y-53709D01* -X88819Y-53984D01* -X88818Y-54281D01* -X88932Y-54557D01* -X89015Y-54640D01* -X89015Y-55477D01* -X89006Y-55468D01* -X88732Y-55354D01* -X88434Y-55354D01* -X88159Y-55467D01* -X88149Y-55477D01* -X88149Y-54640D01* -X88232Y-54558D01* -X88346Y-54283D01* -X88346Y-53985D01* -X88232Y-53710D01* -X88149Y-53627D01* -X88149Y-52672D01* -X88232Y-52589D01* -X88346Y-52314D01* -X88346Y-52017D01* -X88346Y-50048D01* -X88232Y-49773D01* -X88022Y-49563D01* -X87747Y-49448D01* -X87450Y-49448D01* -X87175Y-49562D01* -X86964Y-49772D01* -X86850Y-50047D01* -X86850Y-50344D01* -X86963Y-50620D01* -X87174Y-50830D01* -X87448Y-50944D01* -X87746Y-50945D01* -X88021Y-50831D01* -X88232Y-50621D01* -X88346Y-50346D01* -X88346Y-50048D01* -X88346Y-52017D01* -X88232Y-51742D01* -X88022Y-51531D01* -X87747Y-51417D01* -X87450Y-51417D01* -X87175Y-51530D01* -X86964Y-51741D01* -X86850Y-52015D01* -X86850Y-52313D01* -X86963Y-52588D01* -X87047Y-52672D01* -X87047Y-53627D01* -X86964Y-53709D01* -X86850Y-53984D01* -X86850Y-54281D01* -X86963Y-54557D01* -X87047Y-54640D01* -X87047Y-55477D01* -X87038Y-55468D01* -X86763Y-55354D01* -X86466Y-55354D01* -X86191Y-55467D01* -X86181Y-55477D01* -X86181Y-54640D01* -X86263Y-54558D01* -X86377Y-54283D01* -X86378Y-53985D01* -X86264Y-53710D01* -X86181Y-53627D01* -X86181Y-52672D01* -X86263Y-52589D01* -X86377Y-52314D01* -X86378Y-52017D01* -X86378Y-50048D01* -X86264Y-49773D01* -X86054Y-49563D01* -X85779Y-49448D01* -X85481Y-49448D01* -X85206Y-49562D01* -X84996Y-49772D01* -X84882Y-50047D01* -X84881Y-50344D01* -X84995Y-50620D01* -X85205Y-50830D01* -X85480Y-50944D01* -X85778Y-50945D01* -X86053Y-50831D01* -X86263Y-50621D01* -X86377Y-50346D01* -X86378Y-50048D01* -X86378Y-52017D01* -X86264Y-51742D01* -X86054Y-51531D01* -X85779Y-51417D01* -X85481Y-51417D01* -X85206Y-51530D01* -X84996Y-51741D01* -X84882Y-52015D01* -X84881Y-52313D01* -X84995Y-52588D01* -X85078Y-52672D01* -X85078Y-53627D01* -X84996Y-53709D01* -X84882Y-53984D01* -X84881Y-54281D01* -X84995Y-54557D01* -X85078Y-54640D01* -X85078Y-55477D01* -X85069Y-55468D01* -X84795Y-55354D01* -X84497Y-55354D01* -X84222Y-55467D01* -X84212Y-55477D01* -X84212Y-54640D01* -X84295Y-54558D01* -X84409Y-54283D01* -X84409Y-53985D01* -X84295Y-53710D01* -X84212Y-53627D01* -X84212Y-52672D01* -X84295Y-52589D01* -X84409Y-52314D01* -X84409Y-52017D01* -X84409Y-50048D01* -X84295Y-49773D01* -X84085Y-49563D01* -X83810Y-49448D01* -X83513Y-49448D01* -X83238Y-49562D01* -X83027Y-49772D01* -X82913Y-50047D01* -X82913Y-50344D01* -X83026Y-50620D01* -X83237Y-50830D01* -X83511Y-50944D01* -X83809Y-50945D01* -X84084Y-50831D01* -X84295Y-50621D01* -X84409Y-50346D01* -X84409Y-50048D01* -X84409Y-52017D01* -X84295Y-51742D01* -X84085Y-51531D01* -X83810Y-51417D01* -X83513Y-51417D01* -X83238Y-51530D01* -X83027Y-51741D01* -X82913Y-52015D01* -X82913Y-52313D01* -X83026Y-52588D01* -X83110Y-52672D01* -X83110Y-53627D01* -X83027Y-53709D01* -X82913Y-53984D01* -X82913Y-54281D01* -X83026Y-54557D01* -X83110Y-54640D01* -X83110Y-55477D01* -X83101Y-55468D01* -X82826Y-55354D01* -X82529Y-55354D01* -X82253Y-55467D01* -X82244Y-55477D01* -X82244Y-54640D01* -X82326Y-54558D01* -X82440Y-54283D01* -X82441Y-53985D01* -X82327Y-53710D01* -X82244Y-53627D01* -X82244Y-52672D01* -X82326Y-52589D01* -X82440Y-52314D01* -X82441Y-52017D01* -X82441Y-50048D01* -X82327Y-49773D01* -X82117Y-49563D01* -X81842Y-49448D01* -X81544Y-49448D01* -X81269Y-49562D01* -X81059Y-49772D01* -X80945Y-50047D01* -X80944Y-50344D01* -X81058Y-50620D01* -X81268Y-50830D01* -X81543Y-50944D01* -X81841Y-50945D01* -X82116Y-50831D01* -X82326Y-50621D01* -X82440Y-50346D01* -X82441Y-50048D01* -X82441Y-52017D01* -X82327Y-51742D01* -X82117Y-51531D01* -X81842Y-51417D01* -X81544Y-51417D01* -X81269Y-51530D01* -X81059Y-51741D01* -X80945Y-52015D01* -X80944Y-52313D01* -X81058Y-52588D01* -X81141Y-52672D01* -X81141Y-53627D01* -X81059Y-53709D01* -X80945Y-53984D01* -X80944Y-54281D01* -X81058Y-54557D01* -X81141Y-54640D01* -X81141Y-55477D01* -X81132Y-55468D01* -X80858Y-55354D01* -X80560Y-55354D01* -X80285Y-55467D01* -X80275Y-55477D01* -X80275Y-54640D01* -X80358Y-54558D01* -X80472Y-54283D01* -X80472Y-53985D01* -X80358Y-53710D01* -X80275Y-53627D01* -X80275Y-52672D01* -X80358Y-52589D01* -X80472Y-52314D01* -X80472Y-52017D01* -X80472Y-50048D01* -X80358Y-49773D01* -X80148Y-49563D01* -X79873Y-49448D01* -X79576Y-49448D01* -X79301Y-49562D01* -X79090Y-49772D01* -X78976Y-50047D01* -X78976Y-50344D01* -X79089Y-50620D01* -X79300Y-50830D01* -X79574Y-50944D01* -X79872Y-50945D01* -X80147Y-50831D01* -X80358Y-50621D01* -X80472Y-50346D01* -X80472Y-50048D01* -X80472Y-52017D01* -X80358Y-51742D01* -X80148Y-51531D01* -X79873Y-51417D01* -X79576Y-51417D01* -X79301Y-51530D01* -X79090Y-51741D01* -X78976Y-52015D01* -X78976Y-52313D01* -X79089Y-52588D01* -X79173Y-52672D01* -X79173Y-53627D01* -X79090Y-53709D01* -X78976Y-53984D01* -X78976Y-54281D01* -X79089Y-54557D01* -X79173Y-54640D01* -X79173Y-55477D01* -X79164Y-55468D01* -X78889Y-55354D01* -X78592Y-55354D01* -X78316Y-55467D01* -X78307Y-55477D01* -X78307Y-54640D01* -X78389Y-54558D01* -X78503Y-54283D01* -X78504Y-53985D01* -X78390Y-53710D01* -X78307Y-53627D01* -X78307Y-52672D01* -X78389Y-52589D01* -X78503Y-52314D01* -X78504Y-52017D01* -X78504Y-50048D01* -X78390Y-49773D01* -X78180Y-49563D01* -X77905Y-49448D01* -X77607Y-49448D01* -X77332Y-49562D01* -X77122Y-49772D01* -X77008Y-50047D01* -X77007Y-50344D01* -X77121Y-50620D01* -X77331Y-50830D01* -X77606Y-50944D01* -X77904Y-50945D01* -X78179Y-50831D01* -X78389Y-50621D01* -X78503Y-50346D01* -X78504Y-50048D01* -X78504Y-52017D01* -X78390Y-51742D01* -X78180Y-51531D01* -X77905Y-51417D01* -X77607Y-51417D01* -X77332Y-51530D01* -X77122Y-51741D01* -X77008Y-52015D01* -X77007Y-52313D01* -X77121Y-52588D01* -X77204Y-52672D01* -X77204Y-53627D01* -X77122Y-53709D01* -X77008Y-53984D01* -X77007Y-54281D01* -X77121Y-54557D01* -X77204Y-54640D01* -X77204Y-55477D01* -X77195Y-55468D01* -X76921Y-55354D01* -X76623Y-55354D01* -X76348Y-55467D01* -X76338Y-55477D01* -X76338Y-54640D01* -X76421Y-54558D01* -X76535Y-54283D01* -X76535Y-53985D01* -X76421Y-53710D01* -X76338Y-53627D01* -X76338Y-52672D01* -X76421Y-52589D01* -X76535Y-52314D01* -X76535Y-52017D01* -X76535Y-50048D01* -X76421Y-49773D01* -X76211Y-49563D01* -X75936Y-49448D01* -X75639Y-49448D01* -X75364Y-49562D01* -X75153Y-49772D01* -X75039Y-50047D01* -X75039Y-50344D01* -X75152Y-50620D01* -X75363Y-50830D01* -X75637Y-50944D01* -X75935Y-50945D01* -X76210Y-50831D01* -X76421Y-50621D01* -X76535Y-50346D01* -X76535Y-50048D01* -X76535Y-52017D01* -X76421Y-51742D01* -X76211Y-51531D01* -X75936Y-51417D01* -X75639Y-51417D01* -X75364Y-51530D01* -X75153Y-51741D01* -X75039Y-52015D01* -X75039Y-52313D01* -X75152Y-52588D01* -X75236Y-52672D01* -X75236Y-53627D01* -X75153Y-53709D01* -X75039Y-53984D01* -X75039Y-54281D01* -X75152Y-54557D01* -X75236Y-54640D01* -X75236Y-55477D01* -X75227Y-55468D01* -X74952Y-55354D01* -X74655Y-55354D01* -X74379Y-55467D01* -X74370Y-55477D01* -X74370Y-54640D01* -X74452Y-54558D01* -X74566Y-54283D01* -X74567Y-53985D01* -X74453Y-53710D01* -X74370Y-53627D01* -X74370Y-52672D01* -X74452Y-52589D01* -X74566Y-52314D01* -X74567Y-52017D01* -X74567Y-50048D01* -X74453Y-49773D01* -X74243Y-49563D01* -X73968Y-49448D01* -X73670Y-49448D01* -X73395Y-49562D01* -X73185Y-49772D01* -X73070Y-50047D01* -X73070Y-50344D01* -X73184Y-50620D01* -X73394Y-50830D01* -X73669Y-50944D01* -X73967Y-50945D01* -X74242Y-50831D01* -X74452Y-50621D01* -X74566Y-50346D01* -X74567Y-50048D01* -X74567Y-52017D01* -X74453Y-51742D01* -X74243Y-51531D01* -X73968Y-51417D01* -X73670Y-51417D01* -X73395Y-51530D01* -X73185Y-51741D01* -X73070Y-52015D01* -X73070Y-52313D01* -X73184Y-52588D01* -X73267Y-52672D01* -X73267Y-53627D01* -X73185Y-53709D01* -X73070Y-53984D01* -X73070Y-54281D01* -X73184Y-54557D01* -X73267Y-54640D01* -X73267Y-55477D01* -X73258Y-55468D01* -X72984Y-55354D01* -X72686Y-55354D01* -X72411Y-55467D01* -X72401Y-55477D01* -X72401Y-54640D01* -X72484Y-54558D01* -X72598Y-54283D01* -X72598Y-53985D01* -X72484Y-53710D01* -X72401Y-53627D01* -X72401Y-52672D01* -X72484Y-52589D01* -X72598Y-52314D01* -X72598Y-52017D01* -X72598Y-50048D01* -X72484Y-49773D01* -X72274Y-49563D01* -X71999Y-49448D01* -X71702Y-49448D01* -X71427Y-49562D01* -X71216Y-49772D01* -X71102Y-50047D01* -X71102Y-50344D01* -X71215Y-50620D01* -X71426Y-50830D01* -X71700Y-50944D01* -X71998Y-50945D01* -X72273Y-50831D01* -X72484Y-50621D01* -X72598Y-50346D01* -X72598Y-50048D01* -X72598Y-52017D01* -X72484Y-51742D01* -X72274Y-51531D01* -X71999Y-51417D01* -X71702Y-51417D01* -X71427Y-51530D01* -X71216Y-51741D01* -X71102Y-52015D01* -X71102Y-52313D01* -X71215Y-52588D01* -X71299Y-52672D01* -X71299Y-53627D01* -X71216Y-53709D01* -X71102Y-53984D01* -X71102Y-54281D01* -X71215Y-54557D01* -X71299Y-54640D01* -X71299Y-55477D01* -X71290Y-55468D01* -X71015Y-55354D01* -X70718Y-55354D01* -X70442Y-55467D01* -X70433Y-55477D01* -X70433Y-54640D01* -X70515Y-54558D01* -X70629Y-54283D01* -X70630Y-53985D01* -X70516Y-53710D01* -X70433Y-53627D01* -X70433Y-52672D01* -X70515Y-52589D01* -X70629Y-52314D01* -X70630Y-52017D01* -X70630Y-50048D01* -X70516Y-49773D01* -X70306Y-49563D01* -X70031Y-49448D01* -X69733Y-49448D01* -X69458Y-49562D01* -X69248Y-49772D01* -X69133Y-50047D01* -X69133Y-50344D01* -X69247Y-50620D01* -X69457Y-50830D01* -X69732Y-50944D01* -X70030Y-50945D01* -X70305Y-50831D01* -X70515Y-50621D01* -X70629Y-50346D01* -X70630Y-50048D01* -X70630Y-52017D01* -X70516Y-51742D01* -X70306Y-51531D01* -X70031Y-51417D01* -X69733Y-51417D01* -X69458Y-51530D01* -X69248Y-51741D01* -X69133Y-52015D01* -X69133Y-52313D01* -X69247Y-52588D01* -X69330Y-52672D01* -X69330Y-53627D01* -X69248Y-53709D01* -X69133Y-53984D01* -X69133Y-54281D01* -X69247Y-54557D01* -X69330Y-54640D01* -X69330Y-55477D01* -X69321Y-55468D01* -X69047Y-55354D01* -X68749Y-55354D01* -X68474Y-55467D01* -X68263Y-55678D01* -X68149Y-55952D01* -X68149Y-56250D01* -X68263Y-56525D01* -X68473Y-56736D01* -X68748Y-56850D01* -X69045Y-56850D01* -X69320Y-56736D01* -X69330Y-56727D01* -X69330Y-57445D01* -X69321Y-57437D01* -X69047Y-57322D01* -X68749Y-57322D01* -X68474Y-57436D01* -X68263Y-57646D01* -X68149Y-57921D01* -X68149Y-58219D01* -X68263Y-58494D01* -X68473Y-58704D01* -X68748Y-58818D01* -X69045Y-58819D01* -X69320Y-58705D01* -X69369Y-58657D01* -X69372Y-58675D01* -X69492Y-58854D01* -X70039Y-59401D01* -X70011Y-59389D01* -X69753Y-59389D01* -X69514Y-59488D01* -X69331Y-59670D01* -X69232Y-59909D01* -X69232Y-60168D01* -X69330Y-60406D01* -X69513Y-60589D01* -X69752Y-60688D01* -X69830Y-60688D01* -X69492Y-61027D01* -X69372Y-61206D01* -X69330Y-61417D01* -X69330Y-62506D01* -X69266Y-62441D01* -X69027Y-62342D01* -X68768Y-62342D01* -X68530Y-62441D01* -X68347Y-62623D01* -X68248Y-62862D01* -X68247Y-63120D01* -X68346Y-63359D01* -X68529Y-63542D01* -X68767Y-63641D01* -X69026Y-63641D01* -X69265Y-63543D01* -X69389Y-63418D01* -X69513Y-63542D01* -X69752Y-63641D01* -X70010Y-63641D01* -X70249Y-63543D01* -X70374Y-63418D01* -X70497Y-63542D01* -X70736Y-63641D01* -X70994Y-63641D01* -X71233Y-63543D01* -X71358Y-63418D01* -X71481Y-63542D01* -X71720Y-63641D01* -X71979Y-63641D01* -X72217Y-63543D01* -X72342Y-63418D01* -X72466Y-63542D01* -X72704Y-63641D01* -X72963Y-63641D01* -X73202Y-63543D01* -X73326Y-63418D01* -X73450Y-63542D01* -X73689Y-63641D01* -X73947Y-63641D01* -X74186Y-63543D01* -X74311Y-63418D01* -X74434Y-63542D01* -X74673Y-63641D01* -X74931Y-63641D01* -X75170Y-63543D01* -X75295Y-63418D01* -X75418Y-63542D01* -X75657Y-63641D01* -X75916Y-63641D01* -X76154Y-63543D01* -X76279Y-63418D01* -X76403Y-63542D01* -X76641Y-63641D01* -X76900Y-63641D01* -X77139Y-63543D01* -X77263Y-63418D01* -X77387Y-63542D01* -X77626Y-63641D01* -X77884Y-63641D01* -X78123Y-63543D01* -X78248Y-63418D01* -X78371Y-63542D01* -X78610Y-63641D01* -X78868Y-63641D01* -X79107Y-63543D01* -X79232Y-63418D01* -X79355Y-63542D01* -X79594Y-63641D01* -X79853Y-63641D01* -X80091Y-63543D01* -X80216Y-63418D01* -X80340Y-63542D01* -X80578Y-63641D01* -X80837Y-63641D01* -X81076Y-63543D01* -X81200Y-63418D01* -X81324Y-63542D01* -X81563Y-63641D01* -X81821Y-63641D01* -X82060Y-63543D01* -X82185Y-63418D01* -X82308Y-63542D01* -X82547Y-63641D01* -X82805Y-63641D01* -X83044Y-63543D01* -X83169Y-63418D01* -X83292Y-63542D01* -X83531Y-63641D01* -X83790Y-63641D01* -X84028Y-63543D01* -X84153Y-63418D01* -X84277Y-63542D01* -X84515Y-63641D01* -X84774Y-63641D01* -X85013Y-63543D01* -X85137Y-63418D01* -X85261Y-63542D01* -X85500Y-63641D01* -X85758Y-63641D01* -X85997Y-63543D01* -X86122Y-63418D01* -X86245Y-63542D01* -X86484Y-63641D01* -X86742Y-63641D01* -X86981Y-63543D01* -X87106Y-63418D01* -X87229Y-63542D01* -X87468Y-63641D01* -X87727Y-63641D01* -X87965Y-63543D01* -X88090Y-63418D01* -X88214Y-63542D01* -X88452Y-63641D01* -X88711Y-63641D01* -X88950Y-63543D01* -X89074Y-63418D01* -X89198Y-63542D01* -X89437Y-63641D01* -X89695Y-63641D01* -X89934Y-63543D01* -X90059Y-63418D01* -X90182Y-63542D01* -X90421Y-63641D01* -X90679Y-63641D01* -X90918Y-63543D01* -X91043Y-63418D01* -X91166Y-63542D01* -X91405Y-63641D01* -X91664Y-63641D01* -X91902Y-63543D01* -X92027Y-63418D01* -X92151Y-63542D01* -X92389Y-63641D01* -X92648Y-63641D01* -X92887Y-63543D01* -X93011Y-63418D01* -X93135Y-63542D01* -X93374Y-63641D01* -X93632Y-63641D01* -X93871Y-63543D01* -X93996Y-63418D01* -X94119Y-63542D01* -X94358Y-63641D01* -X94616Y-63641D01* -X94855Y-63543D01* -X94980Y-63418D01* -X95103Y-63542D01* -X95342Y-63641D01* -X95601Y-63641D01* -X95839Y-63543D01* -X95964Y-63418D01* -X96088Y-63542D01* -X96326Y-63641D01* -X96585Y-63641D01* -X96824Y-63543D01* -X96948Y-63418D01* -X97072Y-63542D01* -X97311Y-63641D01* -X97569Y-63641D01* -X97808Y-63543D01* -X97933Y-63418D01* -X98056Y-63542D01* -X98295Y-63641D01* -X98553Y-63641D01* -X98792Y-63543D01* -X98917Y-63418D01* -X99040Y-63542D01* -X99279Y-63641D01* -X99538Y-63641D01* -X99776Y-63543D01* -X99901Y-63418D01* -X100025Y-63542D01* -X100263Y-63641D01* -X100522Y-63641D01* -X100761Y-63543D01* -X100885Y-63418D01* -X101009Y-63542D01* -X101248Y-63641D01* -X101506Y-63641D01* -X101745Y-63543D01* -X101870Y-63418D01* -X101993Y-63542D01* -X102232Y-63641D01* -X102490Y-63641D01* -X102729Y-63543D01* -X102854Y-63418D01* -X102978Y-63542D01* -X103216Y-63641D01* -X103475Y-63641D01* -X103713Y-63543D01* -X103838Y-63418D01* -X103962Y-63542D01* -X104200Y-63641D01* -X104459Y-63641D01* -X104698Y-63543D01* -X104881Y-63360D01* -X104980Y-63121D01* -X104980Y-62863D01* -X104881Y-62624D01* -X104699Y-62441D01* -X104460Y-62342D01* -X104202Y-62342D01* -X103963Y-62441D01* -X103897Y-62506D01* -X103897Y-61645D01* -X104720Y-60822D01* -X104720Y-60822D01* -X104839Y-60643D01* -X104881Y-60433D01* -X104881Y-60433D01* -X104881Y-59448D01* -X104881Y-59448D01* -X104839Y-59237D01* -X104720Y-59059D01* -X104720Y-59059D01* -X104479Y-58818D01* -X104753Y-58705D01* -X104964Y-58495D01* -X105078Y-58220D01* -X105078Y-57922D01* -X105078Y-66653D01* -X66200Y-66653D01* -X66200Y-61998D01* -X66042Y-61614D01* -X65749Y-61320D01* -X65365Y-61161D01* -X64950Y-61161D01* -X64567Y-61319D01* -X64273Y-61612D01* -X64114Y-61996D01* -X64113Y-62411D01* -X64272Y-62794D01* -X64565Y-63088D01* -X64949Y-63247D01* -X65364Y-63248D01* -X65747Y-63089D01* -X66041Y-62796D01* -X66200Y-62413D01* -X66200Y-61998D01* -X66200Y-66653D01* -X62466Y-66653D01* -X62466Y-53418D01* -X62466Y-52881D01* -X62466Y-52817D01* -X62442Y-52759D01* -X62397Y-52714D01* -X62339Y-52690D01* -X62165Y-52690D01* -X62125Y-52730D01* -X62125Y-53031D01* -X62427Y-53031D01* -X62466Y-52991D01* -X62466Y-52881D01* -X62466Y-53418D01* -X62466Y-53307D01* -X62427Y-53267D01* -X62125Y-53267D01* -X62125Y-53568D01* -X62165Y-53608D01* -X62339Y-53608D01* -X62397Y-53584D01* -X62442Y-53539D01* -X62466Y-53481D01* -X62466Y-53418D01* -X62466Y-66653D01* -X61889Y-66653D01* -X61889Y-53568D01* -X61889Y-53267D01* -X61889Y-53031D01* -X61889Y-52730D01* -X61850Y-52690D01* -X61676Y-52690D01* -X61617Y-52714D01* -X61573Y-52759D01* -X61548Y-52817D01* -X61548Y-52881D01* -X61548Y-52991D01* -X61588Y-53031D01* -X61889Y-53031D01* -X61889Y-53267D01* -X61588Y-53267D01* -X61548Y-53307D01* -X61548Y-53418D01* -X61548Y-53481D01* -X61573Y-53539D01* -X61617Y-53584D01* -X61676Y-53608D01* -X61850Y-53608D01* -X61889Y-53568D01* -X61889Y-66653D01* -X60111Y-66653D01* -X60111Y-64751D01* -X60111Y-49003D01* -X59950Y-48615D01* -X59654Y-48317D01* -X59266Y-48156D01* -X58846Y-48156D01* -X58457Y-48316D01* -X58160Y-48613D01* -X57999Y-49001D01* -X57999Y-49421D01* -X58159Y-49809D01* -X58456Y-50107D01* -X58844Y-50268D01* -X59264Y-50268D01* -X59652Y-50108D01* -X59949Y-49811D01* -X60110Y-49423D01* -X60111Y-49003D01* -X60111Y-64751D01* -X59950Y-64363D01* -X59654Y-64065D01* -X59266Y-63904D01* -X58846Y-63904D01* -X58457Y-64064D01* -X58160Y-64361D01* -X57999Y-64749D01* -X57999Y-65169D01* -X58159Y-65557D01* -X58456Y-65855D01* -X58844Y-66016D01* -X59264Y-66016D01* -X59652Y-65856D01* -X59949Y-65559D01* -X60110Y-65171D01* -X60111Y-64751D01* -X60111Y-66653D01* -X57362Y-66653D01* -X57362Y-47519D01* -X69638Y-47519D01* -X69458Y-47593D01* -X69248Y-47804D01* -X69133Y-48078D01* -X69133Y-48376D01* -X69247Y-48651D01* -X69457Y-48862D01* -X69732Y-48976D01* -X70030Y-48976D01* -X70305Y-48862D01* -X70515Y-48652D01* -X70629Y-48377D01* -X70630Y-48080D01* -X70516Y-47805D01* -X70306Y-47594D01* -X70125Y-47519D01* -X71606Y-47519D01* -X71427Y-47593D01* -X71216Y-47804D01* -X71102Y-48078D01* -X71102Y-48376D01* -X71215Y-48651D01* -X71426Y-48862D01* -X71700Y-48976D01* -X71998Y-48976D01* -X72273Y-48862D01* -X72484Y-48652D01* -X72598Y-48377D01* -X72598Y-48080D01* -X72484Y-47805D01* -X72274Y-47594D01* -X72094Y-47519D01* -X73575Y-47519D01* -X73395Y-47593D01* -X73185Y-47804D01* -X73070Y-48078D01* -X73070Y-48376D01* -X73184Y-48651D01* -X73394Y-48862D01* -X73669Y-48976D01* -X73967Y-48976D01* -X74242Y-48862D01* -X74452Y-48652D01* -X74566Y-48377D01* -X74567Y-48080D01* -X74453Y-47805D01* -X74243Y-47594D01* -X74062Y-47519D01* -X75543Y-47519D01* -X75364Y-47593D01* -X75153Y-47804D01* -X75039Y-48078D01* -X75039Y-48376D01* -X75152Y-48651D01* -X75363Y-48862D01* -X75637Y-48976D01* -X75935Y-48976D01* -X76210Y-48862D01* -X76421Y-48652D01* -X76535Y-48377D01* -X76535Y-48080D01* -X76421Y-47805D01* -X76211Y-47594D01* -X76031Y-47519D01* -X77512Y-47519D01* -X77332Y-47593D01* -X77122Y-47804D01* -X77008Y-48078D01* -X77007Y-48376D01* -X77121Y-48651D01* -X77331Y-48862D01* -X77606Y-48976D01* -X77904Y-48976D01* -X78179Y-48862D01* -X78389Y-48652D01* -X78503Y-48377D01* -X78504Y-48080D01* -X78390Y-47805D01* -X78180Y-47594D01* -X77999Y-47519D01* -X79480Y-47519D01* -X79301Y-47593D01* -X79090Y-47804D01* -X78976Y-48078D01* -X78976Y-48376D01* -X79089Y-48651D01* -X79300Y-48862D01* -X79574Y-48976D01* -X79872Y-48976D01* -X80147Y-48862D01* -X80358Y-48652D01* -X80472Y-48377D01* -X80472Y-48080D01* -X80358Y-47805D01* -X80148Y-47594D01* -X79968Y-47519D01* -X81449Y-47519D01* -X81269Y-47593D01* -X81059Y-47804D01* -X80945Y-48078D01* -X80944Y-48376D01* -X81058Y-48651D01* -X81268Y-48862D01* -X81543Y-48976D01* -X81841Y-48976D01* -X82116Y-48862D01* -X82326Y-48652D01* -X82440Y-48377D01* -X82441Y-48080D01* -X82327Y-47805D01* -X82117Y-47594D01* -X81936Y-47519D01* -X83417Y-47519D01* -X83238Y-47593D01* -X83027Y-47804D01* -X82913Y-48078D01* -X82913Y-48376D01* -X83026Y-48651D01* -X83237Y-48862D01* -X83511Y-48976D01* -X83809Y-48976D01* -X84084Y-48862D01* -X84295Y-48652D01* -X84409Y-48377D01* -X84409Y-48080D01* -X84295Y-47805D01* -X84085Y-47594D01* -X83905Y-47519D01* -X85386Y-47519D01* -X85206Y-47593D01* -X84996Y-47804D01* -X84882Y-48078D01* -X84881Y-48376D01* -X84995Y-48651D01* -X85205Y-48862D01* -X85480Y-48976D01* -X85778Y-48976D01* -X86053Y-48862D01* -X86263Y-48652D01* -X86377Y-48377D01* -X86378Y-48080D01* -X86264Y-47805D01* -X86054Y-47594D01* -X85873Y-47519D01* -X87354Y-47519D01* -X87175Y-47593D01* -X86964Y-47804D01* -X86850Y-48078D01* -X86850Y-48376D01* -X86963Y-48651D01* -X87174Y-48862D01* -X87448Y-48976D01* -X87746Y-48976D01* -X88021Y-48862D01* -X88232Y-48652D01* -X88346Y-48377D01* -X88346Y-48080D01* -X88232Y-47805D01* -X88022Y-47594D01* -X87842Y-47519D01* -X89323Y-47519D01* -X89143Y-47593D01* -X88933Y-47804D01* -X88819Y-48078D01* -X88818Y-48376D01* -X88932Y-48651D01* -X89142Y-48862D01* -X89417Y-48976D01* -X89715Y-48976D01* -X89990Y-48862D01* -X90200Y-48652D01* -X90314Y-48377D01* -X90315Y-48080D01* -X90201Y-47805D01* -X89991Y-47594D01* -X89810Y-47519D01* -X91291Y-47519D01* -X91112Y-47593D01* -X90901Y-47804D01* -X90787Y-48078D01* -X90787Y-48376D01* -X90900Y-48651D01* -X91111Y-48862D01* -X91385Y-48976D01* -X91683Y-48976D01* -X91958Y-48862D01* -X92169Y-48652D01* -X92283Y-48377D01* -X92283Y-48080D01* -X92169Y-47805D01* -X91959Y-47594D01* -X91779Y-47519D01* -X93260Y-47519D01* -X93080Y-47593D01* -X92870Y-47804D01* -X92756Y-48078D01* -X92755Y-48376D01* -X92869Y-48651D01* -X93079Y-48862D01* -X93354Y-48976D01* -X93652Y-48976D01* -X93927Y-48862D01* -X94137Y-48652D01* -X94251Y-48377D01* -X94252Y-48080D01* -X94138Y-47805D01* -X93928Y-47594D01* -X93747Y-47519D01* -X95228Y-47519D01* -X95049Y-47593D01* -X94838Y-47804D01* -X94724Y-48078D01* -X94724Y-48376D01* -X94837Y-48651D01* -X95048Y-48862D01* -X95322Y-48976D01* -X95620Y-48976D01* -X95895Y-48862D01* -X96106Y-48652D01* -X96220Y-48377D01* -X96220Y-48080D01* -X96106Y-47805D01* -X95896Y-47594D01* -X95716Y-47519D01* -X97197Y-47519D01* -X97017Y-47593D01* -X96807Y-47804D01* -X96693Y-48078D01* -X96692Y-48376D01* -X96806Y-48651D01* -X97016Y-48862D01* -X97291Y-48976D01* -X97589Y-48976D01* -X97864Y-48862D01* -X98074Y-48652D01* -X98188Y-48377D01* -X98189Y-48080D01* -X98075Y-47805D01* -X97865Y-47594D01* -X97684Y-47519D01* -X99165Y-47519D01* -X98986Y-47593D01* -X98775Y-47804D01* -X98661Y-48078D01* -X98661Y-48376D01* -X98774Y-48651D01* -X98985Y-48862D01* -X99260Y-48976D01* -X99557Y-48976D01* -X99832Y-48862D01* -X100043Y-48652D01* -X100157Y-48377D01* -X100157Y-48080D01* -X100043Y-47805D01* -X99833Y-47594D01* -X99653Y-47519D01* -X101134Y-47519D01* -X100954Y-47593D01* -X100744Y-47804D01* -X100630Y-48078D01* -X100629Y-48376D01* -X100743Y-48651D01* -X100953Y-48862D01* -X101228Y-48976D01* -X101526Y-48976D01* -X101801Y-48862D01* -X102011Y-48652D01* -X102125Y-48377D01* -X102126Y-48080D01* -X102012Y-47805D01* -X101802Y-47594D01* -X101621Y-47519D01* -X103102Y-47519D01* -X102923Y-47593D01* -X102712Y-47804D01* -X102598Y-48078D01* -X102598Y-48376D01* -X102711Y-48651D01* -X102922Y-48862D01* -X103197Y-48976D01* -X103494Y-48976D01* -X103769Y-48862D01* -X103980Y-48652D01* -X104094Y-48377D01* -X104094Y-48080D01* -X103980Y-47805D01* -X103770Y-47594D01* -X103590Y-47519D01* -X115866Y-47519D01* -X115866Y-66653D01* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Mask.gbs b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Mask.gbs deleted file mode 100644 index 07a3c3d020..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Mask.gbs +++ /dev/null @@ -1,195 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -%ADD11C,0.0984252*% -%ADD12C,0.16*% -%ADD13R,0.06X0.06*% -%ADD14C,0.0787402*% -%ADD15C,0.15748*% -G04 APERTURE END LIST* -G54D10* -G54D11* -X104330Y-56102D03* -X102362Y-56102D03* -X100393Y-56102D03* -X98425Y-56102D03* -X96456Y-56102D03* -X94488Y-56102D03* -X92519Y-56102D03* -X90551Y-56102D03* -X88582Y-56102D03* -X86614Y-56102D03* -X84645Y-56102D03* -X82677Y-56102D03* -X80708Y-56102D03* -X78740Y-56102D03* -X76771Y-56102D03* -X74803Y-56102D03* -X72834Y-56102D03* -X70866Y-56102D03* -X68897Y-56102D03* -X104330Y-58070D03* -X102362Y-58070D03* -X100393Y-58070D03* -X98425Y-58070D03* -X96456Y-58070D03* -X94488Y-58070D03* -X92519Y-58070D03* -X90551Y-58070D03* -X88582Y-58070D03* -X86614Y-58070D03* -X84645Y-58070D03* -X82677Y-58070D03* -X80708Y-58070D03* -X78740Y-58070D03* -X76771Y-58070D03* -X74803Y-58070D03* -X72834Y-58070D03* -X70866Y-58070D03* -X68897Y-58070D03* -X103346Y-52165D03* -X101377Y-52165D03* -X99409Y-52165D03* -X97440Y-52165D03* -X95472Y-52165D03* -X93503Y-52165D03* -X91535Y-52165D03* -X89566Y-52165D03* -X87598Y-52165D03* -X85629Y-52165D03* -X83661Y-52165D03* -X81692Y-52165D03* -X79724Y-52165D03* -X77755Y-52165D03* -X75787Y-52165D03* -X73818Y-52165D03* -X71850Y-52165D03* -X69881Y-52165D03* -X103346Y-54133D03* -X101377Y-54133D03* -X99409Y-54133D03* -X97440Y-54133D03* -X95472Y-54133D03* -X93503Y-54133D03* -X91535Y-54133D03* -X89566Y-54133D03* -X87598Y-54133D03* -X85629Y-54133D03* -X83661Y-54133D03* -X81692Y-54133D03* -X79724Y-54133D03* -X77755Y-54133D03* -X75787Y-54133D03* -X73818Y-54133D03* -X71850Y-54133D03* -X69881Y-54133D03* -X103346Y-48228D03* -X101377Y-48228D03* -X99409Y-48228D03* -X97440Y-48228D03* -X95472Y-48228D03* -X93503Y-48228D03* -X91535Y-48228D03* -X89566Y-48228D03* -X87598Y-48228D03* -X85629Y-48228D03* -X83661Y-48228D03* -X81692Y-48228D03* -X79724Y-48228D03* -X77755Y-48228D03* -X75787Y-48228D03* -X73818Y-48228D03* -X71850Y-48228D03* -X69881Y-48228D03* -X103346Y-50196D03* -X101377Y-50196D03* -X99409Y-50196D03* -X97440Y-50196D03* -X95472Y-50196D03* -X93503Y-50196D03* -X91535Y-50196D03* -X89566Y-50196D03* -X87598Y-50196D03* -X85629Y-50196D03* -X83661Y-50196D03* -X81692Y-50196D03* -X79724Y-50196D03* -X77755Y-50196D03* -X75787Y-50196D03* -X73818Y-50196D03* -X71850Y-50196D03* -X69881Y-50196D03* -G54D12* -X114173Y-49212D03* -X114173Y-64960D03* -X59055Y-64960D03* -X59055Y-49212D03* -G54D13* -X62007Y-53149D03* -X111220Y-53149D03* -G54D14* -X104330Y-62992D03* -X102362Y-62992D03* -X100393Y-62992D03* -X98425Y-62992D03* -X96456Y-62992D03* -X94488Y-62992D03* -X92519Y-62992D03* -X90551Y-62992D03* -X88582Y-62992D03* -X86614Y-62992D03* -X84645Y-62992D03* -X82677Y-62992D03* -X80708Y-62992D03* -X78740Y-62992D03* -X76771Y-62992D03* -X74803Y-62992D03* -X72834Y-62992D03* -X70866Y-62992D03* -X68897Y-62992D03* -X103346Y-62992D03* -X101377Y-62992D03* -X99409Y-62992D03* -X97440Y-62992D03* -X95472Y-62992D03* -X93503Y-62992D03* -X91535Y-62992D03* -X89566Y-62992D03* -X87598Y-62992D03* -X85629Y-62992D03* -X83661Y-62992D03* -X81692Y-62992D03* -X79724Y-62992D03* -X77755Y-62992D03* -X75787Y-62992D03* -X73818Y-62992D03* -X71850Y-62992D03* -X69881Y-62992D03* -X103346Y-60039D03* -X101377Y-60039D03* -X99409Y-60039D03* -X97440Y-60039D03* -X95472Y-60039D03* -X93503Y-60039D03* -X91535Y-60039D03* -X89566Y-60039D03* -X87598Y-60039D03* -X85629Y-60039D03* -X83661Y-60039D03* -X81692Y-60039D03* -X79724Y-60039D03* -X77755Y-60039D03* -X75787Y-60039D03* -X73818Y-60039D03* -X71850Y-60039D03* -X69881Y-60039D03* -G54D15* -X65157Y-62204D03* -X108070Y-62204D03* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Paste.gbp b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Paste.gbp deleted file mode 100644 index c9e7e996f2..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_Paste.gbp +++ /dev/null @@ -1,12 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -G04 APERTURE END LIST* -G54D10* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_SilkS.gbo b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_SilkS.gbo deleted file mode 100644 index 946af78a8e..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-B_SilkS.gbo +++ /dev/null @@ -1,494 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -%ADD11C,0.00787402*% -%ADD12C,0.011811*% -G04 APERTURE END LIST* -G54D10* -X57705Y-60864D02* -X57705Y-61126D01* -X57705Y-61089D02* -X57724Y-61107D01* -X57761Y-61126D01* -X57817Y-61126D01* -X57855Y-61107D01* -X57874Y-61070D01* -X57874Y-60864D01* -X57874Y-61070D02* -X57892Y-61107D01* -X57930Y-61126D01* -X57986Y-61126D01* -X58023Y-61107D01* -X58042Y-61070D01* -X58042Y-60864D01* -X58398Y-60864D02* -X58398Y-61070D01* -X58380Y-61107D01* -X58342Y-61126D01* -X58267Y-61126D01* -X58230Y-61107D01* -X58398Y-60883D02* -X58361Y-60864D01* -X58267Y-60864D01* -X58230Y-60883D01* -X58211Y-60920D01* -X58211Y-60958D01* -X58230Y-60995D01* -X58267Y-61014D01* -X58361Y-61014D01* -X58398Y-61032D01* -X58755Y-60864D02* -X58755Y-61257D01* -X58755Y-60883D02* -X58717Y-60864D01* -X58642Y-60864D01* -X58605Y-60883D01* -X58586Y-60901D01* -X58567Y-60939D01* -X58567Y-61051D01* -X58586Y-61089D01* -X58605Y-61107D01* -X58642Y-61126D01* -X58717Y-61126D01* -X58755Y-61107D01* -X59092Y-60883D02* -X59055Y-60864D01* -X58980Y-60864D01* -X58942Y-60883D01* -X58923Y-60920D01* -X58923Y-61070D01* -X58942Y-61107D01* -X58980Y-61126D01* -X59055Y-61126D01* -X59092Y-61107D01* -X59111Y-61070D01* -X59111Y-61032D01* -X58923Y-60995D01* -X59580Y-60864D02* -X59580Y-61257D01* -X59580Y-61107D02* -X59617Y-61126D01* -X59692Y-61126D01* -X59730Y-61107D01* -X59748Y-61089D01* -X59767Y-61051D01* -X59767Y-60939D01* -X59748Y-60901D01* -X59730Y-60883D01* -X59692Y-60864D01* -X59617Y-60864D01* -X59580Y-60883D01* -X59898Y-61126D02* -X59992Y-60864D01* -X60086Y-61126D02* -X59992Y-60864D01* -X59955Y-60770D01* -X59936Y-60751D01* -X59898Y-60733D01* -X60536Y-60864D02* -X60536Y-61257D01* -X60573Y-61014D02* -X60686Y-60864D01* -X60686Y-61126D02* -X60536Y-60976D01* -X60798Y-61126D02* -X60948Y-61126D01* -X60854Y-61257D02* -X60854Y-60920D01* -X60873Y-60883D01* -X60911Y-60864D01* -X60948Y-60864D01* -X61136Y-61089D02* -X61098Y-61107D01* -X61079Y-61126D01* -X61061Y-61164D01* -X61061Y-61182D01* -X61079Y-61220D01* -X61098Y-61239D01* -X61136Y-61257D01* -X61211Y-61257D01* -X61248Y-61239D01* -X61267Y-61220D01* -X61286Y-61182D01* -X61286Y-61164D01* -X61267Y-61126D01* -X61248Y-61107D01* -X61211Y-61089D01* -X61136Y-61089D01* -X61098Y-61070D01* -X61079Y-61051D01* -X61061Y-61014D01* -X61061Y-60939D01* -X61079Y-60901D01* -X61098Y-60883D01* -X61136Y-60864D01* -X61211Y-60864D01* -X61248Y-60883D01* -X61267Y-60901D01* -X61286Y-60939D01* -X61286Y-61014D01* -X61267Y-61051D01* -X61248Y-61070D01* -X61211Y-61089D01* -X61661Y-60864D02* -X61436Y-60864D01* -X61548Y-60864D02* -X61548Y-61257D01* -X61511Y-61201D01* -X61473Y-61164D01* -X61436Y-61145D01* -X61848Y-60864D02* -X61923Y-60864D01* -X61961Y-60883D01* -X61979Y-60901D01* -X62017Y-60958D01* -X62035Y-61032D01* -X62035Y-61182D01* -X62017Y-61220D01* -X61998Y-61239D01* -X61961Y-61257D01* -X61886Y-61257D01* -X61848Y-61239D01* -X61829Y-61220D01* -X61811Y-61182D01* -X61811Y-61089D01* -X61829Y-61051D01* -X61848Y-61032D01* -X61886Y-61014D01* -X61961Y-61014D01* -X61998Y-61032D01* -X62017Y-61051D01* -X62035Y-61089D01* -X62373Y-60864D02* -X62373Y-61070D01* -X62354Y-61107D01* -X62317Y-61126D01* -X62242Y-61126D01* -X62204Y-61107D01* -X62373Y-60883D02* -X62335Y-60864D01* -X62242Y-60864D01* -X62204Y-60883D01* -X62185Y-60920D01* -X62185Y-60958D01* -X62204Y-60995D01* -X62242Y-61014D01* -X62335Y-61014D01* -X62373Y-61032D01* -X59186Y-60516D02* -X59280Y-60254D01* -X59373Y-60516D01* -X59673Y-60272D02* -X59636Y-60254D01* -X59561Y-60254D01* -X59523Y-60272D01* -X59505Y-60310D01* -X59505Y-60460D01* -X59523Y-60497D01* -X59561Y-60516D01* -X59636Y-60516D01* -X59673Y-60497D01* -X59692Y-60460D01* -X59692Y-60422D01* -X59505Y-60385D01* -X59861Y-60254D02* -X59861Y-60516D01* -X59861Y-60441D02* -X59880Y-60479D01* -X59898Y-60497D01* -X59936Y-60516D01* -X59973Y-60516D01* -X60479Y-60647D02* -X60517Y-60647D01* -X60554Y-60628D01* -X60573Y-60610D01* -X60592Y-60572D01* -X60611Y-60497D01* -X60611Y-60404D01* -X60592Y-60329D01* -X60573Y-60291D01* -X60554Y-60272D01* -X60517Y-60254D01* -X60479Y-60254D01* -X60442Y-60272D01* -X60423Y-60291D01* -X60404Y-60329D01* -X60386Y-60404D01* -X60386Y-60497D01* -X60404Y-60572D01* -X60423Y-60610D01* -X60442Y-60628D01* -X60479Y-60647D01* -X60779Y-60291D02* -X60798Y-60272D01* -X60779Y-60254D01* -X60761Y-60272D01* -X60779Y-60291D01* -X60779Y-60254D01* -X61173Y-60254D02* -X60948Y-60254D01* -X61061Y-60254D02* -X61061Y-60647D01* -X61023Y-60591D01* -X60986Y-60553D01* -X60948Y-60535D01* -G54D11* -X104330Y-47244D02* -X104330Y-51181D01* -X68897Y-47244D02* -X104330Y-47244D01* -X68897Y-51181D02* -X68897Y-47244D01* -X68897Y-51181D02* -X68897Y-55118D01* -X104330Y-51181D02* -X68897Y-51181D01* -X104330Y-55118D02* -X104330Y-51181D01* -X67913Y-55118D02* -X105314Y-55118D01* -X67913Y-59055D02* -X67913Y-55118D01* -X105314Y-59055D02* -X67913Y-59055D01* -X105314Y-55118D02* -X105314Y-59055D01* -G54D12* -X110320Y-55764D02* -X110208Y-55821D01* -X110039Y-55821D01* -X109870Y-55764D01* -X109758Y-55652D01* -X109701Y-55539D01* -X109645Y-55314D01* -X109645Y-55146D01* -X109701Y-54921D01* -X109758Y-54808D01* -X109870Y-54696D01* -X110039Y-54640D01* -X110151Y-54640D01* -X110320Y-54696D01* -X110376Y-54752D01* -X110376Y-55146D01* -X110151Y-55146D01* -X110883Y-54640D02* -X110883Y-55821D01* -X111557Y-54640D01* -X111557Y-55821D01* -X112120Y-54640D02* -X112120Y-55821D01* -X112401Y-55821D01* -X112570Y-55764D01* -X112682Y-55652D01* -X112739Y-55539D01* -X112795Y-55314D01* -X112795Y-55146D01* -X112739Y-54921D01* -X112682Y-54808D01* -X112570Y-54696D01* -X112401Y-54640D01* -X112120Y-54640D01* -X61107Y-55764D02* -X60995Y-55821D01* -X60826Y-55821D01* -X60658Y-55764D01* -X60545Y-55652D01* -X60489Y-55539D01* -X60433Y-55314D01* -X60433Y-55146D01* -X60489Y-54921D01* -X60545Y-54808D01* -X60658Y-54696D01* -X60826Y-54640D01* -X60939Y-54640D01* -X61107Y-54696D01* -X61164Y-54752D01* -X61164Y-55146D01* -X60939Y-55146D01* -X61670Y-54640D02* -X61670Y-55821D01* -X62345Y-54640D01* -X62345Y-55821D01* -X62907Y-54640D02* -X62907Y-55821D01* -X63188Y-55821D01* -X63357Y-55764D01* -X63470Y-55652D01* -X63526Y-55539D01* -X63582Y-55314D01* -X63582Y-55146D01* -X63526Y-54921D01* -X63470Y-54808D01* -X63357Y-54696D01* -X63188Y-54640D01* -X62907Y-54640D01* -X106636Y-56608D02* -X105961Y-56608D01* -X106299Y-56608D02* -X106299Y-57789D01* -X106186Y-57620D01* -X106074Y-57508D01* -X105961Y-57452D01* -X104415Y-53740D02* -X104471Y-53796D01* -X104583Y-53852D01* -X104865Y-53852D01* -X104977Y-53796D01* -X105033Y-53740D01* -X105089Y-53627D01* -X105089Y-53515D01* -X105033Y-53346D01* -X104358Y-52671D01* -X105089Y-52671D01* -X105821Y-53852D02* -X105933Y-53852D01* -X106046Y-53796D01* -X106102Y-53740D01* -X106158Y-53627D01* -X106214Y-53402D01* -X106214Y-53121D01* -X106158Y-52896D01* -X106102Y-52784D01* -X106046Y-52727D01* -X105933Y-52671D01* -X105821Y-52671D01* -X105708Y-52727D01* -X105652Y-52784D01* -X105596Y-52896D01* -X105539Y-53121D01* -X105539Y-53402D01* -X105596Y-53627D01* -X105652Y-53740D01* -X105708Y-53796D01* -X105821Y-53852D01* -X104358Y-49915D02* -X105089Y-49915D01* -X104696Y-49465D01* -X104865Y-49465D01* -X104977Y-49409D01* -X105033Y-49353D01* -X105089Y-49240D01* -X105089Y-48959D01* -X105033Y-48847D01* -X104977Y-48790D01* -X104865Y-48734D01* -X104527Y-48734D01* -X104415Y-48790D01* -X104358Y-48847D01* -X105764Y-49409D02* -X105652Y-49465D01* -X105596Y-49521D01* -X105539Y-49634D01* -X105539Y-49690D01* -X105596Y-49803D01* -X105652Y-49859D01* -X105764Y-49915D01* -X105989Y-49915D01* -X106102Y-49859D01* -X106158Y-49803D01* -X106214Y-49690D01* -X106214Y-49634D01* -X106158Y-49521D01* -X106102Y-49465D01* -X105989Y-49409D01* -X105764Y-49409D01* -X105652Y-49353D01* -X105596Y-49296D01* -X105539Y-49184D01* -X105539Y-48959D01* -X105596Y-48847D01* -X105652Y-48790D01* -X105764Y-48734D01* -X105989Y-48734D01* -X106102Y-48790D01* -X106158Y-48847D01* -X106214Y-48959D01* -X106214Y-49184D01* -X106158Y-49296D01* -X106102Y-49353D01* -X105989Y-49409D01* -X66704Y-56608D02* -X66029Y-56608D01* -X66366Y-56608D02* -X66366Y-57789D01* -X66254Y-57620D01* -X66141Y-57508D01* -X66029Y-57452D01* -X67266Y-56608D02* -X67491Y-56608D01* -X67604Y-56664D01* -X67660Y-56721D01* -X67772Y-56889D01* -X67829Y-57114D01* -X67829Y-57564D01* -X67772Y-57677D01* -X67716Y-57733D01* -X67604Y-57789D01* -X67379Y-57789D01* -X67266Y-57733D01* -X67210Y-57677D01* -X67154Y-57564D01* -X67154Y-57283D01* -X67210Y-57170D01* -X67266Y-57114D01* -X67379Y-57058D01* -X67604Y-57058D01* -X67716Y-57114D01* -X67772Y-57170D01* -X67829Y-57283D01* -X66957Y-53852D02* -X67688Y-53852D01* -X67294Y-53402D01* -X67463Y-53402D01* -X67575Y-53346D01* -X67632Y-53290D01* -X67688Y-53177D01* -X67688Y-52896D01* -X67632Y-52784D01* -X67575Y-52727D01* -X67463Y-52671D01* -X67125Y-52671D01* -X67013Y-52727D01* -X66957Y-52784D01* -X68082Y-53852D02* -X68869Y-53852D01* -X68363Y-52671D01* -X67632Y-49915D02* -X67069Y-49915D01* -X67013Y-49353D01* -X67069Y-49409D01* -X67182Y-49465D01* -X67463Y-49465D01* -X67575Y-49409D01* -X67632Y-49353D01* -X67688Y-49240D01* -X67688Y-48959D01* -X67632Y-48847D01* -X67575Y-48790D01* -X67463Y-48734D01* -X67182Y-48734D01* -X67069Y-48790D01* -X67013Y-48847D01* -X68757Y-49915D02* -X68194Y-49915D01* -X68138Y-49353D01* -X68194Y-49409D01* -X68307Y-49465D01* -X68588Y-49465D01* -X68700Y-49409D01* -X68757Y-49353D01* -X68813Y-49240D01* -X68813Y-48959D01* -X68757Y-48847D01* -X68700Y-48790D01* -X68588Y-48734D01* -X68307Y-48734D01* -X68194Y-48790D01* -X68138Y-48847D01* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-Edge_Cuts.gbr b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-Edge_Cuts.gbr deleted file mode 100644 index 1ef087d665..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-Edge_Cuts.gbr +++ /dev/null @@ -1,22 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -%ADD11C,0.00393701*% -G04 APERTURE END LIST* -G54D10* -G54D11* -X116141Y-66929D02* -X116141Y-47244D01* -X57086Y-66929D02* -X116141Y-66929D01* -X57086Y-47244D02* -X57086Y-66929D01* -X57086Y-47244D02* -X116141Y-47244D01* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Cu.gtl b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Cu.gtl deleted file mode 100644 index 675764e34a..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Cu.gtl +++ /dev/null @@ -1,1463 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -%ADD11C,0.0984252*% -%ADD12C,0.16*% -%ADD13R,0.06X0.06*% -%ADD14C,0.0787402*% -%ADD15C,0.15748*% -%ADD16C,0.0590551*% -%ADD17C,0.011811*% -G04 APERTURE END LIST* -G54D10* -G54D11* -X104330Y-56102D03* -X102362Y-56102D03* -X100393Y-56102D03* -X98425Y-56102D03* -X96456Y-56102D03* -X94488Y-56102D03* -X92519Y-56102D03* -X90551Y-56102D03* -X88582Y-56102D03* -X86614Y-56102D03* -X84645Y-56102D03* -X82677Y-56102D03* -X80708Y-56102D03* -X78740Y-56102D03* -X76771Y-56102D03* -X74803Y-56102D03* -X72834Y-56102D03* -X70866Y-56102D03* -X68897Y-56102D03* -X104330Y-58070D03* -X102362Y-58070D03* -X100393Y-58070D03* -X98425Y-58070D03* -X96456Y-58070D03* -X94488Y-58070D03* -X92519Y-58070D03* -X90551Y-58070D03* -X88582Y-58070D03* -X86614Y-58070D03* -X84645Y-58070D03* -X82677Y-58070D03* -X80708Y-58070D03* -X78740Y-58070D03* -X76771Y-58070D03* -X74803Y-58070D03* -X72834Y-58070D03* -X70866Y-58070D03* -X68897Y-58070D03* -X103346Y-52165D03* -X101377Y-52165D03* -X99409Y-52165D03* -X97440Y-52165D03* -X95472Y-52165D03* -X93503Y-52165D03* -X91535Y-52165D03* -X89566Y-52165D03* -X87598Y-52165D03* -X85629Y-52165D03* -X83661Y-52165D03* -X81692Y-52165D03* -X79724Y-52165D03* -X77755Y-52165D03* -X75787Y-52165D03* -X73818Y-52165D03* -X71850Y-52165D03* -X69881Y-52165D03* -X103346Y-54133D03* -X101377Y-54133D03* -X99409Y-54133D03* -X97440Y-54133D03* -X95472Y-54133D03* -X93503Y-54133D03* -X91535Y-54133D03* -X89566Y-54133D03* -X87598Y-54133D03* -X85629Y-54133D03* -X83661Y-54133D03* -X81692Y-54133D03* -X79724Y-54133D03* -X77755Y-54133D03* -X75787Y-54133D03* -X73818Y-54133D03* -X71850Y-54133D03* -X69881Y-54133D03* -X103346Y-48228D03* -X101377Y-48228D03* -X99409Y-48228D03* -X97440Y-48228D03* -X95472Y-48228D03* -X93503Y-48228D03* -X91535Y-48228D03* -X89566Y-48228D03* -X87598Y-48228D03* -X85629Y-48228D03* -X83661Y-48228D03* -X81692Y-48228D03* -X79724Y-48228D03* -X77755Y-48228D03* -X75787Y-48228D03* -X73818Y-48228D03* -X71850Y-48228D03* -X69881Y-48228D03* -X103346Y-50196D03* -X101377Y-50196D03* -X99409Y-50196D03* -X97440Y-50196D03* -X95472Y-50196D03* -X93503Y-50196D03* -X91535Y-50196D03* -X89566Y-50196D03* -X87598Y-50196D03* -X85629Y-50196D03* -X83661Y-50196D03* -X81692Y-50196D03* -X79724Y-50196D03* -X77755Y-50196D03* -X75787Y-50196D03* -X73818Y-50196D03* -X71850Y-50196D03* -X69881Y-50196D03* -G54D12* -X114173Y-49212D03* -X114173Y-64960D03* -X59055Y-64960D03* -X59055Y-49212D03* -G54D13* -X62007Y-53149D03* -X111220Y-53149D03* -G54D14* -X104330Y-62992D03* -X102362Y-62992D03* -X100393Y-62992D03* -X98425Y-62992D03* -X96456Y-62992D03* -X94488Y-62992D03* -X92519Y-62992D03* -X90551Y-62992D03* -X88582Y-62992D03* -X86614Y-62992D03* -X84645Y-62992D03* -X82677Y-62992D03* -X80708Y-62992D03* -X78740Y-62992D03* -X76771Y-62992D03* -X74803Y-62992D03* -X72834Y-62992D03* -X70866Y-62992D03* -X68897Y-62992D03* -X103346Y-62992D03* -X101377Y-62992D03* -X99409Y-62992D03* -X97440Y-62992D03* -X95472Y-62992D03* -X93503Y-62992D03* -X91535Y-62992D03* -X89566Y-62992D03* -X87598Y-62992D03* -X85629Y-62992D03* -X83661Y-62992D03* -X81692Y-62992D03* -X79724Y-62992D03* -X77755Y-62992D03* -X75787Y-62992D03* -X73818Y-62992D03* -X71850Y-62992D03* -X69881Y-62992D03* -X103346Y-60039D03* -X101377Y-60039D03* -X99409Y-60039D03* -X97440Y-60039D03* -X95472Y-60039D03* -X93503Y-60039D03* -X91535Y-60039D03* -X89566Y-60039D03* -X87598Y-60039D03* -X85629Y-60039D03* -X83661Y-60039D03* -X81692Y-60039D03* -X79724Y-60039D03* -X77755Y-60039D03* -X75787Y-60039D03* -X73818Y-60039D03* -X71850Y-60039D03* -X69881Y-60039D03* -G54D15* -X65157Y-62204D03* -X108070Y-62204D03* -G54D16* -X86614Y-62992D02* -X86614Y-58070D01* -X86614Y-58070D02* -X86614Y-56102D01* -X90551Y-62992D02* -X90551Y-58070D01* -X90551Y-58070D02* -X90551Y-56102D01* -X88582Y-62992D02* -X88582Y-58070D01* -X88582Y-58070D02* -X88582Y-56102D01* -X71850Y-60039D02* -X71850Y-55511D01* -X70866Y-51181D02* -X71850Y-50196D01* -X70866Y-54527D02* -X70866Y-51181D01* -X71850Y-55511D02* -X70866Y-54527D01* -X71850Y-50196D02* -X71850Y-48228D01* -X84645Y-62992D02* -X84645Y-58070D01* -X84645Y-58070D02* -X84645Y-56102D01* -X82677Y-62992D02* -X82677Y-58070D01* -X82677Y-58070D02* -X82677Y-56102D01* -X80708Y-62992D02* -X80708Y-58070D01* -X80708Y-58070D02* -X80708Y-56102D01* -X78740Y-62992D02* -X78740Y-58070D01* -X78740Y-58070D02* -X78740Y-56102D01* -X76771Y-62992D02* -X76771Y-58070D01* -X76771Y-58070D02* -X76771Y-56102D01* -X74803Y-62992D02* -X74803Y-58070D01* -X74803Y-58070D02* -X74803Y-56102D01* -X72834Y-62992D02* -X72834Y-58070D01* -X72834Y-58070D02* -X72834Y-56102D01* -X69881Y-60039D02* -X69881Y-55511D01* -X68897Y-51181D02* -X69881Y-50196D01* -X68897Y-54527D02* -X68897Y-51181D01* -X69881Y-55511D02* -X68897Y-54527D01* -X69881Y-50196D02* -X69881Y-48228D01* -X70866Y-62992D02* -X70866Y-58070D01* -X70866Y-58070D02* -X70866Y-56102D01* -X68897Y-62992D02* -X68897Y-58070D01* -X68897Y-58070D02* -X68897Y-56102D01* -X93503Y-60039D02* -X93503Y-55511D01* -X92519Y-51181D02* -X93503Y-50196D01* -X92519Y-54527D02* -X92519Y-51181D01* -X93503Y-55511D02* -X92519Y-54527D01* -X93503Y-50196D02* -X93503Y-48228D01* -X103346Y-48228D02* -X103346Y-50196D01* -X103346Y-60039D02* -X103346Y-55905D01* -X102362Y-51181D02* -X103346Y-50196D01* -X102362Y-54527D02* -X102362Y-51181D01* -X103346Y-55511D02* -X102362Y-54527D01* -X103346Y-55905D02* -X103346Y-55511D01* -X104330Y-62992D02* -X104330Y-58070D01* -X104330Y-58070D02* -X104330Y-56102D01* -X101377Y-60039D02* -X101377Y-55511D01* -X100393Y-51181D02* -X101377Y-50196D01* -X100393Y-54527D02* -X100393Y-51181D01* -X101377Y-55511D02* -X100393Y-54527D01* -X101377Y-50196D02* -X101377Y-48228D01* -X99409Y-60039D02* -X99409Y-55511D01* -X98425Y-51181D02* -X99409Y-50196D01* -X98425Y-54527D02* -X98425Y-51181D01* -X99409Y-55511D02* -X98425Y-54527D01* -X99409Y-50196D02* -X99409Y-48228D01* -X97440Y-60039D02* -X97440Y-55708D01* -X96456Y-51181D02* -X97440Y-50196D01* -X96456Y-54527D02* -X96456Y-51181D01* -X97440Y-55511D02* -X96456Y-54527D01* -X97440Y-55708D02* -X97440Y-55511D01* -X97440Y-50196D02* -X97440Y-48228D01* -X95472Y-60039D02* -X95472Y-55511D01* -X94488Y-51181D02* -X95472Y-50196D01* -X94488Y-54527D02* -X94488Y-51181D01* -X95472Y-55511D02* -X94488Y-54527D01* -X95472Y-50196D02* -X95472Y-48228D01* -X91535Y-48228D02* -X91535Y-50196D01* -X91535Y-60039D02* -X91535Y-55511D01* -X90551Y-51181D02* -X91535Y-50196D01* -X90551Y-54527D02* -X90551Y-51181D01* -X91535Y-55511D02* -X90551Y-54527D01* -X89566Y-60039D02* -X89566Y-55511D01* -X88582Y-51181D02* -X89566Y-50196D01* -X88582Y-54527D02* -X88582Y-51181D01* -X89566Y-55511D02* -X88582Y-54527D01* -X89566Y-50196D02* -X89566Y-48228D01* -X87598Y-60039D02* -X87598Y-55511D01* -X86614Y-51181D02* -X87598Y-50196D01* -X86614Y-54527D02* -X86614Y-51181D01* -X87598Y-55511D02* -X86614Y-54527D01* -X87598Y-50196D02* -X87598Y-48228D01* -X85629Y-60039D02* -X85629Y-55511D01* -X84645Y-51181D02* -X85629Y-50196D01* -X84645Y-54527D02* -X84645Y-51181D01* -X85629Y-55511D02* -X84645Y-54527D01* -X85629Y-50196D02* -X85629Y-48228D01* -X83661Y-60039D02* -X83661Y-55511D01* -X82677Y-51181D02* -X83661Y-50196D01* -X82677Y-54527D02* -X82677Y-51181D01* -X83661Y-55511D02* -X82677Y-54527D01* -X83661Y-50196D02* -X83661Y-48228D01* -X102362Y-62992D02* -X102362Y-58070D01* -X102362Y-58070D02* -X102362Y-56102D01* -X81692Y-60039D02* -X81692Y-55511D01* -X80708Y-51181D02* -X81692Y-50196D01* -X80708Y-54527D02* -X80708Y-51181D01* -X81692Y-55511D02* -X80708Y-54527D01* -X81692Y-50196D02* -X81692Y-48228D01* -X79724Y-60039D02* -X79724Y-55511D01* -X78740Y-51181D02* -X79724Y-50196D01* -X78740Y-54527D02* -X78740Y-51181D01* -X79724Y-55511D02* -X78740Y-54527D01* -X79724Y-50196D02* -X79724Y-48228D01* -X77755Y-60039D02* -X77755Y-55511D01* -X76771Y-51181D02* -X77755Y-50196D01* -X76771Y-54527D02* -X76771Y-51181D01* -X77755Y-55511D02* -X76771Y-54527D01* -X77755Y-50196D02* -X77755Y-48228D01* -X75787Y-60039D02* -X75787Y-55511D01* -X74803Y-51181D02* -X75787Y-50196D01* -X74803Y-54527D02* -X74803Y-51181D01* -X75787Y-55511D02* -X74803Y-54527D01* -X75787Y-50196D02* -X75787Y-48228D01* -X73818Y-60039D02* -X73818Y-55511D01* -X72834Y-51181D02* -X73818Y-50196D01* -X72834Y-54527D02* -X72834Y-51181D01* -X73818Y-55511D02* -X72834Y-54527D01* -X73818Y-50196D02* -X73818Y-48228D01* -X100393Y-62992D02* -X100393Y-58070D01* -X100393Y-58070D02* -X100393Y-56102D01* -X98425Y-62992D02* -X98425Y-58070D01* -X98425Y-58070D02* -X98425Y-56102D01* -X96456Y-62992D02* -X96456Y-58070D01* -X96456Y-58070D02* -X96456Y-56102D01* -X94488Y-62992D02* -X94488Y-58070D01* -X94488Y-58070D02* -X94488Y-56102D01* -X92519Y-62992D02* -X92519Y-58070D01* -X92519Y-58070D02* -X92519Y-56102D01* -G54D10* -G36* -X115866Y-66653D02* -X115229Y-66653D01* -X115229Y-64751D01* -X115229Y-49003D01* -X115068Y-48615D01* -X114772Y-48317D01* -X114384Y-48156D01* -X113964Y-48156D01* -X113575Y-48316D01* -X113278Y-48613D01* -X113117Y-49001D01* -X113117Y-49421D01* -X113277Y-49809D01* -X113574Y-50107D01* -X113962Y-50268D01* -X114382Y-50268D01* -X114770Y-50108D01* -X115067Y-49811D01* -X115228Y-49423D01* -X115229Y-49003D01* -X115229Y-64751D01* -X115068Y-64363D01* -X114772Y-64065D01* -X114384Y-63904D01* -X113964Y-63904D01* -X113575Y-64064D01* -X113278Y-64361D01* -X113117Y-64749D01* -X113117Y-65169D01* -X113277Y-65557D01* -X113574Y-65855D01* -X113962Y-66016D01* -X114382Y-66016D01* -X114770Y-65856D01* -X115067Y-65559D01* -X115228Y-65171D01* -X115229Y-64751D01* -X115229Y-66653D01* -X111679Y-66653D01* -X111679Y-53418D01* -X111679Y-52881D01* -X111679Y-52817D01* -X111655Y-52759D01* -X111610Y-52714D01* -X111551Y-52690D01* -X111378Y-52690D01* -X111338Y-52730D01* -X111338Y-53031D01* -X111639Y-53031D01* -X111679Y-52991D01* -X111679Y-52881D01* -X111679Y-53418D01* -X111679Y-53307D01* -X111639Y-53267D01* -X111338Y-53267D01* -X111338Y-53568D01* -X111378Y-53608D01* -X111551Y-53608D01* -X111610Y-53584D01* -X111655Y-53539D01* -X111679Y-53481D01* -X111679Y-53418D01* -X111679Y-66653D01* -X111102Y-66653D01* -X111102Y-53568D01* -X111102Y-53267D01* -X111102Y-53031D01* -X111102Y-52730D01* -X111062Y-52690D01* -X110888Y-52690D01* -X110830Y-52714D01* -X110785Y-52759D01* -X110761Y-52817D01* -X110761Y-52881D01* -X110761Y-52991D01* -X110801Y-53031D01* -X111102Y-53031D01* -X111102Y-53267D01* -X110801Y-53267D01* -X110761Y-53307D01* -X110761Y-53418D01* -X110761Y-53481D01* -X110785Y-53539D01* -X110830Y-53584D01* -X110888Y-53608D01* -X111062Y-53608D01* -X111102Y-53568D01* -X111102Y-66653D01* -X109114Y-66653D01* -X109114Y-61998D01* -X108955Y-61614D01* -X108662Y-61320D01* -X108279Y-61161D01* -X107864Y-61161D01* -X107480Y-61319D01* -X107186Y-61612D01* -X107027Y-61996D01* -X107027Y-62411D01* -X107185Y-62794D01* -X107479Y-63088D01* -X107862Y-63247D01* -X108277Y-63248D01* -X108661Y-63089D01* -X108954Y-62796D01* -X109113Y-62413D01* -X109114Y-61998D01* -X109114Y-66653D01* -X66200Y-66653D01* -X66200Y-61998D01* -X66042Y-61614D01* -X65749Y-61320D01* -X65365Y-61161D01* -X64950Y-61161D01* -X64567Y-61319D01* -X64273Y-61612D01* -X64114Y-61996D01* -X64113Y-62411D01* -X64272Y-62794D01* -X64565Y-63088D01* -X64949Y-63247D01* -X65364Y-63248D01* -X65747Y-63089D01* -X66041Y-62796D01* -X66200Y-62413D01* -X66200Y-61998D01* -X66200Y-66653D01* -X62466Y-66653D01* -X62466Y-53418D01* -X62466Y-52881D01* -X62466Y-52817D01* -X62442Y-52759D01* -X62397Y-52714D01* -X62339Y-52690D01* -X62165Y-52690D01* -X62125Y-52730D01* -X62125Y-53031D01* -X62427Y-53031D01* -X62466Y-52991D01* -X62466Y-52881D01* -X62466Y-53418D01* -X62466Y-53307D01* -X62427Y-53267D01* -X62125Y-53267D01* -X62125Y-53568D01* -X62165Y-53608D01* -X62339Y-53608D01* -X62397Y-53584D01* -X62442Y-53539D01* -X62466Y-53481D01* -X62466Y-53418D01* -X62466Y-66653D01* -X61889Y-66653D01* -X61889Y-53568D01* -X61889Y-53267D01* -X61889Y-53031D01* -X61889Y-52730D01* -X61850Y-52690D01* -X61676Y-52690D01* -X61617Y-52714D01* -X61573Y-52759D01* -X61548Y-52817D01* -X61548Y-52881D01* -X61548Y-52991D01* -X61588Y-53031D01* -X61889Y-53031D01* -X61889Y-53267D01* -X61588Y-53267D01* -X61548Y-53307D01* -X61548Y-53418D01* -X61548Y-53481D01* -X61573Y-53539D01* -X61617Y-53584D01* -X61676Y-53608D01* -X61850Y-53608D01* -X61889Y-53568D01* -X61889Y-66653D01* -X60111Y-66653D01* -X60111Y-64751D01* -X60111Y-49003D01* -X59950Y-48615D01* -X59654Y-48317D01* -X59266Y-48156D01* -X58846Y-48156D01* -X58457Y-48316D01* -X58160Y-48613D01* -X57999Y-49001D01* -X57999Y-49421D01* -X58159Y-49809D01* -X58456Y-50107D01* -X58844Y-50268D01* -X59264Y-50268D01* -X59652Y-50108D01* -X59949Y-49811D01* -X60110Y-49423D01* -X60111Y-49003D01* -X60111Y-64751D01* -X59950Y-64363D01* -X59654Y-64065D01* -X59266Y-63904D01* -X58846Y-63904D01* -X58457Y-64064D01* -X58160Y-64361D01* -X57999Y-64749D01* -X57999Y-65169D01* -X58159Y-65557D01* -X58456Y-65855D01* -X58844Y-66016D01* -X59264Y-66016D01* -X59652Y-65856D01* -X59949Y-65559D01* -X60110Y-65171D01* -X60111Y-64751D01* -X60111Y-66653D01* -X57362Y-66653D01* -X57362Y-47519D01* -X69638Y-47519D01* -X69458Y-47593D01* -X69248Y-47804D01* -X69133Y-48078D01* -X69133Y-48376D01* -X69247Y-48651D01* -X69330Y-48735D01* -X69330Y-49690D01* -X69248Y-49772D01* -X69133Y-50047D01* -X69133Y-50165D01* -X68507Y-50791D01* -X68388Y-50970D01* -X68346Y-51181D01* -X68346Y-54527D01* -X68388Y-54738D01* -X68507Y-54917D01* -X68944Y-55354D01* -X68749Y-55354D01* -X68474Y-55467D01* -X68263Y-55678D01* -X68149Y-55952D01* -X68149Y-56250D01* -X68263Y-56525D01* -X68346Y-56609D01* -X68346Y-57564D01* -X68263Y-57646D01* -X68149Y-57921D01* -X68149Y-58219D01* -X68263Y-58494D01* -X68346Y-58577D01* -X68346Y-62625D01* -X68248Y-62862D01* -X68247Y-63120D01* -X68346Y-63359D01* -X68529Y-63542D01* -X68767Y-63641D01* -X69026Y-63641D01* -X69265Y-63543D01* -X69389Y-63418D01* -X69513Y-63542D01* -X69752Y-63641D01* -X70010Y-63641D01* -X70249Y-63543D01* -X70374Y-63418D01* -X70497Y-63542D01* -X70736Y-63641D01* -X70994Y-63641D01* -X71233Y-63543D01* -X71358Y-63418D01* -X71481Y-63542D01* -X71720Y-63641D01* -X71979Y-63641D01* -X72217Y-63543D01* -X72342Y-63418D01* -X72466Y-63542D01* -X72704Y-63641D01* -X72963Y-63641D01* -X73202Y-63543D01* -X73326Y-63418D01* -X73450Y-63542D01* -X73689Y-63641D01* -X73947Y-63641D01* -X74186Y-63543D01* -X74311Y-63418D01* -X74434Y-63542D01* -X74673Y-63641D01* -X74931Y-63641D01* -X75170Y-63543D01* -X75295Y-63418D01* -X75418Y-63542D01* -X75657Y-63641D01* -X75916Y-63641D01* -X76154Y-63543D01* -X76279Y-63418D01* -X76403Y-63542D01* -X76641Y-63641D01* -X76900Y-63641D01* -X77139Y-63543D01* -X77263Y-63418D01* -X77387Y-63542D01* -X77626Y-63641D01* -X77884Y-63641D01* -X78123Y-63543D01* -X78248Y-63418D01* -X78371Y-63542D01* -X78610Y-63641D01* -X78868Y-63641D01* -X79107Y-63543D01* -X79232Y-63418D01* -X79355Y-63542D01* -X79594Y-63641D01* -X79853Y-63641D01* -X80091Y-63543D01* -X80216Y-63418D01* -X80340Y-63542D01* -X80578Y-63641D01* -X80837Y-63641D01* -X81076Y-63543D01* -X81200Y-63418D01* -X81324Y-63542D01* -X81563Y-63641D01* -X81821Y-63641D01* -X82060Y-63543D01* -X82185Y-63418D01* -X82308Y-63542D01* -X82547Y-63641D01* -X82805Y-63641D01* -X83044Y-63543D01* -X83169Y-63418D01* -X83292Y-63542D01* -X83531Y-63641D01* -X83790Y-63641D01* -X84028Y-63543D01* -X84153Y-63418D01* -X84277Y-63542D01* -X84515Y-63641D01* -X84774Y-63641D01* -X85013Y-63543D01* -X85137Y-63418D01* -X85261Y-63542D01* -X85500Y-63641D01* -X85758Y-63641D01* -X85997Y-63543D01* -X86122Y-63418D01* -X86245Y-63542D01* -X86484Y-63641D01* -X86742Y-63641D01* -X86981Y-63543D01* -X87106Y-63418D01* -X87229Y-63542D01* -X87468Y-63641D01* -X87727Y-63641D01* -X87965Y-63543D01* -X88090Y-63418D01* -X88214Y-63542D01* -X88452Y-63641D01* -X88711Y-63641D01* -X88950Y-63543D01* -X89074Y-63418D01* -X89198Y-63542D01* -X89437Y-63641D01* -X89695Y-63641D01* -X89934Y-63543D01* -X90059Y-63418D01* -X90182Y-63542D01* -X90421Y-63641D01* -X90679Y-63641D01* -X90918Y-63543D01* -X91043Y-63418D01* -X91166Y-63542D01* -X91405Y-63641D01* -X91664Y-63641D01* -X91902Y-63543D01* -X92027Y-63418D01* -X92151Y-63542D01* -X92389Y-63641D01* -X92648Y-63641D01* -X92887Y-63543D01* -X93011Y-63418D01* -X93135Y-63542D01* -X93374Y-63641D01* -X93632Y-63641D01* -X93871Y-63543D01* -X93996Y-63418D01* -X94119Y-63542D01* -X94358Y-63641D01* -X94616Y-63641D01* -X94855Y-63543D01* -X94980Y-63418D01* -X95103Y-63542D01* -X95342Y-63641D01* -X95601Y-63641D01* -X95839Y-63543D01* -X95964Y-63418D01* -X96088Y-63542D01* -X96326Y-63641D01* -X96585Y-63641D01* -X96824Y-63543D01* -X96948Y-63418D01* -X97072Y-63542D01* -X97311Y-63641D01* -X97569Y-63641D01* -X97808Y-63543D01* -X97933Y-63418D01* -X98056Y-63542D01* -X98295Y-63641D01* -X98553Y-63641D01* -X98792Y-63543D01* -X98917Y-63418D01* -X99040Y-63542D01* -X99279Y-63641D01* -X99538Y-63641D01* -X99776Y-63543D01* -X99901Y-63418D01* -X100025Y-63542D01* -X100263Y-63641D01* -X100522Y-63641D01* -X100761Y-63543D01* -X100885Y-63418D01* -X101009Y-63542D01* -X101248Y-63641D01* -X101506Y-63641D01* -X101745Y-63543D01* -X101870Y-63418D01* -X101993Y-63542D01* -X102232Y-63641D01* -X102490Y-63641D01* -X102729Y-63543D01* -X102854Y-63418D01* -X102978Y-63542D01* -X103216Y-63641D01* -X103475Y-63641D01* -X103713Y-63543D01* -X103838Y-63418D01* -X103962Y-63542D01* -X104200Y-63641D01* -X104459Y-63641D01* -X104698Y-63543D01* -X104881Y-63360D01* -X104980Y-63121D01* -X104980Y-62863D01* -X104881Y-62624D01* -X104881Y-58577D01* -X104964Y-58495D01* -X105078Y-58220D01* -X105078Y-57922D01* -X104965Y-57647D01* -X104881Y-57564D01* -X104881Y-56609D01* -X104964Y-56526D01* -X105078Y-56251D01* -X105078Y-55954D01* -X104965Y-55679D01* -X104754Y-55468D01* -X104480Y-55354D01* -X104182Y-55354D01* -X103907Y-55467D01* -X103891Y-55483D01* -X103855Y-55300D01* -X103736Y-55122D01* -X103736Y-55122D01* -X103495Y-54881D01* -X103769Y-54768D01* -X103980Y-54558D01* -X104094Y-54283D01* -X104094Y-53985D01* -X103980Y-53710D01* -X103770Y-53500D01* -X103495Y-53385D01* -X103198Y-53385D01* -X102923Y-53499D01* -X102913Y-53509D01* -X102913Y-52790D01* -X102922Y-52799D01* -X103197Y-52913D01* -X103494Y-52913D01* -X103769Y-52799D01* -X103980Y-52589D01* -X104094Y-52314D01* -X104094Y-52017D01* -X103980Y-51742D01* -X103770Y-51531D01* -X103495Y-51417D01* -X103198Y-51417D01* -X102923Y-51530D01* -X102913Y-51540D01* -X102913Y-51409D01* -X103377Y-50944D01* -X103494Y-50945D01* -X103769Y-50831D01* -X103980Y-50621D01* -X104094Y-50346D01* -X104094Y-50048D01* -X103980Y-49773D01* -X103897Y-49690D01* -X103897Y-48735D01* -X103980Y-48652D01* -X104094Y-48377D01* -X104094Y-48080D01* -X103980Y-47805D01* -X103770Y-47594D01* -X103590Y-47519D01* -X115866Y-47519D01* -X115866Y-66653D01* -X115866Y-66653D01* -G37* -G54D17* -X115866Y-66653D02* -X115229Y-66653D01* -X115229Y-64751D01* -X115229Y-49003D01* -X115068Y-48615D01* -X114772Y-48317D01* -X114384Y-48156D01* -X113964Y-48156D01* -X113575Y-48316D01* -X113278Y-48613D01* -X113117Y-49001D01* -X113117Y-49421D01* -X113277Y-49809D01* -X113574Y-50107D01* -X113962Y-50268D01* -X114382Y-50268D01* -X114770Y-50108D01* -X115067Y-49811D01* -X115228Y-49423D01* -X115229Y-49003D01* -X115229Y-64751D01* -X115068Y-64363D01* -X114772Y-64065D01* -X114384Y-63904D01* -X113964Y-63904D01* -X113575Y-64064D01* -X113278Y-64361D01* -X113117Y-64749D01* -X113117Y-65169D01* -X113277Y-65557D01* -X113574Y-65855D01* -X113962Y-66016D01* -X114382Y-66016D01* -X114770Y-65856D01* -X115067Y-65559D01* -X115228Y-65171D01* -X115229Y-64751D01* -X115229Y-66653D01* -X111679Y-66653D01* -X111679Y-53418D01* -X111679Y-52881D01* -X111679Y-52817D01* -X111655Y-52759D01* -X111610Y-52714D01* -X111551Y-52690D01* -X111378Y-52690D01* -X111338Y-52730D01* -X111338Y-53031D01* -X111639Y-53031D01* -X111679Y-52991D01* -X111679Y-52881D01* -X111679Y-53418D01* -X111679Y-53307D01* -X111639Y-53267D01* -X111338Y-53267D01* -X111338Y-53568D01* -X111378Y-53608D01* -X111551Y-53608D01* -X111610Y-53584D01* -X111655Y-53539D01* -X111679Y-53481D01* -X111679Y-53418D01* -X111679Y-66653D01* -X111102Y-66653D01* -X111102Y-53568D01* -X111102Y-53267D01* -X111102Y-53031D01* -X111102Y-52730D01* -X111062Y-52690D01* -X110888Y-52690D01* -X110830Y-52714D01* -X110785Y-52759D01* -X110761Y-52817D01* -X110761Y-52881D01* -X110761Y-52991D01* -X110801Y-53031D01* -X111102Y-53031D01* -X111102Y-53267D01* -X110801Y-53267D01* -X110761Y-53307D01* -X110761Y-53418D01* -X110761Y-53481D01* -X110785Y-53539D01* -X110830Y-53584D01* -X110888Y-53608D01* -X111062Y-53608D01* -X111102Y-53568D01* -X111102Y-66653D01* -X109114Y-66653D01* -X109114Y-61998D01* -X108955Y-61614D01* -X108662Y-61320D01* -X108279Y-61161D01* -X107864Y-61161D01* -X107480Y-61319D01* -X107186Y-61612D01* -X107027Y-61996D01* -X107027Y-62411D01* -X107185Y-62794D01* -X107479Y-63088D01* -X107862Y-63247D01* -X108277Y-63248D01* -X108661Y-63089D01* -X108954Y-62796D01* -X109113Y-62413D01* -X109114Y-61998D01* -X109114Y-66653D01* -X66200Y-66653D01* -X66200Y-61998D01* -X66042Y-61614D01* -X65749Y-61320D01* -X65365Y-61161D01* -X64950Y-61161D01* -X64567Y-61319D01* -X64273Y-61612D01* -X64114Y-61996D01* -X64113Y-62411D01* -X64272Y-62794D01* -X64565Y-63088D01* -X64949Y-63247D01* -X65364Y-63248D01* -X65747Y-63089D01* -X66041Y-62796D01* -X66200Y-62413D01* -X66200Y-61998D01* -X66200Y-66653D01* -X62466Y-66653D01* -X62466Y-53418D01* -X62466Y-52881D01* -X62466Y-52817D01* -X62442Y-52759D01* -X62397Y-52714D01* -X62339Y-52690D01* -X62165Y-52690D01* -X62125Y-52730D01* -X62125Y-53031D01* -X62427Y-53031D01* -X62466Y-52991D01* -X62466Y-52881D01* -X62466Y-53418D01* -X62466Y-53307D01* -X62427Y-53267D01* -X62125Y-53267D01* -X62125Y-53568D01* -X62165Y-53608D01* -X62339Y-53608D01* -X62397Y-53584D01* -X62442Y-53539D01* -X62466Y-53481D01* -X62466Y-53418D01* -X62466Y-66653D01* -X61889Y-66653D01* -X61889Y-53568D01* -X61889Y-53267D01* -X61889Y-53031D01* -X61889Y-52730D01* -X61850Y-52690D01* -X61676Y-52690D01* -X61617Y-52714D01* -X61573Y-52759D01* -X61548Y-52817D01* -X61548Y-52881D01* -X61548Y-52991D01* -X61588Y-53031D01* -X61889Y-53031D01* -X61889Y-53267D01* -X61588Y-53267D01* -X61548Y-53307D01* -X61548Y-53418D01* -X61548Y-53481D01* -X61573Y-53539D01* -X61617Y-53584D01* -X61676Y-53608D01* -X61850Y-53608D01* -X61889Y-53568D01* -X61889Y-66653D01* -X60111Y-66653D01* -X60111Y-64751D01* -X60111Y-49003D01* -X59950Y-48615D01* -X59654Y-48317D01* -X59266Y-48156D01* -X58846Y-48156D01* -X58457Y-48316D01* -X58160Y-48613D01* -X57999Y-49001D01* -X57999Y-49421D01* -X58159Y-49809D01* -X58456Y-50107D01* -X58844Y-50268D01* -X59264Y-50268D01* -X59652Y-50108D01* -X59949Y-49811D01* -X60110Y-49423D01* -X60111Y-49003D01* -X60111Y-64751D01* -X59950Y-64363D01* -X59654Y-64065D01* -X59266Y-63904D01* -X58846Y-63904D01* -X58457Y-64064D01* -X58160Y-64361D01* -X57999Y-64749D01* -X57999Y-65169D01* -X58159Y-65557D01* -X58456Y-65855D01* -X58844Y-66016D01* -X59264Y-66016D01* -X59652Y-65856D01* -X59949Y-65559D01* -X60110Y-65171D01* -X60111Y-64751D01* -X60111Y-66653D01* -X57362Y-66653D01* -X57362Y-47519D01* -X69638Y-47519D01* -X69458Y-47593D01* -X69248Y-47804D01* -X69133Y-48078D01* -X69133Y-48376D01* -X69247Y-48651D01* -X69330Y-48735D01* -X69330Y-49690D01* -X69248Y-49772D01* -X69133Y-50047D01* -X69133Y-50165D01* -X68507Y-50791D01* -X68388Y-50970D01* -X68346Y-51181D01* -X68346Y-54527D01* -X68388Y-54738D01* -X68507Y-54917D01* -X68944Y-55354D01* -X68749Y-55354D01* -X68474Y-55467D01* -X68263Y-55678D01* -X68149Y-55952D01* -X68149Y-56250D01* -X68263Y-56525D01* -X68346Y-56609D01* -X68346Y-57564D01* -X68263Y-57646D01* -X68149Y-57921D01* -X68149Y-58219D01* -X68263Y-58494D01* -X68346Y-58577D01* -X68346Y-62625D01* -X68248Y-62862D01* -X68247Y-63120D01* -X68346Y-63359D01* -X68529Y-63542D01* -X68767Y-63641D01* -X69026Y-63641D01* -X69265Y-63543D01* -X69389Y-63418D01* -X69513Y-63542D01* -X69752Y-63641D01* -X70010Y-63641D01* -X70249Y-63543D01* -X70374Y-63418D01* -X70497Y-63542D01* -X70736Y-63641D01* -X70994Y-63641D01* -X71233Y-63543D01* -X71358Y-63418D01* -X71481Y-63542D01* -X71720Y-63641D01* -X71979Y-63641D01* -X72217Y-63543D01* -X72342Y-63418D01* -X72466Y-63542D01* -X72704Y-63641D01* -X72963Y-63641D01* -X73202Y-63543D01* -X73326Y-63418D01* -X73450Y-63542D01* -X73689Y-63641D01* -X73947Y-63641D01* -X74186Y-63543D01* -X74311Y-63418D01* -X74434Y-63542D01* -X74673Y-63641D01* -X74931Y-63641D01* -X75170Y-63543D01* -X75295Y-63418D01* -X75418Y-63542D01* -X75657Y-63641D01* -X75916Y-63641D01* -X76154Y-63543D01* -X76279Y-63418D01* -X76403Y-63542D01* -X76641Y-63641D01* -X76900Y-63641D01* -X77139Y-63543D01* -X77263Y-63418D01* -X77387Y-63542D01* -X77626Y-63641D01* -X77884Y-63641D01* -X78123Y-63543D01* -X78248Y-63418D01* -X78371Y-63542D01* -X78610Y-63641D01* -X78868Y-63641D01* -X79107Y-63543D01* -X79232Y-63418D01* -X79355Y-63542D01* -X79594Y-63641D01* -X79853Y-63641D01* -X80091Y-63543D01* -X80216Y-63418D01* -X80340Y-63542D01* -X80578Y-63641D01* -X80837Y-63641D01* -X81076Y-63543D01* -X81200Y-63418D01* -X81324Y-63542D01* -X81563Y-63641D01* -X81821Y-63641D01* -X82060Y-63543D01* -X82185Y-63418D01* -X82308Y-63542D01* -X82547Y-63641D01* -X82805Y-63641D01* -X83044Y-63543D01* -X83169Y-63418D01* -X83292Y-63542D01* -X83531Y-63641D01* -X83790Y-63641D01* -X84028Y-63543D01* -X84153Y-63418D01* -X84277Y-63542D01* -X84515Y-63641D01* -X84774Y-63641D01* -X85013Y-63543D01* -X85137Y-63418D01* -X85261Y-63542D01* -X85500Y-63641D01* -X85758Y-63641D01* -X85997Y-63543D01* -X86122Y-63418D01* -X86245Y-63542D01* -X86484Y-63641D01* -X86742Y-63641D01* -X86981Y-63543D01* -X87106Y-63418D01* -X87229Y-63542D01* -X87468Y-63641D01* -X87727Y-63641D01* -X87965Y-63543D01* -X88090Y-63418D01* -X88214Y-63542D01* -X88452Y-63641D01* -X88711Y-63641D01* -X88950Y-63543D01* -X89074Y-63418D01* -X89198Y-63542D01* -X89437Y-63641D01* -X89695Y-63641D01* -X89934Y-63543D01* -X90059Y-63418D01* -X90182Y-63542D01* -X90421Y-63641D01* -X90679Y-63641D01* -X90918Y-63543D01* -X91043Y-63418D01* -X91166Y-63542D01* -X91405Y-63641D01* -X91664Y-63641D01* -X91902Y-63543D01* -X92027Y-63418D01* -X92151Y-63542D01* -X92389Y-63641D01* -X92648Y-63641D01* -X92887Y-63543D01* -X93011Y-63418D01* -X93135Y-63542D01* -X93374Y-63641D01* -X93632Y-63641D01* -X93871Y-63543D01* -X93996Y-63418D01* -X94119Y-63542D01* -X94358Y-63641D01* -X94616Y-63641D01* -X94855Y-63543D01* -X94980Y-63418D01* -X95103Y-63542D01* -X95342Y-63641D01* -X95601Y-63641D01* -X95839Y-63543D01* -X95964Y-63418D01* -X96088Y-63542D01* -X96326Y-63641D01* -X96585Y-63641D01* -X96824Y-63543D01* -X96948Y-63418D01* -X97072Y-63542D01* -X97311Y-63641D01* -X97569Y-63641D01* -X97808Y-63543D01* -X97933Y-63418D01* -X98056Y-63542D01* -X98295Y-63641D01* -X98553Y-63641D01* -X98792Y-63543D01* -X98917Y-63418D01* -X99040Y-63542D01* -X99279Y-63641D01* -X99538Y-63641D01* -X99776Y-63543D01* -X99901Y-63418D01* -X100025Y-63542D01* -X100263Y-63641D01* -X100522Y-63641D01* -X100761Y-63543D01* -X100885Y-63418D01* -X101009Y-63542D01* -X101248Y-63641D01* -X101506Y-63641D01* -X101745Y-63543D01* -X101870Y-63418D01* -X101993Y-63542D01* -X102232Y-63641D01* -X102490Y-63641D01* -X102729Y-63543D01* -X102854Y-63418D01* -X102978Y-63542D01* -X103216Y-63641D01* -X103475Y-63641D01* -X103713Y-63543D01* -X103838Y-63418D01* -X103962Y-63542D01* -X104200Y-63641D01* -X104459Y-63641D01* -X104698Y-63543D01* -X104881Y-63360D01* -X104980Y-63121D01* -X104980Y-62863D01* -X104881Y-62624D01* -X104881Y-58577D01* -X104964Y-58495D01* -X105078Y-58220D01* -X105078Y-57922D01* -X104965Y-57647D01* -X104881Y-57564D01* -X104881Y-56609D01* -X104964Y-56526D01* -X105078Y-56251D01* -X105078Y-55954D01* -X104965Y-55679D01* -X104754Y-55468D01* -X104480Y-55354D01* -X104182Y-55354D01* -X103907Y-55467D01* -X103891Y-55483D01* -X103855Y-55300D01* -X103736Y-55122D01* -X103736Y-55122D01* -X103495Y-54881D01* -X103769Y-54768D01* -X103980Y-54558D01* -X104094Y-54283D01* -X104094Y-53985D01* -X103980Y-53710D01* -X103770Y-53500D01* -X103495Y-53385D01* -X103198Y-53385D01* -X102923Y-53499D01* -X102913Y-53509D01* -X102913Y-52790D01* -X102922Y-52799D01* -X103197Y-52913D01* -X103494Y-52913D01* -X103769Y-52799D01* -X103980Y-52589D01* -X104094Y-52314D01* -X104094Y-52017D01* -X103980Y-51742D01* -X103770Y-51531D01* -X103495Y-51417D01* -X103198Y-51417D01* -X102923Y-51530D01* -X102913Y-51540D01* -X102913Y-51409D01* -X103377Y-50944D01* -X103494Y-50945D01* -X103769Y-50831D01* -X103980Y-50621D01* -X104094Y-50346D01* -X104094Y-50048D01* -X103980Y-49773D01* -X103897Y-49690D01* -X103897Y-48735D01* -X103980Y-48652D01* -X104094Y-48377D01* -X104094Y-48080D01* -X103980Y-47805D01* -X103770Y-47594D01* -X103590Y-47519D01* -X115866Y-47519D01* -X115866Y-66653D01* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Mask.gts b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Mask.gts deleted file mode 100644 index 07a3c3d020..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Mask.gts +++ /dev/null @@ -1,195 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -%ADD11C,0.0984252*% -%ADD12C,0.16*% -%ADD13R,0.06X0.06*% -%ADD14C,0.0787402*% -%ADD15C,0.15748*% -G04 APERTURE END LIST* -G54D10* -G54D11* -X104330Y-56102D03* -X102362Y-56102D03* -X100393Y-56102D03* -X98425Y-56102D03* -X96456Y-56102D03* -X94488Y-56102D03* -X92519Y-56102D03* -X90551Y-56102D03* -X88582Y-56102D03* -X86614Y-56102D03* -X84645Y-56102D03* -X82677Y-56102D03* -X80708Y-56102D03* -X78740Y-56102D03* -X76771Y-56102D03* -X74803Y-56102D03* -X72834Y-56102D03* -X70866Y-56102D03* -X68897Y-56102D03* -X104330Y-58070D03* -X102362Y-58070D03* -X100393Y-58070D03* -X98425Y-58070D03* -X96456Y-58070D03* -X94488Y-58070D03* -X92519Y-58070D03* -X90551Y-58070D03* -X88582Y-58070D03* -X86614Y-58070D03* -X84645Y-58070D03* -X82677Y-58070D03* -X80708Y-58070D03* -X78740Y-58070D03* -X76771Y-58070D03* -X74803Y-58070D03* -X72834Y-58070D03* -X70866Y-58070D03* -X68897Y-58070D03* -X103346Y-52165D03* -X101377Y-52165D03* -X99409Y-52165D03* -X97440Y-52165D03* -X95472Y-52165D03* -X93503Y-52165D03* -X91535Y-52165D03* -X89566Y-52165D03* -X87598Y-52165D03* -X85629Y-52165D03* -X83661Y-52165D03* -X81692Y-52165D03* -X79724Y-52165D03* -X77755Y-52165D03* -X75787Y-52165D03* -X73818Y-52165D03* -X71850Y-52165D03* -X69881Y-52165D03* -X103346Y-54133D03* -X101377Y-54133D03* -X99409Y-54133D03* -X97440Y-54133D03* -X95472Y-54133D03* -X93503Y-54133D03* -X91535Y-54133D03* -X89566Y-54133D03* -X87598Y-54133D03* -X85629Y-54133D03* -X83661Y-54133D03* -X81692Y-54133D03* -X79724Y-54133D03* -X77755Y-54133D03* -X75787Y-54133D03* -X73818Y-54133D03* -X71850Y-54133D03* -X69881Y-54133D03* -X103346Y-48228D03* -X101377Y-48228D03* -X99409Y-48228D03* -X97440Y-48228D03* -X95472Y-48228D03* -X93503Y-48228D03* -X91535Y-48228D03* -X89566Y-48228D03* -X87598Y-48228D03* -X85629Y-48228D03* -X83661Y-48228D03* -X81692Y-48228D03* -X79724Y-48228D03* -X77755Y-48228D03* -X75787Y-48228D03* -X73818Y-48228D03* -X71850Y-48228D03* -X69881Y-48228D03* -X103346Y-50196D03* -X101377Y-50196D03* -X99409Y-50196D03* -X97440Y-50196D03* -X95472Y-50196D03* -X93503Y-50196D03* -X91535Y-50196D03* -X89566Y-50196D03* -X87598Y-50196D03* -X85629Y-50196D03* -X83661Y-50196D03* -X81692Y-50196D03* -X79724Y-50196D03* -X77755Y-50196D03* -X75787Y-50196D03* -X73818Y-50196D03* -X71850Y-50196D03* -X69881Y-50196D03* -G54D12* -X114173Y-49212D03* -X114173Y-64960D03* -X59055Y-64960D03* -X59055Y-49212D03* -G54D13* -X62007Y-53149D03* -X111220Y-53149D03* -G54D14* -X104330Y-62992D03* -X102362Y-62992D03* -X100393Y-62992D03* -X98425Y-62992D03* -X96456Y-62992D03* -X94488Y-62992D03* -X92519Y-62992D03* -X90551Y-62992D03* -X88582Y-62992D03* -X86614Y-62992D03* -X84645Y-62992D03* -X82677Y-62992D03* -X80708Y-62992D03* -X78740Y-62992D03* -X76771Y-62992D03* -X74803Y-62992D03* -X72834Y-62992D03* -X70866Y-62992D03* -X68897Y-62992D03* -X103346Y-62992D03* -X101377Y-62992D03* -X99409Y-62992D03* -X97440Y-62992D03* -X95472Y-62992D03* -X93503Y-62992D03* -X91535Y-62992D03* -X89566Y-62992D03* -X87598Y-62992D03* -X85629Y-62992D03* -X83661Y-62992D03* -X81692Y-62992D03* -X79724Y-62992D03* -X77755Y-62992D03* -X75787Y-62992D03* -X73818Y-62992D03* -X71850Y-62992D03* -X69881Y-62992D03* -X103346Y-60039D03* -X101377Y-60039D03* -X99409Y-60039D03* -X97440Y-60039D03* -X95472Y-60039D03* -X93503Y-60039D03* -X91535Y-60039D03* -X89566Y-60039D03* -X87598Y-60039D03* -X85629Y-60039D03* -X83661Y-60039D03* -X81692Y-60039D03* -X79724Y-60039D03* -X77755Y-60039D03* -X75787Y-60039D03* -X73818Y-60039D03* -X71850Y-60039D03* -X69881Y-60039D03* -G54D15* -X65157Y-62204D03* -X108070Y-62204D03* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Paste.gtp b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Paste.gtp deleted file mode 100644 index c9e7e996f2..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_Paste.gtp +++ /dev/null @@ -1,12 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -G04 APERTURE END LIST* -G54D10* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_SilkS.gto b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_SilkS.gto deleted file mode 100644 index 3cf4ccc410..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15-F_SilkS.gto +++ /dev/null @@ -1,1409 +0,0 @@ -G04 (created by PCBNEW (2013-07-07 BZR 4022)-stable) date 23/09/2014 08:58:54* -%MOIN*% -G04 Gerber Fmt 3.4, Leading zero omitted, Abs format* -%FSLAX34Y34*% -G01* -G70* -G90* -G04 APERTURE LIST* -%ADD10C,0.00590551*% -%ADD11C,0.011811*% -%ADD12C,0.015*% -%ADD13C,0.006*% -%ADD14C,0.01*% -G04 APERTURE END LIST* -G54D10* -X62373Y-60864D02* -X62373Y-61126D01* -X62373Y-61089D02* -X62354Y-61107D01* -X62317Y-61126D01* -X62260Y-61126D01* -X62223Y-61107D01* -X62204Y-61070D01* -X62204Y-60864D01* -X62204Y-61070D02* -X62185Y-61107D01* -X62148Y-61126D01* -X62092Y-61126D01* -X62054Y-61107D01* -X62035Y-61070D01* -X62035Y-60864D01* -X61679Y-60864D02* -X61679Y-61070D01* -X61698Y-61107D01* -X61736Y-61126D01* -X61811Y-61126D01* -X61848Y-61107D01* -X61679Y-60883D02* -X61717Y-60864D01* -X61811Y-60864D01* -X61848Y-60883D01* -X61867Y-60920D01* -X61867Y-60958D01* -X61848Y-60995D01* -X61811Y-61014D01* -X61717Y-61014D01* -X61679Y-61032D01* -X61323Y-60864D02* -X61323Y-61257D01* -X61323Y-60883D02* -X61361Y-60864D01* -X61436Y-60864D01* -X61473Y-60883D01* -X61492Y-60901D01* -X61511Y-60939D01* -X61511Y-61051D01* -X61492Y-61089D01* -X61473Y-61107D01* -X61436Y-61126D01* -X61361Y-61126D01* -X61323Y-61107D01* -X60986Y-60883D02* -X61023Y-60864D01* -X61098Y-60864D01* -X61136Y-60883D01* -X61154Y-60920D01* -X61154Y-61070D01* -X61136Y-61107D01* -X61098Y-61126D01* -X61023Y-61126D01* -X60986Y-61107D01* -X60967Y-61070D01* -X60967Y-61032D01* -X61154Y-60995D01* -X60498Y-60864D02* -X60498Y-61257D01* -X60498Y-61107D02* -X60461Y-61126D01* -X60386Y-61126D01* -X60348Y-61107D01* -X60329Y-61089D01* -X60311Y-61051D01* -X60311Y-60939D01* -X60329Y-60901D01* -X60348Y-60883D01* -X60386Y-60864D01* -X60461Y-60864D01* -X60498Y-60883D01* -X60179Y-61126D02* -X60086Y-60864D01* -X59992Y-61126D02* -X60086Y-60864D01* -X60123Y-60770D01* -X60142Y-60751D01* -X60179Y-60733D01* -X59542Y-60864D02* -X59542Y-61257D01* -X59505Y-61014D02* -X59392Y-60864D01* -X59392Y-61126D02* -X59542Y-60976D01* -X59280Y-61126D02* -X59130Y-61126D01* -X59223Y-61257D02* -X59223Y-60920D01* -X59205Y-60883D01* -X59167Y-60864D01* -X59130Y-60864D01* -X58942Y-61089D02* -X58980Y-61107D01* -X58998Y-61126D01* -X59017Y-61164D01* -X59017Y-61182D01* -X58998Y-61220D01* -X58980Y-61239D01* -X58942Y-61257D01* -X58867Y-61257D01* -X58830Y-61239D01* -X58811Y-61220D01* -X58792Y-61182D01* -X58792Y-61164D01* -X58811Y-61126D01* -X58830Y-61107D01* -X58867Y-61089D01* -X58942Y-61089D01* -X58980Y-61070D01* -X58998Y-61051D01* -X59017Y-61014D01* -X59017Y-60939D01* -X58998Y-60901D01* -X58980Y-60883D01* -X58942Y-60864D01* -X58867Y-60864D01* -X58830Y-60883D01* -X58811Y-60901D01* -X58792Y-60939D01* -X58792Y-61014D01* -X58811Y-61051D01* -X58830Y-61070D01* -X58867Y-61089D01* -X58417Y-60864D02* -X58642Y-60864D01* -X58530Y-60864D02* -X58530Y-61257D01* -X58567Y-61201D01* -X58605Y-61164D01* -X58642Y-61145D01* -X58230Y-60864D02* -X58155Y-60864D01* -X58117Y-60883D01* -X58098Y-60901D01* -X58061Y-60958D01* -X58042Y-61032D01* -X58042Y-61182D01* -X58061Y-61220D01* -X58080Y-61239D01* -X58117Y-61257D01* -X58192Y-61257D01* -X58230Y-61239D01* -X58248Y-61220D01* -X58267Y-61182D01* -X58267Y-61089D01* -X58248Y-61051D01* -X58230Y-61032D01* -X58192Y-61014D01* -X58117Y-61014D01* -X58080Y-61032D01* -X58061Y-61051D01* -X58042Y-61089D01* -X57705Y-60864D02* -X57705Y-61070D01* -X57724Y-61107D01* -X57761Y-61126D01* -X57836Y-61126D01* -X57874Y-61107D01* -X57705Y-60883D02* -X57742Y-60864D01* -X57836Y-60864D01* -X57874Y-60883D01* -X57892Y-60920D01* -X57892Y-60958D01* -X57874Y-60995D01* -X57836Y-61014D01* -X57742Y-61014D01* -X57705Y-61032D01* -X60892Y-60516D02* -X60798Y-60254D01* -X60704Y-60516D01* -X60404Y-60272D02* -X60442Y-60254D01* -X60517Y-60254D01* -X60554Y-60272D01* -X60573Y-60310D01* -X60573Y-60460D01* -X60554Y-60497D01* -X60517Y-60516D01* -X60442Y-60516D01* -X60404Y-60497D01* -X60386Y-60460D01* -X60386Y-60422D01* -X60573Y-60385D01* -X60217Y-60254D02* -X60217Y-60516D01* -X60217Y-60441D02* -X60198Y-60479D01* -X60179Y-60497D01* -X60142Y-60516D01* -X60104Y-60516D01* -X59598Y-60647D02* -X59561Y-60647D01* -X59523Y-60628D01* -X59505Y-60610D01* -X59486Y-60572D01* -X59467Y-60497D01* -X59467Y-60404D01* -X59486Y-60329D01* -X59505Y-60291D01* -X59523Y-60272D01* -X59561Y-60254D01* -X59598Y-60254D01* -X59636Y-60272D01* -X59655Y-60291D01* -X59673Y-60329D01* -X59692Y-60404D01* -X59692Y-60497D01* -X59673Y-60572D01* -X59655Y-60610D01* -X59636Y-60628D01* -X59598Y-60647D01* -X59298Y-60291D02* -X59280Y-60272D01* -X59298Y-60254D01* -X59317Y-60272D01* -X59298Y-60291D01* -X59298Y-60254D01* -X58905Y-60254D02* -X59130Y-60254D01* -X59017Y-60254D02* -X59017Y-60647D01* -X59055Y-60591D01* -X59092Y-60553D01* -X59130Y-60535D01* -G54D11* -X62907Y-55764D02* -X63020Y-55821D01* -X63188Y-55821D01* -X63357Y-55764D01* -X63470Y-55652D01* -X63526Y-55539D01* -X63582Y-55314D01* -X63582Y-55146D01* -X63526Y-54921D01* -X63470Y-54808D01* -X63357Y-54696D01* -X63188Y-54640D01* -X63076Y-54640D01* -X62907Y-54696D01* -X62851Y-54752D01* -X62851Y-55146D01* -X63076Y-55146D01* -X62345Y-54640D02* -X62345Y-55821D01* -X61670Y-54640D01* -X61670Y-55821D01* -X61107Y-54640D02* -X61107Y-55821D01* -X60826Y-55821D01* -X60658Y-55764D01* -X60545Y-55652D01* -X60489Y-55539D01* -X60433Y-55314D01* -X60433Y-55146D01* -X60489Y-54921D01* -X60545Y-54808D01* -X60658Y-54696D01* -X60826Y-54640D01* -X61107Y-54640D01* -X112120Y-55764D02* -X112232Y-55821D01* -X112401Y-55821D01* -X112570Y-55764D01* -X112682Y-55652D01* -X112739Y-55539D01* -X112795Y-55314D01* -X112795Y-55146D01* -X112739Y-54921D01* -X112682Y-54808D01* -X112570Y-54696D01* -X112401Y-54640D01* -X112289Y-54640D01* -X112120Y-54696D01* -X112064Y-54752D01* -X112064Y-55146D01* -X112289Y-55146D01* -X111557Y-54640D02* -X111557Y-55821D01* -X110883Y-54640D01* -X110883Y-55821D01* -X110320Y-54640D02* -X110320Y-55821D01* -X110039Y-55821D01* -X109870Y-55764D01* -X109758Y-55652D01* -X109701Y-55539D01* -X109645Y-55314D01* -X109645Y-55146D01* -X109701Y-54921D01* -X109758Y-54808D01* -X109870Y-54696D01* -X110039Y-54640D01* -X110320Y-54640D01* -X67154Y-56608D02* -X67829Y-56608D01* -X67491Y-56608D02* -X67491Y-57789D01* -X67604Y-57620D01* -X67716Y-57508D01* -X67829Y-57452D01* -X66591Y-56608D02* -X66366Y-56608D01* -X66254Y-56664D01* -X66197Y-56721D01* -X66085Y-56889D01* -X66029Y-57114D01* -X66029Y-57564D01* -X66085Y-57677D01* -X66141Y-57733D01* -X66254Y-57789D01* -X66479Y-57789D01* -X66591Y-57733D01* -X66647Y-57677D01* -X66704Y-57564D01* -X66704Y-57283D01* -X66647Y-57170D01* -X66591Y-57114D01* -X66479Y-57058D01* -X66254Y-57058D01* -X66141Y-57114D01* -X66085Y-57170D01* -X66029Y-57283D01* -X68869Y-53852D02* -X68138Y-53852D01* -X68532Y-53402D01* -X68363Y-53402D01* -X68250Y-53346D01* -X68194Y-53290D01* -X68138Y-53177D01* -X68138Y-52896D01* -X68194Y-52784D01* -X68250Y-52727D01* -X68363Y-52671D01* -X68700Y-52671D01* -X68813Y-52727D01* -X68869Y-52784D01* -X67744Y-53852D02* -X66957Y-53852D01* -X67463Y-52671D01* -X68194Y-49915D02* -X68757Y-49915D01* -X68813Y-49353D01* -X68757Y-49409D01* -X68644Y-49465D01* -X68363Y-49465D01* -X68250Y-49409D01* -X68194Y-49353D01* -X68138Y-49240D01* -X68138Y-48959D01* -X68194Y-48847D01* -X68250Y-48790D01* -X68363Y-48734D01* -X68644Y-48734D01* -X68757Y-48790D01* -X68813Y-48847D01* -X67069Y-49915D02* -X67632Y-49915D01* -X67688Y-49353D01* -X67632Y-49409D01* -X67519Y-49465D01* -X67238Y-49465D01* -X67125Y-49409D01* -X67069Y-49353D01* -X67013Y-49240D01* -X67013Y-48959D01* -X67069Y-48847D01* -X67125Y-48790D01* -X67238Y-48734D01* -X67519Y-48734D01* -X67632Y-48790D01* -X67688Y-48847D01* -X106271Y-49915D02* -X105539Y-49915D01* -X105933Y-49465D01* -X105764Y-49465D01* -X105652Y-49409D01* -X105596Y-49353D01* -X105539Y-49240D01* -X105539Y-48959D01* -X105596Y-48847D01* -X105652Y-48790D01* -X105764Y-48734D01* -X106102Y-48734D01* -X106214Y-48790D01* -X106271Y-48847D01* -X104865Y-49409D02* -X104977Y-49465D01* -X105033Y-49521D01* -X105089Y-49634D01* -X105089Y-49690D01* -X105033Y-49803D01* -X104977Y-49859D01* -X104865Y-49915D01* -X104640Y-49915D01* -X104527Y-49859D01* -X104471Y-49803D01* -X104415Y-49690D01* -X104415Y-49634D01* -X104471Y-49521D01* -X104527Y-49465D01* -X104640Y-49409D01* -X104865Y-49409D01* -X104977Y-49353D01* -X105033Y-49296D01* -X105089Y-49184D01* -X105089Y-48959D01* -X105033Y-48847D01* -X104977Y-48790D01* -X104865Y-48734D01* -X104640Y-48734D01* -X104527Y-48790D01* -X104471Y-48847D01* -X104415Y-48959D01* -X104415Y-49184D01* -X104471Y-49296D01* -X104527Y-49353D01* -X104640Y-49409D01* -X106214Y-53740D02* -X106158Y-53796D01* -X106046Y-53852D01* -X105764Y-53852D01* -X105652Y-53796D01* -X105596Y-53740D01* -X105539Y-53627D01* -X105539Y-53515D01* -X105596Y-53346D01* -X106271Y-52671D01* -X105539Y-52671D01* -X104808Y-53852D02* -X104696Y-53852D01* -X104583Y-53796D01* -X104527Y-53740D01* -X104471Y-53627D01* -X104415Y-53402D01* -X104415Y-53121D01* -X104471Y-52896D01* -X104527Y-52784D01* -X104583Y-52727D01* -X104696Y-52671D01* -X104808Y-52671D01* -X104921Y-52727D01* -X104977Y-52784D01* -X105033Y-52896D01* -X105089Y-53121D01* -X105089Y-53402D01* -X105033Y-53627D01* -X104977Y-53740D01* -X104921Y-53796D01* -X104808Y-53852D01* -X105961Y-56608D02* -X106636Y-56608D01* -X106299Y-56608D02* -X106299Y-57789D01* -X106411Y-57620D01* -X106524Y-57508D01* -X106636Y-57452D01* -G54D10* -X95472Y-59055D02* -X95472Y-55118D01* -X95472Y-55118D02* -X93503Y-55118D01* -X93503Y-55118D02* -X93503Y-59055D01* -X93503Y-59055D02* -X91535Y-59055D01* -X91535Y-59055D02* -X91535Y-55118D01* -X91535Y-55118D02* -X89566Y-55118D01* -X89566Y-55118D02* -X89566Y-59055D01* -X89566Y-59055D02* -X87598Y-59055D01* -X87598Y-59055D02* -X87598Y-55118D01* -X87598Y-55118D02* -X85629Y-55118D01* -X85629Y-55118D02* -X85629Y-59055D01* -X85629Y-59055D02* -X83661Y-59055D01* -X83661Y-59055D02* -X83661Y-55118D01* -X83661Y-55118D02* -X81692Y-55118D01* -X81692Y-55118D02* -X81692Y-59055D01* -X81692Y-59055D02* -X79724Y-59055D01* -X79724Y-59055D02* -X79724Y-55118D01* -X79724Y-55118D02* -X77755Y-55118D01* -X77755Y-55118D02* -X77755Y-59055D01* -X77755Y-59055D02* -X75787Y-59055D01* -X75787Y-59055D02* -X75787Y-55118D01* -X75787Y-55118D02* -X73818Y-55118D01* -X73818Y-55118D02* -X73818Y-59055D01* -X73818Y-59055D02* -X71850Y-59055D01* -X71850Y-59055D02* -X71850Y-55118D01* -X71850Y-55118D02* -X69881Y-55118D01* -X69881Y-55118D02* -X69881Y-59055D01* -X97440Y-55118D02* -X97440Y-59055D01* -X99409Y-59055D02* -X99409Y-55118D01* -X101377Y-55118D02* -X101377Y-59055D01* -X103346Y-59055D02* -X103346Y-55118D01* -X105314Y-59055D02* -X105314Y-55118D01* -X105314Y-55118D02* -X67913Y-55118D01* -X67913Y-55118D02* -X67913Y-59055D01* -X67913Y-59055D02* -X105314Y-59055D01* -X104330Y-55118D02* -X68897Y-55118D01* -X104330Y-51181D02* -X68897Y-51181D01* -X94488Y-55118D02* -X94488Y-51181D01* -X94488Y-51181D02* -X92519Y-51181D01* -X92519Y-51181D02* -X92519Y-55118D01* -X92519Y-55118D02* -X90551Y-55118D01* -X90551Y-55118D02* -X90551Y-51181D01* -X90551Y-51181D02* -X88582Y-51181D01* -X88582Y-51181D02* -X88582Y-55118D01* -X88582Y-55118D02* -X86614Y-55118D01* -X86614Y-55118D02* -X86614Y-51181D01* -X86614Y-51181D02* -X84645Y-51181D01* -X84645Y-51181D02* -X84645Y-55118D01* -X84645Y-55118D02* -X82677Y-55118D01* -X82677Y-55118D02* -X82677Y-51181D01* -X82677Y-51181D02* -X80708Y-51181D01* -X80708Y-51181D02* -X80708Y-55118D01* -X80708Y-55118D02* -X78740Y-55118D01* -X78740Y-55118D02* -X78740Y-51181D01* -X78740Y-51181D02* -X76771Y-51181D01* -X76771Y-51181D02* -X76771Y-55118D01* -X76771Y-55118D02* -X74803Y-55118D01* -X74803Y-55118D02* -X74803Y-51181D01* -X74803Y-51181D02* -X72834Y-51181D01* -X72834Y-51181D02* -X72834Y-55118D01* -X72834Y-55118D02* -X70866Y-55118D01* -X70866Y-55118D02* -X70866Y-51181D01* -X70866Y-51181D02* -X68897Y-51181D01* -X68897Y-51181D02* -X68897Y-55118D01* -X96456Y-51181D02* -X96456Y-55118D01* -X98425Y-55118D02* -X98425Y-51181D01* -X100393Y-51181D02* -X100393Y-55118D01* -X102362Y-55118D02* -X102362Y-51181D01* -X104330Y-55118D02* -X104330Y-51181D01* -X104330Y-51181D02* -X68897Y-51181D01* -X104330Y-47244D02* -X68897Y-47244D01* -X94488Y-51181D02* -X94488Y-47244D01* -X94488Y-47244D02* -X92519Y-47244D01* -X92519Y-47244D02* -X92519Y-51181D01* -X92519Y-51181D02* -X90551Y-51181D01* -X90551Y-51181D02* -X90551Y-47244D01* -X90551Y-47244D02* -X88582Y-47244D01* -X88582Y-47244D02* -X88582Y-51181D01* -X88582Y-51181D02* -X86614Y-51181D01* -X86614Y-51181D02* -X86614Y-47244D01* -X86614Y-47244D02* -X84645Y-47244D01* -X84645Y-47244D02* -X84645Y-51181D01* -X84645Y-51181D02* -X82677Y-51181D01* -X82677Y-51181D02* -X82677Y-47244D01* -X82677Y-47244D02* -X80708Y-47244D01* -X80708Y-47244D02* -X80708Y-51181D01* -X80708Y-51181D02* -X78740Y-51181D01* -X78740Y-51181D02* -X78740Y-47244D01* -X78740Y-47244D02* -X76771Y-47244D01* -X76771Y-47244D02* -X76771Y-51181D01* -X76771Y-51181D02* -X74803Y-51181D01* -X74803Y-51181D02* -X74803Y-47244D01* -X74803Y-47244D02* -X72834Y-47244D01* -X72834Y-47244D02* -X72834Y-51181D01* -X72834Y-51181D02* -X70866Y-51181D01* -X70866Y-51181D02* -X70866Y-47244D01* -X70866Y-47244D02* -X68897Y-47244D01* -X68897Y-47244D02* -X68897Y-51181D01* -X96456Y-47244D02* -X96456Y-51181D01* -X98425Y-51181D02* -X98425Y-47244D01* -X100393Y-47244D02* -X100393Y-51181D01* -X102362Y-51181D02* -X102362Y-47244D01* -X104330Y-51181D02* -X104330Y-47244D01* -G54D12* -X115073Y-49212D02* -G75* -G03X115073Y-49212I-900J0D01* -G74* -G01* -X115073Y-64960D02* -G75* -G03X115073Y-64960I-900J0D01* -G74* -G01* -X59955Y-64960D02* -G75* -G03X59955Y-64960I-900J0D01* -G74* -G01* -X59955Y-49212D02* -G75* -G03X59955Y-49212I-900J0D01* -G74* -G01* -G54D13* -X62507Y-53649D02* -X61507Y-53649D01* -X61507Y-52649D02* -X62507Y-52649D01* -X61507Y-53649D02* -X61507Y-52649D01* -X62507Y-52649D02* -X62507Y-53649D01* -X111720Y-53649D02* -X110720Y-53649D01* -X110720Y-52649D02* -X111720Y-52649D01* -X110720Y-53649D02* -X110720Y-52649D01* -X111720Y-52649D02* -X111720Y-53649D01* -G54D10* -X64370Y-69488D02* -X59645Y-69488D01* -X59645Y-69488D02* -X59645Y-77559D01* -X59645Y-77559D02* -X113582Y-77559D01* -X113582Y-77559D02* -X113582Y-69488D01* -X113582Y-69488D02* -X108858Y-69488D01* -X108858Y-68503D02* -X108858Y-69488D01* -X108858Y-69488D02* -X64370Y-69488D01* -X64370Y-69488D02* -X64370Y-68503D01* -X106496Y-62992D02* -X106496Y-67519D01* -X66732Y-62992D02* -X66732Y-67519D01* -X109645Y-67519D02* -X63582Y-67519D01* -X63582Y-62992D02* -X63582Y-67519D01* -X63582Y-67519D02* -X62598Y-67519D01* -X62598Y-67519D02* -X62598Y-68503D01* -X62598Y-68503D02* -X109645Y-68503D01* -X109645Y-68503D02* -X110629Y-68503D01* -X110629Y-68503D02* -X110629Y-67519D01* -X110629Y-67519D02* -X109645Y-67519D01* -X109645Y-67519D02* -X109645Y-66732D01* -X109645Y-66732D02* -X109645Y-64566D01* -X109645Y-64566D02* -X109645Y-62992D01* -X66732Y-62992D02* -X66732Y-60629D01* -X66732Y-60629D02* -X63582Y-60629D01* -X63582Y-60629D02* -X63582Y-62992D01* -X106496Y-62992D02* -X106496Y-60629D01* -X106496Y-60629D02* -X109645Y-60629D01* -X109645Y-60629D02* -X109645Y-62992D01* -X65944Y-62204D02* -G75* -G03X65944Y-62204I-787J0D01* -G74* -G01* -X108858Y-62204D02* -G75* -G03X108858Y-62204I-787J0D01* -G74* -G01* -X103740Y-59448D02* -X105314Y-63779D01* -X105314Y-63779D02* -X67913Y-63779D01* -X67913Y-63779D02* -X69488Y-59448D01* -X69488Y-59448D02* -X103740Y-59448D01* -X86323Y-54293D02* -X86323Y-53899D01* -X86473Y-53899D01* -X86511Y-53918D01* -X86529Y-53937D01* -X86548Y-53974D01* -X86548Y-54030D01* -X86529Y-54068D01* -X86511Y-54086D01* -X86473Y-54105D01* -X86323Y-54105D01* -X86698Y-53937D02* -X86717Y-53918D01* -X86754Y-53899D01* -X86848Y-53899D01* -X86886Y-53918D01* -X86904Y-53937D01* -X86923Y-53974D01* -X86923Y-54011D01* -X86904Y-54068D01* -X86679Y-54293D01* -X86923Y-54293D01* -X85592Y-60161D02* -X85573Y-60179D01* -X85517Y-60198D01* -X85479Y-60198D01* -X85423Y-60179D01* -X85386Y-60142D01* -X85367Y-60104D01* -X85348Y-60029D01* -X85348Y-59973D01* -X85367Y-59898D01* -X85386Y-59861D01* -X85423Y-59823D01* -X85479Y-59805D01* -X85517Y-59805D01* -X85573Y-59823D01* -X85592Y-59842D01* -X85836Y-59805D02* -X85911Y-59805D01* -X85948Y-59823D01* -X85986Y-59861D01* -X86004Y-59936D01* -X86004Y-60067D01* -X85986Y-60142D01* -X85948Y-60179D01* -X85911Y-60198D01* -X85836Y-60198D01* -X85798Y-60179D01* -X85761Y-60142D01* -X85742Y-60067D01* -X85742Y-59936D01* -X85761Y-59861D01* -X85798Y-59823D01* -X85836Y-59805D01* -X86173Y-60198D02* -X86173Y-59805D01* -X86398Y-60198D01* -X86398Y-59805D01* -X86586Y-60198D02* -X86586Y-59805D01* -X86811Y-60198D01* -X86811Y-59805D01* -X86904Y-60236D02* -X87204Y-60236D01* -X87504Y-60198D02* -X87279Y-60198D01* -X87392Y-60198D02* -X87392Y-59805D01* -X87354Y-59861D01* -X87317Y-59898D01* -X87279Y-59917D01* -X87692Y-60198D02* -X87767Y-60198D01* -X87804Y-60179D01* -X87823Y-60161D01* -X87860Y-60104D01* -X87879Y-60029D01* -X87879Y-59880D01* -X87860Y-59842D01* -X87842Y-59823D01* -X87804Y-59805D01* -X87729Y-59805D01* -X87692Y-59823D01* -X87673Y-59842D01* -X87654Y-59880D01* -X87654Y-59973D01* -X87673Y-60011D01* -X87692Y-60029D01* -X87729Y-60048D01* -X87804Y-60048D01* -X87842Y-60029D01* -X87860Y-60011D01* -X87879Y-59973D01* -X86323Y-50356D02* -X86323Y-49962D01* -X86473Y-49962D01* -X86511Y-49981D01* -X86529Y-50000D01* -X86548Y-50037D01* -X86548Y-50093D01* -X86529Y-50131D01* -X86511Y-50149D01* -X86473Y-50168D01* -X86323Y-50168D01* -X86679Y-49962D02* -X86923Y-49962D01* -X86792Y-50112D01* -X86848Y-50112D01* -X86886Y-50131D01* -X86904Y-50149D01* -X86923Y-50187D01* -X86923Y-50281D01* -X86904Y-50318D01* -X86886Y-50337D01* -X86848Y-50356D01* -X86736Y-50356D01* -X86698Y-50337D01* -X86679Y-50318D01* -X85592Y-56224D02* -X85573Y-56242D01* -X85517Y-56261D01* -X85479Y-56261D01* -X85423Y-56242D01* -X85386Y-56205D01* -X85367Y-56167D01* -X85348Y-56092D01* -X85348Y-56036D01* -X85367Y-55961D01* -X85386Y-55924D01* -X85423Y-55886D01* -X85479Y-55868D01* -X85517Y-55868D01* -X85573Y-55886D01* -X85592Y-55905D01* -X85836Y-55868D02* -X85911Y-55868D01* -X85948Y-55886D01* -X85986Y-55924D01* -X86004Y-55999D01* -X86004Y-56130D01* -X85986Y-56205D01* -X85948Y-56242D01* -X85911Y-56261D01* -X85836Y-56261D01* -X85798Y-56242D01* -X85761Y-56205D01* -X85742Y-56130D01* -X85742Y-55999D01* -X85761Y-55924D01* -X85798Y-55886D01* -X85836Y-55868D01* -X86173Y-56261D02* -X86173Y-55868D01* -X86398Y-56261D01* -X86398Y-55868D01* -X86586Y-56261D02* -X86586Y-55868D01* -X86811Y-56261D01* -X86811Y-55868D01* -X86904Y-56299D02* -X87204Y-56299D01* -X87504Y-56261D02* -X87279Y-56261D01* -X87392Y-56261D02* -X87392Y-55868D01* -X87354Y-55924D01* -X87317Y-55961D01* -X87279Y-55980D01* -X87729Y-56036D02* -X87692Y-56017D01* -X87673Y-55999D01* -X87654Y-55961D01* -X87654Y-55943D01* -X87673Y-55905D01* -X87692Y-55886D01* -X87729Y-55868D01* -X87804Y-55868D01* -X87842Y-55886D01* -X87860Y-55905D01* -X87879Y-55943D01* -X87879Y-55961D01* -X87860Y-55999D01* -X87842Y-56017D01* -X87804Y-56036D01* -X87729Y-56036D01* -X87692Y-56055D01* -X87673Y-56074D01* -X87654Y-56111D01* -X87654Y-56186D01* -X87673Y-56224D01* -X87692Y-56242D01* -X87729Y-56261D01* -X87804Y-56261D01* -X87842Y-56242D01* -X87860Y-56224D01* -X87879Y-56186D01* -X87879Y-56111D01* -X87860Y-56074D01* -X87842Y-56055D01* -X87804Y-56036D01* -X86323Y-46419D02* -X86323Y-46025D01* -X86473Y-46025D01* -X86511Y-46044D01* -X86529Y-46062D01* -X86548Y-46100D01* -X86548Y-46156D01* -X86529Y-46194D01* -X86511Y-46212D01* -X86473Y-46231D01* -X86323Y-46231D01* -X86886Y-46156D02* -X86886Y-46419D01* -X86792Y-46006D02* -X86698Y-46287D01* -X86942Y-46287D01* -X85592Y-52287D02* -X85573Y-52305D01* -X85517Y-52324D01* -X85479Y-52324D01* -X85423Y-52305D01* -X85386Y-52268D01* -X85367Y-52230D01* -X85348Y-52155D01* -X85348Y-52099D01* -X85367Y-52024D01* -X85386Y-51987D01* -X85423Y-51949D01* -X85479Y-51931D01* -X85517Y-51931D01* -X85573Y-51949D01* -X85592Y-51968D01* -X85836Y-51931D02* -X85911Y-51931D01* -X85948Y-51949D01* -X85986Y-51987D01* -X86004Y-52062D01* -X86004Y-52193D01* -X85986Y-52268D01* -X85948Y-52305D01* -X85911Y-52324D01* -X85836Y-52324D01* -X85798Y-52305D01* -X85761Y-52268D01* -X85742Y-52193D01* -X85742Y-52062D01* -X85761Y-51987D01* -X85798Y-51949D01* -X85836Y-51931D01* -X86173Y-52324D02* -X86173Y-51931D01* -X86398Y-52324D01* -X86398Y-51931D01* -X86586Y-52324D02* -X86586Y-51931D01* -X86811Y-52324D01* -X86811Y-51931D01* -X86904Y-52362D02* -X87204Y-52362D01* -X87504Y-52324D02* -X87279Y-52324D01* -X87392Y-52324D02* -X87392Y-51931D01* -X87354Y-51987D01* -X87317Y-52024D01* -X87279Y-52043D01* -X87729Y-52099D02* -X87692Y-52080D01* -X87673Y-52062D01* -X87654Y-52024D01* -X87654Y-52005D01* -X87673Y-51968D01* -X87692Y-51949D01* -X87729Y-51931D01* -X87804Y-51931D01* -X87842Y-51949D01* -X87860Y-51968D01* -X87879Y-52005D01* -X87879Y-52024D01* -X87860Y-52062D01* -X87842Y-52080D01* -X87804Y-52099D01* -X87729Y-52099D01* -X87692Y-52118D01* -X87673Y-52137D01* -X87654Y-52174D01* -X87654Y-52249D01* -X87673Y-52287D01* -X87692Y-52305D01* -X87729Y-52324D01* -X87804Y-52324D01* -X87842Y-52305D01* -X87860Y-52287D01* -X87879Y-52249D01* -X87879Y-52174D01* -X87860Y-52137D01* -X87842Y-52118D01* -X87804Y-52099D01* -G54D14* -X113782Y-48174D02* -X113554Y-48174D01* -X113668Y-48174D02* -X113668Y-47774D01* -X113630Y-47831D01* -X113592Y-47869D01* -X113554Y-47888D01* -X113954Y-48174D02* -X113954Y-47774D01* -X114106Y-47774D01* -X114144Y-47793D01* -X114163Y-47812D01* -X114182Y-47850D01* -X114182Y-47907D01* -X114163Y-47945D01* -X114144Y-47964D01* -X114106Y-47984D01* -X113954Y-47984D01* -X114354Y-48174D02* -X114354Y-47774D01* -X114544Y-48174D02* -X114544Y-47774D01* -X114773Y-48174D01* -X114773Y-47774D01* -X113782Y-63922D02* -X113554Y-63922D01* -X113668Y-63922D02* -X113668Y-63522D01* -X113630Y-63579D01* -X113592Y-63617D01* -X113554Y-63636D01* -X113954Y-63922D02* -X113954Y-63522D01* -X114106Y-63522D01* -X114144Y-63541D01* -X114163Y-63560D01* -X114182Y-63598D01* -X114182Y-63655D01* -X114163Y-63693D01* -X114144Y-63713D01* -X114106Y-63732D01* -X113954Y-63732D01* -X114354Y-63922D02* -X114354Y-63522D01* -X114544Y-63922D02* -X114544Y-63522D01* -X114773Y-63922D01* -X114773Y-63522D01* -X58664Y-63922D02* -X58436Y-63922D01* -X58550Y-63922D02* -X58550Y-63522D01* -X58512Y-63579D01* -X58474Y-63617D01* -X58436Y-63636D01* -X58836Y-63922D02* -X58836Y-63522D01* -X58988Y-63522D01* -X59026Y-63541D01* -X59045Y-63560D01* -X59064Y-63598D01* -X59064Y-63655D01* -X59045Y-63693D01* -X59026Y-63713D01* -X58988Y-63732D01* -X58836Y-63732D01* -X59236Y-63922D02* -X59236Y-63522D01* -X59426Y-63922D02* -X59426Y-63522D01* -X59655Y-63922D01* -X59655Y-63522D01* -X58664Y-48174D02* -X58436Y-48174D01* -X58550Y-48174D02* -X58550Y-47774D01* -X58512Y-47831D01* -X58474Y-47869D01* -X58436Y-47888D01* -X58836Y-48174D02* -X58836Y-47774D01* -X58988Y-47774D01* -X59026Y-47793D01* -X59045Y-47812D01* -X59064Y-47850D01* -X59064Y-47907D01* -X59045Y-47945D01* -X59026Y-47964D01* -X58988Y-47984D01* -X58836Y-47984D01* -X59236Y-48174D02* -X59236Y-47774D01* -X59426Y-48174D02* -X59426Y-47774D01* -X59655Y-48174D01* -X59655Y-47774D01* -G54D13* -X61786Y-52521D02* -X61786Y-52221D01* -X61900Y-52221D01* -X61929Y-52235D01* -X61943Y-52249D01* -X61957Y-52278D01* -X61957Y-52321D01* -X61943Y-52349D01* -X61929Y-52363D01* -X61900Y-52378D01* -X61786Y-52378D01* -X62229Y-52221D02* -X62086Y-52221D01* -X62072Y-52363D01* -X62086Y-52349D01* -X62115Y-52335D01* -X62186Y-52335D01* -X62215Y-52349D01* -X62229Y-52363D01* -X62243Y-52392D01* -X62243Y-52463D01* -X62229Y-52492D01* -X62215Y-52506D01* -X62186Y-52521D01* -X62115Y-52521D01* -X62086Y-52506D01* -X62072Y-52492D01* -X110999Y-52521D02* -X110999Y-52221D01* -X111113Y-52221D01* -X111141Y-52235D01* -X111156Y-52249D01* -X111170Y-52278D01* -X111170Y-52321D01* -X111156Y-52349D01* -X111141Y-52363D01* -X111113Y-52378D01* -X110999Y-52378D01* -X111427Y-52221D02* -X111370Y-52221D01* -X111341Y-52235D01* -X111327Y-52249D01* -X111299Y-52292D01* -X111284Y-52349D01* -X111284Y-52463D01* -X111299Y-52492D01* -X111313Y-52506D01* -X111341Y-52521D01* -X111399Y-52521D01* -X111427Y-52506D01* -X111441Y-52492D01* -X111456Y-52463D01* -X111456Y-52392D01* -X111441Y-52363D01* -X111427Y-52349D01* -X111399Y-52335D01* -X111341Y-52335D01* -X111313Y-52349D01* -X111299Y-52363D01* -X111284Y-52392D01* -G54D10* -X86323Y-73978D02* -X86323Y-73584D01* -X86473Y-73584D01* -X86511Y-73603D01* -X86529Y-73622D01* -X86548Y-73659D01* -X86548Y-73715D01* -X86529Y-73753D01* -X86511Y-73772D01* -X86473Y-73790D01* -X86323Y-73790D01* -X86923Y-73978D02* -X86698Y-73978D01* -X86811Y-73978D02* -X86811Y-73584D01* -X86773Y-73640D01* -X86736Y-73678D01* -X86698Y-73697D01* -X74643Y-59017D02* -X74718Y-59017D01* -X74756Y-58998D01* -X74775Y-58980D01* -X74812Y-58923D01* -X74831Y-58848D01* -X74831Y-58698D01* -X74812Y-58661D01* -X74793Y-58642D01* -X74756Y-58623D01* -X74681Y-58623D01* -X74643Y-58642D01* -X74625Y-58661D01* -X74606Y-58698D01* -X74606Y-58792D01* -X74625Y-58830D01* -X74643Y-58848D01* -X74681Y-58867D01* -X74756Y-58867D01* -X74793Y-58848D01* -X74812Y-58830D01* -X74831Y-58792D01* -X75168Y-58623D02* -X75093Y-58623D01* -X75056Y-58642D01* -X75037Y-58661D01* -X75000Y-58717D01* -X74981Y-58792D01* -X74981Y-58942D01* -X75000Y-58980D01* -X75018Y-58998D01* -X75056Y-59017D01* -X75131Y-59017D01* -X75168Y-58998D01* -X75187Y-58980D01* -X75206Y-58942D01* -X75206Y-58848D01* -X75187Y-58811D01* -X75168Y-58792D01* -X75131Y-58773D01* -X75056Y-58773D01* -X75018Y-58792D01* -X75000Y-58811D01* -X74981Y-58848D01* -X75337Y-58623D02* -X75581Y-58623D01* -X75449Y-58773D01* -X75506Y-58773D01* -X75543Y-58792D01* -X75562Y-58811D01* -X75581Y-58848D01* -X75581Y-58942D01* -X75562Y-58980D01* -X75543Y-58998D01* -X75506Y-59017D01* -X75393Y-59017D01* -X75356Y-58998D01* -X75337Y-58980D01* -X75824Y-58623D02* -X75862Y-58623D01* -X75899Y-58642D01* -X75918Y-58661D01* -X75937Y-58698D01* -X75956Y-58773D01* -X75956Y-58867D01* -X75937Y-58942D01* -X75918Y-58980D01* -X75899Y-58998D01* -X75862Y-59017D01* -X75824Y-59017D01* -X75787Y-58998D01* -X75768Y-58980D01* -X75749Y-58942D01* -X75731Y-58867D01* -X75731Y-58773D01* -X75749Y-58698D01* -X75768Y-58661D01* -X75787Y-58642D01* -X75824Y-58623D01* -X76293Y-58623D02* -X76218Y-58623D01* -X76181Y-58642D01* -X76162Y-58661D01* -X76124Y-58717D01* -X76106Y-58792D01* -X76106Y-58942D01* -X76124Y-58980D01* -X76143Y-58998D01* -X76181Y-59017D01* -X76256Y-59017D01* -X76293Y-58998D01* -X76312Y-58980D01* -X76331Y-58942D01* -X76331Y-58848D01* -X76312Y-58811D01* -X76293Y-58792D01* -X76256Y-58773D01* -X76181Y-58773D01* -X76143Y-58792D01* -X76124Y-58811D01* -X76106Y-58848D01* -X76462Y-58623D02* -X76706Y-58623D01* -X76574Y-58773D01* -X76631Y-58773D01* -X76668Y-58792D01* -X76687Y-58811D01* -X76706Y-58848D01* -X76706Y-58942D01* -X76687Y-58980D01* -X76668Y-58998D01* -X76631Y-59017D01* -X76518Y-59017D01* -X76481Y-58998D01* -X76462Y-58980D01* -X76781Y-59055D02* -X77080Y-59055D01* -X77380Y-59017D02* -X77155Y-59017D01* -X77268Y-59017D02* -X77268Y-58623D01* -X77230Y-58680D01* -X77193Y-58717D01* -X77155Y-58736D01* -X77737Y-58623D02* -X77549Y-58623D01* -X77530Y-58811D01* -X77549Y-58792D01* -X77587Y-58773D01* -X77680Y-58773D01* -X77718Y-58792D01* -X77737Y-58811D01* -X77755Y-58848D01* -X77755Y-58942D01* -X77737Y-58980D01* -X77718Y-58998D01* -X77680Y-59017D01* -X77587Y-59017D01* -X77549Y-58998D01* -X77530Y-58980D01* -M02* diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15.drl b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15.drl deleted file mode 100644 index 6559172e0a..0000000000 --- a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15.drl +++ /dev/null @@ -1,194 +0,0 @@ -M48 -;DRILL file {Pcbnew (2013-07-07 BZR 4022)-stable} date 23/09/2014 08:58:57 -;FORMAT={-:-/ absolute / inch / decimal} -FMAT,2 -INCH,TZ -T1C0.039 -T2C0.040 -T3C0.055 -T4C0.120 -T5C0.157 -% -G90 -G05 -M72 -T1 -X6.8898Y-5.6102 -X6.8898Y-5.8071 -X6.9882Y-4.8228 -X6.9882Y-5.0197 -X6.9882Y-5.2165 -X6.9882Y-5.4134 -X7.0866Y-5.6102 -X7.0866Y-5.8071 -X7.185Y-4.8228 -X7.185Y-5.0197 -X7.185Y-5.2165 -X7.185Y-5.4134 -X7.2835Y-5.6102 -X7.2835Y-5.8071 -X7.3819Y-4.8228 -X7.3819Y-5.0197 -X7.3819Y-5.2165 -X7.3819Y-5.4134 -X7.4803Y-5.6102 -X7.4803Y-5.8071 -X7.5787Y-4.8228 -X7.5787Y-5.0197 -X7.5787Y-5.2165 -X7.5787Y-5.4134 -X7.6772Y-5.6102 -X7.6772Y-5.8071 -X7.7756Y-4.8228 -X7.7756Y-5.0197 -X7.7756Y-5.2165 -X7.7756Y-5.4134 -X7.874Y-5.6102 -X7.874Y-5.8071 -X7.9724Y-4.8228 -X7.9724Y-5.0197 -X7.9724Y-5.2165 -X7.9724Y-5.4134 -X8.0709Y-5.6102 -X8.0709Y-5.8071 -X8.1693Y-4.8228 -X8.1693Y-5.0197 -X8.1693Y-5.2165 -X8.1693Y-5.4134 -X8.2677Y-5.6102 -X8.2677Y-5.8071 -X8.3661Y-4.8228 -X8.3661Y-5.0197 -X8.3661Y-5.2165 -X8.3661Y-5.4134 -X8.4646Y-5.6102 -X8.4646Y-5.8071 -X8.563Y-4.8228 -X8.563Y-5.0197 -X8.563Y-5.2165 -X8.563Y-5.4134 -X8.6614Y-5.6102 -X8.6614Y-5.8071 -X8.7598Y-4.8228 -X8.7598Y-5.0197 -X8.7598Y-5.2165 -X8.7598Y-5.4134 -X8.8583Y-5.6102 -X8.8583Y-5.8071 -X8.9567Y-4.8228 -X8.9567Y-5.0197 -X8.9567Y-5.2165 -X8.9567Y-5.4134 -X9.0551Y-5.6102 -X9.0551Y-5.8071 -X9.1535Y-4.8228 -X9.1535Y-5.0197 -X9.1535Y-5.2165 -X9.1535Y-5.4134 -X9.252Y-5.6102 -X9.252Y-5.8071 -X9.3504Y-4.8228 -X9.3504Y-5.0197 -X9.3504Y-5.2165 -X9.3504Y-5.4134 -X9.4488Y-5.6102 -X9.4488Y-5.8071 -X9.5472Y-4.8228 -X9.5472Y-5.0197 -X9.5472Y-5.2165 -X9.5472Y-5.4134 -X9.6457Y-5.6102 -X9.6457Y-5.8071 -X9.7441Y-4.8228 -X9.7441Y-5.0197 -X9.7441Y-5.2165 -X9.7441Y-5.4134 -X9.8425Y-5.6102 -X9.8425Y-5.8071 -X9.9409Y-4.8228 -X9.9409Y-5.0197 -X9.9409Y-5.2165 -X9.9409Y-5.4134 -X10.0394Y-5.6102 -X10.0394Y-5.8071 -X10.1378Y-4.8228 -X10.1378Y-5.0197 -X10.1378Y-5.2165 -X10.1378Y-5.4134 -X10.2362Y-5.6102 -X10.2362Y-5.8071 -X10.3346Y-4.8228 -X10.3346Y-5.0197 -X10.3346Y-5.2165 -X10.3346Y-5.4134 -X10.4331Y-5.6102 -X10.4331Y-5.8071 -T2 -X6.2008Y-5.315 -X11.122Y-5.315 -T3 -X6.8898Y-6.2992 -X6.9882Y-6.0039 -X6.9882Y-6.2992 -X7.0866Y-6.2992 -X7.185Y-6.0039 -X7.185Y-6.2992 -X7.2835Y-6.2992 -X7.3819Y-6.0039 -X7.3819Y-6.2992 -X7.4803Y-6.2992 -X7.5787Y-6.0039 -X7.5787Y-6.2992 -X7.6772Y-6.2992 -X7.7756Y-6.0039 -X7.7756Y-6.2992 -X7.874Y-6.2992 -X7.9724Y-6.0039 -X7.9724Y-6.2992 -X8.0709Y-6.2992 -X8.1693Y-6.0039 -X8.1693Y-6.2992 -X8.2677Y-6.2992 -X8.3661Y-6.0039 -X8.3661Y-6.2992 -X8.4646Y-6.2992 -X8.563Y-6.0039 -X8.563Y-6.2992 -X8.6614Y-6.2992 -X8.7598Y-6.0039 -X8.7598Y-6.2992 -X8.8583Y-6.2992 -X8.9567Y-6.0039 -X8.9567Y-6.2992 -X9.0551Y-6.2992 -X9.1535Y-6.0039 -X9.1535Y-6.2992 -X9.252Y-6.2992 -X9.3504Y-6.0039 -X9.3504Y-6.2992 -X9.4488Y-6.2992 -X9.5472Y-6.0039 -X9.5472Y-6.2992 -X9.6457Y-6.2992 -X9.7441Y-6.0039 -X9.7441Y-6.2992 -X9.8425Y-6.2992 -X9.9409Y-6.0039 -X9.9409Y-6.2992 -X10.0394Y-6.2992 -X10.1378Y-6.0039 -X10.1378Y-6.2992 -X10.2362Y-6.2992 -X10.3346Y-6.0039 -X10.3346Y-6.2992 -X10.4331Y-6.2992 -T4 -X5.9055Y-4.9213 -X5.9055Y-6.4961 -X11.4173Y-4.9213 -X11.4173Y-6.4961 -T5 -X6.5157Y-6.2205 -X10.8071Y-6.2205 -T0 -M30 diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15_55_pin_connector_gerbers_0_0.zip b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15_55_pin_connector_gerbers_0_0.zip new file mode 100644 index 0000000000000000000000000000000000000000..0c3ac94ade28a1b190c03126447cbe52a71e8dd7 GIT binary patch literal 24692 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 AOaK4? literal 0 HcmV?d00001 From 3bbad30fd27eded48b3ff0c645c599d54601388d Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 1 Mar 2020 21:30:04 -0500 Subject: [PATCH 078/171] Strategy 2019 is Strategy 2020 --- misc/Strategy_2019.md | 2 ++ misc/Strategy_2020.md | 1 + 2 files changed, 3 insertions(+) create mode 100644 misc/Strategy_2020.md diff --git a/misc/Strategy_2019.md b/misc/Strategy_2019.md index 183c0abd27..a168bdbd2b 100644 --- a/misc/Strategy_2019.md +++ b/misc/Strategy_2019.md @@ -1,3 +1,5 @@ +[Update: this is still rusEfi strategy even for 2020] + 1a) As of June 2019, rusEfi has a _LOT_ of potential but probably is pretty far from being easily usable and pretty far from being easy to use. diff --git a/misc/Strategy_2020.md b/misc/Strategy_2020.md new file mode 100644 index 0000000000..0e9c979b44 --- /dev/null +++ b/misc/Strategy_2020.md @@ -0,0 +1 @@ +Nothing has changed - see [Strategy 2019](Strategy_2019.md) \ No newline at end of file From 7b8252ea1eeed7ef629820811d77102f411d957c Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 1 Mar 2020 21:31:00 -0500 Subject: [PATCH 079/171] Strategy 2019 is Strategy 2020 --- misc/Strategy_2019.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/Strategy_2019.md b/misc/Strategy_2019.md index a168bdbd2b..e24c13c980 100644 --- a/misc/Strategy_2019.md +++ b/misc/Strategy_2019.md @@ -15,7 +15,7 @@ the software are extremely limited. 1m) In order to get more developers to contribute to rusEfi firmware and content, rusEfi Strategy 2017 and Strategy 2018 was to provide kits and assembled units of highly flexible but large and not very cheap [Frankenso](https://rusefi.com/wiki/index.php?title=Hardware:For_Sale) board. -1s) rusEfi Strategy 2019 is to provide the community with smaller and cheaper boards. Maybe [microRusEfi](https://github.com/960/hw_microRusEfi) maybe +1s) rusEfi Strategy 2019 (Update: and 2020) is to provide the community with smaller and cheaper boards. Maybe [microRusEfi](https://github.com/960/hw_microRusEfi) maybe [Deucalion](https://rusefi.com/forum/viewtopic.php?f=4&t=1516). 1z) it is NOT rusEfi Strategy 2019 to market rusEfi to a wide retail audience. The lack of documentation and the steep From 2db8157e44137cf60a5bf39a9554b80c4089688b Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 1 Mar 2020 22:32:09 -0500 Subject: [PATCH 080/171] better setting name and help? --- .../algo/engine_configuration_generated_structures.h | 6 +++--- .../generated/engine_configuration_generated_structures.h | 6 +++--- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 6 +++--- firmware/tunerstudio/rusefi.input | 2 +- firmware/tunerstudio/rusefi_frankenso.ini | 6 +++--- firmware/tunerstudio/rusefi_kinetis.ini | 6 +++--- firmware/tunerstudio/rusefi_microrusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_prometheus.ini | 6 +++--- firmware/tunerstudio/rusefi_proteus.ini | 6 +++--- 10 files changed, 25 insertions(+), 25 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 647e992dae..9da3a3e580 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Feb 27 01:01:33 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 01 22:31:05 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -818,7 +818,7 @@ struct engine_configuration_s { */ angle_t globalTriggerAngleOffset; /** - * Coefficient of input voltage dividers on your PCB + * Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v. * offset 460 */ float analogInputDividerCoefficient; @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Feb 27 01:01:33 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 01 22:31:05 EST 2020 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 54c4daf4b5..5bb237d6f9 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:20 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:46 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -818,7 +818,7 @@ struct engine_configuration_s { */ angle_t globalTriggerAngleOffset; /** - * Coefficient of input voltage dividers on your PCB + * Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v. * offset 460 */ float analogInputDividerCoefficient; @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 01:01:20 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:46 EST 2020 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 557cacd6c2..eef664331e 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -419,7 +419,7 @@ angle_t globalTriggerAngleOffset;+Angle between Top Dead Center (TDC) and the fi -float analogInputDividerCoefficient;+Coefficient of input voltage dividers on your PCB;"coef", 1, 0, 0.01, 10.0, 2 +float analogInputDividerCoefficient;+Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v.;"coef", 1, 0, 0.01, 10.0, 2 float vbattDividerCoeff;+This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading.;"coef", 1, 0, 0.01, 99.0, 2 float fsio_visible fanOnTemperature;+Cooling fan turn-on temperature threshold, in Celsius;"*C", 1, 0, 0, 1000.0, 0 diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 86afc14072..2454f7be41 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:43 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:46 EST 2020 pageSize = 20000 page = 1 @@ -1109,7 +1109,7 @@ page = 1 timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Coefficient of input voltage dividers on your PCB" + analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" @@ -3363,7 +3363,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider", analogInputDividerCoefficient + field = "Analog divider ratio", analogInputDividerCoefficient field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 2e946dd59e..3dd8b76518 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2239,7 +2239,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider", analogInputDividerCoefficient@@if_ts_show_analog_divider + field = "Analog divider ratio", analogInputDividerCoefficient@@if_ts_show_analog_divider field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 286363d714..6f7b3b0a5f 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:50 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:53 EST 2020 pageSize = 20000 page = 1 @@ -1109,7 +1109,7 @@ page = 1 timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Coefficient of input voltage dividers on your PCB" + analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" @@ -3363,7 +3363,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider", analogInputDividerCoefficient + field = "Analog divider ratio", analogInputDividerCoefficient field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 0b258fafa6..e1882331ab 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Feb 28 18:12:00 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 01 22:31:05 EST 2020 pageSize = 20000 page = 1 @@ -1109,7 +1109,7 @@ page = 1 timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Coefficient of input voltage dividers on your PCB" + analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" @@ -3363,7 +3363,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider", analogInputDividerCoefficient + field = "Analog divider ratio", analogInputDividerCoefficient field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index d693d8c4a9..542ae1e09b 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 09:19:06 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:50 EST 2020 pageSize = 20000 page = 1 @@ -1109,7 +1109,7 @@ page = 1 timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Coefficient of input voltage dividers on your PCB" + analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index c1dc643396..0e6457fef7 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:53 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:57 EST 2020 pageSize = 20000 page = 1 @@ -1109,7 +1109,7 @@ page = 1 timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Coefficient of input voltage dividers on your PCB" + analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" @@ -3359,7 +3359,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider", analogInputDividerCoefficient + field = "Analog divider ratio", analogInputDividerCoefficient field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index b800c4e0f2..e5e512899e 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 28 18:11:57 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:31:01 EST 2020 pageSize = 20000 page = 1 @@ -1109,7 +1109,7 @@ page = 1 timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Coefficient of input voltage dividers on your PCB" + analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" @@ -3363,7 +3363,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider", analogInputDividerCoefficient + field = "Analog divider ratio", analogInputDividerCoefficient field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} From 102f4240c732f44115fd8f20ab07820caef9174a Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 2 Mar 2020 13:24:19 -0500 Subject: [PATCH 081/171] silk improvement --- .../963063-15.kicad_pcb | 10 +++++----- ...963063-15_55_pin_connector_gerbers_0_1.zip | Bin 33361 -> 33478 bytes 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hardware/963063-15_55_pin_connector/963063-15.kicad_pcb b/hardware/963063-15_55_pin_connector/963063-15.kicad_pcb index bdc48fa3b6..5e91420734 100644 --- a/hardware/963063-15_55_pin_connector/963063-15.kicad_pcb +++ b/hardware/963063-15_55_pin_connector/963063-15.kicad_pcb @@ -15,12 +15,12 @@ (page A3) (layers (0 F.Cu signal hide) - (31 B.Cu signal) + (31 B.Cu signal hide) (32 B.Adhes user) (33 F.Adhes user) - (34 B.Paste user hide) + (34 B.Paste user) (35 F.Paste user) - (36 B.SilkS user hide) + (36 B.SilkS user) (37 F.SilkS user) (38 B.Mask user) (39 F.Mask user) @@ -891,10 +891,10 @@ (gr_text 8 (at 229.87 145.034 180) (layer B.SilkS) (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) ) - (gr_text "rusEfi 55 pin\n0.1" (at 282.448 147.066 180) (layer F.SilkS) + (gr_text "rusEfi 55 pin\nTE 0.1" (at 282.448 147.066 180) (layer F.SilkS) (effects (font (size 2 2) (thickness 0.3))) ) - (gr_text "rusEfi 55 pin\n0.1" (at 282.448 147.066 180) (layer B.SilkS) + (gr_text "rusEfi 55 pin\nTE 0.1" (at 282.448 147.066 180) (layer B.SilkS) (effects (font (size 2 2) (thickness 0.3)) (justify mirror)) ) (gr_line (start 265 120) (end 265 130) (angle 90) (layer B.SilkS) (width 0.2)) diff --git a/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15_55_pin_connector_gerbers_0_1.zip b/hardware/963063-15_55_pin_connector/963063-15_55_pin_connector_gerbers/963063-15_55_pin_connector_gerbers_0_1.zip index 454711c98aa5591096fde39dfbd318c291e4e9d5..1b2d78ca9589b891726de2e5fe40901c6d597bef 100644 GIT binary patch delta 25178 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 delta 25035 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 Date: Mon, 2 Mar 2020 19:14:29 -0500 Subject: [PATCH 082/171] status update --- work_in_progress.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/work_in_progress.md b/work_in_progress.md index 5db85508a9..8b9efab9df 100644 --- a/work_in_progress.md +++ b/work_in_progress.md @@ -1,3 +1,8 @@ +Mar, 02 2020 status: +* playing with some GDI software, but now waiting for repaired MC33816 to come from Seattle +* Matt and DronoGus are working on different parts of getting stepper control using two universal H-bridged, that would give us stepper idle control on microRusEfi. +* A _lot_ of hardware to play with - v12 on Manhattan, v12 on Proteus, setting up microRusEfi fabrication. + Dec, 28 2019 status: * playing with some GDI while waiting for proteus 0.2 and microRusEfi 0.4.6 * [DONE] top priority is https://github.com/rusefi/rusefi/issues/1011 Fix and expand commit gate check From 3bf4219ad6e776833de92dd09e486d8ba46f115d Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 2 Mar 2020 19:49:47 -0500 Subject: [PATCH 083/171] useHbridges --- ...ngine_configuration_generated_structures.h | 64 +++--- .../controllers/algo/rusefi_generated.h | 120 ++++++------ ...ngine_configuration_generated_structures.h | 64 +++--- .../controllers/generated/rusefi_generated.h | 120 ++++++------ firmware/integration/rusefi_config.txt | 30 +++ firmware/tunerstudio/rusefi.ini | 63 +++--- firmware/tunerstudio/rusefi.input | 1 + firmware/tunerstudio/rusefi_frankenso.ini | 63 +++--- firmware/tunerstudio/rusefi_kinetis.ini | 63 +++--- firmware/tunerstudio/rusefi_microrusefi.ini | 63 +++--- firmware/tunerstudio/rusefi_prometheus.ini | 63 +++--- firmware/tunerstudio/rusefi_proteus.ini | 63 +++--- .../com/rusefi/config/generated/Fields.java | 182 +++++++++--------- 13 files changed, 498 insertions(+), 461 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 9da3a3e580..8d88f9732d 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 01 22:31:05 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 02 19:46:02 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1586,94 +1586,94 @@ struct engine_configuration_s { bool todoClutchDownPinInverted : 1; /** offset 976 bit 2 */ - bool unusedBit_250_2 : 1; + bool useHbridges : 1; /** offset 976 bit 3 */ - bool unusedBit_250_3 : 1; + bool unusedBit_251_3 : 1; /** offset 976 bit 4 */ - bool unusedBit_250_4 : 1; + bool unusedBit_251_4 : 1; /** offset 976 bit 5 */ - bool unusedBit_250_5 : 1; + bool unusedBit_251_5 : 1; /** offset 976 bit 6 */ - bool unusedBit_250_6 : 1; + bool unusedBit_251_6 : 1; /** offset 976 bit 7 */ - bool unusedBit_250_7 : 1; + bool unusedBit_251_7 : 1; /** offset 976 bit 8 */ - bool unusedBit_250_8 : 1; + bool unusedBit_251_8 : 1; /** offset 976 bit 9 */ - bool unusedBit_250_9 : 1; + bool unusedBit_251_9 : 1; /** offset 976 bit 10 */ - bool unusedBit_250_10 : 1; + bool unusedBit_251_10 : 1; /** offset 976 bit 11 */ - bool unusedBit_250_11 : 1; + bool unusedBit_251_11 : 1; /** offset 976 bit 12 */ - bool unusedBit_250_12 : 1; + bool unusedBit_251_12 : 1; /** offset 976 bit 13 */ - bool unusedBit_250_13 : 1; + bool unusedBit_251_13 : 1; /** offset 976 bit 14 */ - bool unusedBit_250_14 : 1; + bool unusedBit_251_14 : 1; /** offset 976 bit 15 */ - bool unusedBit_250_15 : 1; + bool unusedBit_251_15 : 1; /** offset 976 bit 16 */ - bool unusedBit_250_16 : 1; + bool unusedBit_251_16 : 1; /** offset 976 bit 17 */ - bool unusedBit_250_17 : 1; + bool unusedBit_251_17 : 1; /** offset 976 bit 18 */ - bool unusedBit_250_18 : 1; + bool unusedBit_251_18 : 1; /** offset 976 bit 19 */ - bool unusedBit_250_19 : 1; + bool unusedBit_251_19 : 1; /** offset 976 bit 20 */ - bool unusedBit_250_20 : 1; + bool unusedBit_251_20 : 1; /** offset 976 bit 21 */ - bool unusedBit_250_21 : 1; + bool unusedBit_251_21 : 1; /** offset 976 bit 22 */ - bool unusedBit_250_22 : 1; + bool unusedBit_251_22 : 1; /** offset 976 bit 23 */ - bool unusedBit_250_23 : 1; + bool unusedBit_251_23 : 1; /** offset 976 bit 24 */ - bool unusedBit_250_24 : 1; + bool unusedBit_251_24 : 1; /** offset 976 bit 25 */ - bool unusedBit_250_25 : 1; + bool unusedBit_251_25 : 1; /** offset 976 bit 26 */ - bool unusedBit_250_26 : 1; + bool unusedBit_251_26 : 1; /** offset 976 bit 27 */ - bool unusedBit_250_27 : 1; + bool unusedBit_251_27 : 1; /** offset 976 bit 28 */ - bool unusedBit_250_28 : 1; + bool unusedBit_251_28 : 1; /** offset 976 bit 29 */ - bool unusedBit_250_29 : 1; + bool unusedBit_251_29 : 1; /** offset 976 bit 30 */ - bool unusedBit_250_30 : 1; + bool unusedBit_278_30 : 1; /** offset 976 bit 31 */ - bool unusedBit_250_31 : 1; + bool unusedBit_278_31 : 1; /** * offset 980 */ @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 01 22:31:05 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 02 19:46:02 EST 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index a8647b27fa..05449e47bc 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -2077,66 +2077,64 @@ #define unusedAtOldBoardConfigurationEnd_offset_hex 41c #define unusedBit4_1476_offset 1476 #define unusedBit4_1476_offset_hex 5c4 -#define unusedBit_250_10_offset 976 -#define unusedBit_250_10_offset_hex 3d0 -#define unusedBit_250_11_offset 976 -#define unusedBit_250_11_offset_hex 3d0 -#define unusedBit_250_12_offset 976 -#define unusedBit_250_12_offset_hex 3d0 -#define unusedBit_250_13_offset 976 -#define unusedBit_250_13_offset_hex 3d0 -#define unusedBit_250_14_offset 976 -#define unusedBit_250_14_offset_hex 3d0 -#define unusedBit_250_15_offset 976 -#define unusedBit_250_15_offset_hex 3d0 -#define unusedBit_250_16_offset 976 -#define unusedBit_250_16_offset_hex 3d0 -#define unusedBit_250_17_offset 976 -#define unusedBit_250_17_offset_hex 3d0 -#define unusedBit_250_18_offset 976 -#define unusedBit_250_18_offset_hex 3d0 -#define unusedBit_250_19_offset 976 -#define unusedBit_250_19_offset_hex 3d0 -#define unusedBit_250_20_offset 976 -#define unusedBit_250_20_offset_hex 3d0 -#define unusedBit_250_21_offset 976 -#define unusedBit_250_21_offset_hex 3d0 -#define unusedBit_250_22_offset 976 -#define unusedBit_250_22_offset_hex 3d0 -#define unusedBit_250_23_offset 976 -#define unusedBit_250_23_offset_hex 3d0 -#define unusedBit_250_24_offset 976 -#define unusedBit_250_24_offset_hex 3d0 -#define unusedBit_250_25_offset 976 -#define unusedBit_250_25_offset_hex 3d0 -#define unusedBit_250_26_offset 976 -#define unusedBit_250_26_offset_hex 3d0 -#define unusedBit_250_27_offset 976 -#define unusedBit_250_27_offset_hex 3d0 -#define unusedBit_250_28_offset 976 -#define unusedBit_250_28_offset_hex 3d0 -#define unusedBit_250_29_offset 976 -#define unusedBit_250_29_offset_hex 3d0 -#define unusedBit_250_2_offset 976 -#define unusedBit_250_2_offset_hex 3d0 -#define unusedBit_250_30_offset 976 -#define unusedBit_250_30_offset_hex 3d0 -#define unusedBit_250_31_offset 976 -#define unusedBit_250_31_offset_hex 3d0 -#define unusedBit_250_3_offset 976 -#define unusedBit_250_3_offset_hex 3d0 -#define unusedBit_250_4_offset 976 -#define unusedBit_250_4_offset_hex 3d0 -#define unusedBit_250_5_offset 976 -#define unusedBit_250_5_offset_hex 3d0 -#define unusedBit_250_6_offset 976 -#define unusedBit_250_6_offset_hex 3d0 -#define unusedBit_250_7_offset 976 -#define unusedBit_250_7_offset_hex 3d0 -#define unusedBit_250_8_offset 976 -#define unusedBit_250_8_offset_hex 3d0 -#define unusedBit_250_9_offset 976 -#define unusedBit_250_9_offset_hex 3d0 +#define unusedBit_251_10_offset 976 +#define unusedBit_251_10_offset_hex 3d0 +#define unusedBit_251_11_offset 976 +#define unusedBit_251_11_offset_hex 3d0 +#define unusedBit_251_12_offset 976 +#define unusedBit_251_12_offset_hex 3d0 +#define unusedBit_251_13_offset 976 +#define unusedBit_251_13_offset_hex 3d0 +#define unusedBit_251_14_offset 976 +#define unusedBit_251_14_offset_hex 3d0 +#define unusedBit_251_15_offset 976 +#define unusedBit_251_15_offset_hex 3d0 +#define unusedBit_251_16_offset 976 +#define unusedBit_251_16_offset_hex 3d0 +#define unusedBit_251_17_offset 976 +#define unusedBit_251_17_offset_hex 3d0 +#define unusedBit_251_18_offset 976 +#define unusedBit_251_18_offset_hex 3d0 +#define unusedBit_251_19_offset 976 +#define unusedBit_251_19_offset_hex 3d0 +#define unusedBit_251_20_offset 976 +#define unusedBit_251_20_offset_hex 3d0 +#define unusedBit_251_21_offset 976 +#define unusedBit_251_21_offset_hex 3d0 +#define unusedBit_251_22_offset 976 +#define unusedBit_251_22_offset_hex 3d0 +#define unusedBit_251_23_offset 976 +#define unusedBit_251_23_offset_hex 3d0 +#define unusedBit_251_24_offset 976 +#define unusedBit_251_24_offset_hex 3d0 +#define unusedBit_251_25_offset 976 +#define unusedBit_251_25_offset_hex 3d0 +#define unusedBit_251_26_offset 976 +#define unusedBit_251_26_offset_hex 3d0 +#define unusedBit_251_27_offset 976 +#define unusedBit_251_27_offset_hex 3d0 +#define unusedBit_251_28_offset 976 +#define unusedBit_251_28_offset_hex 3d0 +#define unusedBit_251_29_offset 976 +#define unusedBit_251_29_offset_hex 3d0 +#define unusedBit_251_3_offset 976 +#define unusedBit_251_3_offset_hex 3d0 +#define unusedBit_251_4_offset 976 +#define unusedBit_251_4_offset_hex 3d0 +#define unusedBit_251_5_offset 976 +#define unusedBit_251_5_offset_hex 3d0 +#define unusedBit_251_6_offset 976 +#define unusedBit_251_6_offset_hex 3d0 +#define unusedBit_251_7_offset 976 +#define unusedBit_251_7_offset_hex 3d0 +#define unusedBit_251_8_offset 976 +#define unusedBit_251_8_offset_hex 3d0 +#define unusedBit_251_9_offset 976 +#define unusedBit_251_9_offset_hex 3d0 +#define unusedBit_278_30_offset 976 +#define unusedBit_278_30_offset_hex 3d0 +#define unusedBit_278_31_offset 976 +#define unusedBit_278_31_offset_hex 3d0 #define unusedBit_34_31_offset 76 #define unusedBit_34_31_offset_hex 4c #define unusedErrorPin_offset 2040 @@ -2197,6 +2195,8 @@ #define useFSIO8ForServo1_offset_hex 5b8 #define useFSIO9ForServo2_offset 1464 #define useFSIO9ForServo2_offset_hex 5b8 +#define useHbridges_offset 976 +#define useHbridges_offset_hex 3d0 #define useIacPidMultTable_offset 1476 #define useIacPidMultTable_offset_hex 5c4 #define useIacTableForCoasting_offset 744 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 5bb237d6f9..691c229bf4 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:46 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:47 EST 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1586,94 +1586,94 @@ struct engine_configuration_s { bool todoClutchDownPinInverted : 1; /** offset 976 bit 2 */ - bool unusedBit_250_2 : 1; + bool useHbridges : 1; /** offset 976 bit 3 */ - bool unusedBit_250_3 : 1; + bool unusedBit_251_3 : 1; /** offset 976 bit 4 */ - bool unusedBit_250_4 : 1; + bool unusedBit_251_4 : 1; /** offset 976 bit 5 */ - bool unusedBit_250_5 : 1; + bool unusedBit_251_5 : 1; /** offset 976 bit 6 */ - bool unusedBit_250_6 : 1; + bool unusedBit_251_6 : 1; /** offset 976 bit 7 */ - bool unusedBit_250_7 : 1; + bool unusedBit_251_7 : 1; /** offset 976 bit 8 */ - bool unusedBit_250_8 : 1; + bool unusedBit_251_8 : 1; /** offset 976 bit 9 */ - bool unusedBit_250_9 : 1; + bool unusedBit_251_9 : 1; /** offset 976 bit 10 */ - bool unusedBit_250_10 : 1; + bool unusedBit_251_10 : 1; /** offset 976 bit 11 */ - bool unusedBit_250_11 : 1; + bool unusedBit_251_11 : 1; /** offset 976 bit 12 */ - bool unusedBit_250_12 : 1; + bool unusedBit_251_12 : 1; /** offset 976 bit 13 */ - bool unusedBit_250_13 : 1; + bool unusedBit_251_13 : 1; /** offset 976 bit 14 */ - bool unusedBit_250_14 : 1; + bool unusedBit_251_14 : 1; /** offset 976 bit 15 */ - bool unusedBit_250_15 : 1; + bool unusedBit_251_15 : 1; /** offset 976 bit 16 */ - bool unusedBit_250_16 : 1; + bool unusedBit_251_16 : 1; /** offset 976 bit 17 */ - bool unusedBit_250_17 : 1; + bool unusedBit_251_17 : 1; /** offset 976 bit 18 */ - bool unusedBit_250_18 : 1; + bool unusedBit_251_18 : 1; /** offset 976 bit 19 */ - bool unusedBit_250_19 : 1; + bool unusedBit_251_19 : 1; /** offset 976 bit 20 */ - bool unusedBit_250_20 : 1; + bool unusedBit_251_20 : 1; /** offset 976 bit 21 */ - bool unusedBit_250_21 : 1; + bool unusedBit_251_21 : 1; /** offset 976 bit 22 */ - bool unusedBit_250_22 : 1; + bool unusedBit_251_22 : 1; /** offset 976 bit 23 */ - bool unusedBit_250_23 : 1; + bool unusedBit_251_23 : 1; /** offset 976 bit 24 */ - bool unusedBit_250_24 : 1; + bool unusedBit_251_24 : 1; /** offset 976 bit 25 */ - bool unusedBit_250_25 : 1; + bool unusedBit_251_25 : 1; /** offset 976 bit 26 */ - bool unusedBit_250_26 : 1; + bool unusedBit_251_26 : 1; /** offset 976 bit 27 */ - bool unusedBit_250_27 : 1; + bool unusedBit_251_27 : 1; /** offset 976 bit 28 */ - bool unusedBit_250_28 : 1; + bool unusedBit_251_28 : 1; /** offset 976 bit 29 */ - bool unusedBit_250_29 : 1; + bool unusedBit_251_29 : 1; /** offset 976 bit 30 */ - bool unusedBit_250_30 : 1; + bool unusedBit_278_30 : 1; /** offset 976 bit 31 */ - bool unusedBit_250_31 : 1; + bool unusedBit_278_31 : 1; /** * offset 980 */ @@ -3217,4 +3217,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:46 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:47 EST 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index cd9ef07ed5..1b6d1e15fb 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -2077,66 +2077,64 @@ #define unusedAtOldBoardConfigurationEnd_offset_hex 41c #define unusedBit4_1476_offset 1476 #define unusedBit4_1476_offset_hex 5c4 -#define unusedBit_250_10_offset 976 -#define unusedBit_250_10_offset_hex 3d0 -#define unusedBit_250_11_offset 976 -#define unusedBit_250_11_offset_hex 3d0 -#define unusedBit_250_12_offset 976 -#define unusedBit_250_12_offset_hex 3d0 -#define unusedBit_250_13_offset 976 -#define unusedBit_250_13_offset_hex 3d0 -#define unusedBit_250_14_offset 976 -#define unusedBit_250_14_offset_hex 3d0 -#define unusedBit_250_15_offset 976 -#define unusedBit_250_15_offset_hex 3d0 -#define unusedBit_250_16_offset 976 -#define unusedBit_250_16_offset_hex 3d0 -#define unusedBit_250_17_offset 976 -#define unusedBit_250_17_offset_hex 3d0 -#define unusedBit_250_18_offset 976 -#define unusedBit_250_18_offset_hex 3d0 -#define unusedBit_250_19_offset 976 -#define unusedBit_250_19_offset_hex 3d0 -#define unusedBit_250_20_offset 976 -#define unusedBit_250_20_offset_hex 3d0 -#define unusedBit_250_21_offset 976 -#define unusedBit_250_21_offset_hex 3d0 -#define unusedBit_250_22_offset 976 -#define unusedBit_250_22_offset_hex 3d0 -#define unusedBit_250_23_offset 976 -#define unusedBit_250_23_offset_hex 3d0 -#define unusedBit_250_24_offset 976 -#define unusedBit_250_24_offset_hex 3d0 -#define unusedBit_250_25_offset 976 -#define unusedBit_250_25_offset_hex 3d0 -#define unusedBit_250_26_offset 976 -#define unusedBit_250_26_offset_hex 3d0 -#define unusedBit_250_27_offset 976 -#define unusedBit_250_27_offset_hex 3d0 -#define unusedBit_250_28_offset 976 -#define unusedBit_250_28_offset_hex 3d0 -#define unusedBit_250_29_offset 976 -#define unusedBit_250_29_offset_hex 3d0 -#define unusedBit_250_2_offset 976 -#define unusedBit_250_2_offset_hex 3d0 -#define unusedBit_250_30_offset 976 -#define unusedBit_250_30_offset_hex 3d0 -#define unusedBit_250_31_offset 976 -#define unusedBit_250_31_offset_hex 3d0 -#define unusedBit_250_3_offset 976 -#define unusedBit_250_3_offset_hex 3d0 -#define unusedBit_250_4_offset 976 -#define unusedBit_250_4_offset_hex 3d0 -#define unusedBit_250_5_offset 976 -#define unusedBit_250_5_offset_hex 3d0 -#define unusedBit_250_6_offset 976 -#define unusedBit_250_6_offset_hex 3d0 -#define unusedBit_250_7_offset 976 -#define unusedBit_250_7_offset_hex 3d0 -#define unusedBit_250_8_offset 976 -#define unusedBit_250_8_offset_hex 3d0 -#define unusedBit_250_9_offset 976 -#define unusedBit_250_9_offset_hex 3d0 +#define unusedBit_251_10_offset 976 +#define unusedBit_251_10_offset_hex 3d0 +#define unusedBit_251_11_offset 976 +#define unusedBit_251_11_offset_hex 3d0 +#define unusedBit_251_12_offset 976 +#define unusedBit_251_12_offset_hex 3d0 +#define unusedBit_251_13_offset 976 +#define unusedBit_251_13_offset_hex 3d0 +#define unusedBit_251_14_offset 976 +#define unusedBit_251_14_offset_hex 3d0 +#define unusedBit_251_15_offset 976 +#define unusedBit_251_15_offset_hex 3d0 +#define unusedBit_251_16_offset 976 +#define unusedBit_251_16_offset_hex 3d0 +#define unusedBit_251_17_offset 976 +#define unusedBit_251_17_offset_hex 3d0 +#define unusedBit_251_18_offset 976 +#define unusedBit_251_18_offset_hex 3d0 +#define unusedBit_251_19_offset 976 +#define unusedBit_251_19_offset_hex 3d0 +#define unusedBit_251_20_offset 976 +#define unusedBit_251_20_offset_hex 3d0 +#define unusedBit_251_21_offset 976 +#define unusedBit_251_21_offset_hex 3d0 +#define unusedBit_251_22_offset 976 +#define unusedBit_251_22_offset_hex 3d0 +#define unusedBit_251_23_offset 976 +#define unusedBit_251_23_offset_hex 3d0 +#define unusedBit_251_24_offset 976 +#define unusedBit_251_24_offset_hex 3d0 +#define unusedBit_251_25_offset 976 +#define unusedBit_251_25_offset_hex 3d0 +#define unusedBit_251_26_offset 976 +#define unusedBit_251_26_offset_hex 3d0 +#define unusedBit_251_27_offset 976 +#define unusedBit_251_27_offset_hex 3d0 +#define unusedBit_251_28_offset 976 +#define unusedBit_251_28_offset_hex 3d0 +#define unusedBit_251_29_offset 976 +#define unusedBit_251_29_offset_hex 3d0 +#define unusedBit_251_3_offset 976 +#define unusedBit_251_3_offset_hex 3d0 +#define unusedBit_251_4_offset 976 +#define unusedBit_251_4_offset_hex 3d0 +#define unusedBit_251_5_offset 976 +#define unusedBit_251_5_offset_hex 3d0 +#define unusedBit_251_6_offset 976 +#define unusedBit_251_6_offset_hex 3d0 +#define unusedBit_251_7_offset 976 +#define unusedBit_251_7_offset_hex 3d0 +#define unusedBit_251_8_offset 976 +#define unusedBit_251_8_offset_hex 3d0 +#define unusedBit_251_9_offset 976 +#define unusedBit_251_9_offset_hex 3d0 +#define unusedBit_278_30_offset 976 +#define unusedBit_278_30_offset_hex 3d0 +#define unusedBit_278_31_offset 976 +#define unusedBit_278_31_offset_hex 3d0 #define unusedBit_34_31_offset 76 #define unusedBit_34_31_offset_hex 4c #define unusedErrorPin_offset 2040 @@ -2197,6 +2195,8 @@ #define useFSIO8ForServo1_offset_hex 5b8 #define useFSIO9ForServo2_offset 1464 #define useFSIO9ForServo2_offset_hex 5b8 +#define useHbridges_offset 976 +#define useHbridges_offset_hex 3d0 #define useIacPidMultTable_offset 1476 #define useIacPidMultTable_offset_hex 5c4 #define useIacTableForCoasting_offset 744 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index eef664331e..90f2d9a424 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -650,6 +650,7 @@ bit is_enabled_spi_2 bit useETBforIdleControl;+This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle. bit idleIncrementalPidCic bit enableAemXSeries +! 'enableAemXSeries' is the 32nd bit here, you would need another bit region if more bits are desired brain_input_pin_e[LOGIC_ANALYZER_CHANNEL_COUNT iterate] logicAnalyzerPins; pin_output_mode_e mainRelayPinMode; @@ -741,6 +742,35 @@ custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:7], @@maf_sensor_type_e_enum@ float unused bit todoClutchUpPinInverted bit todoClutchDownPinInverted + bit useHbridges + bit unusedBit_251_3 + bit unusedBit_251_4 + bit unusedBit_251_5 + bit unusedBit_251_6 + bit unusedBit_251_7 + bit unusedBit_251_8 + bit unusedBit_251_9 + bit unusedBit_251_10 + bit unusedBit_251_11 + bit unusedBit_251_12 + bit unusedBit_251_13 + bit unusedBit_251_14 + bit unusedBit_251_15 + bit unusedBit_251_16 + bit unusedBit_251_17 + bit unusedBit_251_18 + bit unusedBit_251_19 + bit unusedBit_251_20 + bit unusedBit_251_21 + bit unusedBit_251_22 + bit unusedBit_251_23 + bit unusedBit_251_24 + bit unusedBit_251_25 + bit unusedBit_251_26 + bit unusedBit_251_27 + bit unusedBit_251_28 + bit unusedBit_251_29 + etb_io[ETB_COUNT iterate] etbIo diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 2454f7be41..2e1151e401 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:46 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:47 EST 2020 pageSize = 20000 page = 1 @@ -535,36 +535,36 @@ page = 1 ;no TS info - skipping unused offset 972 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - unusedBit_250_2 = bits, U32, 976, [2:2], "false", "true" - unusedBit_250_3 = bits, U32, 976, [3:3], "false", "true" - unusedBit_250_4 = bits, U32, 976, [4:4], "false", "true" - unusedBit_250_5 = bits, U32, 976, [5:5], "false", "true" - unusedBit_250_6 = bits, U32, 976, [6:6], "false", "true" - unusedBit_250_7 = bits, U32, 976, [7:7], "false", "true" - unusedBit_250_8 = bits, U32, 976, [8:8], "false", "true" - unusedBit_250_9 = bits, U32, 976, [9:9], "false", "true" - unusedBit_250_10 = bits, U32, 976, [10:10], "false", "true" - unusedBit_250_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_250_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_250_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_250_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_250_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_250_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_250_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_250_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_250_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_250_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_250_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_250_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_250_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_250_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_250_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_250_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_250_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_250_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_250_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_250_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_250_31 = bits, U32, 976, [31:31], "false", "true" + useHbridges = bits, U32, 976, [2:2], "false", "true" + unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" + unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" + unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" + unusedBit_251_7 = bits, U32, 976, [7:7], "false", "true" + unusedBit_251_8 = bits, U32, 976, [8:8], "false", "true" + unusedBit_251_9 = bits, U32, 976, [9:9], "false", "true" + unusedBit_251_10 = bits, U32, 976, [10:10], "false", "true" + unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" + unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" + unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" + unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" + unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" + unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" + unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" + unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" + unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" + unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" + unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" + unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" + unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" + unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" + unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" + unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" + unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" + unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -3122,6 +3122,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle dialog = idleStepper, "Stepper" + field = "useHbridges", useHbridges field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 3dd8b76518..e6f398164e 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1998,6 +1998,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle dialog = idleStepper, "Stepper" + field = "useHbridges", useHbridges field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 6f7b3b0a5f..d681d656a9 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:53 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:54 EST 2020 pageSize = 20000 page = 1 @@ -535,36 +535,36 @@ page = 1 ;no TS info - skipping unused offset 972 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - unusedBit_250_2 = bits, U32, 976, [2:2], "false", "true" - unusedBit_250_3 = bits, U32, 976, [3:3], "false", "true" - unusedBit_250_4 = bits, U32, 976, [4:4], "false", "true" - unusedBit_250_5 = bits, U32, 976, [5:5], "false", "true" - unusedBit_250_6 = bits, U32, 976, [6:6], "false", "true" - unusedBit_250_7 = bits, U32, 976, [7:7], "false", "true" - unusedBit_250_8 = bits, U32, 976, [8:8], "false", "true" - unusedBit_250_9 = bits, U32, 976, [9:9], "false", "true" - unusedBit_250_10 = bits, U32, 976, [10:10], "false", "true" - unusedBit_250_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_250_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_250_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_250_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_250_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_250_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_250_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_250_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_250_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_250_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_250_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_250_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_250_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_250_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_250_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_250_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_250_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_250_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_250_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_250_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_250_31 = bits, U32, 976, [31:31], "false", "true" + useHbridges = bits, U32, 976, [2:2], "false", "true" + unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" + unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" + unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" + unusedBit_251_7 = bits, U32, 976, [7:7], "false", "true" + unusedBit_251_8 = bits, U32, 976, [8:8], "false", "true" + unusedBit_251_9 = bits, U32, 976, [9:9], "false", "true" + unusedBit_251_10 = bits, U32, 976, [10:10], "false", "true" + unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" + unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" + unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" + unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" + unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" + unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" + unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" + unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" + unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" + unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" + unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" + unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" + unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" + unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" + unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" + unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" + unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" + unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -3122,6 +3122,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle dialog = idleStepper, "Stepper" + field = "useHbridges", useHbridges field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index e1882331ab..193e4abd8a 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 01 22:31:05 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 02 19:46:02 EST 2020 pageSize = 20000 page = 1 @@ -535,36 +535,36 @@ page = 1 ;no TS info - skipping unused offset 972 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - unusedBit_250_2 = bits, U32, 976, [2:2], "false", "true" - unusedBit_250_3 = bits, U32, 976, [3:3], "false", "true" - unusedBit_250_4 = bits, U32, 976, [4:4], "false", "true" - unusedBit_250_5 = bits, U32, 976, [5:5], "false", "true" - unusedBit_250_6 = bits, U32, 976, [6:6], "false", "true" - unusedBit_250_7 = bits, U32, 976, [7:7], "false", "true" - unusedBit_250_8 = bits, U32, 976, [8:8], "false", "true" - unusedBit_250_9 = bits, U32, 976, [9:9], "false", "true" - unusedBit_250_10 = bits, U32, 976, [10:10], "false", "true" - unusedBit_250_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_250_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_250_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_250_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_250_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_250_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_250_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_250_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_250_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_250_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_250_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_250_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_250_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_250_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_250_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_250_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_250_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_250_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_250_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_250_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_250_31 = bits, U32, 976, [31:31], "false", "true" + useHbridges = bits, U32, 976, [2:2], "false", "true" + unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" + unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" + unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" + unusedBit_251_7 = bits, U32, 976, [7:7], "false", "true" + unusedBit_251_8 = bits, U32, 976, [8:8], "false", "true" + unusedBit_251_9 = bits, U32, 976, [9:9], "false", "true" + unusedBit_251_10 = bits, U32, 976, [10:10], "false", "true" + unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" + unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" + unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" + unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" + unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" + unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" + unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" + unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" + unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" + unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" + unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" + unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" + unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" + unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" + unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" + unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" + unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" + unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" @@ -3122,6 +3122,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle dialog = idleStepper, "Stepper" + field = "useHbridges", useHbridges field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 542ae1e09b..31970c9f4e 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:50 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:51 EST 2020 pageSize = 20000 page = 1 @@ -535,36 +535,36 @@ page = 1 ;no TS info - skipping unused offset 972 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - unusedBit_250_2 = bits, U32, 976, [2:2], "false", "true" - unusedBit_250_3 = bits, U32, 976, [3:3], "false", "true" - unusedBit_250_4 = bits, U32, 976, [4:4], "false", "true" - unusedBit_250_5 = bits, U32, 976, [5:5], "false", "true" - unusedBit_250_6 = bits, U32, 976, [6:6], "false", "true" - unusedBit_250_7 = bits, U32, 976, [7:7], "false", "true" - unusedBit_250_8 = bits, U32, 976, [8:8], "false", "true" - unusedBit_250_9 = bits, U32, 976, [9:9], "false", "true" - unusedBit_250_10 = bits, U32, 976, [10:10], "false", "true" - unusedBit_250_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_250_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_250_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_250_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_250_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_250_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_250_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_250_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_250_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_250_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_250_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_250_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_250_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_250_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_250_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_250_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_250_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_250_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_250_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_250_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_250_31 = bits, U32, 976, [31:31], "false", "true" + useHbridges = bits, U32, 976, [2:2], "false", "true" + unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" + unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" + unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" + unusedBit_251_7 = bits, U32, 976, [7:7], "false", "true" + unusedBit_251_8 = bits, U32, 976, [8:8], "false", "true" + unusedBit_251_9 = bits, U32, 976, [9:9], "false", "true" + unusedBit_251_10 = bits, U32, 976, [10:10], "false", "true" + unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" + unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" + unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" + unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" + unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" + unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" + unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" + unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" + unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" + unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" + unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" + unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" + unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" + unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" + unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" + unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" + unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" + unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -3106,6 +3106,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle dialog = idleStepper, "Stepper" + field = "useHbridges", useHbridges field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 0e6457fef7..285e2f1970 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:30:57 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:56 EST 2020 pageSize = 20000 page = 1 @@ -535,36 +535,36 @@ page = 1 ;no TS info - skipping unused offset 972 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - unusedBit_250_2 = bits, U32, 976, [2:2], "false", "true" - unusedBit_250_3 = bits, U32, 976, [3:3], "false", "true" - unusedBit_250_4 = bits, U32, 976, [4:4], "false", "true" - unusedBit_250_5 = bits, U32, 976, [5:5], "false", "true" - unusedBit_250_6 = bits, U32, 976, [6:6], "false", "true" - unusedBit_250_7 = bits, U32, 976, [7:7], "false", "true" - unusedBit_250_8 = bits, U32, 976, [8:8], "false", "true" - unusedBit_250_9 = bits, U32, 976, [9:9], "false", "true" - unusedBit_250_10 = bits, U32, 976, [10:10], "false", "true" - unusedBit_250_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_250_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_250_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_250_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_250_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_250_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_250_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_250_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_250_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_250_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_250_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_250_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_250_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_250_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_250_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_250_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_250_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_250_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_250_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_250_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_250_31 = bits, U32, 976, [31:31], "false", "true" + useHbridges = bits, U32, 976, [2:2], "false", "true" + unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" + unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" + unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" + unusedBit_251_7 = bits, U32, 976, [7:7], "false", "true" + unusedBit_251_8 = bits, U32, 976, [8:8], "false", "true" + unusedBit_251_9 = bits, U32, 976, [9:9], "false", "true" + unusedBit_251_10 = bits, U32, 976, [10:10], "false", "true" + unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" + unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" + unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" + unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" + unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" + unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" + unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" + unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" + unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" + unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" + unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" + unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" + unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" + unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" + unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" + unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" + unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" + unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -3118,6 +3118,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle dialog = idleStepper, "Stepper" + field = "useHbridges", useHbridges field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index e5e512899e..f688e90f7c 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 01 22:31:01 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:59 EST 2020 pageSize = 20000 page = 1 @@ -535,36 +535,36 @@ page = 1 ;no TS info - skipping unused offset 972 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - unusedBit_250_2 = bits, U32, 976, [2:2], "false", "true" - unusedBit_250_3 = bits, U32, 976, [3:3], "false", "true" - unusedBit_250_4 = bits, U32, 976, [4:4], "false", "true" - unusedBit_250_5 = bits, U32, 976, [5:5], "false", "true" - unusedBit_250_6 = bits, U32, 976, [6:6], "false", "true" - unusedBit_250_7 = bits, U32, 976, [7:7], "false", "true" - unusedBit_250_8 = bits, U32, 976, [8:8], "false", "true" - unusedBit_250_9 = bits, U32, 976, [9:9], "false", "true" - unusedBit_250_10 = bits, U32, 976, [10:10], "false", "true" - unusedBit_250_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_250_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_250_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_250_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_250_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_250_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_250_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_250_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_250_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_250_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_250_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_250_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_250_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_250_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_250_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_250_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_250_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_250_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_250_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_250_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_250_31 = bits, U32, 976, [31:31], "false", "true" + useHbridges = bits, U32, 976, [2:2], "false", "true" + unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" + unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" + unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" + unusedBit_251_7 = bits, U32, 976, [7:7], "false", "true" + unusedBit_251_8 = bits, U32, 976, [8:8], "false", "true" + unusedBit_251_9 = bits, U32, 976, [9:9], "false", "true" + unusedBit_251_10 = bits, U32, 976, [10:10], "false", "true" + unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" + unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" + unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" + unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" + unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" + unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" + unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" + unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" + unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" + unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" + unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" + unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" + unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" + unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" + unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" + unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" + unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" + unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" + unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -3122,6 +3122,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle dialog = idleStepper, "Stepper" + field = "useHbridges", useHbridges field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 16712049c9..88a8565723 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Feb 27 03:14:33 EST 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:47 EST 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1372,36 +1372,35 @@ public class Fields { public static final int unused_offset = 972; public static final int unusedAtOldBoardConfigurationEnd_offset = 1052; public static final int unusedBit4_1476_offset = 1476; - public static final int unusedBit_250_10_offset = 976; - public static final int unusedBit_250_11_offset = 976; - public static final int unusedBit_250_12_offset = 976; - public static final int unusedBit_250_13_offset = 976; - public static final int unusedBit_250_14_offset = 976; - public static final int unusedBit_250_15_offset = 976; - public static final int unusedBit_250_16_offset = 976; - public static final int unusedBit_250_17_offset = 976; - public static final int unusedBit_250_18_offset = 976; - public static final int unusedBit_250_19_offset = 976; - public static final int unusedBit_250_20_offset = 976; - public static final int unusedBit_250_21_offset = 976; - public static final int unusedBit_250_22_offset = 976; - public static final int unusedBit_250_23_offset = 976; - public static final int unusedBit_250_24_offset = 976; - public static final int unusedBit_250_25_offset = 976; - public static final int unusedBit_250_26_offset = 976; - public static final int unusedBit_250_27_offset = 976; - public static final int unusedBit_250_28_offset = 976; - public static final int unusedBit_250_29_offset = 976; - public static final int unusedBit_250_2_offset = 976; - public static final int unusedBit_250_30_offset = 976; - public static final int unusedBit_250_31_offset = 976; - public static final int unusedBit_250_3_offset = 976; - public static final int unusedBit_250_4_offset = 976; - public static final int unusedBit_250_5_offset = 976; - public static final int unusedBit_250_6_offset = 976; - public static final int unusedBit_250_7_offset = 976; - public static final int unusedBit_250_8_offset = 976; - public static final int unusedBit_250_9_offset = 976; + public static final int unusedBit_251_10_offset = 976; + public static final int unusedBit_251_11_offset = 976; + public static final int unusedBit_251_12_offset = 976; + public static final int unusedBit_251_13_offset = 976; + public static final int unusedBit_251_14_offset = 976; + public static final int unusedBit_251_15_offset = 976; + public static final int unusedBit_251_16_offset = 976; + public static final int unusedBit_251_17_offset = 976; + public static final int unusedBit_251_18_offset = 976; + public static final int unusedBit_251_19_offset = 976; + public static final int unusedBit_251_20_offset = 976; + public static final int unusedBit_251_21_offset = 976; + public static final int unusedBit_251_22_offset = 976; + public static final int unusedBit_251_23_offset = 976; + public static final int unusedBit_251_24_offset = 976; + public static final int unusedBit_251_25_offset = 976; + public static final int unusedBit_251_26_offset = 976; + public static final int unusedBit_251_27_offset = 976; + public static final int unusedBit_251_28_offset = 976; + public static final int unusedBit_251_29_offset = 976; + public static final int unusedBit_251_3_offset = 976; + public static final int unusedBit_251_4_offset = 976; + public static final int unusedBit_251_5_offset = 976; + public static final int unusedBit_251_6_offset = 976; + public static final int unusedBit_251_7_offset = 976; + public static final int unusedBit_251_8_offset = 976; + public static final int unusedBit_251_9_offset = 976; + public static final int unusedBit_278_30_offset = 976; + public static final int unusedBit_278_31_offset = 976; public static final int unusedBit_34_31_offset = 76; public static final int unusedErrorPin_offset = 2040; public static final int unusedFlexFuelSensor_offset = 3100; @@ -1432,6 +1431,7 @@ public class Fields { public static final int useFSIO6ForRevLimiter_offset = 1464; public static final int useFSIO8ForServo1_offset = 1464; public static final int useFSIO9ForServo2_offset = 1464; + public static final int useHbridges_offset = 976; public static final int useIacPidMultTable_offset = 1476; public static final int useIacTableForCoasting_offset = 744; public static final int useIdleTimingPidControl_offset = 744; @@ -1922,36 +1922,36 @@ public class Fields { public static final Field UNUSED = Field.create("UNUSED", 972, FieldType.FLOAT); public static final Field TODOCLUTCHUPPININVERTED = Field.create("TODOCLUTCHUPPININVERTED", 976, FieldType.BIT, 0); public static final Field TODOCLUTCHDOWNPININVERTED = Field.create("TODOCLUTCHDOWNPININVERTED", 976, FieldType.BIT, 1); - public static final Field UNUSEDBIT_250_2 = Field.create("UNUSEDBIT_250_2", 976, FieldType.BIT, 2); - public static final Field UNUSEDBIT_250_3 = Field.create("UNUSEDBIT_250_3", 976, FieldType.BIT, 3); - public static final Field UNUSEDBIT_250_4 = Field.create("UNUSEDBIT_250_4", 976, FieldType.BIT, 4); - public static final Field UNUSEDBIT_250_5 = Field.create("UNUSEDBIT_250_5", 976, FieldType.BIT, 5); - public static final Field UNUSEDBIT_250_6 = Field.create("UNUSEDBIT_250_6", 976, FieldType.BIT, 6); - public static final Field UNUSEDBIT_250_7 = Field.create("UNUSEDBIT_250_7", 976, FieldType.BIT, 7); - public static final Field UNUSEDBIT_250_8 = Field.create("UNUSEDBIT_250_8", 976, FieldType.BIT, 8); - public static final Field UNUSEDBIT_250_9 = Field.create("UNUSEDBIT_250_9", 976, FieldType.BIT, 9); - public static final Field UNUSEDBIT_250_10 = Field.create("UNUSEDBIT_250_10", 976, FieldType.BIT, 10); - public static final Field UNUSEDBIT_250_11 = Field.create("UNUSEDBIT_250_11", 976, FieldType.BIT, 11); - public static final Field UNUSEDBIT_250_12 = Field.create("UNUSEDBIT_250_12", 976, FieldType.BIT, 12); - public static final Field UNUSEDBIT_250_13 = Field.create("UNUSEDBIT_250_13", 976, FieldType.BIT, 13); - public static final Field UNUSEDBIT_250_14 = Field.create("UNUSEDBIT_250_14", 976, FieldType.BIT, 14); - public static final Field UNUSEDBIT_250_15 = Field.create("UNUSEDBIT_250_15", 976, FieldType.BIT, 15); - public static final Field UNUSEDBIT_250_16 = Field.create("UNUSEDBIT_250_16", 976, FieldType.BIT, 16); - public static final Field UNUSEDBIT_250_17 = Field.create("UNUSEDBIT_250_17", 976, FieldType.BIT, 17); - public static final Field UNUSEDBIT_250_18 = Field.create("UNUSEDBIT_250_18", 976, FieldType.BIT, 18); - public static final Field UNUSEDBIT_250_19 = Field.create("UNUSEDBIT_250_19", 976, FieldType.BIT, 19); - public static final Field UNUSEDBIT_250_20 = Field.create("UNUSEDBIT_250_20", 976, FieldType.BIT, 20); - public static final Field UNUSEDBIT_250_21 = Field.create("UNUSEDBIT_250_21", 976, FieldType.BIT, 21); - public static final Field UNUSEDBIT_250_22 = Field.create("UNUSEDBIT_250_22", 976, FieldType.BIT, 22); - public static final Field UNUSEDBIT_250_23 = Field.create("UNUSEDBIT_250_23", 976, FieldType.BIT, 23); - public static final Field UNUSEDBIT_250_24 = Field.create("UNUSEDBIT_250_24", 976, FieldType.BIT, 24); - public static final Field UNUSEDBIT_250_25 = Field.create("UNUSEDBIT_250_25", 976, FieldType.BIT, 25); - public static final Field UNUSEDBIT_250_26 = Field.create("UNUSEDBIT_250_26", 976, FieldType.BIT, 26); - public static final Field UNUSEDBIT_250_27 = Field.create("UNUSEDBIT_250_27", 976, FieldType.BIT, 27); - public static final Field UNUSEDBIT_250_28 = Field.create("UNUSEDBIT_250_28", 976, FieldType.BIT, 28); - public static final Field UNUSEDBIT_250_29 = Field.create("UNUSEDBIT_250_29", 976, FieldType.BIT, 29); - public static final Field UNUSEDBIT_250_30 = Field.create("UNUSEDBIT_250_30", 976, FieldType.BIT, 30); - public static final Field UNUSEDBIT_250_31 = Field.create("UNUSEDBIT_250_31", 976, FieldType.BIT, 31); + public static final Field USEHBRIDGES = Field.create("USEHBRIDGES", 976, FieldType.BIT, 2); + public static final Field UNUSEDBIT_251_3 = Field.create("UNUSEDBIT_251_3", 976, FieldType.BIT, 3); + public static final Field UNUSEDBIT_251_4 = Field.create("UNUSEDBIT_251_4", 976, FieldType.BIT, 4); + public static final Field UNUSEDBIT_251_5 = Field.create("UNUSEDBIT_251_5", 976, FieldType.BIT, 5); + public static final Field UNUSEDBIT_251_6 = Field.create("UNUSEDBIT_251_6", 976, FieldType.BIT, 6); + public static final Field UNUSEDBIT_251_7 = Field.create("UNUSEDBIT_251_7", 976, FieldType.BIT, 7); + public static final Field UNUSEDBIT_251_8 = Field.create("UNUSEDBIT_251_8", 976, FieldType.BIT, 8); + public static final Field UNUSEDBIT_251_9 = Field.create("UNUSEDBIT_251_9", 976, FieldType.BIT, 9); + public static final Field UNUSEDBIT_251_10 = Field.create("UNUSEDBIT_251_10", 976, FieldType.BIT, 10); + public static final Field UNUSEDBIT_251_11 = Field.create("UNUSEDBIT_251_11", 976, FieldType.BIT, 11); + public static final Field UNUSEDBIT_251_12 = Field.create("UNUSEDBIT_251_12", 976, FieldType.BIT, 12); + public static final Field UNUSEDBIT_251_13 = Field.create("UNUSEDBIT_251_13", 976, FieldType.BIT, 13); + public static final Field UNUSEDBIT_251_14 = Field.create("UNUSEDBIT_251_14", 976, FieldType.BIT, 14); + public static final Field UNUSEDBIT_251_15 = Field.create("UNUSEDBIT_251_15", 976, FieldType.BIT, 15); + public static final Field UNUSEDBIT_251_16 = Field.create("UNUSEDBIT_251_16", 976, FieldType.BIT, 16); + public static final Field UNUSEDBIT_251_17 = Field.create("UNUSEDBIT_251_17", 976, FieldType.BIT, 17); + public static final Field UNUSEDBIT_251_18 = Field.create("UNUSEDBIT_251_18", 976, FieldType.BIT, 18); + public static final Field UNUSEDBIT_251_19 = Field.create("UNUSEDBIT_251_19", 976, FieldType.BIT, 19); + public static final Field UNUSEDBIT_251_20 = Field.create("UNUSEDBIT_251_20", 976, FieldType.BIT, 20); + public static final Field UNUSEDBIT_251_21 = Field.create("UNUSEDBIT_251_21", 976, FieldType.BIT, 21); + public static final Field UNUSEDBIT_251_22 = Field.create("UNUSEDBIT_251_22", 976, FieldType.BIT, 22); + public static final Field UNUSEDBIT_251_23 = Field.create("UNUSEDBIT_251_23", 976, FieldType.BIT, 23); + public static final Field UNUSEDBIT_251_24 = Field.create("UNUSEDBIT_251_24", 976, FieldType.BIT, 24); + public static final Field UNUSEDBIT_251_25 = Field.create("UNUSEDBIT_251_25", 976, FieldType.BIT, 25); + public static final Field UNUSEDBIT_251_26 = Field.create("UNUSEDBIT_251_26", 976, FieldType.BIT, 26); + public static final Field UNUSEDBIT_251_27 = Field.create("UNUSEDBIT_251_27", 976, FieldType.BIT, 27); + public static final Field UNUSEDBIT_251_28 = Field.create("UNUSEDBIT_251_28", 976, FieldType.BIT, 28); + public static final Field UNUSEDBIT_251_29 = Field.create("UNUSEDBIT_251_29", 976, FieldType.BIT, 29); + public static final Field UNUSEDBIT_278_30 = Field.create("UNUSEDBIT_278_30", 976, FieldType.BIT, 30); + public static final Field UNUSEDBIT_278_31 = Field.create("UNUSEDBIT_278_31", 976, FieldType.BIT, 31); public static final Field ETBIO1_DIRECTIONPIN1 = Field.create("ETBIO1_DIRECTIONPIN1", 980, FieldType.INT8, brain_pin_e); public static final Field ETBIO1_DIRECTIONPIN2 = Field.create("ETBIO1_DIRECTIONPIN2", 981, FieldType.INT8, brain_pin_e); public static final Field ETBIO1_CONTROLPIN1 = Field.create("ETBIO1_CONTROLPIN1", 982, FieldType.INT8, brain_pin_e); @@ -2818,36 +2818,36 @@ public class Fields { UNUSED, TODOCLUTCHUPPININVERTED, TODOCLUTCHDOWNPININVERTED, - UNUSEDBIT_250_2, - UNUSEDBIT_250_3, - UNUSEDBIT_250_4, - UNUSEDBIT_250_5, - UNUSEDBIT_250_6, - UNUSEDBIT_250_7, - UNUSEDBIT_250_8, - UNUSEDBIT_250_9, - UNUSEDBIT_250_10, - UNUSEDBIT_250_11, - UNUSEDBIT_250_12, - UNUSEDBIT_250_13, - UNUSEDBIT_250_14, - UNUSEDBIT_250_15, - UNUSEDBIT_250_16, - UNUSEDBIT_250_17, - UNUSEDBIT_250_18, - UNUSEDBIT_250_19, - UNUSEDBIT_250_20, - UNUSEDBIT_250_21, - UNUSEDBIT_250_22, - UNUSEDBIT_250_23, - UNUSEDBIT_250_24, - UNUSEDBIT_250_25, - UNUSEDBIT_250_26, - UNUSEDBIT_250_27, - UNUSEDBIT_250_28, - UNUSEDBIT_250_29, - UNUSEDBIT_250_30, - UNUSEDBIT_250_31, + USEHBRIDGES, + UNUSEDBIT_251_3, + UNUSEDBIT_251_4, + UNUSEDBIT_251_5, + UNUSEDBIT_251_6, + UNUSEDBIT_251_7, + UNUSEDBIT_251_8, + UNUSEDBIT_251_9, + UNUSEDBIT_251_10, + UNUSEDBIT_251_11, + UNUSEDBIT_251_12, + UNUSEDBIT_251_13, + UNUSEDBIT_251_14, + UNUSEDBIT_251_15, + UNUSEDBIT_251_16, + UNUSEDBIT_251_17, + UNUSEDBIT_251_18, + UNUSEDBIT_251_19, + UNUSEDBIT_251_20, + UNUSEDBIT_251_21, + UNUSEDBIT_251_22, + UNUSEDBIT_251_23, + UNUSEDBIT_251_24, + UNUSEDBIT_251_25, + UNUSEDBIT_251_26, + UNUSEDBIT_251_27, + UNUSEDBIT_251_28, + UNUSEDBIT_251_29, + UNUSEDBIT_278_30, + UNUSEDBIT_278_31, ETBIO1_DIRECTIONPIN1, ETBIO1_DIRECTIONPIN2, ETBIO1_CONTROLPIN1, From 439b998cd6ada100bb1cb4c63dc5dc2fa4cb9bce Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 2 Mar 2020 17:02:26 -0800 Subject: [PATCH 084/171] proteus prepend (#1166) --- firmware/config/boards/proteus/prepend.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/firmware/config/boards/proteus/prepend.txt b/firmware/config/boards/proteus/prepend.txt index 8b13789179..896f9464e9 100644 --- a/firmware/config/boards/proteus/prepend.txt +++ b/firmware/config/boards/proteus/prepend.txt @@ -1 +1,8 @@ - +#define ts_show_hip9011 false +#define ts_show_cj125 false +#define ts_show_full_pinout false +#define ts_show_lcd false +#define ts_show_joystick false +#define ts_show_egt false +#define ts_show_gps false +#define ts_show_analog_divider false From d09901f5ba8f09685ddf62a5a366bfc97c45e4ff Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 2 Mar 2020 20:06:52 -0500 Subject: [PATCH 085/171] proteus --- firmware/tunerstudio/rusefi_proteus.ini | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index f688e90f7c..4f13c63064 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:59 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:02:57 EST 2020 pageSize = 20000 page = 1 @@ -2401,13 +2401,11 @@ menuDialog = main # O2 sensor(s) subMenu = egoSettings, "EGO sensor" subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = cj125Function, "CJ125 settings (wbo decoder)" subMenu = std_separator # Misc sensors subMenu = speedSensor, "Vehicle speed sensor" subMenu = oilPressureSensor, "Oil pressure" - subMenu = egtInputs, "EGT" menu = "&Controller" subMenu = ecuStimulator, "ECU stimulator" @@ -2416,15 +2414,11 @@ menuDialog = main subMenu = engineTypeDialog, "Popular vehicles" subMenu = std_separator - subMenu = lcdScreen, "LCD" - subMenu = joystickPanel, "Joystick" subMenu = spiFunction, "SPI" subMenu = monitoringSettings, "rusEfi console" subMenu = std_separator subMenu = connection, "Connection" - subMenu = allPins1, "Full pinout 1/2" - subMenu = allPins2, "Full pinout 2/2" subMenu = std_separator @@ -2432,7 +2426,6 @@ menuDialog = main subMenu = parkingLot, "Experimental/Broken" subMenu = std_separator - subMenu = hipFunction, "HIP9011 settings (knock sensor) (alpha version)" subMenu = std_separator subMenu = etbDialog, "Electronic throttle body (beta version)" @@ -2938,8 +2931,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "FSIO ADC #2", fsioAdc2 field = "FSIO ADC #3", fsioAdc3 field = "FSIO ADC #4", fsioAdc4 - field = "GPS RX", gps_rx_pin - field = "GPS TX", gps_tx_pin field = "CAN RX pin", canRxPin field = "CAN TX pin", canTxPin field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1} @@ -3364,7 +3355,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = analogInputSettings, "Analog Input Settings" field = "!ECU reboot needed to apply these settings" field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider ratio", analogInputDividerCoefficient field = "Use BiQuad averaging", useBiQuadAnalogFiltering field = "Smoothing factor", slowAdcAlpha, {useBiQuadAnalogFiltering == 0} field = "Bi_Q a0", biQuad_a0, {useBiQuadAnalogFiltering == 1} @@ -3436,7 +3426,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = tsPort panel = canBus panel = sdCard - panel = gpsReceiver panel = tle8888 dialog = joystickPanel, "Joystick" From 47eeebed054765eb3c17ab77253d031e1be190fc Mon Sep 17 00:00:00 2001 From: 960 Date: Tue, 3 Mar 2020 02:54:47 +0100 Subject: [PATCH 086/171] Update rusefi.input (#1165) --- firmware/tunerstudio/rusefi.input | 41 ++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index e6f398164e..cc0c3f9fa8 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -359,6 +359,22 @@ fileVersion = { @@TS_FILE_VERSION@@ } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + + + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 @@ -830,19 +846,20 @@ gaugeCategory = ECU Status firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 timeSecondsGauge = timeSeconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 + gaugeCategory = Debug - debugFloatField1Gauge = debugFloatField1, @@GAUGE_NAME_DEBUG_F1@@, "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField2Gauge = debugFloatField2, @@GAUGE_NAME_DEBUG_F2@@, "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField3Gauge = debugFloatField3, @@GAUGE_NAME_DEBUG_F3@@, "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField4Gauge = debugFloatField4, @@GAUGE_NAME_DEBUG_F4@@, "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField5Gauge = debugFloatField5, @@GAUGE_NAME_DEBUG_F5@@, "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField6Gauge = debugFloatField6, @@GAUGE_NAME_DEBUG_F6@@, "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField7Gauge = debugFloatField7, @@GAUGE_NAME_DEBUG_F7@@, "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugIntField1Gauge = debugIntField1, "debug i1: pParam", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField2Gauge = debugIntField2, "debug i2: offset", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField4Gauge = debugIntField4, "debug i4", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField5Gauge = debugIntField5, "debug i5", "%", 0, 100, 0, 0, 100, 100, 0, 0 + debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 gaugeCategory = Sensors - Basic From 86c6494ff7e86a2a1df24adb27a3bba2447840fb Mon Sep 17 00:00:00 2001 From: rusEfi Date: Mon, 2 Mar 2020 21:01:17 -0500 Subject: [PATCH 087/171] debugFieldF1List great stuff!!! --- firmware/tunerstudio/rusefi.ini | 43 ++++++++++++++------- firmware/tunerstudio/rusefi_frankenso.ini | 43 ++++++++++++++------- firmware/tunerstudio/rusefi_microrusefi.ini | 43 ++++++++++++++------- firmware/tunerstudio/rusefi_prometheus.ini | 43 ++++++++++++++------- firmware/tunerstudio/rusefi_proteus.ini | 43 ++++++++++++++------- 5 files changed, 150 insertions(+), 65 deletions(-) diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 2e1151e401..476c8968be 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:47 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:50:59 EST 2020 pageSize = 20000 page = 1 @@ -1483,6 +1483,22 @@ fileVersion = { 20191221 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + + + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 @@ -1954,19 +1970,20 @@ gaugeCategory = ECU Status firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 timeSecondsGauge = timeSeconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 + gaugeCategory = Debug - debugFloatField1Gauge = debugFloatField1, "debug f1", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField2Gauge = debugFloatField2, "debug f2: iTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField3Gauge = debugFloatField3, "debug f3: prevError", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField4Gauge = debugFloatField4, "debug f4: iParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField5Gauge = debugFloatField5, "debug f5: dParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField6Gauge = debugFloatField6, "debug f6: dTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField7Gauge = debugFloatField7, "debug f7", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugIntField1Gauge = debugIntField1, "debug i1: pParam", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField2Gauge = debugIntField2, "debug i2: offset", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField4Gauge = debugIntField4, "debug i4", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField5Gauge = debugIntField5, "debug i5", "%", 0, 100, 0, 0, 100, 100, 0, 0 + debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 gaugeCategory = Sensors - Basic diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index d681d656a9..943c7586cb 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:54 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:51:24 EST 2020 pageSize = 20000 page = 1 @@ -1483,6 +1483,22 @@ fileVersion = { 20191221 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + + + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 @@ -1954,19 +1970,20 @@ gaugeCategory = ECU Status firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 timeSecondsGauge = timeSeconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 + gaugeCategory = Debug - debugFloatField1Gauge = debugFloatField1, "debug f1", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField2Gauge = debugFloatField2, "debug f2: iTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField3Gauge = debugFloatField3, "debug f3: prevError", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField4Gauge = debugFloatField4, "debug f4: iParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField5Gauge = debugFloatField5, "debug f5: dParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField6Gauge = debugFloatField6, "debug f6: dTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField7Gauge = debugFloatField7, "debug f7", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugIntField1Gauge = debugIntField1, "debug i1: pParam", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField2Gauge = debugIntField2, "debug i2: offset", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField4Gauge = debugIntField4, "debug i4", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField5Gauge = debugIntField5, "debug i5", "%", 0, 100, 0, 0, 100, 100, 0, 0 + debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 gaugeCategory = Sensors - Basic diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 31970c9f4e..503c503159 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:51 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:51:11 EST 2020 pageSize = 20000 page = 1 @@ -1483,6 +1483,22 @@ fileVersion = { 20191221 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + + + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 @@ -1954,19 +1970,20 @@ gaugeCategory = ECU Status firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 timeSecondsGauge = timeSeconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 + gaugeCategory = Debug - debugFloatField1Gauge = debugFloatField1, "debug f1", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField2Gauge = debugFloatField2, "debug f2: iTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField3Gauge = debugFloatField3, "debug f3: prevError", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField4Gauge = debugFloatField4, "debug f4: iParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField5Gauge = debugFloatField5, "debug f5: dParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField6Gauge = debugFloatField6, "debug f6: dTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField7Gauge = debugFloatField7, "debug f7", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugIntField1Gauge = debugIntField1, "debug i1: pParam", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField2Gauge = debugIntField2, "debug i2: offset", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField4Gauge = debugIntField4, "debug i4", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField5Gauge = debugIntField5, "debug i5", "%", 0, 100, 0, 0, 100, 100, 0, 0 + debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 gaugeCategory = Sensors - Basic diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 285e2f1970..44620bd673 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:56 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:51:38 EST 2020 pageSize = 20000 page = 1 @@ -1483,6 +1483,22 @@ fileVersion = { 20191221 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + + + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 @@ -1954,19 +1970,20 @@ gaugeCategory = ECU Status firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 timeSecondsGauge = timeSeconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 + gaugeCategory = Debug - debugFloatField1Gauge = debugFloatField1, "debug f1", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField2Gauge = debugFloatField2, "debug f2: iTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField3Gauge = debugFloatField3, "debug f3: prevError", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField4Gauge = debugFloatField4, "debug f4: iParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField5Gauge = debugFloatField5, "debug f5: dParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField6Gauge = debugFloatField6, "debug f6: dTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField7Gauge = debugFloatField7, "debug f7", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugIntField1Gauge = debugIntField1, "debug i1: pParam", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField2Gauge = debugIntField2, "debug i2: offset", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField4Gauge = debugIntField4, "debug i4", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField5Gauge = debugIntField5, "debug i5", "%", 0, 100, 0, 0, 100, 100, 0, 0 + debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 gaugeCategory = Sensors - Basic diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 4f13c63064..beed59ae39 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:02:57 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:51:52 EST 2020 pageSize = 20000 page = 1 @@ -1483,6 +1483,22 @@ fileVersion = { 20191221 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + + + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 @@ -1954,19 +1970,20 @@ gaugeCategory = ECU Status firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 timeSecondsGauge = timeSeconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 + gaugeCategory = Debug - debugFloatField1Gauge = debugFloatField1, "debug f1", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField2Gauge = debugFloatField2, "debug f2: iTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField3Gauge = debugFloatField3, "debug f3: prevError", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField4Gauge = debugFloatField4, "debug f4: iParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField5Gauge = debugFloatField5, "debug f5: dParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField6Gauge = debugFloatField6, "debug f6: dTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField7Gauge = debugFloatField7, "debug f7", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugIntField1Gauge = debugIntField1, "debug i1: pParam", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField2Gauge = debugIntField2, "debug i2: offset", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField4Gauge = debugIntField4, "debug i4", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField5Gauge = debugIntField5, "debug i5", "%", 0, 100, 0, 0, 100, 100, 0, 0 + debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 gaugeCategory = Sensors - Basic From 986b80671b6dfa7af21d429e0a47e50bd868f5c2 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 3 Mar 2020 05:37:02 -0800 Subject: [PATCH 088/171] warnings (#1169) --- firmware/controllers/system/timer/event_queue.cpp | 2 -- firmware/controllers/trigger/decoders/trigger_structure.cpp | 4 ++-- firmware/controllers/trigger/decoders/trigger_structure.h | 6 +++--- firmware/hw_layer/can_hw.cpp | 2 ++ firmware/init/sensor/init_oil_pressure.cpp | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/firmware/controllers/system/timer/event_queue.cpp b/firmware/controllers/system/timer/event_queue.cpp index e7aa2feb58..5839582f4c 100644 --- a/firmware/controllers/system/timer/event_queue.cpp +++ b/firmware/controllers/system/timer/event_queue.cpp @@ -108,12 +108,10 @@ efitime_t EventQueue::getNextEventTime(efitime_t nowX) const { return EMPTY_QUEUE; } -static scheduling_s * longScheduling; /** * See also maxPrecisionCallbackDuration for total hw callback time */ uint32_t maxEventCallbackDuration = 0; -static uint32_t lastEventCallbackDuration; /** * Invoke all pending actions prior to specified timestamp diff --git a/firmware/controllers/trigger/decoders/trigger_structure.cpp b/firmware/controllers/trigger/decoders/trigger_structure.cpp index 03e74e8074..f43049bd75 100644 --- a/firmware/controllers/trigger/decoders/trigger_structure.cpp +++ b/firmware/controllers/trigger/decoders/trigger_structure.cpp @@ -102,7 +102,7 @@ void TriggerWaveform::initialize(operation_mode_e operationMode) { #endif } -int TriggerWaveform::getSize() const { +size_t TriggerWaveform::getSize() const { return privateTriggerDefinitionSize; } @@ -129,7 +129,7 @@ angle_t TriggerWaveform::getCycleDuration() const { * Trigger event count equals engine cycle event count if we have a cam sensor. * Two trigger cycles make one engine cycle in case of a four stroke engine If we only have a cranksensor. */ -uint32_t TriggerWaveform::getLength() const { +size_t TriggerWaveform::getLength() const { /** * 4 for FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR * 2 for FOUR_STROKE_CRANK_SENSOR diff --git a/firmware/controllers/trigger/decoders/trigger_structure.h b/firmware/controllers/trigger/decoders/trigger_structure.h index 11ac4b4cbd..8cddeb8367 100644 --- a/firmware/controllers/trigger/decoders/trigger_structure.h +++ b/firmware/controllers/trigger/decoders/trigger_structure.h @@ -45,7 +45,7 @@ */ class event_trigger_position_s { public: - uint32_t triggerEventIndex = 0; + size_t triggerEventIndex = 0; angle_t angleOffsetFromTriggerEvent = 0; @@ -242,8 +242,8 @@ public: /** * this one is per CRANKshaft revolution */ - uint32_t getLength() const; - int getSize() const; + size_t getLength() const; + size_t getSize() const; int getTriggerWaveformSynchPointIndex() const; void prepareShape(); diff --git a/firmware/hw_layer/can_hw.cpp b/firmware/hw_layer/can_hw.cpp index b8afe72a25..adf89a200e 100644 --- a/firmware/hw_layer/can_hw.cpp +++ b/firmware/hw_layer/can_hw.cpp @@ -222,6 +222,8 @@ public: } void PeriodicTask(efitime_t nowNt) { + UNUSED(nowNt); + switch (engineConfiguration->canNbcType) { case CAN_BUS_NBC_BMW: canDashboardBMW(); diff --git a/firmware/init/sensor/init_oil_pressure.cpp b/firmware/init/sensor/init_oil_pressure.cpp index ddd2e6388d..cbc6905723 100644 --- a/firmware/init/sensor/init_oil_pressure.cpp +++ b/firmware/init/sensor/init_oil_pressure.cpp @@ -23,7 +23,7 @@ void configureOilPressure(LinearFunc func, const oil_pressure_config_s& cfg) float greaterOutput = val1 > val2 ? val1 : val2; // Allow slightly negative output (-5kpa) so as to not fail the sensor when engine is off - oilpSensorFunc.configure(cfg.v1, val1, cfg.v2, val2, /*minOutput*/ -5, greaterOutput); + func.configure(cfg.v1, val1, cfg.v2, val2, /*minOutput*/ -5, greaterOutput); } void initOilPressure() { From 40b0783205e7dfe865733a405697a135b960c5d2 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 3 Mar 2020 14:56:50 -0800 Subject: [PATCH 089/171] Split out EtbHardware (#1168) * start tear out motor * fix * nuke reconfig * guard for test * test fixing * format, condense headers * fix todos * undo todo * format --- firmware/controllers/actuators/dc_motors.cpp | 129 +++++++++++++ firmware/controllers/actuators/dc_motors.h | 24 +++ .../actuators/electronic_throttle.cpp | 171 +++--------------- .../actuators/electronic_throttle.h | 3 - firmware/controllers/controllers.mk | 1 + firmware/hw_layer/hardware.cpp | 14 -- unit_tests/tests/test_etb.cpp | 25 ++- unit_tests/tests/test_idle_controller.cpp | 21 --- 8 files changed, 199 insertions(+), 189 deletions(-) create mode 100644 firmware/controllers/actuators/dc_motors.cpp create mode 100644 firmware/controllers/actuators/dc_motors.h diff --git a/firmware/controllers/actuators/dc_motors.cpp b/firmware/controllers/actuators/dc_motors.cpp new file mode 100644 index 0000000000..e5edd33863 --- /dev/null +++ b/firmware/controllers/actuators/dc_motors.cpp @@ -0,0 +1,129 @@ +/** + * @file dc_motors.cpp + * + * @date March 3, 2020 + * @author Matthew Kennedy (c) 2020 + */ + +#include "engine.h" +#include "io_pins.h" +#include "engine_configuration.h" +#include "engine_controller.h" +#include "periodic_task.h" + +#include "dc_motors.h" +#include "dc_motor.h" + +#include "efi_gpio.h" +#include "pwm_generator.h" + +EXTERN_ENGINE; + +class EtbHardware { +private: + OutputPin m_pinEnable; + OutputPin m_pinDir1; + OutputPin m_pinDir2; + + SimplePwm m_pwmEnable; + SimplePwm m_pwmDir1; + SimplePwm m_pwmDir2; + + SimplePwm etbPwmUp; + +public: + EtbHardware() : etbPwmUp("etbUp"), dcMotor(&m_pwmEnable, &m_pwmDir1, &m_pwmDir2) {} + + TwoPinDcMotor dcMotor; + + void setFrequency(int frequency) { + m_pwmEnable.setFrequency(frequency); + m_pwmDir1.setFrequency(frequency); + m_pwmDir2.setFrequency(frequency); + } + + void start(bool useTwoWires, + brain_pin_e pinEnable, + // since we have pointer magic here we cannot simply have value parameter + const pin_output_mode_e *pinEnableMode, + brain_pin_e pinDir1, + brain_pin_e pinDir2, + ExecutorInterface* executor, + int frequency) { + dcMotor.setType(useTwoWires ? TwoPinDcMotor::ControlType::PwmDirectionPins : TwoPinDcMotor::ControlType::PwmEnablePin); + + m_pinEnable.initPin("ETB Enable", pinEnable, pinEnableMode); + m_pinDir1.initPin("ETB Dir 1", pinDir1); + m_pinDir2.initPin("ETB Dir 2", pinDir2); + + // Clamp to >100hz + int clampedFrequency = maxI(100, frequency); + +// no need to complicate event queue with ETB PWM in unit tests +#if ! EFI_UNIT_TEST + startSimplePwm(&m_pwmEnable, "ETB Enable", + executor, + &m_pinEnable, + clampedFrequency, + 0, + (pwm_gen_callback*)applyPinState + ); + + startSimplePwm(&m_pwmDir1, "ETB Dir 1", + executor, + &m_pinDir1, + clampedFrequency, + 0, + (pwm_gen_callback*)applyPinState + ); + + startSimplePwm(&m_pwmDir2, "ETB Dir 2", + executor, + &m_pinDir2, + clampedFrequency, + 0, + (pwm_gen_callback*)applyPinState + ); +#endif /* EFI_UNIT_TEST */ + } +}; + +static EtbHardware etbHardware[ETB_COUNT]; + +DcMotor* initDcMotor(size_t index DECLARE_ENGINE_PARAMETER_SUFFIX) +{ + const auto& io = engineConfiguration->etbIo[index]; + auto& hw = etbHardware[index]; + + // controlPinMode is a strange feature - it's simply because I am short on 5v I/O on Frankenso with Miata NB2 test mule + hw.start( + CONFIG(etb_use_two_wires), + io.controlPin1, + &io.controlPinMode, + io.directionPin1, + io.directionPin2, + &ENGINE(executor), + CONFIG(etbFreq) + ); + + return &hw.dcMotor; +} + +void setDcMotorFrequency(size_t index, int hz) { + etbHardware[index].setFrequency(hz); +} + +void setDcMotorDuty(size_t index, float duty) { + etbHardware[index].dcMotor.set(duty); +} + +#if EFI_PROD_CODE +void showDcMotorInfo(Logging* logger) { + for (int i = 0 ; i < engine->etbActualCount; i++) { + EtbHardware *etb = &etbHardware[i]; + + scheduleMsg(logger, "ETB %d", i); + scheduleMsg(logger, "Motor: dir=%d DC=%f", etb->dcMotor.isOpenDirection(), etb->dcMotor.get()); + } +} +#endif \ No newline at end of file diff --git a/firmware/controllers/actuators/dc_motors.h b/firmware/controllers/actuators/dc_motors.h new file mode 100644 index 0000000000..0d9cfd4100 --- /dev/null +++ b/firmware/controllers/actuators/dc_motors.h @@ -0,0 +1,24 @@ +/** + * @file dc_motors.h + * + * @date March 3, 2020 + * @author Matthew Kennedy (c) 2020 + */ + +#pragma once + +#include +#include "global.h" + +class DcMotor; +class Logger; + +DcMotor* initDcMotor(size_t index DECLARE_ENGINE_PARAMETER_SUFFIX); + +// Manual control of motors for use by console commands +void setDcMotorFrequency(size_t index, int hz); +void setDcMotorDuty(size_t index, float duty); + +#if EFI_PROD_CODE +void showDcMotorInfo(Logging* logger); +#endif diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 81e4e426e2..09384a4a14 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -83,8 +83,8 @@ #include "engine_controller.h" #include "periodic_task.h" #include "pin_repository.h" -#include "pwm_generator.h" #include "dc_motor.h" +#include "dc_motors.h" #include "pid_auto_tune.h" #if defined(HAS_OS_ACCESS) @@ -108,74 +108,6 @@ static bool startupPositionError = false; #define STARTUP_NEUTRAL_POSITION_ERROR_THRESHOLD 5 -class EtbHardware { -private: - OutputPin m_pinEnable; - OutputPin m_pinDir1; - OutputPin m_pinDir2; - - SimplePwm m_pwmEnable; - SimplePwm m_pwmDir1; - SimplePwm m_pwmDir2; - - SimplePwm etbPwmUp; - -public: - EtbHardware() : etbPwmUp("etbUp"), dcMotor(&m_pwmEnable, &m_pwmDir1, &m_pwmDir2) {} - - TwoPinDcMotor dcMotor; - - void setFrequency(int frequency) { - m_pwmEnable.setFrequency(frequency); - m_pwmDir1.setFrequency(frequency); - m_pwmDir2.setFrequency(frequency); - } - - void start(bool useTwoWires, - brain_pin_e pinEnable, - // since we have pointer magic here we cannot simply have value parameter - pin_output_mode_e *pinEnableMode, - brain_pin_e pinDir1, - brain_pin_e pinDir2, - ExecutorInterface* executor, - int frequency) { - dcMotor.setType(useTwoWires ? TwoPinDcMotor::ControlType::PwmDirectionPins : TwoPinDcMotor::ControlType::PwmEnablePin); - - m_pinEnable.initPin("ETB Enable", pinEnable, pinEnableMode); - m_pinDir1.initPin("ETB Dir 1", pinDir1); - m_pinDir2.initPin("ETB Dir 2", pinDir2); - - // Clamp to >100hz - int clampedFrequency = maxI(100, frequency); - - -// no need to complicate event queue with ETB PWM in unit tests -#if ! EFI_UNIT_TEST - startSimplePwm(&m_pwmEnable, "ETB Enable", - executor, - &m_pinEnable, - clampedFrequency, - 0, - (pwm_gen_callback*)applyPinState); - - startSimplePwm(&m_pwmDir1, "ETB Dir 1", - executor, - &m_pinDir1, - clampedFrequency, - 0, - (pwm_gen_callback*)applyPinState); - - startSimplePwm(&m_pwmDir2, "ETB Dir 2", - executor, - &m_pinDir2, - clampedFrequency, - 0, - (pwm_gen_callback*)applyPinState); -#endif /* EFI_UNIT_TEST */ - } -}; - - extern percent_t mockPedalPosition; static percent_t directPwmValue = NAN; @@ -196,7 +128,7 @@ void EtbController::reset() { } void EtbController::onConfigurationChange(pid_s* previousConfiguration) { - if (m_pid.isSame(previousConfiguration)) { + if (m_motor && m_pid.isSame(previousConfiguration)) { m_shouldResetPid = true; } } @@ -359,7 +291,6 @@ DISPLAY(DISPLAY_IF(hasEtbPedalPositionSensor)) } } -static EtbHardware etbHardware[ETB_COUNT]; // real implementation (we mock for some unit tests) EtbController etbControllers[ETB_COUNT]; @@ -390,13 +321,7 @@ static void showEthInfo(void) { scheduleMsg(&logger, "dir1=%s", hwPortname(CONFIG(etbIo[0].directionPin1))); scheduleMsg(&logger, "dir2=%s", hwPortname(CONFIG(etbIo[0].directionPin2))); - for (int i = 0 ; i < engine->etbActualCount; i++) { - EtbHardware *etb = &etbHardware[i]; - - scheduleMsg(&logger, "ETB %d", i); - scheduleMsg(&logger, "Motor: dir=%d DC=%f", etb->dcMotor.isOpenDirection(), etb->dcMotor.get()); - etbControllers[i].showStatus(&logger); - } + showDcMotorInfo(&logger); #endif /* EFI_PROD_CODE */ } @@ -425,7 +350,7 @@ void setThrottleDutyCycle(percent_t level) { float dc = ETB_PERCENT_TO_DUTY(level); directPwmValue = dc; for (int i = 0 ; i < engine->etbActualCount; i++) { - etbHardware[i].dcMotor.set(dc); + setDcMotorDuty(i, dc); } scheduleMsg(&logger, "duty ETB duty=%f", dc); } @@ -434,7 +359,7 @@ static void setEtbFrequency(int frequency) { engineConfiguration->etbFreq = frequency; for (int i = 0 ; i < engine->etbActualCount; i++) { - etbHardware[i].setFrequency(frequency); + setDcMotorFrequency(i, frequency); } } @@ -442,7 +367,7 @@ static void etbReset() { scheduleMsg(&logger, "etbReset"); for (int i = 0 ; i < engine->etbActualCount; i++) { - etbHardware[i].dcMotor.set(0); + setDcMotorDuty(i, 0); } etbPidReset(); @@ -549,63 +474,12 @@ void setDefaultEtbParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->etb.maxValue = 200; } -static bool isEtbPinsChanged(etb_io *current, etb_io *active) { - return current->controlPin1 != active->controlPin1 || - current->controlPinMode != active->controlPinMode || - current->directionPin1 != active->directionPin1 || - current->directionPin2 != active->directionPin2; -} - -#if EFI_PROD_CODE -bool isETBRestartNeeded(void) { - for (int i = 0 ; i < ETB_COUNT; i++) { - /** - * We do not want any interruption in HW pin while adjusting other properties - */ - bool changed = isEtbPinsChanged(&engineConfiguration->etbIo[i], &activeConfiguration.etbIo[i]); - if (changed) { - return changed; - } - } - return false; -} - -void stopETBPins(void) { - for (int i = 0 ; i < ETB_COUNT; i++) { - etb_io *activeIo = &activeConfiguration.etbIo[i]; - brain_pin_markUnused(activeIo->controlPin1); - brain_pin_markUnused(activeIo->directionPin1); - brain_pin_markUnused(activeIo->directionPin2); - } -} -#endif /* EFI_PROD_CODE */ - void onConfigurationChangeElectronicThrottleCallback(engine_configuration_s *previousConfiguration) { for (int i = 0; i < ETB_COUNT; i++) { etbControllers[i].onConfigurationChange(&previousConfiguration->etb); } } -void startETBPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - - /** - * safer to start 2nd ETB even if 2nd TPS is not configured by mistake - */ - for (int i = 0 ; i < ETB_COUNT; i++) { - etb_io *io = &engineConfiguration->etbIo[i]; - // controlPinMode is a strange feature - it's simply because I am short on 5v I/O on Frankenso with Miata NB2 test mule - etbHardware[i].start( - CONFIG(etb_use_two_wires), - io->controlPin1, - &io->controlPinMode, - io->directionPin1, - io->directionPin2, - &ENGINE(executor), - CONFIG(etbFreq) - ); - } -} - #if EFI_PROD_CODE && 0 static void setTempOutput(float value) { autoTune.output = value; @@ -679,20 +553,28 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { addConsoleActionI("etb_freq", setEtbFrequency); #endif /* EFI_PROD_CODE */ - for (int i = 0 ; i < ETB_COUNT; i++) { - engine->etbControllers[i]->init(&etbHardware[i].dcMotor, i, &engineConfiguration->etb); - INJECT_ENGINE_REFERENCE(engine->etbControllers[i]); - } - - - pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins); - engine->engineState.hasEtbPedalPositionSensor = hasPedalPositionSensor(PASS_ENGINE_PARAMETER_SIGNATURE); if (!engine->engineState.hasEtbPedalPositionSensor) { +#if EFI_PROD_CODE + // TODO: Once switched to new sensor model for pedal, we don't need this to be test-guarded. return; +#endif } engine->etbActualCount = hasSecondThrottleBody(PASS_ENGINE_PARAMETER_SIGNATURE) ? 2 : 1; + for (int i = 0 ; i < engine->etbActualCount; i++) { + auto motor = initDcMotor(i PASS_ENGINE_PARAMETER_SUFFIX); + + // If this motor is actually set up, init the etb + if (motor) + { + engine->etbControllers[i]->init(motor, i, &engineConfiguration->etb); + INJECT_ENGINE_REFERENCE(engine->etbControllers[i]); + } + } + + pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins); + #if 0 // not alive code autoTune.SetOutputStep(0.1); @@ -711,24 +593,19 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } #endif /* EFI_UNIT_TEST */ - startETBPins(PASS_ENGINE_PARAMETER_SIGNATURE); - #if EFI_PROD_CODE if (engineConfiguration->etbCalibrationOnStart) { for (int i = 0 ; i < engine->etbActualCount; i++) { - EtbHardware *etb = &etbHardware[i]; - - etb->dcMotor.set(70); + setDcMotorDuty(i, 70); chThdSleep(600); // todo: grab with proper index grabTPSIsWideOpen(); - etb->dcMotor.set(-70); + setDcMotorDuty(i, -70); chThdSleep(600); // todo: grab with proper index grabTPSIsClosed(); } - } // manual duty cycle control without PID. Percent value from 0 to 100 diff --git a/firmware/controllers/actuators/electronic_throttle.h b/firmware/controllers/actuators/electronic_throttle.h index b5cb156a50..6957c2d297 100644 --- a/firmware/controllers/actuators/electronic_throttle.h +++ b/firmware/controllers/actuators/electronic_throttle.h @@ -61,8 +61,5 @@ void setEtbIFactor(float value); void setEtbDFactor(float value); void setEtbOffset(int value); void setThrottleDutyCycle(percent_t level); -bool isETBRestartNeeded(void); -void stopETBPins(void); -void startETBPins(DECLARE_ENGINE_PARAMETER_SIGNATURE); void onConfigurationChangeElectronicThrottleCallback(engine_configuration_s *previousConfiguration); void unregisterEtbPins(); diff --git a/firmware/controllers/controllers.mk b/firmware/controllers/controllers.mk index a2f6683766..ff0bc0b449 100644 --- a/firmware/controllers/controllers.mk +++ b/firmware/controllers/controllers.mk @@ -14,6 +14,7 @@ CONTROLLERS_SRC_CPP = \ $(CONTROLLERS_DIR)/actuators/electronic_throttle.cpp \ $(CONTROLLERS_DIR)/actuators/alternator_controller.cpp \ $(CONTROLLERS_DIR)/actuators/boost_control.cpp \ + $(CONTROLLERS_DIR)/actuators/dc_motors.cpp \ $(CONTROLLERS_DIR)/actuators/idle_thread.cpp \ $(CONTROLLERS_DIR)/actuators/pwm_tester.cpp \ $(CONTROLLERS_DIR)/actuators/algo/aux_pid.cpp \ diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index d8b019f3a6..035a71ed41 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -33,7 +33,6 @@ //#include "usb_msd.h" #include "AdcConfiguration.h" -#include "electronic_throttle.h" #include "idle_thread.h" #include "mcp3208.h" #include "hip9011.h" @@ -310,13 +309,6 @@ void applyNewHardwareSettings(void) { } #endif -#if EFI_ELECTRONIC_THROTTLE_BODY - bool etbRestartNeeded = isETBRestartNeeded(); - if (etbRestartNeeded) { - stopETBPins(); - } -#endif /* EFI_ELECTRONIC_THROTTLE_BODY */ - #if (BOARD_TLE6240_COUNT > 0) stopSmartCsPins(); #endif /* (BOARD_MC33972_COUNT > 0) */ @@ -383,12 +375,6 @@ void applyNewHardwareSettings(void) { } #endif -#if EFI_ELECTRONIC_THROTTLE_BODY - if (etbRestartNeeded) { - startETBPins(PASS_ENGINE_PARAMETER_SIGNATURE); - } -#endif /* EFI_ELECTRONIC_THROTTLE_BODY */ - #if EFI_VEHICLE_SPEED startVSSPins(); #endif /* EFI_VEHICLE_SPEED */ diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index 5e8dcf7df4..e781ab636a 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -8,6 +8,8 @@ #include "engine_test_helper.h" #include "electronic_throttle.h" #include "dc_motor.h" +#include "engine_controller.h" +#include "tps.h" class MockEtb : public IEtbController { public: @@ -48,7 +50,7 @@ TEST(etb, singleEtbInitialization) { engine->etbControllers[i] = &mocks[i]; } - engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_9; + engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_9; doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); @@ -56,16 +58,31 @@ TEST(etb, singleEtbInitialization) { ASSERT_EQ(1, mocks[0].initCount) << "1st init"; ASSERT_EQ(1, mocks[0].startCount); - // assert that 2nd ETB is initialized but not started - ASSERT_EQ(1, mocks[1].initCount) << "2nd init"; + // assert that 2nd ETB is neither initialized nor started + ASSERT_EQ(0, mocks[1].initCount) << "2nd init"; ASSERT_EQ(0, mocks[1].startCount) << "2nd start"; // todo: set mock pedal position // todo: set mock ETB throttle position // todo: invoke EtbController#PeriodicTask a few times and assert that duty cycle changes - } +TEST(idle, testTargetTpsIsFloatBug945) { + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); + setMockThrottlePedalSensorVoltage(3 PASS_ENGINE_PARAMETER_SUFFIX); + engine->etbControllers[0]->PeriodicTask(); + ASSERT_NEAR(50, engine->engineState.targetFromTable, EPS4D); + + setMockThrottlePedalSensorVoltage(3.05 PASS_ENGINE_PARAMETER_SUFFIX); + ASSERT_NEAR(50.8302, getPedalPosition(PASS_ENGINE_PARAMETER_SIGNATURE), EPS4D); + engine->etbControllers[0]->PeriodicTask(); + ASSERT_NEAR(50.8302, engine->engineState.targetFromTable, EPS4D); + + setMockThrottlePedalSensorVoltage(3.1 PASS_ENGINE_PARAMETER_SUFFIX); + engine->etbControllers[0]->PeriodicTask(); + ASSERT_NEAR(51.6605, engine->engineState.targetFromTable, EPS4D); +} diff --git a/unit_tests/tests/test_idle_controller.cpp b/unit_tests/tests/test_idle_controller.cpp index 573b8665c3..4e1ee6c778 100644 --- a/unit_tests/tests/test_idle_controller.cpp +++ b/unit_tests/tests/test_idle_controller.cpp @@ -127,24 +127,3 @@ TEST(idle, timingPid) { ASSERT_FLOAT_EQ(-5.0f, corr) << "getAdvanceCorrections#7"; } - -// not great that we are reusing shared instance. todo: move EtbController to Engine? - -TEST(idle, testTargetTpsIsFloatBug945) { - - WITH_ENGINE_TEST_HELPER(TEST_ENGINE); - - setMockThrottlePedalSensorVoltage(3 PASS_ENGINE_PARAMETER_SUFFIX); - engine->etbControllers[0]->PeriodicTask(); - ASSERT_NEAR(50, engine->engineState.targetFromTable, EPS4D); - - setMockThrottlePedalSensorVoltage(3.05 PASS_ENGINE_PARAMETER_SUFFIX); - ASSERT_NEAR(50.8302, getPedalPosition(PASS_ENGINE_PARAMETER_SIGNATURE), EPS4D); - engine->etbControllers[0]->PeriodicTask(); - ASSERT_NEAR(50.8302, engine->engineState.targetFromTable, EPS4D); - - setMockThrottlePedalSensorVoltage(3.1 PASS_ENGINE_PARAMETER_SUFFIX); - engine->etbControllers[0]->PeriodicTask(); - ASSERT_NEAR(51.6605, engine->engineState.targetFromTable, EPS4D); - -} From 824465ed5e38e4c59ea63c3a65ef5d0acca4506b Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 3 Mar 2020 21:00:28 -0500 Subject: [PATCH 090/171] for sale --- hardware/Breakout_134pin_7-967288-1/readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hardware/Breakout_134pin_7-967288-1/readme.md b/hardware/Breakout_134pin_7-967288-1/readme.md index 7074697eaf..b995617abb 100644 --- a/hardware/Breakout_134pin_7-967288-1/readme.md +++ b/hardware/Breakout_134pin_7-967288-1/readme.md @@ -1,4 +1,6 @@ +[For Sale](https://www.ebay.com/itm/333534819202) + 2 layer 140x74mm From f93ac0751d2301e55f3daaebf6bc2fc93b2caeb6 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 5 Mar 2020 21:16:45 -0500 Subject: [PATCH 091/171] better invalid configuration handling --- firmware/controllers/engine_controller.cpp | 2 +- firmware/controllers/system/efi_gpio.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 524e1d2f66..ad9dae4ad3 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200225; + return 201200305; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index 6a24b673c7..ff90a1708e 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -421,7 +421,10 @@ void OutputPin::initPin(const char *msg, brain_pin_e brainPin, const pin_output_ if (brainPin == GPIO_UNASSIGNED) return; - assertOMode(*outputMode); + if (*outputMode > OM_OPENDRAIN_INVERTED) { + firmwareError(CUSTOM_INVALID_MODE_SETTING, "%s invalid pin_output_mode_e", msg); + return; + } iomode_t mode = (*outputMode == OM_DEFAULT || *outputMode == OM_INVERTED) ? PAL_MODE_OUTPUT_PUSHPULL : PAL_MODE_OUTPUT_OPENDRAIN; From 2bc05e6859c7e38c3d7ce15917096a163caee2c8 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 6 Mar 2020 00:37:30 -0500 Subject: [PATCH 092/171] Rusefi Console requires rusefi.ini, which is not present in microrusefi bundle #1172 --- java_console/ui/src/com/rusefi/Launcher.java | 2 +- .../ui/src/com/rusefi/ui/SettingsTab.java | 5 +++- .../com/rusefi/ui/config/IniFileModel.java | 25 ++++++++++++++----- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index e01e7c1761..0c0d392743 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -49,7 +49,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20200222; + public static final int CONSOLE_VERSION = 20200305; public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); diff --git a/java_console/ui/src/com/rusefi/ui/SettingsTab.java b/java_console/ui/src/com/rusefi/ui/SettingsTab.java index e744ac5082..807e30bbe7 100644 --- a/java_console/ui/src/com/rusefi/ui/SettingsTab.java +++ b/java_console/ui/src/com/rusefi/ui/SettingsTab.java @@ -15,6 +15,9 @@ import java.util.ArrayList; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import static com.rusefi.ui.config.IniFileModel.RUSEFI_INI_PREFIX; +import static com.rusefi.ui.config.IniFileModel.RUSEFI_INI_SUFFIX; + /** * @see EnumConfigField */ @@ -36,7 +39,7 @@ public class SettingsTab { final Map dialogs = IniFileModel.getInstance().getDialogs(); if (dialogs.isEmpty()) { content.removeAll(); - content.add(new JLabel("Meta data not found: " + IniFileModel.RUSEFI_INI)); + content.add(new JLabel("Meta data not found: " + RUSEFI_INI_PREFIX + "*" + RUSEFI_INI_SUFFIX)); UiUtils.trueLayout(content); return; } diff --git a/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java b/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java index cd89b33d56..31c253556a 100644 --- a/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java +++ b/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java @@ -14,9 +14,8 @@ import static com.rusefi.Launcher.INI_FILE_PATH; * 12/23/2015. */ public class IniFileModel { - public static final String RUSEFI_INI = "rusefi.ini"; - // todo: https://sourceforge.net/p/rusefi/tickets/243/ - private static final String FILENAME = INI_FILE_PATH + File.separator + RUSEFI_INI; + public static final String RUSEFI_INI_PREFIX = "rusefi"; + public static final String RUSEFI_INI_SUFFIX = ".ini"; private final static IniFileModel INSTANCE = new IniFileModel(); private String dialogId; @@ -35,9 +34,12 @@ public class IniFileModel { } private void readIniFile() { - File input = new File(FILENAME); - if (!input.exists()) { - System.out.println("No such file: " + FILENAME); + String fileName = findMetaInfoFile(); + File input = null; + if (fileName != null) + input = new File(fileName); + if (fileName == null || !input.exists()) { + System.out.println("No such file: " + RUSEFI_INI_PREFIX + "*" + RUSEFI_INI_SUFFIX); return; } @@ -51,6 +53,17 @@ public class IniFileModel { finishDialog(); } + private String findMetaInfoFile() { + File dir = new File(INI_FILE_PATH); + if (!dir.isDirectory()) + return null; + for (String file : dir.list()) { + if (file.startsWith(RUSEFI_INI_PREFIX) && file.endsWith(RUSEFI_INI_SUFFIX)) + return INI_FILE_PATH + File.separator + file; + } + return null; + } + private void finishDialog() { if (fieldsOfCurrentDialog.isEmpty()) return; From 0a7356cf3992d802cafd64bd97c01f48b5bc7357 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 6 Mar 2020 01:26:33 -0500 Subject: [PATCH 093/171] code style --- firmware/config/engines/GY6_139QMB.h | 5 +---- firmware/config/engines/chevrolet_c20_1973.h | 4 +--- firmware/config/engines/chevrolet_camaro_4.h | 5 +---- firmware/config/engines/citroenBerlingoTU3JP.h | 5 +---- firmware/config/engines/dodge_neon.h | 5 +---- firmware/config/engines/dodge_ram.h | 4 +--- firmware/config/engines/dodge_stratus.h | 6 +----- firmware/config/engines/ford_festiva.h | 6 +----- firmware/config/engines/honda_600.h | 5 +---- firmware/config/engines/honda_accord.h | 5 +---- firmware/config/engines/lada_kalina.h | 5 +---- firmware/config/engines/mazda_626.h | 4 +--- firmware/config/engines/suzuki_vitara.h | 4 +--- firmware/config/engines/test_engine.h | 5 ++--- firmware/config/engines/toyota_jzs147.h | 4 +--- firmware/config/engines/zil130.h | 4 +--- 16 files changed, 17 insertions(+), 59 deletions(-) diff --git a/firmware/config/engines/GY6_139QMB.h b/firmware/config/engines/GY6_139QMB.h index aaf8343070..36137a5bb9 100644 --- a/firmware/config/engines/GY6_139QMB.h +++ b/firmware/config/engines/GY6_139QMB.h @@ -6,11 +6,8 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef GY6_139QMB_H_ -#define GY6_139QMB_H_ - +#pragma once #include "engine_configuration.h" void setGy6139qmbDefaultEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* GY6_139QMB_H_ */ diff --git a/firmware/config/engines/chevrolet_c20_1973.h b/firmware/config/engines/chevrolet_c20_1973.h index 52c6075686..c91cb0255f 100644 --- a/firmware/config/engines/chevrolet_c20_1973.h +++ b/firmware/config/engines/chevrolet_c20_1973.h @@ -5,11 +5,9 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_CHEVROLET_C20_1973_H_ -#define CONFIG_ENGINES_CHEVROLET_C20_1973_H_ +#pragma once #include "engine_configuration.h" void set1973c20(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CONFIG_ENGINES_CHEVROLET_C20_1973_H_ */ diff --git a/firmware/config/engines/chevrolet_camaro_4.h b/firmware/config/engines/chevrolet_camaro_4.h index 12feb5b5c6..7e05f5efa6 100644 --- a/firmware/config/engines/chevrolet_camaro_4.h +++ b/firmware/config/engines/chevrolet_camaro_4.h @@ -5,11 +5,8 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_CHEVROLET_CAMARO_4_H_ -#define CONFIG_ENGINES_CHEVROLET_CAMARO_4_H_ - +#pragma once #include "engine_configuration.h" void setCamaro4(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CONFIG_ENGINES_CHEVROLET_CAMARO_4_H_ */ diff --git a/firmware/config/engines/citroenBerlingoTU3JP.h b/firmware/config/engines/citroenBerlingoTU3JP.h index ff5b70e9fe..b1e2f32fc2 100644 --- a/firmware/config/engines/citroenBerlingoTU3JP.h +++ b/firmware/config/engines/citroenBerlingoTU3JP.h @@ -5,11 +5,8 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CITROENBERLINGOTU3JP_H_ -#define CITROENBERLINGOTU3JP_H_ - +#pragma once #include "engine_configuration.h" void setCitroenBerlingoTU3JPConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CITROENBERLINGOTU3JP_H_ */ diff --git a/firmware/config/engines/dodge_neon.h b/firmware/config/engines/dodge_neon.h index dfb360cc8a..1db07f5e1f 100644 --- a/firmware/config/engines/dodge_neon.h +++ b/firmware/config/engines/dodge_neon.h @@ -6,9 +6,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef DODGE_NEON_H_ -#define DODGE_NEON_H_ - +#pragma once #include "engine_configuration.h" void setDodgeNeon1995EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); @@ -20,4 +18,3 @@ void setDodgeNeonNGCEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); */ void setDodgeNeonNGCEngineConfigurationCrankBased(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* DODGE_NEON_H_ */ diff --git a/firmware/config/engines/dodge_ram.h b/firmware/config/engines/dodge_ram.h index 477241cb49..ea24f98a52 100644 --- a/firmware/config/engines/dodge_ram.h +++ b/firmware/config/engines/dodge_ram.h @@ -5,11 +5,9 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_DODGE_RAM_H_ -#define CONFIG_ENGINES_DODGE_RAM_H_ +#pragma once #include "engine_configuration.h" void setDodgeRam1996(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CONFIG_ENGINES_DODGE_RAM_H_ */ diff --git a/firmware/config/engines/dodge_stratus.h b/firmware/config/engines/dodge_stratus.h index 4e719d1c11..77b6d16655 100644 --- a/firmware/config/engines/dodge_stratus.h +++ b/firmware/config/engines/dodge_stratus.h @@ -5,11 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_DODGE_STRATUS_H_ -#define CONFIG_ENGINES_DODGE_STRATUS_H_ - +#pragma once #include "engine_configuration.h" void setDodgeStratus(DECLARE_CONFIG_PARAMETER_SIGNATURE); - -#endif /* CONFIG_ENGINES_DODGE_STRATUS_H_ */ diff --git a/firmware/config/engines/ford_festiva.h b/firmware/config/engines/ford_festiva.h index bebcc32ddc..aa58c9de3c 100644 --- a/firmware/config/engines/ford_festiva.h +++ b/firmware/config/engines/ford_festiva.h @@ -5,11 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_FORD_FESTIVA_H_ -#define CONFIG_ENGINES_FORD_FESTIVA_H_ - +#pragma once #include "engine_configuration.h" void setFordEscortGt(DECLARE_CONFIG_PARAMETER_SIGNATURE); - -#endif /* CONFIG_ENGINES_FORD_FESTIVA_H_ */ diff --git a/firmware/config/engines/honda_600.h b/firmware/config/engines/honda_600.h index 5e41eed94b..ec46c70dd8 100644 --- a/firmware/config/engines/honda_600.h +++ b/firmware/config/engines/honda_600.h @@ -5,11 +5,8 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_HONDA_600_H_ -#define CONFIG_ENGINES_HONDA_600_H_ - +#pragma once #include "engine_configuration.h" void setHonda600(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CONFIG_ENGINES_HONDA_600_H_ */ diff --git a/firmware/config/engines/honda_accord.h b/firmware/config/engines/honda_accord.h index 48b3c350c7..f9e32ee114 100644 --- a/firmware/config/engines/honda_accord.h +++ b/firmware/config/engines/honda_accord.h @@ -5,9 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef HONDA_ACCORD_H_ -#define HONDA_ACCORD_H_ - +#pragma once #include "engine_configuration.h" void setHondaAccordConfigurationTwoWires(DECLARE_CONFIG_PARAMETER_SIGNATURE); @@ -18,4 +16,3 @@ void setHondaAccordConfiguration1_24_shifted(DECLARE_CONFIG_PARAMETER_SIGNATURE) void setHondaCivic4_0_both(DECLARE_CONFIG_PARAMETER_SIGNATURE); void setHondaCivic4_0_rise(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* HONDA_ACCORD_H_ */ diff --git a/firmware/config/engines/lada_kalina.h b/firmware/config/engines/lada_kalina.h index dd0e152295..9e376a607e 100644 --- a/firmware/config/engines/lada_kalina.h +++ b/firmware/config/engines/lada_kalina.h @@ -5,11 +5,8 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_LADA_KALINA_H_ -#define CONFIG_ENGINES_LADA_KALINA_H_ - +#pragma once #include "engine_configuration.h" void setLadaKalina(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CONFIG_ENGINES_LADA_KALINA_H_ */ diff --git a/firmware/config/engines/mazda_626.h b/firmware/config/engines/mazda_626.h index 323303c7e4..cadb76c0d3 100644 --- a/firmware/config/engines/mazda_626.h +++ b/firmware/config/engines/mazda_626.h @@ -6,11 +6,9 @@ * @date Jan 16, 2015 * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_MAZDA_626_H_ -#define CONFIG_ENGINES_MAZDA_626_H_ +#pragma once #include "engine_configuration.h" void setMazda626EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CONFIG_ENGINES_MAZDA_626_H_ */ diff --git a/firmware/config/engines/suzuki_vitara.h b/firmware/config/engines/suzuki_vitara.h index e2a36123e7..ae8dff16fd 100644 --- a/firmware/config/engines/suzuki_vitara.h +++ b/firmware/config/engines/suzuki_vitara.h @@ -5,11 +5,9 @@ * @date Oct 17, 2015 */ -#ifndef CONFIG_ENGINES_SUZUKI_VITARA_H_ -#define CONFIG_ENGINES_SUZUKI_VITARA_H_ +#pragma once #include "engine_configuration.h" void setSuzukiVitara(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CONFIG_ENGINES_SUZUKI_VITARA_H_ */ diff --git a/firmware/config/engines/test_engine.h b/firmware/config/engines/test_engine.h index 709f39d3f9..1d5e0334a0 100644 --- a/firmware/config/engines/test_engine.h +++ b/firmware/config/engines/test_engine.h @@ -4,8 +4,8 @@ * @date Nov 14, 2014 * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef TEST_ENGINE_H_ -#define TEST_ENGINE_H_ + +#pragma once #include "engine_configuration.h" @@ -15,4 +15,3 @@ void setTestVVTEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); void setTestEngineIssue366both(DECLARE_CONFIG_PARAMETER_SIGNATURE); void setTestEngineIssue366rise(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* TEST_ENGINE_H_ */ diff --git a/firmware/config/engines/toyota_jzs147.h b/firmware/config/engines/toyota_jzs147.h index 66b90c4282..c93e1a9384 100644 --- a/firmware/config/engines/toyota_jzs147.h +++ b/firmware/config/engines/toyota_jzs147.h @@ -5,12 +5,10 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef CONFIG_ENGINES_TOYOTA_JZS147_H_ -#define CONFIG_ENGINES_TOYOTA_JZS147_H_ +#pragma once #include "engine_configuration.h" void setToyota_jzs147EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); void setToyota_2jz_vics(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* CONFIG_ENGINES_TOYOTA_JZS147_H_ */ diff --git a/firmware/config/engines/zil130.h b/firmware/config/engines/zil130.h index caa0011acb..1380681eff 100644 --- a/firmware/config/engines/zil130.h +++ b/firmware/config/engines/zil130.h @@ -5,11 +5,9 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#ifndef ZIL130_H_ -#define ZIL130_H_ +#pragma once #include "engine_configuration.h" void setZil130(DECLARE_CONFIG_PARAMETER_SIGNATURE); -#endif /* ZIL130_H_ */ From a33d47968342643ff514c88a2e148f0bdbf72a05 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 6 Mar 2020 01:31:04 -0500 Subject: [PATCH 094/171] CLT stops working when using 2-0 custom trigger wheel #1171 --- .../controllers/trigger/decoders/trigger_universal.cpp | 2 +- unit_tests/tests/test_trigger_decoder.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/trigger/decoders/trigger_universal.cpp b/firmware/controllers/trigger/decoders/trigger_universal.cpp index cca3ac2945..efd29d02c7 100644 --- a/firmware/controllers/trigger/decoders/trigger_universal.cpp +++ b/firmware/controllers/trigger/decoders/trigger_universal.cpp @@ -39,7 +39,7 @@ void initializeSkippedToothTriggerWaveformExt(TriggerWaveform *s, int totalTeeth s->initialize(operationMode); s->setTriggerSynchronizationGap(skippedCount + 1); - s->shapeWithoutTdc = (totalTeethCount > 2) && (skippedCount == 0); + s->shapeWithoutTdc = (totalTeethCount > 1) && (skippedCount == 0); s->isSynchronizationNeeded = (totalTeethCount > 2) && (skippedCount != 0); diff --git a/unit_tests/tests/test_trigger_decoder.cpp b/unit_tests/tests/test_trigger_decoder.cpp index cb0b4cf2f8..0771e400be 100644 --- a/unit_tests/tests/test_trigger_decoder.cpp +++ b/unit_tests/tests/test_trigger_decoder.cpp @@ -45,6 +45,15 @@ static int getTriggerZeroEventIndex(engine_type_e engineType) { PASS_CONFIG_PARAMETER_SUFFIX); } +TEST(misc, testSkipped2_0) { + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + // for this test we need a trigger with isSynchronizationNeeded=true + engineConfiguration->trigger.customTotalToothCount = 2; + engineConfiguration->trigger.customSkippedToothCount = 0; + eth.setTriggerType(TT_TOOTHED_WHEEL PASS_ENGINE_PARAMETER_SUFFIX); + ASSERT_EQ( 0, GET_RPM()) << "testNoStartUpWarnings RPM"; +} + static void testDodgeNeonDecoder(void) { printf("*************************************************** testDodgeNeonDecoder95\r\n"); From 9316272f902ecaaced1c1ce5927917f7b379071c Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 7 Mar 2020 00:45:45 -0500 Subject: [PATCH 095/171] slow v12 progress --- firmware/config/boards/proteus/board_configuration.cpp | 3 ++- firmware/config/boards/proteus/mapping.yaml | 4 ++-- firmware/config/engines/bmw_m73.cpp | 5 ++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/firmware/config/boards/proteus/board_configuration.cpp b/firmware/config/boards/proteus/board_configuration.cpp index 56e39d8ae6..47e08cafbf 100644 --- a/firmware/config/boards/proteus/board_configuration.cpp +++ b/firmware/config/boards/proteus/board_configuration.cpp @@ -54,7 +54,8 @@ static void setIgnitionPins() { } static void setLedPins() { - engineConfiguration->communicationLedPin = GPIOE_4; + CONFIG(warningLedPin) = GPIOE_3; + CONFIG(communicationLedPin) = GPIOE_4; engineConfiguration->runningLedPin = GPIOE_5; engineConfiguration->triggerErrorPin = GPIOE_6; } diff --git a/firmware/config/boards/proteus/mapping.yaml b/firmware/config/boards/proteus/mapping.yaml index 3256ac8626..212eef7031 100644 --- a/firmware/config/boards/proteus/mapping.yaml +++ b/firmware/config/boards/proteus/mapping.yaml @@ -66,11 +66,11 @@ analog_inputs: EFI_ADC_2: "Analog Volt 7" # PA3 EFI_ADC_3: "Analog Volt 8" - # PA4 + # PA4 - pin #17 EFI_ADC_4: "Analog Volt 9" # PA5 EFI_ADC_5: "Analog Volt 10" - # PA6 + # PA6 - pin #18 EFI_ADC_6: "Analog Volt 11" # PA7 EFI_ADC_7: "Analog Volt 12" diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index 067fc61c3a..ab9a8a2ee3 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -217,6 +217,8 @@ GPIOA_6 /** * set engine_type 63 * + * https://github.com/mck1117/proteus/blob/master/readme_pinout.md + * * black#3 : orange : injector #1 * black#4 : blue : injector #3 * black#5 : white : injector #5 @@ -244,6 +246,7 @@ GPIOA_6 * * * white#9 : orange : +5v + * white#17: green : PPS * white#18: red * white#23: black : Sensor Ground * white#24: red : TPS#1 @@ -254,7 +257,7 @@ void setEngineBMW_M73_Proteus(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // 12 injectors defined in boards/proteus/board_configuration.cpp - engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_6; + engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_4; // set vbatt_divider 8.16 // engineConfiguration->vbattDividerCoeff = (49.0f / 10.0f) * 16.8f / 10.0f; From e32be1799d20c6fba3b8a03d75da572e11a94e33 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 7 Mar 2020 07:23:30 -0800 Subject: [PATCH 096/171] Simplify flash logic (#1154) * simplify flash stuff * put those back for now * and those * extra check * fix * crc the correct thing * undo crc changes * unwind --- firmware/controllers/flash_main.cpp | 44 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/firmware/controllers/flash_main.cpp b/firmware/controllers/flash_main.cpp index 8f93fad206..9bc8d2252b 100644 --- a/firmware/controllers/flash_main.cpp +++ b/firmware/controllers/flash_main.cpp @@ -35,13 +35,6 @@ extern persistent_config_container_s persistentState; extern engine_configuration_s *engineConfiguration; -/** - * this address needs to be above 'flash' region available for firmware - * todo: an ideal solution would be to define this address in the .ld / .icf mapping file - */ - -#define PERSISTENT_SIZE sizeof(persistent_config_container_s) - /** * https://sourceforge.net/p/rusefi/tickets/335/ * @@ -72,22 +65,29 @@ void writeToFlashIfPending() { writeToFlashNow(); } +// Erase and write a copy of the configuration at the specified address +template +int eraseAndFlashCopy(flashaddr_t storageAddress, const TStorage& data) +{ + flashErase(storageAddress, sizeof(TStorage)); + return flashWrite(storageAddress, reinterpret_cast(&data), sizeof(TStorage)); +} + void writeToFlashNow(void) { scheduleMsg(logger, " !!!!!!!!!!!!!!!!!!!! BE SURE NOT WRITE WITH IGNITION ON !!!!!!!!!!!!!!!!!!!!"); - persistentState.size = PERSISTENT_SIZE; + + // Set up the container + persistentState.size = sizeof(persistentState); persistentState.version = FLASH_DATA_VERSION; - scheduleMsg(logger, "flash compatible with %d", persistentState.version); - crc_t crcResult = flashStateCrc(&persistentState); - persistentState.value = crcResult; - scheduleMsg(logger, "Reseting flash: size=%d", PERSISTENT_SIZE); - flashErase(getFlashAddrFirstCopy(), PERSISTENT_SIZE); - scheduleMsg(logger, "Flashing with CRC=%d", crcResult); - efitimems_t nowMs = currentTimeMillis(); - int result = flashWrite(getFlashAddrFirstCopy(), (const char *) &persistentState, PERSISTENT_SIZE); - flashErase(getFlashAddrSecondCopy(), PERSISTENT_SIZE); - flashWrite(getFlashAddrSecondCopy(), (const char *) &persistentState, PERSISTENT_SIZE); - scheduleMsg(logger, "Flash programmed in %dms", currentTimeMillis() - nowMs); - bool isSuccess = result == FLASH_RETURN_SUCCESS; + persistentState.value = flashStateCrc(&persistentState); + + // Flash two copies + int result1 = eraseAndFlashCopy(getFlashAddrFirstCopy(), persistentState); + int result2 = eraseAndFlashCopy(getFlashAddrSecondCopy(), persistentState); + + // handle success/failure + bool isSuccess = (result1 == FLASH_RETURN_SUCCESS) && (result2 == FLASH_RETURN_SUCCESS); + if (isSuccess) { scheduleMsg(logger, FLASH_SUCCESS_MSG); } else { @@ -114,11 +114,11 @@ persisted_configuration_state_e flashState; static persisted_configuration_state_e doReadConfiguration(flashaddr_t address, Logging * logger) { printMsg(logger, "readFromFlash %x", address); - flashRead(address, (char *) &persistentState, PERSISTENT_SIZE); + flashRead(address, (char *) &persistentState, sizeof(persistentState)); if (!isValidCrc(&persistentState)) { return CRC_FAILED; - } else if (persistentState.version != FLASH_DATA_VERSION || persistentState.size != PERSISTENT_SIZE) { + } else if (persistentState.version != FLASH_DATA_VERSION || persistentState.size != sizeof(persistentState)) { return INCOMPATIBLE_VERSION; } else { return PC_OK; From c1319342d546a2c729cd26ec9c2d14af93df60ce Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 7 Mar 2020 07:28:18 -0800 Subject: [PATCH 097/171] don't use standard sprintf/snprintf (#1174) --- firmware/hw_layer/io_pins.cpp | 6 ++++-- firmware/hw_layer/pin_repository.cpp | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/firmware/hw_layer/io_pins.cpp b/firmware/hw_layer/io_pins.cpp index e897d650cb..d220c373c7 100644 --- a/firmware/hw_layer/io_pins.cpp +++ b/firmware/hw_layer/io_pins.cpp @@ -11,6 +11,7 @@ #include "io_pins.h" #if EFI_PROD_CODE +#include "os_access.h" #include "efi_gpio.h" #include "drivers/gpio/gpio_ext.h" @@ -102,10 +103,11 @@ iomode_t getInputMode(pin_input_mode_e mode) { } #if HAL_USE_ICU +static char icuError[30]; + void efiIcuStart(const char *msg, ICUDriver *icup, const ICUConfig *config) { if (icup->state != ICU_STOP && icup->state != ICU_READY) { - static char icuError[30]; - sprintf(icuError, "ICU already used %s", msg); + chsnprintf(icuError, sizeof(icuError), "ICU already used %s", msg); firmwareError(CUSTOM_ERR_6679, icuError); return; } diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index 249eb57a53..680ea2291f 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -101,16 +101,16 @@ static void reportPins(void) { /* use autogeneraged helpers here? */ if (pin_diag == PIN_OK) { - snprintf(pin_error, sizeof(pin_error), "Ok"); + chsnprintf(pin_error, sizeof(pin_error), "Ok"); } else if (pin_diag != PIN_INVALID) { - snprintf(pin_error, sizeof(pin_error), "%s%s%s%s%s", + chsnprintf(pin_error, sizeof(pin_error), "%s%s%s%s%s", pin_diag & PIN_OPEN ? "open_load " : "", pin_diag & PIN_SHORT_TO_GND ? "short_to_gnd " : "", pin_diag & PIN_SHORT_TO_BAT ? "short_to_bat " : "", pin_diag & PIN_OVERLOAD ? "overload " : "", pin_diag & PIN_DRIVER_OVERTEMP ? "overtemp": ""); } else { - snprintf(pin_error, sizeof(pin_error), "INVALID"); + chsnprintf(pin_error, sizeof(pin_error), "INVALID"); } /* here show all pins, unused too */ From 9f27f95d14576f5adda685b9b1729547f1ad5428 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 7 Mar 2020 12:53:38 -0800 Subject: [PATCH 098/171] ignore vbus (#1175) --- firmware/config/boards/nucleo_f746/board.h | 3 +++ firmware/config/boards/nucleo_f767/board.h | 3 +++ firmware/config/boards/st_stm32f4/board.h | 2 ++ 3 files changed, 8 insertions(+) diff --git a/firmware/config/boards/nucleo_f746/board.h b/firmware/config/boards/nucleo_f746/board.h index 9bfa0d08cf..acb49d30a5 100644 --- a/firmware/config/boards/nucleo_f746/board.h +++ b/firmware/config/boards/nucleo_f746/board.h @@ -41,6 +41,9 @@ #define EFI_USB_SERIAL_DM GPIOA_11 #define EFI_USB_SERIAL_DP GPIOA_12 +// Ignore USB VBUS pin (we're never a host, only a device) +#define BOARD_OTG_NOVBUSSENS TRUE + /* * Ethernet PHY type. */ diff --git a/firmware/config/boards/nucleo_f767/board.h b/firmware/config/boards/nucleo_f767/board.h index 9ad896e885..e386580834 100644 --- a/firmware/config/boards/nucleo_f767/board.h +++ b/firmware/config/boards/nucleo_f767/board.h @@ -41,6 +41,9 @@ #define EFI_USB_SERIAL_DM GPIOA_11 #define EFI_USB_SERIAL_DP GPIOA_12 +// Ignore USB VBUS pin (we're never a host, only a device) +#define BOARD_OTG_NOVBUSSENS TRUE + /* * Ethernet PHY type. */ diff --git a/firmware/config/boards/st_stm32f4/board.h b/firmware/config/boards/st_stm32f4/board.h index 4a100ba869..807093ef94 100644 --- a/firmware/config/boards/st_stm32f4/board.h +++ b/firmware/config/boards/st_stm32f4/board.h @@ -38,6 +38,8 @@ #define EFI_USB_SERIAL_DM GPIOA_11 #define EFI_USB_SERIAL_DP GPIOA_12 +// Ignore USB VBUS pin (we're never a host, only a device) +#define BOARD_OTG_NOVBUSSENS TRUE /* * input-floating is the default pin mode. input-output boards should provision appropriate pull-ups/pull-downs. From bd93d9e20413ef307a43fc682670d18d6353d8fb Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 7 Mar 2020 15:55:08 -0500 Subject: [PATCH 099/171] date --- firmware/controllers/engine_controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index ad9dae4ad3..7ba5eea23b 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200305; + return 201200307; } #endif /* EFI_UNIT_TEST */ From 212d80929d94738f0ae3570b51ba746155126910 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 7 Mar 2020 17:36:27 -0500 Subject: [PATCH 100/171] URL --- hardware/brain_board/readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hardware/brain_board/readme.md b/hardware/brain_board/readme.md index e005789bae..230aaef371 100644 --- a/hardware/brain_board/readme.md +++ b/hardware/brain_board/readme.md @@ -1,3 +1,5 @@ Brain board stm 100 pin +[Forum post](https://rusefi.com/forum/viewtopic.php?f=4&t=381) + [Known issues](known_issues.txt) \ No newline at end of file From 9f26e6d894b9da0029058c48d8f113fca777b05e Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 8 Mar 2020 05:57:21 -0700 Subject: [PATCH 101/171] fix icu trigger polarity (#1177) * fix polarity * fix confusing names --- firmware/console/status_loop.cpp | 6 +-- firmware/controllers/sensors/map.cpp | 2 +- .../controllers/trigger/trigger_central.cpp | 6 +-- firmware/development/logic_analyzer.cpp | 4 +- firmware/hw_layer/digital_input_icu.cpp | 51 +++++++------------ firmware/hw_layer/digital_input_icu.h | 6 +-- firmware/hw_layer/trigger_input_icu.cpp | 31 ++++++----- firmware/hw_layer/vehicle_speed.cpp | 5 +- 8 files changed, 46 insertions(+), 65 deletions(-) diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index d6dfa7bf6c..9eb6d8fd19 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -75,8 +75,8 @@ extern bool main_loop_started; #include "vehicle_speed.h" #include "single_timer_executor.h" #include "periodic_task.h" -extern int icuWidthCallbackCounter; -extern int icuWidthPeriodCounter; +extern int icuRisingCallbackCounter; +extern int icuFallingCallbackCounter; #endif /* EFI_PROD_CODE */ #if EFI_CJ125 @@ -954,7 +954,7 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ #if EFI_PROD_CODE && HAL_USE_ICU == TRUE tsOutputChannels->debugIntField4 = engine->triggerCentral.vvtEventRiseCounter; tsOutputChannels->debugIntField5 = engine->triggerCentral.vvtEventFallCounter; - tsOutputChannels->debugFloatField5 = icuWidthCallbackCounter + icuWidthPeriodCounter; + tsOutputChannels->debugFloatField5 = icuRisingCallbackCounter + icuFallingCallbackCounter; #endif /* EFI_PROD_CODE */ tsOutputChannels->debugFloatField1 = engine->triggerCentral.getHwEventCounter((int)SHAFT_PRIMARY_RISING); diff --git a/firmware/controllers/sensors/map.cpp b/firmware/controllers/sensors/map.cpp index 09a1e40edb..6ae81fbacb 100644 --- a/firmware/controllers/sensors/map.cpp +++ b/firmware/controllers/sensors/map.cpp @@ -270,7 +270,7 @@ void initMapDecoder(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { if (engineConfiguration->hasFrequencyReportingMapSensor) { #if HAL_USE_ICU - digital_input_s* digitalMapInput = startDigitalCapture("MAP freq", CONFIG(frequencyReportingMapInputPin), true); + digital_input_s* digitalMapInput = startDigitalCapture("MAP freq", CONFIG(frequencyReportingMapInputPin)); digitalMapInput->setWidthCallback((VoidInt) digitalMapWidthCallback, NULL); #else diff --git a/firmware/controllers/trigger/trigger_central.cpp b/firmware/controllers/trigger/trigger_central.cpp index 09654f64ce..248cc32c67 100644 --- a/firmware/controllers/trigger/trigger_central.cpp +++ b/firmware/controllers/trigger/trigger_central.cpp @@ -509,8 +509,8 @@ void resetMaxValues() { } #if HAL_USE_ICU == TRUE -extern int icuWidthCallbackCounter; -extern int icuWidthPeriodCounter; +extern int icuRisingCallbackCounter; +extern int icuFallingCallbackCounter; #endif /* HAL_USE_ICU */ void triggerInfo(void) { @@ -524,7 +524,7 @@ void triggerInfo(void) { #else #if HAL_USE_ICU == TRUE - scheduleMsg(logger, "trigger ICU hw: %d %d %d", icuWidthCallbackCounter, icuWidthPeriodCounter, engine->hwTriggerInputEnabled); + scheduleMsg(logger, "trigger ICU hw: %d %d %d", icuRisingCallbackCounter, icuFallingCallbackCounter, engine->hwTriggerInputEnabled); #endif /* HAL_USE_ICU */ #endif /* HAL_TRIGGER_USE_PAL */ diff --git a/firmware/development/logic_analyzer.cpp b/firmware/development/logic_analyzer.cpp index c1c5d9eb66..7a024e3b62 100644 --- a/firmware/development/logic_analyzer.cpp +++ b/firmware/development/logic_analyzer.cpp @@ -110,14 +110,12 @@ static void initWave(const char *name, int index) { if (brainPin == GPIO_UNASSIGNED) return; - bool mode = CONFIG(logicAnalyzerMode)[index]; - waveReaderCount++; efiAssertVoid(CUSTOM_ERR_6655, index < MAX_ICU_COUNT, "too many ICUs"); WaveReader *reader = &readers[index]; reader->name = name; - reader->hw = startDigitalCapture("wave input", brainPin, mode); + reader->hw = startDigitalCapture("wave input", brainPin); if (reader->hw != NULL) { reader->hw->setWidthCallback((VoidInt)(void*) waAnaWidthCallback, (void*) reader); diff --git a/firmware/hw_layer/digital_input_icu.cpp b/firmware/hw_layer/digital_input_icu.cpp index 445189f639..238a828abc 100644 --- a/firmware/hw_layer/digital_input_icu.cpp +++ b/firmware/hw_layer/digital_input_icu.cpp @@ -216,26 +216,6 @@ void turnOffCapturePin(brain_pin_e brainPin) { efiSetPadUnused(brainPin); } -/** - * takes next digital_input_s from the registeredIcus pool - */ -digital_input_s * addWaveAnalyzerDriver(const char *msg, brain_pin_e brainPin) { - ICUDriver *driver = getInputCaptureDriver(msg, brainPin); - if (driver == NULL) { - warning(CUSTOM_ERR_INVALID_INPUT_ICU_PIN, "w_not input pin"); - return NULL; - } - - digital_input_s *hw = registeredIcus.add(); - hw->widthListeners.clear(); - hw->periodListeners.clear(); - hw->started = false; - hw->brainPin = brainPin; - hw->driver = driver; - turnOnCapturePin(msg, brainPin); - return hw; -} - /** * turns pin off and returns digital_input_s back into registeredIcus pool */ @@ -264,22 +244,16 @@ void stopDigitalCapture(const char *msg, brain_pin_e brainPin) { } } -void startInputDriver(const char *msg, /*nullable*/digital_input_s *hw, bool isActiveHigh) { +static void startInputDriver(const char *msg, /*nullable*/digital_input_s *hw) { if (hw == NULL) { // we can get NULL driver if user somehow has invalid pin in his configuration warning(CUSTOM_ERR_INVALID_INPUT_ICU_PIN, "s_not input pin"); return; } - hw->isActiveHigh = isActiveHigh; - if (hw->isActiveHigh) { - wave_icucfg.mode = ICU_INPUT_ACTIVE_HIGH; - } else { - wave_icucfg.mode = ICU_INPUT_ACTIVE_LOW; - } ICUDriver *driver = hw->driver; - if (driver != NULL) { + if (driver) { if (hw->started) { icuDisableNotificationsI(driver); icuStopCapture(driver); @@ -295,10 +269,23 @@ void startInputDriver(const char *msg, /*nullable*/digital_input_s *hw, bool isA hw->started = true; } -digital_input_s* startDigitalCapture(const char *msg, brain_pin_e brainPin, bool isActiveHigh) { - digital_input_s* input = addWaveAnalyzerDriver(msg, brainPin); - startInputDriver(msg, input, isActiveHigh); - return input; +digital_input_s* startDigitalCapture(const char *msg, brain_pin_e brainPin) { + ICUDriver *driver = getInputCaptureDriver(msg, brainPin); + if (!driver) { + warning(CUSTOM_ERR_INVALID_INPUT_ICU_PIN, "w_not input pin"); + return nullptr; + } + + digital_input_s *hw = registeredIcus.add(); + hw->widthListeners.clear(); + hw->periodListeners.clear(); + hw->started = false; + hw->brainPin = brainPin; + hw->driver = driver; + turnOnCapturePin(msg, brainPin); + + startInputDriver(msg, hw); + return hw; } #endif /* EFI_ICU_INPUTS */ diff --git a/firmware/hw_layer/digital_input_icu.h b/firmware/hw_layer/digital_input_icu.h index efdfabece7..6fb1223c83 100644 --- a/firmware/hw_layer/digital_input_icu.h +++ b/firmware/hw_layer/digital_input_icu.h @@ -11,15 +11,11 @@ #if HAL_USE_ICU -digital_input_s* startDigitalCapture(const char *msg, brain_pin_e brainPin, bool isActiveHigh); +digital_input_s* startDigitalCapture(const char *msg, brain_pin_e brainPin); void turnOnCapturePin(const char *msg, brain_pin_e brainPin); void turnOffCapturePin(brain_pin_e brainPin); -// deprecated API -digital_input_s *addWaveAnalyzerDriver(const char *msg, brain_pin_e brainPin); -void startInputDriver(const char *msg, /*nullable*/digital_input_s *hw, bool isActiveHigh); - void stopDigitalCapture(const char *msg, brain_pin_e brainPin); //Nullable diff --git a/firmware/hw_layer/trigger_input_icu.cpp b/firmware/hw_layer/trigger_input_icu.cpp index 4ac3f146ba..f40fee228f 100644 --- a/firmware/hw_layer/trigger_input_icu.cpp +++ b/firmware/hw_layer/trigger_input_icu.cpp @@ -14,8 +14,8 @@ #include "global.h" -volatile int icuWidthCallbackCounter = 0; -volatile int icuWidthPeriodCounter = 0; +int icuRisingCallbackCounter = 0; +int icuFallingCallbackCounter = 0; #if EFI_SHAFT_POSITION_INPUT && (HAL_USE_ICU == TRUE) @@ -28,27 +28,25 @@ extern bool hasFirmwareErrorFlag; static Logging *logger; -static void vvtWidthCallback(void *) { +static void vvtRisingCallback(void *) { hwHandleVvtCamSignal(TV_RISE, getTimeNowNt()); } -static void vvtPeriodCallback(void *) { +static void vvtFallingCallback(void *) { hwHandleVvtCamSignal(TV_FALL, getTimeNowNt()); } /** * that's hardware timer input capture IRQ entry point - * 'width' events happens before the 'period' event */ -static void shaftWidthCallback(bool isPrimary) { +static void shaftRisingCallback(bool isPrimary) { efitick_t stamp = getTimeNowNt(); if (!engine->hwTriggerInputEnabled) { return; } - icuWidthCallbackCounter++; + icuRisingCallbackCounter++; // todo: support for 3rd trigger input channel -// todo: start using real event time from HW event, not just software timer? if (hasFirmwareErrorFlag) return; if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) { @@ -61,13 +59,15 @@ static void shaftWidthCallback(bool isPrimary) { hwHandleShaftSignal(signal, stamp); } -static void shaftPeriodCallback(bool isPrimary) { +static void shaftFallingCallback(bool isPrimary) { efitick_t stamp = getTimeNowNt(); if (!engine->hwTriggerInputEnabled) { return; } - icuWidthPeriodCounter++; + + icuFallingCallbackCounter++; + if (hasFirmwareErrorFlag) return; if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) { @@ -75,7 +75,6 @@ static void shaftPeriodCallback(bool isPrimary) { } // todo: add support for 3rd channel - // icucnt_t last_period = icuGetPeriod(icup); so far we are fine with system time trigger_event_e signal = isPrimary ? (engineConfiguration->invertPrimaryTriggerSignal ? SHAFT_PRIMARY_RISING : SHAFT_PRIMARY_FALLING) : (engineConfiguration->invertSecondaryTriggerSignal ? SHAFT_SECONDARY_RISING : SHAFT_SECONDARY_FALLING); hwHandleShaftSignal(signal, stamp); @@ -92,7 +91,7 @@ int icuTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) { return -1; } - digital_input_s* input = startDigitalCapture("trigger", brainPin, true); + digital_input_s* input = startDigitalCapture("trigger", brainPin); if (input == NULL) { /* error already reported */ return -1; @@ -100,11 +99,11 @@ int icuTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) { if (isTriggerShaft) { void * arg = (void*) (index == 0); - input->setWidthCallback((VoidInt)(void*)shaftWidthCallback, arg); - input->setPeriodCallback((VoidInt)(void*)shaftPeriodCallback, arg); + input->setWidthCallback((VoidInt)(void*)shaftRisingCallback, arg); + input->setPeriodCallback((VoidInt)(void*)shaftFallingCallback, arg); } else { - input->setWidthCallback((VoidInt)(void*)vvtWidthCallback, NULL); - input->setPeriodCallback((VoidInt)(void*)vvtPeriodCallback, NULL); + input->setWidthCallback((VoidInt)(void*)vvtRisingCallback, NULL); + input->setPeriodCallback((VoidInt)(void*)vvtFallingCallback, NULL); } return 0; diff --git a/firmware/hw_layer/vehicle_speed.cpp b/firmware/hw_layer/vehicle_speed.cpp index 9cbc7d364e..2fc76af6a3 100644 --- a/firmware/hw_layer/vehicle_speed.cpp +++ b/firmware/hw_layer/vehicle_speed.cpp @@ -73,8 +73,9 @@ void stopVSSPins(void) { void startVSSPins(void) { if (!hasVehicleSpeedSensor()) return; - digital_input_s* vehicleSpeedInput = addWaveAnalyzerDriver("VSS", CONFIG(vehicleSpeedSensorInputPin)); - startInputDriver("VSS", vehicleSpeedInput, true); + + digital_input_s* vehicleSpeedInput = startDigitalCapture("VSS", CONFIG(vehicleSpeedSensorInputPin)); + vehicleSpeedInput->widthListeners.registerCallback((VoidInt) vsAnaWidthCallback, NULL); } From 1892cfe6b7fb5dce976f776d1314d18186a97264 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 8 Mar 2020 09:14:49 -0400 Subject: [PATCH 102/171] logicAnalyzerMode was unused, removing for now --- ...ngine_configuration_generated_structures.h | 7 ++- .../controllers/algo/rusefi_generated.h | 4 +- .../subaru-ej20gn/board_configuration.cpp | 4 -- .../controllers/algo/engine_configuration.cpp | 2 - ...ngine_configuration_generated_structures.h | 7 ++- .../controllers/generated/rusefi_generated.h | 4 +- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 4 +- firmware/tunerstudio/rusefi_frankenso.ini | 4 +- firmware/tunerstudio/rusefi_kinetis.ini | 45 +++++++++++++------ firmware/tunerstudio/rusefi_microrusefi.ini | 4 +- firmware/tunerstudio/rusefi_prometheus.ini | 4 +- firmware/tunerstudio/rusefi_proteus.ini | 4 +- .../com/rusefi/config/generated/Fields.java | 4 +- 14 files changed, 54 insertions(+), 45 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 8d88f9732d..b7faf51537 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 02 19:46:02 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 08 09:00:22 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1378,10 +1378,9 @@ struct engine_configuration_s { */ pin_output_mode_e hip9011IntHoldPinMode; /** - * default or inverted input * offset 756 */ - uint8_t logicAnalyzerMode[LOGIC_ANALYZER_CHANNEL_COUNT]; + uint8_t unusedHereWeHave[4]; /** * offset 760 */ @@ -3217,4 +3216,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 02 19:46:02 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 08 09:00:22 EDT 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 05449e47bc..dece369c12 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1461,8 +1461,6 @@ #define logFormat_offset 496 #define logFormat_offset_hex 1f0 #define LOGIC_ANALYZER_CHANNEL_COUNT 4 -#define logicAnalyzerMode_offset 756 -#define logicAnalyzerMode_offset_hex 2f4 #define logicAnalyzerPins1_offset 748 #define logicAnalyzerPins1_offset_hex 2ec #define logicAnalyzerPins2_offset 749 @@ -2143,6 +2141,8 @@ #define unusedFlexFuelSensor_offset_hex c1c #define unusedFormerWarmupAfrPid_offset 1772 #define unusedFormerWarmupAfrPid_offset_hex 6ec +#define unusedHereWeHave_offset 756 +#define unusedHereWeHave_offset_hex 2f4 #define unusedOldWarmupAfr_offset 744 #define unusedOldWarmupAfr_offset_hex 2e8 #define unusedSomething_offset 1784 diff --git a/firmware/config/boards/subaru-ej20gn/board_configuration.cpp b/firmware/config/boards/subaru-ej20gn/board_configuration.cpp index 52a9c24fcb..6b57cb0457 100644 --- a/firmware/config/boards/subaru-ej20gn/board_configuration.cpp +++ b/firmware/config/boards/subaru-ej20gn/board_configuration.cpp @@ -241,10 +241,6 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->logicAnalyzerPins[1] = GPIO_UNASSIGNED; engineConfiguration->logicAnalyzerPins[2] = GPIO_UNASSIGNED; engineConfiguration->logicAnalyzerPins[3] = GPIO_UNASSIGNED; - engineConfiguration->logicAnalyzerMode[0] = OM_DEFAULT; - engineConfiguration->logicAnalyzerMode[1] = OM_DEFAULT; - engineConfiguration->logicAnalyzerMode[2] = OM_DEFAULT; - engineConfiguration->logicAnalyzerMode[3] = OM_DEFAULT; //!!!!!!!!!!!!!!!!!!! //engineConfiguration->silentTriggerError = true; diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 60e18f5107..9e62b96499 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -974,8 +974,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->vehicleSpeedCoef = 1.0f; - engineConfiguration->logicAnalyzerMode[0] = false; - engineConfiguration->logicAnalyzerMode[1] = false; engineConfiguration->mapErrorDetectionTooLow = 5; engineConfiguration->mapErrorDetectionTooHigh = 250; diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 691c229bf4..e32610cb78 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:47 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:07 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1378,10 +1378,9 @@ struct engine_configuration_s { */ pin_output_mode_e hip9011IntHoldPinMode; /** - * default or inverted input * offset 756 */ - uint8_t logicAnalyzerMode[LOGIC_ANALYZER_CHANNEL_COUNT]; + uint8_t unusedHereWeHave[4]; /** * offset 760 */ @@ -3217,4 +3216,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:47 EST 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:07 EDT 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 1b6d1e15fb..29dc8a7bf3 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1461,8 +1461,6 @@ #define logFormat_offset 496 #define logFormat_offset_hex 1f0 #define LOGIC_ANALYZER_CHANNEL_COUNT 4 -#define logicAnalyzerMode_offset 756 -#define logicAnalyzerMode_offset_hex 2f4 #define logicAnalyzerPins1_offset 748 #define logicAnalyzerPins1_offset_hex 2ec #define logicAnalyzerPins2_offset 749 @@ -2143,6 +2141,8 @@ #define unusedFlexFuelSensor_offset_hex c1c #define unusedFormerWarmupAfrPid_offset 1772 #define unusedFormerWarmupAfrPid_offset_hex 6ec +#define unusedHereWeHave_offset 756 +#define unusedHereWeHave_offset_hex 2f4 #define unusedOldWarmupAfr_offset 744 #define unusedOldWarmupAfr_offset_hex 2e8 #define unusedSomething_offset 1784 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 90f2d9a424..8f42f5ab0c 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -658,7 +658,7 @@ bit is_enabled_spi_2 brain_pin_e hip9011IntHoldPin; pin_output_mode_e hip9011IntHoldPinMode; - uint8_t[LOGIC_ANALYZER_CHANNEL_COUNT] logicAnalyzerMode;default or inverted input + uint8_t[4] unusedHereWeHave int unrealisticRpmThreashold; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 476c8968be..a5f7589963 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:50:59 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:07 EDT 2020 pageSize = 20000 page = 1 @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping logicAnalyzerMode offset 756 +;no TS info - skipping unusedHereWeHave offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 943c7586cb..7fdac6df7e 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:51:24 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:14 EDT 2020 pageSize = 20000 page = 1 @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping logicAnalyzerMode offset 756 +;no TS info - skipping unusedHereWeHave offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 193e4abd8a..901781a938 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 02 19:46:02 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 08 09:00:22 EDT 2020 pageSize = 20000 page = 1 @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping logicAnalyzerMode offset 756 +;no TS info - skipping unusedHereWeHave offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" @@ -1483,6 +1483,22 @@ fileVersion = { 20191221 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + + + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 @@ -1954,19 +1970,20 @@ gaugeCategory = ECU Status firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 timeSecondsGauge = timeSeconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 + gaugeCategory = Debug - debugFloatField1Gauge = debugFloatField1, "debug f1", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField2Gauge = debugFloatField2, "debug f2: iTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField3Gauge = debugFloatField3, "debug f3: prevError", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField4Gauge = debugFloatField4, "debug f4: iParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField5Gauge = debugFloatField5, "debug f5: dParam", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugFloatField6Gauge = debugFloatField6, "debug f6: dTerm", "%", -100, 100, 0, 0, 100, 100, 4, 4 - debugFloatField7Gauge = debugFloatField7, "debug f7", "%", 0, 100, 0, 0, 100, 100, 4, 4 - debugIntField1Gauge = debugIntField1, "debug i1: pParam", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField2Gauge = debugIntField2, "debug i2: offset", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField3Gauge = debugIntField3, "debug i3", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField4Gauge = debugIntField4, "debug i4", "%", 0, 100, 0, 0, 100, 100, 0, 0 - debugIntField5Gauge = debugIntField5, "debug i5", "%", 0, 100, 0, 0, 100, 100, 0, 0 + debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 + debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 + debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 + debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 gaugeCategory = Sensors - Basic diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 503c503159..106a77ee9a 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:51:11 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:10 EDT 2020 pageSize = 20000 page = 1 @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping logicAnalyzerMode offset 756 +;no TS info - skipping unusedHereWeHave offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 44620bd673..860ff2d3c6 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:51:38 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:17 EDT 2020 pageSize = 20000 page = 1 @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping logicAnalyzerMode offset 756 +;no TS info - skipping unusedHereWeHave offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index beed59ae39..941bace2d1 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 20:51:52 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:20 EDT 2020 pageSize = 20000 page = 1 @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping logicAnalyzerMode offset 756 +;no TS info - skipping unusedHereWeHave offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 88a8565723..4a28251507 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 02 19:45:47 EST 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:07 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -964,7 +964,6 @@ public class Fields { public static final int LOAD_1_BYTE_PACKING_MULT = 2; public static final int logFormat_offset = 496; public static final int LOGIC_ANALYZER_CHANNEL_COUNT = 4; - public static final int logicAnalyzerMode_offset = 756; public static final int logicAnalyzerPins1_offset = 748; public static final int logicAnalyzerPins2_offset = 749; public static final int logicAnalyzerPins3_offset = 750; @@ -1405,6 +1404,7 @@ public class Fields { public static final int unusedErrorPin_offset = 2040; public static final int unusedFlexFuelSensor_offset = 3100; public static final int unusedFormerWarmupAfrPid_offset = 1772; + public static final int unusedHereWeHave_offset = 756; public static final int unusedOldWarmupAfr_offset = 744; public static final int unusedSomething_offset = 1784; public static final int unusedSpiPadding4_offset = 2593; From 7144d8f843f7617a4600e8263d4e58a144b1fceb Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 8 Mar 2020 09:17:43 -0400 Subject: [PATCH 103/171] date --- firmware/controllers/engine_controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 7ba5eea23b..364f881960 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200307; + return 201200308; } #endif /* EFI_UNIT_TEST */ From 9a170bda5835b0b7285cba010bd3a01f40d35069 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 8 Mar 2020 09:17:55 -0400 Subject: [PATCH 104/171] better message --- firmware/console/binary/tunerstudio.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index 2d648aa57c..ae2676164e 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -305,7 +305,7 @@ static void handleGetStructContent(ts_channel_s *tsChannel, int structId, int si // Returns true if an overrun would occur. static bool validateOffsetCount(size_t offset, size_t count, ts_channel_s *tsChannel) { if (offset + count > getTunerStudioPageSize()) { - scheduleMsg(&tsLogger, "ERROR invalid offset %d count %d", offset, count); + scheduleMsg(&tsLogger, "TS: ERROR invalid offset %d count %d", offset, count); tunerStudioError("ERROR: out of range"); sendErrorCode(tsChannel); return true; @@ -631,7 +631,7 @@ void handleQueryCommand(ts_channel_s *tsChannel, ts_response_format_e mode) { */ void handleOutputChannelsCommand(ts_channel_s *tsChannel, ts_response_format_e mode, uint16_t offset, uint16_t count) { if (offset + count > sizeof(TunerStudioOutputChannels)) { - scheduleMsg(&tsLogger, "ERROR invalid offset %d count %d", offset, count); + scheduleMsg(&tsLogger, "TS: ERROR invalid offset %d count %d", offset, count); sendErrorCode(tsChannel); return; } From 46e3cc0c3f60f9614e4aec862f776336e25ff243 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 8 Mar 2020 09:19:16 -0400 Subject: [PATCH 105/171] date --- java_console/ui/src/com/rusefi/Launcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 0c0d392743..e05727a48a 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -49,7 +49,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20200305; + public static final int CONSOLE_VERSION = 20200308; public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); From 16930da2d367b5178d237d118a6970150dc392af Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 9 Mar 2020 16:59:19 -0400 Subject: [PATCH 106/171] hard-coding miata Nb2 VVT Ratio magic --- ...engine_configuration_generated_structures.h | 8 ++++---- .../config/controllers/algo/rusefi_generated.h | 8 ++++---- firmware/config/engines/mazda_miata_vvt.cpp | 6 ------ firmware/controllers/engine_controller.cpp | 2 +- ...engine_configuration_generated_structures.h | 8 ++++---- .../controllers/generated/rusefi_generated.h | 8 ++++---- .../controllers/trigger/trigger_central.cpp | 8 +++++--- firmware/integration/rusefi_config.txt | 4 ++-- firmware/tunerstudio/rusefi.ini | 8 +++----- firmware/tunerstudio/rusefi.input | 2 -- firmware/tunerstudio/rusefi_frankenso.ini | 8 +++----- firmware/tunerstudio/rusefi_kinetis.ini | 8 +++----- firmware/tunerstudio/rusefi_microrusefi.ini | 8 +++----- firmware/tunerstudio/rusefi_prometheus.ini | 8 +++----- firmware/tunerstudio/rusefi_proteus.ini | 8 +++----- .../com/rusefi/config/generated/Fields.java | 18 +++++++++--------- 16 files changed, 51 insertions(+), 69 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index b7faf51537..5fbabc5ae3 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 08 09:00:22 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 16:42:29 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1444,12 +1444,12 @@ struct engine_configuration_s { * This magic property is specific to Mazda Miata NB2 * offset 820 */ - float miataNb2VVTRatioFrom; + float unusedmiataNb2VVTRatioFrom; /** * This magic property is specific to Mazda Miata NB2 * offset 824 */ - float miataNb2VVTRatioTo; + float unusedmiataNb2VVTRatioTo; /** * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high * offset 828 @@ -3216,4 +3216,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 08 09:00:22 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 16:42:29 EDT 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index dece369c12..320a9fa47b 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1573,10 +1573,6 @@ #define mc33972spiDevice_offset_hex fa8 #define measureMapOnlyInOneCylinder_offset 744 #define measureMapOnlyInOneCylinder_offset_hex 2e8 -#define miataNb2VVTRatioFrom_offset 820 -#define miataNb2VVTRatioFrom_offset_hex 334 -#define miataNb2VVTRatioTo_offset 824 -#define miataNb2VVTRatioTo_offset_hex 338 #define MOCK_AFR_COMMAND "mock_afr_voltage" #define MOCK_CLT_COMMAND "mock_clt_voltage" #define MOCK_IAT_COMMAND "mock_iat_voltage" @@ -2143,6 +2139,10 @@ #define unusedFormerWarmupAfrPid_offset_hex 6ec #define unusedHereWeHave_offset 756 #define unusedHereWeHave_offset_hex 2f4 +#define unusedmiataNb2VVTRatioFrom_offset 820 +#define unusedmiataNb2VVTRatioFrom_offset_hex 334 +#define unusedmiataNb2VVTRatioTo_offset 824 +#define unusedmiataNb2VVTRatioTo_offset_hex 338 #define unusedOldWarmupAfr_offset 744 #define unusedOldWarmupAfr_offset_hex 2e8 #define unusedSomething_offset 1784 diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index f69d8f13b0..acfd5185b5 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -193,12 +193,6 @@ static void setMazdaMiataEngineNB2Defaults(DECLARE_CONFIG_PARAMETER_SIGNATURE) { setCommonNTCSensor(&engineConfiguration->clt, 2700); setCommonNTCSensor(&engineConfiguration->iat, 2700); - // 0.0825 - // 0.1375 - // 6.375 - // 10.625 - engineConfiguration->miataNb2VVTRatioFrom = 8.50 * 0.75; - engineConfiguration->miataNb2VVTRatioTo = 14; engineConfiguration->nbVvtIndex = 0; engineConfiguration->auxPidFrequency[0] = 300; // VVT solenoid control diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 364f881960..6d3fbfdc9d 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200308; + return 201200309; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index e32610cb78..15f0465c9e 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:07 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:12 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1444,12 +1444,12 @@ struct engine_configuration_s { * This magic property is specific to Mazda Miata NB2 * offset 820 */ - float miataNb2VVTRatioFrom; + float unusedmiataNb2VVTRatioFrom; /** * This magic property is specific to Mazda Miata NB2 * offset 824 */ - float miataNb2VVTRatioTo; + float unusedmiataNb2VVTRatioTo; /** * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high * offset 828 @@ -3216,4 +3216,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:07 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:12 EDT 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 29dc8a7bf3..704bc059e4 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1573,10 +1573,6 @@ #define mc33972spiDevice_offset_hex fa8 #define measureMapOnlyInOneCylinder_offset 744 #define measureMapOnlyInOneCylinder_offset_hex 2e8 -#define miataNb2VVTRatioFrom_offset 820 -#define miataNb2VVTRatioFrom_offset_hex 334 -#define miataNb2VVTRatioTo_offset 824 -#define miataNb2VVTRatioTo_offset_hex 338 #define MOCK_AFR_COMMAND "mock_afr_voltage" #define MOCK_CLT_COMMAND "mock_clt_voltage" #define MOCK_IAT_COMMAND "mock_iat_voltage" @@ -2143,6 +2139,10 @@ #define unusedFormerWarmupAfrPid_offset_hex 6ec #define unusedHereWeHave_offset 756 #define unusedHereWeHave_offset_hex 2f4 +#define unusedmiataNb2VVTRatioFrom_offset 820 +#define unusedmiataNb2VVTRatioFrom_offset_hex 334 +#define unusedmiataNb2VVTRatioTo_offset 824 +#define unusedmiataNb2VVTRatioTo_offset_hex 338 #define unusedOldWarmupAfr_offset 744 #define unusedOldWarmupAfr_offset_hex 2e8 #define unusedSomething_offset 1784 diff --git a/firmware/controllers/trigger/trigger_central.cpp b/firmware/controllers/trigger/trigger_central.cpp index 248cc32c67..4fc972fe45 100644 --- a/firmware/controllers/trigger/trigger_central.cpp +++ b/firmware/controllers/trigger/trigger_central.cpp @@ -86,6 +86,10 @@ void addTriggerEventListener(ShaftPositionListener listener, const char *name, E engine->triggerCentral.addEventListener(listener, name, engine); } +#define miataNb2VVTRatioFrom (8.50 * 0.75) +#define miataNb2VVTRatioTo (14) + + void hwHandleVvtCamSignal(trigger_value_e front, efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) { TriggerCentral *tc = &engine->triggerCentral; if (front == TV_RISE) { @@ -121,7 +125,7 @@ void hwHandleVvtCamSignal(trigger_value_e front, efitick_t nowNt DECLARE_ENGINE_ if (engineConfiguration->verboseTriggerSynchDetails) { scheduleMsg(logger, "vvt ratio %.2f", ratio); } - if (ratio < CONFIG(miataNb2VVTRatioFrom) || ratio > CONFIG(miataNb2VVTRatioTo)) { + if (ratio < miataNb2VVTRatioFrom || ratio > miataNb2VVTRatioTo) { return; } if (engineConfiguration->verboseTriggerSynchDetails) { @@ -662,8 +666,6 @@ void onConfigurationChangeTriggerCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { isConfigurationChanged(vvtCamSensorUseRise) || isConfigurationChanged(vvtOffset) || isConfigurationChanged(vvtDisplayInverted) || - isConfigurationChanged(miataNb2VVTRatioFrom) || - isConfigurationChanged(miataNb2VVTRatioTo) || isConfigurationChanged(nbVvtIndex); if (changed) { assertEngineReference(); diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 8f42f5ab0c..38d92d9e63 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -681,8 +681,8 @@ custom uart_device_e 1 bits,U32, @OFFSET@, [0:7], "Off", "UART1", "UART2", "UA int mapMinBufferLength;;"count", 1, 0, 0, 24, 0 int16_t idlePidDeactivationTpsThreshold;;"%", 1, 0, 0, 100.0, 0 int16_t stepperParkingExtraSteps;;"%", 1, 0, 0, 3000.0, 0 - float miataNb2VVTRatioFrom;This magic property is specific to Mazda Miata NB2;"value", 1, 0, 0, 1000, 5 - float miataNb2VVTRatioTo;This magic property is specific to Mazda Miata NB2;"value", 1, 0, 0, 1000, 5 + float unusedmiataNb2VVTRatioFrom;This magic property is specific to Mazda Miata NB2;"value", 1, 0, 0, 1000, 5 + float unusedmiataNb2VVTRatioTo;This magic property is specific to Mazda Miata NB2;"value", 1, 0, 0, 1000, 5 brain_pin_e triggerErrorPin;+This pin is used for debugging - snap a logic analyzer on it and see if it's ever high pin_output_mode_e triggerErrorPinMode; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index a5f7589963..616afeb3a7 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:07 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:12 EDT 2020 pageSize = 20000 page = 1 @@ -456,8 +456,8 @@ page = 1 mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 - miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" triggerErrorPinMode = bits, U08, 829, [0:7], "default", "default inverted", "open collector", "open collector inverted" acRelayPin = bits, U08, 830, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -2671,8 +2671,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} field = "VVT position display offset", vvtOffset field = "VVT display inverted", vvtDisplayInverted - field = "Miata NB2 from (temporary)", miataNb2VVTRatioFrom - field = "Miata NB2 to (temporary)", miataNb2VVTRatioTo field = "nbVvtIndex", nbVvtIndex field = "print verbose sync details to console",verboseTriggerSynchDetails field = "Do not print messages in case of sync error", silentTriggerError diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index cc0c3f9fa8..928169fc22 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1547,8 +1547,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} field = "VVT position display offset", vvtOffset field = "VVT display inverted", vvtDisplayInverted - field = "Miata NB2 from (temporary)", miataNb2VVTRatioFrom - field = "Miata NB2 to (temporary)", miataNb2VVTRatioTo field = "nbVvtIndex", nbVvtIndex field = "print verbose sync details to console",verboseTriggerSynchDetails field = "Do not print messages in case of sync error", silentTriggerError diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 7fdac6df7e..66f8708670 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:14 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:19 EDT 2020 pageSize = 20000 page = 1 @@ -456,8 +456,8 @@ page = 1 mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 - miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" triggerErrorPinMode = bits, U08, 829, [0:7], "default", "default inverted", "open collector", "open collector inverted" acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" @@ -2671,8 +2671,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} field = "VVT position display offset", vvtOffset field = "VVT display inverted", vvtDisplayInverted - field = "Miata NB2 from (temporary)", miataNb2VVTRatioFrom - field = "Miata NB2 to (temporary)", miataNb2VVTRatioTo field = "nbVvtIndex", nbVvtIndex field = "print verbose sync details to console",verboseTriggerSynchDetails field = "Do not print messages in case of sync error", silentTriggerError diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 901781a938..81bb059823 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Mar 08 09:00:22 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 16:42:29 EDT 2020 pageSize = 20000 page = 1 @@ -456,8 +456,8 @@ page = 1 mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 - miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" triggerErrorPinMode = bits, U08, 829, [0:7], "default", "default inverted", "open collector", "open collector inverted" acRelayPin = bits, U08, 830, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" @@ -2671,8 +2671,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} field = "VVT position display offset", vvtOffset field = "VVT display inverted", vvtDisplayInverted - field = "Miata NB2 from (temporary)", miataNb2VVTRatioFrom - field = "Miata NB2 to (temporary)", miataNb2VVTRatioTo field = "nbVvtIndex", nbVvtIndex field = "print verbose sync details to console",verboseTriggerSynchDetails field = "Do not print messages in case of sync error", silentTriggerError diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 106a77ee9a..055537cee7 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:10 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:16 EDT 2020 pageSize = 20000 page = 1 @@ -456,8 +456,8 @@ page = 1 mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 - miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" triggerErrorPinMode = bits, U08, 829, [0:7], "default", "default inverted", "open collector", "open collector inverted" acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" @@ -2664,8 +2664,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} field = "VVT position display offset", vvtOffset field = "VVT display inverted", vvtDisplayInverted - field = "Miata NB2 from (temporary)", miataNb2VVTRatioFrom - field = "Miata NB2 to (temporary)", miataNb2VVTRatioTo field = "nbVvtIndex", nbVvtIndex field = "print verbose sync details to console",verboseTriggerSynchDetails field = "Do not print messages in case of sync error", silentTriggerError diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 860ff2d3c6..8010136aff 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:17 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:22 EDT 2020 pageSize = 20000 page = 1 @@ -456,8 +456,8 @@ page = 1 mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 - miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" triggerErrorPinMode = bits, U08, 829, [0:7], "default", "default inverted", "open collector", "open collector inverted" acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" @@ -2667,8 +2667,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} field = "VVT position display offset", vvtOffset field = "VVT display inverted", vvtDisplayInverted - field = "Miata NB2 from (temporary)", miataNb2VVTRatioFrom - field = "Miata NB2 to (temporary)", miataNb2VVTRatioTo field = "nbVvtIndex", nbVvtIndex field = "print verbose sync details to console",verboseTriggerSynchDetails field = "Do not print messages in case of sync error", silentTriggerError diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 941bace2d1..e8d97703e9 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:20 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:25 EDT 2020 pageSize = 20000 page = 1 @@ -456,8 +456,8 @@ page = 1 mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 - miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 + unusedmiataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" triggerErrorPinMode = bits, U08, 829, [0:7], "default", "default inverted", "open collector", "open collector inverted" acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" @@ -2664,8 +2664,6 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} field = "VVT position display offset", vvtOffset field = "VVT display inverted", vvtDisplayInverted - field = "Miata NB2 from (temporary)", miataNb2VVTRatioFrom - field = "Miata NB2 to (temporary)", miataNb2VVTRatioTo field = "nbVvtIndex", nbVvtIndex field = "print verbose sync details to console",verboseTriggerSynchDetails field = "Do not print messages in case of sync error", silentTriggerError diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 4a28251507..8046e75e68 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Mar 08 09:00:07 EDT 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:12 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1034,10 +1034,6 @@ public class Fields { public static final int mc33972_csPinMode_offset = 679; public static final int mc33972spiDevice_offset = 4008; public static final int measureMapOnlyInOneCylinder_offset = 744; - public static final int miataNb2VVTRatioFrom_offset = 820; - public static final int miataNb2VVTRatioFrom_offset_hex = 334; - public static final int miataNb2VVTRatioTo_offset = 824; - public static final int miataNb2VVTRatioTo_offset_hex = 338; public static final String MOCK_AFR_COMMAND = "mock_afr_voltage"; public static final String MOCK_CLT_COMMAND = "mock_clt_voltage"; public static final String MOCK_IAT_COMMAND = "mock_iat_voltage"; @@ -1405,6 +1401,10 @@ public class Fields { public static final int unusedFlexFuelSensor_offset = 3100; public static final int unusedFormerWarmupAfrPid_offset = 1772; public static final int unusedHereWeHave_offset = 756; + public static final int unusedmiataNb2VVTRatioFrom_offset = 820; + public static final int unusedmiataNb2VVTRatioFrom_offset_hex = 334; + public static final int unusedmiataNb2VVTRatioTo_offset = 824; + public static final int unusedmiataNb2VVTRatioTo_offset_hex = 338; public static final int unusedOldWarmupAfr_offset = 744; public static final int unusedSomething_offset = 1784; public static final int unusedSpiPadding4_offset = 2593; @@ -1841,8 +1841,8 @@ public class Fields { public static final Field MAPMINBUFFERLENGTH = Field.create("MAPMINBUFFERLENGTH", 812, FieldType.INT); public static final Field IDLEPIDDEACTIVATIONTPSTHRESHOLD = Field.create("IDLEPIDDEACTIVATIONTPSTHRESHOLD", 816, FieldType.INT16); public static final Field STEPPERPARKINGEXTRASTEPS = Field.create("STEPPERPARKINGEXTRASTEPS", 818, FieldType.INT16); - public static final Field MIATANB2VVTRATIOFROM = Field.create("MIATANB2VVTRATIOFROM", 820, FieldType.FLOAT); - public static final Field MIATANB2VVTRATIOTO = Field.create("MIATANB2VVTRATIOTO", 824, FieldType.FLOAT); + public static final Field UNUSEDMIATANB2VVTRATIOFROM = Field.create("UNUSEDMIATANB2VVTRATIOFROM", 820, FieldType.FLOAT); + public static final Field UNUSEDMIATANB2VVTRATIOTO = Field.create("UNUSEDMIATANB2VVTRATIOTO", 824, FieldType.FLOAT); public static final Field TRIGGERERRORPIN = Field.create("TRIGGERERRORPIN", 828, FieldType.INT8, brain_pin_e); public static final Field TRIGGERERRORPINMODE = Field.create("TRIGGERERRORPINMODE", 829, FieldType.INT8, pin_output_mode_e); public static final Field ACRELAYPIN = Field.create("ACRELAYPIN", 830, FieldType.INT8, output_pin_e); @@ -2739,8 +2739,8 @@ public class Fields { MAPMINBUFFERLENGTH, IDLEPIDDEACTIVATIONTPSTHRESHOLD, STEPPERPARKINGEXTRASTEPS, - MIATANB2VVTRATIOFROM, - MIATANB2VVTRATIOTO, + UNUSEDMIATANB2VVTRATIOFROM, + UNUSEDMIATANB2VVTRATIOTO, TRIGGERERRORPIN, TRIGGERERRORPINMODE, ACRELAYPIN, From f62364fe394dea890f0b394bc968fbe972e2178e Mon Sep 17 00:00:00 2001 From: rusEfi Date: Mon, 9 Mar 2020 19:15:13 -0400 Subject: [PATCH 107/171] stepper in TS should be output not any --- .../algo/engine_configuration_generated_structures.h | 6 +++--- .../engine_configuration_generated_structures.h | 6 +++--- firmware/integration/rusefi_config.txt | 9 ++++++++- firmware/tunerstudio/rusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_frankenso.ini | 4 ++-- firmware/tunerstudio/rusefi_kinetis.ini | 4 ++-- firmware/tunerstudio/rusefi_microrusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_prometheus.ini | 4 ++-- firmware/tunerstudio/rusefi_proteus.ini | 4 ++-- .../models/src/com/rusefi/config/generated/Fields.java | 6 +++--- 10 files changed, 29 insertions(+), 22 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 5fbabc5ae3..63d4b41037 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 16:42:29 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:14:16 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -487,7 +487,7 @@ struct idle_hardware_s { /** * offset 4 */ - brain_pin_e solenoidPin; + output_pin_e solenoidPin; /** * offset 5 */ @@ -3216,4 +3216,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 16:42:29 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:14:16 EDT 2020 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 15f0465c9e..ccb7391f2f 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:12 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:39 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -487,7 +487,7 @@ struct idle_hardware_s { /** * offset 4 */ - brain_pin_e solenoidPin; + output_pin_e solenoidPin; /** * offset 5 */ @@ -3216,4 +3216,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:12 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:39 EDT 2020 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 38d92d9e63..6f3c4d9826 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -212,6 +212,13 @@ custom mass_storage_e 4 bits, U32, @OFFSET@, [0:7], @@mass_storage_e_enum@@ #define brain_input_pin_e_enum "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" custom brain_input_pin_e 1 bits, U08, @OFFSET@, [0:7], @@brain_input_pin_e_enum@@ +! +! 'brain_pin_e' is the most flexible kind of pin +! 'output_pin_e' is a brain pin known to be routed to control an output on your specific board +! 'brain_input_pin_e' is XXX +! 'switch_input_pin_e' is YYY +! + #define brain_pin_e_enum "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define switch_input_pin_e_enum "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -510,7 +517,7 @@ air_pressure_sensor_config_s baroSensor;@see hasBaroSensor struct idle_hardware_s int solenoidFrequency;;"Hz", 1, 0, 0, 3000, 0 - brain_pin_e solenoidPin; + output_pin_e solenoidPin; brain_pin_e stepperDirectionPin; brain_pin_e stepperStepPin; pin_output_mode_e solenoidPinMode; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 616afeb3a7..1a332edfb4 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:12 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:39 EDT 2020 pageSize = 20000 page = 1 @@ -266,7 +266,7 @@ page = 1 baroSensor_hwChannel = bits, U08, 596, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_stepperStepPin = bits, U08, 606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_solenoidPinMode = bits, U08, 607, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 66f8708670..d6a450bba9 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:19 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:14:07 EDT 2020 pageSize = 20000 page = 1 @@ -266,7 +266,7 @@ page = 1 baroSensor_hwChannel = bits, U08, 596, [0:7] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_stepperStepPin = bits, U08, 606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_solenoidPinMode = bits, U08, 607, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 81bb059823..5b587f853a 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 16:42:29 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:14:16 EDT 2020 pageSize = 20000 page = 1 @@ -266,7 +266,7 @@ page = 1 baroSensor_hwChannel = bits, U08, 596, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" idle_stepperStepPin = bits, U08, 606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" idle_solenoidPinMode = bits, U08, 607, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 055537cee7..164131b8fa 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:16 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:58 EDT 2020 pageSize = 20000 page = 1 @@ -266,7 +266,7 @@ page = 1 baroSensor_hwChannel = bits, U08, 596, [0:7] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_stepperStepPin = bits, U08, 606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_solenoidPinMode = bits, U08, 607, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 8010136aff..2317573cef 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:22 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:14:10 EDT 2020 pageSize = 20000 page = 1 @@ -266,7 +266,7 @@ page = 1 baroSensor_hwChannel = bits, U08, 596, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_stepperStepPin = bits, U08, 606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_solenoidPinMode = bits, U08, 607, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index e8d97703e9..3e1bdd8dbd 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:25 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:14:13 EDT 2020 pageSize = 20000 page = 1 @@ -266,7 +266,7 @@ page = 1 baroSensor_hwChannel = bits, U08, 596, [0:7] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Analog Volt 12","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_stepperStepPin = bits, U08, 606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" idle_solenoidPinMode = bits, U08, 607, [0:7], "default", "default inverted", "open collector", "open collector inverted" diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 8046e75e68..3983ac7ec1 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 16:42:12 EDT 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:39 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1649,7 +1649,8 @@ public class Fields { public static final Field BAROSENSOR_TYPE = Field.create("BAROSENSOR_TYPE", 592, FieldType.INT); public static final Field BAROSENSOR_HWCHANNEL = Field.create("BAROSENSOR_HWCHANNEL", 596, FieldType.INT8, adc_channel_e); public static final Field IDLE_SOLENOIDFREQUENCY = Field.create("IDLE_SOLENOIDFREQUENCY", 600, FieldType.INT); - public static final Field IDLE_SOLENOIDPIN = Field.create("IDLE_SOLENOIDPIN", 604, FieldType.INT8, brain_pin_e); + public static final String[] output_pin_e = {"NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"}; + public static final Field IDLE_SOLENOIDPIN = Field.create("IDLE_SOLENOIDPIN", 604, FieldType.INT8, output_pin_e); public static final Field IDLE_STEPPERDIRECTIONPIN = Field.create("IDLE_STEPPERDIRECTIONPIN", 605, FieldType.INT8, brain_pin_e); public static final Field IDLE_STEPPERSTEPPIN = Field.create("IDLE_STEPPERSTEPPIN", 606, FieldType.INT8, brain_pin_e); public static final Field IDLE_SOLENOIDPINMODE = Field.create("IDLE_SOLENOIDPINMODE", 607, FieldType.INT8, pin_output_mode_e); @@ -1657,7 +1658,6 @@ public class Fields { public static final Field MAPFREQUENCY0KPA = Field.create("MAPFREQUENCY0KPA", 612, FieldType.FLOAT); public static final Field MAPFREQUENCY100KPA = Field.create("MAPFREQUENCY100KPA", 616, FieldType.FLOAT); public static final Field TRIGGERSIMULATORFREQUENCY = Field.create("TRIGGERSIMULATORFREQUENCY", 620, FieldType.INT); - public static final String[] output_pin_e = {"NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"}; public static final Field INJECTIONPINS1 = Field.create("INJECTIONPINS1", 624, FieldType.INT8, output_pin_e); public static final Field INJECTIONPINS2 = Field.create("INJECTIONPINS2", 625, FieldType.INT8, output_pin_e); public static final Field INJECTIONPINS3 = Field.create("INJECTIONPINS3", 626, FieldType.INT8, output_pin_e); From ca8a3b1e1f54c29e8f1d836697ff6b99d42e9ab2 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Mon, 9 Mar 2020 19:29:10 -0400 Subject: [PATCH 108/171] more of the same --- .../algo/engine_configuration_generated_structures.h | 8 ++++---- .../generated/engine_configuration_generated_structures.h | 8 ++++---- firmware/integration/rusefi_config.txt | 4 ++-- firmware/tunerstudio/rusefi.ini | 6 +++--- firmware/tunerstudio/rusefi_frankenso.ini | 6 +++--- firmware/tunerstudio/rusefi_kinetis.ini | 6 +++--- firmware/tunerstudio/rusefi_microrusefi.ini | 6 +++--- firmware/tunerstudio/rusefi_prometheus.ini | 6 +++--- firmware/tunerstudio/rusefi_proteus.ini | 6 +++--- .../models/src/com/rusefi/config/generated/Fields.java | 6 +++--- 10 files changed, 31 insertions(+), 31 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 63d4b41037..c36de4c427 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:14:16 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:27:30 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1414,7 +1414,7 @@ struct engine_configuration_s { /** * offset 808 */ - brain_pin_e starterRelayPin; + output_pin_e starterRelayPin; /** * offset 809 */ @@ -2399,7 +2399,7 @@ struct engine_configuration_s { * This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin * offset 2226 */ - brain_pin_e dizzySparkOutputPin; + output_pin_e dizzySparkOutputPin; /** * offset 2227 */ @@ -3216,4 +3216,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:14:16 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:27:30 EDT 2020 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index ccb7391f2f..df5549b236 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:39 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:17 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1414,7 +1414,7 @@ struct engine_configuration_s { /** * offset 808 */ - brain_pin_e starterRelayPin; + output_pin_e starterRelayPin; /** * offset 809 */ @@ -2399,7 +2399,7 @@ struct engine_configuration_s { * This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin * offset 2226 */ - brain_pin_e dizzySparkOutputPin; + output_pin_e dizzySparkOutputPin; /** * offset 2227 */ @@ -3216,4 +3216,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:39 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:17 EDT 2020 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 6f3c4d9826..1bfeebbfc7 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -680,7 +680,7 @@ custom uart_device_e 1 bits,U32, @OFFSET@, [0:7], "Off", "UART1", "UART2", "UA int16_t sdCardPeriodMs;+SD card logging period, in milliseconds;"ms", 1, 0, 0, 30000, 0 brain_pin_e debugSetTimer brain_pin_e debugMapAveraging; - brain_pin_e starterRelayPin; + output_pin_e starterRelayPin; pin_output_mode_e starterRelayPinMode; brain_pin_e secondSolenoidPin;Some Subaru and some Mazda use double-solenoid idle air valve uint8_t[1] unuseduartPadding1; @@ -1019,7 +1019,7 @@ float[MAP_ACCEL_TAPER] mapAccelTaperMult;;"mult", 1, 0, 0.0, 300, spi_device_e cj125SpiDevice; pin_output_mode_e cj125CsPinMode; - brain_pin_e dizzySparkOutputPin;+This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin + output_pin_e dizzySparkOutputPin;+This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin pin_output_mode_e dizzySparkOutputPinMode; int crankingIACposition;+This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling.;"percent", 1, 0, -100.0, 100, diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 1a332edfb4..7da8114b83 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:39 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:17 EDT 2020 pageSize = 20000 page = 1 @@ -449,7 +449,7 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping unuseduartPadding1 offset 811 @@ -791,7 +791,7 @@ page = 1 auxPidPins4 = bits, U08, 2223, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "default", "default inverted", "open collector", "open collector inverted" crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index d6a450bba9..33630bee5b 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:14:07 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:46 EDT 2020 pageSize = 20000 page = 1 @@ -449,7 +449,7 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping unuseduartPadding1 offset 811 @@ -791,7 +791,7 @@ page = 1 auxPidPins4 = bits, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "default", "default inverted", "open collector", "open collector inverted" crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 5b587f853a..22f8c27816 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:14:16 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:27:30 EDT 2020 pageSize = 20000 page = 1 @@ -449,7 +449,7 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" ;no TS info - skipping unuseduartPadding1 offset 811 @@ -791,7 +791,7 @@ page = 1 auxPidPins4 = bits, U08, 2223, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "default", "default inverted", "open collector", "open collector inverted" crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 164131b8fa..17a6e58f31 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:58 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:32 EDT 2020 pageSize = 20000 page = 1 @@ -449,7 +449,7 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping unuseduartPadding1 offset 811 @@ -791,7 +791,7 @@ page = 1 auxPidPins4 = bits, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "default", "default inverted", "open collector", "open collector inverted" crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 2317573cef..972cf5b121 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:14:10 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:27:00 EDT 2020 pageSize = 20000 page = 1 @@ -449,7 +449,7 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping unuseduartPadding1 offset 811 @@ -791,7 +791,7 @@ page = 1 auxPidPins4 = bits, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "default", "default inverted", "open collector", "open collector inverted" crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 3e1bdd8dbd..fe71e0fb07 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:14:13 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:27:16 EDT 2020 pageSize = 20000 page = 1 @@ -449,7 +449,7 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping unuseduartPadding1 offset 811 @@ -791,7 +791,7 @@ page = 1 auxPidPins4 = bits, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "default", "default inverted", "open collector", "open collector inverted" crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 3983ac7ec1..a55117f556 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:13:39 EDT 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:17 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1834,7 +1834,7 @@ public class Fields { public static final Field SDCARDPERIODMS = Field.create("SDCARDPERIODMS", 804, FieldType.INT16); public static final Field DEBUGSETTIMER = Field.create("DEBUGSETTIMER", 806, FieldType.INT8, brain_pin_e); public static final Field DEBUGMAPAVERAGING = Field.create("DEBUGMAPAVERAGING", 807, FieldType.INT8, brain_pin_e); - public static final Field STARTERRELAYPIN = Field.create("STARTERRELAYPIN", 808, FieldType.INT8, brain_pin_e); + public static final Field STARTERRELAYPIN = Field.create("STARTERRELAYPIN", 808, FieldType.INT8, output_pin_e); public static final Field STARTERRELAYPINMODE = Field.create("STARTERRELAYPINMODE", 809, FieldType.INT8, pin_output_mode_e); public static final Field SECONDSOLENOIDPIN = Field.create("SECONDSOLENOIDPIN", 810, FieldType.INT8, brain_pin_e); public static final Field UNUSEDUARTPADDING1 = Field.create("UNUSEDUARTPADDING1", 811, FieldType.INT8); @@ -2167,7 +2167,7 @@ public class Fields { public static final Field AUXPIDPINS4 = Field.create("AUXPIDPINS4", 2223, FieldType.INT8, output_pin_e); public static final Field CJ125SPIDEVICE = Field.create("CJ125SPIDEVICE", 2224, FieldType.INT8); public static final Field CJ125CSPINMODE = Field.create("CJ125CSPINMODE", 2225, FieldType.INT8, pin_output_mode_e); - public static final Field DIZZYSPARKOUTPUTPIN = Field.create("DIZZYSPARKOUTPUTPIN", 2226, FieldType.INT8, brain_pin_e); + public static final Field DIZZYSPARKOUTPUTPIN = Field.create("DIZZYSPARKOUTPUTPIN", 2226, FieldType.INT8, output_pin_e); public static final Field DIZZYSPARKOUTPUTPINMODE = Field.create("DIZZYSPARKOUTPUTPINMODE", 2227, FieldType.INT8, pin_output_mode_e); public static final Field CRANKINGIACPOSITION = Field.create("CRANKINGIACPOSITION", 2228, FieldType.INT); public static final Field TCHARGEMINRPMMINTPS = Field.create("TCHARGEMINRPMMINTPS", 2232, FieldType.FLOAT); From 1cdd1b86a9b81066dbce754b7d285dbf3fa89d60 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 10 Mar 2020 11:31:00 -0700 Subject: [PATCH 109/171] hbridge idle ui (#1178) --- firmware/tunerstudio/rusefi.input | 47 ++++++++++++++++++------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 928169fc22..804acda0c9 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2011,24 +2011,38 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - + + dialog = hbridgeHardware, "H-Bridge Hardware" + field = "PWM Frequency", etbFreq + field = "Two-wire mode", etb_use_two_wires + field = "No1 Direction #1", etbIo1_directionPin1 + field = "No1 Direction #2", etbIo1_directionPin2 + field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } + field = "No2 Direction #1", etbIo2_directionPin1 + field = "No2 Direction #2", etbIo2_directionPin2 + field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} + + dialog = idleStepperHw, "Stepper Hardware" + field = "Idle Stepper Step Pin", idle_stepperStepPin + field = "Idle Stepper Dir Pin", idle_stepperDirectionPin + field = "Idle Stepper Enable Pin", stepperEnablePin + field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode + dialog = idleStepper, "Stepper" - field = "useHbridges", useHbridges - field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle - field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode, useStepperIdle + field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - + panel = idleStepperHw, { useStepperIdle && !useHbridges } + panel = hbridgeHardware, { useStepperIdle && useHbridges } + dialog = idleHwType, "Idle Valve Hardware", border panel = idleSolenoid, West panel = idleStepper, East - + dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" + field = "!ECU reboot needed to apply these settings" field = "Use Stepper", useStepperIdle field = "Double Solenoid Mode", isDoubleSolenoidIdle panel = idleHwType @@ -2615,17 +2629,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage - field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etbIo2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} - field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} + field = "TPS#2 min", tps2Min, { tps2_1AdcChannel != 16 } + field = "TPS#2 max", tps2Max, { tps2_1AdcChannel != 16 } + ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility + ; criteria for the same panel when used in multiple places + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } panel = etbPidDialog dialog = etbDialogRight From 2a07d4f2e4ae5cd68c4fd1dd829eaa250941c860 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 10 Mar 2020 14:32:20 -0400 Subject: [PATCH 110/171] H-bridge --- firmware/tunerstudio/rusefi.ini | 49 ++++++++++++--------- firmware/tunerstudio/rusefi_frankenso.ini | 49 ++++++++++++--------- firmware/tunerstudio/rusefi_kinetis.ini | 49 ++++++++++++--------- firmware/tunerstudio/rusefi_microrusefi.ini | 49 ++++++++++++--------- firmware/tunerstudio/rusefi_prometheus.ini | 49 ++++++++++++--------- firmware/tunerstudio/rusefi_proteus.ini | 49 ++++++++++++--------- 6 files changed, 174 insertions(+), 120 deletions(-) diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 7da8114b83..d3eca3bc91 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:17 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:37 EDT 2020 pageSize = 20000 page = 1 @@ -3135,24 +3135,38 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - + + dialog = hbridgeHardware, "H-Bridge Hardware" + field = "PWM Frequency", etbFreq + field = "Two-wire mode", etb_use_two_wires + field = "No1 Direction #1", etbIo1_directionPin1 + field = "No1 Direction #2", etbIo1_directionPin2 + field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } + field = "No2 Direction #1", etbIo2_directionPin1 + field = "No2 Direction #2", etbIo2_directionPin2 + field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} + + dialog = idleStepperHw, "Stepper Hardware" + field = "Idle Stepper Step Pin", idle_stepperStepPin + field = "Idle Stepper Dir Pin", idle_stepperDirectionPin + field = "Idle Stepper Enable Pin", stepperEnablePin + field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode + dialog = idleStepper, "Stepper" - field = "useHbridges", useHbridges - field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle - field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode, useStepperIdle + field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - + panel = idleStepperHw, { useStepperIdle && !useHbridges } + panel = hbridgeHardware, { useStepperIdle && useHbridges } + dialog = idleHwType, "Idle Valve Hardware", border panel = idleSolenoid, West panel = idleStepper, East - + dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" + field = "!ECU reboot needed to apply these settings" field = "Use Stepper", useStepperIdle field = "Double Solenoid Mode", isDoubleSolenoidIdle panel = idleHwType @@ -3739,17 +3753,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage - field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etbIo2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} - field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} + field = "TPS#2 min", tps2Min, { tps2_1AdcChannel != 16 } + field = "TPS#2 max", tps2Max, { tps2_1AdcChannel != 16 } + ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility + ; criteria for the same panel when used in multiple places + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 33630bee5b..0adc791746 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:46 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:45 EDT 2020 pageSize = 20000 page = 1 @@ -3135,24 +3135,38 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - + + dialog = hbridgeHardware, "H-Bridge Hardware" + field = "PWM Frequency", etbFreq + field = "Two-wire mode", etb_use_two_wires + field = "No1 Direction #1", etbIo1_directionPin1 + field = "No1 Direction #2", etbIo1_directionPin2 + field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } + field = "No2 Direction #1", etbIo2_directionPin1 + field = "No2 Direction #2", etbIo2_directionPin2 + field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} + + dialog = idleStepperHw, "Stepper Hardware" + field = "Idle Stepper Step Pin", idle_stepperStepPin + field = "Idle Stepper Dir Pin", idle_stepperDirectionPin + field = "Idle Stepper Enable Pin", stepperEnablePin + field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode + dialog = idleStepper, "Stepper" - field = "useHbridges", useHbridges - field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle - field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode, useStepperIdle + field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - + panel = idleStepperHw, { useStepperIdle && !useHbridges } + panel = hbridgeHardware, { useStepperIdle && useHbridges } + dialog = idleHwType, "Idle Valve Hardware", border panel = idleSolenoid, West panel = idleStepper, East - + dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" + field = "!ECU reboot needed to apply these settings" field = "Use Stepper", useStepperIdle field = "Double Solenoid Mode", isDoubleSolenoidIdle panel = idleHwType @@ -3739,17 +3753,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage - field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etbIo2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} - field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} + field = "TPS#2 min", tps2Min, { tps2_1AdcChannel != 16 } + field = "TPS#2 max", tps2Max, { tps2_1AdcChannel != 16 } + ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility + ; criteria for the same panel when used in multiple places + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 22f8c27816..1d2dcaacab 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:27:30 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 10 14:31:55 EDT 2020 pageSize = 20000 page = 1 @@ -3135,24 +3135,38 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - + + dialog = hbridgeHardware, "H-Bridge Hardware" + field = "PWM Frequency", etbFreq + field = "Two-wire mode", etb_use_two_wires + field = "No1 Direction #1", etbIo1_directionPin1 + field = "No1 Direction #2", etbIo1_directionPin2 + field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } + field = "No2 Direction #1", etbIo2_directionPin1 + field = "No2 Direction #2", etbIo2_directionPin2 + field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} + + dialog = idleStepperHw, "Stepper Hardware" + field = "Idle Stepper Step Pin", idle_stepperStepPin + field = "Idle Stepper Dir Pin", idle_stepperDirectionPin + field = "Idle Stepper Enable Pin", stepperEnablePin + field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode + dialog = idleStepper, "Stepper" - field = "useHbridges", useHbridges - field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle - field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode, useStepperIdle + field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - + panel = idleStepperHw, { useStepperIdle && !useHbridges } + panel = hbridgeHardware, { useStepperIdle && useHbridges } + dialog = idleHwType, "Idle Valve Hardware", border panel = idleSolenoid, West panel = idleStepper, East - + dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" + field = "!ECU reboot needed to apply these settings" field = "Use Stepper", useStepperIdle field = "Double Solenoid Mode", isDoubleSolenoidIdle panel = idleHwType @@ -3739,17 +3753,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage - field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etbIo2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} - field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} + field = "TPS#2 min", tps2Min, { tps2_1AdcChannel != 16 } + field = "TPS#2 max", tps2Max, { tps2_1AdcChannel != 16 } + ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility + ; criteria for the same panel when used in multiple places + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 17a6e58f31..427016020f 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:32 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:41 EDT 2020 pageSize = 20000 page = 1 @@ -3119,24 +3119,38 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - + + dialog = hbridgeHardware, "H-Bridge Hardware" + field = "PWM Frequency", etbFreq + field = "Two-wire mode", etb_use_two_wires + field = "No1 Direction #1", etbIo1_directionPin1 + field = "No1 Direction #2", etbIo1_directionPin2 + field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } + field = "No2 Direction #1", etbIo2_directionPin1 + field = "No2 Direction #2", etbIo2_directionPin2 + field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} + + dialog = idleStepperHw, "Stepper Hardware" + field = "Idle Stepper Step Pin", idle_stepperStepPin + field = "Idle Stepper Dir Pin", idle_stepperDirectionPin + field = "Idle Stepper Enable Pin", stepperEnablePin + field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode + dialog = idleStepper, "Stepper" - field = "useHbridges", useHbridges - field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle - field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode, useStepperIdle + field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - + panel = idleStepperHw, { useStepperIdle && !useHbridges } + panel = hbridgeHardware, { useStepperIdle && useHbridges } + dialog = idleHwType, "Idle Valve Hardware", border panel = idleSolenoid, West panel = idleStepper, East - + dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" + field = "!ECU reboot needed to apply these settings" field = "Use Stepper", useStepperIdle field = "Double Solenoid Mode", isDoubleSolenoidIdle panel = idleHwType @@ -3721,17 +3735,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage - field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etbIo2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} - field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} + field = "TPS#2 min", tps2Min, { tps2_1AdcChannel != 16 } + field = "TPS#2 max", tps2Max, { tps2_1AdcChannel != 16 } + ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility + ; criteria for the same panel when used in multiple places + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 972cf5b121..2114c14ab1 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:27:00 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:48 EDT 2020 pageSize = 20000 page = 1 @@ -3131,24 +3131,38 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - + + dialog = hbridgeHardware, "H-Bridge Hardware" + field = "PWM Frequency", etbFreq + field = "Two-wire mode", etb_use_two_wires + field = "No1 Direction #1", etbIo1_directionPin1 + field = "No1 Direction #2", etbIo1_directionPin2 + field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } + field = "No2 Direction #1", etbIo2_directionPin1 + field = "No2 Direction #2", etbIo2_directionPin2 + field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} + + dialog = idleStepperHw, "Stepper Hardware" + field = "Idle Stepper Step Pin", idle_stepperStepPin + field = "Idle Stepper Dir Pin", idle_stepperDirectionPin + field = "Idle Stepper Enable Pin", stepperEnablePin + field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode + dialog = idleStepper, "Stepper" - field = "useHbridges", useHbridges - field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle - field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode, useStepperIdle + field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - + panel = idleStepperHw, { useStepperIdle && !useHbridges } + panel = hbridgeHardware, { useStepperIdle && useHbridges } + dialog = idleHwType, "Idle Valve Hardware", border panel = idleSolenoid, West panel = idleStepper, East - + dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" + field = "!ECU reboot needed to apply these settings" field = "Use Stepper", useStepperIdle field = "Double Solenoid Mode", isDoubleSolenoidIdle panel = idleHwType @@ -3735,17 +3749,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage - field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etbIo2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} - field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} + field = "TPS#2 min", tps2Min, { tps2_1AdcChannel != 16 } + field = "TPS#2 max", tps2Max, { tps2_1AdcChannel != 16 } + ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility + ; criteria for the same panel when used in multiple places + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index fe71e0fb07..33a6e2b4ee 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:27:16 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:52 EDT 2020 pageSize = 20000 page = 1 @@ -3126,24 +3126,38 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - + + dialog = hbridgeHardware, "H-Bridge Hardware" + field = "PWM Frequency", etbFreq + field = "Two-wire mode", etb_use_two_wires + field = "No1 Direction #1", etbIo1_directionPin1 + field = "No1 Direction #2", etbIo1_directionPin2 + field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } + field = "No2 Direction #1", etbIo2_directionPin1 + field = "No2 Direction #2", etbIo2_directionPin2 + field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} + + dialog = idleStepperHw, "Stepper Hardware" + field = "Idle Stepper Step Pin", idle_stepperStepPin + field = "Idle Stepper Dir Pin", idle_stepperDirectionPin + field = "Idle Stepper Enable Pin", stepperEnablePin + field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode + dialog = idleStepper, "Stepper" - field = "useHbridges", useHbridges - field = "Idle Stepper Step Pin", idle_stepperStepPin, useStepperIdle - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin, useStepperIdle - field = "Idle Stepper Enable Pin", stepperEnablePin, useStepperIdle - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode, useStepperIdle + field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - + panel = idleStepperHw, { useStepperIdle && !useHbridges } + panel = hbridgeHardware, { useStepperIdle && useHbridges } + dialog = idleHwType, "Idle Valve Hardware", border panel = idleSolenoid, West panel = idleStepper, East - + dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" + field = "!ECU reboot needed to apply these settings" field = "Use Stepper", useStepperIdle field = "Double Solenoid Mode", isDoubleSolenoidIdle panel = idleHwType @@ -3728,17 +3742,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage - field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etbIo2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} - field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} - field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} + field = "TPS#2 min", tps2Min, { tps2_1AdcChannel != 16 } + field = "TPS#2 max", tps2Max, { tps2_1AdcChannel != 16 } + ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility + ; criteria for the same panel when used in multiple places + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } panel = etbPidDialog dialog = etbDialogRight From c19f3e4caa843ba80a87293157dc17fe8d169232 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 10 Mar 2020 12:18:29 -0700 Subject: [PATCH 111/171] Control stepper with dual H-bridges (#1121) * divorce stepper from hw * oops * ptr not ref * hbridge stepper * typo * hook up twin h * hook up hardware * use config field * hook up motor repo * guard tests * whoops * ok fix for real * ok that's the right thing * do full stepping Co-authored-by: Matthew Kennedy Co-authored-by: Matthew Kennedy --- .../controllers/actuators/idle_thread.cpp | 39 ++++++++++---- firmware/hw_layer/hw_layer.mk | 1 + firmware/hw_layer/stepper.h | 15 ++++++ firmware/hw_layer/stepper_dual_hbridge.cpp | 53 +++++++++++++++++++ 4 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 firmware/hw_layer/stepper_dual_hbridge.cpp diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index af251e4c74..08e15f63b3 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -42,8 +42,10 @@ #if ! EFI_UNIT_TEST #include "stepper.h" +#include "dc_motors.h" #include "pin_repository.h" static StepDirectionStepper iacStepperHw; +static DualHBridgeStepper iacHbridgeHw; static StepperMotor iacMotor; #endif /* EFI_UNIT_TEST */ @@ -558,16 +560,35 @@ void stopIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { if (CONFIG(useStepperIdle)) { - iacStepperHw.initialize( - CONFIG(idle).stepperStepPin, - CONFIG(idle).stepperDirectionPin, - CONFIG(stepperDirectionPinMode), - CONFIG(idleStepperReactionTime), - CONFIG(stepperEnablePin), - CONFIG(stepperEnablePinMode) - ); + StepperHw* hw; - iacMotor.initialize(&iacStepperHw, CONFIG(idleStepperTotalSteps), logger); + if (CONFIG(useHbridges)) { + auto motorA = initDcMotor(0 PASS_ENGINE_PARAMETER_SUFFIX); + auto motorB = initDcMotor(1 PASS_ENGINE_PARAMETER_SUFFIX); + + if (motorA && motorB) { + iacHbridgeHw.initialize( + motorA, + motorB, + CONFIG(idleStepperReactionTime) + ); + } + + hw = &iacHbridgeHw; + } else { + iacStepperHw.initialize( + CONFIG(idle).stepperStepPin, + CONFIG(idle).stepperDirectionPin, + CONFIG(stepperDirectionPinMode), + CONFIG(idleStepperReactionTime), + CONFIG(stepperEnablePin), + CONFIG(stepperEnablePinMode) + ); + + hw = &iacStepperHw; + } + + iacMotor.initialize(hw, CONFIG(idleStepperTotalSteps), logger); // This greatly improves PID accuracy for steppers with a small number of steps idlePositionSensitivityThreshold = 1.0f / engineConfiguration->idleStepperTotalSteps; diff --git a/firmware/hw_layer/hw_layer.mk b/firmware/hw_layer/hw_layer.mk index 8a6493e963..bb60bc0901 100644 --- a/firmware/hw_layer/hw_layer.mk +++ b/firmware/hw_layer/hw_layer.mk @@ -32,6 +32,7 @@ HW_LAYER_EMS_CPP = $(HW_LAYER_EGT_CPP) \ $(PROJECT_DIR)/hw_layer/hip9011_logic.cpp \ $(PROJECT_DIR)/hw_layer/vehicle_speed.cpp \ $(PROJECT_DIR)/hw_layer/stepper.cpp \ + $(PROJECT_DIR)/hw_layer/stepper_dual_hbridge.cpp \ $(PROJECT_DIR)/hw_layer/servo.cpp \ $(PROJECT_DIR)/hw_layer/io_pins.cpp \ $(PROJECT_DIR)/hw_layer/rtc_helper.cpp \ diff --git a/firmware/hw_layer/stepper.h b/firmware/hw_layer/stepper.h index de4d356367..8f997a117b 100644 --- a/firmware/hw_layer/stepper.h +++ b/firmware/hw_layer/stepper.h @@ -40,6 +40,21 @@ private: pin_output_mode_e directionPinMode, stepPinMode, enablePinMode; }; +class DcMotor; + +class DualHBridgeStepper final : public StepperHw { +public: + void initialize(DcMotor* motorPhaseA, DcMotor* motorPhaseB, float reactionTime); + + void step(bool positive) override; + +private: + DcMotor* m_motorPhaseA; + DcMotor* m_motorPhaseB; + + uint8_t m_phase = 0; +}; + class StepperMotor final : private ThreadController { public: StepperMotor(); diff --git a/firmware/hw_layer/stepper_dual_hbridge.cpp b/firmware/hw_layer/stepper_dual_hbridge.cpp new file mode 100644 index 0000000000..b89feeac94 --- /dev/null +++ b/firmware/hw_layer/stepper_dual_hbridge.cpp @@ -0,0 +1,53 @@ + +#include "efifeatures.h" + +#if !EFI_UNIT_TEST + +#include "stepper.h" +#include "dc_motor.h" + +static const int8_t phaseA[] = +{ + 1, + 1, + -1, + -1 +}; + +static const int8_t phaseB[] = +{ + -1, + 1, + 1, + -1 +}; + +void DualHBridgeStepper::initialize(DcMotor* motorPhaseA, DcMotor* motorPhaseB, float reactionTime) +{ + setReactionTime(reactionTime); + + m_motorPhaseA = motorPhaseA; + m_motorPhaseB = motorPhaseB; +} + +void DualHBridgeStepper::step(bool positive) { + // Check that we've been initialized + if (!m_motorPhaseA || !m_motorPhaseB) { + return; + } + + // step phase, wrapping + if (positive) { + m_phase = (m_phase + 1) & 0x03; + } else { + m_phase = (m_phase - 1) & 0x03; + } + + // Set phases according to the table + m_motorPhaseA->set(phaseA[m_phase]); + m_motorPhaseB->set(phaseB[m_phase]); + + pause(); +} + +#endif From ff7438162bda1ad7bfce8bfe62a3a0cf106f6ab2 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 10 Mar 2020 19:12:37 -0400 Subject: [PATCH 112/171] In case of incompatible firmware and console we have a vague error message fix #1180 --- .../config/controllers/algo/rusefi_generated.h | 4 ++-- firmware/console/binary/tunerstudio.cpp | 4 ++-- firmware/controllers/engine_controller.cpp | 2 +- firmware/controllers/generated/rusefi_generated.h | 4 ++-- firmware/integration/rusefi_config.txt | 14 +++++++++----- firmware/tunerstudio/rusefi.ini | 6 +++--- firmware/tunerstudio/rusefi_frankenso.ini | 6 +++--- firmware/tunerstudio/rusefi_kinetis.ini | 6 +++--- firmware/tunerstudio/rusefi_microrusefi.ini | 6 +++--- firmware/tunerstudio/rusefi_prometheus.ini | 6 +++--- firmware/tunerstudio/rusefi_proteus.ini | 6 +++--- .../src/com/rusefi/config/generated/Fields.java | 6 +++--- java_console/ui/src/com/rusefi/Launcher.java | 3 ++- 13 files changed, 39 insertions(+), 34 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 320a9fa47b..aa65a403e6 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -2020,7 +2020,7 @@ #define triggerSimulatorPins2_offset_hex 2e1 #define triggerSimulatorPins3_offset 738 #define triggerSimulatorPins3_offset_hex 2e2 -#define TS_FILE_VERSION 20191221 +#define TS_FILE_VERSION 20200310 #define TS_OUTPUT_SIZE 240 #define ts_show_analog_divider true #define ts_show_cj125 true @@ -2032,7 +2032,7 @@ #define ts_show_hip9011 true #define ts_show_joystick true #define ts_show_lcd true -#define TS_SIGNATURE "rusEFI v1.08" +#define TS_SIGNATURE "rusEFI v1.2020.3" #define tunerStudioSerialSpeed_offset 728 #define tunerStudioSerialSpeed_offset_hex 2d8 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index ae2676164e..f1404271ea 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -305,7 +305,7 @@ static void handleGetStructContent(ts_channel_s *tsChannel, int structId, int si // Returns true if an overrun would occur. static bool validateOffsetCount(size_t offset, size_t count, ts_channel_s *tsChannel) { if (offset + count > getTunerStudioPageSize()) { - scheduleMsg(&tsLogger, "TS: ERROR invalid offset %d count %d", offset, count); + scheduleMsg(&tsLogger, "TS: Project mismatch? Too much data requested %d/%d", offset, count); tunerStudioError("ERROR: out of range"); sendErrorCode(tsChannel); return true; @@ -631,7 +631,7 @@ void handleQueryCommand(ts_channel_s *tsChannel, ts_response_format_e mode) { */ void handleOutputChannelsCommand(ts_channel_s *tsChannel, ts_response_format_e mode, uint16_t offset, uint16_t count) { if (offset + count > sizeof(TunerStudioOutputChannels)) { - scheduleMsg(&tsLogger, "TS: ERROR invalid offset %d count %d", offset, count); + scheduleMsg(&tsLogger, "TS: Version Mismatch? Too much data requested %d+%d", offset, count); sendErrorCode(tsChannel); return; } diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 6d3fbfdc9d..768af7b50f 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200309; + return 201200310; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 704bc059e4..14c875bc64 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -2020,7 +2020,7 @@ #define triggerSimulatorPins2_offset_hex 2e1 #define triggerSimulatorPins3_offset 738 #define triggerSimulatorPins3_offset_hex 2e2 -#define TS_FILE_VERSION 20191221 +#define TS_FILE_VERSION 20200310 #define TS_OUTPUT_SIZE 240 #define ts_show_analog_divider true #define ts_show_cj125 true @@ -2032,7 +2032,7 @@ #define ts_show_hip9011 true #define ts_show_joystick true #define ts_show_lcd true -#define TS_SIGNATURE "rusEFI v1.08" +#define TS_SIGNATURE "rusEFI v1.2020.3" #define tunerStudioSerialSpeed_offset 728 #define tunerStudioSerialSpeed_offset_hex 2d8 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 1bfeebbfc7..6cf39c0c29 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -23,12 +23,19 @@ ! type name;comment -#define TS_SIGNATURE "rusEFI v1.08" +#define TS_SIGNATURE "rusEFI v1.2020.3" + +! +! this is here so that rusEfi console can access it, too +! [IMPORTANT] every time TS_OUTPUT_SIZE is changed make sure to increment TS_SIGNATURE above +! +#define TS_OUTPUT_SIZE 240 + ! ! this is used to confirm that firmware and TunerStudio are using the same rusefi.ini version ! so not forget to change fileVersion in rusefi.ini ! todo: is this not needed in light of TS_SIGNATURE? -#define TS_FILE_VERSION 20191221 +#define TS_FILE_VERSION 20200310 ! all the sub-structures are going to be nested within the primary structure, that's @@ -67,9 +74,6 @@ struct_no_prefix engine_configuration_s #define ETB_BIAS_CURVE_LENGTH 8 -! this is here so that rusEfi console can access it, too -#define TS_OUTPUT_SIZE 240 - #define MAP_ANGLE_SIZE 8 #define MAP_WINDOW_SIZE 8 diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index d3eca3bc91..aba7902618 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -44,7 +44,7 @@ enable2ndByteCanID = false [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI v1.08" ; signature is expected to be 7 or more characters. + signature = "rusEFI v1.2020.3" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:37 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:05 EDT 2020 pageSize = 20000 page = 1 @@ -1280,7 +1280,7 @@ page = 1 [OutputChannels] -fileVersion = { 20191221 } +fileVersion = { 20200310 } ochGetCommand = "O%2o%2c" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 0adc791746..749ee63261 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -44,7 +44,7 @@ enable2ndByteCanID = false [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI v1.08" ; signature is expected to be 7 or more characters. + signature = "rusEFI v1.2020.3" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:45 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:13 EDT 2020 pageSize = 20000 page = 1 @@ -1280,7 +1280,7 @@ page = 1 [OutputChannels] -fileVersion = { 20191221 } +fileVersion = { 20200310 } ochGetCommand = "O%2o%2c" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 1d2dcaacab..a32e8316f8 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -44,7 +44,7 @@ enable2ndByteCanID = false [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI v1.08" ; signature is expected to be 7 or more characters. + signature = "rusEFI v1.2020.3" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 10 14:31:55 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 10 18:46:23 EDT 2020 pageSize = 20000 page = 1 @@ -1280,7 +1280,7 @@ page = 1 [OutputChannels] -fileVersion = { 20191221 } +fileVersion = { 20200310 } ochGetCommand = "O%2o%2c" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 427016020f..41f0100dfc 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -44,7 +44,7 @@ enable2ndByteCanID = false [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI v1.08" ; signature is expected to be 7 or more characters. + signature = "rusEFI v1.2020.3" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:41 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:10 EDT 2020 pageSize = 20000 page = 1 @@ -1280,7 +1280,7 @@ page = 1 [OutputChannels] -fileVersion = { 20191221 } +fileVersion = { 20200310 } ochGetCommand = "O%2o%2c" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 2114c14ab1..ff8fcf4a6d 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -44,7 +44,7 @@ enable2ndByteCanID = false [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI v1.08" ; signature is expected to be 7 or more characters. + signature = "rusEFI v1.2020.3" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:48 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:17 EDT 2020 pageSize = 20000 page = 1 @@ -1280,7 +1280,7 @@ page = 1 [OutputChannels] -fileVersion = { 20191221 } +fileVersion = { 20200310 } ochGetCommand = "O%2o%2c" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 33a6e2b4ee..84b106c3ad 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -44,7 +44,7 @@ enable2ndByteCanID = false [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI v1.08" ; signature is expected to be 7 or more characters. + signature = "rusEFI v1.2020.3" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 14:31:52 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:20 EDT 2020 pageSize = 20000 page = 1 @@ -1280,7 +1280,7 @@ page = 1 [OutputChannels] -fileVersion = { 20191221 } +fileVersion = { 20200310 } ochGetCommand = "O%2o%2c" diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index a55117f556..6abbef8599 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:17 EDT 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:05 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1344,9 +1344,9 @@ public class Fields { public static final int triggerSimulatorPins1_offset = 736; public static final int triggerSimulatorPins2_offset = 737; public static final int triggerSimulatorPins3_offset = 738; - public static final int TS_FILE_VERSION = 20191221; + public static final int TS_FILE_VERSION = 20200310; public static final int TS_OUTPUT_SIZE = 240; - public static final String TS_SIGNATURE = "rusEFI v1.08"; + public static final String TS_SIGNATURE = "rusEFI v1.2020.3"; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; public static final int twoWireBatchInjection_offset = 1476; diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index e05727a48a..4fc27551b7 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -49,7 +49,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20200308; + public static final int CONSOLE_VERSION = 20200310; public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); @@ -415,6 +415,7 @@ public class Launcher { wrongVersionListener = new SensorCentral.SensorListener() { @Override public void onSensorUpdate(double value) { + // todo: we need to migrate to TS_SIGNATURE validation!!! if (value != Fields.TS_FILE_VERSION) { String message = "This copy of rusEfi console is not compatible with this version of firmware\r\n" + "Console compatible with " + Fields.TS_FILE_VERSION + " while firmware compatible with " + From 1f71b51f3224ca8e29b4d4a5bd982d8335b9eeaf Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 10 Mar 2020 21:09:22 -0400 Subject: [PATCH 113/171] Different issue running DFU under Windows 10 - mfc120.dll is missing #1182 --- .../src/com/rusefi/maintenance/DfuFlasher.java | 11 +++++++++-- .../src/com/rusefi/maintenance/ExecHelper.java | 16 ++++++++++++---- .../com/rusefi/maintenance/FirmwareFlasher.java | 8 ++++---- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java index cd3316ace5..615d8c3d12 100644 --- a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java @@ -71,9 +71,16 @@ public class DfuFlasher { } catch (InterruptedException e) { throw new IllegalStateException(e); } - ExecHelper.executeCommand(FirmwareFlasher.BINARY_LOCATION, + StringBuffer stdout = new StringBuffer(); + String errorResponse = ExecHelper.executeCommand(FirmwareFlasher.BINARY_LOCATION, FirmwareFlasher.BINARY_LOCATION + File.separator + DFU_COMMAND, - DFU_BINARY, wnd); + DFU_BINARY, wnd, stdout); + if (stdout.toString().contains("Verify successful")) { + wnd.appendMsg("SUCCESS!"); + } else { + wnd.appendMsg(stdout.length() + " / " + errorResponse.length()); + wnd.appendMsg("ERROR: does not look like DFU has worked!"); + } wnd.appendMsg("Please power cycle device to exit DFU mode"); } diff --git a/java_console/ui/src/com/rusefi/maintenance/ExecHelper.java b/java_console/ui/src/com/rusefi/maintenance/ExecHelper.java index 0e76b8063b..9785930ee3 100644 --- a/java_console/ui/src/com/rusefi/maintenance/ExecHelper.java +++ b/java_console/ui/src/com/rusefi/maintenance/ExecHelper.java @@ -43,16 +43,24 @@ public class ExecHelper { } @NotNull - public static StringBuffer executeCommand(String workingDirPath, String command, String binaryRelativeName, StatusConsumer wnd) { + public static String executeCommand(String workingDirPath, String command, String binaryRelativeName, StatusConsumer wnd) { + return executeCommand(workingDirPath, command, binaryRelativeName, wnd, new StringBuffer()); + } + + /** + * @param output out parameter with stdout content + * @return stderr of invoked command + */ + @NotNull + public static String executeCommand(String workingDirPath, String command, String binaryRelativeName, StatusConsumer wnd, StringBuffer output) { StringBuffer error = new StringBuffer(); String binaryFullName = workingDirPath + File.separator + binaryRelativeName; if (!new File(binaryFullName).exists()) { wnd.appendMsg(binaryFullName + " not found :("); - return error; + return error.toString(); } wnd.appendMsg("Executing " + command); - StringBuffer output = new StringBuffer(); try { File workingDir = new File(workingDirPath); Process p = Runtime.getRuntime().exec(command, null, workingDir); @@ -65,7 +73,7 @@ public class ExecHelper { wnd.appendMsg("WaitError: " + e); } wnd.appendMsg("Done!"); - return error; + return error.toString(); } protected static void submitAction(Runnable runnable, String threadName) { diff --git a/java_console/ui/src/com/rusefi/maintenance/FirmwareFlasher.java b/java_console/ui/src/com/rusefi/maintenance/FirmwareFlasher.java index 3d7c70dd64..4131c8989b 100644 --- a/java_console/ui/src/com/rusefi/maintenance/FirmwareFlasher.java +++ b/java_console/ui/src/com/rusefi/maintenance/FirmwareFlasher.java @@ -61,7 +61,7 @@ public class FirmwareFlasher { return OPENOCD_EXE + " -f openocd/" + cfg; } - protected static StringBuffer executeOpenOCDCommand(String command, StatusWindow wnd) { + protected static String executeOpenOCDCommand(String command, StatusWindow wnd) { return ExecHelper.executeCommand(BINARY_LOCATION, BINARY_LOCATION + File.separator + command, OPENOCD_EXE, wnd); @@ -74,12 +74,12 @@ public class FirmwareFlasher { return; } StatusAnimation sa = new StatusAnimation(wnd); - StringBuffer error = executeOpenOCDCommand(getOpenocdCommand() + " -c \"program " + + String error = executeOpenOCDCommand(getOpenocdCommand() + " -c \"program " + fileName + " verify reset exit 0x08000000\"", wnd); - if (error.toString().contains(NO_DRIVER_MESSAGE_TAG)) { + if (error.contains(NO_DRIVER_MESSAGE_TAG)) { wnd.appendMsg(" !!! ERROR: looks like stm32 driver is not installed? The link is above !!!"); - } else if (error.toString().contains(SUCCESS_MESSAGE_TAG) && !error.toString().toLowerCase().contains(FAILED_MESSAGE_TAG)) { + } else if (error.contains(SUCCESS_MESSAGE_TAG) && !error.toLowerCase().contains(FAILED_MESSAGE_TAG)) { wnd.appendMsg("Flashing looks good!"); sa.stop(); wnd.setStatus(DONE); From b7c4ac2495cb8f4794bc174300515cb68d63917f Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 10 Mar 2020 22:48:20 -0400 Subject: [PATCH 114/171] happy new year --- misc/console_launcher/readme.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/console_launcher/readme.html b/misc/console_launcher/readme.html index f05c815abe..4f887263b2 100644 --- a/misc/console_launcher/readme.html +++ b/misc/console_launcher/readme.html @@ -11,7 +11,7 @@ This is rusEfi open source engine control unit bundle.


-@author Andrey Belomutskiy, (c) 2012-2019 +@author Andrey Belomutskiy, (c) 2012-2020 From 63bbee1d3d1cb0d0e7e5d420874a015a4dab1b88 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 10 Mar 2020 23:16:56 -0400 Subject: [PATCH 115/171] Different issue running DFU under Windows 10 - mfc120.dll is missing #1182 --- .../ui/src/com/rusefi/maintenance/DfuFlasher.java | 14 ++++++++++++++ .../ui/src/com/rusefi/ui/util/URLLabel.java | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java index 615d8c3d12..5e0e986613 100644 --- a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java @@ -10,6 +10,7 @@ import com.rusefi.io.IoStream; import com.rusefi.io.serial.PortHolder; import com.rusefi.io.serial.SerialIoStreamJSerialComm; import com.rusefi.ui.StatusWindow; +import com.rusefi.ui.util.URLLabel; import javax.swing.*; import java.awt.*; @@ -17,6 +18,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; /** * @see FirmwareFlasher @@ -79,6 +82,17 @@ public class DfuFlasher { wnd.appendMsg("SUCCESS!"); } else { wnd.appendMsg(stdout.length() + " / " + errorResponse.length()); + if (stdout.length() == 0 && errorResponse.length() == 0) { + // looks like DFU util is not installed properly? + // ugly temporary solution + // see https://github.com/rusefi/rusefi/issues/1170 + // see https://github.com/rusefi/rusefi/issues/1182 + try { + URLLabel.open(new URL("https://github.com/rusefi/rusefi_external_utils/raw/master/DFU_mode/DfuSe_Demo_V3.0.6_Setup.exe")); + } catch (MalformedURLException e) { + throw new IllegalStateException(e); + } + } wnd.appendMsg("ERROR: does not look like DFU has worked!"); } wnd.appendMsg("Please power cycle device to exit DFU mode"); diff --git a/java_console/ui/src/com/rusefi/ui/util/URLLabel.java b/java_console/ui/src/com/rusefi/ui/util/URLLabel.java index 4cf3fe341b..432457cbc1 100644 --- a/java_console/ui/src/com/rusefi/ui/util/URLLabel.java +++ b/java_console/ui/src/com/rusefi/ui/util/URLLabel.java @@ -71,7 +71,7 @@ public class URLLabel extends JLabel { this.text = text; } - private static void open(URI uri) { + public static void open(URI uri) { if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); try { From a6383e40d74d8551c208a361ff349869ed58687f Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 11 Mar 2020 01:13:26 -0400 Subject: [PATCH 116/171] Different issue running DFU under Windows 10 - mfc120.dll is missing #1182 --- .../ui/src/com/rusefi/maintenance/DfuFlasher.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java index 5e0e986613..b018bf762f 100644 --- a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java @@ -18,8 +18,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; +import java.net.URI; +import java.net.URISyntaxException; /** * @see FirmwareFlasher @@ -88,8 +88,8 @@ public class DfuFlasher { // see https://github.com/rusefi/rusefi/issues/1170 // see https://github.com/rusefi/rusefi/issues/1182 try { - URLLabel.open(new URL("https://github.com/rusefi/rusefi_external_utils/raw/master/DFU_mode/DfuSe_Demo_V3.0.6_Setup.exe")); - } catch (MalformedURLException e) { + URLLabel.open(new URI("https://github.com/rusefi/rusefi_external_utils/raw/master/DFU_mode/DfuSe_Demo_V3.0.6_Setup.exe")); + } catch (URISyntaxException e) { throw new IllegalStateException(e); } } From ae8210aefe6418101fe5016d0bda652deab587f1 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 11 Mar 2020 01:39:09 -0400 Subject: [PATCH 117/171] Different issue running DFU under Windows 10 - mfc120.dll is missing fix #1182 --- java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java index b018bf762f..1ea816feca 100644 --- a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java @@ -29,6 +29,7 @@ public class DfuFlasher { // TODO: integration with DFU command line tool static final String DFU_COMMAND = DFU_BINARY + " -c -d --v --fn " + Launcher.INPUT_FILES_PATH + File.separator + "rusefi.dfu"; + private static final String DFU_SETUP_EXE = "https://github.com/rusefi/rusefi_external_utils/raw/master/DFU_mode/DfuSe_Demo_V3.0.6_Setup.exe"; private final JButton button = new JButton("Auto Program via DFU"); private final JButton manualButton = new JButton("Manual Program via DFU"); @@ -81,17 +82,19 @@ public class DfuFlasher { if (stdout.toString().contains("Verify successful")) { wnd.appendMsg("SUCCESS!"); } else { - wnd.appendMsg(stdout.length() + " / " + errorResponse.length()); if (stdout.length() == 0 && errorResponse.length() == 0) { // looks like DFU util is not installed properly? // ugly temporary solution // see https://github.com/rusefi/rusefi/issues/1170 // see https://github.com/rusefi/rusefi/issues/1182 try { - URLLabel.open(new URI("https://github.com/rusefi/rusefi_external_utils/raw/master/DFU_mode/DfuSe_Demo_V3.0.6_Setup.exe")); + URLLabel.open(new URI(DFU_SETUP_EXE)); + wnd.appendMsg("Please install DfuSe_Demo_V3.0.6_Setup.exe, power cycle your device and try again."); } catch (URISyntaxException e) { throw new IllegalStateException(e); } + } else { + wnd.appendMsg(stdout.length() + " / " + errorResponse.length()); } wnd.appendMsg("ERROR: does not look like DFU has worked!"); } From cbf45d1df5c4f38f67766e3c1a211ca1579d4d3f Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 11 Mar 2020 02:10:57 -0400 Subject: [PATCH 118/171] TPS#2 gauge --- firmware/tunerstudio/rusefi.ini | 5 ++++- firmware/tunerstudio/rusefi.input | 3 +++ firmware/tunerstudio/rusefi_frankenso.ini | 5 ++++- firmware/tunerstudio/rusefi_microrusefi.ini | 5 ++++- firmware/tunerstudio/rusefi_prometheus.ini | 5 ++++- firmware/tunerstudio/rusefi_proteus.ini | 5 ++++- 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index aba7902618..ff50c8faeb 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:05 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:07:01 EDT 2020 pageSize = 20000 page = 1 @@ -2052,6 +2052,7 @@ gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 @@ -2770,6 +2771,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Throttle1 2nd position sensor", tps1_2AdcChannel field = "Throttle2 position sensor", tps2_1AdcChannel field = "Throttle2 2nd position sensor", tps2_2AdcChannel + field = "Throttle2 min value", tps2Min + field = "Throttle2 max value", tps2Max field = "TPS low value detection threshold", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} field = "TPS high value detection threshold", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 804acda0c9..d815e0f6ec 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -928,6 +928,7 @@ gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, @@GAUGE_NAME_THROTTLE_PEDAL@@, "%", 0, 120, 0, 0, 100, 100, 1, 1 tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbTargetGauge = etbTarget, @@GAUGE_NAME_ETB_TARGET@@, "%", 0, 100, 0, 0, 100, 100, 1, 1 etbErrorGauge = etb1Error, @@GAUGE_NAME_ETB_ERROR@@, "%", -20, 20, -10, -5, 5, 10, 2, 0 @@ -1646,6 +1647,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Throttle1 2nd position sensor", tps1_2AdcChannel field = "Throttle2 position sensor", tps2_1AdcChannel field = "Throttle2 2nd position sensor", tps2_2AdcChannel + field = "Throttle2 min value", tps2Min + field = "Throttle2 max value", tps2Max field = "TPS low value detection threshold", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} field = "TPS high value detection threshold", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 749ee63261..aa15089ecb 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:13 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:07:35 EDT 2020 pageSize = 20000 page = 1 @@ -2052,6 +2052,7 @@ gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 @@ -2770,6 +2771,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Throttle1 2nd position sensor", tps1_2AdcChannel field = "Throttle2 position sensor", tps2_1AdcChannel field = "Throttle2 2nd position sensor", tps2_2AdcChannel + field = "Throttle2 min value", tps2Min + field = "Throttle2 max value", tps2Max field = "TPS low value detection threshold", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} field = "TPS high value detection threshold", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 41f0100dfc..3fc52d6834 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:10 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:07:18 EDT 2020 pageSize = 20000 page = 1 @@ -2052,6 +2052,7 @@ gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 @@ -2763,6 +2764,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Throttle1 2nd position sensor", tps1_2AdcChannel field = "Throttle2 position sensor", tps2_1AdcChannel field = "Throttle2 2nd position sensor", tps2_2AdcChannel + field = "Throttle2 min value", tps2Min + field = "Throttle2 max value", tps2Max field = "TPS low value detection threshold", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} field = "TPS high value detection threshold", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index ff8fcf4a6d..09381909ca 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:17 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:07:53 EDT 2020 pageSize = 20000 page = 1 @@ -2052,6 +2052,7 @@ gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 @@ -2766,6 +2767,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Throttle1 2nd position sensor", tps1_2AdcChannel field = "Throttle2 position sensor", tps2_1AdcChannel field = "Throttle2 2nd position sensor", tps2_2AdcChannel + field = "Throttle2 min value", tps2Min + field = "Throttle2 max value", tps2Max field = "TPS low value detection threshold", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} field = "TPS high value detection threshold", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 84b106c3ad..44f0b426fe 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:20 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:08:10 EDT 2020 pageSize = 20000 page = 1 @@ -2052,6 +2052,7 @@ gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 @@ -2763,6 +2764,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Throttle1 2nd position sensor", tps1_2AdcChannel field = "Throttle2 position sensor", tps2_1AdcChannel field = "Throttle2 2nd position sensor", tps2_2AdcChannel + field = "Throttle2 min value", tps2Min + field = "Throttle2 max value", tps2Max field = "TPS low value detection threshold", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} field = "TPS high value detection threshold", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} From e065da52df40d44cba2a7912c02d404ecaa5ce6d Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 11 Mar 2020 03:08:20 -0400 Subject: [PATCH 119/171] wall of text --- firmware/tunerstudio/rusefi.ini | 31 ++++++++++----------- firmware/tunerstudio/rusefi.input | 29 ++++++++++--------- firmware/tunerstudio/rusefi_frankenso.ini | 31 ++++++++++----------- firmware/tunerstudio/rusefi_microrusefi.ini | 31 ++++++++++----------- firmware/tunerstudio/rusefi_prometheus.ini | 31 ++++++++++----------- firmware/tunerstudio/rusefi_proteus.ini | 31 ++++++++++----------- 6 files changed, 89 insertions(+), 95 deletions(-) diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index ff50c8faeb..e1ef782b0d 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:07:01 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:19 EDT 2020 pageSize = 20000 page = 1 @@ -1483,22 +1483,21 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Previous Error", "", "", "df3", "df3", "22df3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df4", "", "", "df4", "df4", "22df4", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "df5", "df5", "df5", "", "", "", "", "", "", "", "", "", "", "ETB df5", "df5", "df5", "df5", "df5", "22df5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22", "", "", "", "", "", "", "", "", "Latest Transmit","", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22", "", "", "", "", "", "", "", "", "Latest Received","", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5" [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index d815e0f6ec..d5e8cf3924 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -359,22 +359,21 @@ fileVersion = { @@TS_FILE_VERSION@@ } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Previous Error", "", "", "df3", "df3", "22df3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df4", "", "", "df4", "df4", "22df4", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "df5", "df5", "df5", "", "", "", "", "", "", "", "", "", "", "ETB df5", "df5", "df5", "df5", "df5", "22df5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22", "", "", "", "", "", "", "", "", "Latest Transmit","", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22", "", "", "", "", "", "", "", "", "Latest Received","", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5" [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index aa15089ecb..aaf6cc5af3 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:07:35 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:47 EDT 2020 pageSize = 20000 page = 1 @@ -1483,22 +1483,21 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Previous Error", "", "", "df3", "df3", "22df3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df4", "", "", "df4", "df4", "22df4", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "df5", "df5", "df5", "", "", "", "", "", "", "", "", "", "", "ETB df5", "df5", "df5", "df5", "df5", "22df5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22", "", "", "", "", "", "", "", "", "Latest Transmit","", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22", "", "", "", "", "", "", "", "", "Latest Received","", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5" [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 3fc52d6834..9a849c5a9b 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:07:18 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:35 EDT 2020 pageSize = 20000 page = 1 @@ -1483,22 +1483,21 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Previous Error", "", "", "df3", "df3", "22df3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df4", "", "", "df4", "df4", "22df4", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "df5", "df5", "df5", "", "", "", "", "", "", "", "", "", "", "ETB df5", "df5", "df5", "df5", "df5", "22df5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22", "", "", "", "", "", "", "", "", "Latest Transmit","", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22", "", "", "", "", "", "", "", "", "Latest Received","", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5" [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 09381909ca..1b50d65aff 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:07:53 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:58 EDT 2020 pageSize = 20000 page = 1 @@ -1483,22 +1483,21 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Previous Error", "", "", "df3", "df3", "22df3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df4", "", "", "df4", "df4", "22df4", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "df5", "df5", "df5", "", "", "", "", "", "", "", "", "", "", "ETB df5", "df5", "df5", "df5", "df5", "22df5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22", "", "", "", "", "", "", "", "", "Latest Transmit","", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22", "", "", "", "", "", "", "", "", "Latest Received","", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5" [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 44f0b426fe..e2440e303e 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 02:08:10 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:59 EDT 2020 pageSize = 20000 page = 1 @@ -1483,22 +1483,21 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Previous Error", "", "", "df3", "df3", "22df3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df4", "", "", "df4", "df4", "22df4", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "df5", "df5", "df5", "", "", "", "", "", "", "", "", "", "", "ETB df5", "df5", "df5", "df5", "df5", "22df5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22", "", "", "", "", "", "", "", "", "Latest Transmit","", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22", "", "", "", "", "", "", "", "", "Latest Received","", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5" [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 From 7e7e6ed74001862ceb860137fedc10a3fb7f25da Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 11 Mar 2020 17:38:33 -0400 Subject: [PATCH 120/171] version to DFU header --- java_console/ui/src/com/rusefi/Launcher.java | 2 +- java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 4fc27551b7..5ac89a5255 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -49,7 +49,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20200310; + public static final int CONSOLE_VERSION = 20200311; public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); diff --git a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java index 1ea816feca..4e82ca204c 100644 --- a/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/com/rusefi/maintenance/DfuFlasher.java @@ -64,7 +64,7 @@ public class DfuFlasher { public static void runDfuProgramming() { StatusWindow wnd = new StatusWindow(); - wnd.showFrame("DFU status"); + wnd.showFrame("DFU status " + Launcher.CONSOLE_VERSION); ExecHelper.submitAction(() -> executeDFU(wnd), DfuFlasher.class + " thread"); } From 620088cdc13af013b63c68b7bfdea345649a4585 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 11 Mar 2020 20:48:09 -0400 Subject: [PATCH 121/171] v12 --- .../controllers/algo/auto_generated_enums.cpp | 2 ++ firmware/config/engines/bmw_m73.cpp | 15 +++++++++------ firmware/config/engines/bmw_m73.h | 6 +++++- firmware/config/engines/bmw_m73_mre.cpp | 14 ++++++++++++++ firmware/config/engines/engines.mk | 1 + .../controllers/algo/auto_generated_enums.cpp | 2 ++ .../controllers/algo/engine_configuration.cpp | 1 + firmware/controllers/algo/rusefi_enums.h | 2 ++ firmware/controllers/engine_controller.cpp | 2 +- 9 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 firmware/config/engines/bmw_m73_mre.cpp diff --git a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp index 15385a2f0d..c2e6f9e4b3 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp +++ b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp @@ -609,6 +609,8 @@ case BMW_M73_M: return "BMW_M73_M"; case BMW_M73_PROTEUS: return "BMW_M73_P"; +case BMW_M73_MRE: + return "BMW_M73_MRE"; case MIATA_1996: return "MIATA_1996"; case MIATA_NA6_MAP: diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index ab9a8a2ee3..cf9d50a627 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -65,12 +65,12 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#include "engine_template.h" +#include "bmw_m73.h" #include "custom_engine.h" EXTERN_CONFIG; -static void m73engine(DECLARE_CONFIG_PARAMETER_SIGNATURE) { +void m73engine(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // 13641435991 injector engineConfiguration->injector.flow = 180; // cc/min, who knows if this number is real - no good source of info @@ -186,15 +186,18 @@ GPIOA_6 // PWM pin engineConfiguration->etbIo[0].controlPin1 = GPIO_UNASSIGNED; // DIR pin - engineConfiguration->etbIo[0].directionPin1 = GPIOC_9; - engineConfiguration->etbIo[0].directionPin2 = GPIOC_8; + engineConfiguration->etbIo[0].directionPin1 = GPIOC_8; + engineConfiguration->etbIo[0].directionPin2 = GPIOC_9; CONFIG(etb_use_two_wires) = true; // PWM pin engineConfiguration->etbIo[1].controlPin1 = GPIO_UNASSIGNED; // DIR pin - engineConfiguration->etbIo[1].directionPin1 = GPIOB_8; - engineConfiguration->etbIo[1].directionPin2 = GPIOB_9; + engineConfiguration->etbIo[1].directionPin1 = GPIOB_9; + engineConfiguration->etbIo[1].directionPin2 = GPIOB_8; + + CONFIG(tps2Min) = CONFIG(tpsMin); + CONFIG(tps2Max) = CONFIG(tpsMax); engineConfiguration->injectionPins[0] = GPIO_UNASSIGNED; diff --git a/firmware/config/engines/bmw_m73.h b/firmware/config/engines/bmw_m73.h index 120ebbb34f..5d4c68f206 100644 --- a/firmware/config/engines/bmw_m73.h +++ b/firmware/config/engines/bmw_m73.h @@ -1,5 +1,5 @@ /* - * @file engine_template.h + * @file bmw_m73.h * * @date Nov 1, 2019 * @author Andrey Belomutskiy, (c) 2012-2020 @@ -9,6 +9,10 @@ #include "engine_configuration.h" +void m73engine(DECLARE_CONFIG_PARAMETER_SIGNATURE); + void setEngineBMW_M73_Frankenso(DECLARE_CONFIG_PARAMETER_SIGNATURE); void setEngineBMW_M73_Manhattan(DECLARE_CONFIG_PARAMETER_SIGNATURE); void setEngineBMW_M73_Proteus(DECLARE_CONFIG_PARAMETER_SIGNATURE); + +void setEngineBMW_M73_microRusEfi(DECLARE_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/config/engines/bmw_m73_mre.cpp b/firmware/config/engines/bmw_m73_mre.cpp new file mode 100644 index 0000000000..fbc2c492a2 --- /dev/null +++ b/firmware/config/engines/bmw_m73_mre.cpp @@ -0,0 +1,14 @@ +/* + * @file bmw_m73_mre.cpp + * + * + * BMW_M73_MRE + * set engine_type 104 + * + */ + +#include "bmw_m73.h" + +void setEngineBMW_M73_microRusEfi(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + +} diff --git a/firmware/config/engines/engines.mk b/firmware/config/engines/engines.mk index 6352602767..2b857e14e0 100644 --- a/firmware/config/engines/engines.mk +++ b/firmware/config/engines/engines.mk @@ -5,6 +5,7 @@ ENGINES_SRC_CPP = $(PROJECT_DIR)/config/engines/ford_aspire.cpp \ $(PROJECT_DIR)/config/engines/custom_engine.cpp \ $(PROJECT_DIR)/config/engines/bmw_e34.cpp \ $(PROJECT_DIR)/config/engines/bmw_m73.cpp \ + $(PROJECT_DIR)/config/engines/bmw_m73_mre.cpp \ $(PROJECT_DIR)/config/engines/mazda_miata.cpp \ $(PROJECT_DIR)/config/engines/mazda_miata_base_maps.cpp \ $(PROJECT_DIR)/config/engines/mazda_miata_1_6.cpp \ diff --git a/firmware/controllers/algo/auto_generated_enums.cpp b/firmware/controllers/algo/auto_generated_enums.cpp index 666efbd60d..588b59576f 100644 --- a/firmware/controllers/algo/auto_generated_enums.cpp +++ b/firmware/controllers/algo/auto_generated_enums.cpp @@ -717,6 +717,8 @@ case BMW_M73_F: return "BMW_M73_F"; case BMW_M73_M: return "BMW_M73_M"; +case BMW_M73_MRE: + return "BMW_M73_MRE"; case BMW_M73_PROTEUS: return "BMW_M73_P"; case MRE_BOARD_TEST: diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 9e62b96499..367d32bd59 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -1145,6 +1145,7 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb case BMW_M73_M: setEngineBMW_M73_Manhattan(PASS_CONFIG_PARAMETER_SIGNATURE); break; + case BMW_M73_MRE: case BMW_M73_PROTEUS: setEngineBMW_M73_Proteus(PASS_CONFIG_PARAMETER_SIGNATURE); break; diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index 493d5d67c4..3c313448ce 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -195,6 +195,8 @@ typedef enum { TEST_33816 = 103, + BMW_M73_MRE = 104, + Force_4_bytes_size_engine_type = ENUM_32_BITS, } engine_type_e; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 768af7b50f..ff12cb10eb 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200310; + return 201200311; } #endif /* EFI_UNIT_TEST */ From d0473407254ee395b2f3c924219717033336f9af Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 12 Mar 2020 00:16:32 -0400 Subject: [PATCH 122/171] v12 --- firmware/config/engines/bmw_m73.cpp | 1 - firmware/config/engines/bmw_m73_mre.cpp | 43 +++++++++++++++++++ .../controllers/algo/engine_configuration.cpp | 2 + 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index cf9d50a627..d438791d2e 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -1,7 +1,6 @@ /* * @file bmw_m73.cpp * - * * https://github.com/rusefi/rusefi_documentation/wiki/BMW_e38_750 * * https://rusefi.com/wiki/index.php?title=Hardware:OEM_connectors#134_pin diff --git a/firmware/config/engines/bmw_m73_mre.cpp b/firmware/config/engines/bmw_m73_mre.cpp index fbc2c492a2..acdd55b9ac 100644 --- a/firmware/config/engines/bmw_m73_mre.cpp +++ b/firmware/config/engines/bmw_m73_mre.cpp @@ -1,6 +1,37 @@ /* * @file bmw_m73_mre.cpp * + * https://github.com/rusefi/rusefi_documentation/wiki/BMW_e38_750 + * + * https://rusefi.com/wiki/index.php?title=Hardware:OEM_connectors#134_pin + * + * 1/2 plugs black + * 2/2 plugs grey + * + * + * ********* | | OEM | rusEfi | function + * + * Plug #1 9 pin + * ECU pin 4: GND BRN/ORG BLK + * ECU pin 6: GND BRN BLK + * ECU pin 7: IN RED RED +12v hot at all times + * ECU pin 8: IN RED/BLU RED +12v from ECU relay + * + * Plug #2 24 pin + * + * + * + * + * Plug #3 52 pin + * ECU pin 32: IN WHT VR positive crankshaft sensor + * ECU pin 40: OUT BRN/BLK GRN injector #3 + * ECU pin 41: OUT BRN/WHT BLU injector #1 + * ECU pin 46: IN BLK BLU VR negative crankshaft sensor + * + * + * + * Plug #5 9 pin + * ECU pic 3: OUT BLK ORG coil signal * * BMW_M73_MRE * set engine_type 104 @@ -10,5 +41,17 @@ #include "bmw_m73.h" void setEngineBMW_M73_microRusEfi(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + // 13641435991 injector + engineConfiguration->injector.flow = 180; // cc/min, who knows if this number is real - no good source of info + + + engineConfiguration->specs.cylindersCount = 6; + engineConfiguration->specs.displacement = 5.4 / 2; + engineConfiguration->specs.firingOrder = FO_1_5_3_6_2_4; + + engineConfiguration->ignitionMode = IM_ONE_COIL; + + engineConfiguration->injectionMode = IM_BATCH; + } diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 367d32bd59..5e05565f73 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -1146,6 +1146,8 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb setEngineBMW_M73_Manhattan(PASS_CONFIG_PARAMETER_SIGNATURE); break; case BMW_M73_MRE: + setEngineBMW_M73_microRusEfi(PASS_CONFIG_PARAMETER_SIGNATURE); + break; case BMW_M73_PROTEUS: setEngineBMW_M73_Proteus(PASS_CONFIG_PARAMETER_SIGNATURE); break; From ecf1e602b00212f633cc2702795c74f5dba22edd Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 12 Mar 2020 00:20:05 -0400 Subject: [PATCH 123/171] docs --- firmware/controllers/algo/rusefi_enums.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index 3c313448ce..8e6b09e36c 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -526,6 +526,9 @@ typedef enum { IM_SEQUENTIAL = 1, /** * each cylinder has it's own injector but these injectors work in pairs. Injectors could be wired in pairs or separately. + * Each pair is fired once per engine cycle + * todo: we might want to implement one additional mode where each pair of injectors is floating twice per engine cycle. + * todo: this could reduce phase offset from injection to stroke but would not work great for large injectors */ IM_BATCH = 2, /** From 84807e843931dd624d85640d42c3a15c2d4fa422 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 13 Mar 2020 02:27:44 -0400 Subject: [PATCH 124/171] docs & wall --- firmware/config/boards/prometheus/mapping.yaml | 1 + firmware/config/boards/prometheus/prepend.txt | 2 ++ firmware/tunerstudio/rusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_frankenso.ini | 4 ++-- firmware/tunerstudio/rusefi_microrusefi.ini | 4 ++-- firmware/tunerstudio/rusefi_prometheus.ini | 4 ++-- firmware/tunerstudio/rusefi_proteus.ini | 4 ++-- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/firmware/config/boards/prometheus/mapping.yaml b/firmware/config/boards/prometheus/mapping.yaml index f955bda7e7..5f9fcc201a 100644 --- a/firmware/config/boards/prometheus/mapping.yaml +++ b/firmware/config/boards/prometheus/mapping.yaml @@ -1,4 +1,5 @@ # TODO if anyone would be interested +# https://github.com/andreika-git/prometheus/raw/master/hardware/prometheus-wiring-diagram.pdf outputs: GPIOB_7: "Injector 3Z" diff --git a/firmware/config/boards/prometheus/prepend.txt b/firmware/config/boards/prometheus/prepend.txt index 38eb5328e4..ddf85e190e 100644 --- a/firmware/config/boards/prometheus/prepend.txt +++ b/firmware/config/boards/prometheus/prepend.txt @@ -1,2 +1,4 @@ +! https://github.com/andreika-git/prometheus/raw/master/hardware/prometheus-wiring-diagram.pdf + #define ts_show_hip9011 false #define ts_show_etb false \ No newline at end of file diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index e1ef782b0d..d6c2deff39 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:19 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:28 EDT 2020 pageSize = 20000 page = 1 @@ -1483,7 +1483,7 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index aaf6cc5af3..2af3652c55 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:47 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:35 EDT 2020 pageSize = 20000 page = 1 @@ -1483,7 +1483,7 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 9a849c5a9b..34e7be467c 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:35 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:31 EDT 2020 pageSize = 20000 page = 1 @@ -1483,7 +1483,7 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 1b50d65aff..4b4ae95ebf 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:58 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:38 EDT 2020 pageSize = 20000 page = 1 @@ -1483,7 +1483,7 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index e2440e303e..61c24bca5a 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 11 03:03:59 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:42 EDT 2020 pageSize = 20000 page = 1 @@ -1483,7 +1483,7 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" From 5fc82e21f89e1d9a9f2fd577a939db0cce9c8a15 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 13 Mar 2020 06:50:43 -0700 Subject: [PATCH 125/171] Move can_hw.cpp in to drivers folder (#1184) * relocate * include path * simulator makefile * fix mre while we're at it * it would help if I fixed it right --- firmware/config/engines/bmw_m73_mre.cpp | 2 ++ firmware/hw_layer/{ => drivers/can}/can_hw.cpp | 0 firmware/hw_layer/{ => drivers/can}/can_hw.h | 0 firmware/hw_layer/drivers/drivers.mk | 4 +++- firmware/hw_layer/hw_layer.mk | 2 +- simulator/Makefile | 1 + 6 files changed, 7 insertions(+), 2 deletions(-) rename firmware/hw_layer/{ => drivers/can}/can_hw.cpp (100%) rename firmware/hw_layer/{ => drivers/can}/can_hw.h (100%) diff --git a/firmware/config/engines/bmw_m73_mre.cpp b/firmware/config/engines/bmw_m73_mre.cpp index acdd55b9ac..4b0aa4e6db 100644 --- a/firmware/config/engines/bmw_m73_mre.cpp +++ b/firmware/config/engines/bmw_m73_mre.cpp @@ -40,6 +40,8 @@ #include "bmw_m73.h" +EXTERN_CONFIG; + void setEngineBMW_M73_microRusEfi(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // 13641435991 injector engineConfiguration->injector.flow = 180; // cc/min, who knows if this number is real - no good source of info diff --git a/firmware/hw_layer/can_hw.cpp b/firmware/hw_layer/drivers/can/can_hw.cpp similarity index 100% rename from firmware/hw_layer/can_hw.cpp rename to firmware/hw_layer/drivers/can/can_hw.cpp diff --git a/firmware/hw_layer/can_hw.h b/firmware/hw_layer/drivers/can/can_hw.h similarity index 100% rename from firmware/hw_layer/can_hw.h rename to firmware/hw_layer/drivers/can/can_hw.h diff --git a/firmware/hw_layer/drivers/drivers.mk b/firmware/hw_layer/drivers/drivers.mk index 03cbb36909..adbae36569 100644 --- a/firmware/hw_layer/drivers/drivers.mk +++ b/firmware/hw_layer/drivers/drivers.mk @@ -3,6 +3,7 @@ DRIVERS_DIR=$(PROJECT_DIR)/hw_layer/drivers HW_LAYER_DRIVERS_INC = \ $(DRIVERS_DIR) \ $(DRIVERS_DIR)/gpio \ + $(DRIVERS_DIR)/can \ HW_LAYER_DRIVERS_CORE = \ $(DRIVERS_DIR)/gpio/core.c \ @@ -13,5 +14,6 @@ HW_LAYER_DRIVERS = \ $(DRIVERS_DIR)/gpio/mc33972.c \ $(DRIVERS_DIR)/gpio/mc33810.c -HW_LAYER_DRIVERS_CPP = +HW_LAYER_DRIVERS_CPP = \ + $(DRIVERS_DIR)/can/can_hw.cpp \ diff --git a/firmware/hw_layer/hw_layer.mk b/firmware/hw_layer/hw_layer.mk index bb60bc0901..17d988d10c 100644 --- a/firmware/hw_layer/hw_layer.mk +++ b/firmware/hw_layer/hw_layer.mk @@ -3,7 +3,7 @@ HW_LAYER_EGT = $(PROJECT_DIR)/hw_layer/serial_over_usb/usbcfg.c \ HW_INC = hw_layer/$(CPU_HWLAYER) -HW_LAYER_EGT_CPP = $(PROJECT_DIR)/hw_layer/can_hw.cpp \ +HW_LAYER_EGT_CPP = \ $(PROJECT_DIR)/hw_layer/max31855.cpp HW_LAYER_EMS = $(HW_LAYER_EGT) \ diff --git a/simulator/Makefile b/simulator/Makefile index 50a11c8764..4073f86510 100644 --- a/simulator/Makefile +++ b/simulator/Makefile @@ -197,6 +197,7 @@ INCDIR = . \ $(HW_LAYER_DRIVERS_INC) \ $(PROJECT_DIR)/hw_layer \ $(PROJECT_DIR)/hw_layer/algo \ + $(PROJECT_DIR)/hw_layer/drivers/can \ $(HW_SENSORS_INC) \ $(DEVELOPMENT_DIR) \ $(CONTROLLERS_INC) \ From fc051fd2ca2e04a0f168ff15ed7ca9ee728b8756 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 13 Mar 2020 14:19:29 -0700 Subject: [PATCH 126/171] remove (#1188) Co-authored-by: Matthew Kennedy --- firmware/config/stm32f0egt/STM32F051x8.ld | 149 ----- firmware/config/stm32f0egt/chconf.h | 534 ------------------ firmware/config/stm32f0egt/efifeatures.h | 65 --- firmware/config/stm32f0egt/global.h | 9 - firmware/config/stm32f0egt/halconf.h | 312 ---------- firmware/config/stm32f0egt/mcuconf.h | 149 ----- firmware/config/stm32f0egt/mpu_util.h | 3 - firmware/config/stm32f1egt/!compile-f1egt.bat | 11 - firmware/config/stm32f1egt/STM32F103xB.ld | 149 ----- firmware/config/stm32f1egt/chconf.h | 534 ------------------ firmware/config/stm32f1egt/efifeatures.h | 61 -- firmware/config/stm32f1egt/halconf.h | 312 ---------- firmware/config/stm32f1egt/mcuconf.h | 199 ------- .../hw_layer/ports/stm32/stm32f0/hw_ports.mk | 4 - .../hw_layer/ports/stm32/stm32f0/mpu_util.cpp | 14 - .../hw_layer/ports/stm32/stm32f0/mpu_util.h | 16 - .../hw_layer/ports/stm32/stm32f1/hw_ports.mk | 5 - .../hw_layer/ports/stm32/stm32f1/mpu_util.cpp | 13 - .../hw_layer/ports/stm32/stm32f1/mpu_util.h | 17 - firmware/rusefi.mk | 6 - 20 files changed, 2562 deletions(-) delete mode 100644 firmware/config/stm32f0egt/STM32F051x8.ld delete mode 100644 firmware/config/stm32f0egt/chconf.h delete mode 100644 firmware/config/stm32f0egt/efifeatures.h delete mode 100644 firmware/config/stm32f0egt/global.h delete mode 100644 firmware/config/stm32f0egt/halconf.h delete mode 100644 firmware/config/stm32f0egt/mcuconf.h delete mode 100644 firmware/config/stm32f0egt/mpu_util.h delete mode 100644 firmware/config/stm32f1egt/!compile-f1egt.bat delete mode 100644 firmware/config/stm32f1egt/STM32F103xB.ld delete mode 100644 firmware/config/stm32f1egt/chconf.h delete mode 100644 firmware/config/stm32f1egt/efifeatures.h delete mode 100644 firmware/config/stm32f1egt/halconf.h delete mode 100644 firmware/config/stm32f1egt/mcuconf.h delete mode 100644 firmware/hw_layer/ports/stm32/stm32f0/hw_ports.mk delete mode 100644 firmware/hw_layer/ports/stm32/stm32f0/mpu_util.cpp delete mode 100644 firmware/hw_layer/ports/stm32/stm32f0/mpu_util.h delete mode 100644 firmware/hw_layer/ports/stm32/stm32f1/hw_ports.mk delete mode 100644 firmware/hw_layer/ports/stm32/stm32f1/mpu_util.cpp delete mode 100644 firmware/hw_layer/ports/stm32/stm32f1/mpu_util.h diff --git a/firmware/config/stm32f0egt/STM32F051x8.ld b/firmware/config/stm32f0egt/STM32F051x8.ld deleted file mode 100644 index 6435fe021c..0000000000 --- a/firmware/config/stm32f0egt/STM32F051x8.ld +++ /dev/null @@ -1,149 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/* - * ST32F051x8 memory setup. - */ -__main_stack_size__ = 0x0400; -__process_stack_size__ = 0x0400; - -MEMORY -{ - flash : org = 0x08000000, len = 64k - ram : org = 0x20000000, len = 8k -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -ENTRY(ResetHandler) - -SECTIONS -{ - . = 0; - _text = .; - - startup : ALIGN(16) SUBALIGN(16) - { - KEEP(*(vectors)) - } > flash - - constructors : ALIGN(4) SUBALIGN(4) - { - PROVIDE(__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE(__init_array_end = .); - } > flash - - destructors : ALIGN(4) SUBALIGN(4) - { - PROVIDE(__fini_array_start = .); - KEEP(*(.fini_array)) - KEEP(*(SORT(.fini_array.*))) - PROVIDE(__fini_array_end = .); - } > flash - - .text : ALIGN(16) SUBALIGN(16) - { - *(.text.startup.*) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - } > flash - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > flash - - .ARM.exidx : { - PROVIDE(__exidx_start = .); - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - PROVIDE(__exidx_end = .); - } > flash - - .eh_frame_hdr : - { - *(.eh_frame_hdr) - } > flash - - .eh_frame : ONLY_IF_RO - { - *(.eh_frame) - } > flash - - .textalign : ONLY_IF_RO - { - . = ALIGN(8); - } > flash - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .stacks : - { - . = ALIGN(8); - __main_stack_base__ = .; - . += __main_stack_size__; - . = ALIGN(8); - __main_stack_end__ = .; - __process_stack_base__ = .; - __main_thread_stack_base__ = .; - . += __process_stack_size__; - . = ALIGN(8); - __process_stack_end__ = .; - __main_thread_stack_end__ = .; - } > ram - - .data : - { - . = ALIGN(4); - PROVIDE(_data = .); - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - PROVIDE(_edata = .); - } > ram AT > flash - - .bss : - { - . = ALIGN(4); - PROVIDE(_bss_start = .); - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - PROVIDE(_bss_end = .); - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__; diff --git a/firmware/config/stm32f0egt/chconf.h b/firmware/config/stm32f0egt/chconf.h deleted file mode 100644 index f444ea9023..0000000000 --- a/firmware/config/stm32f0egt/chconf.h +++ /dev/null @@ -1,534 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - - #define ON_LOCK_HOOK - #define ON_UNLOCK_HOOK - -/*===========================================================================*/ -/** - * @name Kernel parameters and options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_MEMCORE. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/** - * @brief Idle thread automatic spawn suppression. - * @details When this option is activated the function @p chSysInit() - * does not spawn the idle thread automatically. The application has - * then the responsibility to do one of the following: - * - Spawn a custom idle thread at priority @p IDLEPRIO. - * - Change the main() thread priority to @p IDLEPRIO then enter - * an endless loop. In this scenario the @p main() thread acts as - * the idle thread. - * . - * @note Unless an idle thread is spawned the @p main() thread must not - * enter a sleep state. - */ -#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__) -#define CH_NO_IDLE_THREAD FALSE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Performance options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Subsystem options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP FALSE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_MEMCORE, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Debug options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Debug option, system state check. - * @details If enabled the correct call protocol for system APIs is checked - * at runtime. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_SYSTEM_STATE_CHECK TRUE -#endif - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel hooks - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure extension. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ - /* Add threads custom fields here.*/ -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitly from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT_HOOK(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT_HOOK(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Context switch hook. - * @details This hook is invoked just before switching between threads. - */ -#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__) -#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \ - /* System halt code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/** - * @brief System tick event hook. - * @details This hook is invoked in the system tick handler immediately - * after processing the virtual timers queue. - */ -#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__) -#define SYSTEM_TICK_EVENT_HOOK() { \ - /* System tick event code here.*/ \ -} -#endif - -/** - * @brief System halt hook. - * @details This hook is invoked in case to a system halting error before - * the system is halted. - */ -#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__) -#define SYSTEM_HALT_HOOK() { \ - /* System halt code here.*/ \ -} -#endif - -/** @} */ - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/firmware/config/stm32f0egt/efifeatures.h b/firmware/config/stm32f0egt/efifeatures.h deleted file mode 100644 index bac6a32f93..0000000000 --- a/firmware/config/stm32f0egt/efifeatures.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @file efifeatures.h - * - * @brief In this header we can configure which modules are used for EGT2CAN firmware. - * - * @date Dec 23, 2014 - * @author Andrey Belomutskiy, (c) 2012-2017 - */ - -#ifndef EFIFEATURES_H_ -#define EFIFEATURES_H_ - -#define DL_OUTPUT_BUFFER 128 - -#define hal_lld_get_counter_value() DWT_CYCCNT - -#define EFI_USE_UART_FOR_CONSOLE TRUE - -#define EFI_CONSOLE_SERIAL_DEVICE (&SD1) - -#define TS_SERIAL_DEVICE (&SD3) - -#define EFI_CONSOLE_TX_PORT GPIOC -#define EFI_CONSOLE_TX_PIN 10 -#define EFI_CONSOLE_RX_PORT GPIOC -#define EFI_CONSOLE_RX_PIN 11 -#define EFI_CONSOLE_AF 7 - - -#define LED_ERROR_PORT GPIOD -#define LED_ERROR_PIN 3 - -#define LED_COMMUNICATION_PORT GPIOD -#define LED_COMMUNICATION_PIN 4 - -#define SERIAL_SPEED 115200 -/** - * This macros is used to hide pieces of the code from unit tests, so it only makes sense in folders exposed to the tests project. - * This macros is NOT about taking out logging in general. - */ -#define EFI_PROD_CODE FALSE - -#define CCM_OPTIONAL - -#define EFI_EGT TRUE - -#define EFI_UNIT_TEST FALSE - -#define CONSOLE_MODE_SWITCH_PORT GPIOB -#define CONSOLE_MODE_SWITCH_PIN 1 - -#define EFI_MAX_31855 TRUE - -#define CONSOLE_MAX_ACTIONS 32 - -#define CONFIG_RESET_SWITCH_PORT GPIOD -#define CONFIG_RESET_SWITCH_PIN 6 - -/** - * This is the size of the MemoryStream used by chvprintf - */ -#define INTERMEDIATE_LOGGING_BUFFER_SIZE 256 - - -#endif /* EFIFEATURES_H_ */ diff --git a/firmware/config/stm32f0egt/global.h b/firmware/config/stm32f0egt/global.h deleted file mode 100644 index ed5ab093ba..0000000000 --- a/firmware/config/stm32f0egt/global.h +++ /dev/null @@ -1,9 +0,0 @@ - -#define EXTERN_ENGINE - -// this stuff is about ChibiOS 2.6 > Migration -typedef VirtualTimer virtual_timer_t; -typedef EventListener event_listener_t; -typedef Thread thread_t; - -#define THD_WORKING_AREA WORKING_AREA diff --git a/firmware/config/stm32f0egt/halconf.h b/firmware/config/stm32f0egt/halconf.h deleted file mode 100644 index aa407e3b46..0000000000 --- a/firmware/config/stm32f0egt/halconf.h +++ /dev/null @@ -1,312 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @details HAL configuration file, this file allows to enable or disable the - * various device drivers from your application. You may also use - * this file in order to override the device drivers default settings. - * - * @addtogroup HAL_CONF - * @{ - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -#include "mcuconf.h" - -/** - * @brief Enables the TM subsystem. - */ -#if !defined(HAL_USE_TM) || defined(__DOXYGEN__) -#define HAL_USE_TM FALSE -#endif - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) -#define HAL_USE_PAL TRUE -#endif - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) -#define HAL_USE_ADC FALSE -#endif - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) -#define HAL_USE_CAN FALSE -#endif - -/** - * @brief Enables the EXT subsystem. - */ -#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) -#define HAL_USE_EXT FALSE -#endif - -/** - * @brief Enables the GPT subsystem. - */ -#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) -#define HAL_USE_GPT FALSE -#endif - -/** - * @brief Enables the I2C subsystem. - */ -#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) -#define HAL_USE_I2C FALSE -#endif - -/** - * @brief Enables the ICU subsystem. - */ -#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) -#define HAL_USE_ICU FALSE -#endif - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) -#define HAL_USE_MAC FALSE -#endif - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define HAL_USE_MMC_SPI FALSE -#endif - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) -#define HAL_USE_PWM FALSE -#endif - -/** - * @brief Enables the RTC subsystem. - */ -#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) -#define HAL_USE_RTC FALSE -#endif - -/** - * @brief Enables the SDC subsystem. - */ -#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) -#define HAL_USE_SDC FALSE -#endif - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL TRUE -#endif - -/** - * @brief Enables the SERIAL over USB subsystem. - */ -#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL_USB FALSE -#endif - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) -#define HAL_USE_SPI TRUE -#endif - -/** - * @brief Enables the UART subsystem. - */ -#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) -#define HAL_USE_UART FALSE -#endif - -/** - * @brief Enables the USB subsystem. - */ -#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) -#define HAL_USE_USB FALSE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) -#define ADC_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define ADC_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Sleep mode related APIs inclusion switch. - */ -#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) -#define CAN_USE_SLEEP_MODE TRUE -#endif - -/*===========================================================================*/ -/* I2C driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the mutual exclusion APIs on the I2C bus. - */ -#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define I2C_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) -#define MAC_USE_ZERO_COPY FALSE -#endif - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) -#define MAC_USE_EVENTS TRUE -#endif - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - * This option is recommended also if the SPI driver does not - * use a DMA channel and heavily loads the CPU. - */ -#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) -#define MMC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SDC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Number of initialization attempts before rejecting the card. - * @note Attempts are performed at 10mS intervals. - */ -#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) -#define SDC_INIT_RETRY 100 -#endif - -/** - * @brief Include support for MMC cards. - * @note MMC support is not yet implemented so this option must be kept - * at @p FALSE. - */ -#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) -#define SDC_MMC_SUPPORT FALSE -#endif - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - */ -#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) -#define SDC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Default bit rate. - * @details Configuration parameter, this is the baud rate selected for the - * default configuration. - */ -#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) -#define SERIAL_DEFAULT_BITRATE 38400 -#endif - -/** - * @brief Serial buffers size. - * @details Configuration parameter, you can change the depth of the queue - * buffers depending on the requirements of your application. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 16 -#endif - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) -#define SPI_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define SPI_USE_MUTUAL_EXCLUSION TRUE -#endif - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/firmware/config/stm32f0egt/mcuconf.h b/firmware/config/stm32f0egt/mcuconf.h deleted file mode 100644 index 9064f94e23..0000000000 --- a/firmware/config/stm32f0egt/mcuconf.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/* - * STM32F0xx drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the whole - * driver is enabled in halconf.h. - * - * IRQ priorities: - * 3...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -#define STM32F0xx_MCUCONF - -/* - * HAL driver system settings. - */ -#define STM32_NO_INIT FALSE -#define STM32_PVD_ENABLE FALSE -#define STM32_PLS STM32_PLS_LEV0 -#define STM32_HSI_ENABLED TRUE -#define STM32_HSI14_ENABLED TRUE -#define STM32_LSI_ENABLED TRUE -#define STM32_HSE_ENABLED FALSE -#define STM32_LSE_ENABLED FALSE -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_HSI -#define STM32_PREDIV_VALUE 1 -#define STM32_PLLMUL_VALUE 12 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE STM32_PPRE_DIV1 -#define STM32_ADCSW STM32_ADCSW_HSI14 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_ADCSW STM32_ADCSW_HSI14 -#define STM32_CECSW STM32_CECSW_HSI -#define STM32_I2C1SW STM32_I2C1SW_HSI -#define STM32_USART1SW STM32_USART1SW_PCLK -#define STM32_RTCSEL STM32_RTCSEL_LSI - -/* - * ADC driver system settings. - */ -#define STM32_ADC_USE_ADC1 FALSE -#define STM32_ADC_ADC1_DMA_PRIORITY 2 -#define STM32_ADC_IRQ_PRIORITY 2 -#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2 - -/* - * EXT driver system settings. - */ -#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3 -#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3 -#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3 -#define STM32_EXT_EXTI16_IRQ_PRIORITY 3 -#define STM32_EXT_EXTI17_IRQ_PRIORITY 3 - -/* - * GPT driver system settings. - */ -#define STM32_GPT_USE_TIM1 FALSE -#define STM32_GPT_USE_TIM2 FALSE -#define STM32_GPT_USE_TIM3 FALSE -#define STM32_GPT_USE_TIM14 FALSE -#define STM32_GPT_TIM1_IRQ_PRIORITY 2 -#define STM32_GPT_TIM2_IRQ_PRIORITY 2 -#define STM32_GPT_TIM3_IRQ_PRIORITY 2 -#define STM32_GPT_TIM14_IRQ_PRIORITY 2 - -/* - * I2C driver system settings. - */ -#define STM32_I2C_USE_I2C1 FALSE -#define STM32_I2C_USE_I2C2 FALSE -#define STM32_I2C_I2C1_IRQ_PRIORITY 3 -#define STM32_I2C_I2C2_IRQ_PRIORITY 3 -#define STM32_I2C_I2C1_DMA_PRIORITY 1 -#define STM32_I2C_I2C2_DMA_PRIORITY 1 -#define STM32_I2C_DMA_ERROR_HOOK(i2cp) chSysHalt() - -/* - * ICU driver system settings. - */ -#define STM32_ICU_USE_TIM1 FALSE -#define STM32_ICU_USE_TIM2 FALSE -#define STM32_ICU_USE_TIM3 FALSE -#define STM32_ICU_TIM1_IRQ_PRIORITY 3 -#define STM32_ICU_TIM2_IRQ_PRIORITY 3 -#define STM32_ICU_TIM3_IRQ_PRIORITY 3 - -/* - * PWM driver system settings. - */ -#define STM32_PWM_USE_ADVANCED FALSE -#define STM32_PWM_USE_TIM1 FALSE -#define STM32_PWM_USE_TIM2 FALSE -#define STM32_PWM_USE_TIM3 FALSE -#define STM32_PWM_TIM1_IRQ_PRIORITY 3 -#define STM32_PWM_TIM2_IRQ_PRIORITY 3 -#define STM32_PWM_TIM3_IRQ_PRIORITY 3 - -/* - * SERIAL driver system settings. - */ -#define STM32_SERIAL_USE_USART1 TRUE -#define STM32_SERIAL_USE_USART2 FALSE -#define STM32_SERIAL_USART1_PRIORITY 3 -#define STM32_SERIAL_USART2_PRIORITY 3 - -/* - * SPI driver system settings. - */ -#define STM32_SPI_USE_SPI1 TRUE -#define STM32_SPI_USE_SPI2 FALSE -#define STM32_SPI_SPI1_DMA_PRIORITY 1 -#define STM32_SPI_SPI2_DMA_PRIORITY 1 -#define STM32_SPI_SPI1_IRQ_PRIORITY 2 -#define STM32_SPI_SPI2_IRQ_PRIORITY 2 -#define STM32_SPI_DMA_ERROR_HOOK(spip) chSysHalt() - -/* - * UART driver system settings. - */ -#define STM32_UART_USE_USART1 FALSE -#define STM32_UART_USE_USART2 FALSE -#define STM32_UART_USART1_IRQ_PRIORITY 3 -#define STM32_UART_USART2_IRQ_PRIORITY 3 -#define STM32_UART_USART1_DMA_PRIORITY 0 -#define STM32_UART_USART2_DMA_PRIORITY 0 -#define STM32_UART_DMA_ERROR_HOOK(uartp) chSysHalt() diff --git a/firmware/config/stm32f0egt/mpu_util.h b/firmware/config/stm32f0egt/mpu_util.h deleted file mode 100644 index 878eb44b0e..0000000000 --- a/firmware/config/stm32f0egt/mpu_util.h +++ /dev/null @@ -1,3 +0,0 @@ - - -#define baseHardwareInit() {} \ No newline at end of file diff --git a/firmware/config/stm32f1egt/!compile-f1egt.bat b/firmware/config/stm32f1egt/!compile-f1egt.bat deleted file mode 100644 index a3987e55a3..0000000000 --- a/firmware/config/stm32f1egt/!compile-f1egt.bat +++ /dev/null @@ -1,11 +0,0 @@ -rem -rem STM32F103 version of the firmware -rem - -cd ../.. -set EXTRA_PARAMS="-DSTM32F1XX" -set PROJECT_CPU=ST_STM32F1 -set LDSCRIPT=config/stm32f1egt/STM32F103xB.ld -set USE_FPU=no -make -rem call compile_and_program.bat -r diff --git a/firmware/config/stm32f1egt/STM32F103xB.ld b/firmware/config/stm32f1egt/STM32F103xB.ld deleted file mode 100644 index 0babc301bf..0000000000 --- a/firmware/config/stm32f1egt/STM32F103xB.ld +++ /dev/null @@ -1,149 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/* - * ST32F103xB memory setup. - */ -__main_stack_size__ = 0x0400; -__process_stack_size__ = 0x0400; - -MEMORY -{ - flash : org = 0x08000000, len = 128k - ram : org = 0x20000000, len = 20k -} - -__ram_start__ = ORIGIN(ram); -__ram_size__ = LENGTH(ram); -__ram_end__ = __ram_start__ + __ram_size__; - -ENTRY(ResetHandler) - -SECTIONS -{ - . = 0; - _text = .; - - startup : ALIGN(16) SUBALIGN(16) - { - KEEP(*(vectors)) - } > flash - - constructors : ALIGN(4) SUBALIGN(4) - { - PROVIDE(__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE(__init_array_end = .); - } > flash - - destructors : ALIGN(4) SUBALIGN(4) - { - PROVIDE(__fini_array_start = .); - KEEP(*(.fini_array)) - KEEP(*(SORT(.fini_array.*))) - PROVIDE(__fini_array_end = .); - } > flash - - .text : ALIGN(16) SUBALIGN(16) - { - *(.text.startup.*) - *(.text) - *(.text.*) - *(.rodata) - *(.rodata.*) - *(.glue_7t) - *(.glue_7) - *(.gcc*) - } > flash - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > flash - - .ARM.exidx : { - PROVIDE(__exidx_start = .); - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - PROVIDE(__exidx_end = .); - } > flash - - .eh_frame_hdr : - { - *(.eh_frame_hdr) - } > flash - - .eh_frame : ONLY_IF_RO - { - *(.eh_frame) - } > flash - - .textalign : ONLY_IF_RO - { - . = ALIGN(8); - } > flash - - . = ALIGN(4); - _etext = .; - _textdata = _etext; - - .stacks : - { - . = ALIGN(8); - __main_stack_base__ = .; - . += __main_stack_size__; - . = ALIGN(8); - __main_stack_end__ = .; - __process_stack_base__ = .; - __main_thread_stack_base__ = .; - . += __process_stack_size__; - . = ALIGN(8); - __process_stack_end__ = .; - __main_thread_stack_end__ = .; - } > ram - - .data : - { - . = ALIGN(4); - PROVIDE(_data = .); - *(.data) - . = ALIGN(4); - *(.data.*) - . = ALIGN(4); - *(.ramtext) - . = ALIGN(4); - PROVIDE(_edata = .); - } > ram AT > flash - - .bss : - { - . = ALIGN(4); - PROVIDE(_bss_start = .); - *(.bss) - . = ALIGN(4); - *(.bss.*) - . = ALIGN(4); - *(COMMON) - . = ALIGN(4); - PROVIDE(_bss_end = .); - } > ram -} - -PROVIDE(end = .); -_end = .; - -__heap_base__ = _end; -__heap_end__ = __ram_end__; diff --git a/firmware/config/stm32f1egt/chconf.h b/firmware/config/stm32f1egt/chconf.h deleted file mode 100644 index a8a240f307..0000000000 --- a/firmware/config/stm32f1egt/chconf.h +++ /dev/null @@ -1,534 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/chconf.h - * @brief Configuration file template. - * @details A copy of this file must be placed in each project directory, it - * contains the application specific kernel settings. - * - * @addtogroup config - * @details Kernel related settings and hooks. - * @{ - */ - -#ifndef _CHCONF_H_ -#define _CHCONF_H_ - - #define ON_LOCK_HOOK - #define ON_UNLOCK_HOOK - -/*===========================================================================*/ -/** - * @name Kernel parameters and options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief System tick frequency. - * @details Frequency of the system timer that drives the system ticks. This - * setting also defines the system tick time unit. - */ -#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) -#define CH_FREQUENCY 1000 -#endif - -/** - * @brief Round robin interval. - * @details This constant is the number of system ticks allowed for the - * threads before preemption occurs. Setting this value to zero - * disables the preemption for threads with equal priority and the - * round robin becomes cooperative. Note that higher priority - * threads can still preempt, the kernel is always preemptive. - * - * @note Disabling the round robin preemption makes the kernel more compact - * and generally faster. - */ -#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) -#define CH_TIME_QUANTUM 20 -#endif - -/** - * @brief Managed RAM size. - * @details Size of the RAM area to be managed by the OS. If set to zero - * then the whole available RAM is used. The core memory is made - * available to the heap allocator and/or can be used directly through - * the simplified core memory allocator. - * - * @note In order to let the OS manage the whole RAM the linker script must - * provide the @p __heap_base__ and @p __heap_end__ symbols. - * @note Requires @p CH_USE_MEMCORE. - */ -#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) -#define CH_MEMCORE_SIZE 0 -#endif - -/** - * @brief Idle thread automatic spawn suppression. - * @details When this option is activated the function @p chSysInit() - * does not spawn the idle thread automatically. The application has - * then the responsibility to do one of the following: - * - Spawn a custom idle thread at priority @p IDLEPRIO. - * - Change the main() thread priority to @p IDLEPRIO then enter - * an endless loop. In this scenario the @p main() thread acts as - * the idle thread. - * . - * @note Unless an idle thread is spawned the @p main() thread must not - * enter a sleep state. - */ -#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__) -#define CH_NO_IDLE_THREAD FALSE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Performance options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief OS optimization. - * @details If enabled then time efficient rather than space efficient code - * is used when two possible implementations exist. - * - * @note This is not related to the compiler optimization options. - * @note The default is @p TRUE. - */ -#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) -#define CH_OPTIMIZE_SPEED TRUE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Subsystem options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Threads registry APIs. - * @details If enabled then the registry APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) -#define CH_USE_REGISTRY TRUE -#endif - -/** - * @brief Threads synchronization APIs. - * @details If enabled then the @p chThdWait() function is included in - * the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) -#define CH_USE_WAITEXIT TRUE -#endif - -/** - * @brief Semaphores APIs. - * @details If enabled then the Semaphores APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES TRUE -#endif - -/** - * @brief Semaphores queuing mode. - * @details If enabled then the threads are enqueued on semaphores by - * priority rather than in FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_SEMAPHORES_PRIORITY FALSE -#endif - -/** - * @brief Atomic semaphore API. - * @details If enabled then the semaphores the @p chSemSignalWait() API - * is included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) -#define CH_USE_SEMSW TRUE -#endif - -/** - * @brief Mutexes APIs. - * @details If enabled then the mutexes APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) -#define CH_USE_MUTEXES TRUE -#endif - -/** - * @brief Conditional Variables APIs. - * @details If enabled then the conditional variables APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MUTEXES. - */ -#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS TRUE -#endif - -/** - * @brief Conditional Variables APIs with timeout. - * @details If enabled then the conditional variables APIs with timeout - * specification are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_CONDVARS. - */ -#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_CONDVARS_TIMEOUT TRUE -#endif - -/** - * @brief Events Flags APIs. - * @details If enabled then the event flags APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) -#define CH_USE_EVENTS TRUE -#endif - -/** - * @brief Events Flags APIs with timeout. - * @details If enabled then the events APIs with timeout specification - * are included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_EVENTS. - */ -#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) -#define CH_USE_EVENTS_TIMEOUT TRUE -#endif - -/** - * @brief Synchronous Messages APIs. - * @details If enabled then the synchronous messages APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES TRUE -#endif - -/** - * @brief Synchronous Messages queuing mode. - * @details If enabled then messages are served by priority rather than in - * FIFO order. - * - * @note The default is @p FALSE. Enable this if you have special requirements. - * @note Requires @p CH_USE_MESSAGES. - */ -#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) -#define CH_USE_MESSAGES_PRIORITY FALSE -#endif - -/** - * @brief Mailboxes APIs. - * @details If enabled then the asynchronous messages (mailboxes) APIs are - * included in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_SEMAPHORES. - */ -#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) -#define CH_USE_MAILBOXES TRUE -#endif - -/** - * @brief I/O Queues APIs. - * @details If enabled then the I/O queues APIs are included in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) -#define CH_USE_QUEUES TRUE -#endif - -/** - * @brief Core Memory Manager APIs. - * @details If enabled then the core memory manager APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) -#define CH_USE_MEMCORE TRUE -#endif - -/** - * @brief Heap Allocator APIs. - * @details If enabled then the memory heap allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or - * @p CH_USE_SEMAPHORES. - * @note Mutexes are recommended. - */ -#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) -#define CH_USE_HEAP TRUE -#endif - -/** - * @brief C-runtime allocator. - * @details If enabled the the heap allocator APIs just wrap the C-runtime - * @p malloc() and @p free() functions. - * - * @note The default is @p FALSE. - * @note Requires @p CH_USE_HEAP. - * @note The C-runtime may or may not require @p CH_USE_MEMCORE, see the - * appropriate documentation. - */ -#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) -#define CH_USE_MALLOC_HEAP FALSE -#endif - -/** - * @brief Memory Pools Allocator APIs. - * @details If enabled then the memory pools allocator APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) -#define CH_USE_MEMPOOLS TRUE -#endif - -/** - * @brief Dynamic Threads APIs. - * @details If enabled then the dynamic threads creation APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - * @note Requires @p CH_USE_WAITEXIT. - * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. - */ -#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) -#define CH_USE_DYNAMIC TRUE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Debug options - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Debug option, system state check. - * @details If enabled the correct call protocol for system APIs is checked - * at runtime. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_SYSTEM_STATE_CHECK TRUE -#endif - -/** - * @brief Debug option, parameters checks. - * @details If enabled then the checks on the API functions input - * parameters are activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE -#endif - -/** - * @brief Debug option, consistency checks. - * @details If enabled then all the assertions in the kernel code are - * activated. This includes consistency checks inside the kernel, - * runtime anomalies and port-defined checks. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE -#endif - -/** - * @brief Debug option, trace buffer. - * @details If enabled then the context switch circular trace buffer is - * activated. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE -#endif - -/** - * @brief Debug option, stack checks. - * @details If enabled then a runtime stack check is performed. - * - * @note The default is @p FALSE. - * @note The stack check is performed in a architecture/port dependent way. - * It may not be implemented or some ports. - * @note The default failure mode is to halt the system with the global - * @p panic_msg variable set to @p NULL. - */ -#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE -#endif - -/** - * @brief Debug option, stacks initialization. - * @details If enabled then the threads working area is filled with a byte - * value when a thread is created. This can be useful for the - * runtime measurement of the used stack. - * - * @note The default is @p FALSE. - */ -#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE -#endif - -/** - * @brief Debug option, threads profiling. - * @details If enabled then a field is added to the @p Thread structure that - * counts the system ticks occurred while executing the thread. - * - * @note The default is @p TRUE. - * @note This debug option is defaulted to TRUE because it is required by - * some test cases into the test suite. - */ -#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING TRUE -#endif - -/** @} */ - -/*===========================================================================*/ -/** - * @name Kernel hooks - * @{ - */ -/*===========================================================================*/ - -/** - * @brief Threads descriptor structure extension. - * @details User fields added to the end of the @p Thread structure. - */ -#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) -#define THREAD_EXT_FIELDS \ - /* Add threads custom fields here.*/ -#endif - -/** - * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. - * - * @note It is invoked from within @p chThdInit() and implicitly from all - * the threads creation APIs. - */ -#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__) -#define THREAD_EXT_INIT_HOOK(tp) { \ - /* Add threads initialization code here.*/ \ -} -#endif - -/** - * @brief Threads finalization hook. - * @details User finalization code added to the @p chThdExit() API. - * - * @note It is inserted into lock zone. - * @note It is also invoked when the threads simply return in order to - * terminate. - */ -#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__) -#define THREAD_EXT_EXIT_HOOK(tp) { \ - /* Add threads finalization code here.*/ \ -} -#endif - -/** - * @brief Context switch hook. - * @details This hook is invoked just before switching between threads. - */ -#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__) -#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \ - /* System halt code here.*/ \ -} -#endif - -/** - * @brief Idle Loop hook. - * @details This hook is continuously invoked by the idle thread loop. - */ -#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) -#define IDLE_LOOP_HOOK() { \ - /* Idle loop code here.*/ \ -} -#endif - -/** - * @brief System tick event hook. - * @details This hook is invoked in the system tick handler immediately - * after processing the virtual timers queue. - */ -#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__) -#define SYSTEM_TICK_EVENT_HOOK() { \ - /* System tick event code here.*/ \ -} -#endif - -/** - * @brief System halt hook. - * @details This hook is invoked in case to a system halting error before - * the system is halted. - */ -#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__) -#define SYSTEM_HALT_HOOK() { \ - /* System halt code here.*/ \ -} -#endif - -/** @} */ - -/*===========================================================================*/ -/* Port-specific settings (override port settings defaulted in chcore.h). */ -/*===========================================================================*/ - -#endif /* _CHCONF_H_ */ - -/** @} */ diff --git a/firmware/config/stm32f1egt/efifeatures.h b/firmware/config/stm32f1egt/efifeatures.h deleted file mode 100644 index 2b947d582f..0000000000 --- a/firmware/config/stm32f1egt/efifeatures.h +++ /dev/null @@ -1,61 +0,0 @@ -/** - * @file efifeatures.h - * - * @brief In this header we can configure which modules are used for EGT2CAN firmware. - * - * @date Dec 23, 2014 - * @author Andrey Belomutskiy, (c) 2012-2020 - */ - -#ifndef EFIFEATURES_H_ -#define EFIFEATURES_H_ - -#define DL_OUTPUT_BUFFER 128 - -#define EFI_USB_SERIAL TRUE - -#define hal_lld_get_counter_value() DWT_CYCCNT - -#define EFI_CONSOLE_TX_PORT GPIOC -#define EFI_CONSOLE_TX_PIN 10 -#define EFI_CONSOLE_RX_PORT GPIOC -#define EFI_CONSOLE_RX_PIN 11 -#define EFI_CONSOLE_AF 7 - - -#define LED_ERROR_PORT GPIOD -#define LED_ERROR_PIN 3 - -#define LED_COMMUNICATION_PORT GPIOD -#define LED_COMMUNICATION_PIN 4 - -#define SERIAL_SPEED 115200 -/** - * This macros is used to hide pieces of the code from unit tests, so it only makes sense in folders exposed to the tests project. - * This macros is NOT about taking out logging in general. - */ -#define EFI_PROD_CODE FALSE - -#define CCM_OPTIONAL - -#define EFI_EGT TRUE - -#define EFI_UNIT_TEST FALSE - -#define EFI_MAX_31855 TRUE - -#define CONSOLE_MAX_ACTIONS 32 - -#ifndef CONFIG_RESET_SWITCH_PORT -#define CONFIG_RESET_SWITCH_PORT GPIOD -#endif - -#define CONFIG_RESET_SWITCH_PIN 6 - -/** - * This is the size of the MemoryStream used by chvprintf - */ -#define INTERMEDIATE_LOGGING_BUFFER_SIZE 256 - - -#endif /* EFIFEATURES_H_ */ diff --git a/firmware/config/stm32f1egt/halconf.h b/firmware/config/stm32f1egt/halconf.h deleted file mode 100644 index b39288c3a8..0000000000 --- a/firmware/config/stm32f1egt/halconf.h +++ /dev/null @@ -1,312 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * @file templates/halconf.h - * @brief HAL configuration header. - * @details HAL configuration file, this file allows to enable or disable the - * various device drivers from your application. You may also use - * this file in order to override the device drivers default settings. - * - * @addtogroup HAL_CONF - * @{ - */ - -#ifndef _HALCONF_H_ -#define _HALCONF_H_ - -#include "mcuconf.h" - -/** - * @brief Enables the TM subsystem. - */ -#if !defined(HAL_USE_TM) || defined(__DOXYGEN__) -#define HAL_USE_TM TRUE -#endif - -/** - * @brief Enables the PAL subsystem. - */ -#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) -#define HAL_USE_PAL TRUE -#endif - -/** - * @brief Enables the ADC subsystem. - */ -#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) -#define HAL_USE_ADC FALSE -#endif - -/** - * @brief Enables the CAN subsystem. - */ -#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) -#define HAL_USE_CAN FALSE -#endif - -/** - * @brief Enables the EXT subsystem. - */ -#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) -#define HAL_USE_EXT FALSE -#endif - -/** - * @brief Enables the GPT subsystem. - */ -#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) -#define HAL_USE_GPT FALSE -#endif - -/** - * @brief Enables the I2C subsystem. - */ -#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) -#define HAL_USE_I2C FALSE -#endif - -/** - * @brief Enables the ICU subsystem. - */ -#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) -#define HAL_USE_ICU FALSE -#endif - -/** - * @brief Enables the MAC subsystem. - */ -#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) -#define HAL_USE_MAC FALSE -#endif - -/** - * @brief Enables the MMC_SPI subsystem. - */ -#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) -#define HAL_USE_MMC_SPI FALSE -#endif - -/** - * @brief Enables the PWM subsystem. - */ -#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) -#define HAL_USE_PWM FALSE -#endif - -/** - * @brief Enables the RTC subsystem. - */ -#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) -#define HAL_USE_RTC FALSE -#endif - -/** - * @brief Enables the SDC subsystem. - */ -#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) -#define HAL_USE_SDC FALSE -#endif - -/** - * @brief Enables the SERIAL subsystem. - */ -#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL TRUE -#endif - -/** - * @brief Enables the SERIAL over USB subsystem. - */ -#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL_USB TRUE -#endif - -/** - * @brief Enables the SPI subsystem. - */ -#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) -#define HAL_USE_SPI TRUE -#endif - -/** - * @brief Enables the UART subsystem. - */ -#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) -#define HAL_USE_UART FALSE -#endif - -/** - * @brief Enables the USB subsystem. - */ -#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) -#define HAL_USE_USB TRUE -#endif - -/*===========================================================================*/ -/* ADC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) -#define ADC_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define ADC_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* CAN driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Sleep mode related APIs inclusion switch. - */ -#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) -#define CAN_USE_SLEEP_MODE TRUE -#endif - -/*===========================================================================*/ -/* I2C driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables the mutual exclusion APIs on the I2C bus. - */ -#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define I2C_USE_MUTUAL_EXCLUSION TRUE -#endif - -/*===========================================================================*/ -/* MAC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) -#define MAC_USE_ZERO_COPY FALSE -#endif - -/** - * @brief Enables an event sources for incoming packets. - */ -#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) -#define MAC_USE_EVENTS TRUE -#endif - -/*===========================================================================*/ -/* MMC_SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - * This option is recommended also if the SPI driver does not - * use a DMA channel and heavily loads the CPU. - */ -#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) -#define MMC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SDC driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Number of initialization attempts before rejecting the card. - * @note Attempts are performed at 10mS intervals. - */ -#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) -#define SDC_INIT_RETRY 100 -#endif - -/** - * @brief Include support for MMC cards. - * @note MMC support is not yet implemented so this option must be kept - * at @p FALSE. - */ -#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) -#define SDC_MMC_SUPPORT FALSE -#endif - -/** - * @brief Delays insertions. - * @details If enabled this options inserts delays into the MMC waiting - * routines releasing some extra CPU time for the threads with - * lower priority, this may slow down the driver a bit however. - */ -#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) -#define SDC_NICE_WAITING TRUE -#endif - -/*===========================================================================*/ -/* SERIAL driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Default bit rate. - * @details Configuration parameter, this is the baud rate selected for the - * default configuration. - */ -#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) -#define SERIAL_DEFAULT_BITRATE 38400 -#endif - -/** - * @brief Serial buffers size. - * @details Configuration parameter, you can change the depth of the queue - * buffers depending on the requirements of your application. - * @note The default is 64 bytes for both the transmission and receive - * buffers. - */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 16 -#endif - -/*===========================================================================*/ -/* SPI driver related settings. */ -/*===========================================================================*/ - -/** - * @brief Enables synchronous APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) -#define SPI_USE_WAIT TRUE -#endif - -/** - * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. - * @note Disabling this option saves both code and data space. - */ -#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) -#define SPI_USE_MUTUAL_EXCLUSION TRUE -#endif - -#endif /* _HALCONF_H_ */ - -/** @} */ diff --git a/firmware/config/stm32f1egt/mcuconf.h b/firmware/config/stm32f1egt/mcuconf.h deleted file mode 100644 index d7ef8372a1..0000000000 --- a/firmware/config/stm32f1egt/mcuconf.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#define STM32F103_MCUCONF - -/* - * STM32F103 drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the whole - * driver is enabled in halconf.h. - * - * IRQ priorities: - * 15...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -/* - * HAL driver system settings. - */ -#define STM32_NO_INIT FALSE -#define STM32_HSI_ENABLED TRUE -#define STM32_LSI_ENABLED FALSE -#define STM32_HSE_ENABLED FALSE -#define STM32_LSE_ENABLED FALSE -#define STM32_SW STM32_SW_PLL -#define STM32_PLLSRC STM32_PLLSRC_HSI -#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#define STM32_PLLMUL_VALUE 12 -#define STM32_HPRE STM32_HPRE_DIV1 -#define STM32_PPRE1 STM32_PPRE1_DIV2 -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 -#define STM32_USB_CLOCK_REQUIRED TRUE -#define STM32_USBPRE STM32_USBPRE_DIV1 -#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK -#define STM32_RTCSEL STM32_RTCSEL_NOCLOCK -#define STM32_PVD_ENABLE FALSE -#define STM32_PLS STM32_PLS_LEV0 - -/* - * ADC driver system settings. - */ -#define STM32_ADC_USE_ADC1 FALSE -#define STM32_ADC_ADC1_DMA_PRIORITY 2 -#define STM32_ADC_ADC1_IRQ_PRIORITY 6 - -/* - * CAN driver system settings. - */ -#define STM32_CAN_USE_CAN1 FALSE -#define STM32_CAN_CAN1_IRQ_PRIORITY 11 - -/* - * EXT driver system settings. - */ -#define STM32_EXT_EXTI0_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI1_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI2_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI3_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI4_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI16_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI17_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI18_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI19_IRQ_PRIORITY 6 - -/* - * GPT driver system settings. - */ -#define STM32_GPT_USE_TIM1 FALSE -#define STM32_GPT_USE_TIM2 FALSE -#define STM32_GPT_USE_TIM3 FALSE -#define STM32_GPT_USE_TIM4 FALSE -#define STM32_GPT_USE_TIM5 FALSE -#define STM32_GPT_USE_TIM8 FALSE -#define STM32_GPT_TIM1_IRQ_PRIORITY 7 -#define STM32_GPT_TIM2_IRQ_PRIORITY 7 -#define STM32_GPT_TIM3_IRQ_PRIORITY 7 -#define STM32_GPT_TIM4_IRQ_PRIORITY 7 -#define STM32_GPT_TIM5_IRQ_PRIORITY 7 -#define STM32_GPT_TIM8_IRQ_PRIORITY 7 - -/* - * I2C driver system settings. - */ -#define STM32_I2C_USE_I2C1 FALSE -#define STM32_I2C_USE_I2C2 FALSE -#define STM32_I2C_I2C1_IRQ_PRIORITY 5 -#define STM32_I2C_I2C2_IRQ_PRIORITY 5 -#define STM32_I2C_I2C1_DMA_PRIORITY 3 -#define STM32_I2C_I2C2_DMA_PRIORITY 3 -#define STM32_I2C_I2C1_DMA_ERROR_HOOK() chSysHalt() -#define STM32_I2C_I2C2_DMA_ERROR_HOOK() chSysHalt() - -/* - * ICU driver system settings. - */ -#define STM32_ICU_USE_TIM1 FALSE -#define STM32_ICU_USE_TIM2 FALSE -#define STM32_ICU_USE_TIM3 FALSE -#define STM32_ICU_USE_TIM4 FALSE -#define STM32_ICU_USE_TIM5 FALSE -#define STM32_ICU_USE_TIM8 FALSE -#define STM32_ICU_TIM1_IRQ_PRIORITY 7 -#define STM32_ICU_TIM2_IRQ_PRIORITY 7 -#define STM32_ICU_TIM3_IRQ_PRIORITY 7 -#define STM32_ICU_TIM4_IRQ_PRIORITY 7 -#define STM32_ICU_TIM5_IRQ_PRIORITY 7 -#define STM32_ICU_TIM8_IRQ_PRIORITY 7 - -/* - * PWM driver system settings. - */ -#define STM32_PWM_USE_ADVANCED FALSE -#define STM32_PWM_USE_TIM1 FALSE -#define STM32_PWM_USE_TIM2 FALSE -#define STM32_PWM_USE_TIM3 FALSE -#define STM32_PWM_USE_TIM4 FALSE -#define STM32_PWM_USE_TIM5 FALSE -#define STM32_PWM_USE_TIM8 FALSE -#define STM32_PWM_TIM1_IRQ_PRIORITY 7 -#define STM32_PWM_TIM2_IRQ_PRIORITY 7 -#define STM32_PWM_TIM3_IRQ_PRIORITY 7 -#define STM32_PWM_TIM4_IRQ_PRIORITY 7 -#define STM32_PWM_TIM5_IRQ_PRIORITY 7 -#define STM32_PWM_TIM8_IRQ_PRIORITY 7 - -/* - * RTC driver system settings. - */ -#define STM32_RTC_IRQ_PRIORITY 15 - -/* - * SERIAL driver system settings. - */ -#define STM32_SERIAL_USE_USART1 FALSE -#define STM32_SERIAL_USE_USART2 TRUE -#define STM32_SERIAL_USE_USART3 FALSE -#define STM32_SERIAL_USE_UART4 FALSE -#define STM32_SERIAL_USE_UART5 FALSE -#define STM32_SERIAL_USART1_PRIORITY 12 -#define STM32_SERIAL_USART2_PRIORITY 12 -#define STM32_SERIAL_USART3_PRIORITY 12 -#define STM32_SERIAL_UART4_PRIORITY 12 -#define STM32_SERIAL_UART5_PRIORITY 12 - -/* - * SPI driver system settings. - */ -#define STM32_SPI_USE_SPI1 TRUE -#define STM32_SPI_USE_SPI2 FALSE -#define STM32_SPI_USE_SPI3 FALSE -#define STM32_SPI_SPI1_DMA_PRIORITY 1 -#define STM32_SPI_SPI2_DMA_PRIORITY 1 -#define STM32_SPI_SPI3_DMA_PRIORITY 1 -#define STM32_SPI_SPI1_IRQ_PRIORITY 10 -#define STM32_SPI_SPI2_IRQ_PRIORITY 10 -#define STM32_SPI_SPI3_IRQ_PRIORITY 10 -#define STM32_SPI_DMA_ERROR_HOOK(spip) chSysHalt() - -/* - * UART driver system settings. - */ -#define STM32_UART_USE_USART1 FALSE -#define STM32_UART_USE_USART2 FALSE -#define STM32_UART_USE_USART3 FALSE -#define STM32_UART_USART1_IRQ_PRIORITY 12 -#define STM32_UART_USART2_IRQ_PRIORITY 12 -#define STM32_UART_USART3_IRQ_PRIORITY 12 -#define STM32_UART_USART1_DMA_PRIORITY 0 -#define STM32_UART_USART2_DMA_PRIORITY 0 -#define STM32_UART_USART3_DMA_PRIORITY 0 -#define STM32_UART_DMA_ERROR_HOOK(uartp) chSysHalt() - -/* - * USB driver system settings. - */ -#define STM32_USB_USE_USB1 TRUE -#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE -#define STM32_USB_USB1_HP_IRQ_PRIORITY 13 -#define STM32_USB_USB1_LP_IRQ_PRIORITY 14 - diff --git a/firmware/hw_layer/ports/stm32/stm32f0/hw_ports.mk b/firmware/hw_layer/ports/stm32/stm32f0/hw_ports.mk deleted file mode 100644 index bd24e2a080..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32f0/hw_ports.mk +++ /dev/null @@ -1,4 +0,0 @@ - - -HW_STM32_SRC_CPP = $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f0/mpu_util.cpp - \ No newline at end of file diff --git a/firmware/hw_layer/ports/stm32/stm32f0/mpu_util.cpp b/firmware/hw_layer/ports/stm32/stm32f0/mpu_util.cpp deleted file mode 100644 index ae6350aaa2..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32f0/mpu_util.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @file mpu_util.cpp - * - * @date Dec 23, 2014 - * @author Andrey Belomutskiy, (c) 2012-2020 - */ - -#include "global.h" - -EXTERNC int getRemainingStack(Thread *otp) { - return 9999; -} - - diff --git a/firmware/hw_layer/ports/stm32/stm32f0/mpu_util.h b/firmware/hw_layer/ports/stm32/stm32f0/mpu_util.h deleted file mode 100644 index 62918f42cd..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32f0/mpu_util.h +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @file mpu_util.h - * - * @date Dec 23, 2014 - * @author Andrey Belomutskiy, (c) 2012-2020 - */ -#ifndef MPU_UTIL_H_ -#define MPU_UTIL_H_ - -// we are lucky - all CAN pins use the same AF -#define EFI_CAN_RX_AF 9 -#define EFI_CAN_TX_AF 9 - -#define baseMCUInit() {} - -#endif /* MPU_UTIL_H_ */ diff --git a/firmware/hw_layer/ports/stm32/stm32f1/hw_ports.mk b/firmware/hw_layer/ports/stm32/stm32f1/hw_ports.mk deleted file mode 100644 index fb4278b501..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32f1/hw_ports.mk +++ /dev/null @@ -1,5 +0,0 @@ -HW_LAYER_EMS += $(PROJECT_DIR)/hw_layer/ports/stm32/flash.c - -HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f1/mpu_util.cpp \ - $(PROJECT_DIR)/hw_layer/ports/stm32/stm32_pins.cpp \ - $(PROJECT_DIR)/hw_layer/ports/stm32/stm32_common.cpp diff --git a/firmware/hw_layer/ports/stm32/stm32f1/mpu_util.cpp b/firmware/hw_layer/ports/stm32/stm32f1/mpu_util.cpp deleted file mode 100644 index 39ed828519..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32f1/mpu_util.cpp +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @file mpu_util.cpp - * - * @date Jan 9, 2015 - * @author Andrey Belomutskiy, (c) 2012-2020 - */ - -#include "mpu_util.h" - -void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin) { - -} - diff --git a/firmware/hw_layer/ports/stm32/stm32f1/mpu_util.h b/firmware/hw_layer/ports/stm32/stm32f1/mpu_util.h deleted file mode 100644 index 58e5580dfc..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32f1/mpu_util.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * @file mpu_util.h - * - * @date Jan 8, 2015 - * @author Andrey Belomutskiy, (c) 2012-2020 - */ - -#ifndef CONFIG_STM32F1EGT_MPU_UTIL_H_ -#define CONFIG_STM32F1EGT_MPU_UTIL_H_ - -#include "global.h" - -#define baseMCUInit() {} - -void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin); - -#endif /* CONFIG_STM32F1EGT_MPU_UTIL_H_ */ diff --git a/firmware/rusefi.mk b/firmware/rusefi.mk index bf58936b3c..5ca54804b7 100644 --- a/firmware/rusefi.mk +++ b/firmware/rusefi.mk @@ -31,12 +31,6 @@ CPU_HWLAYER = ports/stm32/stm32f4 endif -ifeq ($(PROJECT_CPU),ARCH_STM32F1) -CPU_STARTUP = startup_stm32f1xx.mk -CPU_PLATFORM = STM32F1xx/platform.mk -CPU_HWLAYER = ports/stm32/stm32f1 -endif - ifeq ($(CPU_STARTUP_DIR),) CPU_STARTUP_DIR = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/$(CPU_STARTUP) endif From bb9c851a07b549f456d91048235b53d65b154e21 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 13 Mar 2020 15:48:22 -0700 Subject: [PATCH 127/171] Deduplicate mpu_util headers (#1187) * this flag did nothing * header dedupe * mre fix again * get all dependencies in mpu_util.h * guard can/spi * more dedupe * pragma once Co-authored-by: Matthew Kennedy --- firmware/hw_layer/hw_layer.mk | 3 +- firmware/hw_layer/ports/kinetis/mpu_util.h | 92 ----------------- .../hw_layer/ports/kinetis/port_mpu_util.h | 38 +++++++ firmware/hw_layer/ports/mpu_util.h | 52 ++++++++++ firmware/hw_layer/ports/stm32/port_mpu_util.h | 63 ++++++++++++ .../ports/stm32/stm32_common_mpu_util.h | 36 ------- .../ports/stm32/stm32f4/device_mpu_util.h | 21 ++++ .../hw_layer/ports/stm32/stm32f4/mpu_util.h | 95 ------------------ .../ports/stm32/stm32f7/device_mpu_util.h | 20 ++++ .../hw_layer/ports/stm32/stm32f7/mpu_util.h | 98 ------------------- 10 files changed, 196 insertions(+), 322 deletions(-) delete mode 100644 firmware/hw_layer/ports/kinetis/mpu_util.h create mode 100644 firmware/hw_layer/ports/kinetis/port_mpu_util.h create mode 100644 firmware/hw_layer/ports/mpu_util.h create mode 100644 firmware/hw_layer/ports/stm32/port_mpu_util.h delete mode 100644 firmware/hw_layer/ports/stm32/stm32_common_mpu_util.h create mode 100644 firmware/hw_layer/ports/stm32/stm32f4/device_mpu_util.h delete mode 100644 firmware/hw_layer/ports/stm32/stm32f4/mpu_util.h create mode 100644 firmware/hw_layer/ports/stm32/stm32f7/device_mpu_util.h delete mode 100644 firmware/hw_layer/ports/stm32/stm32f7/mpu_util.h diff --git a/firmware/hw_layer/hw_layer.mk b/firmware/hw_layer/hw_layer.mk index 17d988d10c..fdf7c72178 100644 --- a/firmware/hw_layer/hw_layer.mk +++ b/firmware/hw_layer/hw_layer.mk @@ -1,7 +1,8 @@ HW_LAYER_EGT = $(PROJECT_DIR)/hw_layer/serial_over_usb/usbcfg.c \ $(PROJECT_DIR)/hw_layer/serial_over_usb/usbconsole.c -HW_INC = hw_layer/$(CPU_HWLAYER) +HW_INC = hw_layer/$(CPU_HWLAYER) \ + $(PROJECT_DIR)/hw_layer/ports HW_LAYER_EGT_CPP = \ $(PROJECT_DIR)/hw_layer/max31855.cpp diff --git a/firmware/hw_layer/ports/kinetis/mpu_util.h b/firmware/hw_layer/ports/kinetis/mpu_util.h deleted file mode 100644 index 6bca3aacf5..0000000000 --- a/firmware/hw_layer/ports/kinetis/mpu_util.h +++ /dev/null @@ -1,92 +0,0 @@ -/** - * @file mpu_util.h - * - * @date Jul 27, 2014 - * @author Andrey Belomutskiy, (c) 2012-2020 - * @author andreika - */ - -#ifndef MPU_UTIL_H_ -#define MPU_UTIL_H_ - -// we are lucky - all CAN pins use the same AF -#define EFI_CAN_RX_AF 9 -#define EFI_CAN_TX_AF 9 - -// burnout or 'Burn Out' -typedef enum { - BOR_Level_None = 0, - BOR_Level_1 = 1, - BOR_Level_2 = 2, - BOR_Level_3 = 3 -} BOR_Level_t; - -typedef enum { - BOR_Result_Ok = 0x00, - BOR_Result_Error -} BOR_Result_t; - -BOR_Level_t BOR_Get(void); -BOR_Result_t BOR_Set(BOR_Level_t BORValue); - -#ifndef ADC_TwoSamplingDelay_5Cycles -#define ADC_TwoSamplingDelay_5Cycles ((uint32_t)0x00000000) -#endif - -#ifndef ADC_TwoSamplingDelay_20Cycles -#define ADC_TwoSamplingDelay_20Cycles ((uint32_t)0x00000F00) -#endif - -#ifndef ADC_CR2_SWSTART -#define ADC_CR2_SWSTART ((uint32_t)0x40000000) -#endif - -#define SPI_CR1_8BIT_MODE 0 -#define SPI_CR2_8BIT_MODE 0 - -#define SPI_CR1_16BIT_MODE SPI_CR1_DFF -#define SPI_CR2_16BIT_MODE 0 - -// TODO -#define SPI_CR1_24BIT_MODE 0 -#define SPI_CR2_24BIT_MODE 0 - -void baseMCUInit(void); -void turnOnSpi(spi_device_e device); -void jump_to_bootloader(); - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -// these need to be declared C style for the linker magic to work - -void DebugMonitorVector(void); -void UsageFaultVector(void); -void BusFaultVector(void); -void HardFaultVector(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#if HAL_USE_SPI -void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, - brain_pin_e mosi, - int sckMode, - int mosiMode, - int misoMode); -/** - * @see getSpiDevice - */ -void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin); -#endif /* HAL_USE_SPI */ - -bool isValidCanTxPin(brain_pin_e pin); -bool isValidCanRxPin(brain_pin_e pin); -#if HAL_USE_CAN -CANDriver * detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx); -#endif /* HAL_USE_CAN */ - -#endif /* MPU_UTIL_H_ */ diff --git a/firmware/hw_layer/ports/kinetis/port_mpu_util.h b/firmware/hw_layer/ports/kinetis/port_mpu_util.h new file mode 100644 index 0000000000..6f4e578d94 --- /dev/null +++ b/firmware/hw_layer/ports/kinetis/port_mpu_util.h @@ -0,0 +1,38 @@ +/** + * @file mpu_util.h + * + * @date Jul 27, 2014 + * @author Andrey Belomutskiy, (c) 2012-2020 + * @author andreika + */ + +#pragma once + +typedef enum { + BOR_Level_None = 0, + BOR_Level_1 = 1, + BOR_Level_2 = 2, + BOR_Level_3 = 3 +} BOR_Level_t; + +#ifndef ADC_TwoSamplingDelay_5Cycles +#define ADC_TwoSamplingDelay_5Cycles ((uint32_t)0x00000000) +#endif + +#ifndef ADC_TwoSamplingDelay_20Cycles +#define ADC_TwoSamplingDelay_20Cycles ((uint32_t)0x00000F00) +#endif + +#ifndef ADC_CR2_SWSTART +#define ADC_CR2_SWSTART ((uint32_t)0x40000000) +#endif + +#define SPI_CR1_8BIT_MODE 0 +#define SPI_CR2_8BIT_MODE 0 + +#define SPI_CR1_16BIT_MODE SPI_CR1_DFF +#define SPI_CR2_16BIT_MODE 0 + +// TODO +#define SPI_CR1_24BIT_MODE 0 +#define SPI_CR2_24BIT_MODE 0 diff --git a/firmware/hw_layer/ports/mpu_util.h b/firmware/hw_layer/ports/mpu_util.h new file mode 100644 index 0000000000..82302b972a --- /dev/null +++ b/firmware/hw_layer/ports/mpu_util.h @@ -0,0 +1,52 @@ +#pragma once + +#include "rusefi_enums.h" + +#include "port_mpu_util.h" + +// Base MCU +void baseMCUInit(void); +void jump_to_bootloader(); + +// CAN bus +#if HAL_USE_CAN +bool isValidCanTxPin(brain_pin_e pin); +bool isValidCanRxPin(brain_pin_e pin); +CANDriver * detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx); +#endif // HAL_USE_CAN + +// SPI +#if HAL_USE_SPI +void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, + brain_pin_e mosi, + int sckMode, + int mosiMode, + int misoMode); + +void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin); +void turnOnSpi(spi_device_e device); +#endif // HAL_USE_SPI + +// Brownout Reset +typedef enum { + BOR_Result_Ok = 0x00, + BOR_Result_Error +} BOR_Result_t; + +BOR_Level_t BOR_Get(void); +BOR_Result_t BOR_Set(BOR_Level_t BORValue); + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +// these need to be declared with C linkage - they're called from C and asm files +void DebugMonitorVector(void); +void UsageFaultVector(void); +void BusFaultVector(void); +void HardFaultVector(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ diff --git a/firmware/hw_layer/ports/stm32/port_mpu_util.h b/firmware/hw_layer/ports/stm32/port_mpu_util.h new file mode 100644 index 0000000000..52e0d0f167 --- /dev/null +++ b/firmware/hw_layer/ports/stm32/port_mpu_util.h @@ -0,0 +1,63 @@ +/** + * @file stm32_common_mpu_util.h + * @brief Low level common STM32 header + * + * @date Aug 3, 2019 + * @author Andrey Belomutskiy, (c) 2012-2020 + */ + +#pragma once + +#include "device_mpu_util.h" + +typedef enum { + BOR_Level_None = OB_BOR_OFF, // 0x0C=12 Supply voltage ranges from 1.62 to 2.10 V + BOR_Level_1 = OB_BOR_LEVEL1, // 0x08 Supply voltage ranges from 2.10 to 2.40 V + BOR_Level_2 = OB_BOR_LEVEL2, // 0x04 Supply voltage ranges from 2.40 to 2.70 V + BOR_Level_3 = OB_BOR_LEVEL3 // 0x00 Supply voltage ranges from 2.70 to 3.60 V +} BOR_Level_t; + +// we are lucky - all CAN pins use the same AF +#define EFI_CAN_RX_AF 9 +#define EFI_CAN_TX_AF 9 + +#ifndef GPIO_AF_TIM1 +#define GPIO_AF_TIM1 1 +#endif + +#ifndef GPIO_AF_TIM2 +#define GPIO_AF_TIM2 1 +#endif + +#ifndef GPIO_AF_TIM3 +#define GPIO_AF_TIM3 2 +#endif + +#ifndef GPIO_AF_TIM4 +#define GPIO_AF_TIM4 2 +#endif + +#ifndef GPIO_AF_TIM5 +#define GPIO_AF_TIM5 2 +#endif + +#ifndef GPIO_AF_TIM8 +#define GPIO_AF_TIM8 3 +#endif + +#ifndef GPIO_AF_TIM9 +#define GPIO_AF_TIM9 3 +#endif + +// F4/F7 have the same ADC peripheral +#ifndef ADC_TwoSamplingDelay_5Cycles +#define ADC_TwoSamplingDelay_5Cycles ((uint32_t)0x00000000) +#endif + +#ifndef ADC_TwoSamplingDelay_20Cycles +#define ADC_TwoSamplingDelay_20Cycles ((uint32_t)0x00000F00) +#endif + +#ifndef ADC_CR2_SWSTART +#define ADC_CR2_SWSTART ((uint32_t)0x40000000) +#endif diff --git a/firmware/hw_layer/ports/stm32/stm32_common_mpu_util.h b/firmware/hw_layer/ports/stm32/stm32_common_mpu_util.h deleted file mode 100644 index 500073d27a..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32_common_mpu_util.h +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @file stm32_common_mpu_util.h - * @brief Low level common STM32 header - * - * @date Aug 3, 2019 - * @author Andrey Belomutskiy, (c) 2012-2020 - */ - -// burnout or 'Burn Out' - -#include "rusefi_enums.h" - -typedef enum { - BOR_Level_None = OB_BOR_OFF, // 0x0C=12 Supply voltage ranges from 1.62 to 2.10 V - BOR_Level_1 = OB_BOR_LEVEL1, // 0x08 Supply voltage ranges from 2.10 to 2.40 V - BOR_Level_2 = OB_BOR_LEVEL2, // 0x04 Supply voltage ranges from 2.40 to 2.70 V - BOR_Level_3 = OB_BOR_LEVEL3 // 0x00 Supply voltage ranges from 2.70 to 3.60 V -} BOR_Level_t; - -typedef enum { - BOR_Result_Ok = 0x00, - BOR_Result_Error -} BOR_Result_t; - -BOR_Level_t BOR_Get(void); -BOR_Result_t BOR_Set(BOR_Level_t BORValue); - -void baseMCUInit(void); -void turnOnSpi(spi_device_e device); -void jump_to_bootloader(); - -#if HAL_USE_CAN -bool isValidCanTxPin(brain_pin_e pin); -bool isValidCanRxPin(brain_pin_e pin); -CANDriver * detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx); -#endif /* HAL_USE_CAN */ diff --git a/firmware/hw_layer/ports/stm32/stm32f4/device_mpu_util.h b/firmware/hw_layer/ports/stm32/stm32f4/device_mpu_util.h new file mode 100644 index 0000000000..c19474d0eb --- /dev/null +++ b/firmware/hw_layer/ports/stm32/stm32f4/device_mpu_util.h @@ -0,0 +1,21 @@ +/** + * @file mpu_util.h + * + * @date Jul 27, 2014 + * @author Andrey Belomutskiy, (c) 2012-2020 + */ + +#pragma once + +#include "stm32f4xx_hal_flash_ex.h" + +#define SPI_CR1_8BIT_MODE 0 +#define SPI_CR2_8BIT_MODE 0 + +#define SPI_CR1_16BIT_MODE SPI_CR1_DFF +#define SPI_CR2_16BIT_MODE 0 + +// TODO +#define SPI_CR1_24BIT_MODE 0 +#define SPI_CR2_24BIT_MODE 0 + diff --git a/firmware/hw_layer/ports/stm32/stm32f4/mpu_util.h b/firmware/hw_layer/ports/stm32/stm32f4/mpu_util.h deleted file mode 100644 index 81e2e9db8b..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32f4/mpu_util.h +++ /dev/null @@ -1,95 +0,0 @@ -/** - * @file mpu_util.h - * - * @date Jul 27, 2014 - * @author Andrey Belomutskiy, (c) 2012-2020 - */ - -#pragma once - -#include "stm32f4xx_hal_flash_ex.h" -#include "stm32_common_mpu_util.h" - -// we are lucky - all CAN pins use the same AF -#define EFI_CAN_RX_AF 9 -#define EFI_CAN_TX_AF 9 - -#ifndef GPIO_AF_TIM1 -#define GPIO_AF_TIM1 1 -#endif - -#ifndef GPIO_AF_TIM2 -#define GPIO_AF_TIM2 1 -#endif - -#ifndef GPIO_AF_TIM3 -#define GPIO_AF_TIM3 2 -#endif - -#ifndef GPIO_AF_TIM4 -#define GPIO_AF_TIM4 2 -#endif - -#ifndef GPIO_AF_TIM5 -#define GPIO_AF_TIM5 2 -#endif - -#ifndef GPIO_AF_TIM8 -#define GPIO_AF_TIM8 3 -#endif - -#ifndef GPIO_AF_TIM9 -#define GPIO_AF_TIM9 3 -#endif - -#ifndef ADC_TwoSamplingDelay_5Cycles -#define ADC_TwoSamplingDelay_5Cycles ((uint32_t)0x00000000) -#endif - -#ifndef ADC_TwoSamplingDelay_20Cycles -#define ADC_TwoSamplingDelay_20Cycles ((uint32_t)0x00000F00) -#endif - -#ifndef ADC_CR2_SWSTART -#define ADC_CR2_SWSTART ((uint32_t)0x40000000) -#endif - -#define SPI_CR1_8BIT_MODE 0 -#define SPI_CR2_8BIT_MODE 0 - -#define SPI_CR1_16BIT_MODE SPI_CR1_DFF -#define SPI_CR2_16BIT_MODE 0 - -// TODO -#define SPI_CR1_24BIT_MODE 0 -#define SPI_CR2_24BIT_MODE 0 - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -// these need to be declared C style for the linker magic to work - -void DebugMonitorVector(void); -void UsageFaultVector(void); -void BusFaultVector(void); -void HardFaultVector(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#if HAL_USE_SPI -void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, - brain_pin_e mosi, - int sckMode, - int mosiMode, - int misoMode); -/** - * @see getSpiDevice - */ -void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin); -#endif /* HAL_USE_SPI */ - diff --git a/firmware/hw_layer/ports/stm32/stm32f7/device_mpu_util.h b/firmware/hw_layer/ports/stm32/stm32f7/device_mpu_util.h new file mode 100644 index 0000000000..3de366cfa2 --- /dev/null +++ b/firmware/hw_layer/ports/stm32/stm32f7/device_mpu_util.h @@ -0,0 +1,20 @@ +/** + * @file mpu_util.h + * + * @date Jul 27, 2014 + * @author Andrey Belomutskiy, (c) 2012-2020 + */ + +#pragma once + +#include "stm32f7xx_hal_flash_ex.h" + +#define SPI_CR1_8BIT_MODE 0 +#define SPI_CR2_8BIT_MODE (SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0) + +#define SPI_CR1_16BIT_MODE 0 +#define SPI_CR2_16BIT_MODE SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 + +/* 3 x 8-bit transfer */ +#define SPI_CR1_24BIT_MODE 0 +#define SPI_CR2_24BIT_MODE SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 diff --git a/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.h b/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.h deleted file mode 100644 index 6d70da76c5..0000000000 --- a/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.h +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @file mpu_util.h - * - * @date Jul 27, 2014 - * @author Andrey Belomutskiy, (c) 2012-2020 - */ - -#pragma once - -#include "stm32f7xx_hal_flash_ex.h" -#include "stm32_common_mpu_util.h" - -// we are lucky - all CAN pins use the same AF -#define EFI_CAN_RX_AF 9 -#define EFI_CAN_TX_AF 9 - - -#ifndef GPIO_AF_TIM1 -#define GPIO_AF_TIM1 1 -#endif - -#ifndef GPIO_AF_TIM2 -#define GPIO_AF_TIM2 1 -#endif - -#ifndef GPIO_AF_TIM3 -#define GPIO_AF_TIM3 2 -#endif - -#ifndef GPIO_AF_TIM4 -#define GPIO_AF_TIM4 2 -#endif - -#ifndef GPIO_AF_TIM5 -#define GPIO_AF_TIM5 2 -#endif - -#ifndef GPIO_AF_TIM8 -#define GPIO_AF_TIM8 3 -#endif - -#ifndef GPIO_AF_TIM9 -#define GPIO_AF_TIM9 3 -#endif - -#ifndef ADC_TwoSamplingDelay_5Cycles -#define ADC_TwoSamplingDelay_5Cycles ((uint32_t)0x00000000) -#endif - -#ifndef ADC_TwoSamplingDelay_20Cycles -#define ADC_TwoSamplingDelay_20Cycles ((uint32_t)0x00000F00) -#endif - -#ifndef ADC_CR2_SWSTART -#define ADC_CR2_SWSTART ((uint32_t)0x40000000) -#endif - -#define SPI_CR1_8BIT_MODE 0 -#define SPI_CR2_8BIT_MODE (SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0) - -#define SPI_CR1_16BIT_MODE 0 -#define SPI_CR2_16BIT_MODE SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 - -/* 3 x 8-bit transfer */ -#define SPI_CR1_24BIT_MODE 0 -#define SPI_CR2_24BIT_MODE SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 - - - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -// these need to be declared C style for the linker magic to work - -void DebugMonitorVector(void); -void UsageFaultVector(void); -void BusFaultVector(void); -void HardFaultVector(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#if HAL_USE_SPI -void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, - brain_pin_e mosi, - int sckMode, - int mosiMode, - int misoMode); -/** - * @see getSpiDevice - */ -void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin); -#endif /* HAL_USE_SPI */ - From 97ce0eda46239a24f77759955de7bb39620dbed3 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 13 Mar 2020 20:30:07 -0400 Subject: [PATCH 128/171] fixing build? --- firmware/bootloader/src/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/bootloader/src/Makefile b/firmware/bootloader/src/Makefile index 297a2ce4f1..500411fc8e 100644 --- a/firmware/bootloader/src/Makefile +++ b/firmware/bootloader/src/Makefile @@ -244,6 +244,8 @@ INCDIR = .. $(CHIBIOS)/os/license \ $(PROJECT_DIR)/hw_layer/lcd \ $(PROJECT_DIR)/hw_layer/sensors \ $(PROJECT_DIR)/hw_layer/mass_storage \ + $(PROJECT_DIR)/hw_layer/ports \ + $(PROJECT_DIR)/hw_layer/$(CPU_HWLAYER) \ $(HW_INC) \ $(HW_LAYER_DRIVERS_INC) \ $(PROJECT_DIR)/development \ From 1c160381500ce031712aa9f3046428ddbef41add Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 13 Mar 2020 20:36:07 -0400 Subject: [PATCH 129/171] progress --- firmware/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index c104fb43aa..f898ebe9f1 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -291,11 +291,11 @@ INCDIR = $(CHIBIOS)/os/license \ $(PROJECT_DIR)/console/fl_binary \ $(PROJECT_DIR)/hw_layer \ $(PROJECT_DIR)/mass_storage \ - hw_layer/serial_over_usb \ - hw_layer/algo \ - hw_layer/lcd \ + $(PROJECT_DIR)/hw_layer/serial_over_usb \ + $(PROJECT_DIR)/hw_layer/algo \ + $(PROJECT_DIR)/hw_layer/lcd \ + $(PROJECT_DIR)/hw_layer/mass_storage \ $(HW_SENSORS_INC) \ - hw_layer/mass_storage \ $(HW_INC) \ $(HW_LAYER_DRIVERS_INC) \ $(UTIL_INC) \ From 6085bee00543503557ce9640d4facfe8b0995592 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 13 Mar 2020 21:23:58 -0400 Subject: [PATCH 130/171] progress? --- firmware/bootloader/src/Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/firmware/bootloader/src/Makefile b/firmware/bootloader/src/Makefile index 500411fc8e..d02d73971b 100644 --- a/firmware/bootloader/src/Makefile +++ b/firmware/bootloader/src/Makefile @@ -169,7 +169,6 @@ CSRC = $(STARTUPSRC) \ CPPSRC = $(CHCPPSRC) \ $(DEV_SRC_CPP) \ $(BOARDSRC_CPP) \ - $(HW_LAYER_EMS_CPP) \ $(HW_SENSORS_SRC) \ $(TUNERSTUDIO_SRC_CPP) \ $(CONSOLE_SRC_CPP) \ From a617cb30a5ede671bbf6b3f5505805a81ec643c4 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 13 Mar 2020 19:12:52 -0700 Subject: [PATCH 131/171] bootloader ci (#1189) * bootloader ci * trailing slash * Revert "progress?" This reverts commit 6085bee00543503557ce9640d4facfe8b0995592. Co-authored-by: Matthew Kennedy --- .github/workflows/build-bootloader.yaml | 28 +++++++++++++++++++++++++ firmware/bootloader/src/Makefile | 1 + 2 files changed, 29 insertions(+) create mode 100644 .github/workflows/build-bootloader.yaml diff --git a/.github/workflows/build-bootloader.yaml b/.github/workflows/build-bootloader.yaml new file mode 100644 index 0000000000..4afdb4dd90 --- /dev/null +++ b/.github/workflows/build-bootloader.yaml @@ -0,0 +1,28 @@ +name: Bootloader CI + +on: [push,pull_request] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + with: + submodules: recursive + + # Build machines don't have arm-none-eabi gcc, so let's download it and put it on the path + - name: Download & Install GCC + run: | # Compiler hosted on our other git repo - avoids having to download from the nice folks at ARM every time + wget 'https://github.com/rusefi/build_support/raw/master/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.xz' -O compiler.tar.xz + tar -xvf compiler.tar.xz + echo "::add-path::`pwd`/gcc-arm-none-eabi-9-2019-q4-major/bin" + + # Make sure the compiler we just downloaded works - just print out the version + - name: Test Compiler + run: arm-none-eabi-gcc -v + + # Build the bootloader! + - name: Build Bootloader + working-directory: ./firmware/bootloader/ + run: make -j4 -f src/Makefile EXTRA_PARAMS="-DEFI_BOOTLOADER -DSTM32F405xx -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DBOARD_TLE8888_COUNT=0 -DBOARD_TLE6240_COUNT=0 -DBOARD_MC33972_COUNT=0" diff --git a/firmware/bootloader/src/Makefile b/firmware/bootloader/src/Makefile index d02d73971b..500411fc8e 100644 --- a/firmware/bootloader/src/Makefile +++ b/firmware/bootloader/src/Makefile @@ -169,6 +169,7 @@ CSRC = $(STARTUPSRC) \ CPPSRC = $(CHCPPSRC) \ $(DEV_SRC_CPP) \ $(BOARDSRC_CPP) \ + $(HW_LAYER_EMS_CPP) \ $(HW_SENSORS_SRC) \ $(TUNERSTUDIO_SRC_CPP) \ $(CONSOLE_SRC_CPP) \ From 43f3ab76242ad19dcd9a8e3250bfcf0609541ddc Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 14 Mar 2020 06:13:38 -0700 Subject: [PATCH 132/171] Multispark configuration (#1190) * multispark * scaling, units * hide in "broken stuff" menu for now Co-authored-by: Matthew Kennedy --- firmware/integration/rusefi_config.txt | 9 ++++++--- firmware/tunerstudio/rusefi.input | 21 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 6cf39c0c29..d9342223a5 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -750,11 +750,13 @@ custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:7], @@maf_sensor_type_e_enum@ switch_input_pin_e clutchUpPin;Some vehicles have a switch to indicate that clutch pedal is all the way up brain_input_pin_e frequencyReportingMapInputPin; pin_input_mode_e clutchUpPinMode; - float unused + uint16_t multisparkMaxRpm;;"rpm", 1, 0, 0, 3000, 0 + uint8_t multisparkMaxSparkingAngle;;"deg", 1, 0, 0, 60, 0 + uint8_t multisparkMaxExtraSparkCount;;"count", 1, 0, 0, 5, 0 bit todoClutchUpPinInverted bit todoClutchDownPinInverted bit useHbridges - bit unusedBit_251_3 + bit multisparkEnable bit unusedBit_251_4 bit unusedBit_251_5 bit unusedBit_251_6 @@ -947,7 +949,8 @@ int16_t tps2Max;Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!\ ! todo: mapErrorDetectionIdleTooLow? 30kPa is usually lowest on idle float mapErrorDetectionTooLow;kPa value which is too low to be true;"kPa", 1, 0, -100.0, 100.0, 2 float mapErrorDetectionTooHigh;kPa value which is too high to be true;"kPa", 1, 0, -100.0, 800.0, 2 - uint8_t[4] unusedSomething; + uint16_t multisparkSparkDuration;; "ms", 0.001, 0, 0, 3, 2 + uint16_t multisparkDwell;; "ms", 0.001, 0, 0, 3, 2 pid_s idleRpmPid;See cltIdleRpmBins float wwaeBeta;+0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. ;"Fraction", 1, 0, 0.0, 1.0, 2 diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index d5e8cf3924..a5622ea191 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1206,6 +1206,8 @@ menuDialog = main subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} + ; todo: once proven, uncomment and remove from the "broken" menu + ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} @@ -1323,6 +1325,7 @@ menuDialog = main # EXPERIMENTAL FEATURES subMenu = parkingLot, "Experimental/Broken" + subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = hipFunction, "HIP9011 settings (knock sensor) (alpha version)" @@if_ts_show_hip9011 @@ -1602,7 +1605,23 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - + + dialog = multisparkDwellParams, "Delay & Dwell" + field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} + field = "Dwell", multisparkDwell, {multisparkEnable} + + dialog = multisparkMain, "Configuration" + field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} + field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} + field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} + + dialog = multisparkSettings, "Multispark" + field = "#WARNING! These settings have the potential to overheat ignition components" + field = "#and cause other nasty misbehavior. Use with care, at your own risk!" + field = "Enable Multiple Sparks", multisparkEnable + panel = multisparkMain + panel = multisparkDwellParams + dialog = dwellSettings, "", yAxis panel = dwellCorrection, Center From 93e77c9ccf475064ac6a60e5d1cd6686d4248644 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 14 Mar 2020 09:18:25 -0400 Subject: [PATCH 133/171] fresh config --- ...ngine_configuration_generated_structures.h | 26 +++++-- .../controllers/algo/rusefi_generated.h | 26 ++++--- ...ngine_configuration_generated_structures.h | 26 +++++-- .../controllers/generated/rusefi_generated.h | 26 ++++--- firmware/tunerstudio/rusefi.ini | 36 ++++++++-- firmware/tunerstudio/rusefi_frankenso.ini | 36 ++++++++-- firmware/tunerstudio/rusefi_kinetis.ini | 68 +++++++++++++------ firmware/tunerstudio/rusefi_microrusefi.ini | 36 ++++++++-- firmware/tunerstudio/rusefi_prometheus.ini | 36 ++++++++-- firmware/tunerstudio/rusefi_proteus.ini | 36 ++++++++-- .../com/rusefi/config/generated/Fields.java | 39 +++++++---- 11 files changed, 286 insertions(+), 105 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index c36de4c427..f383827793 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:27:30 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Mar 14 09:14:27 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1576,7 +1576,15 @@ struct engine_configuration_s { /** * offset 972 */ - float unused; + uint16_t multisparkMaxRpm; + /** + * offset 974 + */ + uint8_t multisparkMaxSparkingAngle; + /** + * offset 975 + */ + uint8_t multisparkMaxExtraSparkCount; /** offset 976 bit 0 */ bool todoClutchUpPinInverted : 1; @@ -1588,7 +1596,7 @@ struct engine_configuration_s { bool useHbridges : 1; /** offset 976 bit 3 */ - bool unusedBit_251_3 : 1; + bool multisparkEnable : 1; /** offset 976 bit 4 */ bool unusedBit_251_4 : 1; @@ -1669,10 +1677,10 @@ struct engine_configuration_s { bool unusedBit_251_29 : 1; /** offset 976 bit 30 */ - bool unusedBit_278_30 : 1; + bool unusedBit_280_30 : 1; /** offset 976 bit 31 */ - bool unusedBit_278_31 : 1; + bool unusedBit_280_31 : 1; /** * offset 980 */ @@ -2155,7 +2163,11 @@ struct engine_configuration_s { /** * offset 1784 */ - uint8_t unusedSomething[4]; + uint16_t multisparkSparkDuration; + /** + * offset 1786 + */ + uint16_t multisparkDwell; /** * See cltIdleRpmBins * offset 1788 @@ -3216,4 +3228,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Mon Mar 09 19:27:30 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Mar 14 09:14:27 EDT 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index aa65a403e6..d89f3b95d3 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1581,6 +1581,18 @@ #define MOCK_PPS_POSITION_COMMAND "mock_pps_position" #define MOCK_PPS_VOLTAGE_COMMAND "mock_pps_voltage" #define MOCK_TPS_COMMAND "mock_tps_voltage" +#define multisparkDwell_offset 1786 +#define multisparkDwell_offset_hex 6fa +#define multisparkEnable_offset 976 +#define multisparkEnable_offset_hex 3d0 +#define multisparkMaxExtraSparkCount_offset 975 +#define multisparkMaxExtraSparkCount_offset_hex 3cf +#define multisparkMaxRpm_offset 972 +#define multisparkMaxRpm_offset_hex 3cc +#define multisparkMaxSparkingAngle_offset 974 +#define multisparkMaxSparkingAngle_offset_hex 3ce +#define multisparkSparkDuration_offset 1784 +#define multisparkSparkDuration_offset_hex 6f8 #define NARROW_BAND_WIDE_BAND_CONVERSION_SIZE 8 #define narrowToWideOxygen_offset 2296 #define narrowToWideOxygen_offset_hex 8f8 @@ -2065,8 +2077,6 @@ #define unused_1484_bit_31_offset_hex 5c4 #define unused_former_warmup_target_afr_offset 2096 #define unused_former_warmup_target_afr_offset_hex 830 -#define unused_offset 972 -#define unused_offset_hex 3cc #define unusedAtOldBoardConfigurationEnd_offset 1052 #define unusedAtOldBoardConfigurationEnd_offset_hex 41c #define unusedBit4_1476_offset 1476 @@ -2111,8 +2121,6 @@ #define unusedBit_251_28_offset_hex 3d0 #define unusedBit_251_29_offset 976 #define unusedBit_251_29_offset_hex 3d0 -#define unusedBit_251_3_offset 976 -#define unusedBit_251_3_offset_hex 3d0 #define unusedBit_251_4_offset 976 #define unusedBit_251_4_offset_hex 3d0 #define unusedBit_251_5_offset 976 @@ -2125,10 +2133,10 @@ #define unusedBit_251_8_offset_hex 3d0 #define unusedBit_251_9_offset 976 #define unusedBit_251_9_offset_hex 3d0 -#define unusedBit_278_30_offset 976 -#define unusedBit_278_30_offset_hex 3d0 -#define unusedBit_278_31_offset 976 -#define unusedBit_278_31_offset_hex 3d0 +#define unusedBit_280_30_offset 976 +#define unusedBit_280_30_offset_hex 3d0 +#define unusedBit_280_31_offset 976 +#define unusedBit_280_31_offset_hex 3d0 #define unusedBit_34_31_offset 76 #define unusedBit_34_31_offset_hex 4c #define unusedErrorPin_offset 2040 @@ -2145,8 +2153,6 @@ #define unusedmiataNb2VVTRatioTo_offset_hex 338 #define unusedOldWarmupAfr_offset 744 #define unusedOldWarmupAfr_offset_hex 2e8 -#define unusedSomething_offset 1784 -#define unusedSomething_offset_hex 6f8 #define unusedSpiPadding4_offset 2593 #define unusedSpiPadding4_offset_hex a21 #define unusedSpiPadding5_offset 2713 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index df5549b236..cd6ff908dd 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:17 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:04 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1576,7 +1576,15 @@ struct engine_configuration_s { /** * offset 972 */ - float unused; + uint16_t multisparkMaxRpm; + /** + * offset 974 + */ + uint8_t multisparkMaxSparkingAngle; + /** + * offset 975 + */ + uint8_t multisparkMaxExtraSparkCount; /** offset 976 bit 0 */ bool todoClutchUpPinInverted : 1; @@ -1588,7 +1596,7 @@ struct engine_configuration_s { bool useHbridges : 1; /** offset 976 bit 3 */ - bool unusedBit_251_3 : 1; + bool multisparkEnable : 1; /** offset 976 bit 4 */ bool unusedBit_251_4 : 1; @@ -1669,10 +1677,10 @@ struct engine_configuration_s { bool unusedBit_251_29 : 1; /** offset 976 bit 30 */ - bool unusedBit_278_30 : 1; + bool unusedBit_280_30 : 1; /** offset 976 bit 31 */ - bool unusedBit_278_31 : 1; + bool unusedBit_280_31 : 1; /** * offset 980 */ @@ -2155,7 +2163,11 @@ struct engine_configuration_s { /** * offset 1784 */ - uint8_t unusedSomething[4]; + uint16_t multisparkSparkDuration; + /** + * offset 1786 + */ + uint16_t multisparkDwell; /** * See cltIdleRpmBins * offset 1788 @@ -3216,4 +3228,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Mon Mar 09 19:26:17 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:04 EDT 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 14c875bc64..d1b1375170 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1581,6 +1581,18 @@ #define MOCK_PPS_POSITION_COMMAND "mock_pps_position" #define MOCK_PPS_VOLTAGE_COMMAND "mock_pps_voltage" #define MOCK_TPS_COMMAND "mock_tps_voltage" +#define multisparkDwell_offset 1786 +#define multisparkDwell_offset_hex 6fa +#define multisparkEnable_offset 976 +#define multisparkEnable_offset_hex 3d0 +#define multisparkMaxExtraSparkCount_offset 975 +#define multisparkMaxExtraSparkCount_offset_hex 3cf +#define multisparkMaxRpm_offset 972 +#define multisparkMaxRpm_offset_hex 3cc +#define multisparkMaxSparkingAngle_offset 974 +#define multisparkMaxSparkingAngle_offset_hex 3ce +#define multisparkSparkDuration_offset 1784 +#define multisparkSparkDuration_offset_hex 6f8 #define NARROW_BAND_WIDE_BAND_CONVERSION_SIZE 8 #define narrowToWideOxygen_offset 2296 #define narrowToWideOxygen_offset_hex 8f8 @@ -2065,8 +2077,6 @@ #define unused_1484_bit_31_offset_hex 5c4 #define unused_former_warmup_target_afr_offset 2096 #define unused_former_warmup_target_afr_offset_hex 830 -#define unused_offset 972 -#define unused_offset_hex 3cc #define unusedAtOldBoardConfigurationEnd_offset 1052 #define unusedAtOldBoardConfigurationEnd_offset_hex 41c #define unusedBit4_1476_offset 1476 @@ -2111,8 +2121,6 @@ #define unusedBit_251_28_offset_hex 3d0 #define unusedBit_251_29_offset 976 #define unusedBit_251_29_offset_hex 3d0 -#define unusedBit_251_3_offset 976 -#define unusedBit_251_3_offset_hex 3d0 #define unusedBit_251_4_offset 976 #define unusedBit_251_4_offset_hex 3d0 #define unusedBit_251_5_offset 976 @@ -2125,10 +2133,10 @@ #define unusedBit_251_8_offset_hex 3d0 #define unusedBit_251_9_offset 976 #define unusedBit_251_9_offset_hex 3d0 -#define unusedBit_278_30_offset 976 -#define unusedBit_278_30_offset_hex 3d0 -#define unusedBit_278_31_offset 976 -#define unusedBit_278_31_offset_hex 3d0 +#define unusedBit_280_30_offset 976 +#define unusedBit_280_30_offset_hex 3d0 +#define unusedBit_280_31_offset 976 +#define unusedBit_280_31_offset_hex 3d0 #define unusedBit_34_31_offset 76 #define unusedBit_34_31_offset_hex 4c #define unusedErrorPin_offset 2040 @@ -2145,8 +2153,6 @@ #define unusedmiataNb2VVTRatioTo_offset_hex 338 #define unusedOldWarmupAfr_offset 744 #define unusedOldWarmupAfr_offset_hex 2e8 -#define unusedSomething_offset 1784 -#define unusedSomething_offset_hex 6f8 #define unusedSpiPadding4_offset 2593 #define unusedSpiPadding4_offset_hex a21 #define unusedSpiPadding5_offset 2713 diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index d6c2deff39..f5d5bb9f4c 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:28 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:04 EDT 2020 pageSize = 20000 page = 1 @@ -532,11 +532,13 @@ page = 1 clutchUpPin = bits, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 -;no TS info - skipping unused offset 972 + multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 + multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 + multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" useHbridges = bits, U32, 976, [2:2], "false", "true" - unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + multisparkEnable = bits, U32, 976, [3:3], "false", "true" unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" @@ -563,8 +565,8 @@ page = 1 unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" + unusedBit_280_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_280_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -726,7 +728,8 @@ page = 1 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 -;no TS info - skipping unusedSomething offset 1784 + multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 + multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 @@ -2330,6 +2333,8 @@ menuDialog = main subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} + ; todo: once proven, uncomment and remove from the "broken" menu + ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} @@ -2447,6 +2452,7 @@ menuDialog = main # EXPERIMENTAL FEATURES subMenu = parkingLot, "Experimental/Broken" + subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = hipFunction, "HIP9011 settings (knock sensor) (alpha version)" @@ -2726,7 +2732,23 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - + + dialog = multisparkDwellParams, "Delay & Dwell" + field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} + field = "Dwell", multisparkDwell, {multisparkEnable} + + dialog = multisparkMain, "Configuration" + field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} + field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} + field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} + + dialog = multisparkSettings, "Multispark" + field = "#WARNING! These settings have the potential to overheat ignition components" + field = "#and cause other nasty misbehavior. Use with care, at your own risk!" + field = "Enable Multiple Sparks", multisparkEnable + panel = multisparkMain + panel = multisparkDwellParams + dialog = dwellSettings, "", yAxis panel = dwellCorrection, Center diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 2af3652c55..c7930011b2 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:35 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:14 EDT 2020 pageSize = 20000 page = 1 @@ -532,11 +532,13 @@ page = 1 clutchUpPin = bits, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 -;no TS info - skipping unused offset 972 + multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 + multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 + multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" useHbridges = bits, U32, 976, [2:2], "false", "true" - unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + multisparkEnable = bits, U32, 976, [3:3], "false", "true" unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" @@ -563,8 +565,8 @@ page = 1 unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" + unusedBit_280_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_280_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -726,7 +728,8 @@ page = 1 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 -;no TS info - skipping unusedSomething offset 1784 + multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 + multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 @@ -2330,6 +2333,8 @@ menuDialog = main subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} + ; todo: once proven, uncomment and remove from the "broken" menu + ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} @@ -2447,6 +2452,7 @@ menuDialog = main # EXPERIMENTAL FEATURES subMenu = parkingLot, "Experimental/Broken" + subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = hipFunction, "HIP9011 settings (knock sensor) (alpha version)" @@ -2726,7 +2732,23 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - + + dialog = multisparkDwellParams, "Delay & Dwell" + field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} + field = "Dwell", multisparkDwell, {multisparkEnable} + + dialog = multisparkMain, "Configuration" + field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} + field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} + field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} + + dialog = multisparkSettings, "Multispark" + field = "#WARNING! These settings have the potential to overheat ignition components" + field = "#and cause other nasty misbehavior. Use with care, at your own risk!" + field = "Enable Multiple Sparks", multisparkEnable + panel = multisparkMain + panel = multisparkDwellParams + dialog = dwellSettings, "", yAxis panel = dwellCorrection, Center diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index a32e8316f8..86983f67f3 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 10 18:46:23 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Mar 14 09:14:27 EDT 2020 pageSize = 20000 page = 1 @@ -532,11 +532,13 @@ page = 1 clutchUpPin = bits, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 -;no TS info - skipping unused offset 972 + multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 + multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 + multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" useHbridges = bits, U32, 976, [2:2], "false", "true" - unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + multisparkEnable = bits, U32, 976, [3:3], "false", "true" unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" @@ -563,8 +565,8 @@ page = 1 unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" + unusedBit_280_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_280_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" @@ -726,7 +728,8 @@ page = 1 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 -;no TS info - skipping unusedSomething offset 1784 + multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 + multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 @@ -1483,22 +1486,21 @@ fileVersion = { 20200310 } enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" enableLogErrorList = bits, U08, [0:0], "Yes", "No" -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" +; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters ETB PID TLE8888 Boost + debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "", "Channel 1 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "", "", "", "", "", "", "", "", "", "", "", "", "", "Open Loop Duty", "" + debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "", "Channel 2 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "", "", "", "", "", "", "", "", "", "", "", "", "", "Closed Loop Duty","" + debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "", "Channel 3 Rise Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB Previous Error", "", "", "df3", "df3", "22df3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df4", "", "", "df4", "df4", "22df4", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "df5", "df5", "df5", "", "", "", "", "", "", "", "", "", "", "ETB df5", "df5", "df5", "df5", "df5", "22df5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" + debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Transmit", "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Latest Received", "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22", "", "", "", "", "", "", "", "", "SPI Counter", "", "", "", "", "", "" + debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "", "Channel 3 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22", "", "", "", "", "", "", "", "", "Latest Transmit","", "", "", "", "", "" + debugFieldI3List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22", "", "", "", "", "", "", "", "", "Latest Received","", "", "", "", "", "" + debugFieldI4List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22", "", "", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "" + debugFieldI5List = bits, U08, [0:7], "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5" [ConstantsExtensions] defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 @@ -2052,6 +2054,7 @@ gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 @@ -2330,6 +2333,8 @@ menuDialog = main subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} + ; todo: once proven, uncomment and remove from the "broken" menu + ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} @@ -2447,6 +2452,7 @@ menuDialog = main # EXPERIMENTAL FEATURES subMenu = parkingLot, "Experimental/Broken" + subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = hipFunction, "HIP9011 settings (knock sensor) (alpha version)" @@ -2726,7 +2732,23 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - + + dialog = multisparkDwellParams, "Delay & Dwell" + field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} + field = "Dwell", multisparkDwell, {multisparkEnable} + + dialog = multisparkMain, "Configuration" + field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} + field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} + field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} + + dialog = multisparkSettings, "Multispark" + field = "#WARNING! These settings have the potential to overheat ignition components" + field = "#and cause other nasty misbehavior. Use with care, at your own risk!" + field = "Enable Multiple Sparks", multisparkEnable + panel = multisparkMain + panel = multisparkDwellParams + dialog = dwellSettings, "", yAxis panel = dwellCorrection, Center @@ -2770,6 +2792,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Throttle1 2nd position sensor", tps1_2AdcChannel field = "Throttle2 position sensor", tps2_1AdcChannel field = "Throttle2 2nd position sensor", tps2_2AdcChannel + field = "Throttle2 min value", tps2Min + field = "Throttle2 max value", tps2Max field = "TPS low value detection threshold", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} field = "TPS high value detection threshold", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 34e7be467c..39c9a4fe6b 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:31 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:09 EDT 2020 pageSize = 20000 page = 1 @@ -532,11 +532,13 @@ page = 1 clutchUpPin = bits, U08, 969, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 -;no TS info - skipping unused offset 972 + multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 + multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 + multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" useHbridges = bits, U32, 976, [2:2], "false", "true" - unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + multisparkEnable = bits, U32, 976, [3:3], "false", "true" unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" @@ -563,8 +565,8 @@ page = 1 unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" + unusedBit_280_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_280_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -726,7 +728,8 @@ page = 1 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 -;no TS info - skipping unusedSomething offset 1784 + multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 + multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 @@ -2330,6 +2333,8 @@ menuDialog = main subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} + ; todo: once proven, uncomment and remove from the "broken" menu + ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} @@ -2441,6 +2446,7 @@ menuDialog = main # EXPERIMENTAL FEATURES subMenu = parkingLot, "Experimental/Broken" + subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = std_separator @@ -2719,7 +2725,23 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - + + dialog = multisparkDwellParams, "Delay & Dwell" + field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} + field = "Dwell", multisparkDwell, {multisparkEnable} + + dialog = multisparkMain, "Configuration" + field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} + field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} + field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} + + dialog = multisparkSettings, "Multispark" + field = "#WARNING! These settings have the potential to overheat ignition components" + field = "#and cause other nasty misbehavior. Use with care, at your own risk!" + field = "Enable Multiple Sparks", multisparkEnable + panel = multisparkMain + panel = multisparkDwellParams + dialog = dwellSettings, "", yAxis panel = dwellCorrection, Center diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 4b4ae95ebf..a284933d8d 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:38 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:19 EDT 2020 pageSize = 20000 page = 1 @@ -532,11 +532,13 @@ page = 1 clutchUpPin = bits, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 -;no TS info - skipping unused offset 972 + multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 + multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 + multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" useHbridges = bits, U32, 976, [2:2], "false", "true" - unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + multisparkEnable = bits, U32, 976, [3:3], "false", "true" unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" @@ -563,8 +565,8 @@ page = 1 unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" + unusedBit_280_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_280_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -726,7 +728,8 @@ page = 1 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 -;no TS info - skipping unusedSomething offset 1784 + multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 + multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 @@ -2330,6 +2333,8 @@ menuDialog = main subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} + ; todo: once proven, uncomment and remove from the "broken" menu + ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} @@ -2447,6 +2452,7 @@ menuDialog = main # EXPERIMENTAL FEATURES subMenu = parkingLot, "Experimental/Broken" + subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = std_separator @@ -2722,7 +2728,23 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - + + dialog = multisparkDwellParams, "Delay & Dwell" + field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} + field = "Dwell", multisparkDwell, {multisparkEnable} + + dialog = multisparkMain, "Configuration" + field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} + field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} + field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} + + dialog = multisparkSettings, "Multispark" + field = "#WARNING! These settings have the potential to overheat ignition components" + field = "#and cause other nasty misbehavior. Use with care, at your own risk!" + field = "Enable Multiple Sparks", multisparkEnable + panel = multisparkMain + panel = multisparkDwellParams + dialog = dwellSettings, "", yAxis panel = dwellCorrection, Center diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 61c24bca5a..f5a8a18c1f 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 13 02:21:42 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:23 EDT 2020 pageSize = 20000 page = 1 @@ -532,11 +532,13 @@ page = 1 clutchUpPin = bits, U08, 969, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 -;no TS info - skipping unused offset 972 + multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 + multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 + multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" useHbridges = bits, U32, 976, [2:2], "false", "true" - unusedBit_251_3 = bits, U32, 976, [3:3], "false", "true" + multisparkEnable = bits, U32, 976, [3:3], "false", "true" unusedBit_251_4 = bits, U32, 976, [4:4], "false", "true" unusedBit_251_5 = bits, U32, 976, [5:5], "false", "true" unusedBit_251_6 = bits, U32, 976, [6:6], "false", "true" @@ -563,8 +565,8 @@ page = 1 unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_278_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_278_31 = bits, U32, 976, [31:31], "false", "true" + unusedBit_280_30 = bits, U32, 976, [30:30], "false", "true" + unusedBit_280_31 = bits, U32, 976, [31:31], "false", "true" etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -726,7 +728,8 @@ page = 1 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 -;no TS info - skipping unusedSomething offset 1784 + multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 + multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 @@ -2330,6 +2333,8 @@ menuDialog = main subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} + ; todo: once proven, uncomment and remove from the "broken" menu + ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} @@ -2441,6 +2446,7 @@ menuDialog = main # EXPERIMENTAL FEATURES subMenu = parkingLot, "Experimental/Broken" + subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator subMenu = std_separator @@ -2719,7 +2725,23 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - + + dialog = multisparkDwellParams, "Delay & Dwell" + field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} + field = "Dwell", multisparkDwell, {multisparkEnable} + + dialog = multisparkMain, "Configuration" + field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} + field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} + field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} + + dialog = multisparkSettings, "Multispark" + field = "#WARNING! These settings have the potential to overheat ignition components" + field = "#and cause other nasty misbehavior. Use with care, at your own risk!" + field = "Enable Multiple Sparks", multisparkEnable + panel = multisparkMain + panel = multisparkDwellParams + dialog = dwellSettings, "", yAxis panel = dwellCorrection, Center diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 6abbef8599..7a861b264c 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 10 18:46:05 EDT 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:04 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1042,6 +1042,12 @@ public class Fields { public static final String MOCK_PPS_POSITION_COMMAND = "mock_pps_position"; public static final String MOCK_PPS_VOLTAGE_COMMAND = "mock_pps_voltage"; public static final String MOCK_TPS_COMMAND = "mock_tps_voltage"; + public static final int multisparkDwell_offset = 1786; + public static final int multisparkEnable_offset = 976; + public static final int multisparkMaxExtraSparkCount_offset = 975; + public static final int multisparkMaxRpm_offset = 972; + public static final int multisparkMaxSparkingAngle_offset = 974; + public static final int multisparkSparkDuration_offset = 1784; public static final int NARROW_BAND_WIDE_BAND_CONVERSION_SIZE = 8; public static final int narrowToWideOxygen_offset = 2296; public static final int narrowToWideOxygenBins_offset = 2264; @@ -1364,7 +1370,6 @@ public class Fields { public static final int unused_1484_bit_31_offset = 1476; public static final int unused_former_warmup_target_afr_offset = 2096; public static final int unused_former_warmup_target_afr_offset_hex = 830; - public static final int unused_offset = 972; public static final int unusedAtOldBoardConfigurationEnd_offset = 1052; public static final int unusedBit4_1476_offset = 1476; public static final int unusedBit_251_10_offset = 976; @@ -1387,15 +1392,14 @@ public class Fields { public static final int unusedBit_251_27_offset = 976; public static final int unusedBit_251_28_offset = 976; public static final int unusedBit_251_29_offset = 976; - public static final int unusedBit_251_3_offset = 976; public static final int unusedBit_251_4_offset = 976; public static final int unusedBit_251_5_offset = 976; public static final int unusedBit_251_6_offset = 976; public static final int unusedBit_251_7_offset = 976; public static final int unusedBit_251_8_offset = 976; public static final int unusedBit_251_9_offset = 976; - public static final int unusedBit_278_30_offset = 976; - public static final int unusedBit_278_31_offset = 976; + public static final int unusedBit_280_30_offset = 976; + public static final int unusedBit_280_31_offset = 976; public static final int unusedBit_34_31_offset = 76; public static final int unusedErrorPin_offset = 2040; public static final int unusedFlexFuelSensor_offset = 3100; @@ -1406,7 +1410,6 @@ public class Fields { public static final int unusedmiataNb2VVTRatioTo_offset = 824; public static final int unusedmiataNb2VVTRatioTo_offset_hex = 338; public static final int unusedOldWarmupAfr_offset = 744; - public static final int unusedSomething_offset = 1784; public static final int unusedSpiPadding4_offset = 2593; public static final int unusedSpiPadding5_offset = 2713; public static final int unusedSpiPadding7_offset = 4005; @@ -1919,11 +1922,13 @@ public class Fields { public static final Field CLUTCHUPPIN = Field.create("CLUTCHUPPIN", 969, FieldType.INT8, switch_input_pin_e); public static final Field FREQUENCYREPORTINGMAPINPUTPIN = Field.create("FREQUENCYREPORTINGMAPINPUTPIN", 970, FieldType.INT8, brain_input_pin_e); public static final Field CLUTCHUPPINMODE = Field.create("CLUTCHUPPINMODE", 971, FieldType.INT8); - public static final Field UNUSED = Field.create("UNUSED", 972, FieldType.FLOAT); + public static final Field MULTISPARKMAXRPM = Field.create("MULTISPARKMAXRPM", 972, FieldType.INT16); + public static final Field MULTISPARKMAXSPARKINGANGLE = Field.create("MULTISPARKMAXSPARKINGANGLE", 974, FieldType.INT8); + public static final Field MULTISPARKMAXEXTRASPARKCOUNT = Field.create("MULTISPARKMAXEXTRASPARKCOUNT", 975, FieldType.INT8); public static final Field TODOCLUTCHUPPININVERTED = Field.create("TODOCLUTCHUPPININVERTED", 976, FieldType.BIT, 0); public static final Field TODOCLUTCHDOWNPININVERTED = Field.create("TODOCLUTCHDOWNPININVERTED", 976, FieldType.BIT, 1); public static final Field USEHBRIDGES = Field.create("USEHBRIDGES", 976, FieldType.BIT, 2); - public static final Field UNUSEDBIT_251_3 = Field.create("UNUSEDBIT_251_3", 976, FieldType.BIT, 3); + public static final Field MULTISPARKENABLE = Field.create("MULTISPARKENABLE", 976, FieldType.BIT, 3); public static final Field UNUSEDBIT_251_4 = Field.create("UNUSEDBIT_251_4", 976, FieldType.BIT, 4); public static final Field UNUSEDBIT_251_5 = Field.create("UNUSEDBIT_251_5", 976, FieldType.BIT, 5); public static final Field UNUSEDBIT_251_6 = Field.create("UNUSEDBIT_251_6", 976, FieldType.BIT, 6); @@ -1950,8 +1955,8 @@ public class Fields { public static final Field UNUSEDBIT_251_27 = Field.create("UNUSEDBIT_251_27", 976, FieldType.BIT, 27); public static final Field UNUSEDBIT_251_28 = Field.create("UNUSEDBIT_251_28", 976, FieldType.BIT, 28); public static final Field UNUSEDBIT_251_29 = Field.create("UNUSEDBIT_251_29", 976, FieldType.BIT, 29); - public static final Field UNUSEDBIT_278_30 = Field.create("UNUSEDBIT_278_30", 976, FieldType.BIT, 30); - public static final Field UNUSEDBIT_278_31 = Field.create("UNUSEDBIT_278_31", 976, FieldType.BIT, 31); + public static final Field UNUSEDBIT_280_30 = Field.create("UNUSEDBIT_280_30", 976, FieldType.BIT, 30); + public static final Field UNUSEDBIT_280_31 = Field.create("UNUSEDBIT_280_31", 976, FieldType.BIT, 31); public static final Field ETBIO1_DIRECTIONPIN1 = Field.create("ETBIO1_DIRECTIONPIN1", 980, FieldType.INT8, brain_pin_e); public static final Field ETBIO1_DIRECTIONPIN2 = Field.create("ETBIO1_DIRECTIONPIN2", 981, FieldType.INT8, brain_pin_e); public static final Field ETBIO1_CONTROLPIN1 = Field.create("ETBIO1_CONTROLPIN1", 982, FieldType.INT8, brain_pin_e); @@ -2109,6 +2114,8 @@ public class Fields { public static final Field TACHPULSEPERREV = Field.create("TACHPULSEPERREV", 1775, FieldType.INT8); public static final Field MAPERRORDETECTIONTOOLOW = Field.create("MAPERRORDETECTIONTOOLOW", 1776, FieldType.FLOAT); public static final Field MAPERRORDETECTIONTOOHIGH = Field.create("MAPERRORDETECTIONTOOHIGH", 1780, FieldType.FLOAT); + public static final Field MULTISPARKSPARKDURATION = Field.create("MULTISPARKSPARKDURATION", 1784, FieldType.INT16); + public static final Field MULTISPARKDWELL = Field.create("MULTISPARKDWELL", 1786, FieldType.INT16); public static final Field IDLERPMPID_PFACTOR = Field.create("IDLERPMPID_PFACTOR", 1788, FieldType.FLOAT); public static final Field IDLERPMPID_IFACTOR = Field.create("IDLERPMPID_IFACTOR", 1792, FieldType.FLOAT); public static final Field IDLERPMPID_DFACTOR = Field.create("IDLERPMPID_DFACTOR", 1796, FieldType.FLOAT); @@ -2815,11 +2822,13 @@ public class Fields { CLUTCHUPPIN, FREQUENCYREPORTINGMAPINPUTPIN, CLUTCHUPPINMODE, - UNUSED, + MULTISPARKMAXRPM, + MULTISPARKMAXSPARKINGANGLE, + MULTISPARKMAXEXTRASPARKCOUNT, TODOCLUTCHUPPININVERTED, TODOCLUTCHDOWNPININVERTED, USEHBRIDGES, - UNUSEDBIT_251_3, + MULTISPARKENABLE, UNUSEDBIT_251_4, UNUSEDBIT_251_5, UNUSEDBIT_251_6, @@ -2846,8 +2855,8 @@ public class Fields { UNUSEDBIT_251_27, UNUSEDBIT_251_28, UNUSEDBIT_251_29, - UNUSEDBIT_278_30, - UNUSEDBIT_278_31, + UNUSEDBIT_280_30, + UNUSEDBIT_280_31, ETBIO1_DIRECTIONPIN1, ETBIO1_DIRECTIONPIN2, ETBIO1_CONTROLPIN1, @@ -3003,6 +3012,8 @@ public class Fields { TACHPULSEPERREV, MAPERRORDETECTIONTOOLOW, MAPERRORDETECTIONTOOHIGH, + MULTISPARKSPARKDURATION, + MULTISPARKDWELL, IDLERPMPID_PFACTOR, IDLERPMPID_IFACTOR, IDLERPMPID_DFACTOR, From 76303476ca95c73d68620c68de538391f9f372ea Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 14 Mar 2020 11:14:14 -0400 Subject: [PATCH 134/171] progress! --- hardware/breakout_55_pin/55_pin_drawing.pdf | Bin 0 -> 165232 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 hardware/breakout_55_pin/55_pin_drawing.pdf diff --git a/hardware/breakout_55_pin/55_pin_drawing.pdf b/hardware/breakout_55_pin/55_pin_drawing.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e2127e478b4350e921af1df5108990130e903e9c GIT binary patch literal 165232 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
Rh6^H83v?o#A|pY!OeHJVt8=3Fc2WP zo9lOI5w+DM;DDn7~M0`O}Ul>%)93wYS6?XliTtW0Uh(vj!Q7ae$ zNgvQ*rlhba&0tuz=OCoMj&b=zO#1{e#Neq#ul|2EHg0Vq&Uh*&QeeQA;d(XZVqkd2 zsNwTKEynAc7;oHZvFcxZQJfgVti{-84WBsjwJ6YHNHA|Ao%Xtok^Rs5Fj8E2Gv>x= z!K{TAd;=i{nT~CU&on{2Z^UV6?9Pwl41BrVNobw)hl~92$B@J6tOMMiTaG$KBSy`x3QnyNtXx0vv<)VyRTB@cb)x)3%`6O>BOFK^bMwClvjNF?TR73D?AKXgMho< z%EaJ@+oR(7EhD=q{c%KMI0JiBUi1@UOPMt_asOu^RUW>s= z^TMcaWbEOqdb;}NcZW(c`d!a9^8$g%F-!$$reZ3}e7nD6*3XVzyqH4pkHTmQti1;ewV zfrq|xc<9?6rxa^I6!)6P0EV`XFL>%>k)m#10|3LBhp^744M0U2J=g&WA z+4W@(dYRSD9OOjDn8+Ph;U0DJj>~JucR?a>m4cU~;MtMdJB?Q>2?rEbjq zu2XJx!NZ90tpa^yGdhUcT`(_YftnqIU2Cyg8z^@Vt02ZLDvO3$X>;{>Obg$9mC<&G zt27dVA>+LV)@0;fk6#W>`;Qn>N#~ov5TtsrZu z2UbaanDVN?>2$?r2XpDbCm2S2Nl5C5yE<# zB!5*NiS{b~)!2zP&>8KO18t|_O%^X_gaIuV&iuu|;9RWF6uG!(0MsH7!wi^OWHOGI zelY2Ew40m{5yko{MP3$u8W7)-yn7!NdVR5xOGU+`z)6=4SEcXguE|csOqr?nlIV_F zB)p*xx4w?tU-00Iy#~NJ@MO)x4XVCuBA2j`n$Wgb4?HUrwhq>U(CR>&QUmP)<7s>k zGqlI3)>=K{Ve5X(V<4Ma?N2}Y3lu*_ zM9{9T7f@zE-(U|J9=p6cGwi=2!SVE|cGwHb3n^aL2U+o!28UkoCk1zlJ7+~73FcCu z1h!y{1)CAvS}|?Y@I}=V-WS~AQNLJIjV35q!mqb28(3=NlY|Wv^%j(7cy(}xM*w4) zF+Q+q8=wsG0gq}noYd^_P~Qfl-Cd^na|A7DW~mGe_Aye-!`tI_-byw5sn`o+1%s!a zh+i13YRp?;PAf~*a-!MKnYKTMXk`79{sln=`8+&CHM#0C`ZLlGnwK5#Yp_0ea=L_P zrIQ{?4$THbjNi{OD&NHfOn#X!* z%$sOUG{=z`x08UG`9&87Dw@+OJa^~!J;`5d`cbv#kY1Bq$EiUF)f_4l3|P~hV|Gx{ z^&pH`OesE-D^^MY!h^&~EPevafK&4rxbom3;}l+3H!m^uVn$wD9s}WB zQnke>k{QauDL8nnvG}U!5gQ$7Hg4Gbl!RRf(J9BvF^HQvE63g02B?ykgHXeh5ZBxI zQ#@U{bUMY!KzImrxW9v0&GnYH$G)h~4-dyCs^o$bo)n#%at6ymil;_e z&g`PNNMzXbC$z8a2@ej2#nEyo9def29=C}$K8=Sb9cMfbFJR}&HcvIe6NY<=&sl4p zAc^)rSiWyP110e}Vx{Lo~6C80zQ+x|=(5x{ZOxd~4+pQe&U`BH&9i8)J11msuTCBLR+s0Qu#f9DTxLgA{7au3> zzNGAqD~jdp{mNOsTeRL_49j*`Qt{dEk@SDaEI#qmC9H*bWvqe2O}1d}52^G+K`AA?4b@en)d_!EtJ| z(uK#Dk%Ig6;ppfZ9$?NhDBhaK4u*4wa^SHY^|}q`VmqF8;d8^Dv+k#P3$AD3dEoeT zYHl!o{mEMzvhm5=D=$1l8(%MtPt8X6rG@T2_cN~eeC@&(+^?)gXR!EMs+tV!MKpUI z4FiJO!F2LpQKj2z**jnfY)_lStXSnCfMANgCK|go*(zcu$)QsQ* zZYsMwX?tGuw$i*j-g&`iJ4GkvH@cso!S=zu0Bu~}dBJ1v@({!^+i}Yq zT-!MghIc)MLukuHbhTbI^wjO*YZ9s^bg{{!_s- z3jLp=HL4a{tqLnsspwb;FuBoCcrV{kE20nj}F@o-BjCA zyN}`K4i*16>{q7(FB9AV!bV(=9^_5Mwf`Sy$#!lH zvZ&(P@8#?i*Ye_a8+N*WaBIh|I-9N>JhqL;z`i$z96RH)G5R`Q#87Z`g>vC|F`i1r zgTjIH^E#2cPtWibrYjF=nUR)wvSz1>4}!I(X``lPQd$pL@g3^d%h2Jq>G-yFcrO^A zR{!&#-W%`H&!Fvn6agr2>?8L`j%&KdQWHx}DRrJse5lJ*OaSi3K4&%4NS~z(@PU&7 z+VW@x0cf!lok?n*aP^`29Il+cV#)~9-?E)~pO9OG1e@t19R zDe+#hQVmPB$mIbX(Y{eGkFS0UI0;zfT_zO-z-p6H3pg@Y5Aqt)=m(WIpquu|G8tIJ9;`dXl_8phyG$$7g)JCi<5 zKAT4lT<06E3Y0L@HID(z+vm{SR*G5!#svMS7fiKOhf<-3c?q#zK+flPPX=t1CZm+E zVt?;i_^UF!{xYzwo%VtXM5>F=o6y#XFLI%$e| zINaVn7V$AaH=h)F0MhuPodEW|kq-kilZCRRH6WZ%Qk$!wkJ> z0ok`f^x4Jws|5l8pEroU9iT z%L#yUKMPj`xVSQrD`ADFPk$Vc_RUPs#f0y9Vy?L7ga#2zkDEIyG| zUtu3+<5|mfEEo1~u)z9_Z6U2n%AZm^>k0$LVeml0%-rR3yf%< z3^d;25>E_?Dqf&Gmqj*3YIF7dG(`1VmZ_K{yLHX1XVt&d9H3A6R>VM zDWcwIDQl*cI{VhG#r&B(#=-#sCB2}Oyy3>_=8G3Oq4nzcnu!AC+{xb(52JB~DJx;8Y$pLrjVtt#!?B$0CH^{+09-VN?Sqbx zNoON$3}E1l)Q@u3P|l-Zaayh}EB8WDix1pdFpGH7RsNjuV(qNU)IUo5CbKT*4gqW0cGi?NB2bMGb>Z}sQn*P9ORY}a$hS~Rx5T>f2uq1`J1}Uxn;um-)&i!-CKMuWsUT9 z!DJ&0j!)O=DzYBRH0v<>3i?YFFb2A*i8LV2+GV37mdj8XEONZr+OQ?Vo-{*^RK3D> zZNt`f2g#q&#CLB_CMxN3e_*8a>Z+f{bTD0lEpD%b@;iZ`Igzk~F#*~OrGOKP8}aFi zO8{==FDe?As=LFw6xXaWr{~qQKib7}UO$RjzNa9oYfpA0elg7Ua=$ySTfbp(u&kPfAqY}KihS-cO_TeF;=%U8n$Kzx%W zJ*TZ*2U@JNaN4?(Xpr*@N_SN5_5!Uc<+#aMuu*bz@j)_1F@z&%7ZS6{N}*vZiFg%Y z2mPplvB2{pP6l@Jok|2&*zACn7dJ^`%S8QApzi)v&X@q2cf^T2VWre?8k?PHXhFep z9B5gAsOf7t0YbSU+BcUoGX&>(2R%T=zMHIIaNn(sr67w{XUy|)cS3rj$snUS%D2?~ zDU8aa*@bD7{4|RJ+?KJ`hPUF?j5E>;`KxCGP64LsZ7(3j79b@B`!(ZO$u?GEIb#D% z;tMCr>x`>LZY7%Hz%-VFk<0UTFc=7P_X19bEj&f0GM%UQ8S^&g?LZ5dvo0e`MzfUX zMVt)KEorSF0DZ?&2`Mp*O{^+E2ITTp&YB9^{)N->^c3XBfD|;+J_fd6Aua4ct3V68 z3oR!=DA$zECfg9mQ(72sTKF>3^gP$@B}~TfyfIK~X&a7xH&C*B+FIyY9B|(RCmobV zj=%vw^bR+)&5xc77&&cI@JgpZHyrocN-*AB3VSLor7d^8BjQ^)0#>R%0w%6j8_tl3 zUqD6cK!qR6YO9=oQ0md;oaeh^&PdjUl=j|zwq)MBwB0q@tq)Jy`jF|<9bZ$xdU1=r zm=55;1l?f2*A#$KaBLS0-W!(m9ai)W3;GW0xnbk9891(VC^4Y^5k`a^|GN@=@o zyk7Vg_C=ZA7vUgWY|5N=t)RJGqe&X-nZRu?(?OmMJqLm|+2KQ!b)!3dqvKc^Z>bbo zr90HtU|%bzP6f@yCF6))$wzE7%;Qlb0l+60{n%H?JGcGFr-e{Z*F$<=0=YH~_I!Lka^O=kUVm*kKQQw|akZ#3}$Trv^K+G+V@pwDho( zQ>&D06&v=BdPp)b^H=*Aa2@5`SJa``*d_zDsU3*{AA9`Nr}R!mt%8RlQX-O(#R7;) zvP%rx>!JyZj#TmF+>Pv;ogjxd)YKp?H?UmTU^d(gx~YE`$b(_?!pQ&`owb4h^($U{Gw!8E%o)~)Xs;tIE-j=2va7IdC>$ySh>>zf$lmNJmw+*Z9h+(>@ zVT^$qgkze`r&4kO;_3ybeIaOkT~TvtIH**AXE788@7}D-5dk@F)N`9yZo=6)8l_O3D*vVNc2tc$xihr`?eR@1^T<~KlV*-rii1G4x-stfh{Cd=PS%F|s zR^y~u#<9MR##;20W}AfdLBd(QW%tYJaAXJrXvgtm#uu}iKprlC z3iGH%!7Phyg9C}9NYv%Vjv5so5ZGYikx~UpmB@ea@^(K<;eY??QN+k;^U}D|cu*~N zXwI2v(FYxBM-@uTXvJ}yqB zFWLxZO!rWKYhHg;1eYqMRe*OXZMBWah|lj992ByLWWbF}N~_Zy?yVRV+?{9$(NdhY zey{SOsg*`MSFI`n1GxE&cX9^mTBh_>TxUoX!ed7Cbw=%B)?aw$Cglc}8-c%WWU^in z{^pPV3iudc2WLSZfN)%r@^&2t4&BcPZ0e#*T15RSWefm~FJO%P@Y@~r*JTBs|wd?`p2E_~@B!;21fejgh%v{7`Epi?{$SFi+O{3r*vwVba~Qa7Yc7 zs14>O#s~MZMp>a0NSf$<3?_wO4s$c#298sCPpS?&_NO4nGaG0<@V z9Pan+Zx7mhf*k_qb@IO{|G%ATRuLyVih=-XQ{^Jv4Xwhq6B66Shf)-3?K9hP@vybaXe{Q zr>dF4Wd@>!!R{zkII@v`sj%*WJVJ9Q>sdm@sA(O?gvhimF;ntIu({s0Z9)ZwMlV>T?bm}#l@=mHXsT+%IQ zccSD9Ad-%0=O9$x4rn{)7$1VZ-+-41SK5qqWvi>#s)4nfTF%*-!)*OXdXTRNw|-H1 zN*{YdHK3%;KzZ0#vMdw;J|yhp(Jy%dB+@_nIv$e|kk2Smbp%pnU{HK4nh>L;{sL%t z^i6I;0pN=e$endNO!7_D6#a3h}F3)rCZM0sF)^x5gTHfz9Gh0 z`pI5xSz5-Rk7(*`qxvVd^T}EiTSZKga}ELi8o+yF`3wQ!+oJv!V0P*(ZX*NQ-_R*P zk@bIoO+SIHf0&9bx4KWgTU?G$dTqAG&A<9nbOkj zL`7CF<72U0{9XsAhn~Ujp=0QW0WUOoO5cy++gjX6SJ?W|@W9FMP)K%H) zrZlWI>uY@q$9cTxoT#V3c4*sfhzG(Kr@5Jpr_1UJ_}U6vsO>u_5x(C$y=v|ToYvha zqi1m|6>EsYIBnyIWc#}4%L2?`s)N%ZJ`6WJEMA~&r#_9c)|@ZzqH2EPfRUk z3GmkdcjuzTGrLXZ8DUz%^C=0SpCFh_vv!k=U(}G@{hU5x!5&zzePIiy0=Dg{0{G~= z=78^AR4sO0Y(f`l_*))~N#Ct})~O76IpkrhDZQh1*E8&sEoy*XE`QxLHy(rW<(yGe zuZ_FI7clJ`UKm8t43uzl__bbXXzc^3G^6GRPa1a|BWVeDZF^;(BPru1>oVE+{iY_L zsvO!Y*cI#&$ooJz!Db2^^_Z}}U2+fryE8W-;*%AKl6f%tk7Whq6NU3oQm$ENHqyscCQ8bnumQaQ-vtKlVVTfo_`E~8H&Zx+u$@sA;8Wppz8xAPKC|)fHx+W4bBXC9js6J?khCkT zl6GO$V90|@LG^>y%K#oqH573?!BqV17sh)!ryvHv-VVNKJRT;ibPRYGZFOh0=?6|7 z=&xipAecyIRH2Eqaa#}PAh>Xy1<4z?do(UTKi=+ zO|(wU7ET5xTD&}uI>&vG^rRuI`omvTKehZzz4BH?(XfW{|444PGu4fT`h#%1fP4GxVv-1YGri0sdmf|na= z#<_%}UGSTNFmu5?wu5i7xXN|#K-{)$+9f2T#Nr5$*7V_=5b@&-T7 z+~Yx0482!k4`ArMQNQv)A2&+Ec?Rly$#lLisjq{Lgt)G;C%tgrY3B%(o(Xfdl`;0X zP373a&d_z6k6(3=j)m8Lwnioz6rbPg|fziL{XP^)GFaRUA8ivZ{oSktChIw%D;Ld!zj-Weqh^ zdSi_3mK)Cs1m7gh6Cj*K!Ht?LmYap?;Jhn>9y;URp))32D23>R(uVrQm4H)#WrOMl z@)wl?6!+!zm<~}2MS0*Hi$-UM@iqqh5(t*kw!0z` z@C84!<--PiM3hpe8fPFJc)7=nwaDs;VG8_c4ZUpK*N4+#OjzVM0r1*a^Y|Kg5znu= zNji+%v_M}=7_-Ytar!ESG0rexhhMK6S3g-!=)s7Ofo z9P$Ig;^Yt($8j<+tMTdrR-`hn*#8JDhlE&rK8j&fq8P78@526Q+8iLQTYiASZz?om zm{+9eC@hp+ALW==5_*jQGYg%KA_RrtW`%H7vgu~PFU=At2O1J#D_#bjc=gm)5sy3Z zgOvlFa%)85GMT4tUBBG3kAUJ6UdeU|%`qviC>K0Ua8P)x5s!SmQ;;Q3)b`u9ZQH%u z{I{mLo71*!+wR_N+qP}nwvA~`Yv#=RUYv8{yZG)ZvMMqoGb%Icx9VBz>Ai>eWYK8M zu|HlpJ%MeDWD{iHVX|F?kc8nqi7r4D>7j?!KSe7I`4qWla0x8x073re7TaiSxhHrS zXzARYag-d!8-`CCEv0B}Sc{UAze1QAjgSccs@9=!QmY zNYmdcmrSWIo46W}D;ZBZsiqN`jSCrXO(o5Y%LfspTMt%*4;gvJxbrdA(1D?(!U!j_ z@o@{KQ-!9NbRYAL$F`>NFECJnh;9)nl*xXVW&m<2BDRQyi(+To-MYSg`lxdzn2~d! z7R}rHY!P5$Q{jXGLnZ9N7+qKB)kSI3f5|4iOb!xK`=G8!BwsPQ4ks#Wv?%Yqkcp=cvl%cj?AK7_Iyw2p_T8ckDT_m~ zPKmzCvIc%0fE*3`g`Z6tjXBN)@;y#g%(`h( zU@2&LwVqzC61sG#udmoczoUt5U05s+h}z)pm#TfpVy4CD!GG%^`t1HcRmsUSV|N(s1y9W3G|* z1f=Gc4{DJqrG!vX(JMlVyFztv!UW7xE`l&}AsMh5oOqJ;PNmu%GZXn&Fy*6+OIY#q z;vahHPaKjHlm6^7zm&2WgQoC&%3%B6Cqe%qV6X!Y(&Ow4BnXa&sYN0#H<^k4XqyPj zg6>M`Kzr_JARzd3Gw*P%k?YanIy)ao2*-rj%e4;Wdo*x7Nxk)8JP-!JqAMK8E9j~X zbtgQzAe&-r-s`IJTk#UOe_d=&gR} z-843M(vgDmsBA0+ZG|2;#%W%f5>r+YmDqMv%%@&=sRJEAECa^EFbs)D&X74J4dEOc zQ*~NXInaog%P!FmIF{?KgAPI5qekr1O;~>b#^)_>;c@)Kj2lPRDShjtS0>28y9C2S z_(9B_dg&64xYD6!GSAa}ZCpO$Y4!#|{R!w$GOTq(Kv?)&r04Zd-=qb|ERY+emrb4o+aRIr2354%P{Dh5dT17hh4MP_LpH{KBK|h%NU}(*^-~|!IJAa8KdZ0}o)!~? zd{dFnR{;nZL&-8>&s}iX3*A_O#Uy_#&k-O9-42Fxj}VBJ%flRn(2_8~A9q~)fC(Ew zj)fL}sYD%qka6OS^&WI%9Rx<$myhnt#U{rW?5M2JKl;Ucek7=T*2MR&3srRJU$^x%C_5?kc%)#* z_lyTJKIz)?F?VlB*FbFHSiC8bLP;79e1fq+-+R*XijsvKtg8lWCdPm8$SxTB{y5d4CUL6$)1}wX_`C;WV1m@9W5gN2HJU};h9+^4g3t^*gz*qT>b&avDa!F80$^WT5W>KjiAO#(=9Y-5MEbV$hMEjZr$3mj zHEB?y#4fF$;GC?NSnz|f)xaAklxMX%21gFvIW4?ir?{9K9Zwq!w&Sfgj5M701bem# zwcXgec8s`)C4`!E=M!sR)cvwe5Jo;3R6PWHet+SMY>fOw?R~rA9QamwnI0HE!f?Q~o2B2oi((})fK8;))%rH$Pc3RUsfuIO$I`Hs}x+5VWVi zF=8o$da`^=E`;M4E4UiOq0&z-Kd8J+ME5j#fvuEy7er6TSJ-yf*&y&RH>TI8yFmYc zHZ_!CiDN=RUOws$7kfcE#iHdPm|SicBsmK{$i!0)vkR2oD8gy2extk;lY#@@gK?BTn54z%$%FU2Sa?C` zDmD%mx^-Os^4<~Z=)IymlHdOg(>DS;#$5kr+9r=!y9pn85Yi$2Gx6p+(bRKd&Osdn z;YGREh2VjIK<`M1D171GG3YIXPjtU@gjvtt^!UAEo595vJ2;vnaOGXZxhEWo?n+!` zfU3ULnj~@SPAlI-iFr34>wo@UnjDv|Kp@<=@oXk>5p-=dcAN5b96TKw@onC(z&e~9 z@JOXX>Td(N`z+a+7urqI3Nc>fnU{PYG5lalCb*6@_xGq->2OQT7jW^(M-C&l_o6QM zEZ4gi9#wB30^BD${@$yP9ZAQhk?!_92)PdZ`f;oPmC0s8{_{b;RWci-LNW+_R>8P9TS@JDIY z=5TbQ5tlL;E7SKeg>g@T36E((d;PRPAv77%BgRO$+u<>PxYvC(Z10=<^YvfnTXk5Q z3q{ut6#Lc1)_);;4ZV=W{zdGUW%<=FEvJ*>&!f{sOkJ$w;+8XKi$9J9#1bAop70n1 z5lLIV{k}io6{D-#6TKn%?iW$%g)I<={-x8odksslh9&s{JI_P-Ouu;16s8|@{w_m` zd_$S0yKv%0WyxA?R?IC5t)xL1tLv0rHT`}9i<-AZ!DgJaLP;(m6H+WCRbg`xAH=Y_ z>kYW1Ur^I2kr2j`;g+&jVrl=IDy0E;<}}v{Ud?RMjZfAO`^^TXybL#odx;Pq)>|!b?%-q?E;5wTKN4PashjuK8HLJax8Xv@b&ZsGY|XMLW}~2SJV&Tlk0XtnHwz} z$cTUnX-|F4Q(Ply&VY(gKXknbw+yM@&?99Ggm?uVz+XmCEi83ee*5Rz2qN1US|ufR zH$zM}GS2HdqJZSf2-iPGbfy$O(E5bXJ1YE5{u>X&I8Pf6y1(!aWavp@L?Kv}?V5wSv#l{P4hHva3onOu;>8CL_QXx;*6%T+E@(6FzS=iUMnDn{FEJ zQ<J@SQ%e}&qrX@G73TY81ZJ+8 z`@5*FPNC=bWN>Jpq||~6w0gOGBL2%T7?vjFN=r@PZ-dAZ!+j*^ktW(=wI?w?{DK=e zy5XNf;3j^-5{^UV+)1rD!L48l{4Hx+BW~yyu0_c(~o7sjjS_6pTNJ zJmOQS<66dLSCWcV!g(1;0!G14TU?zwiLH&y;%#_F}%90i6gRInq zE*TdE`ED7tfc0eP%JP#HWu|IBRe$WS5xn?gh_u2nMgY>D@l*Twrj*rHC@{2iIP1Oa zy4vulksf-IQ6bUf=p|tc(Ypc*OwE+0g)n;Htc3~H2cC7A#*teE!9DzrvCf99g}`wPCY`0#41#6+XQ<97N~;ZPZfKEd%f8TM~h-Fbp!!(^zy zpWLG!2sH?)>)d(N=oN!i1H$VNSR`a$Mqn$)|Af={OgUvvBSekwNgL~nWr(G{0frQI zc@QdM=U8h)8BQ4ZXABn7eK(T_=dK~UnTtRx%_}kfG&J25bMt?12T4VG^nPEBP+j^I z`e9p?VxYt5iCKb1XVtjoe~~A83Jk0R-zL5+N+_;tw)~9s^0KbtR82)zB#<2_k_G2V zRkn1a(e=J~fx#g3b603tr2#&O7->lmIt7F}*5SWD{?`0g6UW8Eq7>fse$g-3N^&o1 zh?~~dr^tyDFlvM&>3_5)&rl&9(-|7ZvCZ^_k-(~6&HJ&yxUF#)h6(6j<-nao{^_)Q z46iZbg@UKPKVKLHMIYomx(-1 z#W-N~%qBnaEgO_$2Ec-<$K(};6_`tCSu%}xPN~ip%ZiyQ|n;}Jg{|YVCfF(jfJqhHQoP%bX6=CseFfBotEz+C*I!lW!LXBin+u| zQ~c-DlwrQo8$|rSmlezZ#RkffaC>O%4?a3GUB>#JZ`TbZJsV zW-by=w-kyJvSUVa;Ns%7XjKrEb5l+c=`kdUQQmVrY5L(hI;XgvQ3c;mKdI^KQkJ2V zRqryQStPHAVDj|lU*cW7m0E+sgMbsjP4X>8l8`@)b1Fm#N zoE!s-2BCJ~j#*M~hio^O&AgU$8^VAjekQzmVWy8Pp}#&dzt@DK>}SG}=P%xpxhkf(DvSLe;< zJUZJn@P}xa4gcKRn@DeYA;yGg`Fxe=ZCNC}j&`tf&#jREfv`vct?iqM>_`jk=|F{M z{zZz&!Xk%UNG8gV4IEvHl&e(}Pj`XN@j#6j!m5uRHoCdC;VoCLy7=tihwhN#5GtDUxPpR95;1tti^{2c#|Veu=CgiMhc_HY zf_jDb+C{;Hw>4hIB#RJaZ&)#`z*UNUL|ReGXISMTIzym~7{IRQMy%Mwv{OzP9euX?=-;@1MrPm}4+fU$vnx@p%ST~KSPKJT~2 zQgXbs=1X#Jm$mIq`8fwnNvysQPN&_AYIOLBPJ2Oc?=O-Aal6lto4-!4%o=UYJ#F9r zMH2^uhsYB#g0$Z~>J!UK=(pAO@!Mg?dcqd6Z3t4~+G|yO$|doZU2zR`OW}O#8zp>a z1*}AQWOmqfSdKp}(n8uKS?y`M?MqG?eMOGv27u9Ggo=zm2UKS7X>)Pu^s+#-_{Dl*f6&dA0l+v?b>u#$xsgKjooZ*;!t0Wf&G*OHc_iEVz zvEw8Z;yAH!e=K9`&D-0oHn|*UJ$nV?`&=fUf4ID3Ix{pcJuh~gJdZxF|47`Pr^^(C zK<15Uq0i+kkJgaMh5_%~DmEq3#kjsgjUcB*f?o3cQgk`Td17Bgbf#1v&r=Yq8v)8s zM(rGOa3PMxTWpJ(jRVa%0+F3rSsDGxnk)O%fG+=e-C61AVU*+hYz;LvHly=R zHnp@<-`gGbGJ82Z8sh-G91!pACVg}~9lrm4S&(o|{o2FX+fI6Gd)P~BX@_@v;Q&z; zE3qb@+e;GJ`QV7l5fC4khhwThY?INmJGAObE!8?kA&m6)75m2?bfv`O1)aI4QcM^K zP(gH>mb%$~XpqpVHf{C8r*W3M^9Y|=YFQLm5tp|SnY3Yi${GAKYP)GQu+!QH=YG~T zP*?hsB~^uaZR%FQ2Gtk?-0dDLp@@N`ebad-+E!m@J zNqwp9R&4D9!~W%J8+?=}UK+H1b2p)@^U~*@tB6B;B_J!vYJ|IRkP8XwOI@Jx9nX+h z6PGCMY&gs|;n0?^T1>sQ}4xx1&71u@`eWXfgFI9!qwSQyR4F zij7h02bA+Wx>XpdB49dw$1IPvUm0X~Ys_%0Skd45RmdQ{ih#^^e7(fct{cvVkr6-f z+Rfs;7vVMm>9*6l8)^8gTG|F2nT6Uh0zAfjXt4Mx_Jzc~7WS>?c%T%qkH#FC*QpPZ z-s-ca$qPw+!`BbW1|x3#-3?P$lVs(9@Ff1oJrr1)=??V;{~ediisu?&zMA2SUx3=KTLZpJ}v3yq=#)Lm_fJ)k6JL+3N@cIKPN*+D2=atr%C8n#*SaAa&3 z^O8^GA!<{G!sVRJ$%BabWff&(TU*o<212gG&K;M`YLlBLIw!8eFIQ?657fja9Y}=Wn zvTdeP7Z8W-&-jJ};H9mc#sohdi8z4r&ybn<4J2!j7*3USkx8Z`rbihnb6XMtJY<e67PCSiOKnQ$x^Z*l7_RA@=`_Vg?X|qAv3YaL{sv3{<^Iwg z4*q#DdaD-CIDp$wqcXg`f&#^br1=_8y)evIt`@!fN}&lMtX0q-n5jFhy#l19UCEKr z+{2QbxQRWTt%k@vNxd?w%v+RXPHSzLwx49_4%2f-?7sQWbR~COARIo+1GFQcyduH66!s%p6@AqpKqL@`anZraj zevIoCgDaSL`ZD*ouEr<%GDbQIXDHCf^wO-|dxyrKN#D@m71Zqc$t zOEAFzc6Kg-&n4TMd_QH1Fe%2RVSbehGT9Cw}E_SG`@wp*fXDkKXn z^SDU1AD~DDT$1^_Wh>XG!-Pu$m&$QNTRYDIeh7DD*Q-;ah|XgtUcVbPsz%e5=bkxv z;Ot!oXbRbtbxp{3^NP$9=q5}4=vO~doS>*eN7v~EpA!F;)po#Z;c9Xb0-dlEs1=>3 zX|NvMRt%uJHv1{lTH>#(8o^&QyBnfoTV{ZLLW5FLo}Z9?>xjtUp+4cV+Qk5HM{U&Q_YxYH+KN0l7sB`5&xU$b((a(1zA;bS#pm+~lT3I)J$OFB7eiTX=lv}O3 zO{B(Unf~55R$m|`rl@ahy}I#0EX!mmTpR{6SzTQ-g`UkN zDJ?mTY{}7l@L!td!`2^e8Y9o2nWRrcRG@pzqnkzI&ENu8to`2{nLCX;)DJ)F^G4;a zh;)OYvAP|)qT9x?Pn8-!*XGmahW2!7Y|eW(Yz$9(%YJ&?xL(EOD)Q-1wUFBIQ`==b z$!?{wbgn@hr*Mvy@)spL#^t&9%WwJh@zR2C*?I{THG5rGKg*QY(MmId$ZAif9a@;L zKxqoY8^0;`ewFfB+1r(Mwu<5gOsBgFL72#fH_DbL>-%)IPT|n%0eq8*f0wlE51#SEVP1&j}FI+uqktFRvwTEq4Y=&pX_Dc ztsIJa%T`sXj^3v}w4&pnt|>=@WX~37EO^vJEW=M{pW)IxbKF5}BIqwk(bDE@`+>6{hzx)b=R0H*2E6$yqjt;&hO$cXC zEknkd8h0$WF=H)a6E3z~J=nv}Q?ibcuWk+!lExJvgRGG+#|Zf=szoZR+KrS!h+XXI z7>-9k=6}nufW(B&@upNy4_fBf-dXARO{siBiGHny1g@E)E8ggNBbT!=~8b~9iGnwo2vcmjufI~A|EIy3Ks14oY| z1l$PqM5cv|$)DnR4Fi?RJ6M5Y5tF~$NkT}&zSZ#5SOk35o-gz0*!(neNe_YALMIBAzj%BKlIF%hC=In$ICSH`q~k0) zfNL|TRtmWQIYfsz#xC^l^soF4S#ZQ@e@!Hk0No@rED1H6>0u0Mh0Dcj%rOZvZueJl z-I7rIov$4%kp;*vhsquVbP%%O>dby=O7`l-QNMQru85FHXHzy;U{x~OQ{egT(Dl2n zrmJbxvi7RoT=JF)6)xeY5hFO390PVK)MAel_WYu)r#&_t^4W7?~blaYH z<_m$qt!>bo`?OE@o5dwT;Uv^i@@ zQrPCV(y-WCk?|oYn;)IYt);TNDEZE@5}>_317`DCv07|R$q4W*ODb$hIje1GcQDuz zrAxasMr3Mr7b3j<{>dDZnp$FyfSjB@3dglw!6YKzj8|gro07%6Vi1^R9wf(loIC%7uVZ&Pe* zb4iCh1MY?lmX)Sl^XKf#ENFI~$@-ZN8&wC|pX3n!&;*+cg!KcROz&Aqe_wAZO7KJYyklRf%!4*APk1m-G65f(pB$W;&m7K>QgTKexs|MFoJ$B* z&bjxwxy3U0#PJarJ)QH(J7(yYQY^cehcTdMd5~euJjUJb^8)H+x4xaATicaVXxBFB z(8tjRdG55}&Lnzs!;@Yyd<=RL>EggzzpVoeP73F@d2pyN6e~vOwL{_J^GnTrN*Le2 zQcf^EY1;+lF4hfXv%Ef;M@W{o@}G?*F?uAqtu_h(lRV|Ky^$<)1Kp8?wU&MJqf(oY z|BktRyx+Sl96Qp&NvFF}%ey1TtfccI>q#QcCh^M2-&Z;#a=iLCt>7F4u&t=mn@v6L zSS-rT;EtME)26j{^rjT2cJt}IAbUT*I^>jVq<-moy(qyu;Ag)qOO2>Ayj$kPg71Bi z`PMdNi^=hHY#!#P6}HO0etKkonCkd9S1SH1o9_^BD)enlZO6UW^19jZw(Gk-8*f5< znUrxEH$l_P-;4v97t;hhOH+PD2k4j7Ge5KG`ChE2jh0Ak9qO16q05GZ;5qy^U zO}AO&Dz3S0%BG8xgg7k<-xr8hWeB|591x~ySCvC&ylr3FlL+?UWyoEd#kU>SASc(D zbi$|vYMV++xt{*hh<4g6DP`WSWm=W{7_{wABN1|Tk=3~Q)?ORxek$9V2>)T>udr~# zqW36ib}kt`q7+Fv{gTB0*PM(;Q$A}Z6-6B}`Bg8aR~KW7fvd(>S%}J{NvOBV)I70_ z;=R;Va=P%&aTZi>fVVZ6Fl>UoO}_irCGyUZw|tT|YQaUf!LSgsGJtkRhMroxU}3 zeBH{Vdd}G<;FftWvntEczO3U9|AgG>{y?%8RH0A139m$&5SNK+Qe_>~0hHCmvfPiw z(_eUyJF4fN)|-J}7e;aXu%Qgxvr(C0#DAzt>}}FzCB;}mT!)wdO+$({-qOh$sYrX5bme%~8>@TAITJ_TdC-9U|% zsYtqXCo?8PdONd+vMlMO+Dm48gZpW~QB~o}hq>5LLJ-T-X1c~Ber$K8@fcI7320^723J7Yn1yu6e{M#G(s9ueua7-Z^{}d6CowDH;ZVF_=(e2xpWzvBps|F4I;wWMXkE z-4xk5YD^oGVak|%tKakkX?uz)2CpFS(U4-_YXA$jbV+-4MveX4HGXLYZ`OQzn=mBF z-FGJw=09f+*{vB3CqJ~CAiX$PVv>a|JniJtUBP4TES~KC4+Hy`?(9P>{cfBVP%kJF{Sp zQyQMw?~ev59&gR!`cv%N0TU&nVZRaARgJ}p*w_@x>RG^Jj+m5fi-F7J-`69%$px<5oK$DVC`F;gH7)lnbtF)nROGnG#-eK z&jDWH2I zO^|VftYsxoHr@a{mAH*m{-CS~i%liAzE!frcM7o4J~a5-*i1Hk#&vdrk@0-fM@t5s zXw*RuPWWuj1;DpQ2x_%TV5Y>a{|?u|+ZHL1H|yeLm>VskXEw%HM&5QBCJMmm_hGiktw@ikwrtqQO#w+5JHY+L{NIm###e zFsPdtH5sl?4AQLS>jW0##5`OS1)mzpyhztvfhj9 z^`>01#1l1b^QGqb{9v;c?a6EOXCG8%=Q&+O8vHOVoS)6`ll7P65c=QOst<>0eu5tz zL%qfRgFY!TlBD_-dU2I~isYHg;oje2={TIdj0jrHl;4F!A1Rw(3o|`FJ-2}b2TIq` zcNVC6(qsDr6F;J@*k)22jn4Slxj4_CR)CvFB(Ll9Ey%#5iRI=W4U0yiJ>mIfs{7-Z z!+-i-y^$4J#gT}%Uh;EXHD4jcxxVB!H#ls902gK9t@bp|s1%7%PD1xD|!Hnmf&weK9mFsm;b$)`Q(> zQ(dM8h7%9HFu1GzUEqL~kVnS(FZ(^Knd9Wl<;)nP5Uvuai zfM{_0S(Q+@elLesC#xU0wu*$_P5ut%6{MXd^UPu!ozkbIOuE!vOrO3*=NCkfwHKuk zSev+n%djNX1@qV3{Xba)O%Pva3DMsf2zWyX7I6F{3|U7A68~-b{t@a7JB$g$g~JIn z;y&ow+n|cvwaBKvPR(V&c-qu+j@6hd>ezzaAo{@8B%o2%h%yW$&TQ)0Y6xE{0Gp-0 zEV|Tnn{r2FZJBkcwV`l17nHT?iq_0=u^KrM;~Km!c2W)>#*7JNsi|so90_#_FymA_ z%2X>1jE#1VeWQ;;Y}a-v13(vI>|oi}GKu^4>R1L*{~I8qJ_13@1B^0-6M2ET-Sywr zS@Lpin1k>%gib8PcFkr9gtaCgX5@`3%^FdbH?A;0DyM1u`7|b9DTK={k{X&u?iHdF zWCU6B@6Z9V>)I_+uweiMTJbW*#UH(5lxgl~?|28Z9v^LReiGvB zQLDmOAplqq6KW>mIgfi1%m-;@XdKhcgVs5Z7s|A{gXNN7t#FzsW_jlp{s$&d6tm79ptgzMeiDOn~+HM>FX9sbrNh-dnrBGqj%KWXVHUnq0 zg3K84ajE0+KYyvAr@g-jzp(s2b%!fc7mxiV0>REl%WzNIX65Fr?Wk7oYH%;&ZokIU z`?~Od3JBPwt!BtXE(i&W=+Pu!r(%^FtwL9#jS{&|j*a&?IL%Pojr-PiS`Fp!^LT6J z096&Ou(Y#vQ9lEcWn}SP^*t^d*M5E%$dNGK_A}f7?YBC9tu-o&`s_LD0oU*okLB}-7If;Lh?-^%D z{pZSpN9b8>63>1Pu3RIIv4212UabOl*m&Zk$kez7%N+PBLq!7i$PBnX>)cM9upqt{ z)NEoz_OzDEn2&tLII`x;uU_@`ht4tGq2`1fvlkY-N#;&)Jk8iRS?ue{%^K>!{v$EnyGKD=d1g3Fi4%ERbi< zWs3qlL+jqUM4uIFp{`nCQL;MCF2xvpvFG>`2ZEI)OpBCrjnxeL|KHGy{&VZ}OH!lxHItJrtl^%|6&&jW4&Cay0& zPS_AOQbSL85#)^<(czgpV@cvBjEf+-Tg@G(N|~AmpoDgPt`&HCv7)zAnu6HPHxeA} zHFQuvALJkNEc5@O^e=(ucq>yWxwBKnjxJdjHaDUPBU?O0CJ<1W_CtMeM7*?Ij|pl6 zL8cWXXxVFsGc;PqX(<~|F0^JL=YF>E?f9#Aie$n@?|Wq-ZTWEt=Etegf8+vOXaSS- zc|FF=%3)g+>d*%(uj$y?e~6CfuU*eXHD9Hr%kZ-6HQn1z3E*ve z63-_Gjp`-nOtFD};N0&v4>CDW>&t`Mf44uH=lH6ZN?{%b;RIIRYkHW73pJRW*{U5g z(7MXeSOJVl85e1$4AEqfv5AQEI|vK2 zqceCM=W{M6BhaskOZQBPgwtG))QtT&SN-?CBAia7gJSKxY#Le?t?@Dz9~D*6aTsre z@~?bNc%U6Em~)W67Ce1a_Aj!b@7*4oQ%O7!fU zVLVsrla{W?`$fH3Lq)b8(&_Y1s{ zWX~uajHo7se>1pPm*~yZoT-oT=uYy1SKBP_J9HP^b^y@RkcNmdaft#4OkY)RRi+AB z$8A*s+kXBINCzjb$*j0f(+s0gWy{ro)56LEqizOG?+FQi{aZdk2m`WCn|vob1|Qk0 zJS9P4o}QHWKg6HG>Vf*<*d1}0rnQdDm4BSdv<=Y;Twbr$%5y&a-*v?BHT1S zzZT2jQ`JaQH8w-rs^a;Ry{Aq9zf6oz?`dXOj1mEuBiD1SC2IfzeSaj-wM4B3i+$rs43^0b9OiUgCC<66HO^`RMINIko3lTNo`BMfsDy@Sfx4)nB*af zZEJgRz$D-wrlb;-=vFppJ>@E98;o7uV_ZYc-Js`q^%j_y2Rfj$9Kp)~os>~*tua=zoVq4Sd0f z)JUA#Gi0s{2wuA5MKxmg%(;cH?4_-2LC(7BGCZK;eajtf3dt&rmq-u7t^2xEd`bzT0#b%@v<`3e#drqY<@`y zfA;c=>jM9okmCI%U*^~=Y2Ev!O(+!UCZmoSI#iAimp|z*s!^B-5WedZr2qh#2?=v- zBVE^Az2Aj*j|AyU>M2DmHJ}n*K%lhnQ?|~8BWoE6as3v*m|p! z3}N@*d7AhCPJ2mPFri?tQa(?LsY|u^!_wANTTXd!<`)mOKv-Fy2#&0o8nx!nWG`?W z2I#Uim@=2a!8EN5GC4aM%~vMn^{=+~xQUrim6T;d9V~K=2|Um?Obyg` z#Qk1~H3?v6a*kU?Y5hrMor|CTD^?)$(UNTLTxgziVAx+ailD9g7CxV-Wk*Wb<^Gjn z(B|U@=~_^Y88X?&g8LR{h+oQd$~WjO1Q$7h;wFHC4ndSrOODF-U*dp6i9^TTUsCX) z2bd0v(=YGbIzymg0sBIQy)@V%MODf_uYn;20n`oVlBN1X;BdJ`$euelvF_SH0 z;b30AJ8cb75bxm02f2%h%J3$A*J_pkWRB1x7oa8FY3$9%9o!tVJc6?ZzyWJQHx%}v zoy7kcqO_GY@KGx^Ql$l_P~z7obCQR?9Y}Vt;tH9mukpb{2%4j}6UJni_&tpN(?H#w z17I*HmJ%Z0XC$>zZCKf1qvWFqgEfAa*wCzR;}MFQnmA{Kj>y}P=~+nFMM|J*a`XJB zwU_EJw%-7Tp4@(lzLZ24GBb@c_QUBp_%H?;$jLisuvfy?O0{{emjVM;LxnQ)d{O_J z1%&x9yCB|?6vN9yjY^Jh41+a5;so#V&O9ID#rU;t`F=k>QW-{DAdi7P-y)JMA^Jq~ z;%lLtf!jBEg#7y(Fc0<};d+X*KqyTD#2#BFZxh}*-y(N8L242xA_ z)AbXS835Qz?kF{|f72M0H!@T3vRVA5%%|leQZ%p(Cd8gRK;5EEXZLB|{ldb(OnL~x zpTPZ-%bOn&P5voJYe){7B__@nRf{iS`Aq%#gzW6!2K@ygz$i;mBJvpAwV|?F%%okm z+-wT!M=keI)1XNzp-hl$+6SN9Qv2{Gm+urwR5JJE!v@(l<7qfa?6k)w zL1o1i7)6hk)?e|z$qH4`{!5bfjX95R+V7wwIM$nx@9kX9i_1IyJ3tMKp0xAdIbY2~ zT0zsktM?DcU>Mj%ed{pXMVHH=^N8@8#WrO{$~5gUzuXns-j5nCZfm!DiYtWvOomQp zjSoBs?RCvDt{w)GW>+4N#na)gC|M2p+Aa#27P}$z%oTGc;gsml4#_9-}?a z6^+eg8CJYg&sN4xtVQz+)V6Me85S7s1g(~dCOVt4UpB%`;?#DXRaxUVydkbS`LP+% z=2F--9fpwpn%J%BTf2Nj6ngzZHM3^8U&d)HkCIpO4**_x@9z7O4kOPxUGmE_cVJPQzY-CxeScl%#7%qMj9HBT!ItbUNO5BfHYp_$CJBb!{0F)TERD^)NJ~rXe#L$i61Fvwgbwcze&14Y zc-P^!=e?r_7ZmO4ZLiX1XM=|MxXPh!)C)i-B>7%(a)aKz?i8NTc70Z=PLiV4bt<&Z zPxRkeCy}-G2ns=(e*XO#!2)2Oy@4>Oqq6C5k?-FWDqLGc$&~aZu!??5?uFD%T=4qL z6Po!R3oRtVsb~gUF3nD5A{D~z9uz~zxiDF$crxam{!O*5hy=E4g<0*9<*0%f_A$ce z4@S=mWkJ%{rW@Y4YN6cIMvOl^5hjJgC|+KEk7g|UUjKU>w^g$Qb!wC{W~*j+eksMP zO@;jY6|6`RLQqv!xIVJ<$VjYLKX&-`uqQ8mFGR|p9<3xz39ge!9T2?h=W;Q&iaXvJ z>lmreDkbv8C28_dhy}$KfgRfsu>V(?XppX%ERdBP_9vPMsu5n{apZx5)7VUH*w7R{ zRF42j=3}3zJlrf3M$TaPatq5i&j#FOD6H?(6I#c_OOAhB@a(S!dlW*Wozt4$Vad3* zn>?rghpD#=YvTd7hkvxtmQtX_onpnI6o&$(I4N4(LU9N#L4&l#-HW?RuwcQpI0Omq zn&2)4Uhe(h5AWA~_Stfo+yVLV^=24`N+G`DdO$;$&t z4LMcb^>%eCCztbVf6ID3D1i{E=KO2R&)(smX9!npxABSEhKIg+DF^&*8F8nxm)1Uk zgtM>;0zG@YZ(3x=afb=2gWIU8U!7Btn=CSl3tFq*yT{kXtmZxd2znU5mVAa&zO+?z zw3(E7m6#Lf=BZl~Z!UgOSnEFgz_vY5STx5mU0gg|zzi7<_h9+WkjRo*1v%E!#dPIO z_!hJt)L_4!!}zO3;rCa)O*;$ga_Z>d-&Tmzv9z*)oWdgc5Hq<#hS0Wsy~faR`Lz2F zT+P_nHG&Qn;qg|?wbg>mCBs3?f_Z6{xpA5Cd=N0G&IDj&`s7koY|b&S zR4;uA)UBUFs^ded$*t3ed~KCnfPjs?USFeNYgdd3U!z?!*VVMP%zre7buJKtSt*2` zGc_r@uwq`E@BVUhVNL_O)oldAX=mykHQ%?*0EuWumSGh@?`&LWQ_%O%q`8~yLs@Pf zQ=+FNLF&wUX%o>?Cvg`E7qjL^d`s`@?o*elw+&qjgC7D#%4nyWX5mi$Ltmgj%PL(b z+l%pJjW5)SJVB|-dG;>xacBfNu3#ts%S|m1(uwk}UiN9?v=$XbB@Y@HRPwBBg7$YX zMJB;V`xWuhaW}oL;%f2PgrhGJ^G=kKbsvQ5>JbyEo8zgGE{PH0GlsSLrnTp(dpg{9 zh;rNyG~N)r2;=E?JOSBXbuAv@enJNfT7P8WMUsR3ecO8%<7>O8$2(Y~4RujfS&;2I zakZ7P8achu`c+aTG?o3?yFVQ_({<@UWgMRajQ(0{inrqT3EsE;2=F>-SheR>(~W^# zI!QNXl(s+@&F7>#!B29r=+$yMJLbn=<#UxT{M0^)pN2wqkL6=ie(xw zD3UgMhG%YGp0^oOF&J7yye|}?wPkme)@pO>w1MghDxOh#k11c7o{UC`>65jNHS-?<>xB&Q*s! zlAHjvObuu|5@z((vRR5`DmYbx&v7?6|Hhu< zBdGD;;Os}R9?i0k>RERK&t`GkVjhgadZrum!+K$ zM}05!a~yfEpM&bC4n-{y#nBT1IqnH~jKzKh>vsHkWfdF5d7dZt(VRc^^JK1{lh;aP z(CPb2(xcahJmg5$KUmgH2glJ%J~iulQb={s`wIT^EO9IC^1gZOGCJ#<@a~t7tyfpe@}YC0;@fFH(-PlS zSRct@s|nqCv0{pzcdK!RXdvdCTkn(Ek)E|TZS|<%T1^{!TWlIl za}_!t+%BBpRX^Q0ernT%vX8Pl$h`{cn$({3Eqd?1uSSr7i$HVd#QFmYdXB^g)((eM zK^542;?GT=Wuoni6rNHuqqY?@NvhJFn~r1Q)mVcow_tO!wnS_Ht3EmtGNr8NmW}$i zQcOS!UZI9}jKcMq z-J2>Y+~WSX!M|B4t?FoRN`BM^Zh*5@Llk%XzmRxMX#qseKvDMf7LX9G)I)0?U>O6IgST^6&SXh@ z1zrOuN9!2=DV68;J63CF_e3&P`QA&KHZZ+y*P{=fEu(N`j4O}czj?O-2>(*qZh{=V zK4em3BlmS{P<~F};aT&m=F(2tRuXucoof5G_g2uLLj%7T^^-4O!5w&aWHBnC-fu=J z>^yk;x?tLwOKS#Q4Hh?vn2^iTb}Nc&dz-yK1c^3Dik?9<&xcJISt;o08c8Tn_Pk}3 z#QX6v3Hi&iV$bY?zr3E?;RgM4pXU^;b6+n0nY zhyMjIax(eV?K>9U$!?sBO%eQpJN$&=M{-J`4&E>|MjQS^v^_P2(@b-u4>FUQS~d>! zMMZToob%{iBPqnC_SC~aXsDSCwQ4L$+S4wA5s6`OCKR;ZEA;jb+}TkbPQKNaDU?)K zzgTG?3fsatQq)8L^*b$&e1J(kwnE*}+~2rNx%6tbqm8~~H86=ZKj^tThz_w?|B2i- zOTWfB=f9PtE>o$%mhA@`6>&#!kvtdq_4*~@=I^l{;A$ox@-{;EN`ZmJ#C~d9mp@YE z&gRGUE4J0j47NZP@$Wc#{swap@!Mrwl*9Zf%p^QYn@ndfT>07ONK>1`GV2?_mDiG~ z(&5nkGi)W$z`Q3vLZI#nI7V%$<&@| zm|r$SY;L6!CDKSLb~uCGMcJ(FT9&WsQ5z|PjeIk0!~Bf*!Gw1p^+;R#2y_x=jA5-y zoGzkFDi(>%`L<_Q>37+j5o@HXDt$|RAWCEmRnyP@f-ogA+;gct4|WFT6N@~{bS2q& zR~u7zbkOR%B6t)#IkRD8;bzOU7c@6W&KC4t`4KP~7VJpFYR6Axfs6C{pI+#BO?YeA z%$!qwCfu~>!;CmIzXEGC9vW_PSj}kmeQZ*(>>MBcOktI)rs2EsR+og*q=fukn2Wx; zX@Orc_+P=PZ2r~k2A(1+0E0^zFpo&ttRFQTg^pM5aQTHA9ruJOV9TzAN6SoNa90Qm z3|@E|AxO5j4rCz_GUh8!N_Aj5o`C?~ks5+bn{e+#foa4{<(T$DK~wv|9$l*GQn2YE zCZT_8xMkH@0G~2jw_;iictoW%pZb)mPbLTUz5>+#ep9u)g|-Vis53urm+wxF%;Bwm z3^*9m$w|DNK!9dm)1$LjKEq|d`_oaRiAOBHZ>`fJ3-@^y zwdMf`E3@R|^9BB02IaKQkVz@h0If)x(=&pien-7u8%_H~oe}v9_6@cNw=1N3R*`qQ z-eqoNQogTh4w7ctow@A-J7~QrmuHq=Bu1Q_$6>H``>si{Pb9g7))ziuHd+p$Z+r^b z;5kZ*^0a?ih|1bD`knB#y!U3^g~vTHy2x)Xl|70mg9J<{QV~vK>m;B(?{4VaL7O^L zt0aW5f77~i<@Kf+29wT_1yBKA<7S^%7r~_M%<6g&+;s!5MA%sp9dhkxh<2h%pmNQycaQ^DOUCre&s)8T@TuJwDzu3c?v)dz&kEuE|Eiz2Ra z3P0&pmsh1-Gef;G`U40yoI>K?ANJl*Z0S_lbhZise?1+_qylW4hj0&20oDQbi~W_K zyO5KLAQq;y2MYav{9v28MpA{WU#PlwoPuj}G2)(f{{@a7sbZfAWq1l~n0<;i^@%(a zdNC6uX1Tfs zy|YYUbs&fWV7S4soN4UF76b%MauzFAa+_8^q^YKu=(Y_nzg)gMOq=BuEQ=OdvCO(2 zlNAs+OM=b$oM zu7@0)S6w6+AY-4TAG&Y(`v4i{ouX5AKWOdeOwq#oL^&#k{MD`0e=tz(Q<7PH4e_!E zRrIZgJ9abRuB$LLZb1B?>Gyx0ojZ!|XAK4vsS~SVO|p4Me?mErk26wpr)MUv`*H?7Ik$@V`$fo$%N3;dh-|BEHT#b&6tk!Ge;0TafC9G+>|Y^nU+Z12Q$8+K zlx^C;iyPqiOAE@Q3*Z+ZP%X^%muHCxwO2$R)7V z=VuN$XGGyK2L(|lzUuV&uH6Iln`08_xTkF^LRQh#y+Qk>F?+x~n6hHo~M?_&@fnL6_ z|Jn`o<1}iSOVJ@&!TqB&>GeU{#JDZ8gfmae2nC=9!q)k6%Vj6~rxLrWg`OGh-0c%S z-u%TY3j3J$vUMsjNIT?^{?~F!ADi6SJ&Uh{kcDnu4m2y-`i$4Rr-) zO4iCtZKyUVsx{v{A%VT9Zm~BCTKD_pYcoji!O6zbNLW?W?x14h@03>Mug8{T;bqx+ zV=JpH5lbL$LXXXCDeZdiv(NP4FTs;zJ8K?RPQzrig?8q$g4ptP#2y!XR4J&CZ@5z% z)tlZ6u_!8y{!5D=xr9_9(|#qt#CZhk>?%g=S|auKzYvF+Vu@><^3NV$7#L~akrQo1 ziGn&ee1&@9n-tLbO(jqp*fjL^d> z6#Fq2t@nNjzp64q@8q3vVN+B^wu@Zx*{4*=yx7<$m3O!aZe=5z7NJL}G8QLAE`~Z^ ze}?-*nf*A2K(*`MHY$-s;<@l-&26Qj%3&^~ zZ0KuJqyx;`OET>HO5Ag82fG_Pk9+sFDP1D_Ub}kyAkC6r-iX^bi)v1SdiR#p==klR zJ1Np4l{S3CP&7lI<~z}C5b~!B-Gff;e~>F7=OE4DjHp0 zDC<}9_B?mFqU5`Vl>BnBg8alI0&a8*XRoO;3LkuXQ+D$$&=aYD|2{72)9NfDTOmz8A+}M{|n;o^A*XkcnsgV0ittxQf=e*v^G@ zq|kMf)cr?5c{SJIdj-JKPn2W~v{x z2C$OWPj8+`tK_%Pq~t=2g~TCB6BXl=W}QM?(+Svqco=3f>@d89EN2Lnfk`gAa>-VA zTIa2~_{%rFeWDJAa-Y}qKGS!rCF2B`dBX}0GUe*{OV?_f4UBI08qL=jE@hy)Mi-R*hwp?s_jR6KNb+zBz1kXX4hVhmZJR67Thy%Ck$dNn1` zSdV^t{viQuSpUNCK*5H1mZx-o{hzin*xCB`-C=_c&@s>jVz>i=&R1TLCfEf`eU1!A z?<7GmSElC^?fum#0povUew}-8kBI?_kZYUX64k!z?a{5oDXC6Ba8keaHGT}52<)I~ zwh8hxv#U%>jE4?6dpJd|Z$!Rs8lh!AEIWPe#NQh-K~Y=) zO7bNk7l!k!Z>=9nhfyLf8(7MA>5{GMBcGcnsV%2_?PvzaIM)2M z4~w~;Wgi81?F9yTCBw5Tjkyd>RaiLO_oQ-)(1v>Ev^^HA^T=gPcGO;;mV_eV74@ts z5VD)+i?&OybZ5M}%8C7J4_ywA>bdo(1NcF#dO#fEh{LeF;(qV@w$UNgSzR*cmp+D= z3htFPoaJ@s(WU;MOI}}JWubP>6Ky}Gihg_kHR=-)p?hdn&b7eNzYipx{&^H$_Z?L%(fI5@DZoi%V#5tHF`Z0?^ zCsQ1v{Tjqt`V5uyRnb^qPyZvgNR9rG(GKAL<;#zBe#kn-alD3k!o6M9*LmP-V&40M zI3mSyDE}iCQxS-j#1P-6AhM@~lRE=@RJP^3uAjK$0Ckd`7|7>{&3acJ#)K!oxM_wr z8D_KxgHr#I-uy7g6sD!mTEXPlJ_GQa!&;+Y&OIa`%@^9%rP9L4Xtb|*EqwRWX9Eps zXwMG7(?@@B|B}*)%phGklp+VjgDLyOBo(fIG&^9-m4PRsn`u@V_-c~Rh;i@$-s*I&v;zm? z7ws?_Z%dnC*_a=;!bnQu4}1#WTfk-9ci5S#GllSB%BI;8a#3Q}{lV!CJBccI(?hWA zue;WUy?+C2Jgfov7||{Tk>YGDo>Mz+r}e5YIekjRjqQL!xl4{cY~=72g5X7&K|+kO zCx+)1ZA3316js~1l$g{=O>#9}ee=^l5Ma0r|HlJOlTi%YuN~-~nP~JNnk%X~PCaE; zH?_5wFg>sNVO=|;IOWwg(#e_FSiAH|#;V~gKknT|f{{5Nz`Hb#n6}`o$B=V51}`+% z@f*YHfH|g#HqU!fplkZjS7}8I`N_J@_{ASF-l0?;1dn_aj$KWBB3%3gDOCB6rJ=5d zH|v3tLz(MqXoEOupXY}Gv`5h=3!{EjZt*?TyZu9Nw6chGG!cPJ!L20ST6u5-sr^i^ zSsK^m8xGoWwd`aA=g2-ppVRMik8d+zYP&PhUB|h%(O>p6UmtH75BMTXLR)zn_v770 z(NP$S;LvXy=Z+bb8ItqGRcu-V*$Y};_<)#6d%Kh3z?t5KulGx^?Nsqsxlm!a*{b3O zScTw`N%EJ#;zDjLj6rtWt#o%Xhx?$A85!GT-v-iXh(w7Z+suZUg&+#>KJD||7`bxS z?}M)`&xb$ezz>S&+kzqM01<08ICjMH)#UGsi+OTPt^AH!Td!J#8kENco z6eq$4L#QJ1%+0gKc%tcP zj2(^AdAP(9GPw6c7Vm3ywG^fu_NAD<0oO4YD0jq-;MOK#b9u^O^79ItZTFM5*>5}@Vy4@FscY~J6c51Ed#X5On>cL-jz z^)=c81QLI9U98P!)RTzf7K{W2|CcP!d!ss_y~SKrW^>3QgIq~&fVNAGx*V~bK zvL&EsRW(x3kKVa6;u#m z$7&j0DWG!ES$CjMjvo1gjxmyP&!*ct%X)r{NuPHY(=r>*K2dyb z|MoTLP;}aOC?05~GA=1e2-9II`ZW`hHpwVZeXn9JV=Q0R;A(GBv#s z7YdB2IN3KJ@uP?(YMTQ~4s;zoxnlQz1dx=S=a95vhcEWc$b?Z}uL&y7-b@{tPBYLj zL7Ub7aq^wz1@e4VGJJUlYIud_dE-Lf>w zU3Sxlg^6D)3ifv|m_-C3;nINmVDkls&qY!_R}-nuzqTs)9b-C`YQ(YzR7@W_M~K(A zbzW3S1v?1*R`J!EEN|*jhL>+k+$dCska6F$6e0brD;$ct{TKLt2LIZ8cFD@^@%GcZ zZ9Gw@;L+%RgJm`g3jhgF{tJ-FWE9-<#m zW*QxRKjP&Pq!jAsDE>o+zSVAe%j{Ua7@gfiQ)-Lr9J!x-43F?af6j%5;gV_eQ zANfr3e#b@RZ7khk#XT1*k#3$EV-v0XRa@pE-=zCq_8{BEc^Y+7SDWml+N>Z2r8n%O zn62V7_zH?67WvL77E!OO>?pw{cTtVSb)$rbuDhYoCvNxJk|_6!h;L0^CHzfrimy>p zm!&4GxulXS`_R=U`Xb4S3w9mpm6ZKkx#+Zs^M>6DSlPaRN_~nM_N|$T`HgzdV9^N5 zXXVb8E?%r`>`iTTT3^AswVBovp90UfS%Pj-J}YA@5dDCD1)k;MqS3r(*X*xOzOe;7 zI>XT#K%W{a3h>n;QL~reNQL8^yhmY|o7?o(v0e$- zxYHC#9B{pm)BzV{tk6xUZRb0dTtDoxstZI3U1`ed5aMLvbDkpJY3{g}k6z6&Kb*zl zE}z-xm2SeTX6pYWuGBa>b4hNRNlwRN+AU3Dogc0sC2p0Anz+6E;)VKni)oS=0 zMawNGNDg67e`wn2=>4vXE{k$2k;AW_G4~*S%KD)HYo}6{E;3sxJf=Q@=a;>=q55nH_W|T0XQ+3YUI2qKF3UGs`bD4TxgC+gkr^80R%`z-`AFbx5^U;mbtJ z8~ZN3Fj|*s+q%{&X|jN=_=y<`ee^MFLkUoB05wv5Xj2k>>_$J#5$Y@qoY`nAgm|^W zM}D;-1N56?l;9p+7nb_#16A;bPe`OlC7RNnll$t*o=57*_kQTL>i@OX%E_k20>C>Q z=dI5*ffW=tJbXK+NyB8|DugrLSanBUuryTl)lA*84#7}2OZQZg=lj+v2O?~#%kpmx zj7cA1_1iyqt=!ti#80v!hw0t=Y;E}mUfSHOARDXeUvuBv6)dTMb%{4F_3Iv9kf#;W z<;435=xvSI!*cd4^_!yZcUsSpYL)F84q4P^MNaOx8;{TjRrZrx(?-p37U@`CyL`*UtZ=bHHffNJmYxB zS1BpY!)DL326=&t4SflHR4MNXO4Wmz2kBtFRCca$bUB!|MQ-tLDocdY%5Vf#@B$*Gsn1tk^rO}I-! z5!!14M+#!y^SrJ~dFJobCBB?HoA-5Qb0tSZBKrMufEwM1wRH7fw2sR01HX#V)%1QP zEz;HM+`YlzyuMD_6(s~~QvOwxG^Kn0n*(CQ5ypM7SJxy{e*FK78YOIaYO8qdai7U~ zwA2%etkT*duQ|=K+7lZNwyp4r{PSr9=CXGvr|;y>7oL=e;&__rYea2YQR(gEi*STm zH-?r!)J9#9FB*ZS^o%`D>cs7daG?GX-$x;fM%1b;9xF7}vBsh|7krZ|G{6^jSTsi+ zi47uDKX9B&G}TE?@Kv<(CEF7Wfv1KW(iEvxx$j>0_`9!$^ElCdQOp!J>CPD|9(>Nd=h70Pju;2@`$ea4ZrzOw&H;$+QdHv$ z6hF^&_Zjd|J_2^2u+Hv+#OWKU8dA^)^bXIRI3Fc>?XbGGmdzK%AbzRG>Ka;#Gq!h2 z5yut12N&Vf2dX?22DP_yUE!n zpvEA0P%n^ng%l`$d#PKC`0eoWrCw?qrxw*GycNGl)(N0&w;P|Gw-M9V-!mm#SPgYB z+X{st=1AT1rQph@(Mfkxym;uDEvB-vgA(|QK0Ev0S)upXU$gut$>vId%}|l)M=J?P zmhYCi%q+CfCQRr3waRur+VVd}MW*ta!B?x9Z}^~p?|K}$yO@Wo+D+&I>v+sO7p zdEQ5q1dQY1lgng0S6gEjzxBMyq%<`YY6%LJZEg)GcB85N#y-g&`G!~2fmgrifn(V+ zmJH8?Sv9OD`S>KfpzW(2r8ou6RvVTHsp>~t z6-N~oW#sTb>xE|;LBcR+`)w;^hL($l56(U7?KbBAW9YNRM9P3yrxPV_l!zL$F#F>nuxsY$06 zsLS8WiQ$B|u@zJ`?DFj9#spoKxQ2dTD6CkY*f%oNUZ3a*%H`<6zw1ZHtS}J)-l3>w zZ4~4y>qZa0DlO$IkerBj;kJI`Yqr@PQeSrqj{_!Iwg1A?S<7C!B4MAc>(TnIZ&dw4 zRx|w?lojrUg3Py&_Bo%HE9-=$>lfwibXQLM|Y8{{il}c~`SUxM;?dkBH)e(y= zY`bsjiXB=B|0ehh!#^3~^a3X_)y~f)$QZc6ezFWft6z#3ZZTbBsPg4N5)6<)m2X@S-EycS|E2ybYfp!0pmZ+pUIofkbQAlL*;ajTa$ zu&)?HWU3Egh72}!7xANn_I)L}|F0qjCFJUZJxa?9TDL2=l;s$hmeVhuu0(_^M34*c zCdCkDt1)Atujq(!BLRpmh@P2I!K)~0K2_f07y{jtrNa;U+QLfxLG@Y(Hq1#?$WJeJ z{p)4Y=mv)lIBrs64d>`@nXyJlu~ed% z2K~~UZ>P!8pyhGXf@1O16xUeyo8G85YN)3|j6a?d>=i$0vsIG_EhRc27cdDgsJ8Iq z_dA_x2IYe1r9EtF5!F2mOE+l+_WNwS9P56S;4*XaakoSQwht)hxWLION;w~MrCXh; z8D(n_>`0Ud_}bmUwNi&5L#pIeb=uso)Dz+W&grRkfpDbWTjCig)bI-V{=)cbU>+j5QQOV+yb z!<;^RDQ<$DCGU3?BlVO@0c7JcjKDOtF*f1vQBnmzpD*r)=!g&Q2rMd4%1p55#%e<2 zbDieg44H0qPuvXAH5VgD8P2IN4|0bQZHKv6`zPAg0;Zn*4FQxibp2fPKOCCx=&fzC zC1p^syTec_1AU_tw(0o#;{K|oMATRg9J)91F~pM>J9Bnwz595+j+oRiqz$dcM{kd; z{tLig>aTGP|A3oX=%O(&erWKZ7p}yi%wY#&op37a3Y3=C*e`ka4)+S@X@g5g!qe{^ zN>4h>{hA6pe?NF1$~U&0sEIwl2uqG+eLwP}pNXWjy8xA^R+H^VR>7fHYe=VssP|Jk zXmT|#nzhZSqkOrm6l?ZmrrxUiv$6dbQY>5IO5EwB{)%bS2iKMK^03dC^qlOiDxsaY}x&86Bku@BC!__ zW%-D*ZYz(*$?Zv4gTIFS^+#)zGn{Z6W^(vu!q-VcCDkMc6hAY?&(jiI=^drZbo&eH z&nVNFmWRkn!*FE&;WXDX2~aLMEPAE3m05kZHNIq{;6khYBP61a1-DdjuvDp});EP1 z6tV~q+P=naoVC7=n0}_FPqO#!njtop9IM$O4KN%d@R>cy@%568CQ_q~PQXjnG+c8j zD9y?GpP(wO&6Y8Uu8qMf$c$OvxW>(ol{4Vn!kwf=U~4q)n$n9hgg?S1HqG0TXo3X9 zf!DePE+W`0z#iu}(akweZR2%n#B5LDk1jaiOEDwLzz#}-U>!09jNf7j7KJDixh$ZIzuj3OtScz!K5Jn0Z9*X zy4%aG?r}1up-Ge~$?Ep_G=URAjc||Um@P?|C8nl$uAom{%^7SVHTgoD;Eu>OqfdUK zmF&D(p=4dZ+~>X8Ic@HR%uE$wmRiKi>$mRjKkuoEA2UzK7?E7EjsqMa{o+Bb!-|FS z(jOvEx;~ZQJ8^b(@+E%!k

>SA;m6=9eBjTC>ZdrBe6U#(64!bRO|h6WgGr5 zbp^pmwss2UwrLDKfp)}u#!A{avHwu;uaLPwZ*H(4QRrN;puh1)Agd?Ve+mAx{QKbg z-e=?*VNYwROX+W4sS11@Q*p4%&{(ue1wWj-ew)OE|6!~Ng%B5WDZqWzmhC$2%D9_# zKsegOi{o)%d&6T&dpDR|JzRg;{~5`6U2^&;$g0@`6p|TCsni0)_|fZGQ2*UFo_*(C zE~k=U(UP0ea&P(a{Ku8A`R?$eUIF84+yiLSz>-+1H67!~l^BcD(^)i02ZStN72FrT zdoui|k>5tTsuAYx!Ip>+EChDkzcQbs1~=c$(21qfEKvEa-WwG)m&!!THh&a*L8Hq8 zTdU&j>3@B$qrFm=eHWx=6TU8Z;6EPrQs}vYb|H5F#_!Y5RA5GTOqf?Aqq33XfBPIQ z-pyv{-R&R0T}{2n7h6;jMcq+4^B7>hgM_-j$z_wLgv~g4<*yh@!H|-nw-_@{;WO@^ zpD$J!6Cu7UQP#=VJ(D-!D-1|Z@bk#1;K1r+iD#7lN(_w~VW^fL$k7-_B0g*xO5VTY z%$2VTUI#U@1mjZ3DBS7Bg|q}$_J2_SkDGOHT5+I@IjBFG15msUEfC}uexxh>bY50z zm?l-S&b=A$ausKPDKC=;y+(yVh_lrv!Cafu7!eie6!2l5bN^8rh2RrJK!WR*Wm}Rs zxnMdmf%>V9234+6WSBMHO4gFtdd%g$ZX;?}8F_d2HVhp#PmPm$^lQC8hr&|n?t$a8 zNH)OeeBt=%98x_QrMsq>hU~De01tJ0BZP*sxu7KeqG7_uz1}?R*{K$Nc7u94e`~mi zR#BKrRWg+YJD1?X>^+xy+POtT&O+#*81{mC{>Et8;EAu;h`}OXW>p`YCk(2BaLo#y zVwP2P5L{~}gk(NM*20OLH=sa@uyWw5OBu2oK$ zOvAp2oUYVv73tF2yK=6^6@j{KTu#I4|UqmwbnQ9NV$R;cEWjd0oL50&rGt5xtfv8x`(Y7L33XyANCm+ zC%orymg0PoJt+!(!1t*}@saVh1pQpu=sS%iItQsTv&R_0?R`eBf({{#_Vz`VNPy00 zl-33jw67Fap;^J{+Dn&Q?udddV{_r?sGoKT>*- zi$ARRFVszIUBPsR^}>omtEhf0nPIWAU+&$&quTqN>4vOCIfS-%VmBe}!iYHn6nU{c zGar1~W8PcoBq~t$sF^9ht|O)5Zd*B5OH)wM_79@z;8tFr?J1J~VjoAloMy*L25Ea4 zfJaOFwDQ>-Rz|@YI-WNVL~Tfko-0vUkK4#iUR1Jwl5^wWXH@Lv8$4oB-r=4Nmi87a z^=VxEnRD<~alncNS?L$w+Zp_RJB@F%1`2?Cq&H|9f%4RNv(Y-%?eUDG+>CGiD&Ph*d~9Hi`|xV@^W^ZiBJb`AZqz+We=2%cJDu5b;B_qvIs zGi8&d-`_j;VcT$p3Tx=U2|Hz}x`=5v4ozLPR)9s}HlV$-41^VRPuT5_t!fh}9TOWP z_rW?5ENj%qm+*^9kk4S{t~^0{_cPfa^%Y1|WS>g}tB#@-w{g4JXOm}-kfTeQpX3pM z1fw^P9D(guO%{v$Z$vL2D53=CJDhHive`)*{f<5k8ac9FtFWGXZ!&i-HF(BZwc%|c z|J`^w1WQAf!9_gq*LJm!e~Ex<&Ce2n9i4y%s!5@Q$n~mxo*NNND|szDHF*!2yH}Juy+7;;9qX^@He!>1VsO6*nNF~JhUq}M z9(jy>aDQB8xQ!M;$*5=N5RV*qkZ*N*EiyGY;g(H%4%gJ3;&Y!Q(I0KS=K7vGmRp%j zKX39>ihCKfmZ-u%YwIGrK7QD4U((u>GELGH|8`aWX=bD#tN!8UNfxUs3!c3t4wXQ~ zeE>?7aGM4wLl8P)@&y+!&fIQtjwDL(jX7Gzqs}E~C;7Do>^00*#&tqlNWif+f}jM2 z#F=xW(%gGgwy=O*@*{=c)sdLZBmLP=WrJmH?fr^9aiDC8by3Rkim3%UEctQfb^zq- ztf-jy$Lj;SeBnnmrQ$nptqcj9hMhswKf`Ea5D6OTY4+Td>%$1)P~bS3$q35MT!PPn ze9nG`K)`n+Zqx2-qUp{55eN;)H^ME~M(#ma;|~-Qe}xM_@evF(CktA=`c~x9d~P!E zBo&9r(|0dZOb!(L-Qx&gv|k>Hz32}T$>mhze2)kUpJeI9Syk#@d+OLZ*xW^lO~AFq zYSEbC8_rvJXQG zrOUDVavvzu_n&?zjMN@b(Io3vqKpr_+8K5=H_!&5sX(JiqR%axOp_!s5B(1Ng8Mia z2+Lv>HX6Kts72?Ylx%n({^zOI5BF{`ygyhxibL*qB*zIDmi4_Xtr7~B8IMM+Jv{rN z`$~EJ7NYs`!wkbS-9R(@TcpuLo*(+%y&QEUf1T7(i+*|D9g8Ky!TI}xI^@$kcs}xP zf_pwYbs30sb{D;NEBD$_kezS zA!Bj%C0c(N>TjZ%FH|m`Jj3cD3ql~|j^!0Y_>e~h$X~IRkF4b+rB=z2Yy`_s>Z4Ai za(}1{nQaFqdvkKwd{}3n_YcjDP3h%LGP%vyRh{uHEcSx$)o1R_`3!c5$ODJmv=*3A zuj7j%-E-w4PX6u{I_8 zCPZ_>)C|2ie5188GvlFra^$|Om1~@GX^~i^ow<;OJ!awdJBamIhWL*EY5moA4ds~= zqQ49?tX!4uWJP^zUQt14d679rlG#Mvd0}JPS{MnZcNR^pY{4FhZl6W%k_7{ryaF4R zR}nz#b`XDlMwX&#wxAE$`@YVjf7cY7n6~S7ad5ROvk5*$B`o|5Cm}L2TQXT-(Q@0Ht*PJveQmlEG~}IgLBiId zRl$o?Wuv)|kP^9h$=Ro6x^f?#h-4> zwj35q`;aOqQ$xS7!NPn<7uMvOAXE`M;ZU z4^Idt1N``WREJko@})pm5CG!`FZ+7<$2ABiY;0$6@SkDc+7o(N5|xg~Dt;WI1vs3I zCEkz!LH_L_(RBMI;(PU0eAVTofc%lH?>DpO6iI4nsbIb;h~2Ao;CZi~6a!J2VX5i2 z$jSL1x^oY7%9)i9t^nLnb~k_RBSpdo|2!8?kq427!xitT2hh~SU+~L+kRE)iw#ZWz zXtvAn4oCRxL$O$B$4@=2pY&(fly)v`s++O%?bE)x=7!;C@@EeJn}6*wn#F=?gS?~1 zFu;l zGwwALQV9%$k5B5f=WS59tF%eY-Y8dfdA?uALgUt3#nmPT0U5B|Uw!=X_xjOJ+-~vF z_j+=O4-*qQgX1G1(x&vKKWCXU9C#@|0Gss3^fTnRWez?k_K`1bQa1Z~FB%oOe7Ob` zgzLe@Em_MpwQ}3b_k;WPMW5?C$Jz@e)rt*0X}5-fI`0p{%u78?8ee$yUGpn4o3L6p zx0LtBQRZ^mXg}CE_(2{lV{_iKW)a~iY`(Ra{;-^RNXkNERCN?1Xi}~`O;B{wuX?1j zb|dQ{hC6~i#%x^^KxXPqiHm$ksT)m9NAo5-j>C>3ASA;4iP?RFk>~$>Nxm&~E@HtJ z^SLzWCvF}8R)yGMpke_n1K}){!v)gnH|1=1AJ`=vuNuHS)HAXrwr*`MQXP-dV4cu+ zU>%9zeJ46Qvau2(h+Fa&Gz4_xM+E$M+q+|Kz$~R80MwilU%d6J-km>1-F(M3MfbJ99JtFQ0z5 z&vzkx=ax&MVrHp13c>i3NJcMF`oIIW-pzJL6B2xsFF}_Kel*v6F_T^yu;+sz^AO#I z9Y&AXTQu%p#eDPR;{23Q39XH|HZgspLf_M@weH*+wu$z{aYDPtv$ng_1y zYTST8PuQ#W3H)=~k#n0T^EVZ$Y&f zeownxAcgsI;lz-0)Lnu{ZV|^&%rCG=Y~)P)A1jpNMfj8ZZG`+Q|8~Y83y;o0;D*F) z1I=^pZX8{vmy8W=Dq(zzo{>Fn^_Neep1UAMacG{B(xp!LXeJ>cCFa+bJ&NCBJ2`*Q zR3qXSY_4CcBhl{kk&-oqgmwyXm&JaU!viHq(G|1)XRnEkkLDhk6$*Pk%WmV>!Rh{Y zgL%D)Y-Q5$H67Gq{X;TKk0`w;4ONEL11iV-kc&N*^o3h*OMiC6UAZ4J)_wc4db9^J zk2aS0Jy%Yll2(?bfM2NV>Qm&1E{=XDc34k1b!0T*m1q0ifS%%Z=P|0TJY}~GXc9f}p&uZxZV)=e<^Z!THSBAyWEDOhg1PQ_2Avgqg2<{$S7I$}tpuwHR zoj`E+h2ZY)?y~qI3w-) zywkyZsTDf;Pd2(r#L@l)=iPj+t001+S0Q`D-iTcI>m8_)b{5@Z7QByD(7H^qT~Y7v z(J57d^Eo!U#`avz85Vt}aKcpNOv*cp{9oLGRobv%VEx!H)czW#*%ylREyFKkjPB1= zx&)f~xv=8veDee>9Jq~>+zQF)$jB8{4O8=D^ZRV}giRLQQGAVXl;-O*DOGt#zp@5E z`SLnf#(2e^w5nl>;@e8x8o3W~W&a^LjfQ9ba3G3meMAyMhF{mP&q(omc8Z*}Lt-JL zpf@vG;qU0Ntr^Kqz^LDC_1q*)2OEt;xZ-Ie=C8*I;})<4lxm0BzAlN)qy6^v=jk7{ z%{B4&!PGWLu{z;Lb0s9PUn!G9N9Kw?WP{K%KDxzjn;y0T!gcEq5LSHPc2NR&|5;z$ zP5$%in=6!nc+5>%(&}wA`%W1AgrB^34y)qcG8KO3MhS1mGiL^>$-ad=6(SZd@N#0K zOG2o+J2JlFIajUtF;}E=?T-Z9CKf_;GplH=P|stYO*%GHbuB_;(x!qQ%bVhn%s#Jo zE_JuRTm>nZ#;RP|&y@RTU-EJHOsTbXIO!5R3*mR#$=QGEnShX=$X(fK5<*=ey_5?}qd&iQEF zepQiJ2xu*k$UbEaTa!78O{&+^`zJpE?6TZSiU)BLdbS<;dTWb4pkvBD<|!|$?Gp0> zjb!t?3FBD6!SElLSK{#nbneCK>R*u-(1U6>9wEfx6k!6X?YB>Y(?4qS7vrnT3(uL`{< zMA{Lj6bYXR#7#UztF8{&eS+|2I77zK-jDp+CD0#9aI>FguS@oeTs-{8siGy{w+O$6 z9cF}%oF$FVfMdz8JfjmLm#=wb^@L)j^Zz%&NVyzI#R5hkckSgh{wviqFs$PU>kfBd&!MPA+E-8ZWG>N}vfdPkR_R7ye>$`QJ) z#oN~nt0>UnEd06dzW>3WtA$Fw&KIQoa{oB5q8~ehHFMM08LhG%;aI;sQ;jnr=TeE# zUKxBIO7$c0(Qo)0!9&?2RQbuL(q@i3+po%C%;;Iu&S{%r(As%YKVm^a(=&6*|DS|} zfg3^(vEg7Q>%4&rPs(X8V! z9W5#@5Hs@=3V_!MZ{=aG~y_@&L>0n@bXI@NTFD<&7@ z-V$`=NL1;zKoptT(vy(@0Lhk>TW>*kpXmO{g%W8G1& z8`crErnvgsoXPpfJ4d{u{2paT;O6x^)`HXa3 z<9`xN&W;{!-GR=|vD$us^3Hprm+Pw74c1&4`Yp9^%imSL-6wqyE`6QEfVg9+c2lVu zO1iqo$B$G#t(+S9L+q1ffeSpPhgtwhQCCVLH2Q^)40QC#yJk`Ji^))8CRQl0ca?#eF3%yla%vQiuo1}m@nFXN_dqY zm1CSEq}k(7jboDFKC=cY((Uh#oBeBqoa8Mw9FKVkp9Jy!EWgBO()n7&MmzS)FE<4o zxbn6KD2&C(5^>H)%tIRCy>-hxWAA|9;{DM({DuHDp5Dp;qw7C?ueCWG7)`Fzjs&pCZ7)N-D1u2Qf1mQ zo*?vUK&f$}ebMBje+9T%egR z_H{)ci9uXS=DgX)Pv|yvUFGR6F=GmY@>isr7*UsOeY4H`UmpzQD=RYX25g-2V_L5CYyOvyK^Qpiw92ZuDZPJumnic}c}| z(%2hsFbmqx5cAiOb!*K_!|EDu#^D852(}78T>=e?Vj^iIqg&}+mE5-vjcx>CwJXnG zndktn$x;^z>O;E`yhRf)!>ttCc?lSM44c$JSBe*je_AlVy`Cxo2qn;D&6dRvxDP*B zUHLrX>>$jRhOCRNTcVXg5Wq}?nJh?mc+quvqoiI0q{|lfpP+qc(@9IB&KLTWk=q#j zhJ`$0XOw7$wrcaTvOop8mW;9Kz zbc5kREqhm^JBr>;jOI)l9qUh#n#Lnj+5^)( z%UwzCn|$b90cfIMX?K=L($i8WG#If{r(oagblsU0FC#65bbQc}*t9XH{!U&K^%o|o z?PQ8b+@h`~uQ4ZRr&=R_Mac5&qJADT|InZKkcoz?E;jNJxvXfn91caaU?iX;zYTNt zL61o?YAbQc2Ja`!0oy>UasR>ILMX58TuC|$(LBcGX}6538gmdw39IWDopFoBG^VlT zFv#Yzwnk`0pg7y#;t>=7-s6V;cAX)09pD*(VvzPZ3hYiHXR9{h6^J|kbb1P}<%v+| z%Df_Q`hnN%B;~2T>tyD3Xcl9%*^VkJ`W`4Y`WGtuSQsyv;x3wV)@DKZaciIBZ8+qw zl+_ybK(!8VV&*vk?Ryb9NLr=#qfbk^=iUkB#5M0SPu(v+agA}mp|O)>*0xv5A#>v~ z>mN72P3IW=re#_>w;F~x)DAMjZ)XwHxOlF9emjW%dpc;s6MPAfzjljB*2LkmXVNTg zpTJh=amswZXm+b_F`PHdhJOt_Nkgu$zu@^YN>E;mdpLVGxn${%mWL90kO<9gpq}6P z?maAp6(Pzlf1KDJb9~Sd0q`YKyVRE(3#@p=@o`=(;jXwyG&15lxF7hHJ~FO_8Zr4m z-kE5cv;aPgs9FtcrPKjNVF-%9?mp#y?@_aSZ=z>;fHW|O8{TyC#bwj0u9~uXaoI3I{1y71Q~Bv@>gR9zi0gEM z=#djT)$maV95j_t=M+EM-Yr0jI7Zrgm&JnYnDmj*McnN0Xh`*(bw$xf$F=;v6V+sl zUz<)TLbHP2={;X#FN8Gq^kP;M|HYUc=d(VLzEV|sVIEV8N%tBj+*|9VR=krJ=m~wP zgjZY+;kf zqZ6QxHiS?(rFCDJc(x;Z;Zhqg{6Irha)4JsZZp^Q3!9)vtPyn!VeF@a>vSP zv#86L-qyf^kl-_uzi>Vw+(nBrx>7OPTre>_0Du+isrzUaXB z$TY@Qk=XFD$X6$xiMsUWzX0mvevOs29pcnRR4a%dDBlc`uM7YUW>o6D7?q7VHb}L_ zQ+W?L$`rH-qi+Rzdt_6y{sc8*%;Zup3Buxr&45=T?C3@}BPW)}#7LP=U$1aa6HuQ| z6$|-Zu39iiIQ6YCm_!WelO!6&xqdo{k3HtH!VkYL|QU8uiE0j z&0G$y>GHD%^`Ch)YSQhAeJ!Lx}$cu_o-_cx{z zDBqv^N(hig1`7`USpKg2@YCJYN#QN+0f;+8{&E#h7;(%7q2^ij=0i>JbaZAr!u{Nv z>(~9>^`sH;^}JYa9DU`)NN7(MQ_HBZbjurxpNk4#Q*%g*9t1OJm)r#X2N@9v>tgO7 zb2@@LCPyLEc^~rlkk=m)#*j8^(YIhO)&N9S)2?)CHiMV6Ro)|;rQp&3;@o*8UA*P? zF@h_zHFjA>>-Um%24pC2^+zg#oL#)DM)|18*%qkjJ{jA7+a!(uK~5nFHGM)ge?yK# zgqO&Y_|r7d616%pKQ-2iF*#6PFrTLFfm}SC@~`>#A-6vB3kRXeWI;orhr;{4TC;-A z23>59JgqiMoGs;ILRC>y!YFodO;%Q&1<)&(DPNL_aK0{&EkasK0EZ?`SJ^Z{h)sZ@bSVefC0MyH* z)OJp?o*M5_vApv9Vo{~H4=8PSlH#cf8alnDK{y!}#nYUQY%hCa^2QsKkk#OYJ>~ivz1s7G9Ij+MLRd{r?yN`V>&Z3=R!BSAGEF~|0I|rP&oRD zy{%}KQgx^_@{W6NIdI9+?;&FL-4FQatCkDiTU~D z*}6FE#IA2eYjdYh1*x*O$8Yl*)LO9F;l`H(1!f3YX{?7zc0jxQu*Y#DxLc@(FC+#` z8hT{PDR!qb-?EY|xHftaC16Wfe7;M`SJP_2J{yyhZ>QIQ{ik!5t5(GOQC`*7r3Zu| z2|&A3h9LZ^K-l$%lOdA$L$R2>k6o(MJp$p17~2t6)b9;r_v;*7yc7g-MxuF5QK{GC zoa~lV{IQNwT18dvo*wc=OIL@yxxD=DDbtfyve`Ysl`l!(#OD-dXwH&Yy^`;te!N$y zQyA1I#~4wU$%DnB&PDtl;tff%U~i0vyOS`FhQVp+VkTeCw=IUa_JOsFN#&RNNo|S( zj6;`ivdqkMjvSoWO!th-SiBxwJ8x1rbI-PM(d!!gc(ruy9i7~AMd6uU`~e!$63#jW zw)?Gefodz515$Oqe$qFMNo8SqmhBvU7Bhr?$p^M3gHMY~p}Orhs7)?4nV%05chAd0 zA)1a%0ijLB%BMD6d_QTXk-=lzr`>pVKacSp*%G}>Xv*%|tx;2Pq!g@%1R`!e-1Tsr zt?P_cUqvqKD$=d5|1L(^tEwXLq1fCM)`IBaj#=As+cni6Wgg!^II{7;4`fg*m z{o=r0X+p2bCQ5+V3G}31_dY;bW^l%AX5|vI5VzM4b>_(D6D3M{hE-lUu=OlLZ{8Eh zE5b?JUwnFexL{_1cPFRNpninZ5i%v2^7QRe9!}-u`krH)H|mHi zqF{fLN3h%)6>d|Ez>YDCb;^7ux|1LvN2Rv1GWE^_~(itnUcIsu6sl(Z;kj#mfLB7#| z*gNhkLS0)RQ5I(IpIEZAwyT}rEED*2gP^pX-;P)aqhVIu0<)2I+|v&tiBch?~sBIHs&bHM`CLipE0J{22v<^D6; zC~f2LC3cQWhwcv!vw=OrzmMYj;I92HPtqKJ=k*;CEe{^B3%d1(h4Qk6DK-+(67ZUp zM69rJ1>!`agPU{IHa_n_+Piyowe-uXYmm7Zo1Q?(xWx5NFyTZ|D5&uCP4Knw!3`^Z zPUYAlYm_6&yx&+sAU0vgk(d|5lWPI8{rN&pyI-|w1S?UQ8C<&Z!75L+zFYKP;it$< zpR5~iE2=)Nloj-HIp`kjukT~1@)tKBX%Whjv`HsDx%sHJobA%3b^hQvA|Gc_N|a}-02U*Xvh6N=B;&_ z1@?AE-3EoNu=VEP`MKh_Ql-f{7mG%17OohWd?3#dlU$2wGRMA#?qa^L@ktJsLu%5~ z=0jpX5x+m6b8ut8r_!hDJ2nZWaRbM_I(Z6_@RdzI6?PL1z(%YPS47hBgUrP&_}3$UE{!il_ISHK=~mNa8B*8X~| zv{?J;QvXclo_?)iuMiFzIPTi)bydC>jnwZaZj>c-_26w1jALo14-!;9-` zoP5YM_I36&8*(3*zoGMV)HGjUlfNl^Mcn{0UqSNVJ9ggIRaM(XFRlD|52>(u2@dOU zKfznC)8Wfu>dTH7Oq-*o)ix)3VH{73?qq_QlbJDy{k8wFxK>})o@!lGZ7E;2nJ{UL zIqBKORwDefjg)Qc-AF`;vO z`_8ulqU9&8?e1lG3$Nq)tfNb^TH!SCWF&$&M)4$>2Pyt*U;&Es@c9B4^>phOr=u~P zs+vMqrLR~x%4jkD#nx9mYsm%<{m=ia2vcHnG7fd_WCD3XzVg8OZeYLR*n$!+0u>9fP`3mjg z(Exf0%MVKc^tRa;J>~(<;!4OA*1cJN6V?P`)Ur32*=?kjX* z+kf%2jDAHi8u1y$|M>D-HTXfX?_2_}e9UUzo>PEP;<8v2#Xw0YfUm^P*_{#4p( z$CHA$M;@QTzVnsx+3N(wX9Ap?NL`8GR24t*v~m$8Kcyzc>a8NE59XRV zZ7;cHUr=lrxqHZX#45JD98O~n2kkX6U^Lp}&1Q1MvS)vBvY>rxnACKOGNKH^8>y zH<0-%JsXQe|Br9^1p01mn7iM76yVo_${L{M@{vq^E^3N$+GRc=x{U_2Y^|g+PUucu zb2R5;f+{{1_-a`vGqXNp9C39*QMSq3!&@cHgy8o$bF-z#gL2JN34X4N_)7gby`s#7 z4QbAZIlJ#7rK;%Mk8PQ67Ub@*D<+^Puy`<~sA$^%kIVGmS!ZbR&FCnZjE*-6>SZX~ z2T?O{?F^=qL>`58GUE%6XqvHQ`zB<9O<$qj9yGj$|;Xk5B?!$i>#BaKh$9Z2*&xI;zP)q z3Zcr~46ME%|3Kyn`cCn!1k-3!Jp*svFHC_O9N0MKV}6{}M*O|a0L;0cHai!#jifd6 z#y5B;QfXppE-bq`JIa$TrC@~e_yk8wodEwm1WM4Wp>pPQ>@HMbOhGmC!Bn;;Nj`VHA%5t$A9VQ=v)8%=-LTMC^2Elx|Tn;a{R}T^YM9e z2pr9x9(Lw!`s=X#>Sg;f$0p-%{G4}qT>}Xy*ZD%@w>6R})($^O;KQc_ynCnAoLrQk zoNs14WoiC8-(Jm>Pv?O>rSuklj9v5Z!nrWyFfYvW;Cd22Ki=kFe$PxS{I*DU5hwZU z46Va+3XiKh$oBP~T!@T8QTGh>R{16TS_3DT+f>)Ja~E|8jlIjVYU1ysr2iopdu>os z^D1JqYWEY=BHYz7(2&14f^k=<_bU&XWhH-`0dv04D)_Kg@kNvz^5A|GO_h|aOE=fXD@C!et`fo7zH`a?dBMKM`x#8n*HnMQ!F7E{8%Z1ci7dyLg-sO`s(Qj z^+xCv@8QYo<7KvxO2`?ve-aX|8;%me3<4$mV8>s4=<73qynbC{XIY=8wdTUc{O;O# zXT^}t(tTTcdt><%u;IQ+hsmJn&|fF>$EYy zX-epnW$Ub#MbJ2sk*4?F*jNE9llWQ-0GgL|StY;)KINZZULfg0W)&sno$jPqy;VBi{{raXw;`^NnAT-u{VFNB2xx+Z{=h*;?Mtv1%M7k zhb_Pv%VjYFjh~-mqgrs_?#28t1n&iMEGKOTvgmW5@5uNVd!}P9B}R3)&SzD&$DhqD z<1F2i1Is?+UqC32NXq`=-RgP21Xxo$NT58M>5w?!Nb|yq6@T^Qt%! z$ntaVT|Tq>-X_Pp$cLx>Yjx7^)-$C>wULlYHV|B zO5X?(S2UQp=Qp({zcQht{}4xZr*apP#h(KtOfI^gU4OhhrDwkIIv+ira3-wfcaGAeTmufjLQizDc%EIO zYF>bgmoG%9^BdG?&&=_B2qt~qn#8jbn~F0MOiD4-`w-!eSV6oLRi{QM#*Tfj%X6bw zQ`jG3v%s-v^M06RXomw2Z_0Yv9wpBnhnMgfL#=#H)}A`5D(`|mtW&ybQj*?%aoLSu z`nbxr0&0zG)g`GAR+oT#cEzkWh~0XwfOxBco9OPC&k*j`nf)%$JMi1FXWd?DoD{)n z48lppxlN1&9N)ky@i#TD=HYOVdo!>Pc2iMkD#<~RqhqqCIJoi~Ywm4)khMs#IVagh7N zZ@n-K^zU!(c~WQGNh)KlyBw)#urWTk$`7g4dp-$2E^;(JT)nKvs|S^NPb`~150(Lr zEXKwH#*%csTOI(SgKu#{zGB&ko*9Yjt$ z)VHURVMWbA%(a@>8SNws!NyvM!zcNwt45ywC(rtGPZfxoX1D)s@DkgG1&-kp1#i8> zdygdx_dgCbD@(dZHDko~C)n<@r!rxzN3jL%O;6a7*|WJsWAfM=R*=S%yt1X_80T8< zm?KaV(4n-C&>5g|eiEa!J|F(dRW=j5*^t}#Bnc+|lEOvGJarq3#oetIQncWISc+cx z*W35)1Jb$MNL#y|nvqd$X$RLs{bqiO+DfI@q<9>Xu1Ora)miD^Aob%Nx^dY>p`=x; zASR2?ep@+orIjrZr6|vU@&bZx7P;n}-d==gu8ThJw~XGm>pL?eBTruJn^nE-^Tx z)?@ZO(z*Gvi?-O{fTGxF5}#f$d1S|TV*&HjPtrO-^RHI9JaH79^Ub)%f>PcLN+G>K z^Rb6cTJOTC?A(Ay^(==e4HLvo^QcSl#dbrqYzb%vJ~;DrxfBU1Zq#+L?Vf*i zTcD$y?&!yMpq(r+_7JUD2=p38Fgbanrz{#$xxS!(O-i>7P?B6}McrNK^g3>5IA`9E z4X0hI{LTBl$*g6%?G4-Fa4WXGg6ox)mN?>u950)0bzyEt#Hsch>-Dq$b+4D(p5gKs z2mrdh=F8#1SaSBF%<-!MF`RXJKqk)UNiTrEdFE5hk1@~y=9hP*UG`lw8ak#S&GGG8 zMQ2m1tmDvtv<82j{*;18Vyj=3^jQ6NWz{60Zjp{QAu^ZuZrzM@J~n-ouod~DA@81* z9D+U|D3#|s$ws7f7tH|3R=p#oRy3e18-8aSfkGHI!T0;k7rKs%M{9=A_f0o<^UNdq zC*dtyQz1I+ux(O(nmKKqt|I4Z9&b+J9eH(Eany_U(JQ|i2fwwMaiCqTWkzmRNzb0t zS%o`BLpIoY++2##(^m;YdY~yZaeIOO7b?rp_Ezb$*L^D*QxWMCNBte4EQ@ zy43&|pvS>I|Fukg{v)4h@8|#=|Cc8BAMp`Aj z{T#YJrfYvyC5Scy>^tbNAI53^Zg4{6&19&qALr9}h|*Xhfa~#akwoA=!wNKy0g;WS{cMVvc5_ixM{4p39{G5Uc*mkGu}F zTMA?1;pn8!XOeB3{m3*w-N`yX1m8A*Y_MrU@Uhp^T%u72IS}Gwi4H&2G&0MMT5*We zk1~-!;LIB4!6zeD0wE(vf*;j^dfDJeq?Gk}Y=(xSy$wU>Yq)1f3*kzQ^(gN85=%ur zv`leydNo6g?tE)y1>;BiLQ1fSKeNtPLTklT2q^xHC8wI!*0EfacM#%*bXU=2umM;$ zVTrpyvc>r$$}9W~nk$?*&v~CG>~8>m-o}Bzzf9l1ytez=scsC9M%=kDbi!&qc&$u1 zDm+E0}KrHkVHltr~qa1({?`nYX%2&Eaod#rYty$$rUmK6aI?MpPYxBn= z1KY5{R_EUngI)(ze(x0A5$a4<4|9P9~AiaW`%eDGkI`0W^K{Q91Dn(Sv}7S2y0 zwWa}XFQeNI4cEZ9rNPydA<8%O@JFmv`{O&$jS@eev~+F15}|${BoBo&G?htI)ELc1 zRouS#ZfIzD`|;||kl9A+*n3TTHi^X?c_(7W|F)3#%hsW-3~H-IQaOBR3L`Rd;&_@i z208AL5*xdA?3d>q4S1=p1+=I?HR+*Nm;t=Xxj+RiW2w@~fyjUS3Q2sy0w1=#a*0`0 zU9HKG@q8aWI-`l_&Lb7gu2BCLi-9g1n)F4?j>pN)bif<#zOD@K8~h(v|I%kt6v>K~ZC1 z1pi3TyL#Jh*Y!Z`d=iPm3F6-u#`Jz(C>^Cs0HcOX3e%nQrl>zueSn^zJMkCF%JEwQ zue{a8>SC-qGX7tSUlhJKtI1pslTrRWb()AG6~0o}87df$ zkj1YiNC1AWI$>t4ZkKu{>s%;PHWlh&4>EqT5$3WB-X2)ZAA2$KM}u|rN>fo3vLC!kv~)ytAkT4OH8m1#Q9wk+WEe!8^fl8PVkfi*A1 ze`lm#rWa@_+rt|7o~^Fit@vGftu*>_gM29luxwU3W*cqG zc3f8)C$d-W8nD1mjbp;K%qyI(ufUZ?qOnKGx~-rF!;t<^tY!T9flX3O%hNNqVmgR$&r2$}dWcLm zT9EK#&?h*F`F=d0ni6OeFGy`&HFKt&j}$OB>`fhe=n-#8*Yj7h1nxPG5i`V|$Xs51 zM9trGw6E^EI+V5btmoASN}8Sx9*qWo>SNK&TgrpLYs3eq z$~fk#8(0w~%H0wAkpF6APnQg!GGXTvmpjEk6ES@W0*01M_N6 zCf->{7{51wS;N!edqx;##%&i`&m+pg806QD9^`xjX8 zA!1zXUtM$$jRyQMEk5ks;gWZi%?vQwBLWb2T}kSA=U!y?#V}W-69AT*0QcxlMIU^m z1==pDl(!drEG<)ChJ0GEdMDlMM&2)sDO(*k&0UuI^(0C?6Z1H%lq6Ap#<&^yMXG49U?9nzyU=BQ{_VZDm$V;sg=8iu)&(;(CSqZvt-BCNvd_p>G0jDXF zW&4f%-31Pw474}4K*GmHS-&gWo;%0{*I>5;kxooWHuIiGA0V zr-O^6M`BYMmy=Zjm(vORWR|y-r(5D?$DX;1Pg2M5%R_Jq7!TQ?)ZxnmX>R~qghpM@ zZ)QoPGk{kvwH1dp-0u%rEVHU%N*3nGdy8apNyVa}kQ;~PL5?N^PZ9=(j%ciu_0VIE zn<*)uP{HM2_mcw!>}z31R5w!+N66f_(G0hO5}IBFO?DVu>ttgI$~H z0KQ^UcpOE0%ASV{`UrNioAg85U**nc_Z>&UDLQhtYo?LUao(Ylnc4eaZf8|%CV?N0 z8xNPs%!|ScLX*z(!nIKIlu=4+EOy=Ii3Jg|bwM98arC?=`ABq%Q2d_6NY0>B!L1kh zh{Op$j6Bi&Xj30!+9M&Wk!By2lB3^gSig-yz=RddSF@!e-24yPI}(l}3+I@*=)1A zyLHq3)HyMeUl=|ZN2s{}sc+)XrQfBu^3K|}dkGA?R*BPrwvX;&3!&9?)ZOzeZFf!} zDLfwWgcy+~AsCTjA{cFsJbYp9Btj5tZ$D7@b#LS@)~n&1jdp3Y>Bv6N)F8Yb-iG_J z?ba8 zGau{eXh7C#N{@^cGAQMpz5&}y_1#1D-7Pmxv&S1MlKuAT#5I8k}IDO{WNn4`lb4?5K&$o=ao_YM5o_XAwo&a)GXo9C0@jcbNI5A-#w&!LU4+Sc8 z*t^&NzHz)vjGh@20e1P@@682-ZFF9R_77k!6Khy_>BgoE+!}c3=B+t~m<`;Txay)x zz(j-^7EZbw4cwJNW)2@Z9X}T*DlYDaya%q0$rs}c+>rhBfPtD+<3}3Kfg9zqtyIAe zcqGIQ^>b7gR{}jY0C!>d#2{bUxSAg>ou0fE^!PBBP^6{-DHa1uEV-~^V8Bs#ww{@& z>l;W+zU|1RxAaNk&LFD#MldV)MrTI)eS`n2i*`})%%|a?qYr&uE?(h6SJ#`rV4%N` zgs2bO-{psMFUiA^i`Y*h+qF`|Z&|tAsR~L^&{3hGqW|AiAqsb-WXXOg9=C4pebM(xTjhcHcal0y@c94I`F;uUA@q70wbyuS&B!tUM051% zAdi{Y`?*uc*Em)g+4o19r}kY!#IW)Yjn>n48^IV`J`7ghJ3Eoz5*_Jr)}LyV+s->v z)j-5$ zwE&@IPt3MOkcT|MK2CNR<2z!pT7}PCpXgrJyRQct!>P2O0L`ugD3|&L&Ierj_Cj$7 z`ssM=t_lDXV<5BbRH@r9yuf-rxnc_VXQ=j2^B#N1)uRJ5mAalSc&P z5)-_0;@jdG}LxSGh4@gm}S@NQw}`h@8`} zsB{m0UygQv5Yl>W%ns*K_z&BmuS98Bu543UsAI?BF`Oj)g#_Fs1TMUXTNWlR{ak}{9jZDQAx6&du~d&yrM)HApwz- zjmu#1)Yb-ChF{yrI0q{y+TNmAk}-y|9}J_$P>zuoB4Lgk%fukPukoDZxP1g9A~+b5h4M&5R|@Hv%#=I@G~jm zbLjRY@&hJRUeO3>hWR4j7cYCA@pf}^TL}B@x+Fufs3+zln+VS{mD(@r>v+1|kI#5{ zndd4Ygmd-OJkL^#PW25TPP~{11#o>E1dL-!S5FkO-Cf#SniUQu^E*-%VL!FExGNk| z=Vxdt!i2TAa4Q^s&AUrlJlDJ(&OPkiKfw|+S9Ub%&_})0x}o6&RFR5U;{b$zsgIjK zPWJc+^pG-od=az!MR714uvi$w z4Q0i&*e`-gt7>>sOk#;ovMH#qW95zc31@ZP*Nx70tT`70r`GCNJYV`lzrCP;)rL zZbCV;ql*7RVVvt7=`pCwe}w)|g=Q~j)Er|Nz@5}ZWc`Cd3}8X3Cd12b>PjfB&cV4X zZdcS^{6@V5+UNsSan3;rMe)WKDWmcSXE&bb7^^GGBscR{Vmp;0gs!E|3#K_es8d=g z-xI{aorV7+6LTn^dC*Ga)?>^4qmh>p8Uk?7&7lRz5W3Ca)^kDlke)*haE9G>1{a{X z|3#e*E}XInPi5B72GyV!iJ}Uch2$bwsQw8Fq~65Vz5gDj3I91e)kpY{*jRuRD2o7O^J@dLy6a+mO_+bG|Bz2D1qdcSuukN0&`@yA|DNPMgtOv#vqO8^yq zZTMbG!S)A<@>*XH28a!iC^6hG-N(r@Mv^Qc-s9v2vRvGeQJ*(gv`h{d+|1*r8VIw+ zzvlQkV5b?qv4b_)8^9MShX%i;wM)^~E);n>J@QmH$kYi#p$P`-S>l4MqcDabdQX=4 zog=|HLv669&jCYir2Tz#J1Ig};1puZ7QflP#7RFY>O=6eMTqL%AoZ!_iRE<1F2-E} zmcq()bq+xVSaEenY1JN=k&i;CNB7gg);oU*Klml|)7|c-@xcrTwCRfK0rI}1&?A5V z@Ob!k0ElV(Qk4D}EGdRftfLqs}K&zNhp;Fuks_PibLPm0jb11-(%8^eyfr?Gd8Q7Fw| z9j3UyU>#idFJK+PpxYXIE%+1TjauaSfeu%*>bs|u2?O6#9VXTum|_$R5Z+u?_>Pd1 z_?=h?P<@ece3yqw{Y7TtQ}DFvzfc(GCiOeb{}H|l!&u%JAJc{oEIB4Ft+IFK_=T$W zAO1sZs5^5!@SlNr*1etEA^Wce;4yzQupa6=DB>OjD*}9?>;*vWenK>b5$9DJqG|6S zq|H@Ic7VLajt=IADxt6S151UJ?8i*?k`INH7j)RmJ4pcaHCLSFf zd`U|mvmDfP%6$s{P|ols~K)feWW zkTZmAZ9FgSi6dJa(5>BJ*Z~@+RjL`46=7!_zylRe(;v_Eqery2RDd&MK z({e)^+(?G38&o&#*@I{_xd%mADLhS3wUWY21O_RvPoN25CgNAWVhh|nrRJOV&~R*_ zd||J`FZy}+Adw?)0mO|H;XD1jLy*Xjx4@_M6XA2g@pEnz+Jx3yrAaRML&)%|nXT^? z-`*lP$+%P1?~ZSex>GggS%K${52T;HTVA2)S4{Yn<#g&k{Q47i2(*4@;@yqm6u0Vn zb9U%R=-$kOg5v9FH`yP%cOA$JcWm)7J0k;gdbPJ7eDGjZGp`4GQtav5PefyOsJKh+ z*TV?=WE}>bR>KGfWKGKegJ2IN3(*E#Hs~HXNZ2H5_#vQWuk-YfOln3Gq0i0R(UeUUm%z zo{w7wZw_Lk+hgW~F2Vd6+Y)D5Vd7prcQ!%fSAnWuv_-O-W#DAB>0QFt?EadS*Jd=3oL2ov$-~b) z7^Lq!Gg5B-b3fbyT-YYtxWBwI;5u!+yYHA4glGaX?G}#{P?g{`SC6!=vB6=jauyCa3oys`^1t}HwhIDuzDvEp@ z7LOGT|3`epK4H7m3;jMTccP>r;q!^|x zV<8PD0%piIH8C8^|0C)xfZ}SJw&4)m0|bYKAi>==IKhJix5eGvgS)#15AKUC5Zv9} z-QD5eJa@hSS2fi$XX@jhFZC1$FypS9&XB^fQuKTwQI*W2yUq~0 zCBFay0YT-JRZt|Px>g}#zrm&RK1WA}yk9C-IP{(vn@>+>TL?0Qj}gRP7DvJI96D`5 zwI+|skY2|i%YCGjvD+qxN_gqY*jT!PZ4c6Iq>?5PvPwyUuE#sK!I8`Ov~5bZZwzTX zx~z_1qdh(PH1cosX&0m$($r{8n7#XIn;fT1CVyFBGayu5A z5MiE!Q?d`!L?}cLcrDN`Q1AR+;~$s(Ir1|d9*rvVRK7nH{-lWJRKV}tO*cn_hCjKR zq006X6OJQPJ6XrJ^Rg2y?!w^LAqGQ4U*MAaJaSQA!?C)ld6_&$AeC)v!;i~(^mkn? zrM7n^!mE!B!Rxb16^;p|d-Kwc?Q<>jEfJ<|YR3^e@12o8SulU|_+UY)HHChJh(e%C z8YmOOg*x%kRbLv^qr^FoB`s<#n7K6_L7N7jj`Z@cmQO-Tb(Dd$X3CI@lUln$M!wGHzuF2k1Dz`O`Z2 z?Uy1_m*ne95+JEqT4yXXz==N>V zr&WR8=6Ug;?Bz7ex?vTFLShByR;FmYfikql@lzjJ#9LMMNp3X%GARB4KZ7d;h@*q& zSRT5;BHocw%5HNl{atUpS9D3yzx3bW7G}9}4`7ruL;WO$;WM z?$7S~jI`t&Od53DvBN*oR8sgPqLf5e=Q49UYX8wZ@1%h(B0)7KbP_VV4b4-H{0yrq zHGlj(pspo0we)K+6=S-kp5vJ~tGw>i80G8!8+r==$176xC!sSUWJXWAjH3wCp|7i7 zX?7%+D*_%n_IuaFw2J7ZJ!ebVd)ZdH;AQk^V-KvV*6mu1b(+LP0PJG1$`vCxqgBsV z>lJGO3V?)mCGP~^UE!Gsfp$-s#rjo8qRJ0@x+iijG0StF;1f2d zh^uD^p{~X|_sgF+Co9#R?t2#P1hxJIc!s@pXxF~khIAE#ya#2edtUx7aLzymahJYN z1$a^=MkH2k#ETe^?b2?4F{Cs8vP*mL%Py8BiSr7Vzt{3k*DiAaZCJs8Wku|+rFdG$ z$o8n(4P&uNo2?3r%l?cky}@sHh?_h>RhuopRv15iLw~Ep%fD!xpi;gq!0jeKdz~T# zweqczDGXye$s)_M1iE-lgXXjDz2-f0Y4kzqZ7&o1Kt_sgsGqnit&qJC9CiC7)Lkgy z7Z)HZHB>JYjn}1|uWxnFbbydAy7gt|uQ1%p6!>2p+2PQyuakfd6I5?;b$}a+#RiS0 z+t$n4fDYgxteX7-Zw8)eGWn~49$g~5$u`lW=B2FRL{}0y@`W+v=5O1Q5Y1W{i- zsvW8(2HHdj?>(69t0ubIM4<0I>TRpwukVm5mg(4Ss^FLJkmQ!>>aD6IyEy~p`YkC1 zL;0;KHR))cc+&+N#4IUsB(p(RJFP3NleZgHYv^RYw=E*Rx0)=BmS0g+v@jO^wb44wlFIdNY@6dy$@6lElJV6*qmz z=Gs-@ScwTuZog0LxZ$>^qcoyay6!+*AO_P8JGpN4);wo-T?(hD;>4bgwm)Y8^6i{S zC{}9&el0t!buc}Ka0cYa+c7Nbuaf=yRv20PIPM>L$K6*C!QbqQuVHzf&z;&Gq7JNj ztGrO)DiUI3eE`9UejMO?-*XUuX^kL%bMEEhop;J`1+H}2-WE9gD5yJ+^spdpdqeD&+c~*8 zX)3l31<2;}?jLY{icUJaA@=lvxgjo-ylL1{djcIBAN$4owVxt!M(cPibKPC6944__i;?A>{7 zYv56j%w^VGc4#7c-XbIk*nAI)(LyvK{tQ2j7H)fuMiJt(zYW@#{M&C`5E@hQFt-N&E=>h`4BgpYxFiXJGu&evglslA1|}l*QN=B8$+pRTt}$`CI7N~ zkiK=a)2ncg+Km%z_>NM=9Vc^%3YNd%c>DBF`o6sWr4a+hJ}MYMb;|(6cpu`)bAb#! z?z#(3dv$xwWb!=R5#evH3{_P$9kUHjH;@~_J~ z!$E>qRHLD01}Gr$kPgb&9>Q$b#9ImuYw_-Lh%Yuja#~m||IpQYtohy&s)^;ttC^D+ zY9pg93qKhPIyOlb`3POSnH*110?0%~1~mGTTo2dSkKUxb13qNE4hmGQsRrX^fg#39e54Ixo;3s1w$w|J@2-Qi{ zuBLuxRiVKkJW)@nt+6pbXt|FuD0CLKMpHZdShz!_%nt)5TgUSH3oiYfT@+C)izUWYdLNE1V_^t?ga!pTT2GI`)q3=hvO8pG$`F z?~1_Q^?l)SqyJ)`=GF9CnRI=~*N)DTU9SpG;oss;8ghz%Is<6ZSSz&U(;lvYXgexbyC|4yzApZKAfcR2e9pAC5;wsX_eeMTX}dO<*oa|HF}AN zx_Xk+ETv%Q(mvN0k8njuxW#Aju_UFeYO~*6<8237n*6+UFH`$+k2<^>oA)>PhUTZE zT3H^&qHWP#-pPJlI<}*ipU*yB6Dc(X*m9UTS2375hw#Msa?429Z{)x<0$`Xydls2Q@0r zUa`pd)BDEu?^2Jhbu%mJy@*@YEE#$&Pf>r&Sb}#gQQ46$>E)IWi;O#49tes}u@|)v z5K~55$S3`7EqY=JK$iZZ3-aqv;;Hmx1PE+xv5+&mc-?jN+I*dk3`q0JvG@79JRdz} z*mrr}T+t?B9dx$3j5PMtRN-Bo0=i2J0NpL-RgK~_Iy>S0BrdB2)_ba4!4rMNBkY>h zLz!h{YiXg-rkM>>*l_FF8;QI%K>ZYgOi7YBH0W);$DuD+D*5^xUoKZUb5y>qOGPx)GOr=2VoGe9B{%nJfH341O1%nd_jO@MY;KO z=eQk)tH>VG+8uCl8%_mmG4*He8BP{&;)}!(3$yDrBkSq~HuW0F)Q2Vj!Ik++e4S?H zc!m%=m(LUFtn@6&xsuYYj(%H+9+J`ByJ^&|>D+`VveLm=j|LBkEHi&iF*$Fs^Ry**P~g)r@5AeF2st5(B)Cn)c-N+L1Pl-4@*Th1nYj~jZncH1Y7G zqR)dimpHYTgOAUhUb8AYu2~}uVJz>uwkOx9_d*gexO2{@;$y>Q!0mZqZQz zWnV^qq)cBabdQZTqH9*xhP0MlI>F@(K8h(OR}nAaOwJ$q1!%WE z+fx!d@)aULi^yM=hp0m>>qFXjPZzvnslbfx1JB=gf3u6-@BtbZRIf?*;{@@r-mzJ# z8 z(Sd_{Gh^k&1CVvY`5NJmze;McPF#dIe0b^nx$R0Yt9ro~B^D0lot5a|Dx}6046@Gr zpcm?z#Ri;*yKyXvdz^o+Vqrc&T_=D};e5Hp8@N$F_Vd1=^0xl#6Vk-T4>g?v|CZbi zra{F(32db1$7wM5>x%1b`PWtL3;4sdE0ve)B!u8L)<(!(m73I;*J=Ld-@LQrE5h4%@`D0vT!3 z4jKdmk~ooYh6R}$!<&Z}c1>8>ei_}fn<989N!&~RSeu1S`5JIRSe>|=^bc5X{w(r% zTz(30Qz~|odTf16nG2dMO0~(AyBE9F$FB};daIif70VW1|D@v+mj>22M?$oK9h4Uj z7^P8`8=4V~tLyh1=!|)`nX3{}%I%Y$U&>}Sg2G>wcavxcrz^xZekHH?ODl)1&DIEbUYv(t9=3-voKhmQBC@?4nzAjaY2c46JIB=aAGzYryd%yc z$C?hQ$0wX01DoGW$Uh)*8NpcCb1$2z5K#h7jmec)sFTd|Rf6?XtEyS=evNtbvG42O zeva&$6TU`QUBH^AH@n6*4KbJaD=o(t|38sz%yHE27#?%Fe|lFLsh~zP{kww1{GGCJ*2hVHf*k*sh7VjL2Ekx|4Oaa^nWE>YdXBrko0wsSEBMa zv?F1QzD5!->S>FrMVBL_Osh5gf8~lU8?6<zdu{s#vZw{w(W5m8vPmjW0jE zDI*yoCeqoxSxGKKmb+1^t*B(rO^2JsO;d~!tlF)sNp-n5i}0D>T8#2>$=6#sz~y@Cjq+)jq>>d_u&j*c2EN&Rv)|*XnZFeNidbk{ zGIIoc?bpM-hwYr5tl@o1#-%s>v9e&qWwID$T*Sgj&wk2$uh@Yr+d(SZA+!idcGxq! zxy9T-pxqpx=G+4=4Zw1~D3wpu48OYhRe}n=L$|a_IJ8(R+NdaAx=#hZ+hl^F>V9ZA zY#%u$1)crv2F^bpdVJG4FFt;q(P6_N?)dB|H#o_{$7>?le{zsYOdOGKXzx@m!Pm7C zU{WtCP{c(zUzs1Hr{2!}_JRE(z6a0wh%!iTnEI;vV_-DB03Yh6CjB8y5Za&$H51s>IW!?0i zzgD_iNr$Ase0kc=`pIb)fkDwc*oB5TB~Ue!bPc(jz<)xcCYOOcRd1~&KbjtBaXZIkZIlp6FGVEfOp!OKL?i#4 zhLU1j@5hADhJbDzH<4oJ*km!zDq|m5*Ihg1H^a=N*@me64TEpc;A#v8vwtTm^1?24 z7rVOg^6YyPuPnny&&?ej9Ffeg=k5A@nWB62>gfAqkM^=%Ps#cZw+;;e?&TEp%<@_O z^gtaZrupIFg4#h|I$+XQ-pMnW>hF51W|FCee!zP26=KdXOWuD)#teQceFCkZl}Gkt zW;rrOwxmp1!wu`<_a}*khBJo>69OO|8n|41xZ(Rj_R7Kzg71|e-z9gkejS&54VOvH zBa(dhAmhmMLkp3M!-#_eN(EvhA+X-~+I12zx=!q0QRHs?j-hQFMCcRgho_`_Fy!MFLPzG!AMux?gfhQdTBJKQ}es%eVE>85((X$8N zQ#)n@U93{B)Q$Vva$GJld}-#qanOdiM?8;Vx$(1yH-~|1)42M{pE30tly7?3DIv!x zAu~$KFwHC7??N(-Y0HSu32Rq~!`sZY>}r}~I_i;0%_A5dvrZmEzLSS<$yl;=%S?^v zG(2C2Whu#`o_u6`MwjKj9QpJI;K&M+o_}(g-Z4uj zmV?LzGBy97Tqu^ax%tu=*Mv92Zt#67oJyi~cd^w%_u}tuDtB#vXt@pV**?7znC! z&L;)}iZ8?6M~Wt*U(!D_8aoxZM*$Shs5VPFRQV$%DhN*zxU5SivZ`;D`b(xBG|tmp zC=6p{S$PbSbD;Q!*FTp54CYXTRL|vY&R2oS%fe`hfgTL}T!B8TlpCros91c1}bo z-NOeQ36o~L9-{^~ymlNOh`JaO6$VqG5wCHQnU@d;f5GZd*(y3En%l5$bxfCtb5%l; zr&)1~b*Oxo*v;c<3tRTZh*!t1g^6fk%N=c`RsfW4?9(;932Y;QNVj^z$?xUMGm1fj zkJGBcC$*4>?nPij%fI%uj}p{%<>CkQkjGZyYH5MUhC&_A%s`h&4aAA*;W7usk_|*V&=~QRDo>AaFooPCz3$H9|TOqR?V%-_cwYOY|hO2*r zKje-MPac%x@u|fi93#zB#rJKWJY6^a;!Bg_fbb-DZW$-v-pc#MTfx>f(|J!2;wQ?$ zcB60SW65hysMzV4jA$7;ItSk$Y8%uKQi+HYAd|0tScGp%5<5UmYnxA>W9(%A*H5mx z97})eOmD$Y#O?-Xs0;BKgUe~J-yj-xkonnHh;{7b{Y!Z|!AQTj_itfvnt{uiCsg{F!b{LU}S1N`Xs$I%?W!dxw2r zhTW9N*4!Mx{-o#ceuJoord;8^6pCeoraXRSOfH}55j#(}w?@IWB_)wrZ_qn&Bp9QL z<$XCk-C)o%XaA0Z zCvvf;&$~3(DTrvou*PSxoWwKNfJooB-5?@6{=3WtxpNe4eln+}IVXd!(L7nQAVTW^ zLGsWiM-_bFJW}Vz_{ITyWHzk{EJ0zrex^7s#Jbg(_lod!bpz{S5Ka-)LPlA0Z=|Dj z7bl0si}GMaD%ij0i|~hHNKcJ#*||7LNibQ#PRBu}(QR;l0K^LO()+M;SE6dr3B3;{ zT`2thsrTX;RVoCTJpErkdZn3pyY^1$q>BIApyyMYP(s@~#KqFK11Hp#! zk5%0FmI07ZYF|8a)Me8Qt9+_JcsCd)(j45cat;H@`1<{X2JYD0z?M~AA&oJz8Bl=H zm`f}7B~j08G<6wzdsI+I9Ru^(130_E5>WjXRbmZU-y0z1im@S&B@HgPrsjs3kP)#! z&W^$|Ayj_$WL=5O@yI|E^`)t7>K?0X;)SRxG^%cAo|B{grmvl=O9A#j{L30h49lAI z@V<1v_730|K}*aqdxz%}0`sUO_L#F+;zM2!0uQx%_avA&x$w|Kn#U|&gqpZBVc7Jb zaP=biRrLHH1F<)cn7ub!B3qfR$5|NBuAh}(EnXe8y?7YEj-0!0YiAy=cy_(`a1816 z{_$*{Y>JOs(B|yAp29|{j89Ig7_X$$&5={<60{H6Sr>Ut^38A(55fo6WRwtPgtOHe zXT()3jcorUHU(7OaWA_`{$1>Ag*!Q~t=mAcv`MKi@-zR_2Zv0Cj-qrf`?A~O&4 zhC{R>^B7*|G*C^!`F3Mu!*+8-KeF!Eaxk0FMfDx-JkyTqnI{d%Fxlv4aQGmZDc=+T zk};8dUvV-m$V%@=cC`TXXF8h}=(MI6sy;xu+U;Sjbf)=EF}F+Gh<9dXsYUFlO0Vqd z6hvLHojqWR2h_Rn@Dt%EZLXon364Qc#vb@;5<$-~z`hzwtlhfr-T{EB=n&sz6i?(@o zhQ}7!1l_^<(DQicRG|WIm}D$?yfzdUKu;=fGj;`}Wqg4Am$l3{OJgym&X)*gq7N z#D!!6S`)a#g~WGhrAtG79=e8x$t`|NWlwQ&F}~q2eO{4QiWp4z;^{wj2!QDdq3-7p z6IfY`b||QtnJDoPe=Bv*j%(VL>UwPcOxUX-8`7M8=AxaX{)*P-32jd8(JfPjY?Lni zf(1dkp!!sW?g+Z^?I^WBaCKqZQLPa7J;4LZ-^sk7bOSfF>d8b8y!Wp^eTrWvthoAA zx=!exil_XF+AgCF1AJ@4C>DP3wI%0~J%tBY^`+SEjf;9mP=1zVc@rIZfwzpj zAlW>!b9Lh#sby`Fyekc?OJbSpfnaAu?L@l4VGbLbakB~bRN7+mpGR(uG~-Ym3FD8d zV0WGKq=hvy={;bL?emZfEyj(X?0>B~U<3^r^Ex&EXe<)UOJr&CndvC;S(y!UfTjGH z{!M?2E%Fuu)JQZ;x|%vSaYtJ6Pa<(xcBXVsZ*EqX`8GX;l##TRu4KoRXL<8@X>>f* zzs2kPI+$pk>|X>Ro%utu-rnfc|73o(pWm_nGIE>Y?Qid#`V zvMVez8nSQye*RHPr`MGiu;1RO60nWJ^Dx(j1Z2XH@$T!jf8%?{oDTcSBVL<~EDJtRH^|vtX7^;$d7zZZO zRvRH;N6rHWChR_<9v1;+J@qK?_K-{t?&Dvsq9>|VD4_=jymoP%i*N#Db3SZi$4+&s z1}F}!&gsoz=Amu>I*4(pP_DHsAFGM%b!+?*lRj_3lM{2nZuS@+a_QR3dy0~K!8=9= zN}RLuig7GolwzACw2S88oBiteyNTzA9opv%Te-FeUXt((bng2Fkd7T1dq&9Y=-|;F z#W-r$5%gTMFa&cZmJg;B#k^D&U1!*~^6I+|{BOiF_NB~Tn%VPfGKPd)(v6essAYc( zY#swTB0i?>V_w&!0u`(?xL69 zETT6M?dWDyL>P4_Vc0U6Ix6AE?CrWWFwwYIjgdP2N014ki)?dwfu&e`EkClDXC006 zAs73!MNqo((BMoCe`c9a_@;tuWIC*4F7f!+tbDo>gam_;_@^dD{d8t@`R*DMsuI`O zyBg76zhGFc`n&l6d>V9@!Tlw3L$Y&{C!!KM!FO&04OI5I__w4>dTdA1VOkbALy?xB z7k{xG`)JQf-%Rld;v)WWtf>=bZ`p|vvRXT2d?f$mXf^85yXSg7 z`nZ}Qp{T#dH0H~S_)c+5Y=R}aqQ@dBQ?E9H(`kXv4cXJU8{kX@hw{+=Ql@=^=#xK4&O~8qG1v4sX3~(Tp-j z1`UFClz;}I>r-=?_MUKBK>MbhD}ybX+I;JlM;0+hydn)#K0s3~t<+5CbZlxU-!EAe zKs;bilOLQaiNjER5;8beE8D~~;*3*AkEI*Dm@eDItxb$GLC1dVkS89#NAKMd1gzZo#5@9Fg+c@xNBojs%pN^%4+MwAs4#CZ7D5^X#g{!YBD_Lk;dqJ+{w?;U=?E=&SkgMc}!rKwJMD6;B&gI+rF! zX>VsZ$bxkv^Lh}bWr3N*m1wRZ@W7iHZ8WBCiWr07MOg=0lla16Oc<^%W|4@}gdYNURH(Ar8b^TR+ywkC&-r{7EIf2NTjyaAzqx%bJ*o9%^xt z4y%s~BQBf5kB#ly=zD=-DuHY^YJ0M7GUolMmU7W9gOiLrOO%qWCuS+c|Digadnv#)pYV+0pVNLC`lWonH2N-?d;ko;@xTm11d(z4F z4&b|jUKhQfmRc`zfMHK_~>LF4*`c{>sz?aF@?Vc zuh-%N-W=A1wbaXOpEljrzg-x*3K>hZR%KUk@pcK{T0f#zIs3k!sa2aIN-=FIpRh)V ztuxb{#UM|@X(R_IuQgfvEZv}3lF^kHUTab(A~@;|lCtvqMI>`}%(2)sQ?C``sf2RZ zDll4+5K^D5WM;BuN+|a@j9swuV$P*<7Ln)t=C969`GpmiRmVndvWQ?0abNzKt&FS< zjIg-s|54^)1<2}~lb+8TkyYEK_UnYZG;fwjs(DBg_sN)?^yQcr1m`Uf)O_1kZ%&2wtSrx@yQaZ1-UGLtQdq z(2m5HX2pT%t3}1NEYIGR_)&R9U|nJ3bP27{(KM27f$MTh#~=%U5R7Vs9Z z!m)Vr4DXhX89m`W(`a>d&QlEgWo$2sdMqw@ZR zj<@|SPDQy@i`^y?NarkK^L{{K6I$Ne>waK7iDxTOj--RFV?_w9<=2YSwvXe${jPr< zy@rDFdYm`)!^TMD>!^U%j)u$Ev5{1Fli&;C7=huj0XDWoogxnl31kwYlza!NyMxgT z2Nm57e7)b%e->kPf==xG{cCT3`_`E1&AzUvz7{wf6wV2oByZ!(1k&L>i;sUK&s6j_ z1xmJ5lXDPf)S5%DXHzu<9tYkvp^Y}~vIHi3%A9jk&o+wz7`Njpo;T1Wn9x1ktIyXK z5PdUqo$f+Wn7*{aEpiN03hOfLQa*!&1W0Pn1G!#g-DwOJPM-!FN$wkRZ#%D2&l2NS z?0+1=$CN(?c!I`uXTMazxpNGZHG?w^-|z42mR(-DK-;+48)$uuPKJ6-HORMS0gd|_ z3qchG*n9_Qwdzw*)geWmEiw_8p@lfclM>v!8D!1C0YN8* z{pG6nef{DyFC_`3jKS}kJC}5H#s!ht#5X7URc+)sBU*%|y{ikVXI+$!+80n-GV7XG z^cOIuYpEW*++;4Q0?h%hJ1e7eW(_Bp!=dz|K2s4VoX9T4u&t`&tSYSN;SPhzx;L1M z_GIWo;()|s_a9=>I>z^eR<*~mIw2<>L-LE##58=nP@vU0*+rUVHZ7W}M&;LytkyY# zV%venDb=bjTHf(+Ea?PaOm_mo3f@x%j1bBSF=~oR(;zNv2ipljl|Gg z6%cXr6_l;r8CW`J0}7NZJ)*aS$$z9{fZtX~zV&kRIdEao;$}NE%e!-|{b9_<@0qLk ze21!-#Q1X6H|o##1SI_UzkvD&K)qXF!3j;s(9Qg!0FC63ihBSqw*ZGu(Gam!>p>Fh zPmuQ!oGDSE{h9sn{-0C%!jPi7A0KxE8ocLqK%4tO zjZidfZCR`iGGVYuOO*0x{c4Lz{Cg94i7SWxHo$f6rISvJcVhb&0R6^|-46CSU8?r? zQY(|yc{@aM7a#ZAr(d9>__zf|wG}F@970e;mEb36D}f_2-Q zjjWCCD?BS4*Li_AnC;Hc?aua`33hI`Ka*B%?Us5(U9hi8W7UGd1Us-9F%D-Y-yl1v z`rWZ8O$;1Z-OeOTQU{>hgc{9=B(4XFj9Cp0hMw_`&Wf=i=yKKleL|q=Jib;MdBxZ{ zy%`_jIpr5rD|~zWsk%A7U%lLn*=6pU zVPlB}dY!%2anj1TfLb2gdlUe{X6r96(qCK`vXB0$ZPlkmlq6T8$alh4s>_o(I! zb`OkJx9l&kzBthPYsQ^%j?<@XU7!R67ta#+`NK72)d78VI-_DpnBmc*$#R*M(fP{2 zT60{RBf00k$lciPBA@Y3Uh<{!g*k(3UoyR*D;RXUa_-{(1M2>8wyOo&}Jh(UG*3zXVXxxwjac7$RG3dq)0htW>oQW7Y8~-(?(RTGt z7O&|T>@nKI`_(+Q=oo5n+QZk!YS*jzscY94c+_YWs!tnL+s~05^Y*RxbO0@Oj~6$_gU?OWp?fq(ewfbg6ZNC zirm#eOzArpHC3rb01(rBMEJtxZn&2q;iDIY=2U$rCd1*9{@^JV@8AIP$)fw!NtgwG z&bsGGF`)gP`@x&)^(C|z`sSKEJNwhVR8;;U*bZy>p$->l-2{wG(=i;q{DYQf2$}GtoY(;I=zyG;|Tg&VrpUR$EK`BhpjE5 zcdIfzSh8N~8bIad$Jg|Wu8ATCIl5)d(W8b&ysi&i;+=tZA$K}xE2cqo9kGU>yTRo^ z4>%IHg5j!8tlIvqdjZFEL8m;gZ_BDsxuI6ntJ{GWxPhvxPor#DBn{7Hhw5{9n-FuI zpq8(;~ei&{y;+^)M!u$EU$bCE7{K&CrdS>?vjDxV*AI@Xs~-75sC4Sx5y zaFL6S5+nn~tekM5DP5W$F_1SjV0dd0*dh6A(-?$!IzTxqov7NKl*9I;a-$JE`UA@~Vz-W2_$*lRe*$6W1T z^G6&zsr4v!h^*gg*1(aQ9hWD_+1{OXRc?12o_j?2gWg2!kpanVPP!XVXB%*p`ZJUQ zAhRJ_k9Qi=d!FNKt$5tFUk$S|4h1Pj8vQ?OL}fKvf7U2KC=b&vqK{HNH^p;IkMA}fSnlGr7ZU|LX8&XDG+DvO|E zTEzaar1=72sS=*uoa6gIb3n#1hO9{6u0NOCFRG>hMU#>Z%-hmH0*V=JktxEkxcarw z-60S1B}C7=F+5Z3ZP|X|PHt*EcuLPhufNFroqx)HSNgX|&)nwQ)*i_C1Z-P#t%f;X z;&)eg zNWD=9-m%F=Vf7A69eFoybM|x<@&2i!HKGxztvrc~jwZ2n9m)STy#TJ}dF=D#9ie+UiXn8%?FfiPi zYl=8)YO?N;{KGrry22E0)^vQ)gHgr%E^}wz!V9bs*Wj*l*YcCKwEd3_iLqpcBAt(C zlp~C+`EJ?CHEzd#THksBmP?P?}m_XBetw=v(h+gs8O+@{&aoa<@nNo@H}&L{7J(+A=VoW?ar8bY8(YcyIE> zbN+pVSp)AYY@lkTJQ0EzZ@E--j%-crr88G%rZdUfyeq%>rec!RQ})69S0;Id`#y+nX#gcl-D2oB7=(s7{H$noaSQc zNttp47^;+}2@-)n|Ld-0wYARLv0Va zKut|g{c7fc$JBa%xVPzc5Ra*P^?6Bypb4hR^DkrOgw!1e|?4GQe$%eK0xx=;^50lla8d zEuFq)Pm_mj@Yw5JSpxleM-s((hvV?lPFADpfTvCV+fHNQAz!(`#J#eoi;R~kMKSpP z4U{-^N>gFVr`2-hHryS1R=3Nb^K;v z#DDr_%}c+F2G~e4oWs?_}v3X>Cm{)jOzS6m7DVDyQ zVR+;`mI>Oe@PSXIxIb8wF-+0kZdIpDsFB_({OgGLbI_|?shqAO<>wsI(@t4Awv!mR z08Y>%vVl=U^fO&Y-}mw>)CmmD-R0lp^KP^`c(;9;(Ozmd3@jke-P5!Uw93Kdv#d)_ zLUcPB-G^5Z9c1SUIL5(iBffo@e7!mf^Z_G!JB8+`#A0vdDA$3Nb`A_M>+4)1bvwf+Rl?@{a zo++ht77WU2GfSM0c}sYFHC#{ECgAzqacCU5HP5KG>hCfdl2Ml*(Rb_hsn3yh^`Bp- zPtViAjOqnfIQ_orzVA1@T9VisH1j zXHhdjhpi}T?-@Hr?bXtyRs~VJwfBm>wMLCdZ86gtu}91h^1Gw&&-eF-J02d9-0Stc zuIF`Kuh%X7LE(-J$GX5Y4m^e(hc>dUm&|*C#+YtZx>^Kj)|B2qRQktgCAvx6TX`;( zVUbq^1=j%itH`T)YcS-w^i_`unsLw6d!)FmSaX`(TvbP8MQYQ!)?Kc!1Unzxv^vRZz}1Pvcu zaQCly*HMKT|4ncUNx2cMa#78E!YYKfahu}@Hf8)5Tav6FXj{tkx%_}dRxBwDv(z}_ zN|6tGOdLw8xHGbUJ)r(vU1wawmY<|sj-fHYe^Bo7N}gm=6f0O)$eL-}JsTgjyrw|? zI+Wgm_tEaC=4a%g%u6lAfIQ_-r=w}?ZCPaO*&XEqv|pCq+Qa4@Z^;Y?+EA^+(akQD z%y{j;D5vq-TPRAD#6Ktqs+LCYNRR8KPr1|Q;(!e+w|3`Wj7BqHZ!P_aVRzSMs{_7f z#XN{CtQHbv4^6j(9u3WJ(#!oFIx;O~BB$-hg9S@CXFBVJ6!l=oDh@|odqz#=vOcfA z+T@F*S$(teFmvQvg0a6?zrhN%-0;MEgiD>g(&X^9J-2lYtTnsOoMz$HJM<-Pmie{|zPO+gr&5Z{9REJ)n*E-tyv^2M zE}>#u*R(&9;b+{|-1_P3Wk|&$9&5_x)jMrG zB8&MsY*NnQ((R7fUhMa}E~Cv61P@wOk-(Icw5~gKyd{cmm>+u{&c9cvh`w+(TMi5V z9@r?6d1AQmca(UY<>3wY3%GHMSIE3SWACPGT^$^2w@QPbayQe?dJwzsdCvCPYO;kL z6m!gU$2Ve}6BJ`Klx&QOM!tK{0ko`#X=Uj+WLhlt@Df=O2lbUl#3kD z1Ua?k)U68)Ead)7(EVzUdCWf2+VpxTM2mcq&{{Ly7*otav_a6MR@lb?T@C2#elA~Y1cHRk(&nej85KxOsBb9_6CA^QjdD@hxs$fxI^xX`L=+FNv45WqXWbCPRRnq zyR+^U%3-acHa8G)%J2(x3(^~1IJ*d16nBi30!!w8$)uN;rB?IA{(RdqwO(d|;Hh4UmxYOUW`l-9GpOY;X~9$t;j92%-cf4x zv!B@>I$GFAPWPsTD4-Ok?QG1FTz>4b$*sw9E*7PuzMZ@(BTTO7cT$5pBq7B|D(7s` znmKl<4R)iv=4^+3KkuPc4SRO#oubrZ-R(zZ$H%&^&wL2g`7*5wISYxiD3RKhGo9*sy8_ZT?Xt(A$aj`T)U)s@ZPR_FnY2hAT@<*1Of*%sq_k5KEZg zVHvP6SvVRMOP}D89|$gn(*Y1Lc7)T6Ya~+IxsyBkbVN;pAB^t+som;{)F>NYo zg#LDMWxdU3@6$JH#$8@$d5b}{WsrR>a?1~SY-L6@f)tiYMX=HwB{VWTgWxC2ga`Y7 zCwX@d-hVN~DjxS-#-5t}>v+qf;*{FmJUi6IbXkq+0LcA5TxinY>-)T?(?Bqv{errGB8U!AqV?XMbPA5Omvoap` zeE|&&x~Xgm3rp9y|6GHFmVy43rrbDxYw)e+_pdD-;xk~-?emP)9ce!L{XLybzIsvJ zx}3a070qp_EDZ(xrfjB@CB8JMjj9aW{4+3?IN?p8Y?u7Zu6^Oop3_eWe8PY$?*c)> zJ-yd{OB7{bAB~FsP&4Q`wFQ1wd?Vd4lNg=y^F{A%J;|7t16BNx z>X@rEa)B*WIP%J4B|P^`Gxr{&_baBUhZ>*-&t)15E5f|bqi@t;L~vR~BD8u2cB(sBJF^!u5%9hJV5;8LzS=x|Pmw-s6Gi z4*h?}1ecXdnYwMWt!aatQF>DU*x9o~H^f_|$&s18vSO;^nxu+*cqCIM&%E zHc88_ltm1+HZfK*APX6%GY{E^CLZHIOI3B9-Kh+qJieU_EMv2umv|g3<>AkDW+WvU z=Y+qY_8?31^KCQip#pjwG&nVB4^Z#*-TTfRT0S&We{*}>p0d@8UIzh23-;2CoqOk7piKHCep2!$QW`*%mBd=nosekMtVlM#go@I#@ z^l&&oboUw3dH2+Ycz%sGalux~@lNX57CI~jVqzYL>J=z^SFPgBK2%;&J6Cy8@QVgZ zK93=5t4d%Da`qsXLRppijxKtNl7Z#Us=TLgLZ)6Oa&C;`QI1oO+}L>AQ`U=u@3RpPHf56gZmdWdIX{@kB$OhmJoSf?V)mYgA|_HX zdEiBXU9%+cJ^cVvJkGufXBw=TIgqf^m09BC5ji)#ky3hPsm2E)q}CWwn@6WvR<7<~oT@m2YYA+{^if+5aC0!m)5O)>g=wV{5WMob)55h~oVWN*GrxccOVq)Gd z6j@PQP~#xa6k3{L>@-|7U z>Xlwa58MjOS)#VUT<`fjU+9uk&gOIO_;52Tz@RlHN$B@M?YH|TZ}lhng=+tXuDw?I ze#2C8qXeD(JxQNZ0OkQ7OrzhFp|wyLsA6or`7xg%v`heQzE;b7iT}Ordr|H2^q|8H z>rzqXK3qw1B+mUjscQLoc*P_uPn)SFW$|NF$>8rxU~??Bd>^Gfupm&M zjMfm@&8!+k2PmX(NV9EMw0S&a@Fn}-@S`}93xVdhCvv~sA$xL9-6+dELgnNg*B;Z- z1g;7CWF&UIuF+aGOQ5}EMLH|xR*CJ;^P_37j{Dj_S{o_1y|xhY1+iEacC-eTq8tN5 zsr4ee{8Mj3#DmgPoM52asL&i?wuK8}jnE`6==-X+2v|fnE}6HaTNzhl6q_*o{l2D` z()5k7DM3m4^vriXvaD+5w?QRS7o!r*8MAXx_(Syx44_iCR}3kzT;bxeB2t)kz1WTG zkqemXgk!sp>e`+6aObEW=cPtJV5|*2ZO^rQyxf_BgWGu-o0qP$V<_M_1 zY?EaEX(Id$zz&uT6H|DyoZZ!-aha*>bY3w?DEKTKVp$CtD$=g_Y@L~^ z4r<%{Tuk{hINyIpuw36eO;%+0TKmn6Ciw~1FMzV#$z_CiEz3c28vrM4?96s?y>@%D zCu!1bShw$@xcM*S#kyJN$Ot{uXqQ66oJqIwQ~z5|VNTECv#5E?gNy85Cb_oND$xPK zKFZ}RUScmX2mj4qP|0;BsdIGy;)+yI-=p>{%91uZkG#!THlL4HL z_WeGP_O45NnIeo!VYqo_<+;7kVRx>{{7u^ss?7SV?uY6q@d zu2jfJexdZf=F&1@Y1#L%xInX*TM>;jyGC?;7jwu6YqyFzr`J{*&+JP{Uy1w=>nkhe zK}oxNO=OpXV^?#&&`+cFmuJFkCmCT~Li^(q$4m%E)B<=F$+zGds=(CJIg&QEMGlM& z4RbO%*3~_dnl15P_Z79UP3~t@1(~G)8T3wmxLq}Xezskq(G(OBp#q!v){h~m;5CljqlEGC6%KGG*=z@c z8Ek_*r@Scx*{o6yMtIh+_#KnMn~`BIuX&72WbY*aNq3@oV=!zru0M;#d7B3 z)EMTk#&~@$@j38h=_(}|5s!3Fhob@*-Hq~4?o@QvtkmHv;6?;)CY=@K6r1;gd}UUN zjokhnboUF=;dvX*)-&+~g>`H#)!REu%xObUjQt$NXdI@Sf7b{ zdK(=lnZVg76W4!+=m`hEg@jT%sY$ObSfJFCyiC^5_VA^*Vod%2ZhRE)w`9Asd^R{X z7@?kPpQ(LMXrG17Nd{VJ^zXDr4r{I+&{gR7Sj`bl&EcSV_H@t2udH`Bl^8{RG85{n^!~>XTX!SlIc6N4cUh zU{=QJqv9NPO!dX@y+}a_&16?QC1cyGrpiCU4@+b&g2%62RKd;0K^hu@IdL_d{&IDy zrB}A&ghon8&aD*R0-!BlUKG{_&Pgg|JcGTwrp<%?3f^|*w6IO%R)kfU`4jlE1?P*q zcL!*M>AXT~jq^R?;og*nm17K|{(V57K~Lzff3^frh*Uv3FL_MH@{2?fy5dityuB|X zA<$-IemW`?gGOzpi1!$Omrlr(0mdE4q_ktBr?R!NkJE6DPYRo@%ay;|US>RSz9&M&?;jq!aI#G1=40pts=jQP(&D6yMARX*hdt;IV)1!XTTZjSO z=5=T#lD1PJ_0|g;zp&1Hkt8FJ(d10x-p!bM_5%mJx-^+qkyKF8o^Y<%mR{C1LC;^( zqaywhdBKPnY7a_7kL%kklbNUEfTM_EKRlZ07+&FEO_&k9B5{94-(-k29ew46$zuAPj$-@s>YhINUZW+U80GiPKF6enmKy_r@fsiC}~3)m}i(5 z(7*H$g6iH5({8gA^viP8tBiS9;O3G~6*OH3hX(JC##@86qp>6tx8N;8TxLFjMz|A~ z8vzUigaz|Hy=`dIyxII_5sOa%qLsnN0qOG!WMtCx+x&0gK7QcwZmz2KPx)D4Q=htC zbJ7Hc{XC0c=Qud|(t8WPu{;32Z3aX6&|LRP_~a2db4`1m-pQ-H z@)}#9@&XR-b%X0Ne;A6CM@(H&O;g3yu6wz7@VKsBCQrWuU*H7iKwWX^25ptJ@w{2B zTxyxdW)P)oop6;vYT1S~@g!`F$KxACVV*4MhH5?L*ooOk$agmudKV&JlxoXu7WAwy zl(b(jflu8SpXrg=($|>W?qQq>=wKzRNX|gy&mIBh=Wd#wTimH2Zzop(kY)q+NBhA# zn@&ZLaC?d6=#`U-u7Qqi#vL;3I{RPF5}u4jK&IxkdN+WIMlGx+NAr!G8av|3vnN<$ zNX9ZaQRv?G+Kg|^Y;?DGm(cDtg^)D#-U5phkdruBBMdGcmUaI@NfM~CO0WBXhMK)V zvGs+EvBG}2Nu<-`L#1o{sXv^Pk+bT*$e4NPL1@k~s~im!>vt@crmQyJ?qe66IEC$G99v~e(bH*OREZc(CNPJO!t?{N*C)l5iw~mzxH@;CH;%q6aYXK zio3Icp$M&wiH^S^Pjc${6mnR@fx;8@CLO>66}SkUmpf*iK#$YEE)<>ib}tvj?K4Z> zv;)Ye7{Fe-uG}hHH}X;EONGeKMW)qb4X7o-wz=`q_Q(?;-$+N8biH%OTG z)ej&02tmoB!tB?BqsJ+0^M`o+Bf1O3?y~^>APF!y#(bVnMmB}I4${u7WqjS-QQf^d zFvlceHWoab9c5s7z@2kDTqj?B`H>eTo!qCIszm5C959jCbajYM*fg_!zSm*T1deVh zw_jwvYyNtdYJQ!Zwd~b9LH{>?rAL3UR9h8otTZ@%g706|CV_;eJg;8Qd+~k+UZP!^ z&sc-Xj=zMde28t*qKkPwu;$c?CgI3yrT!w*PfEdW`5@&2lW{RRr}ZD~{Ou0gp@M7$ z^FqrE9^f4z2zj!#nEexn5V-b4KXm?6NO8{w%SLH}pln_~{xGc5p)Wu(JTFx}lH%zm zMtKu+bUO)Pdk}_4!2`;(8oLNhf7fRKWK~5-lS zh=(6)z*JisuOVNB`tFrcJE5CiN!i|%w3TBs?MANV6%?k; zs=hCe*Xgx_#(lNrt!Ly~Q{7s#u?(Nwcn(dhHyHZz>|C-1zv=QbcxFq?GTzSnG8Rx6hCuy&$YNf6)LgR1d%>dLR&KNAx@;_g}M zG6Gt%OWJ}Vg9my~r1-aU&o?)E_nfB9U6nt+PSr5^T*p*NpbNL?X-H29Tog6BWI}g)6O?* zU*yOYs4hp0!?|Isb(5bf^)}|<99lxvLN2}lOfzm28E>3QoyDrz7@v;l_ubGaI1dTi zi_27P$=|9<9}TbZ85ca$2UR@rJ?{Kn7B35|o-5qvb@UG5|L!w|)&H6s0qOPAs=3n% z$GW!RrWnw{8=6ryv)xE$Bj3GFs&q@5q&MDV*yN`{(9mwccA?J1{32}KU2;9DEO@`~ zjqhLlP^T8!)WJ|!vILZsf==*SLk_VD-m_oxqTOo-Ji<-h;G{g60H8j5G zC(U+@=!Tr~fBk>pEB$}q8)VrR84AoLeHc58hy1Q4w#Wu6wppV8rq?Xncd?|kTw6*D zR=`tQ-Tio%GJ*%lGJQ z$oE-#@D3rF)p6dLR%^(|)Rbk?j&n-1!hycSi&RBssvA!}GQn0(%a6?#4%zSX)#7Ct z#oilLJMKS)rd;+I(3bSwGwsVG0~p&_bGAiPNP@tqNq5Ek+Fs}}NMF7I2o>GhOA787 zX@cu|0`LOIfjEcnM#j$j9kk{2$^~uCcJPMHm-?~q`qEryOZYUUd5>GTF~W4p?1c#v zUDK!M%3M4mm1E<2Pk_!J28=R*mGbK4`rQ3WbzLTh5Q&4-EF8hYRz}x@`T{~Kcw7w- zhQ-TA&+Ft?O3=7qRS}{3_t9~~oz`V%-|KqKh7>M1_7%qhS|CLvB|&NDyf_4xis9yIXkXB3)9Uyhx8Vmi)O@(zs05>uADs#l|yyHH(@m;#q$Z*lc%hXlnt z*2t-R%yoFvh%zgwmY4Dl0oXwwE!O?vZt}hr{ z0eV+(Cu?wrR6x$NDvyVNyb#W01UyZl4gpq!@G0C!^V|Ftk#~L=71lx#RXN!(oK{xI ze9izMMzm;w?LCBy^v35Oo3x#zF9Ubn-k>@xFElK5rTgWqBk;{ZBH_n0g(L{B*qhH* za>D%L8)N(Zs!rDQi6$@c@{I&alNZmR)1$U72P71>Aof&~{o5{F`%OTjxihnBaGmB| z`_GoIC7VCqjK^OusTiD~YiUCVFOx_OP-k$6j{tH~m8SBQJY2RKgo1C`d>epM@XR)gYN-0C>0oy9s!i%ADt{_>D{SEp?QH; zwuso)iIf$ihLqOz@t;=7VyrpQWC%6&IMz}x#=HONdWMcvC%vt%NL(_MOzxXoN#m4| zCh^JL4Fodco*wFvuKjVYfun7P5^UK}`$!*h3o>(@{^Kg&{SGbcCqJH(?!?+Va-@qz z1zap+G532G{0)#+So280YpD~(6?J5SQ*<<(j9EzHIDh{y)Q^|f8PDU!T&EX~vtpY; z>OP^hJ~iL)hf~!Isv4lcpTioEqLKnm+1%wz z{-4!v*1f$f7J?DUADl0BGyLF7uzjxarR24UW*XDa7CsgVeviJOD5%{S8|1gfKk06> zmr;uOz7J)Ka@Mb7`$^Hx-msHhxusu@z%!O_1AFAG8ap2fTrq)$k4a+Ra>pz z&JO9@fFgTk+iFbT$k6jb6f~+^VYgUgS2oh&&>HBsA*}3X*c7Ex0^hdDpT6GbtV!=u zvhA2Z&9JpmPDHb$QMgpX*Uez##je2z^I@~PN1YB8rbE>^e9p%NY6I;hJABfVnSRM{ zSAkh9Yu+j2;ftrP3y)m0?B8tupedS%4xwmWmbSV5!!6D4`$=_57!z8Qw;h4(XE^2U zWe&J8Osao@*INV#jj|^$=29-dvRqI_MF7w^Qmyw*(S)8Z_0!M6Rx45?3J42mH5&j0 zNtU2H2575OzdqHR$1HEMZ$g2mT&jgmxc_lg0Cf;ZR+@Gc8uq}$BxL`Si6EY0i-!z7P9l_cd~dDL0rDe@nPApg=;yvB-#7ZF2V?sH9qKzk ziy!?*lKsN%-7@xME;S`%uSQvp2kRMtDAvlQ(n`A|B=cbb*K9w&2JRfuMcDWN6+lCT z^X1(ns-oPoi)a|k18AUyhr+h%qep*B6J~o#2;0g2V33fDD?l#?Z6%SHabpZ@mZUJ= z_VF1T&k>&VjB}E8pOy2hZ&8CMTh4Q0Dd6zw+kBTD>Lv50gk6GUB3J4NUYdAlPv;xd zYwBlO3gW4S`%uN~m!ux3m29N^D0BJJe?`?tmKVm1OX-2N<&8pQ#={LdxzJ$AZje%YXb+I~1q3;g)Q4<(DE7_& zHKeYQ#$!N!+PJHq%iab{CyCPC++lQ&Hd2+x^ zv-2afMCg&I_T~^IaBnsaQQ8|jFSJp`#??wT+xpJ$%@I>c#(6Asf?;86n04{WL}C2Q z6aF6HAT=$^UEK=z?4o%>#XET0vk4z@Tby^DOwpL6^J<22oT^MBjXR$dNKmZswSp+MLZfQpxX##ZfxvD3?S&p0m8pQ6_aGqpZw)<&%2D2>0JPJ;rxwQB1_2d< z?IkUSkmVpBuk>r}k`1wD6JI2M+c7w3n;KXH(>U;xz8++gy(>y4>}lV3dQ zg|v~kA5T;D)dW2@M1$d$L4#*{#v8Eo9NP%(>a{pdrlK|bL{^{{_yYjMEs_Y8C)3?= z2Ks6A#oM;ememKx5q|xU$M1%;>lih&1gCEVDF_`qw3Pf7aBA7#F#7e_OsehuuC(NY zX#JktY$Gryw|$ji9;)BEz|z1yQ}4cLTF}x7j1z!rQS}S*_O?MmlX*RkX|1TBrL)rX zkmF-~U)KU;nO*GQI3O$d{o5_Jd8vh8dN?+DiFxaQ*rR!tnL7t7v9|luE@}31L788B zt1~l}U5!yohICZb`-a}HA@GMf>zf$31nLwy-IOAZLTso&0Uo-wH^rA!rEAhZT_>uS zZJV2`Qcf}dcyiA!QEI9m+9<1YDH{M9Yof7EepwTR^6Dy{i=}a1(qfp2szGh*4p#l8w$qpNxCj=8lvaMW2#K`T0aLBij~xWXR^hTJQN>vrSJf3!%YZxR)FKDqPV;JT&goPLNNn^tX zaCUcKN2Sku7-lPnH45lSwZ}uDtQsgaKZYdR8gIem7}7 zFp`BGZR0|<4fI5dL{X?iqb*8sEkY-4`HGIam1;=xk`GDO7Z|AW3=>~S5nVSInyGU> z@=sa{Kpaa>wVKXAB%7Qb6C(>$J7gMWhGzd>pJi?%~`!>-z`ngaGk|YiEU}` z%)x7#`@-x;LsTspK({`r6`o17Z8R&(rBw!IjdpUG0+IVc6}`*mnX&}$HCg)>n$&AkL(-2gR`Rj#&-MAAFWv+%U8CC zBdkqUVDjcY_|5n2WNRFDEuDq+ke#iEHj9~C$H5ZEVVe&Dpn;uO*%e*~(wc%6%@qs< z?+uZpHgax5Hd#SB$7tMAE4}mP+!vvD6`NxHm zo_VlCzF0IpHBu^P=knb%&IID}{oG-nlNU3%vd^g0H<)>!XxwC)0D_k(CPEU|1+}dJ z#lPNh%>+OrERcbqs1Wqdo{tQK9QmV9^Z-{s!*gSO#3Ch@?RmgX10Pu>Lq`WVxg>GO&hs8bs7gNT7H?>>u9h-~Tg z6&p7FC(P47k<${gH|LbPpc(Avyc8HTuxQn|7~uy$1?FF7N}1N*Xb3kwa`1T&xVC8e zzY-t}NTKL=wC@y;f3!(!v~}RSSFUjF$*){lu2Mj4^w@?gj%2yAOE3_?Y;Isa+TCcL z-9D;x?ZuPN^0!)ZH+LQ>_b~tI@^dUq%>}Yt_bC@PcP#Jd)|}jp|9w3y4@mGQ749cw zmuV%rz@1C=`u(8B&+${FVm?r;`AAB`{{WF!o9-Xk9QSQMnO1nAluK>_k4b1xVZGV@ zUS@R1Iu>eBG?;nu4-0P1{VP6g`+Wk?UA4M` zGS}rrCtC2Y*HTZz;&4p;mV!iwnawpmLyv(_WBDt~@m?NqoxcLM51_Pv8tR>yd$twdLZK)q9lrLHhr{=!Np~{^V9(xT}Bjnu_F1|C3q* zG#H(>rC&HgAS-Dq=j^T4@(-^zL*Hou$UHu%c~=O;qnfLKS4d$2@|s7wEP?+n7SK8W zsIG~8i#d-?NV6F~iT5)(DM@A=r>AB-{8DPWT011T(35i5FSy)udeLT)YHu#)kkV}~ z=9Hp8Zj@Wk1+Vi3>f6X86BN-c z<{Rx*vqEL#f-FM;-;l%fUJnt8eNV+SQqnn@685j`{Pc0U;KBmx@uk&-Pfn-3?ZW^l z8s!{mZ&BNOTf3GLvqF0dq3TG0aL{gLs@Xs0r_x1#>VL;6$ys$5FwR(kK3bSpFQ|Pu z$TpFWxxjbmdZ$jP>JKlu$Tu{cb}|`?K>9`Y(@$ey&L#z;+`5(%o9Yh$XN~$5WDL@Q zogXmroCiEB<2KceN5ES@MvKD6teQK;WLvvgWhik*gzu$I4)OQ- zHjSUj-T`&5BO|g1!`Y$LN=;{@2GT$xMV{P@7}I^hZ~X7z1%Emt#2!B$>3ai&Nx#>)h?OA@6CA5;O9OhEr>y0Ol$lMIP9@=Z1QK1b~*H7j(a z3~E=}{4`XN7aBT1La_EGk8+Ja>VcXx^g(~(JSgW`pW<>fP6J+%((fMpIQLxwpq2i7 z`$q76x$0{Eo4RE*gK43+TDf)5i|c@5a}AhFJXz_zjy58FD?PY6Jsd~XpNwc#SLfZ# zgE6}}8JOF~f3!o1oi*&~Zd-FC&zd@LNKK?$;_?fHe>U)o?9!YyRA)W=V*D+&R@EyS zT~WNE5ydF;Cjcr1XZtjT8GmYM9C8Aa^V?$)@?sLn@_RTiCKRvz@a|1qk zOgsm`d6#_ztTA-C#K<30R*s}6#P6(6_RMq?X^<5Nlh^OMjij3maZLdk#miLVI%R+j)@#|F6A`OgGDoca+ooYS8i{rv~=M640364 zjZYIR;PwDWNk;R29KMfs=KBx-mkRh(B%tIDMxdt+p%avnX(w4~Mt~JZDKXbG{{M4% zsQ^YmSJAC-LXya=(Yl-ECgab>k*n(xf@9n=3`m$1Q1tSos3ZhyY`*%i%1y1JmE)vx ztM8Uk^SP@|8+QGUbIQ>~AFjdX+KcKMn3ny*5~Nv#O4xwgr|>#LsAXJ(q}u@#fdffA zys#v@9LNA(d+ECT_`i&oo9@3Pu|1Df0K+W57=8BHBK@NWbJ_fXAfz zZSqRsNb|aMj2m^4?3wO4m^1E!-g)c(Xfpi3_3v$~NMCVOMD!Ouq5A#NA^5=(AU2Y! z?oc6k+#xymX*j9AXSe$)N!v}r}se?Zm9Ta)480o-kBDN)02=4$>^#zsNBk3dR9zDMDu~WK4 zjxcXpx(aHmTlH<52Lv;Sem!9Rk!LR45eNaE61gw6re#I z8Qf617n7dFJr1_wRPPIToy9#y$We^g0F*XCpS3Cava(CY0}Q^L!5FdQD>(#U`AR{ zpT$WLyY}nk?438a(1u{(z%BPSO^@i9KaxbcKLWjI8$j!HDvTcID=U3uSQ>XVP_rL> z+%|z;yY`Jik`lqJh8l$D-gHryaOrn3CvALcOG9v3&fajvhUq>PI<}2Vt!zK7R#K*H zJ)&%dA1yqd+@xNo5oN$w=V*_QF`X!08htTiTZt4_vPGNCSb4fROMzr)A`H8_im11i zZqsbvdRid)5I{*r6#(yUMHK+AmtrUIM_>tt#732g=HV4K(N}lx#wb42LO$KS(mrkW zy|RO@>~D=)Z?Z|d_@8fmrUU-0Ljh>f%6L}$kD5nMOqfQzVvm56FmYIV(1ZF5c-*P& zhE=*6O3OJp+%Q&#jq-lb+NCqaW!&4_ak6@wTJcV7umlvB(cw1^uSo!M8i61!>k>ySABnWBrua9~O z{cSoFf#HZ+t8a?fw}Z*4r$4JkrYSz08q#KUW#`H6^!=kLgr-9FZEhj!yvdU7hFw89 z<#ayiCarQ;bEbCK-we&B*+$Bx4-@iy>R8w?G>rc@%RX!MTycjfu;r)iVrr?J#p>RZ zxEKgrq$wCUbwi{Yh&-7|W}APB9kqkna0el&#(bbngXd=*kSM!Z@rDlHLK6wpM##`fmR! z3i^(^+j!I4LE8yfFU80?`BXykjNXV))5V>?L4gH3*%c=}l|adtJ1Z^~ub{Py8!`0p zO~r3X1}rJv3nWKa*5WOPtj2r*G-u`U{*2X`7Xnhav7c?mksxi4I3wGH{8R_tUK8RQ%7NRID`a=`5Dzz zN#wm1mx=(8JnD_dkOPVQ38^|he)7wdv&rU6>qgqn>(zv_D;qO+Wg(ypjhDl|vasqQ zM0Q2pXsTkI8_%!E(3yS2YS?D9L}N~!V4sn*w>;(?Y5ml{b%GgXBqx&)CK&ZY@m)rP z<$>LR?N}-(9tRc3__?}*p&O3$_~ zZAT|kWn!d2J7cvJhLtrh0S@yg#d#V2Ay+%u6k15MXBYfdZYY>tHl`OppdWfXd9@t# ze_28dnR2VaVeqj|CT%&>zM9JMhjj8+&}T)tlD>Q#&FC*+64P; z4b=Zg;&+iV5o)|Ab)(aF&ih~Sy+OX;%CSABFCUR(@%!dlUVieJL8}vGUmQRSq6FVV z?I=-zJxxl&D5oRyD2aZK)5t%x?+H*}KMM8I(pQ$)a?CmGiKRYjV63NWW?yyD>@)hk$_pU<|3htlK$* zbJg?ao!w}z16@et8*P;` z^OI7QSVx2reX2vtzb;SW1e1GCR|Zrip^o;W1E?QfPU-Lu7&c~+7$m>vy~Vugn_!CP zEuUTL8TFUL(%;X`b)2WU)QtsPutrJzI#*v@i}uOL5^RSt7Pn_tSL`3&@iRAE!*746 z^bBq4$qbqTqFB>|nUVz-w*{nLK1+w^1m zL$POYOCb{E4pV?y<=+rJg>c9pX~5C4ETqLt4Q1>6ujZ1v39B*F9E-SuIezNMuZNaC zv%|x>!(~BT9al6o-1M6|0MSk)kV1!?GX5Hg0RbvEFQR%7X7)VvaSC1B61X*Eo9HIf zaS-d=E{jPMtkth6bQpZP`xlTq&mp`MQ!*JM39o{3R6E&AX@UVQFNL@OyNA;`=L?aQ z*x+NuR!i9;S|w=lWa{NPbhh-m!FgK?c@tv_&Uf|nyOGepIEuAX+u{&qp?{t0MWYtp zbZhV2=F;#I?sLZSqjj<8-E*6FH`3+|8l$G;y7)c6!|h5p=+2Q+19Kx(QT$S&L}n46 z#Vy@!|6jb{h+qp+#PhU)ikPC3AZ66=)K50cZfMU}@b@uQ=+-T{0gh1n{9P4DUuYUb3XZZ5h|we9K5qto$P>aE%W5+~pN zYr~8P+0Z#ympVD`4+u}*ZL>(**O8xZQn*v*Ti!nqgtkoO+z1IAF_=OMu+)_>_;B!i9c8m3JQ!omN^+8cWEIO)PH6Q z&$<&hbbkmDZV3t+QUM%&*g}i1puiV-s9aX-!Y#km6OT;t*^cj~!)&B($h%%6CLM}>ujM5-IY}Mg;RuJ`%|rS ztytn%wVlRWD#DIxv6R^qvB}K$VrTpaYlE}t>mG|jM$t1FCtovN{GHWuQhKugo}A(A z?F&JUzbd9gw9E*TS{FQ3bE113rcYGQmiURIEk1o4p2u}u99UkpZ#re10Su*_SVI{2 zfj}Q#I*7w1-qFr%wUT+Kx<6&Hq4I7wvF~Jr7-H5nRg$3aZ*x17^;bKKPCK`w?|b;~ zhN_Kpj5%);T^hqS3qmFZb9ef=&xpBPr|of3f{NMCJYR305P$z}U*OR@{SaoZaP3$@ z3V-fZf6H%6vRZsEOG<4$?1w_A#IAsG_SD=;lRX#hm`yuN*!jBCov=Ob14V~8LWlhdHZ#b#v>Li>jgf(f4@DK|uc`dqJ&x8?I z&%T;haxEvCrT=UG)4zRZQ0FDKTW^;LHeL(+Av|2qcuJmQcLsb~$-ct8UevVwVmO_E zH)hML;4u(d(7yJS7!~#OF4AZB`{5qTDR6#saQo0CV!@fbf_GR*|HaMf)U3weCN^17 zE}`sOVH`|hC`@SQjms8=b`Dftd zIZJhjB@~h1l0iI^%W_ExGbS64icg`R|4q82mS(|%)fS1fA|e;~mJjd~+Qo0j|70mV z8xE$zpbDy1>$|_1?kyS6-uVA`dJC{Pnx<_OcXuba zyK4yU1PJaPd>41O#U=Ox!4urw-3buf9fCt}JDcbI{&QVzvs2SkU2}KU^z2MkdR#N1 z@vX8J+spHg?6$W$;0mSsyx`iziu{DB8!6MgYUX^^aQFRW`L#MGZ9O3-1ob$e6TK1; z7iMz$RmP6?wC*O-e>>9OAE`m@4ImK_p#I)0O+n%1 zhPqd5$@@c#>nfQtFg_61W*Yf99$a+sa&U$Yd6(s8@-U{bXm#^VVV}Q%#3V6Ev zDloOzWco$Q`5bq3(tU1N=H-{oa7z#Bwrkfbrn7-zMK{M~)8OD^#!amtU6YE3x_j`4n$A`NNpD_;A024{Q zVs!rXl6TC!#g-o~wROD#ROl3lltJzKcnqg8LGwGPSucnE)vffm{oQ>NAL44=EsXaZ zE+R;6UP|}sMm>nOzFK8I%ui^iB~`kyZ?4r378iaIO^A^TyxQv)MCctPYN3?s!5`{< zq!itak@NeQdpQW(<<(`xE6Y~rmVI_sJr6#`U?-%`)c}7CU(Z3 zBrqzSnf=cuAsu3c$w<)pp+$y&XYIr0pwDgqyFiUh%M#UE0(#%z+m^X6pjM=13DeL4 z@%+#U>bWS!ah5QTmG55O#IHW$rWU_HLW)CUB#$ryzvlSi1SaOZS}ckb>#V@s>1nN~ z6`lJ(I4D#Ao5pPs32!e@c^5g{WS_z6Z;P!%ykB}BrXit^o;>oU)|oMH2Q~JqU8*{G zn%#T%vu`FlQe0QX@GHmkAYlQ0;JcGmr)=(TI(N^10HnSV)~)wMKpJ1V_@zrI#{Y+z z@Qf~=PKJ1f@~+eSyL?vmoSq(}+1!nkeujIP3?+i~*q79v zt@T%tY^!hX!A$J`=4r;o$_v)A2qLUw9-|)z-kW!@=O9PJWoP|mxp$DVWvkfh&dU%& zx^pfU{c~|LjMPy88i`H~!tO_r3$9QC!Idu50Ij-C79I9H@LXAa!@Wh4w$PV9hetmQ zw|^(#tA71`y^}W`vjpr$GJfGC1ZeTl|Dlje zIg7n*nl#%JBy9zXFWs}eu^a}93kJ-)ZvOUn71Z55`{SS49qo8Xm`!gMd@r!Naq&Vr zJaPgnHf`0%Fiqw?1rcNRrNDc7by`-hOH-Mbjs2ifOw9E?{LuVx3@Ji$$JYBb`s@4B zbF$I6i*=>9xJ*~ia*K0`Ar?*8hde07C|U2Y7FaCjghE$8W8brhFR$KZQ(KCu?p;g9 z7?IC4zz+03KvW9LW!NJwr3GU-+7P5m&KEv{}w;5ZBBw z4>5du$nUUR!!d7wM`0qT(4I@MPGyK|UocyKQkZIzV|Y74Ba9t{2T=iVp^@}Na_rbx zWy3D-j>oY-v?yR~K|WMJ9TJjl5hqvk7cLMdR}b&P`9Av{#h=bFFTNDAofrQ@P3}v6 zwKU?vcQv_RrGZ6aA!lJ#{xFQ!gfK&FUmI0NRv5?>`;_=dwGDB#t#5QQCb>G(`xQ?^ z{JUWmED28;GHZkjt*WNiV&hnp=Lt{8Q8OA2xoqaN;s3HX;>+}XRQ~(~V6+RnD5qW9 zm&Av~kjg{K(B5|V9hK);@UFc5bk*e2TLUAtz+XMvc|Ln3wM5&7HSgL4f(mo+%NtOS z_%6;0^ScX5u^$)O3Q0H&+gI|sAfplDz)+nT_gXk#`9PhvzAs%-Q1!o&R}fsb$-mEd2v+WWDiZy4H{KJ<(iz0k38?xD^Z!y6 z-0A6d9fu*mRlu*)35qo&Ljgna(+8@CX+YC-&>0Wh8nB<J^x}&9W(%H_ZPOX7m?1`v|vblHoKz#O-AWd9AT_h*py=WCr+4PL7$5fNtZ z9U&Gt&Do83d)K5tMZRG=)VHPURdA};YnB!%;4>+CK1_p8BvLtLuma0*oGV)c5hLhcAT21Uf2dNVl-pT(4gHn2AGAC;p2}Af}ahSVxV^;S&}|!LKz^@1X!7( zEft42+QDv9%7Tk&re=o$SO7sJK^QnPXc&(tRA?HBOKj7fh<7`eh`T)j3eTmM73*Yq9D&8SZ08TPDyiGR$iS?RCY6pbiW7GT0>Nf9 z5*ek|r0iHtuG^&S4r>jdH|3T`GKWFsRUf!~1kR7hH8U&Hf%GIr4fj-m$*;)#em9)k zt|!SV5=0I34T?!33;CwHw-ts_2ah3l@BWc9v)n0 zANn)petcKq>_*B(a*8q;d9(T@b}H-``WaMM`H4q58mmoUf6p`z|GVcxY%+LEZeUPJ0n{If_EpW zCb9>SW<2rXS7fL(@!{CReNh(MsYf61&|+(*0~vnnMc9ygvP$I<9}01Gv92R4_QK_u zhA47=LT)kjTmt@p#cc>izIhKj4(tmH?5zqH+s!+;b#ENK6H#_9CHD<#$8PE7;BmJl zYI1zYL;CF8Q}hlB!rrafyN3<2Erp*F4Nhx9J~*^~Rg*1>d$MTiR17?8D689_<>eUW+mn9c{@`V-8?FCgm zxD}fmbfx@_((?T`lX1mWH03bK+t0DQ*CRKAkHY)4D_ShW>j_HU$^m`8#jAsX(z z=UvFZ%Te#1)utax9|I~g2?bUKUgp9rJ?5VE*4A>bUCgHm*Phz9Dm~V>ahSvf6H{UuEJ-#j8tw1sv~?MHORV{YsPkzv3s zEn@d)xWdVtI0scECWq<#)Sjb3Oc_kAPPx zKptNdeqi|ocI`;zvcNO+;>Q20ReEj^O=Av-Bq9-+e-c+|d@9izc;eHfC|;AkFhqVS zaq^V8ju1f59BiXHskA>J-sLEIeyMiz)NmEi>}2Kw9$tG;%pY-b5st|Q*Y)j12ko9) zmsHT^6Vy}+TLYCa4%|#P9TDKSLORzHmfsN{eP>|2>QS0(c3MSlU36lm+s!H}&>f?$5VgHXo{5n#ltpNap0C2YmS5^s)>WX4U}!MP?$~Si@M; zoBk`lzv#exBOZw*{~i4KyMx&+d_^rP^t`87qi1v2JhI;uW}u?l+y<9Izr#`oI^V0dSu?C2w!^{_aK*}uX4#I*$`0;r-1q9cG2`i0Qnev;uLvyk$VU|)w@ z0P0VJIG2*b8p*Iu^BAN&MbaFdz8APic(!AGzOM1`r8ecb)g9{`xk7Sxz_-Qy5-oda z7l;cBikFru_>hz&sEhbPxMVKLU2b75ls~xQ5xA!!J(2rEB0ESI*`gR@wwOPONZyT> z83!KOavftK@#;&GyUao(Rq*iUKg3j?sUlI4NQ#3G`bSF*O^k`GR~ipjl9K2yxxhpfT(K){E^+5ZV}(n> zq8!y26%1jIT0K!-Uit$}9ma^T8*QSy!~zu!}&WUidp3LXeC>$m^a4teIxOe{%|VaL|)IS#3yK~DYO=yy!f ziKhj_MtS11zsi3&iK=i1{w(_1_n*M&$l&*_3}^s&%7Q2*zaXRfU{5xU6K{hZ$>}Zc zjY|%SknTMlowdfjH0ufGnD~FP6huMzyhjjxyoE)8P&ahN3aN!5^~3^~av3PvJb|ZF zE^|(+TgV>@JU84eWE7e`CkNTO%&v!4qZ~MJ==oRoLh5d4H9kpfMGStlc05>fG|EeY z^B~eK6hT3k0gyWi~|7aC%x`bMThE=0XB0$K+_V!^n zfO>=W+R<0Rq(^VZ!#Dpz*-5}2#IpsrRLm$2U=xKB=)ngdfT84idIE#)M9j8@c>LhU zr;y91kYlDYjaIX2_P{ke;F>LP%?6lQmRQ$ORo7t(tq_fskD-FMl!Lc48weF_R;EZU zhxa^pMV%{b?v6&aq6D9A5>1m06;DO$j;Zjfv$GUHfknhmrFQ2tHNAVxg^5K}qSU)< zdU6PHkU@cjR1Y7G^SHQkY*uZ7G}GF{Ii$d`Gs2%{fs{!xd{+~IGdz(P+*5-`#cH%O zsB?8kKSs}4VV*H%AaM$}R{@2DHvW03$@y*0%Z~UDk)-TpB6a{>{39wNOuuYs%}fAW zF3Et<9Tw>Xx&_#qa+u5$HrT9DO4qTQ1ak%FJQw+x?bozgAcfi)3*;my=#v|?kKtY} z=P+<#%Pyw4aveT|34dpGnH>TMbmfN3vj|M~d9{?HATwRkhOP_M?oS#P1liJXeQA-B z|InE6qY^)yQN9NOpPh_`oou%jV3`i|)t=%U57|H%A8pl1IsMBnsET_@5U`EV0y7na zyLBX}+SC6yjL`yvkV!MK^F7JxS0DFRGvdGHXir*Q6Cs=|;jY>!f-J{uS)t!CBfT+p zG1p6%zQdDY9cL!G{2rG;oZ%{F=u2s28Z~Ost7E{X(xbWN!TwNe)5nk%jQd-#pBeA) zw+t?p!JS_AxVSq$-!9LL(Vfbkjk&3!S{Q@9VsLwT-M3izY3Yz}s??H-(*vsfnNxel zx_rwjMK&-i1K~e%XVJF{nU$Zn!FRV=Jn2|Kp`z?H@p2r&YDs)9%X-7nS8>U*g9^H^IN^<=4z$`pQPNQ6TlQp%3rH!xah!S1)Kp1%$QcQC zXgYm_Gw2I8!v%|E+Kw=S#z@s6sQDyZsO|q9^8JFDhV-jWVX#Ld1Uv!sC{Zidsh7o^ z6_PuxD4-S;_3~O@bIcpHFr92%Y!K9dgr}?`y{7!ST2kGTv?TRM++Vwz4my2{hBXA} zhx)u*`d^$8-V+m7N8yowRqU1)J%;%r!0B^; z>nC()YBAjJ_h4zvj9J|6QPm9I>oA2~$)K@j(2KGJZWq-ZeeH$Zw1tRIpHssVrldom z45fj^mv<>{Ne3|0AxnG@pV4J!n0Oc1tC?#U8vqdP0X6}`>yy37Qk4bGX4<){x8A$GEufX_8k#l&}2Z%akgBDnyuLHce~rZWI3zh{kM{nZAcWgoqo%pe{%8D6wmYrLBXkk6oE`a`rIc|52qkdsiE}G%)M_S4t%(Q{@o&o!=P&l zIup=i%nKxgA=v?vML`ea^WdzgKrCXMQA+6uY1`wNKS{GVt5+mUY+P8?kmmCx2~*{V zV_9aF*45AHQCb(Wzv;}i5L+7PD_p|tb?2hPQUgD*zNEMCjocCs_635B2k%B|E=`ty zn0tR2^)TB;X@SztO$E5Er810eB5wVs6H^)Xb=YZ;+~0rUHO9geL4E25>94R)1j^-K4XNjb*Ya|0JjiF~Tq{FePmY8qt-o z6hT5pQ!0O;IU(=Vxwh#6x^`$YtfE5nBDMq-+1!&EFnY*qM&=ZzbpPuNhShbOxkbw+ zyqSbBKBOCWDu`v9wgr1?rD~D&7tKjsL}bHUT(>{SJM~2ani0M0qoG{-1D87L$tk(* z_HAm$I2#xWu`h|Mv1m%J3DvV_ATr$n)uty2VAg@4GfWQQ8H%B&7YHlv2!)VanTZBg z`a^SCE$d0D}s-YAeYEfP6tZmE&a3Wef z-q(#xzYT6*RB;R{U)&6iS-c9aZ-(vv_S|N$!kjMJSj?r`9?M@9gt~#? z@OrYqxei&=Z*zX8R-vmUAp%^*essvv4iu9nZKlvTuhP5LrYr1d`ya!u$O`ci7?V$xmQ%T|Sn&dS1&nWgq^p>D`(xEDwoL~0tf%5AzeM{T;L zSGw)2zZ*JPfp%#03^8m;HH%$lW&Y0*c7eMXEeiVD&!nzxzEIYeYCA+I*Q2U`e*WoL&D-#Zbt$!U(a;>qpWCW@yvu!3%QISkByb6?773RherAgs_lFH|I~tchEjUbkJ&EUu!I#SYj|a@21hQ2{%;{oA64~M z=`0+pS=WPUw)TYT-+G8#*1mrs`KEmm1W{fj>)43_R_7wUlsrdhHwcFfL}9= z_zjH-QI>NzQG$pZDGU?EN`{Yc9J5+G^c&LDX9C6mTr&Q&6+ys#meA#;{_Nd=hFjtf zsWbN4A9DySPmn6W-?<69rtrQLCAr(4WU zH>@^xiTD}OKE^{n7q8Wnii8fVJfdK$Ox`;cnEiY#C`hj=bMM3yjyudY2%1Z4INGS( zs&l1j4n-4yDB*PJ+Bc~dxSpAA4rBm=p<#puv_N{R+w@{^WO_gD0S=vN-Gu@!yaoFp zOopP-DoXlOaQR}8SsApWYe;*kpK0RA3a^4#ep&@4=l@v%r=a{V2T-SMGVG2q6I$BT z(Q{L~L&q4dARGq0q}hhCjP5^>iC*{N*WIUL<3|6_KXn`_L#X&5MU0XT^FLTq1a-bg z#Sr#mbMAFXwjr_ym5=*v9eDF9dsn}PRN`fSRWOWp88lJ68Zb*g3hrMsR1<}|XG>aB z;ryTCh9QGSoSp;+1=AFGsFtuj^dgeplZKFht65h%%;>G~w{k<_MtlecJ8 zG1Y>1J_v4ca-MTh!j);jZWI86);JTgD-4;f7`MS!qt zo>Og2w!OK#6rEpuVj-&}v=)iAf4E|oA`2=VPta|oovPmUiTo*TJKQ#I$1@Y}zIgXZ zWFeyUH@fCed*2<6MUSE4fUV<}Ph*Jj?6#r$vmP8RP*sqXH-;BfZoJ4h#RPV#$h6sd zh`e?l#Q?Y5-hGB`4Y(784g~BWt!_8?G17hkrh>-66+TzUgt682Ey#J$g@Di4mw_Uv z)WTjM_J67ga&H00U3AVp&Mb9Zpig^vk9>iX`s&A|J|7Eb!=c{)rJ&4+rxcp5Y=y71 zVx`eEQJ&AP7yUn-aJWgej&W>fV7c57heE;L-DEqJ-sC>@9IO@b-?fDp4WE+4hq2zi z28#PR6p}-k&BJOuabXHMePhY+{tb7&NH4E ziECjWW=_QUfWNx3sw^f-$_eakB`;Z#(1az{X!%RA1AxD3o(;%wED}WIk!raoU(DfF zLsWs`nqpyOGH|Fkef^RY6a?3TeOX?Q=`|&udm_XQnJ=N*Z|v_VtJki-((O$ z-SqdiAg+=`+4G5o4h03|rdtj)U^SYJ0#BE5~S7gVF}uKd~o4gs&?rosjtI~21t2k#~T5At~7JSBMZz&xjfB9 zX2Q^UqoWG=j`YpnRc#BFghy@39c2V+ABwP?{AbNa18$zE36uS&BEvL&3BaHD3TTa zVXx(}GUDo3t}UGDn*&BkK3Oe(;X}=TTcayYb>|S7KHyP1KHhU~ZnRAkD&iU!i<8eD zwP(j9kUW!6iu|*RSAybB%s4~$724%H@_zPxvF&)Pc{e075-YzK&r@AJ0?ffe`1Wju?d`N(XXUMHlw4= z1&EDT&DXkTf$ns;$CE+u9Y%vX`ApM3j}8K_qJd^mr)aHTqU=zB=>4P}ZNJI=sE9 zdM@&z5e>y!Ly0XAY^{S106#CIdA&t}F-`VScefu$M0BC8;q#zyB9>!CL;p=}Tx!JX z*tk@0cqEFrZ-*&UI2MO)99ai$7bSVJ!cfQjW;B?82p9mz zr-FPw;3?SDgKrfW9$@i!FhYV9AH$+pT8PYjz6Tlm3^{{xLcMH2&KRTWJx(z)u8UnL z;~}pFc*jbGBK3pn2?YafY>Ee44IlDAep4avNE>AUd42b9VZaY9Ju*97ktw42-I2fF z#bQnsJ;0)z7-}Kc*VO~Ho~@R$!AZb`!4A640W$9CeQ67U{3XjvX?#g1^bC_ddQNq=<-!P-tMuF&JEH>L*e zrMj)`F9G$>g%^(mSIXvp0#Z-|z8^R`)%~E-dF+Y%X1qJ(8q&Gn=Xy*w=dw~FX27tv z*C@532IJJ=w^^r^t;H|k-K)~_6S*K_@LsUBpcnH>?U8=+x(JOIo((1Hh2q^o7})GR|^$e*WELt zeeFZs=CmAxIz=}VX2NdRV=Xgg%i#tUQ~9I`tS5KY9*(?B z^X&bnl`AuIi8LYvE8JHehF&X%$xEli?0rt?><>B%eilwCft}ivQrzPvroK2;uKN9{ z6u2blPs>`l?o~;D^J{k*R>0mJ(GT}Uo_ubLsOA14wG(!UR|?S6JnSB_o!xlyi>6W2 zQ77ykN@7qQ{iCO&Bcf{R6q-;pCFp|g7l8mg@+&z`(dHHSvt4BBy<3POu8}&7*@}R5 zlI6VTVJ@^)MI(4Fx;Q$xHieiFy*$xAvP5TJ!IduDn5O+AaYzb+Rd-@u(|fYe>R>#L|39s$Uxw(Tc*JXn4y`Z|wsIK9xdlwMthHRGS-k z)~Wea$;Q{%@@M5OGloQ*@fQ#(kVPAl@u|R$eJg!VWQKezL>2BGoet>EhauSy7uKJK z@F9;~OIQ2!U-wFC(xw2Kx-q*keFbr9EEOp05w#wRW2GZOSR?!>|Am~N$Yk4`!= zK&dpr=p#2a+Ae>~JOQTqCQ@VlSf-UZ8o7^LI-7(ZNwifm8@iQCq80Yy2!_HWe=}h0 z(Hb|7OiMw2ZG4nkGcg>`S0dREx-5EVm9j1AhpuPyBk8~$ihxo7GKw*372aEnXKLV8 z)iuY4)*b=QE_bx*?pY5#Y~>90sz8IsC&PWK5k*1~>~yM(H0!AH2j)W+-2s^mMnk1r zuimvGlE)zl!xX=M2G5`~(l$9C^Vf)}Wa#QUW<;vr)z~pA7IYuy5!qGnET0Z~W=rM$ zKVDL(wVACe?)=_RiMBMj<};G~?Mdo3JpZrx;X>#MwA+6HNF7Rpj$G=LV5J zqI_(@Hz+|B5LeT7@=XCfB?5Q7O_#1??Zsf5{h=&&mk!eImjPV>d-B#%sq;RS*B{8u zoE-rnxj(NLUPmjxY-wA&IT72dI(<+S$(w7ER_p*M!MEOSt@TMeReWR=SeG~mjZ4WE zi%@QNUSo+hSisS8ViIY#GeC09UGrPb7HuF~)0cCi5^8o>Wpu;6+gfnI4YmHfFFSm; zqLd1Wb1&T7Vt{{p@YyJ&4%1I8E)I{kDEC-8 zreEBJmwc9l{dn*AxFPtM*BKhC*#`CdvA-m7$N!}<$4b6O!>or9QbYgIzt?W$}Aa256Ca3wTT=l=1|N+z_7 zy}UQ&aGh;%`5|z&W%MH8>p4A;5=fpd7q}0J5FBwjfzAW#4748t8ar2RO z(r_(8Fmh!stQ+{LD{M|alAg)|9J(aA{t)cyD-0mwn(j@rKQzE1IEbDxfnYntfLbrI1urhu zOgsKj;O~`~<||f=)}78F+qqroRqrF?0!!9_IL)DWo)X8o(LZWCzsk;V7~B&q&Fal*E&g%tsn;y`YYVJ=#yhsx2D}IS`OR#d|CYvUxno%Y^ASy zeEVlIZqb}UKnQ_Uv<R5h>Q2?G;{EmsTFDdb50#>H1Fz%9`K13EuZ*`u98oy^punN9Vj8oD zQ*}%g*F%0Q4fMR({rE1h0`m@ukXTW2c|rKlZPIm#AIfykwxsN?NPN|ZH26*~xsiaC zpknfx&hdT)3M_t9demv-uHs@5yJ>jz9eKvysWrK>K~9sN+%wq)az5g}dm?#%loY+g z+}C+yEgrID5(vcn_e0YaX1hm)Y}Z?P;El=q^!vkZ_gj15+w}Xz$;V24`kOi;H;~*x z|KB0B>fdw&vDqvt%Pg@v?21b%Npbu#aSDZ=#j&6WB3%AmK6*u>6jjecpFQlKDUa>? zB_3RkN~yA{tYy>=V!1B4F12i4+< zYeRmO4m@Bc-xY7s&#*rkHttM|iDT@GiT#j#!#>{APNAV1F}kGKz1?AF$PT;Dl&q*9 zB7^WWWLelk&vUicAwP9wJh>-^9lt&iQyuZwvbdFm`di9Mt$oxvI})EyEq|%CsD^c@ zCr>e}RruJWQ^AF6m%zDgV1J#x;Z(}CC6jca`UDHttL#eoz!L?hYTp1t_AqAjTLO8Y{;vR8ABT-(I(X2>EncN=KQh^*=n+dg ze7aeIZ840l;N`^nJj$z_tJ{@tPe+iB7AY{jELJ(s$!{Fq+`auQlU22EWx;b)gpM|8 zMH4PzQBih21j-IA=~=wykMHjWVF~amsc@AJ?LL6^vxz;An~v$4|A=_&mtPAUWSe9; zapeB%V0@pfW4f0`W~Hs%Jg7fZij77vml~V081XS;XN>1IF6}evoT5zbPaBq=SFtlX z(5M-W4N&W#Og8?&qb+=&I3#prsF)jC?mc(PR#|n3nZe)USi>;sEZd(>ggu$372(5@ z2Q|Y**pW`G`~7w7wAXMx_eeo4V0n+*GZVBZsX!;dVc{KR+_!fXGw#nqxwf`bDhq7$- zd7|!EfYtTVhd&oQymt$Bn`F=!*xtu!Yxuwcj`zKv1m2hVuNAU*$Y!|SKpYQ-@y54h`oq9xyP2Nq z_1wi8C>(lD!7i#Fsq6EeMsxPu?6;pn7B^x|3yI3^-W{YOK1xM2ZX)}|e3+ExOANmv z357lH0-+F&h2AKKgp+Ut#ERk`_ut(y3b(FlxF(kk#0#_$Wpht8$w}AB&UZ2@Hvh4; zW}x9|3(=Fg5-^X9TMmWi+9>}q@@A`bo9E%V-L`aUNqCkQ@pHh_g8Jur^%tS*Z}v!J zIw{*fnBxXc-Sh+^SQSl@hbQWe(sC#zSem{jVZsIwUG{&ajDO2WCENXFF>`}GL{`vu z|1y$PLHC2LY1qM!l79Z_!&!$>0Q(g-ijjj1zhyT)6R+_|$pWRl@gaLnKwiQOkJdQ~ zQNldRW7{$>uFMV|<(}<#_SC)63}w>g&Nat(Ya`ZFLzn*$V)|(ND`t-*DK8$`lod_fAIKV}eyX;goh}!% zR8+Dvm0^EzqK~V4g*aP2bAbPxSBUC>_gROuAW|?xYt;4Kkox%W3u*$Vt-an7UK3A2 z3HMOpV(&S%bq=O*Sp5{CEouUH(~3a5%z*gNWAVBQ;TJC@5sG9fb^$7fP+0{dsv9ZC zI&4-N4Y1vfDP=@0smV7Te~+c3{>-QgEE?;jI5p&iRFQ$P^%M#_tC#+?heDRPOizN(p>l11*F(7jxD{_k@%%s9IYzBT3>#^_U zxxak~Eno9N*u0xGr`A~UA6@MYLrL>ez?)L_Qs)mm3U!XfB1Ts@wwnU#l{GAZ!jZJp zCKVXExF>{;r1qKvN^O2Zmk*E0PWS{GU27WpQ%g@BBiH^(sn66b%`)_%ya!rQZO>RK z>V1lzCHq=rPsofr4?anidnQfKxAT^@LwqzIR{6XhD&6kfe@+;AeP|WaaVDQEUnKiQ zK40F6SFSVHsa;+4{H1fzt-OZOxU+HB4@oBNBBo-EP_LDZyV`iX9Lr9e=V&ikl(^oN zoL)nbU-fn%@7ix*0E5)cMQ-CvFm@s%yoJ>H?<(Ftya8zBPXj$8wn?l&p8>UjB$*yv z-$+hu6w2PU-E`Gy#U`Lntum98cl~}MZu}Bzm{^%c z@kp*qb&BA?!10x!BrF`=r!sD#ajkwy4Ij6;Q=&Wd9+;YF>KEq|=V)7|4E6ITnxp={tAdV-32B|wufOnp)Kow( zYl1`i%;IIV9C4x95rQUd4Pm82*K6GG4lz$V-HsT})!l)iczNAE*0%-7-HaekaT!EP zx7@KE!0H$3*B=;CPh#XR(>jsz>=(QV-<=KRCL=Nwe_y*FupUr{O~&R_J5R7$^T&G1 z8~iy_){3(&F5ad^W|z-tbXRXtf&d ztW~b*oQ=4qTpAY9J1QwHhjzRoW3^%m~z|H5DOD+o%)`uvf$RYWKb57$RUZj?Zz7> zWH6%Xi+ir1;*UHoQ!=?d%%)|5(!}z4H+Ga>O*0q1-0j(UjK;#xd3QiN#Erev0;$WM zv@%grV3C&Ik;ZDJit+eFBj*IoL7$(({`+pWal-6K*2~#r`k|LV;bU@#tDTW13yZKV zL3z&1hT*q`rDOT5bIcn9pdVF6mc2ezT!*olrlGg7J-J;oOIX(tcZR1hAq@c?UR&(O zLvL*A*vP(igW`Qj{s&Px=g)W|ht47=)7@(WFY0ENqy$ywW6HhH%!WiPNY!(mE@n@D zId9`{$Bu!P4jcTGN+)NmDJw1cqp$E39--i!6ji~vQjwiz)sU1%0Tt~ifdt89Qo|#=7qqCt>2+md4G?Q~&1q7g}NHnFr zC=CG>VI9ZodeiLtL%<#8sh%=_rZz?ph~(($&XG;ULg_krvan7_H#yC#N7Y|{gtWykGT28z5tBwt~-s!qgpF1Q?${)S@dEN9gy zQEzGRY6M4o;V0#w<<=4~pYNy;tBg%OBH{nwVE#Bh`$ux^hnfBLPYnsf&y8IOT}1oi8Os$3zDG0p#JS9xBzx;Vin{(~E(stQj8vO#7cBV6nrD_~-C~f8^M{Kj zF2ZcKrYLm=x0}O&*pbF{CJmFEK9rss*2kZ1dSV5w|B#5@`z9*fe^a_e@2qt%|82_5 zB`OI?r=MNcJy*4fNXlUrbzRaz*bNB+Qra!uzQazP_pnf$@a>ebGM=tQR;Ey(0u zS9D>;M3p+ederqdkIe($1#C6P@Wp6+4aU^Zwb3M$5onG6#YCwsv~FurF9R!*zrQ0} z0K|W$?PQ^b5EdS8>9giH+2fE6?735w}7Wabl#`I_*(Xqy4f9|g{Pn?OVCyZ?> z#U-?p=%w_k#Pw9m#r0f#cIqJ>Ye~x{fp}*tVx85|^*M2Nd!6#(5Nf^I7#HiR-4sDy z?rc`{J$&JD+73wfKc4FE-qSd|k`@|R6mh`O^c5KXy}@=|OS>ZHZKk;_Sd=&~x_e94 zNy}L#?D4DGOX#P`Rc%{9vB<|Ke9A#W^ZpDeTGhmUiGm94g+x2|rCBFAz7<=lV$;T* z?y4*!VbDBP0QmtqL;}3dJC8|=3!i>X6-z$jIM&EFEX2V`o{doo)H>*N;NnA9!SoS+{ziKJ5@GIYqv>m{*igN4 zKO&H(%1GB5uuiiX^=uR>d^d8~{r2f4v=Q&cr%7b$fu#+}QVqzu-)`pmLBl_d#2m%I zKW!Fo**<$(E}6RBRV+YE(*cajghB8V% z&PiF!sBf{+l@kZ-h>rQYGW)2kvz#ArisoTYxeJ@)@yI^PdumvJczv%wFxBs~!fnwl z7M#h+PkZss+;8K>xzh3WVz+0LGX}DYO%oZ_p0;{a3-%tMbK0Am%8o*;Q`==}1JgE{}O-3pu6q!-jPEEklo zRLRx{xGV}h^)x(#4rgVXm$u<0RG4>)B-fl}rrtl4HB#h$>-NDOcJ_AAN0>II5iBIJ z&1F?Z)fX%0Rx5tKj}B*UiqZ^{%pRaaFrb;Cdq|W?v8>QRd~L^<92OE$E$J$t%5;jh zjWPuu9n=BPHcAtR8F?~AORGwrCWO@Z1NZTW?N5}GL+^7ABdFH;dGicmvPu^0^3S|i zl<211=&0x$CI4PP{&XmcH|Sx;b+b>aIw>?64OTd`u>MH-KUEzj&!**=zB6bpF4--U6(RZ`&JgOA9TfSPLy4+@0W3 z+zZ7CRwOtCcWI#oid%w1DFliJcStG4U4u(;DDM7-|2gNo_r3Rdzj-Ff%-X-TX4#(X zy=P`mJu!6wMe@$6jIi&y0Z4cE`^EdBQAAgqRbT%!?bOoBq{>YA+J;g~Lc#|~^}I;o zv81B`)Hl^^K5HCuZ1m73X8bCzL)|bp<4B-g=R*f-x;T$oZ{*{#Ti+zNZO0gUyXPht z*04y(8SfX2sNyuhX+=*pABf&GvBhcs*QOg?`I{hc5}Dc28-ve20_0_9a6->LMGdJS z`1~rF9mQ-BUC1%r*KEC+mx1Qo{0p8tB`~>zH?f%~9ueFhlk%-;5qTWRNGZjZR^16C zFyzD6hvmro%>+sjF4!CVD>A>6(wyK9{5}&?drE1o4$rm;(t@+<3XvGmOt#p)>29pH zH8Sr{ze0#^QnUT~sc@2|BRywKcoPv~Bs)u|CyzN`Lyb5bzhuAV)hFDoWi|Dd<(lx4 zA4Hz_OAJ3$MZ)qKmProM0uMQ)v;8U9U*gBL;9je61XAP$_(yY#OG$=RwV4|p#;sCx z;5}tNu;Dw%^gNx(zx`_d@^oAP)aPF6&^ww=iY8_yrE14kUCt!Rq}=0olG(x5 zK6NoIEB+1>&AON$Wr4)%krguDXAU;Kfipk4FFVYi)NK6eH&%*~x-G?$T! zv4kkbgxB%;{!3Dg2KCv->ll|oJIT=1ckgEEW)spGUAjGmd?K!ODiZy6C6!u66$O&~ zs3V>+drxE4#1De4yL*Q@p?-hPhyy@})NuKNW1eYSOV$#@bE(#zU0Vp4{fVN{z_w>g z7sW=ZW!`p=Ti6cNqS0}Gn<}F7Z_KQQI5N6i!i?UZKuDfP;De_bpp#=$U$?tdg^pkU z0D0(JVE8k)d#1p_XjT3;extrK&YS26wkbQHLX^1KS*P<*OUvT%MBoyzYk3yJNOBd* zP~Wm+L8{=*u|n2yr}WmAw+zrdt>^dq9fUJi9$S0RnaVj_tZH-QV(4U;)~K9u;){J?_pgmtq8TOFwyx|tI>;aPG$HN_K1Rr+ zRFY{$vXeaR3&dDq(~Cc-dE>asTF0a|x&BJP0*>C#RLrhK-x9ehZT(N6hseP4!>YsT zKUII`;5O~bI&+}pMz@j;W8%`2u~{Ie-KJJ{eyORZ3nj|B(RXWWLqlmBRiJiHbjX(2-qyF^>8cep=yxpq-o<<8Xc3N%t1r<1<@Nms5l@#__+DT&$$I_mLk zRW+$A%dRsJPQ2&-)x@_M!^)bT18Xp}PUW`M>Pqoh}5sQV8)TiK0e11nYtm5W(>zO%=dq0;}huJ!- z#+dVx70i5m_(XIfMz@dazxbyG++^H)~Jk3eBGdw zRaC`3^6rF1EQ-obn}rPM&#dQ@5U|OFcSy?rImS3Q-z3R6^&I7Rw(&L8D93~lvr!J| zwuB`FqOaw>rg^>aeXx3%{*v%mmttWf-IRITT)E2+?ufDeQ8~Pvo%Hh`D~Z#4jf|W+Rt3S)y6)L_kP4cHk`B;<9$|)2a+Hlu5>r!_jz}8D^ozBu zG1qP6H96uAh*|%Q&GLQhV8t0T(Ysj+OD0T`$#m>{bkWw4mR7ztl^6v7LzWQKeru>q z+r%$6E~=o?L8__r+^qEdAisiU)eWWVF5nrw{7l#LZMR=W$eFsGIa3Gm%927rerbK6 zRq3I~Q8z-REewGZgyS9T-x-i%^iJnH_n5T^J;nHjY%y~UAI`<1O?3y6w9$`pl*f(C zV*iPu%aB?UZ^PD*a*}a(F&}CJXfc?gLXC22Og*|}f3d3?BWOdEIl(8Q=)NehCbGGr z-1_aM@c4@jQP0DathXl{ZUmq9^blog&i+nNg=?08ACGI&wq?L&4(ImnoMPBl1lh_@ z?Bds@YZO?BOW0@%SlxbBVAhmPbozm_%br8w6iKiyN1X>ova#O;uDm(}ctb>9D38;b zVBo-NC{BmUgxdpRMbihoXYeuCt*=`eeeb$f^$4_%DlCttAS&vrYo{}NSLIl{%s$WB zu0mM54ccyuP!#lg)6NB3H7V(RG~R1#UNVlo{@!(JOit5`BtkP4d(cxNbyB4#IW|O@g_RDJJoFrpA47&s$!w1It!jso5eko znH6_OtM4P$Q_EqU3x)7l`D>#`ZvI7Oj3P;=Ni(ggnR}X*8tjF&eiA*>npZ^zQZb{m zeI@pY_Gk5x0Bu^WBc)m`PM5)2;jR(QhWfHL6B|!m(Rm>}^rONeSAQdv>zTx!=;N|U z8J(8I17iGFmR#6NPF26aA-@y#g*r|2d)LMCjyw;C<@f5CtUOSijfBcd8dv%_rxWsz z8Y)|)kBQtdy_J@`tl3r)Vmubg)faV{e)UV&GrC5tZ@R4GttsN==6XgCl9wO`P0m94 zl8!uC*oDhQ1YNu1F|wp_OReE{4$Lm8!E_rp150B-O5SQq)Y|^4{$OT^TcG>^Cr!1qqrIIvK`k& zdpSONO)m1^#9zrLIvLG&lqvuGHN)|6=~u*zh3CsID2>6(=o{92CeNga+CT-Wv3|mV zs7aFNRvzUG$IE!Plz z*@sMHe~Y9M`2;O_-oR9INt89j8?fr&Uclw&A2(Ci04D+l)yNXod9%d<6{bK0j9&H> z`IE(`FBceV4EQ5{Whx_vOJ?B;kkC%bTuxiX+^X8H8IuBr|-_u@8>46;9D{5F|YiRSs!`&<9ookEH&K>v+n~%>0J5e98aVtm4iQf zlfB^&D9&8oX-{nfJ<^7RlFXQ}uUa{^VDmyc{39VOBPxCEMxkA*Aa)sxO~1$lFUrjWSx6#hLeZUSjW8Yj{4ylt zkf>3rgHV(HQ}Uotnf&1xwz|vDNhvLkno5;pNxtWOSL9(LG*RRJrsGS*!s*IE*D$53V4gJf%n6u1n^? z-J+C<7+c*7RcS&h7R4|z!q`n&8f_Gj8V*6ThLd{!nv}lq^?2Q$NXmTl!mMw3`$tzV zsNGkaf+MhZi)6&6O{tw~F8v6#exEbzbbV>72j5@XU&)H`+`)+f8qu9e#_tj7X$5aY-Cq)kVJa zzRg5q@2gy%e^=|thg5#&Y#}Y%FD8p4Sg|R{O{kb-v&+rABEo{AYWUN&0v&zI>mSDT z?4CNzxTxX-4hD42_LVEJsU|U2F$tH}z!p=hH=#Orf4!T_jTK7`ziEG7^I5%YjyImt zf6djbArxUe)d_2;GRfj(uKUlhIr>f z20e^KBVC~k7nR+qeY-;W0oQo+ALyEQn(bN8N&Odz#utg$P-B=-D#zdt=#9V&#Xp!I zrAMw8UwnU^MqQwOK}?y19$ECsCS34%MLw3@o5hLu=ld%4tb{NMS;h`iax{L#7v7yC z%dyjYk!22gRzB)CFZjFZV#$c*cqKS$1w0t?)p2B|PVKo?<{4oM(=_=*By5pa>C=>x z^PVq1j?G|5L6;_hDA}QqM1M%Z$D9qIU$4E_t?;S6*Y!Ireo-ZvmfZ4BebwGZ97FZK zX`uorvaG&~CrOC-*)9wmR*v=gJb0^ahFj{K-*uJrXHhoGV$t_m&<-qB_#{J=3cp(U zYoD+8mv=1*Pe*2(i489$LE9zGrx3@-3WOumSw{6gQOyg^9VU#C`^tpQldKx<3G>ok zkK;x8pKp5C7XN8rfgbN>v{z}k;8puFUMp3W)a(Z}6gr{iQw(*Dkf=G4%1w0mDmDw( z5v4_$$h6YJbhsz+=p$|1&5S4Rj9rcy@Qb#@4*(jtbb4ygEJ z4M!9yjCL!d^WV%qP6K&GlrD5*+SS0v4kW7k)!@%@js}<{r4qF`*W=14Z$ksjDUA7Q zoQc>hkle;<9{7j*j%F`F^`IX7nE(R9RPRR==;g}**b!&PLV zI+q@{i#I9+-4)fHoLLA}+Gowcb86im;0-VuL66*3e^2qt)?N87N?oJ}31X%1@QLrV zXH--9vMYpZw%=XxTO*x^Z+})5>!qvQ^_qnq$tzbJ@xlCqVM#QaUBar8pVPCCX zo%K6z4vn%^&@6}Uo#SY=l<)69Y2*7*b`vzws^(L;DH2~!K-v6(iS<(l@wIrA?4e&YQ94hrg(PwKe%o(*tAt87_=(|c?J|3 z5ijAYB5d^6JqE^}rG2KGUQb{g$F6Ui9V{X`{6&`b#sa&hm%(i&vcR*=1*C>h>*TMg zP2Do#=I~VIS1ZUpjTls6hM9@`6#|N{sg+lH` zbx(|;LtYfZf^N)v)H-U~ZKanbhcC}@i&jDw1@<6F-(?HujVV`7f>22S4C62PFdk79 zyJ_Qef0R=y90KMT*^Z3+6gJMBh~Xta!STX zreq|_rhf_ow0_xm9l+{7PrFlbjNi2Lc9*UTIaoub{I;;cOEX*UEpO`&;lhOWx39o# z4%ez_sMvbx)ajk^&uo`l3RJ=@l}f_D`w@$csE0b{>(EZ7EU*>>>-hWJMxKG%Z9yWD zyLoqVeHMc!{3R+BPr|j<8_j%0?W;$tq^%LlvT($=&?@M{ymj@n7KmS?LdCI(gvmjE zBm1h)k6RTu_t=Sm`FvB{L-3?rbTZ}Fhqw^s=$Qh6ZZrSL1p%q>-`B+lvAwQA>lv38 zn}f$Qy^*eBCpxsyj+L~)@Pxi|^X1p!w{(?Ayg&o9D3_+g6vdg{b#Ku3u4QXue5%`u z&qN(>Y7%cB<0-!?FHXRP*UkKVLOnKC?F_cI4nKR2aS3(MkD`V=h@}CBG&8?t9ii6E zdJN&zu(9V1tuk3P#ubwB7jo%3Jya+))ZD2cQ}XgnunadufVzrFq}V8aak3LD!Y60D z$CY*}P`2d8CcXK|FyVH(>l+1#$%h?Vo6JiP%U`<-H)rG0Rm2{KQ7@GRLOjB_*919I zz}U|Z<{q=V*ha~r4wY+_moyQpl^B#rm_+ZIpxWTv218P3R7g zDz`fC-GlER6iZTe+(({JG<(wK^L4;g8Vm;BO}CIj=eEPI3XhD;q1$ePuH9oYmwjvtV7P zV&ny?k#ebFT;Ro1E6rDMwqW1ybJV$y;A{?A#95Ii1FBQhZe+dEpFIl(N@kIk1+!qj zSLt(_R=0861d2vx*b~W_nNiMs;b8Yyl6sjB*~WG>xv4s<0;Wu!wKTg7Fhn!Q9B}KN z&?-ud0kM|?^8Z97>WAM7QC=CrX-3K>gZ7Rk^hHYF`VQP^l6&K%W<~Q*2_Ge_WgXLb zIoW-!bqEq*DPZ=GW+xyX=g|ta+R*uHkN4zmAmVCvRmT0j-%O-x&~cislE$NvlzPIW zmZ~<44AGu8uhd?LQyO>z<}w9M8*;vwaonuQi%+^G-9?n6{PI}QyrqSK)(@DMOU*6I z!Z&OIH(7Zlx?{@GK$2p8^-F`%k2T*<=yxF5@)mAC{X`K~Z^~;_I z89(d2pW75^5?16Vs(=~nTslVi3zA0)BAgZ9bk=c4bC#L{ZJ%|BX}2zXYTND(F#~NW zG7j&_`|wYFE`A-Y2@lQuJ8%k8-a1*4spUQ0`TIjRCC0=K6*2fzIKvQN9ecJ{cSI3RM^3x;SC2Od&p;=ZK&7cu@bg{*q`_z8rI+vZ z033SmPrcYj&+1ttiEjHKD^<7KNXOC7NwM`ON*%9Kx1L&(3y}hp_Us$Um8GXVYl`OT zRoadAt1U4#_KW5z@}DV&1j&WVZ%)KrPFyLY8m4@ZF4WCgy9!h;T^SDN?&K3P4%V6T zFVys(eer1Zciil_(xxra<3PH9j6$ij7S78iMr2 zZ6W9yS;e~U0U}{OOkN{ea(C8eg50{s+ zSo8cT!Y88P5F%{hH#dmmYSLQPG=s4}hq70}Y^jVwQgV#x^aqa1ClDEs$Qn;|H}Jcp z!Ct)Y*q*t1=;6Lfq|CpEp@`tDj&nA)r8uSd(UvUml^1tj=dC@aq!B0*it%XEV>&3O zu3wo6qd#CW)1(cAhj5qo0-xZ-QL@+J;uLHhnZ9qV**?8^>rpace0?J+Ag`9>`J$W2 z$i#-@z3-1a{-(1q((1z|U$t_M%7C5wP9r%ox>BWaWpmC6uThp<&p#cuswcrDYLfu&U=?P!|< z&AyJB#N^C5?S79+i|R^jPwj*`X+@V|O$dBCgXr45L~vY#)N3Pyw=ts<#EE2DeX4Fzzl;n!GL@ehkl#-fLmE?m+iRYr?p*Dx%S3FrmOg&y+WyX znlrT;*;?q)jkf-_`m~VuH>I{D9-)}a#eqIhsk~-XX}&s1>(iEaI!5 zQe4#^TaTQFMD-yzn>Q=uKU*Gc76uw4;!Z&g{rRUw*002~TpD8=3;j}hb_;o|Qq<1e z9thYkq5RwUi5mOU9~X^%T_0ukjLRtiVJ*Bds;Sv4{DTn88qw#zV<5*!MEA8!@i4=W zN`Wok>0QZdF_$wc!>eq$Ae$qlMb+0XbL&4?jgz6d0??ul-N2M5Hb&iovh`C9gOlz= zSInWa+U+LmDMt+Gb9tY!$`21tJyox}rd}QvRJJlVDRVxh&E1RWX}%No?xKYBjtDQI zv_Hz^IU6&zeuWQx-seypF;5t+@CBovH?+)JuntJ?H~w}a1Z@Hoo=O!ljYs6!h57F# z{zL?Z@p6qv>~D|l3brA3{$MD;{RHe`fu!G~&zNE?HJP-+GtHfm6SNLtD~&fbeWa$O z<7_tK9fV&(GN~O)9xr5`T1~Z)&J6AD)yOQV;)-a}&+hissr)@nyKYWB!QC?l&yC*DAwgweCH+ViLfNkyT+2x$P=mKHunAy&`X5h^ToYZ58;A7)o_JMG4 zx`URjrj7Go4-fLx(kk${8Dsnq^tbHG^R@exz0|+^eFfLV{k#x(9Zo!eZmrIwf~E6- z9aS;p!q`@Co9K!9`l?%4o@*MDZCzIjV4D%YUwE-#V)(w?^(sReYiGTbht=3}i}i;^ z=Ccq`2Imt4Ka*F7{VDx9L+&BpGT(lpg1q%p+!}p@uZbCy?sgO`pcS;x-q>KaYdF=b zQ>NeJv}sAwV?)6Y#)}a~nl*PNw1X6dYh5$1ZpNhyr1o#O(y#hK*ax1DWChjIV#Ykt z?b2SZveFY9nbgtnHj^*9pf}YNtMBGJ-vnaeB5LoG%RRZl!mHeN*{A)8w z%QQ1OG?6+rI&@nyIT{-wU6D_n#y`DHlq&fSNPAj6xG@c1l znR#(N9jAQPMbo2Iu(8Y#Z+lK>UF}uHn7iqN$_x} z>rZ+jS?m(tyi{w1^V1Og@m-r`B}XDw;y^1mi(IeHSYidiy_zXAbEWE)n<4K^^O;dT zZ>4sJ*`NQ+` zNcn8z(=-{lJMMhR2zN?qVXM1LYb4x;YP!Bdw@zTmv6)d6Rq#9k-#2IICXLyYNWWi2 zC6dsuR&MLlghEk}c*i?*HQM!r3sH9=pmoBID-?9{9fJ}`uNyFKC zB_#=`^+G?eU0nHZEkyu>1a-?Qojs=}SSM!VG7Fx$)|?UU$Giu$E*|h;=~FXne&dmX zXgLPh9Ipv|PKNI**Xob`N`InEaa=L}>e-Yg_NMN8lbfi&CqiCfsz#Bu4$lLvX3h59 zGV^gX_7g?KZhxMOIC+UpsgsS2F*7Wq+b3&)B++fVa%z8}wtgn{VmS!)GF-Pck3krbU)ZoG-^0-vb zYitjeb6>RAy6PQ8h!S%s(TZ%#Eez6Rc$~L^WG9UFLUwv4l~S08^ChFjYcrJkEweJO zJUVnYno6c?Lo<4?vloJ3&FGdh-DrN}ct4jvs6JNQXl}T$tM!uax`$9YT>I$QQIGO< zb}tduuBA?`lH}kx&m7;R2a8sNS$=%?1Ct%CF6x-{qLNbNj@InQ2LVLh8+Gv4JASHV zxvXj1hL1=Ga5dqNdulX?DO>%vYBWCujF3$h6gO>RYrD{Tu>49H7~;C@v&{h_7988x#6Hc_0hD~?CUv>$*0%~2 ztu?97WZAzCohgk5!Wng^dV;Q>Q<_{2)46n*;E6zow0b<-*4z!Hy~f$Ri-~_F&N9FZ zd)i%jUcz^9u9Yq&zXgaq3bBqME=F~sJZImHy`%r@YT`&D957UL;GCxc(8o#o(>kKQ`-w!rIz6+!m!&u zuVlf2 zk;6r(!1{FaV;3%PKit1SNwd#LO6cirz)FAf;oA7aaZB)tLD^NeA7c!gq4i(h=UL;I zW29^6(9_#V4@|GH_6N>Zjafj#k8^6K`IQ!DZNkyhH;Egx@8&!tIuRevf|0cjXSC@r zV_5pxZS`=+Cvh985}SkO@YbsApHs0B-4XScQF=&tKdS-qqYqPT7Uzzul(Jp762`x| zkHSU^*_+wL5<)qg1-p#3?S{_!7MJU7rO$rFs~)$wEzF91;31)9W_Fga>2FbemEB96 zmt}9B0Q|Nh_A46wz9;l3@W@2o2gRfvHH*&_W-&6|+fPMm=F|v$NiyTsYp$4Q!YvhF zcu0(K{NA;?Y1s+*%)8ClmZmvR%(Y*npc)^|#QwP|#?&Jqg62ksQ@wcJ^ytMQ#k^Tt z&6QAq*x!JzdXgIk@|Uppt5Z@^Z%`D!E>rtLW=ZW^rgYL$a5o+JXHQd#FoU<_Z@S!* z7OG61!p0f~LrBHnCRI&wSwRT>4IDC&(Y)(MhsTb|>_FbE=M4_v}sG)Pt$7jeBB{ikGQ#vPp1lK2!g8INeMeA{Pgq zjnLMXfG9Q>>Ej_Jh!~JB)ob;|ua$i6s!)Z|h}xZ@R+0dUPCIReBqi{OZ`f=HTr|&- zRVlA0peTjggyefku1~FI%A}R_*Bfbezl}^`cx&2alXCSbD7hk; zHmTl4cXrQOq`}hlm+H%J2R_cmbS0h~ODlSH z%3n+xHkcJFIs`=(wM5u4w;vN_jP)7_h6`AMG~|T%yQ<8-)^>XGEF$g#;{|r~#{evm z$+1zWBQ4yUGZ7ra(Nu3bWs;-{VBog>l2@D{v$rZk$|3Ml>bms z&fze-GFJnVHmXz@yScytJk)IN)!c6;>r<9L?>cNctsm6LtQs|6-DF4X%gu2N60TF~ zZD5Z?e1aQJuP=y|h5g_ui~V#Q@u~gy?Z;1Wr%J7}hDZn&al&FP9-GD^eG}~DN!hMz zp6+4X3tuxoE9`+9k%EcA_i&m*+g84kJcFBw-vh{nuZ#tLzx5cre{Gh&PkFrQ*~kqg z33sO@?ia&6MwJBpF2a@_7(gz7`xK@8u><>i7x$8pQpHI;+gdiS8^}+uzVxHYHdO@ zEv;6E#53FP@dH2A>apWgQr?o!o7r3rXSlZ4)=GnCyXXU&-u;g5)zPqgeW~w8BOKgg zM$|T)lgYiWKR;id&uToOzpAGx%&J!3SV=6-r!s@QjTj)E`Wu?Jfya4br;!C8yV#Iv zeiBdcpeUy)0*WKCXLcZG@Qmu{qmH5epY;#(MC(_pd?FlUR=VP?mVzk+l|S~#7C7>y ziOVI%F+g8cgv>3mKjIZJ8Y}JzFI#EX<+QN2Ks4iCx4`?5 z-x!rNfPNLI#0{~Y?=2H%xf;ta3Qv6buT`(W1b7v3{B1>%fpNCWKYcqBw{^^(wk(|7 zZQBC;M@SXaF`n51D1foWx%vbuI$LV1-J@(4hkNt8%OSkSB{>Y|@W~aiy)$H+dh&sI zC-Yh77lziofM!}rR9vf_u1#KauDPd85QNSgm=={NArGzip{n{YXc1+0_krX*zo-h= zl1(|kb!|u@cJXX)(dF3&E{E=)fT{?NM+VSS+jye-JkyCSzlK`ay33CtfVj~Pn@=}$ zxLvowi}=dlo)HqV3Ha|<6N4F}J$!X+&5{<7XL2Hs{MOIroLVyWwS%s&uyK{&I(}88 zpQgoJp>zrza?bu@NSAhCPNz(*XwyX2GAC1cEb-k@5H&4)Sv8TZm(Jh*EXwFFRaM{P zg%-;+j=4ozXsBJx6ZeACsZ)lRig{s^%M=a^o^@&M}ulSbAOv4{D6$V zkv@+W))R!bj;L8bbEg}Qm`cY+(8di4cs4d3Bs60xG`GnMMx;>XYh4o@FjhJ(u`)pa zbv-uA6+dFWELS<`viKQ#c&tLknNP7MF4ANju(q@5`%K*vmu{knoXaG-Ao<_dlE=6e zNKat}LLZu>wTN3PdvAdx$N|alVOIc$IvrLevhUMAG&vQs^OYjknk#N!6AjSiFC%rN zXIM}Bsm5&In>zqj!b$Z#?8B6ong;z)&S89ge6i9knvkiInmOx% zP~-hca%?fO)jdS#b2x*;R?MQ&{MPF2GzQ1Uh_eJ!{6nnEBb)~4Tsv)&w7N9{Pe#^J!`wGDXiT5QhXoWN&objccUN?M^9_h?v@EY_SQx>fElyx$Ioo7 zwQfUye)iW&lQ-ggjbbudN;%r+D{0Td9Zb*9vtci#hq4JNj#jpd<=cqO4< zVXK6~Q0>K?@C8~LZnvKPVy&E*69t>9UA5p3r#LsWp<})(oJ#=pOnFj#W>vxaNZ8Zw z-|47Jov{A$TEsbmGPmyHSTsXE=Hk(D6F-Zs7EJ5l0?R)~j)p$p`W-1#;=_0&y;-_> zp}g>kR&=C0&ZND_F8mnOZMNcLSn)DMSNiGfUIl6VGF>;Sb1E|w{Z850#*ln1`fICRcHNYiQwxE+V#_sMX)R*Mr~7<}QOry%ZIqu;%#>YR zwm-9mt$6np>&LHm&naeNAr0d5mDYBL+5I(67I%luwI zT(^_ymITq)$c7j!c1`aTf~8b%8B-;{*X4jqw#+uerb`&F5ExGrZr; zGo6kHBd9lhfjDjDIjzeF%dnqSPmnb0g$&&F^VES5uvVylHI8xUD9?0PiG zpILgEoH?ygqOil+#`0DiCA}HwGZFYihx*}d6?gQbKO~vTH8oUO4ex1UVBQ503%Rp zyU{4MmiBFylrrpo8q@LMGHmva?a*EK&h1W>2-&sH!pDw!ZKTWYO1grz503dBk!cxoz9j`u5^NYOSkKEX zXV8C$uD8Sf`Rj##?s}-FAK2qzn5-$3=Na?NMTpc#hneVRR9oK9mqeM&`1k@n&zVa$ ze3a!{3HGqIyL4>Cjts_xi?m&Tpmqp$?Qzel>KA0&PN^_xv8`gR>4cn)2=LO33!yeh zgECt4Xp{rHKZZviJ{|(tcSvhq`!fK!*~A5#V0J#uPF;$!Bcfu)18F**TX zGDxj|a(60f%4psl%8L%|XR~D?%VD9^M$Kj+US4Y} z;;*Vy&Uz!&uSA{X!$R>|I@{hK?t2MtaYuV4PyF;$E<~+w;(AH17Q}VRS?ErR*nXFLL4?oF7W|W#HQ4E4Zn}xcTeT~fu$&GH z`yu#maemwlH84KMg@^UXL#cOfJd*YajEKb?+%~6T1z&ZJA|yTgF{409MM4e5O{&^} zaZtrlmy&w+x1u;-_h9Qeo(EDGn{ShhB&X$)pt^nG9F4zprIVVQ`||xh0^O#9eJ|Gh z_8+Qay6G!1*rTv*U)4fwKe!SaY*7@FNHhdvj7>%Bi0lN;%X`;GsS$avyH$k+dhU52;0 zsEW%VfsgWN#>g?}Ziwg4lat~Jao+@7b}nxRZd3z&S`WO*F{I-VBcCF{ft|5OaOFe} zpK*l_a(HZvtiCkaNe@;$UwQl2CP#U&4{6rs^>+&OvUL3CyX;6WHC7o^_*D1vkTWfg zqEd?bKfvPljA))eiRjN)@bCAq8Vo=J`1i}+FobXKA0NrB-#mW~U;3|9M4mRpE+F5D z|BOs}SYR=`k??v$2e@CuNdf+iH@+S182yzv!aQ0Qo!Fm&asr71wf4-31W7Y>L|4(E zwQHUn_tWk<335t57=g(q9g*Lm;u@* zYMXL*t$%`-zyFw)bQBlAh+W_y%l1n7Uw)=5~S*6pOn9nAQYVQ_%w!t}DLDB7YfY?t{ed@msl@Tv8AADf^VI_l?g02#THVfd93l>2Busk6junXprQ8Fwy{S0H-#9$q;aFp%J=B=Ko!!_g_U^9K1k2ZodD) ztMQMZ|9J2}#}^m>4@JiY?CAt?aRYEl{bL*tfCp`ypuoLxTt@c_psfMBLfl=t_gMn7@%DwBX_SLn&Jd@akKdk0%DGK&cECSF~661?-q2l{?~tiU|4+rx8H5)7 zZ{7Y;%LpA6nSa@(=3)VM`JbhnYI1S_gL_Ay*MG@Zg;=1oL)#UsCjBphim5lm9qmC) z8%Ha9@VyHEO<95eQWl*m=md9zxB!?W-Q6J4k}`$>Rj|3WsiTd#sl6e9hl`un5WsE- z(6n)IvbV9c0b3XXq^)fn!LH!{lo~Q|3vqC{8UhTNR8%z$0a|E&LuNx}W^_Pp-0aa+ z<6b>`^e)mQMB%H*RhYYYQ7gba*+qIDkM7E;Q&Lg=`>>GWY4qBqNMg zfsc!q2gt+4gHCZY04?qRQTE?#^l|}PVsilmvAO=g1;7sk@&W;tfPZM*{Cr$MbX4va zfa8DBgarR@+I=}UI`a3+f5QQJ|2Ho;Q0RZ-gwQelAG`wm|4p8oi>Zx0*yZ2#&&CG~ u5WKIf5I4YmPN8eLqN61Qa38XN^3~PN)Wz)| Date: Mon, 16 Mar 2020 16:39:42 -0400 Subject: [PATCH 135/171] docs --- firmware/config/engines/mazda_miata_vvt.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index acfd5185b5..4819ccf96e 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -1,6 +1,8 @@ /* * @file mazda_miata_vvt.cpp * + * Miata NB2, also known as MX-5 Mk2.5 + * * MAZDA_MIATA_2003 * set engine_type 47 * From 49d5c6497f7c958b7f38e2c7f14064b4a42920b9 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Mon, 16 Mar 2020 17:13:27 -0400 Subject: [PATCH 136/171] RemindMe! add 16 cylinder firing order on April 1st --- firmware/controllers/algo/firing_order.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/firmware/controllers/algo/firing_order.h b/firmware/controllers/algo/firing_order.h index caa71c0a7b..5441f5abb4 100644 --- a/firmware/controllers/algo/firing_order.h +++ b/firmware/controllers/algo/firing_order.h @@ -49,6 +49,9 @@ typedef enum { FO_1_7_4_10_2_8_6_12_3_9_5_11 = 16, // lamborghini, typical rusEfi use-case FO_1_12_5_8_3_10_6_7_2_11_4_9 = 18, // VAG W12 + // 16 cylinder + // todo: 1-14-9-4-7-12-15-6-13-8-3-16-11-2-5-10 + // max used = 19 Force_4b_firing_order = ENUM_32_BITS, From a371b32073fac0149aa812ead5f4bc2f78198c19 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 17 Mar 2020 10:20:29 -0400 Subject: [PATCH 137/171] cj125 usability --- .../algo/engine_configuration_generated_structures.h | 8 +++++--- .../generated/engine_configuration_generated_structures.h | 8 +++++--- firmware/integration/rusefi_config.txt | 4 ++-- firmware/tunerstudio/rusefi.ini | 4 +++- firmware/tunerstudio/rusefi_frankenso.ini | 4 +++- firmware/tunerstudio/rusefi_kinetis.ini | 4 +++- firmware/tunerstudio/rusefi_microrusefi.ini | 4 +++- firmware/tunerstudio/rusefi_prometheus.ini | 4 +++- firmware/tunerstudio/rusefi_proteus.ini | 4 +++- 9 files changed, 30 insertions(+), 14 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index f383827793..9215594d7b 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Mar 14 09:14:27 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 10:18:26 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -580,6 +580,7 @@ struct engine_configuration_s { offset 76 bit 9 */ bool useBiQuadAnalogFiltering : 1; /** + * Is your UA CJ125 output wired to MCU via resistor divider? offset 76 bit 10 */ bool cj125isUaDivided : 1; /** @@ -595,7 +596,8 @@ struct engine_configuration_s { offset 76 bit 14 */ bool showSdCardWarning : 1; /** - * looks like 3v range should be enough, divider not needed + * Is your UR CJ125 output wired to MCU via resistor divider? + * Looks like 3v range should be enough, divider generally not needed. offset 76 bit 15 */ bool cj125isUrDivided : 1; /** @@ -3228,4 +3230,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Mar 14 09:14:27 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 10:18:26 EDT 2020 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index cd6ff908dd..8cef6468ef 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:04 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:11 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -580,6 +580,7 @@ struct engine_configuration_s { offset 76 bit 9 */ bool useBiQuadAnalogFiltering : 1; /** + * Is your UA CJ125 output wired to MCU via resistor divider? offset 76 bit 10 */ bool cj125isUaDivided : 1; /** @@ -595,7 +596,8 @@ struct engine_configuration_s { offset 76 bit 14 */ bool showSdCardWarning : 1; /** - * looks like 3v range should be enough, divider not needed + * Is your UR CJ125 output wired to MCU via resistor divider? + * Looks like 3v range should be enough, divider generally not needed. offset 76 bit 15 */ bool cj125isUrDivided : 1; /** @@ -3228,4 +3230,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:04 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:11 EDT 2020 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index d9342223a5..22e0d8f324 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -331,12 +331,12 @@ bit isVerboseAuxPid3; bit activateAuxPid4; bit isVerboseAuxPid4; bit useBiQuadAnalogFiltering; -bit cj125isUaDivided; +bit cj125isUaDivided;+Is your UA CJ125 output wired to MCU via resistor divider? bit cj125isLsu49; bit etb_use_two_wires; bit isDoubleSolenoidIdle; bit showSdCardWarning; -bit cj125isUrDivided;looks like 3v range should be enough, divider not needed +bit cj125isUrDivided;+Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed. bit useTLE8888_hall_mode; bit useTLE8888_cranking_hack; bit useInstantRpmForIdle; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index f5d5bb9f4c..d896550a59 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:04 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:11 EDT 2020 pageSize = 20000 page = 1 @@ -1090,6 +1090,8 @@ page = 1 [SettingContextHelp] injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" directSelfStimulation = "Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?\nSee also triggerSimulatorPins\nPS: Funny name, right? :)" + cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider?" + cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." absoluteFuelPressure = "If your fuel regulator does not have vacuum line" tpsErrorDetectionTooLow = "TPS error detection, what TPS % value is unrealistically low" tpsErrorDetectionTooHigh = "TPS error detection, what TPS % value is unrealistically high" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index c7930011b2..b186bb1a0c 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:14 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:18 EDT 2020 pageSize = 20000 page = 1 @@ -1090,6 +1090,8 @@ page = 1 [SettingContextHelp] injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" directSelfStimulation = "Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?\nSee also triggerSimulatorPins\nPS: Funny name, right? :)" + cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider?" + cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." absoluteFuelPressure = "If your fuel regulator does not have vacuum line" tpsErrorDetectionTooLow = "TPS error detection, what TPS % value is unrealistically low" tpsErrorDetectionTooHigh = "TPS error detection, what TPS % value is unrealistically high" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 86983f67f3..4faed0b7a3 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sat Mar 14 09:14:27 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 10:18:26 EDT 2020 pageSize = 20000 page = 1 @@ -1090,6 +1090,8 @@ page = 1 [SettingContextHelp] injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" directSelfStimulation = "Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?\nSee also triggerSimulatorPins\nPS: Funny name, right? :)" + cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider?" + cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." absoluteFuelPressure = "If your fuel regulator does not have vacuum line" tpsErrorDetectionTooLow = "TPS error detection, what TPS % value is unrealistically low" tpsErrorDetectionTooHigh = "TPS error detection, what TPS % value is unrealistically high" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 39c9a4fe6b..f1bd8b8a82 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:09 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:15 EDT 2020 pageSize = 20000 page = 1 @@ -1090,6 +1090,8 @@ page = 1 [SettingContextHelp] injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" directSelfStimulation = "Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?\nSee also triggerSimulatorPins\nPS: Funny name, right? :)" + cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider?" + cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." absoluteFuelPressure = "If your fuel regulator does not have vacuum line" tpsErrorDetectionTooLow = "TPS error detection, what TPS % value is unrealistically low" tpsErrorDetectionTooHigh = "TPS error detection, what TPS % value is unrealistically high" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index a284933d8d..3b52180ce9 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:19 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:21 EDT 2020 pageSize = 20000 page = 1 @@ -1090,6 +1090,8 @@ page = 1 [SettingContextHelp] injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" directSelfStimulation = "Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?\nSee also triggerSimulatorPins\nPS: Funny name, right? :)" + cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider?" + cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." absoluteFuelPressure = "If your fuel regulator does not have vacuum line" tpsErrorDetectionTooLow = "TPS error detection, what TPS % value is unrealistically low" tpsErrorDetectionTooHigh = "TPS error detection, what TPS % value is unrealistically high" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index f5a8a18c1f..dc803e0e38 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:23 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:23 EDT 2020 pageSize = 20000 page = 1 @@ -1090,6 +1090,8 @@ page = 1 [SettingContextHelp] injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" directSelfStimulation = "Should trigger emulator push data right into trigger handling logic, eliminating the need for physical jumper wires?\nSee also triggerSimulatorPins\nPS: Funny name, right? :)" + cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider?" + cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." absoluteFuelPressure = "If your fuel regulator does not have vacuum line" tpsErrorDetectionTooLow = "TPS error detection, what TPS % value is unrealistically low" tpsErrorDetectionTooHigh = "TPS error detection, what TPS % value is unrealistically high" From 003c8e60a1d4ea7dd8f8ce2c8d94fbb88c81f6ef Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 17 Mar 2020 10:21:33 -0400 Subject: [PATCH 138/171] progress --- hardware/Common_Rail_MC33816/gerbers/kicadBom2jlcpcb.bat | 7 +++++-- hardware/Common_Rail_MC33816/gerbers/kicadPos2jlcpcb.bat | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/hardware/Common_Rail_MC33816/gerbers/kicadBom2jlcpcb.bat b/hardware/Common_Rail_MC33816/gerbers/kicadBom2jlcpcb.bat index 278436105c..e05d01ce56 100644 --- a/hardware/Common_Rail_MC33816/gerbers/kicadBom2jlcpcb.bat +++ b/hardware/Common_Rail_MC33816/gerbers/kicadBom2jlcpcb.bat @@ -3,13 +3,16 @@ set inputFile=../Common_Rail_MC33816.csv set outputFile=MC33816_R0.3-bom.csv +if not exist %inputFile% echo Not found %inputFile% +if not exist %inputFile% exit -1 echo "Translating from %inputFile% to %outputFile%" - echo Comment,Designator,Footprint,LCSC Part #> %outputFile% - + grep JLCPCB %inputFile% > %outputFile%.temp sed -f removedoublecomma.sed %outputFile%.temp | gawk -F "," '{print $3 "," $1 "," $4 "," $10}' >> %outputFile% + +rm -f %outputFile%.temp diff --git a/hardware/Common_Rail_MC33816/gerbers/kicadPos2jlcpcb.bat b/hardware/Common_Rail_MC33816/gerbers/kicadPos2jlcpcb.bat index 403db50f61..147c8b75c2 100644 --- a/hardware/Common_Rail_MC33816/gerbers/kicadPos2jlcpcb.bat +++ b/hardware/Common_Rail_MC33816/gerbers/kicadPos2jlcpcb.bat @@ -5,8 +5,10 @@ rem set inputFile=Common_Rail_MC33816-bottom.pos set outputFile=MC33816_R0.3-cpl.csv -echo "Translating from %inputFile% to %outputFile%" +if not exist %inputFile% echo Not found %inputFile% +if not exist %inputFile% exit -1 +echo "Translating from %inputFile% to %outputFile%" grep -v Package %inputFile% | grep -v # | gawk '{ sub(/\..*/,"", $6); print $1 "," $4 "mm," $5 "mm,Bottom," $6}' > %outputFile%.temp sed -f ../../tools/unquote.sed %outputFile%.temp > %outputFile%.all @@ -15,4 +17,4 @@ echo Designator,Mid X,Mid Y,Layer,Rotation> %outputFile% grep -v "L\|D" %outputFile%.all >> %outputFile% - +rm -f %outputFile%.temp \ No newline at end of file From 2dfc039eb99e55187442926b4b5642400f1a5230 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 17 Mar 2020 13:40:14 -0400 Subject: [PATCH 139/171] docs --- .../algo/engine_configuration_generated_structures.h | 5 +++-- .../generated/engine_configuration_generated_structures.h | 5 +++-- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 3 ++- firmware/tunerstudio/rusefi_frankenso.ini | 3 ++- firmware/tunerstudio/rusefi_kinetis.ini | 3 ++- firmware/tunerstudio/rusefi_microrusefi.ini | 3 ++- firmware/tunerstudio/rusefi_prometheus.ini | 3 ++- firmware/tunerstudio/rusefi_proteus.ini | 3 ++- 9 files changed, 19 insertions(+), 11 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 9215594d7b..b86d61a8fc 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 10:18:26 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 13:38:12 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -2564,6 +2564,7 @@ struct engine_configuration_s { */ pin_mode_e spi1SckMode; /** + * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc. * offset 2597 */ pin_mode_e spi1MosiMode; @@ -3230,4 +3231,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 10:18:26 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 13:38:12 EDT 2020 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 8cef6468ef..9b0ace8c2f 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:11 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:37:57 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -2564,6 +2564,7 @@ struct engine_configuration_s { */ pin_mode_e spi1SckMode; /** + * Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc. * offset 2597 */ pin_mode_e spi1MosiMode; @@ -3230,4 +3231,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:11 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:37:57 EDT 2020 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 22e0d8f324..7ecf6ec1d0 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -1071,7 +1071,7 @@ float[MAP_ACCEL_TAPER] mapAccelTaperMult;;"mult", 1, 0, 0.0, 300, uint8_t[3] unusedSpiPadding4; pin_mode_e spi1SckMode; - pin_mode_e spi1MosiMode; + pin_mode_e spi1MosiMode;+Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc. pin_mode_e spi1MisoMode; pin_mode_e spi2SckMode; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index d896550a59..62904f7734 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:11 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:37:57 EDT 2020 pageSize = 20000 page = 1 @@ -1198,6 +1198,7 @@ page = 1 crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" + spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index b186bb1a0c..ec0372ac21 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:18 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:38:03 EDT 2020 pageSize = 20000 page = 1 @@ -1198,6 +1198,7 @@ page = 1 crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" + spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 4faed0b7a3..895cd3e224 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 10:18:26 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 13:38:12 EDT 2020 pageSize = 20000 page = 1 @@ -1198,6 +1198,7 @@ page = 1 crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" + spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index f1bd8b8a82..761e2ccbb6 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:15 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:38:00 EDT 2020 pageSize = 20000 page = 1 @@ -1198,6 +1198,7 @@ page = 1 crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" + spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 3b52180ce9..12c0fb89f0 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:21 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:38:06 EDT 2020 pageSize = 20000 page = 1 @@ -1198,6 +1198,7 @@ page = 1 crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" + spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index dc803e0e38..eb689b3ee6 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 10:18:23 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:38:09 EDT 2020 pageSize = 20000 page = 1 @@ -1198,6 +1198,7 @@ page = 1 crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" + spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" From 5a6d10c21f85698bbbfbefe886d7adf41e419c22 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 17 Mar 2020 15:50:42 -0400 Subject: [PATCH 140/171] hiding SPI from MRE users --- .../boards/kinetis/config/controllers/algo/rusefi_generated.h | 1 + firmware/config/boards/microrusefi/prepend.txt | 1 + firmware/controllers/generated/rusefi_generated.h | 1 + firmware/integration/rusefi_config.txt | 1 + firmware/tunerstudio/rusefi.input | 2 +- firmware/tunerstudio/rusefi_microrusefi.ini | 3 +-- 6 files changed, 6 insertions(+), 3 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index d89f3b95d3..822b103402 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -2044,6 +2044,7 @@ #define ts_show_hip9011 true #define ts_show_joystick true #define ts_show_lcd true +#define ts_show_spi true #define TS_SIGNATURE "rusEFI v1.2020.3" #define tunerStudioSerialSpeed_offset 728 #define tunerStudioSerialSpeed_offset_hex 2d8 diff --git a/firmware/config/boards/microrusefi/prepend.txt b/firmware/config/boards/microrusefi/prepend.txt index c5f12627e7..37dfd008a3 100644 --- a/firmware/config/boards/microrusefi/prepend.txt +++ b/firmware/config/boards/microrusefi/prepend.txt @@ -7,3 +7,4 @@ #define ts_show_gps false #define ts_show_etb_pins false #define ts_show_analog_divider false +#define ts_show_spi false diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index d1b1375170..b5a08cd53a 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -2044,6 +2044,7 @@ #define ts_show_hip9011 true #define ts_show_joystick true #define ts_show_lcd true +#define ts_show_spi true #define TS_SIGNATURE "rusEFI v1.2020.3" #define tunerStudioSerialSpeed_offset 728 #define tunerStudioSerialSpeed_offset_hex 2d8 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 7ecf6ec1d0..3019fadbc0 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -1455,3 +1455,4 @@ end_struct #define ts_show_egt true #define ts_show_gps true #define ts_show_analog_divider true +#define ts_show_spi true \ No newline at end of file diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index a5622ea191..a1a06a3156 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1313,7 +1313,7 @@ menuDialog = main subMenu = lcdScreen, "LCD" @@if_ts_show_lcd subMenu = joystickPanel, "Joystick" @@if_ts_show_joystick - subMenu = spiFunction, "SPI" + subMenu = spiFunction, "SPI"@@if_ts_show_spi subMenu = monitoringSettings, "rusEfi console" subMenu = std_separator diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 761e2ccbb6..5601a69daa 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:38:00 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:53:13 EDT 2020 pageSize = 20000 page = 1 @@ -2439,7 +2439,6 @@ menuDialog = main subMenu = engineTypeDialog, "Popular vehicles" subMenu = std_separator - subMenu = spiFunction, "SPI" subMenu = monitoringSettings, "rusEfi console" subMenu = std_separator From d558b1372e3860b7dc7beb4e637f1b4634dc949a Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 18 Mar 2020 00:12:31 -0400 Subject: [PATCH 141/171] v12 & ETB progress --- .../config/boards/microrusefi/mapping.yaml | 6 ++-- firmware/config/engines/bmw_m73.cpp | 2 ++ firmware/config/engines/bmw_m73_mre.cpp | 25 ++++++++++++++ firmware/controllers/engine_controller.cpp | 2 +- java_console/ui/src/com/rusefi/Launcher.java | 2 +- .../rusefi/ui/engine/EngineSnifferPanel.java | 2 +- .../com/rusefi/ui/etb/EtbCommandsPanel.java | 33 +++++++++++++------ 7 files changed, 56 insertions(+), 16 deletions(-) diff --git a/firmware/config/boards/microrusefi/mapping.yaml b/firmware/config/boards/microrusefi/mapping.yaml index e156c7587b..cfc69e8032 100644 --- a/firmware/config/boards/microrusefi/mapping.yaml +++ b/firmware/config/boards/microrusefi/mapping.yaml @@ -52,7 +52,7 @@ analog_inputs: EFI_ADC_3: "22 - AN temp 4" # PA4 EFI_ADC_4: "28 - AN volt 10" - # PA6 + # PA6 pull-down R31 EFI_ADC_6: "26 - AN volt 2" # PA7 EFI_ADC_7: "31 - AN volt 3" @@ -64,9 +64,9 @@ analog_inputs: EFI_ADC_10: "27 - AN volt 1" # PC1 EFI_ADC_11: "Battery Sense" - # PC2 + # PC2 pull-down R131 EFI_ADC_12: "19 - AN volt 4" - # PC3 + # PC3 TPS pull-down R41 EFI_ADC_13: "20 - AN volt 5" # PC4 EFI_ADC_14: "32 - AN volt 6" diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index d438791d2e..d85b3a990e 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -4,6 +4,8 @@ * https://github.com/rusefi/rusefi_documentation/wiki/BMW_e38_750 * * https://rusefi.com/wiki/index.php?title=Hardware:OEM_connectors#134_pin + * https://github.com/rusefi/rusefi_documentation/wiki/HOWTO_electronic_throttle_body + * Ignition module https://rusefi.com/forum/viewtopic.php?f=4&t=286 * * 1/2 plugs black * 2/2 plugs grey diff --git a/firmware/config/engines/bmw_m73_mre.cpp b/firmware/config/engines/bmw_m73_mre.cpp index 4b0aa4e6db..327a9d1194 100644 --- a/firmware/config/engines/bmw_m73_mre.cpp +++ b/firmware/config/engines/bmw_m73_mre.cpp @@ -4,6 +4,8 @@ * https://github.com/rusefi/rusefi_documentation/wiki/BMW_e38_750 * * https://rusefi.com/wiki/index.php?title=Hardware:OEM_connectors#134_pin + * https://github.com/rusefi/rusefi_documentation/wiki/HOWTO_electronic_throttle_body + * Ignition module https://rusefi.com/forum/viewtopic.php?f=4&t=286 * * 1/2 plugs black * 2/2 plugs grey @@ -23,6 +25,11 @@ * * * Plug #3 52 pin + * ECU pin 2: OUT ORG injector #4 + * ECU pin 6: GND ECU + * ECU pin 15: OUT ORG injector #2 + * ECU pin 27: OUT GRN injector #6 + * ECU pin 28: OUT BLU injector #5 * ECU pin 32: IN WHT VR positive crankshaft sensor * ECU pin 40: OUT BRN/BLK GRN injector #3 * ECU pin 41: OUT BRN/WHT BLU injector #1 @@ -55,5 +62,23 @@ void setEngineBMW_M73_microRusEfi(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->injectionMode = IM_BATCH; + // set_analog_input_pin pps PA7 + // EFI_ADC_7: "31 - AN volt 3" - PA7 + CONFIG(throttlePedalPositionAdcChannel) = EFI_ADC_7; + + // enable ETB + // set_rpn_expression 8 "0" + setFsio(7, GPIOC_8, "0" PASS_CONFIG_PARAMETER_SUFFIX); + + + CONFIG(debugMode) = DBG_ELECTRONIC_THROTTLE_PID; + engineConfiguration->etb.pFactor = 2.00; + engineConfiguration->etb.iFactor = 0.35; + + + //set tps_min 891 + CONFIG(tpsMin) = 891; + //set tps_max 177 + CONFIG(tpsMax) = 177; } diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index ff12cb10eb..eec6b622bd 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200311; + return 201200317; } #endif /* EFI_UNIT_TEST */ diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 5ac89a5255..fc7575f9f2 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -49,7 +49,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20200311; + public static final int CONSOLE_VERSION = 20200317; public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); diff --git a/java_console/ui/src/com/rusefi/ui/engine/EngineSnifferPanel.java b/java_console/ui/src/com/rusefi/ui/engine/EngineSnifferPanel.java index 1d697894d6..ee1cceea6c 100644 --- a/java_console/ui/src/com/rusefi/ui/engine/EngineSnifferPanel.java +++ b/java_console/ui/src/com/rusefi/ui/engine/EngineSnifferPanel.java @@ -134,7 +134,7 @@ public class EngineSnifferPanel { if (!LinkManager.isLogViewer()) { JPanel lowerButtons = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0)); - lowerButtons.add(new ConfigField(Fields.GLOBALTRIGGERANGLEOFFSET, "Triger Offset").getContent()); + lowerButtons.add(new ConfigField(Fields.GLOBALTRIGGERANGLEOFFSET, "Trigger Offset").getContent()); lowerButtons.add(new BitConfigField(Fields.VERBOSETRIGGERSYNCHDETAILS, "Verbose trigger Sync").getContent()); lowerButtons.add(new BitConfigField(Fields.ISENGINECHARTENABLED, "Collect Engine Data").getContent()); lowerButtons.add(new ConfigField(Fields.SENSORCHARTFREQUENCY, "Frequency").getContent()); diff --git a/java_console/ui/src/com/rusefi/ui/etb/EtbCommandsPanel.java b/java_console/ui/src/com/rusefi/ui/etb/EtbCommandsPanel.java index 540ba65742..9b8ce34ccc 100644 --- a/java_console/ui/src/com/rusefi/ui/etb/EtbCommandsPanel.java +++ b/java_console/ui/src/com/rusefi/ui/etb/EtbCommandsPanel.java @@ -5,11 +5,13 @@ import com.rusefi.core.Sensor; import com.rusefi.ldmp.generated.ElectronicThrottleMeta; import com.rusefi.ui.config.BitConfigField; import com.rusefi.ui.config.ConfigField; +import com.rusefi.ui.config.EnumConfigField; import com.rusefi.ui.livedocs.LiveDocPanel; import com.rusefi.ui.storage.Node; import com.rusefi.ui.util.UiUtils; import com.rusefi.ui.widgets.AnyCommand; import com.rusefi.ui.widgets.DetachedSensor; +import org.jetbrains.annotations.NotNull; import org.putgemin.VerticalFlowLayout; import javax.swing.*; @@ -25,12 +27,6 @@ public class EtbCommandsPanel { public EtbCommandsPanel() { content.add(new DirectDrivePanel().getContent()); - JPanel spotsPane = new JPanel(new VerticalFlowLayout()); - spotsPane.setBorder(BorderFactory.createTitledBorder("Magic Spots")); - MagicSpotsFinder magicSpotsFinder = new MagicSpotsFinder(); - spotsPane.add(UiUtils.wrap(magicSpotsFinder.getButton())); - spotsPane.add(magicSpotsFinder.getPoints()); - JPanel testParameters = new JPanel(new VerticalFlowLayout()); testParameters.setBorder(BorderFactory.createTitledBorder("Try PID settings")); EtbTestSequence etbTestSequence = new EtbTestSequence(); @@ -53,16 +49,33 @@ public class EtbCommandsPanel { content.setBorder(BorderFactory.createTitledBorder("Commands")); content.add(testParameters); - content.add(spotsPane); - content.add(UiUtils.wrap(new EtbMonteCarloSequence().getButton())); - content.add(UiUtils.wrap(new EtbReturnToNeutral().getContent())); content.add(AnyCommand.createArea(new Node(), CMD_ETB_DUTY + " " + "10", false, false).getContent()); + JPanel mockPpsPanel = new JPanel(new VerticalFlowLayout()); + mockPpsPanel.setBorder(BorderFactory.createTitledBorder("Mock PPS")); + mockPpsPanel.add(DetachedSensor.createMockVoltageSlider(Sensor.PPS)); - content.add(DetachedSensor.createMockVoltageSlider(Sensor.PPS)); + + content.add(mockPpsPanel); content.add(LiveDocPanel.createPanel("ETB", ElectronicThrottleMeta.CONTENT)); + + content.add(new EnumConfigField(Fields.DEBUGMODE, "Debug Mode").getContent()); + + content.add(createMagicSpotsPanel()); + content.add(UiUtils.wrap(new EtbMonteCarloSequence().getButton())); + content.add(UiUtils.wrap(new EtbReturnToNeutral().getContent())); + } + + @NotNull + private JPanel createMagicSpotsPanel() { + JPanel spotsPane = new JPanel(new VerticalFlowLayout()); + spotsPane.setBorder(BorderFactory.createTitledBorder("Magic Spots")); + MagicSpotsFinder magicSpotsFinder = new MagicSpotsFinder(); + spotsPane.add(UiUtils.wrap(magicSpotsFinder.getButton())); + spotsPane.add(magicSpotsFinder.getPoints()); + return spotsPane; } public JComponent getContent() { From 2c7ee709c8471d3e6638513099d06cb4443ebf25 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 18 Mar 2020 00:24:10 -0400 Subject: [PATCH 142/171] v12 & ETB progress --- firmware/config/engines/bmw_m73_mre.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/config/engines/bmw_m73_mre.cpp b/firmware/config/engines/bmw_m73_mre.cpp index 327a9d1194..663eb798c4 100644 --- a/firmware/config/engines/bmw_m73_mre.cpp +++ b/firmware/config/engines/bmw_m73_mre.cpp @@ -46,6 +46,7 @@ */ #include "bmw_m73.h" +#include "fsio_impl.h" EXTERN_CONFIG; From 53b43776b818763d088499445126ac12406e8a74 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 18 Mar 2020 09:32:46 -0400 Subject: [PATCH 143/171] proteus-f4 was requested --- firmware/config/boards/proteus/!compile-proteus-f4.bat | 8 ++++++++ .../{!compile-proteus.bat => !compile-proteus-f7.bat} | 0 misc/jenkins/compile_other_versions/run.bat | 7 ++++++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 firmware/config/boards/proteus/!compile-proteus-f4.bat rename firmware/config/boards/proteus/{!compile-proteus.bat => !compile-proteus-f7.bat} (100%) diff --git a/firmware/config/boards/proteus/!compile-proteus-f4.bat b/firmware/config/boards/proteus/!compile-proteus-f4.bat new file mode 100644 index 0000000000..913930b300 --- /dev/null +++ b/firmware/config/boards/proteus/!compile-proteus-f4.bat @@ -0,0 +1,8 @@ + +cd ../../.. + +set PROJECT_BOARD=proteus +set PROJECT_CPU=ARCH_STM32F4 + +call config/boards/common_make.bat + diff --git a/firmware/config/boards/proteus/!compile-proteus.bat b/firmware/config/boards/proteus/!compile-proteus-f7.bat similarity index 100% rename from firmware/config/boards/proteus/!compile-proteus.bat rename to firmware/config/boards/proteus/!compile-proteus-f7.bat diff --git a/misc/jenkins/compile_other_versions/run.bat b/misc/jenkins/compile_other_versions/run.bat index 7c035b2c7f..b1859e3504 100644 --- a/misc/jenkins/compile_other_versions/run.bat +++ b/misc/jenkins/compile_other_versions/run.bat @@ -23,7 +23,12 @@ set f7_console_setting=firmware\config\boards\nucleo_f767\rusefi_console_propert rem folter_name configuration_name [optional .ini file name] -call misc\jenkins\compile_other_versions\compile_and_upload.bat proteus proteus rusefi_proteus.ini +call misc\jenkins\compile_other_versions\compile_and_upload.bat proteus proteus-f4 rusefi_proteus.ini +IF NOT ERRORLEVEL 0 echo ERROR invoking compile_and_upload.bat +IF NOT ERRORLEVEL 0 EXIT /B 1 +pwd + +call misc\jenkins\compile_other_versions\compile_and_upload.bat proteus proteus-f7 rusefi_proteus.ini IF NOT ERRORLEVEL 0 echo ERROR invoking compile_and_upload.bat IF NOT ERRORLEVEL 0 EXIT /B 1 pwd From 76eedf1e2c010d408e0386431d6529ae9a10e24f Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 18 Mar 2020 10:19:17 -0400 Subject: [PATCH 144/171] proteus-f4 was requested --- firmware/config/boards/proteus/board.mk | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/firmware/config/boards/proteus/board.mk b/firmware/config/boards/proteus/board.mk index fd22b21c7e..279b78c4a4 100644 --- a/firmware/config/boards/proteus/board.mk +++ b/firmware/config/boards/proteus/board.mk @@ -3,10 +3,24 @@ BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO144_F767ZI/board.c BOARDSRC_CPP = $(PROJECT_DIR)/config/boards/proteus/board_configuration.cpp \ $(PROJECT_DIR)/config/boards/proteus/adc_hack.cpp -# Required include directories -BOARDINC = $(PROJECT_DIR)/config/boards/nucleo_f767 $(PROJECT_DIR)/config/stm32f7ems +# Target processor details +ifeq ($(PROJECT_CPU),ARCH_STM32F4) + MCU_DEFS = -DSTM32F407xx + BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_STM32F4_DISCOVERY/board.c + BOARDINC = $(BOARDS_DIR)/microrusefi + BOARDINC += $(PROJECT_DIR)/config/stm32f4ems # For board.h + BOARDINC += $(BOARDS_DIR)/st_stm32f4 + LDSCRIPT= $(BOARDS_DIR)/prometheus/STM32F405xG.ld +else + MCU_DEFS = -DSTM32F767xx + BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO144_F767ZI/board.c + BOARDINC = $(BOARDS_DIR)/nucleo_f767 # For board.h + BOARDINC += $(PROJECT_DIR)/config/stm32f7ems # efifeatures/halconf/chconf.h + LDSCRIPT= $(BOARDS_DIR)/nucleo_f767/STM32F76xxI.ld +endif + + -LDSCRIPT= $(PROJECT_DIR)/config/boards/nucleo_f767/STM32F76xxI.ld # Override DEFAULT_ENGINE_TYPE DDEFS += -DSTM32F767xx -DEFI_USE_OSC=TRUE -DEFI_FATAL_ERROR_PIN=GPIOE_3 -DFIRMWARE_ID=\"proteus\" -DDEFAULT_ENGINE_TYPE=PROTEUS -DUSE_ADC3_VBATT_HACK -DSTM32_ADC_USE_ADC3=TRUE -DEFI_INCLUDE_ENGINE_PRESETS=FALSE From 09c4def495130a8e9c59e54b098052ca8168283d Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 18 Mar 2020 11:37:53 -0400 Subject: [PATCH 145/171] proteus-f4 was requested --- firmware/Makefile | 2 ++ firmware/config/boards/microrusefi/board.mk | 2 -- firmware/config/boards/proteus/adc_hack.cpp | 2 ++ firmware/config/boards/proteus/board.mk | 2 +- firmware/config/boards/proteus/board_configuration.cpp | 3 +++ firmware/config/boards/skeleton/board.mk | 2 -- firmware/hw_layer/adc_inputs.cpp | 2 +- 7 files changed, 9 insertions(+), 6 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index f898ebe9f1..0787bafd72 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -153,6 +153,8 @@ ifeq ($(USE_FATFS),yes) include $(PROJECT_DIR)/ext/fatfs.mk endif +BOARDS_DIR = $(PROJECT_DIR)/config/boards + include $(PROJECT_DIR)/config/boards/$(PROJECT_BOARD)/board.mk include $(PROJECT_DIR)/config/engines/engines.mk include $(PROJECT_DIR)/console/console.mk diff --git a/firmware/config/boards/microrusefi/board.mk b/firmware/config/boards/microrusefi/board.mk index dab7ac4d37..a14b2aa229 100644 --- a/firmware/config/boards/microrusefi/board.mk +++ b/firmware/config/boards/microrusefi/board.mk @@ -1,7 +1,5 @@ # Combine the related files for a specific platform and MCU. -BOARDS_DIR = $(PROJECT_DIR)/config/boards - # Target ECU board design BOARDSRC_CPP = $(BOARDS_DIR)/microrusefi/board_configuration.cpp diff --git a/firmware/config/boards/proteus/adc_hack.cpp b/firmware/config/boards/proteus/adc_hack.cpp index eeb13248fa..5749b89c98 100644 --- a/firmware/config/boards/proteus/adc_hack.cpp +++ b/firmware/config/boards/proteus/adc_hack.cpp @@ -42,7 +42,9 @@ adcsample_t vbattSampleProteus = 0; void proteusAdcHack() { adcConvert(&ADCD3, &adcConvGroup, samples, 8); +#if defined(STM32F7XX) SCB_InvalidateDCache_by_Addr(reinterpret_cast(samples), sizeof(samples)); +#endif /* STM32F7XX */ uint32_t sum = 0; diff --git a/firmware/config/boards/proteus/board.mk b/firmware/config/boards/proteus/board.mk index 279b78c4a4..f70064edf5 100644 --- a/firmware/config/boards/proteus/board.mk +++ b/firmware/config/boards/proteus/board.mk @@ -23,4 +23,4 @@ endif # Override DEFAULT_ENGINE_TYPE -DDEFS += -DSTM32F767xx -DEFI_USE_OSC=TRUE -DEFI_FATAL_ERROR_PIN=GPIOE_3 -DFIRMWARE_ID=\"proteus\" -DDEFAULT_ENGINE_TYPE=PROTEUS -DUSE_ADC3_VBATT_HACK -DSTM32_ADC_USE_ADC3=TRUE -DEFI_INCLUDE_ENGINE_PRESETS=FALSE +DDEFS += $(MCU_DEFS) -DEFI_USE_OSC=TRUE -DEFI_FATAL_ERROR_PIN=GPIOE_3 -DFIRMWARE_ID=\"proteus\" -DDEFAULT_ENGINE_TYPE=PROTEUS -DUSE_ADC3_VBATT_HACK -DSTM32_ADC_USE_ADC3=TRUE -DEFI_INCLUDE_ENGINE_PRESETS=FALSE diff --git a/firmware/config/boards/proteus/board_configuration.cpp b/firmware/config/boards/proteus/board_configuration.cpp index 47e08cafbf..fcf989bae5 100644 --- a/firmware/config/boards/proteus/board_configuration.cpp +++ b/firmware/config/boards/proteus/board_configuration.cpp @@ -53,6 +53,9 @@ static void setIgnitionPins() { engineConfiguration->ignitionPinMode = OM_DEFAULT; } +void setSdCardConfigurationOverrides(void) { +} + static void setLedPins() { CONFIG(warningLedPin) = GPIOE_3; CONFIG(communicationLedPin) = GPIOE_4; diff --git a/firmware/config/boards/skeleton/board.mk b/firmware/config/boards/skeleton/board.mk index 1c0c3f19eb..bcabe02ae7 100644 --- a/firmware/config/boards/skeleton/board.mk +++ b/firmware/config/boards/skeleton/board.mk @@ -1,7 +1,5 @@ # Combine the related files for a specific platform and MCU. -BOARDS_DIR = $(PROJECT_DIR)/config/boards - # Target ECU board design BOARDSRC_CPP = $(BOARDS_DIR)/skeleton/board_configuration.cpp diff --git a/firmware/hw_layer/adc_inputs.cpp b/firmware/hw_layer/adc_inputs.cpp index 2dce775574..9bf0bf08ad 100644 --- a/firmware/hw_layer/adc_inputs.cpp +++ b/firmware/hw_layer/adc_inputs.cpp @@ -324,7 +324,7 @@ void AdcDevice::invalidateSamplesCache() { // As a result, we have to manually invalidate the D-cache any time we (the CPU) // would like to read something that somebody else wrote (ADC via DMA, in this case) SCB_InvalidateDCache_by_Addr(reinterpret_cast(samples), sizeof(samples)); -#endif +#endif /* STM32F7XX */ } void AdcDevice::init(void) { From 482967b8dbbb78024f1b1b5cb2b1936ee7fd61b2 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 18 Mar 2020 15:56:17 -0400 Subject: [PATCH 146/171] progress towards start/stop --- ...ngine_configuration_generated_structures.h | 17 +++++++---- .../controllers/algo/rusefi_generated.h | 18 +++++++----- ...ngine_configuration_generated_structures.h | 17 +++++++---- .../controllers/generated/rusefi_generated.h | 18 +++++++----- firmware/controllers/system/efi_gpio.cpp | 2 +- firmware/controllers/system/efi_gpio.h | 2 +- firmware/integration/rusefi_config.txt | 9 +++--- firmware/tunerstudio/rusefi.ini | 13 +++++---- firmware/tunerstudio/rusefi.input | 2 +- firmware/tunerstudio/rusefi_frankenso.ini | 13 +++++---- firmware/tunerstudio/rusefi_kinetis.ini | 13 +++++---- firmware/tunerstudio/rusefi_microrusefi.ini | 13 +++++---- firmware/tunerstudio/rusefi_prometheus.ini | 13 +++++---- firmware/tunerstudio/rusefi_proteus.ini | 13 +++++---- .../com/rusefi/config/generated/Fields.java | 29 ++++++++++--------- 15 files changed, 108 insertions(+), 84 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index b86d61a8fc..15b859050a 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 13:38:12 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Mar 18 15:54:39 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1416,11 +1416,12 @@ struct engine_configuration_s { /** * offset 808 */ - output_pin_e starterRelayPin; + output_pin_e starterRelayDisablePin; /** + * On some vehicles we can disable starter once engine is already running * offset 809 */ - pin_output_mode_e starterRelayPinMode; + pin_output_mode_e starterRelayDisableMode; /** * Some Subaru and some Mazda use double-solenoid idle air valve * offset 810 @@ -1429,7 +1430,7 @@ struct engine_configuration_s { /** * offset 811 */ - uint8_t unuseduartPadding1; + switch_input_pin_e startStopButton; /** * offset 812 */ @@ -2147,7 +2148,11 @@ struct engine_configuration_s { /** * offset 1772 */ - uint8_t unusedFormerWarmupAfrPid[3]; + output_pin_e starterControlPin; + /** + * offset 1773 + */ + uint8_t unusedFormerWarmupAfrPid[2]; /** * offset 1775 */ @@ -3231,4 +3236,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 13:38:12 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Mar 18 15:54:39 EDT 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 822b103402..5bdae91d54 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1766,12 +1766,16 @@ #define spi3SckMode_offset_hex a2a #define spi3sckPin_offset 936 #define spi3sckPin_offset_hex 3a8 -#define starterRelayPin_offset 808 -#define starterRelayPin_offset_hex 328 -#define starterRelayPinMode_offset 809 -#define starterRelayPinMode_offset_hex 329 +#define starterControlPin_offset 1772 +#define starterControlPin_offset_hex 6ec +#define starterRelayDisableMode_offset 809 +#define starterRelayDisableMode_offset_hex 329 +#define starterRelayDisablePin_offset 808 +#define starterRelayDisablePin_offset_hex 328 #define startOfCrankingPrimingPulse_offset 2032 #define startOfCrankingPrimingPulse_offset_hex 7f0 +#define startStopButton_offset 811 +#define startStopButton_offset_hex 32b #define startUpFuelPumpDuration_offset 1892 #define startUpFuelPumpDuration_offset_hex 764 #define stepperDirectionPinMode_offset 3102 @@ -2144,8 +2148,8 @@ #define unusedErrorPin_offset_hex 7f8 #define unusedFlexFuelSensor_offset 3100 #define unusedFlexFuelSensor_offset_hex c1c -#define unusedFormerWarmupAfrPid_offset 1772 -#define unusedFormerWarmupAfrPid_offset_hex 6ec +#define unusedFormerWarmupAfrPid_offset 1773 +#define unusedFormerWarmupAfrPid_offset_hex 6ed #define unusedHereWeHave_offset 756 #define unusedHereWeHave_offset_hex 2f4 #define unusedmiataNb2VVTRatioFrom_offset 820 @@ -2162,8 +2166,6 @@ #define unusedSpiPadding7_offset_hex fa5 #define unusedSpiPadding8_offset 4009 #define unusedSpiPadding8_offset_hex fa9 -#define unuseduartPadding1_offset 811 -#define unuseduartPadding1_offset_hex 32b #define unusuedsw_offset 4020 #define unusuedsw_offset_hex fb4 #define unusuedvref_offset 4016 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 9b0ace8c2f..b830d81ac7 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:37:57 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:25 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1416,11 +1416,12 @@ struct engine_configuration_s { /** * offset 808 */ - output_pin_e starterRelayPin; + output_pin_e starterRelayDisablePin; /** + * On some vehicles we can disable starter once engine is already running * offset 809 */ - pin_output_mode_e starterRelayPinMode; + pin_output_mode_e starterRelayDisableMode; /** * Some Subaru and some Mazda use double-solenoid idle air valve * offset 810 @@ -1429,7 +1430,7 @@ struct engine_configuration_s { /** * offset 811 */ - uint8_t unuseduartPadding1; + switch_input_pin_e startStopButton; /** * offset 812 */ @@ -2147,7 +2148,11 @@ struct engine_configuration_s { /** * offset 1772 */ - uint8_t unusedFormerWarmupAfrPid[3]; + output_pin_e starterControlPin; + /** + * offset 1773 + */ + uint8_t unusedFormerWarmupAfrPid[2]; /** * offset 1775 */ @@ -3231,4 +3236,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:37:57 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:25 EDT 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index b5a08cd53a..9258f505d0 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1766,12 +1766,16 @@ #define spi3SckMode_offset_hex a2a #define spi3sckPin_offset 936 #define spi3sckPin_offset_hex 3a8 -#define starterRelayPin_offset 808 -#define starterRelayPin_offset_hex 328 -#define starterRelayPinMode_offset 809 -#define starterRelayPinMode_offset_hex 329 +#define starterControlPin_offset 1772 +#define starterControlPin_offset_hex 6ec +#define starterRelayDisableMode_offset 809 +#define starterRelayDisableMode_offset_hex 329 +#define starterRelayDisablePin_offset 808 +#define starterRelayDisablePin_offset_hex 328 #define startOfCrankingPrimingPulse_offset 2032 #define startOfCrankingPrimingPulse_offset_hex 7f0 +#define startStopButton_offset 811 +#define startStopButton_offset_hex 32b #define startUpFuelPumpDuration_offset 1892 #define startUpFuelPumpDuration_offset_hex 764 #define stepperDirectionPinMode_offset 3102 @@ -2144,8 +2148,8 @@ #define unusedErrorPin_offset_hex 7f8 #define unusedFlexFuelSensor_offset 3100 #define unusedFlexFuelSensor_offset_hex c1c -#define unusedFormerWarmupAfrPid_offset 1772 -#define unusedFormerWarmupAfrPid_offset_hex 6ec +#define unusedFormerWarmupAfrPid_offset 1773 +#define unusedFormerWarmupAfrPid_offset_hex 6ed #define unusedHereWeHave_offset 756 #define unusedHereWeHave_offset_hex 2f4 #define unusedmiataNb2VVTRatioFrom_offset 820 @@ -2162,8 +2166,6 @@ #define unusedSpiPadding7_offset_hex fa5 #define unusedSpiPadding8_offset 4009 #define unusedSpiPadding8_offset_hex fa9 -#define unuseduartPadding1_offset 811 -#define unuseduartPadding1_offset_hex 32b #define unusuedsw_offset 4020 #define unusuedsw_offset_hex fb4 #define unusuedvref_offset 4016 diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index ff90a1708e..b6dfa69cf9 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -146,7 +146,7 @@ void EnginePins::unregisterPins() { unregisterOutputIfPinOrModeChanged(boostPin, boostControlPin, boostControlPinMode); unregisterOutputIfPinOrModeChanged(alternatorPin, alternatorControlPin, alternatorControlPinMode); unregisterOutputIfPinOrModeChanged(mainRelay, mainRelayPin, mainRelayPinMode); - unregisterOutputIfPinOrModeChanged(starterRelay, starterRelayPin, starterRelayPinMode); + unregisterOutputIfPinOrModeChanged(starterRelayDisable, starterRelayDisablePin, starterRelayDisablePinMode); #endif /* EFI_PROD_CODE */ } diff --git a/firmware/controllers/system/efi_gpio.h b/firmware/controllers/system/efi_gpio.h index 8206cd5dc6..13fadc4138 100644 --- a/firmware/controllers/system/efi_gpio.h +++ b/firmware/controllers/system/efi_gpio.h @@ -122,7 +122,7 @@ public: void stopInjectionPins(); void stopIgnitionPins(); OutputPin mainRelay; - OutputPin starterRelay; + OutputPin starterRelayDisable; OutputPin fanRelay; // see acRelayPin OutputPin acRelay; diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 3019fadbc0..0d48bbd614 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -684,10 +684,10 @@ custom uart_device_e 1 bits,U32, @OFFSET@, [0:7], "Off", "UART1", "UART2", "UA int16_t sdCardPeriodMs;+SD card logging period, in milliseconds;"ms", 1, 0, 0, 30000, 0 brain_pin_e debugSetTimer brain_pin_e debugMapAveraging; - output_pin_e starterRelayPin; - pin_output_mode_e starterRelayPinMode; + output_pin_e starterRelayDisablePin; + pin_output_mode_e starterRelayDisableMode;On some vehicles we can disable starter once engine is already running brain_pin_e secondSolenoidPin;Some Subaru and some Mazda use double-solenoid idle air valve - uint8_t[1] unuseduartPadding1; + switch_input_pin_e startStopButton; int mapMinBufferLength;;"count", 1, 0, 0, 24, 0 int16_t idlePidDeactivationTpsThreshold;;"%", 1, 0, 0, 100.0, 0 @@ -943,7 +943,8 @@ custom pin_mode_e 1 bits, U08, @OFFSET@, [0:7], @@pin_mode_e_enum@@ float alternator_antiwindupFreq;; "x", 1, 0.0, -1000000, 1000000, 4 int16_t tps2Min;Closed throttle#2. todo: extract these two fields into a structure\nSee also tps2_1AdcChannel\nset tps2_min X;"ADC", 1, 0, 0, 1023, 0 int16_t tps2Max;Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!\nSee also tps1_1AdcChannel\nset tps2_max X;"ADC", 1, 0, 0, 1023, 0 - uint8_t[3] unusedFormerWarmupAfrPid; + output_pin_e starterControlPin; + uint8_t[2] unusedFormerWarmupAfrPid; uint8_t tachPulsePerRev;;"Pulse", 1, 0, 1.0, 255.0, 0 ! todo: mapErrorDetectionIdleTooLow? 30kPa is usually lowest on idle diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 62904f7734..c355f512dc 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:37:57 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:25 EDT 2020 pageSize = 20000 page = 1 @@ -449,10 +449,10 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" + starterRelayDisablePin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unuseduartPadding1 offset 811 + startStopButton = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -724,7 +724,8 @@ page = 1 alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 + starterControlPin = bits, U08, 1772, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" +;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -2292,7 +2293,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" - subMenu = starterRelay, "Starter relay" + subMenu = starterRelay, "Starter Disable relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index a1a06a3156..e5c51e569f 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1162,7 +1162,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" - subMenu = starterRelay, "Starter relay" + subMenu = starterRelay, "Starter Disable relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index ec0372ac21..e99467b4ed 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:38:03 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:30 EDT 2020 pageSize = 20000 page = 1 @@ -449,10 +449,10 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" - starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" + starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" + starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unuseduartPadding1 offset 811 + startStopButton = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -724,7 +724,8 @@ page = 1 alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 + starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" +;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -2292,7 +2293,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" - subMenu = starterRelay, "Starter relay" + subMenu = starterRelay, "Starter Disable relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 895cd3e224..2dc9d9178b 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Mar 17 13:38:12 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Mar 18 15:54:39 EDT 2020 pageSize = 20000 page = 1 @@ -449,10 +449,10 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" + starterRelayDisablePin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" -;no TS info - skipping unuseduartPadding1 offset 811 + startStopButton = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -724,7 +724,8 @@ page = 1 alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 + starterControlPin = bits, U08, 1772, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" +;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -2292,7 +2293,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" - subMenu = starterRelay, "Starter relay" + subMenu = starterRelay, "Starter Disable relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 5601a69daa..920ed7a1d9 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:53:13 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:27 EDT 2020 pageSize = 20000 page = 1 @@ -449,10 +449,10 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" - starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" + starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" + starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unuseduartPadding1 offset 811 + startStopButton = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -724,7 +724,8 @@ page = 1 alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 + starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" +;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -2292,7 +2293,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" - subMenu = starterRelay, "Starter relay" + subMenu = starterRelay, "Starter Disable relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 12c0fb89f0..9ebbdcd9df 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:38:06 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:33 EDT 2020 pageSize = 20000 page = 1 @@ -449,10 +449,10 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" - starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" + starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" + starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unuseduartPadding1 offset 811 + startStopButton = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -724,7 +724,8 @@ page = 1 alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 + starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" +;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -2292,7 +2293,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" - subMenu = starterRelay, "Starter relay" + subMenu = starterRelay, "Starter Disable relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index eb689b3ee6..a7bfcd1190 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Mar 17 13:38:09 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:36 EDT 2020 pageSize = 20000 page = 1 @@ -449,10 +449,10 @@ page = 1 sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayPin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" - starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" + starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" + starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unuseduartPadding1 offset 811 + startStopButton = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -724,7 +724,8 @@ page = 1 alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 + starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" +;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -2292,7 +2293,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" - subMenu = starterRelay, "Starter relay" + subMenu = starterRelay, "Starter Disable relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 7a861b264c..9afe19eaaa 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sat Mar 14 09:14:04 EDT 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:25 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1162,11 +1162,13 @@ public class Fields { public static final int spi3mosiPin_offset = 934; public static final int spi3SckMode_offset = 2602; public static final int spi3sckPin_offset = 936; - public static final int starterRelayPin_offset = 808; - public static final int starterRelayPin_offset_hex = 328; - public static final int starterRelayPinMode_offset = 809; - public static final int starterRelayPinMode_offset_hex = 329; + public static final int starterControlPin_offset = 1772; + public static final int starterRelayDisableMode_offset = 809; + public static final int starterRelayDisableMode_offset_hex = 329; + public static final int starterRelayDisablePin_offset = 808; + public static final int starterRelayDisablePin_offset_hex = 328; public static final int startOfCrankingPrimingPulse_offset = 2032; + public static final int startStopButton_offset = 811; public static final int startUpFuelPumpDuration_offset = 1892; public static final int startUpFuelPumpDuration_offset_hex = 764; public static final int stepperDirectionPinMode_offset = 3102; @@ -1403,7 +1405,7 @@ public class Fields { public static final int unusedBit_34_31_offset = 76; public static final int unusedErrorPin_offset = 2040; public static final int unusedFlexFuelSensor_offset = 3100; - public static final int unusedFormerWarmupAfrPid_offset = 1772; + public static final int unusedFormerWarmupAfrPid_offset = 1773; public static final int unusedHereWeHave_offset = 756; public static final int unusedmiataNb2VVTRatioFrom_offset = 820; public static final int unusedmiataNb2VVTRatioFrom_offset_hex = 334; @@ -1414,7 +1416,6 @@ public class Fields { public static final int unusedSpiPadding5_offset = 2713; public static final int unusedSpiPadding7_offset = 4005; public static final int unusedSpiPadding8_offset = 4009; - public static final int unuseduartPadding1_offset = 811; public static final int unusuedsw_offset = 4020; public static final int unusuedvref_offset = 4016; public static final int useAdvanceCorrectionsForCranking_offset = 1476; @@ -1837,10 +1838,10 @@ public class Fields { public static final Field SDCARDPERIODMS = Field.create("SDCARDPERIODMS", 804, FieldType.INT16); public static final Field DEBUGSETTIMER = Field.create("DEBUGSETTIMER", 806, FieldType.INT8, brain_pin_e); public static final Field DEBUGMAPAVERAGING = Field.create("DEBUGMAPAVERAGING", 807, FieldType.INT8, brain_pin_e); - public static final Field STARTERRELAYPIN = Field.create("STARTERRELAYPIN", 808, FieldType.INT8, output_pin_e); - public static final Field STARTERRELAYPINMODE = Field.create("STARTERRELAYPINMODE", 809, FieldType.INT8, pin_output_mode_e); + public static final Field STARTERRELAYDISABLEPIN = Field.create("STARTERRELAYDISABLEPIN", 808, FieldType.INT8, output_pin_e); + public static final Field STARTERRELAYDISABLEMODE = Field.create("STARTERRELAYDISABLEMODE", 809, FieldType.INT8, pin_output_mode_e); public static final Field SECONDSOLENOIDPIN = Field.create("SECONDSOLENOIDPIN", 810, FieldType.INT8, brain_pin_e); - public static final Field UNUSEDUARTPADDING1 = Field.create("UNUSEDUARTPADDING1", 811, FieldType.INT8); + public static final Field STARTSTOPBUTTON = Field.create("STARTSTOPBUTTON", 811, FieldType.INT8, switch_input_pin_e); public static final Field MAPMINBUFFERLENGTH = Field.create("MAPMINBUFFERLENGTH", 812, FieldType.INT); public static final Field IDLEPIDDEACTIVATIONTPSTHRESHOLD = Field.create("IDLEPIDDEACTIVATIONTPSTHRESHOLD", 816, FieldType.INT16); public static final Field STEPPERPARKINGEXTRASTEPS = Field.create("STEPPERPARKINGEXTRASTEPS", 818, FieldType.INT16); @@ -2111,6 +2112,7 @@ public class Fields { public static final Field ALTERNATOR_ANTIWINDUPFREQ = Field.create("ALTERNATOR_ANTIWINDUPFREQ", 1764, FieldType.FLOAT); public static final Field TPS2MIN = Field.create("TPS2MIN", 1768, FieldType.INT16); public static final Field TPS2MAX = Field.create("TPS2MAX", 1770, FieldType.INT16); + public static final Field STARTERCONTROLPIN = Field.create("STARTERCONTROLPIN", 1772, FieldType.INT8, output_pin_e); public static final Field TACHPULSEPERREV = Field.create("TACHPULSEPERREV", 1775, FieldType.INT8); public static final Field MAPERRORDETECTIONTOOLOW = Field.create("MAPERRORDETECTIONTOOLOW", 1776, FieldType.FLOAT); public static final Field MAPERRORDETECTIONTOOHIGH = Field.create("MAPERRORDETECTIONTOOHIGH", 1780, FieldType.FLOAT); @@ -2739,10 +2741,10 @@ public class Fields { SDCARDPERIODMS, DEBUGSETTIMER, DEBUGMAPAVERAGING, - STARTERRELAYPIN, - STARTERRELAYPINMODE, + STARTERRELAYDISABLEPIN, + STARTERRELAYDISABLEMODE, SECONDSOLENOIDPIN, - UNUSEDUARTPADDING1, + STARTSTOPBUTTON, MAPMINBUFFERLENGTH, IDLEPIDDEACTIVATIONTPSTHRESHOLD, STEPPERPARKINGEXTRASTEPS, @@ -3009,6 +3011,7 @@ public class Fields { ALTERNATOR_ANTIWINDUPFREQ, TPS2MIN, TPS2MAX, + STARTERCONTROLPIN, TACHPULSEPERREV, MAPERRORDETECTIONTOOLOW, MAPERRORDETECTIONTOOHIGH, From 1012df45118dc072f4d521ce9eb85e69d523a83b Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 18 Mar 2020 16:32:03 -0400 Subject: [PATCH 147/171] progress towards start/stop --- firmware/controllers/core/fsio_impl.cpp | 10 +++++----- firmware/controllers/settings.cpp | 6 +++--- firmware/controllers/system/efi_gpio.cpp | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/firmware/controllers/core/fsio_impl.cpp b/firmware/controllers/core/fsio_impl.cpp index fff60bdd1a..06d4af61f2 100644 --- a/firmware/controllers/core/fsio_impl.cpp +++ b/firmware/controllers/core/fsio_impl.cpp @@ -102,7 +102,7 @@ static LEElement * acRelayLogic; static LEElement * fuelPumpLogic; static LEElement * radiatorFanLogic; static LEElement * alternatorLogic; -static LEElement * starterRelayLogic; +static LEElement * starterRelayDisableLogic; #if EFI_MAIN_RELAY_CONTROL static LEElement * mainRelayLogic; @@ -467,8 +467,8 @@ void runFsio(DECLARE_ENGINE_PARAMETER_SIGNATURE) { enginePins.mainRelay.setValue(true); #endif /* EFI_MAIN_RELAY_CONTROL */ - if (CONFIG(starterRelayPin) != GPIO_UNASSIGNED) - setPinState("starter_relay", &enginePins.starterRelay, starterRelayLogic PASS_ENGINE_PARAMETER_SUFFIX); + if (CONFIG(starterRelayDisablePin) != GPIO_UNASSIGNED) + setPinState("starter_relay", &enginePins.starterRelayDisable, starterRelayDisableLogic PASS_ENGINE_PARAMETER_SUFFIX); /** * o2 heater is off during cranking @@ -679,8 +679,8 @@ void initFsioImpl(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { if (CONFIG(mainRelayPin) != GPIO_UNASSIGNED) mainRelayLogic = sysPool.parseExpression(MAIN_RELAY_LOGIC); #endif /* EFI_MAIN_RELAY_CONTROL */ - if (CONFIG(starterRelayPin) != GPIO_UNASSIGNED) - starterRelayLogic = sysPool.parseExpression(STARTER_RELAY_LOGIC); + if (CONFIG(starterRelayDisablePin) != GPIO_UNASSIGNED) + starterRelayDisableLogic = sysPool.parseExpression(STARTER_RELAY_LOGIC); #if EFI_PROD_CODE for (int i = 0; i < FSIO_COMMAND_COUNT; i++) { diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index ec334bfeb2..5ca5f36b47 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -118,8 +118,8 @@ static void printOutputs(const engine_configuration_s *engineConfiguration) { scheduleMsg(&logger, "mainRelay: mode %s @ %s", getPin_output_mode_e(engineConfiguration->mainRelayPinMode), hwPortname(engineConfiguration->mainRelayPin)); - scheduleMsg(&logger, "starterRelay: mode %s @ %s", getPin_output_mode_e(engineConfiguration->starterRelayPinMode), - hwPortname(engineConfiguration->starterRelayPin)); + scheduleMsg(&logger, "starterRelay: mode %s @ %s", getPin_output_mode_e(engineConfiguration->starterRelayDisableMode), + hwPortname(engineConfiguration->starterRelayDisablePin)); scheduleMsg(&logger, "alternator field: mode %s @ %s", getPin_output_mode_e(engineConfiguration->alternatorControlPinMode), @@ -680,7 +680,7 @@ static void setMainRelayPin(const char *pinName) { } static void setStarterRelayPin(const char *pinName) { - setIndividualPin(pinName, &engineConfiguration->starterRelayPin, "starter relay"); + setIndividualPin(pinName, &engineConfiguration->starterRelayDisablePin, "starter disable relay"); } static void setAlternatorPin(const char *pinName) { diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index b6dfa69cf9..94eb0229b5 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -146,7 +146,7 @@ void EnginePins::unregisterPins() { unregisterOutputIfPinOrModeChanged(boostPin, boostControlPin, boostControlPinMode); unregisterOutputIfPinOrModeChanged(alternatorPin, alternatorControlPin, alternatorControlPinMode); unregisterOutputIfPinOrModeChanged(mainRelay, mainRelayPin, mainRelayPinMode); - unregisterOutputIfPinOrModeChanged(starterRelayDisable, starterRelayDisablePin, starterRelayDisablePinMode); + unregisterOutputIfPinOrModeChanged(starterRelayDisable, starterRelayDisablePin, starterRelayDisableMode); #endif /* EFI_PROD_CODE */ } @@ -375,7 +375,7 @@ void initOutputPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { enginePins.fuelPumpRelay.initPin("fuel pump relay", CONFIG(fuelPumpPin), &CONFIG(fuelPumpPinMode)); enginePins.mainRelay.initPin("main relay", CONFIG(mainRelayPin), &CONFIG(mainRelayPinMode)); - enginePins.starterRelay.initPin("starter relay", CONFIG(starterRelayPin), &CONFIG(starterRelayPinMode)); + enginePins.starterRelayDisable.initPin("starter relay", CONFIG(starterRelayDisablePin), &CONFIG(starterRelayDisableMode)); enginePins.fanRelay.initPin("fan relay", CONFIG(fanPin), &CONFIG(fanPinMode)); enginePins.o2heater.initPin("o2 heater", CONFIG(o2heaterPin)); From d918147ea1e5f2fcb16ef9428da73ce5d926a7ec Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 18 Mar 2020 17:46:46 -0400 Subject: [PATCH 148/171] v12 --- firmware/config/engines/bmw_m73.cpp | 1 + firmware/config/engines/bmw_m73_mre.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index d85b3a990e..2b1286dd94 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -7,6 +7,7 @@ * https://github.com/rusefi/rusefi_documentation/wiki/HOWTO_electronic_throttle_body * Ignition module https://rusefi.com/forum/viewtopic.php?f=4&t=286 * + * * 1/2 plugs black * 2/2 plugs grey * diff --git a/firmware/config/engines/bmw_m73_mre.cpp b/firmware/config/engines/bmw_m73_mre.cpp index 663eb798c4..96374c1b14 100644 --- a/firmware/config/engines/bmw_m73_mre.cpp +++ b/firmware/config/engines/bmw_m73_mre.cpp @@ -6,6 +6,7 @@ * https://rusefi.com/wiki/index.php?title=Hardware:OEM_connectors#134_pin * https://github.com/rusefi/rusefi_documentation/wiki/HOWTO_electronic_throttle_body * Ignition module https://rusefi.com/forum/viewtopic.php?f=4&t=286 + * https://github.com/rusefi/rusefi_documentation/wiki/Hardware_microRusEfi_wiring * * 1/2 plugs black * 2/2 plugs grey @@ -20,6 +21,7 @@ * ECU pin 8: IN RED/BLU RED +12v from ECU relay * * Plug #2 24 pin + * ECU pin 23: OUT BRN/BLK BLK ECU relay control, low-side * * * @@ -35,6 +37,9 @@ * ECU pin 41: OUT BRN/WHT BLU injector #1 * ECU pin 46: IN BLK BLU VR negative crankshaft sensor * + * Plug #4 40 pin + * ECU pin 6: IN ORG start signal from ignition key. Custom wiring: pulled-up thermistor wire on MRE + * ECU pin 40: OUT YEL/BRN GRN starter enable * * * Plug #5 9 pin @@ -76,6 +81,9 @@ void setEngineBMW_M73_microRusEfi(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->etb.pFactor = 2.00; engineConfiguration->etb.iFactor = 0.35; + // AN Temp 4, orange wire + CONFIG(startStopButton) = GPIOA_3; + //set tps_min 891 CONFIG(tpsMin) = 891; From 0b7a929587739cd0b13047dc379f757c529f21c0 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 18 Mar 2020 19:41:12 -0400 Subject: [PATCH 149/171] progress towards start/stop --- firmware/controllers/core/fsio_impl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/controllers/core/fsio_impl.cpp b/firmware/controllers/core/fsio_impl.cpp index 06d4af61f2..c60b72c2c8 100644 --- a/firmware/controllers/core/fsio_impl.cpp +++ b/firmware/controllers/core/fsio_impl.cpp @@ -745,8 +745,8 @@ void runHardcodedFsio(DECLARE_ENGINE_PARAMETER_SIGNATURE) { enginePins.mainRelay.setValue((getTimeNowSeconds() < 2) || (getVBatt(PASS_ENGINE_PARAMETER_SIGNATURE) > 5) || engine->isInShutdownMode()); } // see STARTER_RELAY_LOGIC - if (CONFIG(starterRelayPin) != GPIO_UNASSIGNED) { - enginePins.starterRelay.setValue(engine->rpmCalculator.getRpm() < engineConfiguration->cranking.rpm); + if (CONFIG(starterRelayDisablePin) != GPIO_UNASSIGNED) { + enginePins.starterRelayDisable.setValue(engine->rpmCalculator.getRpm() < engineConfiguration->cranking.rpm); } // see FAN_CONTROL_LOGIC if (CONFIG(fanPin) != GPIO_UNASSIGNED) { From e605b39ab19391546e61aa06ef11493fb0338741 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 18 Mar 2020 18:55:46 -0700 Subject: [PATCH 150/171] const (#1193) --- firmware/util/containers/table_helper.h | 6 +++--- firmware/util/math/interpolation.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/util/containers/table_helper.h b/firmware/util/containers/table_helper.h index 72f29b7f59..21a5499f83 100644 --- a/firmware/util/containers/table_helper.h +++ b/firmware/util/containers/table_helper.h @@ -17,7 +17,7 @@ class ValueProvider3D { public: - virtual float getValue(float xRpm, float y) = 0; + virtual float getValue(float xRpm, float y) const = 0; }; @@ -30,7 +30,7 @@ public: explicit Map3D(const char*name); Map3D(const char*name, float multiplier); void init(vType table[RPM_BIN_SIZE][LOAD_BIN_SIZE], const kType loadBins[LOAD_BIN_SIZE], const kType rpmBins[RPM_BIN_SIZE]); - float getValue(float xRpm, float y); + float getValue(float xRpm, float y) const; void setAll(vType value); vType *pointers[LOAD_BIN_SIZE]; private: @@ -97,7 +97,7 @@ void Map3D::init(vType table[RPM_BIN_ } template -float Map3D::getValue(float xRpm, float y) { +float Map3D::getValue(float xRpm, float y) const { efiAssert(CUSTOM_ERR_ASSERT, initialized, "map not initialized", NAN); if (cisnan(y)) { warning(CUSTOM_PARAM_RANGE, "%s: y is NaN", name); diff --git a/firmware/util/math/interpolation.h b/firmware/util/math/interpolation.h index c1375407c9..3322f89bd9 100644 --- a/firmware/util/math/interpolation.h +++ b/firmware/util/math/interpolation.h @@ -102,7 +102,7 @@ int findIndexMsgExt(const char *msg, const kType array[], int size, kType value) * @brief Two-dimensional table lookup with linear interpolation */ template -float interpolate3d(float x, const kType xBin[], int xBinSize, float y, const kType yBin[], int yBinSize, vType* map[]) { +float interpolate3d(float x, const kType xBin[], int xBinSize, float y, const kType yBin[], int yBinSize, const vType* const map[]) { if (cisnan(x)) { warning(CUSTOM_INTEPOLATE_ERROR_3, "%.2f: x is NaN in interpolate3d", x); return NAN; From 194bf2e0bff1f93367ffcd223acd6b414ed6be51 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 18 Mar 2020 19:07:41 -0700 Subject: [PATCH 151/171] Add new CanTxMessage class, consume in OBD2 (#1186) * relocate * include path * simulator makefile * fix mre while we're at it * it would help if I fixed it right * add can_msg * convert obd2 * guard properly * better include order * docs & headers * inject CAN device Co-authored-by: Matthew Kennedy --- firmware/controllers/obd2.cpp | 32 ++++---- firmware/hw_layer/drivers/can/can_hw.cpp | 7 ++ firmware/hw_layer/drivers/can/can_msg_tx.cpp | 56 +++++++++++++ firmware/hw_layer/drivers/can/can_msg_tx.h | 86 ++++++++++++++++++++ firmware/hw_layer/drivers/drivers.mk | 1 + 5 files changed, 165 insertions(+), 17 deletions(-) create mode 100644 firmware/hw_layer/drivers/can/can_msg_tx.cpp create mode 100644 firmware/hw_layer/drivers/can/can_msg_tx.h diff --git a/firmware/controllers/obd2.cpp b/firmware/controllers/obd2.cpp index bfa8a384d8..d57c92e16a 100644 --- a/firmware/controllers/obd2.cpp +++ b/firmware/controllers/obd2.cpp @@ -30,7 +30,7 @@ #include "os_access.h" #include "engine.h" #include "obd2.h" -#include "can_hw.h" +#include "can_msg_tx.h" #include "vehicle_speed.h" #include "map.h" #include "maf.h" @@ -39,8 +39,6 @@ #include "fuel_math.h" #include "thermistors.h" -extern CANTxFrame txmsg; - EXTERN_ENGINE ; @@ -70,19 +68,17 @@ static const int16_t supportedPids4160[] = { }; static void obdSendPacket(int mode, int PID, int numBytes, uint32_t iValue) { - commonTxInit(OBD_TEST_RESPONSE); + CanTxMessage resp(OBD_TEST_RESPONSE); // write number of bytes - txmsg.data8[0] = (uint8_t)(2 + numBytes); + resp[0] = (uint8_t)(2 + numBytes); // write 2 bytes of header - txmsg.data8[1] = (uint8_t)(0x40 + mode); - txmsg.data8[2] = (uint8_t)PID; + resp[1] = (uint8_t)(0x40 + mode); + resp[2] = (uint8_t)PID; // write N data bytes for (int i = 8 * (numBytes - 1), j = 3; i >= 0; i -= 8, j++) { - txmsg.data8[j] = (uint8_t)((iValue >> i) & 0xff); + resp[j] = (uint8_t)((iValue >> i) & 0xff); } - - sendCanMessage(); } static void obdSendValue(int mode, int PID, int numBytes, float value) { @@ -185,13 +181,15 @@ static void handleGetDataRequest(CANRxFrame *rx) { } static void handleDtcRequest(int numCodes, int *dtcCode) { - int numBytes = numCodes * 2; - // write CAN-TP Single Frame header? - txmsg.data8[0] = (uint8_t)((0 << 4) | numBytes); - for (int i = 0, j = 1; i < numCodes; i++) { - txmsg.data8[j++] = (uint8_t)((dtcCode[i] >> 8) & 0xff); - txmsg.data8[j++] = (uint8_t)(dtcCode[i] & 0xff); - } + // TODO: this appears to be unfinished? + + // int numBytes = numCodes * 2; + // // write CAN-TP Single Frame header? + // txmsg.data8[0] = (uint8_t)((0 << 4) | numBytes); + // for (int i = 0, j = 1; i < numCodes; i++) { + // txmsg.data8[j++] = (uint8_t)((dtcCode[i] >> 8) & 0xff); + // txmsg.data8[j++] = (uint8_t)(dtcCode[i] & 0xff); + // } } #if HAL_USE_CAN diff --git a/firmware/hw_layer/drivers/can/can_hw.cpp b/firmware/hw_layer/drivers/can/can_hw.cpp index adf89a200e..1a5972d381 100644 --- a/firmware/hw_layer/drivers/can/can_hw.cpp +++ b/firmware/hw_layer/drivers/can/can_hw.cpp @@ -17,6 +17,7 @@ #include "periodic_thread_controller.h" #include "pin_repository.h" #include "can_hw.h" +#include "can_msg_tx.h" #include "string.h" #include "obd2.h" #include "mpu_util.h" @@ -369,6 +370,12 @@ void initCan(void) { canStart(&CAND1, &canConfig500); #endif /* STM32_CAN_USE_CAN2 */ + // Plumb CAN device to tx system + CanTxMessage::setDevice(detectCanDevice( + CONFIG(canRxPin), + CONFIG(canTxPin) + )); + // fire up threads, as necessary if (CONFIG(canWriteEnabled)) { canWrite.setPeriod(CONFIG(canSleepPeriodMs)); diff --git a/firmware/hw_layer/drivers/can/can_msg_tx.cpp b/firmware/hw_layer/drivers/can/can_msg_tx.cpp new file mode 100644 index 0000000000..a316f2f9ff --- /dev/null +++ b/firmware/hw_layer/drivers/can/can_msg_tx.cpp @@ -0,0 +1,56 @@ +/** + * @file can_msg_tx.cpp + * + * CAN message transmission + * + * @date Mar 13, 2020 + * @author Matthew Kennedy, (c) 2012-2020 + */ + +#include "efifeatures.h" +#include "global.h" + +#if EFI_CAN_SUPPORT +#include "can_msg_tx.h" + + +/*static*/ CANDriver* CanTxMessage::s_device = nullptr; + +/*static*/ void CanTxMessage::setDevice(CANDriver* device) { + s_device = device; +} + +CanTxMessage::CanTxMessage(uint32_t eid) { + m_frame.IDE = CAN_IDE_STD; + m_frame.EID = eid; + m_frame.RTR = CAN_RTR_DATA; + m_frame.DLC = 8; + memset(m_frame.data8, 0, sizeof(m_frame.data8)); +} + +CanTxMessage::~CanTxMessage() { + auto device = s_device; + + if (!device) { + warning(CUSTOM_ERR_CAN_CONFIGURATION, "CAN configuration issue"); + return; + } + + // 100 ms timeout + canTransmit(device, CAN_ANY_MAILBOX, &m_frame, TIME_MS2I(100)); +} + +uint8_t& CanTxMessage::operator[](size_t index) { + return m_frame.data8[index]; +} + +void CanTxMessage::setShortValue(uint16_t value, size_t offset) { + m_frame.data8[offset] = value & 0xFF; + m_frame.data8[offset + 1] = value >> 8; +} + +void CanTxMessage::setBit(size_t byteIdx, size_t bitIdx) { + m_frame.data8[byteIdx] |= 1 << bitIdx; +} + +#endif // EFI_CAN_SUPPORT diff --git a/firmware/hw_layer/drivers/can/can_msg_tx.h b/firmware/hw_layer/drivers/can/can_msg_tx.h new file mode 100644 index 0000000000..15e30b37d9 --- /dev/null +++ b/firmware/hw_layer/drivers/can/can_msg_tx.h @@ -0,0 +1,86 @@ +/** + * @file can_msg_tx.h + * + * CAN message transmission + * + * @date Mar 13, 2020 + * @author Matthew Kennedy, (c) 2012-2020 + */ + +#pragma once + +#include +#include + +#include "os_access.h" + +/** + * Represent a message to be transmitted over CAN. + * + * Usage: + * * Create an instance of CanTxMessage + * * Set any data you'd like to transmit either using the subscript operator to directly access bytes, or any of the helper functions. + * * Upon destruction, the message is transmitted. + */ +class CanTxMessage +{ +public: + /** + * Create a new CAN message, with the specified extended ID. + */ + CanTxMessage(uint32_t eid); + + /** + * Destruction of an instance of CanTxMessage will transmit the message over the wire. + */ + ~CanTxMessage(); + + /** + * Configures the device for all messages to transmit from. + */ + static void setDevice(CANDriver* device); + + /** + * @brief Read & write the raw underlying 8-byte buffer. + */ + uint8_t& operator[](size_t); + + /** + * @brief Write a 16-bit short value to the buffer. Note: this writes in big endian byte order. + */ + void setShortValue(uint16_t value, size_t offset); + + /** + * @brief Set a single bit in the transmit buffer. Useful for single-bit flags. + */ + void setBit(size_t byteIdx, size_t bitIdx); + +protected: + CANTxFrame m_frame; + +private: + static CANDriver* s_device; +}; + +/** + * A CAN message based on a type, removing the need for manually flipping bits/bytes. + */ +template +class CanTxTyped final : public CanTxMessage +{ + static_assert(sizeof(TData) == sizeof(CANTxFrame::data8)); + +public: + CanTxTyped(uint32_t eid) : CanTxMessage(eid) { } + + /** + * Access members of the templated type. + * + * So you can do: + * CanTxTyped d; + * d->memberOfMyType = 23; + */ + TData* operator->() { + return reinterpret_cast(&m_frame.data8); + } +}; diff --git a/firmware/hw_layer/drivers/drivers.mk b/firmware/hw_layer/drivers/drivers.mk index adbae36569..19d4b8235e 100644 --- a/firmware/hw_layer/drivers/drivers.mk +++ b/firmware/hw_layer/drivers/drivers.mk @@ -16,4 +16,5 @@ HW_LAYER_DRIVERS = \ HW_LAYER_DRIVERS_CPP = \ $(DRIVERS_DIR)/can/can_hw.cpp \ + $(DRIVERS_DIR)/can/can_msg_tx.cpp \ From a96bf1860486ff022b153d282ed02b5d3dca2939 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 18 Mar 2020 20:20:00 -0700 Subject: [PATCH 152/171] move to can folder (#1195) Co-authored-by: Matthew Kennedy --- firmware/controllers/{ => can}/obd2.cpp | 0 firmware/controllers/{ => can}/obd2.h | 0 firmware/controllers/controllers.mk | 3 ++- 3 files changed, 2 insertions(+), 1 deletion(-) rename firmware/controllers/{ => can}/obd2.cpp (100%) rename firmware/controllers/{ => can}/obd2.h (100%) diff --git a/firmware/controllers/obd2.cpp b/firmware/controllers/can/obd2.cpp similarity index 100% rename from firmware/controllers/obd2.cpp rename to firmware/controllers/can/obd2.cpp diff --git a/firmware/controllers/obd2.h b/firmware/controllers/can/obd2.h similarity index 100% rename from firmware/controllers/obd2.h rename to firmware/controllers/can/obd2.h diff --git a/firmware/controllers/controllers.mk b/firmware/controllers/controllers.mk index ff0bc0b449..0bfb7daa7b 100644 --- a/firmware/controllers/controllers.mk +++ b/firmware/controllers/controllers.mk @@ -34,7 +34,7 @@ CONTROLLERS_SRC_CPP = \ $(CONTROLLERS_DIR)/engine_cycle/aux_valves.cpp \ $(CONTROLLERS_DIR)/flash_main.cpp \ $(CONTROLLERS_DIR)/injector_central.cpp \ - $(CONTROLLERS_DIR)/obd2.cpp \ + $(CONTROLLERS_DIR)/can/obd2.cpp \ $(CONTROLLERS_DIR)/engine_controller.cpp \ $(CONTROLLERS_DIR)/persistent_store.cpp \ @@ -49,6 +49,7 @@ CONTROLLERS_INC=\ $(CONTROLLERS_DIR)/trigger \ $(CONTROLLERS_DIR)/sensors \ $(CONTROLLERS_DIR)/sensors/converters \ + $(CONTROLLERS_DIR)/can \ $(CONTROLLERS_DIR)/core \ $(CONTROLLERS_DIR)/gauges \ $(CONTROLLERS_DIR)/math \ From aeee5a139137dcbe3c169c9ce0c13e5b739d82fb Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 19 Mar 2020 05:43:37 -0700 Subject: [PATCH 153/171] split out can rx logic (#1196) * move to can folder * split out can rx * only print in debug mode * guard on feature flag * headers Co-authored-by: Matthew Kennedy --- firmware/controllers/can/can.h | 13 +++++++ firmware/controllers/can/can_rx.cpp | 43 ++++++++++++++++++++++++ firmware/controllers/can/obd2.cpp | 14 ++++---- firmware/controllers/can/obd2.h | 2 +- firmware/controllers/controllers.mk | 1 + firmware/hw_layer/drivers/can/can_hw.cpp | 31 ++--------------- 6 files changed, 67 insertions(+), 37 deletions(-) create mode 100644 firmware/controllers/can/can.h create mode 100644 firmware/controllers/can/can_rx.cpp diff --git a/firmware/controllers/can/can.h b/firmware/controllers/can/can.h new file mode 100644 index 0000000000..3f9f766a0c --- /dev/null +++ b/firmware/controllers/can/can.h @@ -0,0 +1,13 @@ +/** + * @file can.h + * + * @date Mar 19, 2020 + * @author Matthew Kennedy, (c) 2020 + */ + +#pragma once + +#include "hal.h" + +class Logging; +void processCanRxMessage(const CANRxFrame& msg, Logging* logger); diff --git a/firmware/controllers/can/can_rx.cpp b/firmware/controllers/can/can_rx.cpp new file mode 100644 index 0000000000..e290aeab9d --- /dev/null +++ b/firmware/controllers/can/can_rx.cpp @@ -0,0 +1,43 @@ +/** + * @file can_rx.cpp + * + * CAN reception handling. This file handles multiplexing incoming CAN frames as appropriate + * to the subsystems that consume them. + * + * @date Mar 19, 2020 + * @author Matthew Kennedy, (c) 2020 + */ + +#include "global.h" +#if EFI_CAN_SUPPORT + +#include "can.h" +#include "obd2.h" +#include "engine.h" + +EXTERN_ENGINE; + +static void printPacket(const CANRxFrame& rx, Logging* logger) { + // only print info if we're in can debug mode + if (CONFIG(debugMode) == DBG_CAN) { + scheduleMsg(logger, "Got CAN message: SID %x/%x %x %x %x %x %x %x %x %x", rx.SID, rx.DLC, rx.data8[0], rx.data8[1], + rx.data8[2], rx.data8[3], rx.data8[4], rx.data8[5], rx.data8[6], rx.data8[7]); + } +} + +volatile float aemXSeriesLambda = 0; + +void processCanRxMessage(const CANRxFrame& frame, Logging* logger) { + // TODO: if/when we support multiple lambda sensors, sensor N + // has address 0x0180 + N where N = [0, 15] + if (frame.SID == 0x0180) { + // AEM x-series lambda sensor reports in 0.0001 lambda per bit + uint16_t lambdaInt = SWAP_UINT16(frame.data16[0]); + aemXSeriesLambda = 0.0001f * lambdaInt; + } else { + printPacket(frame, logger); + obdOnCanPacketRx(frame); + } +} + +#endif // EFI_CAN_SUPPORT diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index d57c92e16a..d753a8a811 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -107,8 +107,8 @@ static void obdWriteSupportedPids(int PID, int bitOffset, const int16_t *support obdSendPacket(1, PID, 4, value); } -static void handleGetDataRequest(CANRxFrame *rx) { - int pid = rx->data8[2]; +static void handleGetDataRequest(const CANRxFrame& rx) { + int pid = rx.data8[2]; switch (pid) { case PID_SUPPORTED_PIDS_REQUEST_01_20: scheduleMsg(&logger, "Got lookup request 01-20"); @@ -193,17 +193,17 @@ static void handleDtcRequest(int numCodes, int *dtcCode) { } #if HAL_USE_CAN -void obdOnCanPacketRx(CANRxFrame *rx) { - if (rx->SID != OBD_TEST_REQUEST) { +void obdOnCanPacketRx(const CANRxFrame& rx) { + if (rx.SID != OBD_TEST_REQUEST) { return; } - if (rx->data8[0] == 2 && rx->data8[1] == OBD_CURRENT_DATA) { + if (rx.data8[0] == 2 && rx.data8[1] == OBD_CURRENT_DATA) { handleGetDataRequest(rx); - } else if (rx->data8[0] == 1 && rx->data8[1] == OBD_STORED_DIAGNOSTIC_TROUBLE_CODES) { + } else if (rx.data8[0] == 1 && rx.data8[1] == OBD_STORED_DIAGNOSTIC_TROUBLE_CODES) { scheduleMsg(&logger, "Got stored DTC request"); // todo: implement stored/pending difference? handleDtcRequest(1, &engine->engineState.warnings.lastErrorCode); - } else if (rx->data8[0] == 1 && rx->data8[1] == OBD_PENDING_DIAGNOSTIC_TROUBLE_CODES) { + } else if (rx.data8[0] == 1 && rx.data8[1] == OBD_PENDING_DIAGNOSTIC_TROUBLE_CODES) { scheduleMsg(&logger, "Got pending DTC request"); // todo: implement stored/pending difference? handleDtcRequest(1, &engine->engineState.warnings.lastErrorCode); diff --git a/firmware/controllers/can/obd2.h b/firmware/controllers/can/obd2.h index 0117488ba9..c6131db412 100644 --- a/firmware/controllers/can/obd2.h +++ b/firmware/controllers/can/obd2.h @@ -37,6 +37,6 @@ #define PID_FUEL_RATE 0x5E #if HAL_USE_CAN -void obdOnCanPacketRx(CANRxFrame *rx); +void obdOnCanPacketRx(const CANRxFrame& rx); #endif /* HAL_USE_CAN */ diff --git a/firmware/controllers/controllers.mk b/firmware/controllers/controllers.mk index 0bfb7daa7b..2ca5197ff8 100644 --- a/firmware/controllers/controllers.mk +++ b/firmware/controllers/controllers.mk @@ -35,6 +35,7 @@ CONTROLLERS_SRC_CPP = \ $(CONTROLLERS_DIR)/flash_main.cpp \ $(CONTROLLERS_DIR)/injector_central.cpp \ $(CONTROLLERS_DIR)/can/obd2.cpp \ + $(CONTROLLERS_DIR)/can/can_rx.cpp \ $(CONTROLLERS_DIR)/engine_controller.cpp \ $(CONTROLLERS_DIR)/persistent_store.cpp \ diff --git a/firmware/hw_layer/drivers/can/can_hw.cpp b/firmware/hw_layer/drivers/can/can_hw.cpp index 1a5972d381..5f4a79defe 100644 --- a/firmware/hw_layer/drivers/can/can_hw.cpp +++ b/firmware/hw_layer/drivers/can/can_hw.cpp @@ -13,13 +13,13 @@ #if EFI_CAN_SUPPORT +#include "can.h" #include "engine_configuration.h" #include "periodic_thread_controller.h" #include "pin_repository.h" #include "can_hw.h" #include "can_msg_tx.h" #include "string.h" -#include "obd2.h" #include "mpu_util.h" #include "allsensors.h" #include "vehicle_speed.h" @@ -74,22 +74,6 @@ CAN_BTR_1k0 }; CANTxFrame txmsg; -static void printPacket(CANRxFrame *rx) { -// scheduleMsg(&logger, "CAN FMI %x", rx->FMI); -// scheduleMsg(&logger, "TIME %x", rx->TIME); - scheduleMsg(&logger, "Got CAN message: SID %x/%x %x %x %x %x %x %x %x %x", rx->SID, rx->DLC, rx->data8[0], rx->data8[1], - rx->data8[2], rx->data8[3], rx->data8[4], rx->data8[5], rx->data8[6], rx->data8[7]); - - if (rx->SID == CAN_BMW_E46_CLUSTER_STATUS) { - int odometerKm = 10 * (rx->data8[1] << 8) + rx->data8[0]; - int odometerMi = (int) (odometerKm * 0.621371); - scheduleMsg(&logger, "GOT odometerKm %d", odometerKm); - scheduleMsg(&logger, "GOT odometerMi %d", odometerMi); - int timeValue = (rx->data8[4] << 8) + rx->data8[3]; - scheduleMsg(&logger, "GOT time %d", timeValue); - } -} - static void setShortValue(CANTxFrame *txmsg, int value, int offset) { txmsg->data8[offset] = value; txmsg->data8[offset + 1] = value >> 8; @@ -244,8 +228,6 @@ public: } }; -volatile float aemXSeriesLambda = 0; - class CanRead final : public ThreadController<256> { public: CanRead() @@ -272,16 +254,7 @@ public: // Process the message canReadCounter++; - // TODO: if/when we support multiple lambda sensors, sensor N - // has address 0x0180 + N where N = [0, 15] - if (m_buffer.SID == 0x0180) { - // AEM x-series lambda sensor reports in 0.0001 lambda per bit - uint16_t lambdaInt = SWAP_UINT16(m_buffer.data16[0]); - aemXSeriesLambda = 0.0001f * lambdaInt; - } else { - printPacket(&m_buffer); - obdOnCanPacketRx(&m_buffer); - } + processCanRxMessage(m_buffer, &logger); } } From a4b557022303c2cff338aa6b3dcf2c65d68e4196 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 19 Mar 2020 09:22:16 -0400 Subject: [PATCH 154/171] "rusefi CAN" config #1198 --- .../algo/engine_configuration_generated_structures.h | 8 ++++---- .../config/controllers/algo/rusefi_generated.h | 8 ++++---- firmware/controllers/algo/engine_configuration.cpp | 3 +++ .../engine_configuration_generated_structures.h | 8 ++++---- firmware/controllers/generated/rusefi_generated.h | 8 ++++---- firmware/integration/rusefi_config.txt | 5 +++-- firmware/tunerstudio/rusefi.ini | 8 +++++--- firmware/tunerstudio/rusefi.input | 2 ++ firmware/tunerstudio/rusefi_frankenso.ini | 8 +++++--- firmware/tunerstudio/rusefi_kinetis.ini | 8 +++++--- firmware/tunerstudio/rusefi_microrusefi.ini | 8 +++++--- firmware/tunerstudio/rusefi_prometheus.ini | 8 +++++--- firmware/tunerstudio/rusefi_proteus.ini | 8 +++++--- .../src/com/rusefi/config/generated/Fields.java | 12 +++++++----- 14 files changed, 61 insertions(+), 41 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 15b859050a..3f2c2104a0 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Mar 18 15:54:39 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Mar 19 09:14:30 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1299,7 +1299,7 @@ struct engine_configuration_s { bool verboseTLE8888 : 1; /** offset 744 bit 14 */ - bool unusedOldWarmupAfr : 1; + bool enableVerboseCanTx : 1; /** * +This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control. offset 744 bit 15 */ @@ -1382,7 +1382,7 @@ struct engine_configuration_s { /** * offset 756 */ - uint8_t unusedHereWeHave[4]; + uint32_t verboseCanBaseAddress; /** * offset 760 */ @@ -3236,4 +3236,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Mar 18 15:54:39 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Mar 19 09:14:30 EDT 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 5bdae91d54..54e5fb2607 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -535,6 +535,8 @@ #define enableAemXSeries_offset_hex 2e8 #define enabledStep1Limiter_offset 744 #define enabledStep1Limiter_offset_hex 2e8 +#define enableVerboseCanTx_offset 744 +#define enableVerboseCanTx_offset_hex 2e8 #define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" #define ENGINE_NOISE_CURVE_SIZE 8 #define engineChartSize_offset 1480 @@ -2150,14 +2152,10 @@ #define unusedFlexFuelSensor_offset_hex c1c #define unusedFormerWarmupAfrPid_offset 1773 #define unusedFormerWarmupAfrPid_offset_hex 6ed -#define unusedHereWeHave_offset 756 -#define unusedHereWeHave_offset_hex 2f4 #define unusedmiataNb2VVTRatioFrom_offset 820 #define unusedmiataNb2VVTRatioFrom_offset_hex 334 #define unusedmiataNb2VVTRatioTo_offset 824 #define unusedmiataNb2VVTRatioTo_offset_hex 338 -#define unusedOldWarmupAfr_offset 744 -#define unusedOldWarmupAfr_offset_hex 2e8 #define unusedSpiPadding4_offset 2593 #define unusedSpiPadding4_offset_hex a21 #define unusedSpiPadding5_offset 2713 @@ -2257,6 +2255,8 @@ #define vehicleSpeedSensorInputPin_offset_hex 3c8 #define veLoadBins_offset 18464 #define veLoadBins_offset_hex 4820 +#define verboseCanBaseAddress_offset 756 +#define verboseCanBaseAddress_offset_hex 2f4 #define verboseTLE8888_offset 744 #define verboseTLE8888_offset_hex 2e8 #define verboseTriggerSynchDetails_offset 1476 diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 5e05565f73..cef3c5a18b 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -667,6 +667,9 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->canWriteEnabled = true; engineConfiguration->canNbcType = CAN_BUS_MAZDA_RX8; + // Don't enable, but set default address + engineConfiguration->verboseCanBaseAddress = 0x200; + engineConfiguration->sdCardPeriodMs = 50; for (int i = 0; i < FSIO_COMMAND_COUNT; i++) { diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index b830d81ac7..4a03128b9f 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:25 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:14 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1299,7 +1299,7 @@ struct engine_configuration_s { bool verboseTLE8888 : 1; /** offset 744 bit 14 */ - bool unusedOldWarmupAfr : 1; + bool enableVerboseCanTx : 1; /** * +This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control. offset 744 bit 15 */ @@ -1382,7 +1382,7 @@ struct engine_configuration_s { /** * offset 756 */ - uint8_t unusedHereWeHave[4]; + uint32_t verboseCanBaseAddress; /** * offset 760 */ @@ -3236,4 +3236,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:25 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:14 EDT 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 9258f505d0..ed8467614a 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -535,6 +535,8 @@ #define enableAemXSeries_offset_hex 2e8 #define enabledStep1Limiter_offset 744 #define enabledStep1Limiter_offset_hex 2e8 +#define enableVerboseCanTx_offset 744 +#define enableVerboseCanTx_offset_hex 2e8 #define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" #define ENGINE_NOISE_CURVE_SIZE 8 #define engineChartSize_offset 1480 @@ -2150,14 +2152,10 @@ #define unusedFlexFuelSensor_offset_hex c1c #define unusedFormerWarmupAfrPid_offset 1773 #define unusedFormerWarmupAfrPid_offset_hex 6ed -#define unusedHereWeHave_offset 756 -#define unusedHereWeHave_offset_hex 2f4 #define unusedmiataNb2VVTRatioFrom_offset 820 #define unusedmiataNb2VVTRatioFrom_offset_hex 334 #define unusedmiataNb2VVTRatioTo_offset 824 #define unusedmiataNb2VVTRatioTo_offset_hex 338 -#define unusedOldWarmupAfr_offset 744 -#define unusedOldWarmupAfr_offset_hex 2e8 #define unusedSpiPadding4_offset 2593 #define unusedSpiPadding4_offset_hex a21 #define unusedSpiPadding5_offset 2713 @@ -2257,6 +2255,8 @@ #define vehicleSpeedSensorInputPin_offset_hex 3c8 #define veLoadBins_offset 18464 #define veLoadBins_offset_hex 4820 +#define verboseCanBaseAddress_offset 756 +#define verboseCanBaseAddress_offset_hex 2f4 #define verboseTLE8888_offset 744 #define verboseTLE8888_offset_hex 2e8 #define verboseTriggerSynchDetails_offset 1476 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 0d48bbd614..72581d3cc2 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -643,7 +643,7 @@ bit is_enabled_spi_2 bit useTpicAdvancedMode; bit useLcdScreen; bit verboseTLE8888; - bit unusedOldWarmupAfr; + bit enableVerboseCanTx; bit onOffAlternatorLogic; +This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control. bit isCJ125Enabled bit vvtCamSensorUseRise;+Use rise or fall signal front @@ -669,7 +669,8 @@ bit is_enabled_spi_2 brain_pin_e hip9011IntHoldPin; pin_output_mode_e hip9011IntHoldPinMode; - uint8_t[4] unusedHereWeHave + ! 536870911 = 2^29-1, the maximum valid extended ID + uint32_t verboseCanBaseAddress;;"", 1, 0, 0, 536870911, 0 int unrealisticRpmThreashold; diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index c355f512dc..ace55572ec 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:25 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:14 EDT 2020 pageSize = 20000 page = 1 @@ -378,7 +378,7 @@ page = 1 useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" + enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping unusedHereWeHave offset 756 + verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" @@ -3453,6 +3453,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Can Read Enabled", canReadEnabled field = "Can Write Enabled", canWriteEnabled field = "Can Nbc Type", canNbcType + field = "Enable rusEfi CAN data", enableVerboseCanTx + field = "rusEfi CAN data base address", verboseCanBaseAddress field = "Can Sleep Period", canSleepPeriodMs field = "RX pin", canRxPin field = "TX pin", canTxPin diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index e5c51e569f..aced0d4f78 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2322,6 +2322,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Can Read Enabled", canReadEnabled field = "Can Write Enabled", canWriteEnabled field = "Can Nbc Type", canNbcType + field = "Enable rusEfi CAN data", enableVerboseCanTx + field = "rusEfi CAN data base address", verboseCanBaseAddress field = "Can Sleep Period", canSleepPeriodMs field = "RX pin", canRxPin field = "TX pin", canTxPin diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index e99467b4ed..c6e91a0090 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:30 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:21 EDT 2020 pageSize = 20000 page = 1 @@ -378,7 +378,7 @@ page = 1 useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" + enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping unusedHereWeHave offset 756 + verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" @@ -3453,6 +3453,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Can Read Enabled", canReadEnabled field = "Can Write Enabled", canWriteEnabled field = "Can Nbc Type", canNbcType + field = "Enable rusEfi CAN data", enableVerboseCanTx + field = "rusEfi CAN data base address", verboseCanBaseAddress field = "Can Sleep Period", canSleepPeriodMs field = "RX pin", canRxPin field = "TX pin", canTxPin diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 2dc9d9178b..4046e748c1 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Mar 18 15:54:39 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Mar 19 09:14:30 EDT 2020 pageSize = 20000 page = 1 @@ -378,7 +378,7 @@ page = 1 useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" + enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping unusedHereWeHave offset 756 + verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" @@ -3453,6 +3453,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Can Read Enabled", canReadEnabled field = "Can Write Enabled", canWriteEnabled field = "Can Nbc Type", canNbcType + field = "Enable rusEfi CAN data", enableVerboseCanTx + field = "rusEfi CAN data base address", verboseCanBaseAddress field = "Can Sleep Period", canSleepPeriodMs field = "RX pin", canRxPin field = "TX pin", canTxPin diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 920ed7a1d9..0c51a9a17e 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:27 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:18 EDT 2020 pageSize = 20000 page = 1 @@ -378,7 +378,7 @@ page = 1 useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" + enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping unusedHereWeHave offset 756 + verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" @@ -3435,6 +3435,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Can Read Enabled", canReadEnabled field = "Can Write Enabled", canWriteEnabled field = "Can Nbc Type", canNbcType + field = "Enable rusEfi CAN data", enableVerboseCanTx + field = "rusEfi CAN data base address", verboseCanBaseAddress field = "Can Sleep Period", canSleepPeriodMs field = "RX pin", canRxPin field = "TX pin", canTxPin diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 9ebbdcd9df..8ace7d3b8f 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:33 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:24 EDT 2020 pageSize = 20000 page = 1 @@ -378,7 +378,7 @@ page = 1 useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" + enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping unusedHereWeHave offset 756 + verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" @@ -3449,6 +3449,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Can Read Enabled", canReadEnabled field = "Can Write Enabled", canWriteEnabled field = "Can Nbc Type", canNbcType + field = "Enable rusEfi CAN data", enableVerboseCanTx + field = "rusEfi CAN data base address", verboseCanBaseAddress field = "Can Sleep Period", canSleepPeriodMs field = "RX pin", canRxPin field = "TX pin", canTxPin diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index a7bfcd1190..052808c88a 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:36 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:27 EDT 2020 pageSize = 20000 page = 1 @@ -378,7 +378,7 @@ page = 1 useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" useLcdScreen = bits, U32, 744, [12:12], "false", "true" verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - unusedOldWarmupAfr = bits, U32, 744, [14:14], "false", "true" + enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" @@ -404,7 +404,7 @@ page = 1 hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" -;no TS info - skipping unusedHereWeHave offset 756 + verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 ;no TS info - skipping unrealisticRpmThreashold offset 760 gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" @@ -3443,6 +3443,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Can Read Enabled", canReadEnabled field = "Can Write Enabled", canWriteEnabled field = "Can Nbc Type", canNbcType + field = "Enable rusEfi CAN data", enableVerboseCanTx + field = "rusEfi CAN data base address", verboseCanBaseAddress field = "Can Sleep Period", canSleepPeriodMs field = "RX pin", canRxPin field = "TX pin", canTxPin diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 9afe19eaaa..33d5c0efcf 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Wed Mar 18 15:54:25 EDT 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:14 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -345,6 +345,7 @@ public class Fields { public static final int electronicThrottlePin1Mode_offset = 672; public static final int enableAemXSeries_offset = 744; public static final int enabledStep1Limiter_offset = 744; + public static final int enableVerboseCanTx_offset = 744; public static final int ENGINE_NOISE_CURVE_SIZE = 8; public static final int engineChartSize_offset = 1480; public static final int engineConfiguration_offset = 0; @@ -1406,12 +1407,10 @@ public class Fields { public static final int unusedErrorPin_offset = 2040; public static final int unusedFlexFuelSensor_offset = 3100; public static final int unusedFormerWarmupAfrPid_offset = 1773; - public static final int unusedHereWeHave_offset = 756; public static final int unusedmiataNb2VVTRatioFrom_offset = 820; public static final int unusedmiataNb2VVTRatioFrom_offset_hex = 334; public static final int unusedmiataNb2VVTRatioTo_offset = 824; public static final int unusedmiataNb2VVTRatioTo_offset_hex = 338; - public static final int unusedOldWarmupAfr_offset = 744; public static final int unusedSpiPadding4_offset = 2593; public static final int unusedSpiPadding5_offset = 2713; public static final int unusedSpiPadding7_offset = 4005; @@ -1464,6 +1463,7 @@ public class Fields { public static final int vehicleSpeedSensorInputPin_offset = 968; public static final int veLoadBins_offset = 18464; public static final int veLoadBins_offset_hex = 4820; + public static final int verboseCanBaseAddress_offset = 756; public static final int verboseTLE8888_offset = 744; public static final int verboseTriggerSynchDetails_offset = 1476; public static final int veRpmBins_offset = 18528; @@ -1768,7 +1768,7 @@ public class Fields { public static final Field USETPICADVANCEDMODE = Field.create("USETPICADVANCEDMODE", 744, FieldType.BIT, 11); public static final Field USELCDSCREEN = Field.create("USELCDSCREEN", 744, FieldType.BIT, 12); public static final Field VERBOSETLE8888 = Field.create("VERBOSETLE8888", 744, FieldType.BIT, 13); - public static final Field UNUSEDOLDWARMUPAFR = Field.create("UNUSEDOLDWARMUPAFR", 744, FieldType.BIT, 14); + public static final Field ENABLEVERBOSECANTX = Field.create("ENABLEVERBOSECANTX", 744, FieldType.BIT, 14); public static final Field ONOFFALTERNATORLOGIC = Field.create("ONOFFALTERNATORLOGIC", 744, FieldType.BIT, 15); public static final Field ISCJ125ENABLED = Field.create("ISCJ125ENABLED", 744, FieldType.BIT, 16); public static final Field VVTCAMSENSORUSERISE = Field.create("VVTCAMSENSORUSERISE", 744, FieldType.BIT, 17); @@ -1794,6 +1794,7 @@ public class Fields { public static final Field HIP9011CSPIN = Field.create("HIP9011CSPIN", 753, FieldType.INT8, brain_pin_e); public static final Field HIP9011INTHOLDPIN = Field.create("HIP9011INTHOLDPIN", 754, FieldType.INT8, brain_pin_e); public static final Field HIP9011INTHOLDPINMODE = Field.create("HIP9011INTHOLDPINMODE", 755, FieldType.INT8, pin_output_mode_e); + public static final Field VERBOSECANBASEADDRESS = Field.create("VERBOSECANBASEADDRESS", 756, FieldType.INT); public static final Field UNREALISTICRPMTHREASHOLD = Field.create("UNREALISTICRPMTHREASHOLD", 760, FieldType.INT); public static final Field GPIOPINMODES1 = Field.create("GPIOPINMODES1", 764, FieldType.INT8, pin_output_mode_e); public static final Field GPIOPINMODES2 = Field.create("GPIOPINMODES2", 765, FieldType.INT8, pin_output_mode_e); @@ -2671,7 +2672,7 @@ public class Fields { USETPICADVANCEDMODE, USELCDSCREEN, VERBOSETLE8888, - UNUSEDOLDWARMUPAFR, + ENABLEVERBOSECANTX, ONOFFALTERNATORLOGIC, ISCJ125ENABLED, VVTCAMSENSORUSERISE, @@ -2697,6 +2698,7 @@ public class Fields { HIP9011CSPIN, HIP9011INTHOLDPIN, HIP9011INTHOLDPINMODE, + VERBOSECANBASEADDRESS, UNREALISTICRPMTHREASHOLD, GPIOPINMODES1, GPIOPINMODES2, From 30cdeb0d7fae93de0d63a891aabe31a8d37990b7 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 19 Mar 2020 11:01:07 -0700 Subject: [PATCH 155/171] split out can tx logic (#1197) * move to can folder * split out can rx * only print in debug mode * guard on feature flag * split out tx * headers * headers Co-authored-by: Matthew Kennedy --- firmware/controllers/can/can.h | 8 ++ firmware/controllers/can/can_dash.cpp | 143 +++++++++++++++++++++++ firmware/controllers/can/can_dash.h | 13 +++ firmware/controllers/can/can_tx.cpp | 48 ++++++++ firmware/controllers/controllers.mk | 4 +- firmware/hw_layer/drivers/can/can_hw.cpp | 125 +------------------- firmware/hw_layer/drivers/can/can_hw.h | 25 ---- 7 files changed, 216 insertions(+), 150 deletions(-) create mode 100644 firmware/controllers/can/can_dash.cpp create mode 100644 firmware/controllers/can/can_dash.h create mode 100644 firmware/controllers/can/can_tx.cpp diff --git a/firmware/controllers/can/can.h b/firmware/controllers/can/can.h index 3f9f766a0c..d49705b853 100644 --- a/firmware/controllers/can/can.h +++ b/firmware/controllers/can/can.h @@ -9,5 +9,13 @@ #include "hal.h" +#include "periodic_thread_controller.h" + class Logging; void processCanRxMessage(const CANRxFrame& msg, Logging* logger); + +class CanWrite final : public PeriodicController<256> { +public: + CanWrite(); + void PeriodicTask(efitime_t nowNt) override; +}; diff --git a/firmware/controllers/can/can_dash.cpp b/firmware/controllers/can/can_dash.cpp new file mode 100644 index 0000000000..e7ea76d26e --- /dev/null +++ b/firmware/controllers/can/can_dash.cpp @@ -0,0 +1,143 @@ +/** + * @file can_dash.cpp + * + * This file handles transmission of ECU data to various OE dashboards. + * + * @date Mar 19, 2020 + * @author Matthew Kennedy, (c) 2020 + */ + +#include "globalaccess.h" +#if EFI_CAN_SUPPORT + +#include "engine.h" +#include "can.h" +#include "can_hw.h" +#include "can_dash.h" + + +#include "allsensors.h" +#include "vehicle_speed.h" + +EXTERN_ENGINE; + +// CAN Bus ID for broadcast +/** + * e46 data is from http://forums.bimmerforums.com/forum/showthread.php?1887229 + * + * Same for Mini Cooper? http://vehicle-reverse-engineering.wikia.com/wiki/MINI + * + * All the below packets are using 500kb/s + * + */ +#define CAN_BMW_E46_SPEED 0x153 +#define CAN_BMW_E46_RPM 0x316 +#define CAN_BMW_E46_DME2 0x329 +#define CAN_BMW_E46_CLUSTER_STATUS 0x613 +#define CAN_BMW_E46_CLUSTER_STATUS_2 0x615 +#define CAN_FIAT_MOTOR_INFO 0x561 +#define CAN_MAZDA_RX_RPM_SPEED 0x201 +#define CAN_MAZDA_RX_STEERING_WARNING 0x300 +#define CAN_MAZDA_RX_STATUS_1 0x212 +#define CAN_MAZDA_RX_STATUS_2 0x420 +// https://wiki.openstreetmap.org/wiki/VW-CAN +#define CAN_VAG_RPM 0x280 +#define CAN_VAG_CLT 0x288 +#define CAN_VAG_CLT_V2 0x420 +#define CAN_VAG_IMMO 0x3D0 + +extern CANTxFrame txmsg; + +static void setShortValue(CANTxFrame *txmsg, int value, int offset) { + txmsg->data8[offset] = value; + txmsg->data8[offset + 1] = value >> 8; +} + +void canDashboardBMW(void) { + //BMW Dashboard + commonTxInit(CAN_BMW_E46_SPEED); + setShortValue(&txmsg, 10 * 8, 1); + sendCanMessage(); + + commonTxInit(CAN_BMW_E46_RPM); + setShortValue(&txmsg, (int) (GET_RPM() * 6.4), 2); + sendCanMessage(); + + commonTxInit(CAN_BMW_E46_DME2); + setShortValue(&txmsg, (int) ((getCoolantTemperature() + 48.373) / 0.75), 1); + sendCanMessage(); +} + +void canMazdaRX8(void) { + commonTxInit(CAN_MAZDA_RX_STEERING_WARNING); + // todo: something needs to be set here? see http://rusefi.com/wiki/index.php?title=Vehicle:Mazda_Rx8_2004 + sendCanMessage(); + + commonTxInit(CAN_MAZDA_RX_RPM_SPEED); + + float kph = getVehicleSpeed(); + + setShortValue(&txmsg, SWAP_UINT16(GET_RPM() * 4), 0); + setShortValue(&txmsg, 0xFFFF, 2); + setShortValue(&txmsg, SWAP_UINT16((int )(100 * kph + 10000)), 4); + setShortValue(&txmsg, 0, 6); + sendCanMessage(); + + commonTxInit(CAN_MAZDA_RX_STATUS_1); + txmsg.data8[0] = 0xFE; //Unknown + txmsg.data8[1] = 0xFE; //Unknown + txmsg.data8[2] = 0xFE; //Unknown + txmsg.data8[3] = 0x34; //DSC OFF in combo with byte 5 Live data only seen 0x34 + txmsg.data8[4] = 0x00; // B01000000; // Brake warning B00001000; //ABS warning + txmsg.data8[5] = 0x40; // TCS in combo with byte 3 + txmsg.data8[6] = 0x00; // Unknown + txmsg.data8[7] = 0x00; // Unused + sendCanMessage(); + + commonTxInit(CAN_MAZDA_RX_STATUS_2); + txmsg.data8[0] = (uint8_t)(getCoolantTemperature() + 69); //temp gauge //~170 is red, ~165 last bar, 152 centre, 90 first bar, 92 second bar + txmsg.data8[1] = ((int16_t)(engine->engineState.vssEventCounter*(engineConfiguration->vehicleSpeedCoef*0.277*2.58))) & 0xff; + txmsg.data8[2] = 0x00; // unknown + txmsg.data8[3] = 0x00; //unknown + txmsg.data8[4] = 0x01; //Oil Pressure (not really a gauge) + txmsg.data8[5] = 0x00; //check engine light + txmsg.data8[6] = 0x00; //Coolant, oil and battery + if ((GET_RPM()>0) && (engine->sensors.vBatt<13)) { + setTxBit(6, 6); // battery light + } + if (getCoolantTemperature() > 105) { + setTxBit(6, 1); // coolant light, 101 - red zone, light means its get too hot + } + //oil pressure warning lamp bit is 7 + txmsg.data8[7] = 0x00; //unused + sendCanMessage(); +} + +void canDashboardFiat(void) { + //Fiat Dashboard + commonTxInit(CAN_FIAT_MOTOR_INFO); + setShortValue(&txmsg, (int) (getCoolantTemperature() - 40), 3); //Coolant Temp + setShortValue(&txmsg, GET_RPM() / 32, 6); //RPM + sendCanMessage(); +} + +void canDashboardVAG(void) { + //VAG Dashboard + commonTxInit(CAN_VAG_RPM); + setShortValue(&txmsg, GET_RPM() * 4, 2); //RPM + sendCanMessage(); + + commonTxInit(CAN_VAG_CLT); + setShortValue(&txmsg, (int) ((getCoolantTemperature() + 48.373) / 0.75), 1); //Coolant Temp + sendCanMessage(); + + commonTxInit(CAN_VAG_CLT_V2); + setShortValue(&txmsg, (int) ((getCoolantTemperature() + 48.373) / 0.75), 4); //Coolant Temp + sendCanMessage(); + + commonTxInit(CAN_VAG_IMMO); + setShortValue(&txmsg, 0x80, 1); + sendCanMessage(); +} + +#endif // EFI_CAN_SUPPORT diff --git a/firmware/controllers/can/can_dash.h b/firmware/controllers/can/can_dash.h new file mode 100644 index 0000000000..234cf8692f --- /dev/null +++ b/firmware/controllers/can/can_dash.h @@ -0,0 +1,13 @@ +/** + * @file can_dash.h + * + * @date Mar 19, 2020 + * @author Matthew Kennedy, (c) 2020 + */ + +#pragma once + +void canDashboardBMW(); +void canDashboardFiat(); +void canDashboardVAG(); +void canMazdaRX8(); diff --git a/firmware/controllers/can/can_tx.cpp b/firmware/controllers/can/can_tx.cpp new file mode 100644 index 0000000000..a4dfac4be2 --- /dev/null +++ b/firmware/controllers/can/can_tx.cpp @@ -0,0 +1,48 @@ +/** + * @file can_tx.cpp + * + * CAN transmission handling. This file handles the dispatch of various outgoing regularly scheduled CAN message types. + * + * @date Mar 19, 2020 + * @author Matthew Kennedy, (c) 2020 + */ + +#include "globalaccess.h" +#if EFI_CAN_SUPPORT + +#include "engine.h" +#include "can.h" +#include "can_hw.h" +#include "can_dash.h" +#include "obd2.h" + +EXTERN_ENGINE; + +CanWrite::CanWrite() + : PeriodicController("CAN TX", NORMALPRIO, 50) +{ +} + +void CanWrite::PeriodicTask(efitime_t nowNt) { + UNUSED(nowNt); + + // Transmit dash data, if enabled + switch (CONFIG(canNbcType)) { + case CAN_BUS_NBC_BMW: + canDashboardBMW(); + break; + case CAN_BUS_NBC_FIAT: + canDashboardFiat(); + break; + case CAN_BUS_NBC_VAG: + canDashboardVAG(); + break; + case CAN_BUS_MAZDA_RX8: + canMazdaRX8(); + break; + default: + break; + } +} + +#endif // EFI_CAN_SUPPORT diff --git a/firmware/controllers/controllers.mk b/firmware/controllers/controllers.mk index 2ca5197ff8..b2b3bda907 100644 --- a/firmware/controllers/controllers.mk +++ b/firmware/controllers/controllers.mk @@ -36,9 +36,11 @@ CONTROLLERS_SRC_CPP = \ $(CONTROLLERS_DIR)/injector_central.cpp \ $(CONTROLLERS_DIR)/can/obd2.cpp \ $(CONTROLLERS_DIR)/can/can_rx.cpp \ + $(CONTROLLERS_DIR)/can/can_tx.cpp \ + $(CONTROLLERS_DIR)/can/can_dash.cpp \ $(CONTROLLERS_DIR)/engine_controller.cpp \ $(CONTROLLERS_DIR)/persistent_store.cpp \ - + CONTROLLERS_INC=\ $(CONTROLLERS_DIR) \ diff --git a/firmware/hw_layer/drivers/can/can_hw.cpp b/firmware/hw_layer/drivers/can/can_hw.cpp index 5f4a79defe..9133266841 100644 --- a/firmware/hw_layer/drivers/can/can_hw.cpp +++ b/firmware/hw_layer/drivers/can/can_hw.cpp @@ -15,14 +15,12 @@ #include "can.h" #include "engine_configuration.h" -#include "periodic_thread_controller.h" #include "pin_repository.h" #include "can_hw.h" #include "can_msg_tx.h" #include "string.h" #include "mpu_util.h" -#include "allsensors.h" -#include "vehicle_speed.h" +#include "engine.h" EXTERN_ENGINE ; @@ -74,11 +72,6 @@ CAN_BTR_1k0 }; CANTxFrame txmsg; -static void setShortValue(CANTxFrame *txmsg, int value, int offset) { - txmsg->data8[offset] = value; - txmsg->data8[offset + 1] = value >> 8; -} - void setTxBit(int offset, int index) { txmsg.data8[offset] = txmsg.data8[offset] | (1 << index); } @@ -112,122 +105,6 @@ void sendCanMessage(int size) { } } -static void canDashboardBMW(void) { - //BMW Dashboard - commonTxInit(CAN_BMW_E46_SPEED); - setShortValue(&txmsg, 10 * 8, 1); - sendCanMessage(); - - commonTxInit(CAN_BMW_E46_RPM); - setShortValue(&txmsg, (int) (GET_RPM() * 6.4), 2); - sendCanMessage(); - - commonTxInit(CAN_BMW_E46_DME2); - setShortValue(&txmsg, (int) ((getCoolantTemperature() + 48.373) / 0.75), 1); - sendCanMessage(); -} - -static void canMazdaRX8(void) { - commonTxInit(CAN_MAZDA_RX_STEERING_WARNING); - // todo: something needs to be set here? see http://rusefi.com/wiki/index.php?title=Vehicle:Mazda_Rx8_2004 - sendCanMessage(); - - commonTxInit(CAN_MAZDA_RX_RPM_SPEED); - - float kph = getVehicleSpeed(); - - setShortValue(&txmsg, SWAP_UINT16(GET_RPM() * 4), 0); - setShortValue(&txmsg, 0xFFFF, 2); - setShortValue(&txmsg, SWAP_UINT16((int )(100 * kph + 10000)), 4); - setShortValue(&txmsg, 0, 6); - sendCanMessage(); - - commonTxInit(CAN_MAZDA_RX_STATUS_1); - txmsg.data8[0] = 0xFE; //Unknown - txmsg.data8[1] = 0xFE; //Unknown - txmsg.data8[2] = 0xFE; //Unknown - txmsg.data8[3] = 0x34; //DSC OFF in combo with byte 5 Live data only seen 0x34 - txmsg.data8[4] = 0x00; // B01000000; // Brake warning B00001000; //ABS warning - txmsg.data8[5] = 0x40; // TCS in combo with byte 3 - txmsg.data8[6] = 0x00; // Unknown - txmsg.data8[7] = 0x00; // Unused - sendCanMessage(); - - commonTxInit(CAN_MAZDA_RX_STATUS_2); - txmsg.data8[0] = (uint8_t)(getCoolantTemperature() + 69); //temp gauge //~170 is red, ~165 last bar, 152 centre, 90 first bar, 92 second bar - txmsg.data8[1] = ((int16_t)(engine->engineState.vssEventCounter*(engineConfiguration->vehicleSpeedCoef*0.277*2.58))) & 0xff; - txmsg.data8[2] = 0x00; // unknown - txmsg.data8[3] = 0x00; //unknown - txmsg.data8[4] = 0x01; //Oil Pressure (not really a gauge) - txmsg.data8[5] = 0x00; //check engine light - txmsg.data8[6] = 0x00; //Coolant, oil and battery - if ((GET_RPM()>0) && (engine->sensors.vBatt<13)) { - setTxBit(6, 6); // battery light - } - if (getCoolantTemperature() > 105) { - setTxBit(6, 1); // coolant light, 101 - red zone, light means its get too hot - } - //oil pressure warning lamp bit is 7 - txmsg.data8[7] = 0x00; //unused - sendCanMessage(); -} - -static void canDashboardFiat(void) { - //Fiat Dashboard - commonTxInit(CAN_FIAT_MOTOR_INFO); - setShortValue(&txmsg, (int) (getCoolantTemperature() - 40), 3); //Coolant Temp - setShortValue(&txmsg, GET_RPM() / 32, 6); //RPM - sendCanMessage(); -} - -static void canDashboardVAG(void) { - //VAG Dashboard - commonTxInit(CAN_VAG_RPM); - setShortValue(&txmsg, GET_RPM() * 4, 2); //RPM - sendCanMessage(); - - commonTxInit(CAN_VAG_CLT); - setShortValue(&txmsg, (int) ((getCoolantTemperature() + 48.373) / 0.75), 1); //Coolant Temp - sendCanMessage(); - - commonTxInit(CAN_VAG_CLT_V2); - setShortValue(&txmsg, (int) ((getCoolantTemperature() + 48.373) / 0.75), 4); //Coolant Temp - sendCanMessage(); - - commonTxInit(CAN_VAG_IMMO); - setShortValue(&txmsg, 0x80, 1); - sendCanMessage(); -} - -class CanWrite final : public PeriodicController<256> { -public: - CanWrite() - : PeriodicController("CAN TX", NORMALPRIO, 50) - { - } - - void PeriodicTask(efitime_t nowNt) { - UNUSED(nowNt); - - switch (engineConfiguration->canNbcType) { - case CAN_BUS_NBC_BMW: - canDashboardBMW(); - break; - case CAN_BUS_NBC_FIAT: - canDashboardFiat(); - break; - case CAN_BUS_NBC_VAG: - canDashboardVAG(); - break; - case CAN_BUS_MAZDA_RX8: - canMazdaRX8(); - break; - default: - break; - } - } -}; - class CanRead final : public ThreadController<256> { public: CanRead() diff --git a/firmware/hw_layer/drivers/can/can_hw.h b/firmware/hw_layer/drivers/can/can_hw.h index ce4ec27bbc..e524327695 100644 --- a/firmware/hw_layer/drivers/can/can_hw.h +++ b/firmware/hw_layer/drivers/can/can_hw.h @@ -12,31 +12,6 @@ #include "tunerstudio_configuration.h" #endif /* EFI_TUNER_STUDIO */ -// CAN Bus ID for broadcast -/** - * e46 data is from http://forums.bimmerforums.com/forum/showthread.php?1887229 - * - * Same for Mini Cooper? http://vehicle-reverse-engineering.wikia.com/wiki/MINI - * - * All the below packets are using 500kb/s - * - */ -#define CAN_BMW_E46_SPEED 0x153 -#define CAN_BMW_E46_RPM 0x316 -#define CAN_BMW_E46_DME2 0x329 -#define CAN_BMW_E46_CLUSTER_STATUS 0x613 -#define CAN_BMW_E46_CLUSTER_STATUS_2 0x615 -#define CAN_FIAT_MOTOR_INFO 0x561 -#define CAN_MAZDA_RX_RPM_SPEED 0x201 -#define CAN_MAZDA_RX_STEERING_WARNING 0x300 -#define CAN_MAZDA_RX_STATUS_1 0x212 -#define CAN_MAZDA_RX_STATUS_2 0x420 -// https://wiki.openstreetmap.org/wiki/VW-CAN -#define CAN_VAG_RPM 0x280 -#define CAN_VAG_CLT 0x288 -#define CAN_VAG_CLT_V2 0x420 -#define CAN_VAG_IMMO 0x3D0 - void initCan(void); void commonTxInit(int eid); void sendCanMessage(int size = 8); From 7b44f618e74d1982283e61bf4a189db84c111435 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 19 Mar 2020 14:58:46 -0700 Subject: [PATCH 156/171] custom verbose can format (#1200) * config * ts * default cfg * hand generate * tx struct helper * add data sending * wire up * value_or helper * add file * more sensors * header * compactify * add status frame Co-authored-by: Matthew Kennedy --- firmware/controllers/can/can_tx.cpp | 5 + firmware/controllers/can/can_verbose.cpp | 146 +++++++++++++++++++++ firmware/controllers/controllers.mk | 1 + firmware/controllers/sensors/sensor.h | 5 + firmware/hw_layer/drivers/can/can_msg_tx.h | 11 ++ 5 files changed, 168 insertions(+) create mode 100644 firmware/controllers/can/can_verbose.cpp diff --git a/firmware/controllers/can/can_tx.cpp b/firmware/controllers/can/can_tx.cpp index a4dfac4be2..09f6ed0eb7 100644 --- a/firmware/controllers/can/can_tx.cpp +++ b/firmware/controllers/can/can_tx.cpp @@ -26,6 +26,11 @@ CanWrite::CanWrite() void CanWrite::PeriodicTask(efitime_t nowNt) { UNUSED(nowNt); + if (CONFIG(enableVerboseCanTx)) { + void sendCanVerbose(); + sendCanVerbose(); + } + // Transmit dash data, if enabled switch (CONFIG(canNbcType)) { case CAN_BUS_NBC_BMW: diff --git a/firmware/controllers/can/can_verbose.cpp b/firmware/controllers/can/can_verbose.cpp new file mode 100644 index 0000000000..9d3aa852ec --- /dev/null +++ b/firmware/controllers/can/can_verbose.cpp @@ -0,0 +1,146 @@ + +#include "globalaccess.h" +#if EFI_CAN_SUPPORT + +#include "engine.h" + +#include "scaled_channel.h" +#include "can_msg_tx.h" +#include "sensor.h" +#include "allsensors.h" +#include "fuel_math.h" +#include "spark_logic.h" +#include "vehicle_speed.h" + +EXTERN_ENGINE; + +struct Status { + uint16_t warningCounter; + uint16_t lastErrorCode; + + uint8_t revLimit : 1; + uint8_t mainRelay : 1; + uint8_t fuelPump : 1; + uint8_t checkEngine : 1; + uint8_t o2Heater : 1; + + uint8_t pad6 : 1; + uint8_t pad7 : 1; + uint8_t pad8 : 1; + + uint8_t pad[3]; +}; + +static void populateFrame(Status& msg) { + msg.warningCounter = engine->engineState.warnings.warningCounter; + msg.lastErrorCode = engine->engineState.warnings.lastErrorCode; + + msg.revLimit = GET_RPM() > CONFIG(rpmHardLimit); + msg.mainRelay = enginePins.mainRelay.getLogicValue(); + msg.fuelPump = enginePins.fuelPumpRelay.getLogicValue(); + msg.checkEngine = enginePins.checkEnginePin.getLogicValue(); + msg.o2Heater = enginePins.o2heater.getLogicValue(); +} + +struct Speeds { + uint16_t rpm; + scaled_angle timing; + scaled_channel injDuty; + scaled_channel coilDuty; + scaled_channel vssKph; + uint8_t pad[1]; +}; + +static void populateFrame(Speeds& msg) { + auto rpm = GET_RPM(); + msg.rpm = rpm; + + auto timing = engine->engineState.timingAdvance; + msg.timing = timing > 360 ? timing - 720 : timing; + + msg.injDuty = getInjectorDutyCycle(rpm); + msg.coilDuty = getCoilDutyCycle(rpm); + + msg.vssKph = getVehicleSpeed(); +} + +struct PedalAndTps { + scaled_percent pedal; + scaled_percent tps1; + scaled_percent tps2; + uint8_t pad[2]; +}; + +static void populateFrame(PedalAndTps& msg) +{ + msg.pedal = getPedalPosition(); + msg.tps1 = Sensor::get(SensorType::Tps1).value_or(-1); + msg.tps2 = Sensor::get(SensorType::Tps2).value_or(-1); +} + +struct Sensors1 { + scaled_pressure map; + scaled_channel clt; + scaled_channel iat; + scaled_channel aux1; + scaled_channel aux2; + scaled_channel mcuTemp; + scaled_channel fuelLevel; +}; + +static void populateFrame(Sensors1& msg) { + msg.map = getMap(); + + msg.clt = getCoolantTemperature() + 40; + msg.iat = getIntakeAirTemperature() + 40; + + // todo: does aux temp even work? + msg.aux1 = 0 + 40; + msg.aux2 = 0 + 40; + + msg.mcuTemp = getMCUInternalTemperature(); + msg.fuelLevel = engine->sensors.fuelTankLevel; +} + +struct Sensors2 { + scaled_afr afr; + scaled_pressure oilPressure; + scaled_angle vvtPos; + scaled_voltage vbatt; +}; + +static void populateFrame(Sensors2& msg) { + msg.afr = getAfr(); + msg.oilPressure = Sensor::get(SensorType::OilPressure).value_or(-1); + msg.vvtPos = engine->triggerCentral.getVVTPosition(); + msg.vbatt = getVBatt(); +} + +struct Fueling { + scaled_channel cylAirmass; + scaled_channel estAirflow; + scaled_ms fuel_pulse; + scaled_percent stft; +}; + +static void populateFrame(Fueling& msg) { + msg.cylAirmass = engine->engineState.sd.airMassInOneCylinder; + msg.estAirflow = engine->engineState.airFlow; + msg.fuel_pulse = engine->actualLastInjection; + + // todo + msg.stft = 0; +} + +void sendCanVerbose() { + auto base = CONFIG(verboseCanBaseAddress); + + transmitStruct (base + 0); + transmitStruct (base + 1); + transmitStruct (base + 2); + transmitStruct (base + 3); + transmitStruct (base + 4); + transmitStruct (base + 5); +} + +#endif // EFI_CAN_SUPPORT diff --git a/firmware/controllers/controllers.mk b/firmware/controllers/controllers.mk index b2b3bda907..9a4d4ad22e 100644 --- a/firmware/controllers/controllers.mk +++ b/firmware/controllers/controllers.mk @@ -35,6 +35,7 @@ CONTROLLERS_SRC_CPP = \ $(CONTROLLERS_DIR)/flash_main.cpp \ $(CONTROLLERS_DIR)/injector_central.cpp \ $(CONTROLLERS_DIR)/can/obd2.cpp \ + $(CONTROLLERS_DIR)/can/can_verbose.cpp \ $(CONTROLLERS_DIR)/can/can_rx.cpp \ $(CONTROLLERS_DIR)/can/can_tx.cpp \ $(CONTROLLERS_DIR)/can/can_dash.cpp \ diff --git a/firmware/controllers/sensors/sensor.h b/firmware/controllers/sensors/sensor.h index fac4229b33..63c2da2a42 100644 --- a/firmware/controllers/sensors/sensor.h +++ b/firmware/controllers/sensors/sensor.h @@ -59,6 +59,11 @@ struct SensorResult { constexpr explicit operator bool() const { return Valid; } + + // Easy default value handling + constexpr float value_or(float valueIfInvalid) const { + return Valid ? Value : valueIfInvalid; + } }; // Fwd declare - nobody outside of Sensor.cpp needs to see inside this type diff --git a/firmware/hw_layer/drivers/can/can_msg_tx.h b/firmware/hw_layer/drivers/can/can_msg_tx.h index 15e30b37d9..178b1dc9af 100644 --- a/firmware/hw_layer/drivers/can/can_msg_tx.h +++ b/firmware/hw_layer/drivers/can/can_msg_tx.h @@ -83,4 +83,15 @@ public: TData* operator->() { return reinterpret_cast(&m_frame.data8); } + + TData& get() { + return *reinterpret_cast(&m_frame.data8); + } }; + +template +void transmitStruct(uint32_t eid) +{ + CanTxTyped frame(eid); + populateFrame(frame.get()); +} From e76f567608e05b47129b20f59c726badb302528c Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 19 Mar 2020 16:29:56 -0700 Subject: [PATCH 157/171] Grow CAN TX stack (#1201) * grow * check mock first --- firmware/controllers/can/can.h | 2 +- firmware/controllers/sensors/tps.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/can/can.h b/firmware/controllers/can/can.h index d49705b853..261176de79 100644 --- a/firmware/controllers/can/can.h +++ b/firmware/controllers/can/can.h @@ -14,7 +14,7 @@ class Logging; void processCanRxMessage(const CANRxFrame& msg, Logging* logger); -class CanWrite final : public PeriodicController<256> { +class CanWrite final : public PeriodicController<512> { public: CanWrite(); void PeriodicTask(efitime_t nowNt) override; diff --git a/firmware/controllers/sensors/tps.cpp b/firmware/controllers/sensors/tps.cpp index b9f0426de5..9f1e799a46 100644 --- a/firmware/controllers/sensors/tps.cpp +++ b/firmware/controllers/sensors/tps.cpp @@ -217,6 +217,12 @@ percent_t getPedalPosition(DECLARE_ENGINE_PARAMETER_SIGNATURE) { if (mockPedalPosition != MOCK_UNDEFINED) { return mockPedalPosition; } + + // Don't choke without a pedal set + if (CONFIG(throttlePedalPositionAdcChannel) == EFI_ADC_NONE) { + return 0; + } + DISPLAY_TAG(PEDAL_SECTION); DISPLAY_TEXT(Analog_MCU_reads); From d5600995e2a5bda15d4fa406cae5594325d17eec Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 19 Mar 2020 17:02:49 -0700 Subject: [PATCH 158/171] fix (#1202) * fix test * shrink memory --- firmware/controllers/engine_controller.cpp | 2 +- unit_tests/tests/test_etb.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index eec6b622bd..d97ef59708 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -828,7 +828,7 @@ void initEngineContoller(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) // help to notice when RAM usage goes up - if a code change adds to RAM usage these variables would fail // linking process which is the way to raise the alarm #ifndef RAM_UNUSED_SIZE -#define RAM_UNUSED_SIZE 14500 +#define RAM_UNUSED_SIZE 14300 #endif #ifndef CCM_UNUSED_SIZE #define CCM_UNUSED_SIZE 4100 diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index e781ab636a..178e3672c0 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -68,11 +68,13 @@ TEST(etb, singleEtbInitialization) { // todo: invoke EtbController#PeriodicTask a few times and assert that duty cycle changes } -TEST(idle, testTargetTpsIsFloatBug945) { +TEST(etb, testTargetTpsIsFloatBug945) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); + engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_0; + setMockThrottlePedalSensorVoltage(3 PASS_ENGINE_PARAMETER_SUFFIX); engine->etbControllers[0]->PeriodicTask(); ASSERT_NEAR(50, engine->engineState.targetFromTable, EPS4D); From 984445d545b5216121aff9d5b472dba942f15b4e Mon Sep 17 00:00:00 2001 From: rusEfi Date: Fri, 20 Mar 2020 00:36:22 -0400 Subject: [PATCH 159/171] v12 progress --- .../algo/engine_configuration_generated_structures.h | 6 ++++-- firmware/config/engines/bmw_m73.cpp | 10 +++++----- firmware/config/engines/bmw_m73_mre.cpp | 7 ++++++- firmware/controllers/engine_controller.cpp | 2 +- .../engine_configuration_generated_structures.h | 6 ++++-- firmware/integration/rusefi_config.txt | 4 ++-- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 3f2c2104a0..02704e3f99 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Mar 19 09:14:30 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Mar 20 00:24:38 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1428,6 +1428,7 @@ struct engine_configuration_s { */ brain_pin_e secondSolenoidPin; /** + * See also starterControlPin * offset 811 */ switch_input_pin_e startStopButton; @@ -2146,6 +2147,7 @@ struct engine_configuration_s { */ int16_t tps2Max; /** + * See also startStopButton * offset 1772 */ output_pin_e starterControlPin; @@ -3236,4 +3238,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Mar 19 09:14:30 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Mar 20 00:24:38 EDT 2020 diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index 2b1286dd94..1d081ba7b0 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -44,15 +44,15 @@ * Plug #4 40 pin * ECU pin 6: IN start signal from ignition key * ECU pin 17: OUT BLK engine speed output for gauge cluster - * ECU pin 26: IN GRN/BLK RED +12 hot in start & run + * ECU pin 26: IN GRN/BLK RED +12v hot in start & run * ECU pin 40: OUT YEL/BRN BRN starter enable * * * Plug #5 9 pin - * ECU pic 3: OUT BLK coil signal, low-side - * ECU pic 5: GND BRN ground - * ECU pic 6: OUT BLK coil signal, low-side - * ECU pic 9: OUT BLK RED coil signal, low-side + * ECU pin 3: OUT BLK coil signal, low-side + * ECU pin 5: GND BRN ground + * ECU pin 6: OUT BLK coil signal, low-side + * ECU pin 9: OUT BLK RED coil signal, low-side * * Frankenso * set engine_type 40 diff --git a/firmware/config/engines/bmw_m73_mre.cpp b/firmware/config/engines/bmw_m73_mre.cpp index 96374c1b14..9687fb9ccf 100644 --- a/firmware/config/engines/bmw_m73_mre.cpp +++ b/firmware/config/engines/bmw_m73_mre.cpp @@ -39,11 +39,13 @@ * * Plug #4 40 pin * ECU pin 6: IN ORG start signal from ignition key. Custom wiring: pulled-up thermistor wire on MRE + * ECU pin 26: IN GRN/BLK RED +12v hot in start & run * ECU pin 40: OUT YEL/BRN GRN starter enable * * * Plug #5 9 pin - * ECU pic 3: OUT BLK ORG coil signal + * ECU pin 3: OUT BLK ORG coil signal + * ECU pin 5: GND BRN ground * * BMW_M73_MRE * set engine_type 104 @@ -84,6 +86,9 @@ void setEngineBMW_M73_microRusEfi(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // AN Temp 4, orange wire CONFIG(startStopButton) = GPIOA_3; + // "43 - GP Out 4" + CONFIG(starterControlPin) = TLE8888_PIN_24; + //set tps_min 891 CONFIG(tpsMin) = 891; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index d97ef59708..900291d474 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200317; + return 201200319; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 4a03128b9f..4a8566ce11 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:14 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 00:23:33 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1428,6 +1428,7 @@ struct engine_configuration_s { */ brain_pin_e secondSolenoidPin; /** + * See also starterControlPin * offset 811 */ switch_input_pin_e startStopButton; @@ -2146,6 +2147,7 @@ struct engine_configuration_s { */ int16_t tps2Max; /** + * See also startStopButton * offset 1772 */ output_pin_e starterControlPin; @@ -3236,4 +3238,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:14 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 00:23:33 EDT 2020 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 72581d3cc2..4bd7e676d3 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -688,7 +688,7 @@ custom uart_device_e 1 bits,U32, @OFFSET@, [0:7], "Off", "UART1", "UART2", "UA output_pin_e starterRelayDisablePin; pin_output_mode_e starterRelayDisableMode;On some vehicles we can disable starter once engine is already running brain_pin_e secondSolenoidPin;Some Subaru and some Mazda use double-solenoid idle air valve - switch_input_pin_e startStopButton; + switch_input_pin_e startStopButton;See also starterControlPin int mapMinBufferLength;;"count", 1, 0, 0, 24, 0 int16_t idlePidDeactivationTpsThreshold;;"%", 1, 0, 0, 100.0, 0 @@ -944,7 +944,7 @@ custom pin_mode_e 1 bits, U08, @OFFSET@, [0:7], @@pin_mode_e_enum@@ float alternator_antiwindupFreq;; "x", 1, 0.0, -1000000, 1000000, 4 int16_t tps2Min;Closed throttle#2. todo: extract these two fields into a structure\nSee also tps2_1AdcChannel\nset tps2_min X;"ADC", 1, 0, 0, 1023, 0 int16_t tps2Max;Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!\nSee also tps1_1AdcChannel\nset tps2_max X;"ADC", 1, 0, 0, 1023, 0 - output_pin_e starterControlPin; + output_pin_e starterControlPin;See also startStopButton uint8_t[2] unusedFormerWarmupAfrPid; uint8_t tachPulsePerRev;;"Pulse", 1, 0, 1.0, 255.0, 0 From ef28f394a945defdc2bf87cc6b442751b90ee6e7 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 20 Mar 2020 09:53:45 -0400 Subject: [PATCH 160/171] At least read all TPS inputs --- firmware/controllers/engine_controller.cpp | 2 +- firmware/hw_layer/adc_inputs.cpp | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 900291d474..e8986a6cf6 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -849,6 +849,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 201200319; + return 201200320; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/hw_layer/adc_inputs.cpp b/firmware/hw_layer/adc_inputs.cpp index 9bf0bf08ad..8854620f6f 100644 --- a/firmware/hw_layer/adc_inputs.cpp +++ b/firmware/hw_layer/adc_inputs.cpp @@ -506,11 +506,12 @@ static void configureInputs(void) { addChannel("hip", engineConfiguration->hipOutputChannel, ADC_FAST); addChannel("baro", engineConfiguration->baroSensor.hwChannel, ADC_SLOW); - addChannel("TPS", engineConfiguration->tps1_1AdcChannel, ADC_SLOW); - if (engineConfiguration->tps2_1AdcChannel != EFI_ADC_0) { - // allow EFI_ADC_0 next time we have an incompatible configuration change - addChannel("TPS2", engineConfiguration->tps2_1AdcChannel, ADC_SLOW); - } + + addChannel("TPS1_1", engineConfiguration->tps1_1AdcChannel, ADC_SLOW); + addChannel("TPS1_2", engineConfiguration->tps1_2AdcChannel, ADC_SLOW); + addChannel("TPS2_1", engineConfiguration->tps2_1AdcChannel, ADC_SLOW); + addChannel("TPS2_2", engineConfiguration->tps2_2AdcChannel, ADC_SLOW); + addChannel("fuel", engineConfiguration->fuelLevelSensor, ADC_SLOW); addChannel("pPS", engineConfiguration->throttlePedalPositionAdcChannel, ADC_SLOW); addChannel("VBatt", engineConfiguration->vbattAdcChannel, ADC_SLOW); From 96c79012f0291848948fc5106de3b3ed92b62660 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 20 Mar 2020 19:55:36 -0400 Subject: [PATCH 161/171] At least read all TPS inputs --- firmware/controllers/algo/engine_configuration.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index cef3c5a18b..ec43e111fd 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -318,7 +318,9 @@ void prepareVoidConfiguration(engine_configuration_s *engineConfiguration) { /* this breaks unit tests lovely TODO: fix this? engineConfiguration->tps1_1AdcChannel = EFI_ADC_NONE; */ + engineConfiguration->tps1_2AdcChannel = EFI_ADC_NONE; engineConfiguration->tps2_1AdcChannel = EFI_ADC_NONE; + engineConfiguration->tps2_2AdcChannel = EFI_ADC_NONE; engineConfiguration->auxFastSensor1_adcChannel = EFI_ADC_NONE; engineConfiguration->acSwitchAdc = EFI_ADC_NONE; engineConfiguration->externalKnockSenseAdc = EFI_ADC_NONE; From 0475348e4cc49faebd551670e1804504534c5ddb Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 20 Mar 2020 20:45:35 -0400 Subject: [PATCH 162/171] start/stop --- .../engine_configuration_generated_structures.h | 12 ++++++++---- .../config/controllers/algo/rusefi_generated.h | 10 ++++++---- firmware/config/engines/bmw_m73_mre.cpp | 4 +++- .../engine_configuration_generated_structures.h | 12 ++++++++---- firmware/controllers/generated/rusefi_generated.h | 10 ++++++---- firmware/hw_layer/hardware.cpp | 6 ++++++ firmware/integration/rusefi_config.txt | 5 +++-- firmware/tunerstudio/rusefi.ini | 13 ++++++++----- firmware/tunerstudio/rusefi.input | 6 ++++-- firmware/tunerstudio/rusefi_frankenso.ini | 13 ++++++++----- firmware/tunerstudio/rusefi_kinetis.ini | 7 ++++--- firmware/tunerstudio/rusefi_microrusefi.ini | 13 ++++++++----- firmware/tunerstudio/rusefi_prometheus.ini | 13 ++++++++----- firmware/tunerstudio/rusefi_proteus.ini | 13 ++++++++----- .../src/com/rusefi/config/generated/Fields.java | 15 ++++++++++----- 15 files changed, 98 insertions(+), 54 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 02704e3f99..2aabd0c635 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Mar 20 00:24:38 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Mar 20 19:55:09 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1431,7 +1431,7 @@ struct engine_configuration_s { * See also starterControlPin * offset 811 */ - switch_input_pin_e startStopButton; + switch_input_pin_e startStopButtonPin; /** * offset 812 */ @@ -2154,7 +2154,11 @@ struct engine_configuration_s { /** * offset 1773 */ - uint8_t unusedFormerWarmupAfrPid[2]; + pin_input_mode_e startStopButtonMode; + /** + * offset 1774 + */ + uint8_t unusedFormerWarmupAfrPid; /** * offset 1775 */ @@ -3238,4 +3242,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Mar 20 00:24:38 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Mar 20 19:55:09 EDT 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 54e5fb2607..2d37113aa8 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1776,8 +1776,10 @@ #define starterRelayDisablePin_offset_hex 328 #define startOfCrankingPrimingPulse_offset 2032 #define startOfCrankingPrimingPulse_offset_hex 7f0 -#define startStopButton_offset 811 -#define startStopButton_offset_hex 32b +#define startStopButtonMode_offset 1773 +#define startStopButtonMode_offset_hex 6ed +#define startStopButtonPin_offset 811 +#define startStopButtonPin_offset_hex 32b #define startUpFuelPumpDuration_offset 1892 #define startUpFuelPumpDuration_offset_hex 764 #define stepperDirectionPinMode_offset 3102 @@ -2150,8 +2152,8 @@ #define unusedErrorPin_offset_hex 7f8 #define unusedFlexFuelSensor_offset 3100 #define unusedFlexFuelSensor_offset_hex c1c -#define unusedFormerWarmupAfrPid_offset 1773 -#define unusedFormerWarmupAfrPid_offset_hex 6ed +#define unusedFormerWarmupAfrPid_offset 1774 +#define unusedFormerWarmupAfrPid_offset_hex 6ee #define unusedmiataNb2VVTRatioFrom_offset 820 #define unusedmiataNb2VVTRatioFrom_offset_hex 334 #define unusedmiataNb2VVTRatioTo_offset 824 diff --git a/firmware/config/engines/bmw_m73_mre.cpp b/firmware/config/engines/bmw_m73_mre.cpp index 9687fb9ccf..e5fb9d3a6b 100644 --- a/firmware/config/engines/bmw_m73_mre.cpp +++ b/firmware/config/engines/bmw_m73_mre.cpp @@ -84,10 +84,12 @@ void setEngineBMW_M73_microRusEfi(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->etb.iFactor = 0.35; // AN Temp 4, orange wire - CONFIG(startStopButton) = GPIOA_3; + CONFIG(startStopButtonPin) = GPIOA_3; +#if (BOARD_TLE8888_COUNT > 0) // "43 - GP Out 4" CONFIG(starterControlPin) = TLE8888_PIN_24; +#endif /* BOARD_TLE8888_COUNT */ //set tps_min 891 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 4a8566ce11..1c324af2d0 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 00:23:33 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 19:54:54 EDT 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -1431,7 +1431,7 @@ struct engine_configuration_s { * See also starterControlPin * offset 811 */ - switch_input_pin_e startStopButton; + switch_input_pin_e startStopButtonPin; /** * offset 812 */ @@ -2154,7 +2154,11 @@ struct engine_configuration_s { /** * offset 1773 */ - uint8_t unusedFormerWarmupAfrPid[2]; + pin_input_mode_e startStopButtonMode; + /** + * offset 1774 + */ + uint8_t unusedFormerWarmupAfrPid; /** * offset 1775 */ @@ -3238,4 +3242,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 00:23:33 EDT 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 19:54:54 EDT 2020 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index ed8467614a..a903063fb8 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1776,8 +1776,10 @@ #define starterRelayDisablePin_offset_hex 328 #define startOfCrankingPrimingPulse_offset 2032 #define startOfCrankingPrimingPulse_offset_hex 7f0 -#define startStopButton_offset 811 -#define startStopButton_offset_hex 32b +#define startStopButtonMode_offset 1773 +#define startStopButtonMode_offset_hex 6ed +#define startStopButtonPin_offset 811 +#define startStopButtonPin_offset_hex 32b #define startUpFuelPumpDuration_offset 1892 #define startUpFuelPumpDuration_offset_hex 764 #define stepperDirectionPinMode_offset 3102 @@ -2150,8 +2152,8 @@ #define unusedErrorPin_offset_hex 7f8 #define unusedFlexFuelSensor_offset 3100 #define unusedFlexFuelSensor_offset_hex c1c -#define unusedFormerWarmupAfrPid_offset 1773 -#define unusedFormerWarmupAfrPid_offset_hex 6ed +#define unusedFormerWarmupAfrPid_offset 1774 +#define unusedFormerWarmupAfrPid_offset_hex 6ee #define unusedmiataNb2VVTRatioFrom_offset 820 #define unusedmiataNb2VVTRatioFrom_offset_hex 334 #define unusedmiataNb2VVTRatioTo_offset 824 diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 035a71ed41..6c6e17a241 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -492,6 +492,12 @@ void initHardware(Logging *l) { initSmartGpio(PASS_ENGINE_PARAMETER_SIGNATURE); #endif + if (CONFIG(startStopButtonPin) != GPIO_UNASSIGNED) { + efiSetPadMode("start/stop", CONFIG(startStopButtonPin), + getInputMode(CONFIG(startStopButtonMode))); + } + + // output pins potentially depend on 'initSmartGpio' initOutputPins(PASS_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 4bd7e676d3..6f900801cc 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -688,7 +688,7 @@ custom uart_device_e 1 bits,U32, @OFFSET@, [0:7], "Off", "UART1", "UART2", "UA output_pin_e starterRelayDisablePin; pin_output_mode_e starterRelayDisableMode;On some vehicles we can disable starter once engine is already running brain_pin_e secondSolenoidPin;Some Subaru and some Mazda use double-solenoid idle air valve - switch_input_pin_e startStopButton;See also starterControlPin + switch_input_pin_e startStopButtonPin;See also starterControlPin int mapMinBufferLength;;"count", 1, 0, 0, 24, 0 int16_t idlePidDeactivationTpsThreshold;;"%", 1, 0, 0, 100.0, 0 @@ -945,7 +945,8 @@ custom pin_mode_e 1 bits, U08, @OFFSET@, [0:7], @@pin_mode_e_enum@@ int16_t tps2Min;Closed throttle#2. todo: extract these two fields into a structure\nSee also tps2_1AdcChannel\nset tps2_min X;"ADC", 1, 0, 0, 1023, 0 int16_t tps2Max;Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!\nSee also tps1_1AdcChannel\nset tps2_max X;"ADC", 1, 0, 0, 1023, 0 output_pin_e starterControlPin;See also startStopButton - uint8_t[2] unusedFormerWarmupAfrPid; + pin_input_mode_e startStopButtonMode; + uint8_t[1] unusedFormerWarmupAfrPid; uint8_t tachPulsePerRev;;"Pulse", 1, 0, 1.0, 255.0, 0 ! todo: mapErrorDetectionIdleTooLow? 30kPa is usually lowest on idle diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index ace55572ec..cc6dd9a965 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:14 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 19:58:49 EDT 2020 pageSize = 20000 page = 1 @@ -452,7 +452,7 @@ page = 1 starterRelayDisablePin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButton = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + startStopButtonPin = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -725,7 +725,8 @@ page = 1 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 starterControlPin = bits, U08, 1772, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 + startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1774 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -3403,6 +3404,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "#% duty = Pterm + Iterm + Dterm + offset%" + field = "Start/Stop Button Pin", startStopButtonPin + field = "Start/Stop Button Mode", startStopButtonMode dialog = energySystems, "Battery and Alternator Settings", yAxis @@ -3623,8 +3626,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "output #16", fsioOutputPins16 field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 - field = "" - field = "" + field = "Start/Stop Button", startStopButtonPin + field = "" dialog = fsioFrequency, "Frequency" field = "freq #1", fsioFrequency1 diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index aced0d4f78..eb38a5bdb4 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2272,6 +2272,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "#% duty = Pterm + Iterm + Dterm + offset%" + field = "Start/Stop Button Pin", startStopButtonPin + field = "Start/Stop Button Mode", startStopButtonMode dialog = energySystems, "Battery and Alternator Settings", yAxis @@ -2492,8 +2494,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "output #16", fsioOutputPins16 field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 - field = "" - field = "" + field = "Start/Stop Button", startStopButtonPin + field = "" dialog = fsioFrequency, "Frequency" field = "freq #1", fsioFrequency1 diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index c6e91a0090..4f7caa0e38 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:21 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 19:58:54 EDT 2020 pageSize = 20000 page = 1 @@ -452,7 +452,7 @@ page = 1 starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButton = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + startStopButtonPin = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -725,7 +725,8 @@ page = 1 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" -;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 + startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1774 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -3403,6 +3404,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "#% duty = Pterm + Iterm + Dterm + offset%" + field = "Start/Stop Button Pin", startStopButtonPin + field = "Start/Stop Button Mode", startStopButtonMode dialog = energySystems, "Battery and Alternator Settings", yAxis @@ -3623,8 +3626,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "output #16", fsioOutputPins16 field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 - field = "" - field = "" + field = "Start/Stop Button", startStopButtonPin + field = "" dialog = fsioFrequency, "Frequency" field = "freq #1", fsioFrequency1 diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 4046e748c1..1ba1e65198 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Thu Mar 19 09:14:30 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Mar 20 19:55:09 EDT 2020 pageSize = 20000 page = 1 @@ -452,7 +452,7 @@ page = 1 starterRelayDisablePin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - startStopButton = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" + startStopButtonPin = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -725,7 +725,8 @@ page = 1 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 starterControlPin = bits, U08, 1772, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" -;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 + startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1774 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 0c51a9a17e..8a89c72658 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:18 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 19:58:51 EDT 2020 pageSize = 20000 page = 1 @@ -452,7 +452,7 @@ page = 1 starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButton = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" + startStopButtonPin = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -725,7 +725,8 @@ page = 1 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID" -;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 + startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1774 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -3386,6 +3387,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "#% duty = Pterm + Iterm + Dterm + offset%" + field = "Start/Stop Button Pin", startStopButtonPin + field = "Start/Stop Button Mode", startStopButtonMode dialog = energySystems, "Battery and Alternator Settings", yAxis @@ -3604,8 +3607,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "output #16", fsioOutputPins16 field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 - field = "" - field = "" + field = "Start/Stop Button", startStopButtonPin + field = "" dialog = fsioFrequency, "Frequency" field = "freq #1", fsioFrequency1 diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 8ace7d3b8f..ebde5c8259 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:24 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 19:58:56 EDT 2020 pageSize = 20000 page = 1 @@ -452,7 +452,7 @@ page = 1 starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButton = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + startStopButtonPin = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -725,7 +725,8 @@ page = 1 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" -;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 + startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1774 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -3399,6 +3400,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "#% duty = Pterm + Iterm + Dterm + offset%" + field = "Start/Stop Button Pin", startStopButtonPin + field = "Start/Stop Button Mode", startStopButtonMode dialog = energySystems, "Battery and Alternator Settings", yAxis @@ -3619,8 +3622,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "output #16", fsioOutputPins16 field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 - field = "" - field = "" + field = "Start/Stop Button", startStopButtonPin + field = "" dialog = fsioFrequency, "Frequency" field = "freq #1", fsioFrequency1 diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 052808c88a..5d71a983f3 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:27 EDT 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 19:58:59 EDT 2020 pageSize = 20000 page = 1 @@ -452,7 +452,7 @@ page = 1 starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" starterRelayDisableMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButton = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" + startStopButtonPin = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 @@ -725,7 +725,8 @@ page = 1 tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" -;no TS info - skipping unusedFormerWarmupAfrPid offset 1773 + startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1774 tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 @@ -3394,6 +3395,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} field = "#% duty = Pterm + Iterm + Dterm + offset%" + field = "Start/Stop Button Pin", startStopButtonPin + field = "Start/Stop Button Mode", startStopButtonMode dialog = energySystems, "Battery and Alternator Settings", yAxis @@ -3612,8 +3615,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "output #16", fsioOutputPins16 field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 - field = "" - field = "" + field = "Start/Stop Button", startStopButtonPin + field = "" dialog = fsioFrequency, "Frequency" field = "freq #1", fsioFrequency1 diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 33d5c0efcf..118d8970a3 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Thu Mar 19 09:14:14 EDT 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Mar 20 19:54:54 EDT 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1169,7 +1169,8 @@ public class Fields { public static final int starterRelayDisablePin_offset = 808; public static final int starterRelayDisablePin_offset_hex = 328; public static final int startOfCrankingPrimingPulse_offset = 2032; - public static final int startStopButton_offset = 811; + public static final int startStopButtonMode_offset = 1773; + public static final int startStopButtonPin_offset = 811; public static final int startUpFuelPumpDuration_offset = 1892; public static final int startUpFuelPumpDuration_offset_hex = 764; public static final int stepperDirectionPinMode_offset = 3102; @@ -1406,7 +1407,7 @@ public class Fields { public static final int unusedBit_34_31_offset = 76; public static final int unusedErrorPin_offset = 2040; public static final int unusedFlexFuelSensor_offset = 3100; - public static final int unusedFormerWarmupAfrPid_offset = 1773; + public static final int unusedFormerWarmupAfrPid_offset = 1774; public static final int unusedmiataNb2VVTRatioFrom_offset = 820; public static final int unusedmiataNb2VVTRatioFrom_offset_hex = 334; public static final int unusedmiataNb2VVTRatioTo_offset = 824; @@ -1842,7 +1843,7 @@ public class Fields { public static final Field STARTERRELAYDISABLEPIN = Field.create("STARTERRELAYDISABLEPIN", 808, FieldType.INT8, output_pin_e); public static final Field STARTERRELAYDISABLEMODE = Field.create("STARTERRELAYDISABLEMODE", 809, FieldType.INT8, pin_output_mode_e); public static final Field SECONDSOLENOIDPIN = Field.create("SECONDSOLENOIDPIN", 810, FieldType.INT8, brain_pin_e); - public static final Field STARTSTOPBUTTON = Field.create("STARTSTOPBUTTON", 811, FieldType.INT8, switch_input_pin_e); + public static final Field STARTSTOPBUTTONPIN = Field.create("STARTSTOPBUTTONPIN", 811, FieldType.INT8, switch_input_pin_e); public static final Field MAPMINBUFFERLENGTH = Field.create("MAPMINBUFFERLENGTH", 812, FieldType.INT); public static final Field IDLEPIDDEACTIVATIONTPSTHRESHOLD = Field.create("IDLEPIDDEACTIVATIONTPSTHRESHOLD", 816, FieldType.INT16); public static final Field STEPPERPARKINGEXTRASTEPS = Field.create("STEPPERPARKINGEXTRASTEPS", 818, FieldType.INT16); @@ -2114,6 +2115,8 @@ public class Fields { public static final Field TPS2MIN = Field.create("TPS2MIN", 1768, FieldType.INT16); public static final Field TPS2MAX = Field.create("TPS2MAX", 1770, FieldType.INT16); public static final Field STARTERCONTROLPIN = Field.create("STARTERCONTROLPIN", 1772, FieldType.INT8, output_pin_e); + public static final Field STARTSTOPBUTTONMODE = Field.create("STARTSTOPBUTTONMODE", 1773, FieldType.INT8); + public static final Field UNUSEDFORMERWARMUPAFRPID = Field.create("UNUSEDFORMERWARMUPAFRPID", 1774, FieldType.INT8); public static final Field TACHPULSEPERREV = Field.create("TACHPULSEPERREV", 1775, FieldType.INT8); public static final Field MAPERRORDETECTIONTOOLOW = Field.create("MAPERRORDETECTIONTOOLOW", 1776, FieldType.FLOAT); public static final Field MAPERRORDETECTIONTOOHIGH = Field.create("MAPERRORDETECTIONTOOHIGH", 1780, FieldType.FLOAT); @@ -2746,7 +2749,7 @@ public class Fields { STARTERRELAYDISABLEPIN, STARTERRELAYDISABLEMODE, SECONDSOLENOIDPIN, - STARTSTOPBUTTON, + STARTSTOPBUTTONPIN, MAPMINBUFFERLENGTH, IDLEPIDDEACTIVATIONTPSTHRESHOLD, STEPPERPARKINGEXTRASTEPS, @@ -3014,6 +3017,8 @@ public class Fields { TPS2MIN, TPS2MAX, STARTERCONTROLPIN, + STARTSTOPBUTTONMODE, + UNUSEDFORMERWARMUPAFRPID, TACHPULSEPERREV, MAPERRORDETECTIONTOOLOW, MAPERRORDETECTIONTOOHIGH, From a32ae209d05f819cab63df5939008e09938ef111 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 21 Mar 2020 10:41:25 -0400 Subject: [PATCH 163/171] 48 pin documentation --- hardware/breakout_48_pin_174917/readme.md | 3 + hardware/readme.md | 7 +- unit_tests/triggers.txt | 424 +++++++++++----------- 3 files changed, 219 insertions(+), 215 deletions(-) create mode 100644 hardware/breakout_48_pin_174917/readme.md diff --git a/hardware/breakout_48_pin_174917/readme.md b/hardware/breakout_48_pin_174917/readme.md new file mode 100644 index 0000000000..e4d266479e --- /dev/null +++ b/hardware/breakout_48_pin_174917/readme.md @@ -0,0 +1,3 @@ +48 pin breakout for Miata NA + +As of March 2020 this was NEVER populated. Silkscreen might be not finished. \ No newline at end of file diff --git a/hardware/readme.md b/hardware/readme.md index 4922d0a5ba..2e09cde7c5 100644 --- a/hardware/readme.md +++ b/hardware/readme.md @@ -14,6 +14,7 @@ todo: move Connectors wiki page content into git * [35 pin](MX7-C-35PL-C11-connector) Mazda TCU * [38 pin](NGC_38_connector) Chrysler NGC connector +* [48 pin](breakout_48_pin_174917) Mazda Miata NA6 NOT FINISHED * [52 pin](172319-1_52pin-connector) Mitsubishi Galant VR4 * [55 pin](963063-15_55_pin_connector) BMW Lada * [64 pin](176122-6-connector) Mazda Miata NA NB1, Honda Civic @@ -23,9 +24,9 @@ todo: move Connectors wiki page content into git * [154 pin](284617-1-connector) Audi # Modules -* [Brain board 48pin](mini48-stm32) -* [Brain board 100pin](brain_board) -* [Brain board 176pin](brain_board_176-pin) +* [stm32 Brain board 48pin](mini48-stm32) +* [stm32 Brain board 100pin](brain_board) +* [stm32 Brain board 176pin](brain_board_176-pin) * [CAN module](can_board) CAN using SN65HVD230 * [VR module](VR_Board) Variable Reluctance conditioner board VR MAX9926 * [Wideband module](CJ125_board) CJ125 Bosch Wideband board diff --git a/unit_tests/triggers.txt b/unit_tests/triggers.txt index df20a30215..22706e689e 100644 --- a/unit_tests/triggers.txt +++ b/unit_tests/triggers.txt @@ -67,28 +67,28 @@ event 10 1001 592.88 event 11 1000 662.90 TRIGGERTYPE 4 22 TT_MAZDA_MIATA_NB1 276.00 # duty 0.08 0.04 -event 0 1 0.00 -event 1 1000 26.00 -event 2 1001 30.00 -event 3 1000 96.00 -event 4 1001 100.00 -event 5 1000 206.00 -event 6 1001 210.00 -event 7 1000 276.00 -event 8 1001 280.00 -event 9 0 320.00 -event 10 1 340.00 -event 11 1000 386.00 -event 12 1001 390.00 -event 13 1000 456.00 -event 14 1001 460.00 -event 15 1000 566.00 -event 16 1001 570.00 -event 17 1000 636.00 -event 18 1001 640.00 -event 19 0 660.00 -event 20 1 680.00 -event 21 0 700.00 +event 0 0 0.00 +event 1 1001 26.00 +event 2 1000 30.00 +event 3 1001 96.00 +event 4 1000 100.00 +event 5 1001 206.00 +event 6 1000 210.00 +event 7 1001 276.00 +event 8 1000 280.00 +event 9 1 320.00 +event 10 0 340.00 +event 11 1001 386.00 +event 12 1000 390.00 +event 13 1001 456.00 +event 14 1000 460.00 +event 15 1001 566.00 +event 16 1000 570.00 +event 17 1001 636.00 +event 18 1000 640.00 +event 19 1 660.00 +event 20 0 680.00 +event 21 1 700.00 TRIGGERTYPE 5 28 TT_GM_7X 0.00 # duty 0.90 0.00 event 0 1 0.00 @@ -1712,101 +1712,101 @@ event 127 0 705.00 TRIGGERTYPE 27 96 TT_GM_LS_24 0.00 # duty 0.50 0.00 event 0 1 0.00 -event 1 0 3.00 -event 2 1 6.00 -event 3 0 18.00 +event 1 0 5.00 +event 2 1 15.00 +event 3 0 20.00 event 4 1 30.00 -event 5 0 33.00 -event 6 1 36.00 -event 7 0 48.00 -event 8 1 51.00 -event 9 0 63.00 -event 10 1 66.00 -event 11 0 78.00 -event 12 1 81.00 -event 13 0 93.00 -event 14 1 96.00 -event 15 0 108.00 -event 16 1 120.00 -event 17 0 123.00 -event 18 1 135.00 -event 19 0 138.00 +event 5 0 35.00 +event 6 1 45.00 +event 7 0 50.00 +event 8 1 60.00 +event 9 0 65.00 +event 10 1 70.00 +event 11 0 80.00 +event 12 1 85.00 +event 13 0 95.00 +event 14 1 100.00 +event 15 0 110.00 +event 16 1 115.00 +event 17 0 125.00 +event 18 1 130.00 +event 19 0 140.00 event 20 1 150.00 -event 21 0 153.00 -event 22 1 165.00 -event 23 0 168.00 -event 24 1 180.00 -event 25 0 183.00 -event 26 1 186.00 -event 27 0 198.00 +event 21 0 155.00 +event 22 1 160.00 +event 23 0 170.00 +event 24 1 175.00 +event 25 0 185.00 +event 26 1 190.00 +event 27 0 200.00 event 28 1 210.00 -event 29 0 213.00 +event 29 0 215.00 event 30 1 225.00 -event 31 0 228.00 -event 32 1 240.00 -event 33 0 243.00 -event 34 1 246.00 -event 35 0 258.00 -event 36 1 261.00 -event 37 0 273.00 +event 31 0 230.00 +event 32 1 235.00 +event 33 0 245.00 +event 34 1 250.00 +event 35 0 260.00 +event 36 1 270.00 +event 37 0 275.00 event 38 1 285.00 -event 39 0 288.00 +event 39 0 290.00 event 40 1 300.00 -event 41 0 303.00 -event 42 1 306.00 -event 43 0 318.00 -event 44 1 321.00 -event 45 0 333.00 -event 46 1 336.00 -event 47 0 348.00 +event 41 0 305.00 +event 42 1 310.00 +event 43 0 320.00 +event 44 1 330.00 +event 45 0 335.00 +event 46 1 340.00 +event 47 0 350.00 event 48 1 360.00 -event 49 0 363.00 -event 50 1 366.00 -event 51 0 378.00 +event 49 0 365.00 +event 50 1 375.00 +event 51 0 380.00 event 52 1 390.00 -event 53 0 393.00 -event 54 1 396.00 -event 55 0 408.00 -event 56 1 411.00 -event 57 0 423.00 -event 58 1 426.00 -event 59 0 438.00 -event 60 1 441.00 -event 61 0 453.00 -event 62 1 456.00 -event 63 0 468.00 -event 64 1 480.00 -event 65 0 483.00 -event 66 1 495.00 -event 67 0 498.00 +event 53 0 395.00 +event 54 1 405.00 +event 55 0 410.00 +event 56 1 420.00 +event 57 0 425.00 +event 58 1 430.00 +event 59 0 440.00 +event 60 1 445.00 +event 61 0 455.00 +event 62 1 460.00 +event 63 0 470.00 +event 64 1 475.00 +event 65 0 485.00 +event 66 1 490.00 +event 67 0 500.00 event 68 1 510.00 -event 69 0 513.00 -event 70 1 525.00 -event 71 0 528.00 -event 72 1 540.00 -event 73 0 543.00 -event 74 1 546.00 -event 75 0 558.00 +event 69 0 515.00 +event 70 1 520.00 +event 71 0 530.00 +event 72 1 535.00 +event 73 0 545.00 +event 74 1 550.00 +event 75 0 560.00 event 76 1 570.00 -event 77 0 573.00 +event 77 0 575.00 event 78 1 585.00 -event 79 0 588.00 -event 80 1 600.00 -event 81 0 603.00 -event 82 1 606.00 -event 83 0 618.00 -event 84 1 621.00 -event 85 0 633.00 +event 79 0 590.00 +event 80 1 595.00 +event 81 0 605.00 +event 82 1 610.00 +event 83 0 620.00 +event 84 1 630.00 +event 85 0 635.00 event 86 1 645.00 -event 87 0 648.00 +event 87 0 650.00 event 88 1 660.00 -event 89 0 663.00 -event 90 1 666.00 -event 91 0 678.00 -event 92 1 681.00 -event 93 0 693.00 -event 94 1 696.00 -event 95 0 708.00 +event 89 0 665.00 +event 90 1 670.00 +event 91 0 680.00 +event 92 1 690.00 +event 93 0 695.00 +event 94 1 700.00 +event 95 0 710.00 TRIGGERTYPE 28 54 TT_HONDA_CBR_600 0.00 # duty 0.51 0.50 event 0 1 0.00 @@ -2069,28 +2069,28 @@ event 48 1000 704.90 event 49 1001 719.90 TRIGGERTYPE 35 22 TT_MAZDA_MIATA_VVT_TEST 276.00 # duty 0.08 0.04 -event 0 1 0.00 -event 1 1000 4.00 -event 2 1001 8.00 -event 3 1000 74.00 -event 4 1001 78.00 -event 5 1000 184.00 -event 6 1001 188.00 -event 7 1000 254.00 -event 8 1001 258.00 -event 9 0 320.00 -event 10 1 340.00 -event 11 1000 364.00 -event 12 1001 368.00 -event 13 1000 434.00 -event 14 1001 438.00 -event 15 1000 544.00 -event 16 1001 548.00 -event 17 1000 614.00 -event 18 1001 618.00 -event 19 0 660.00 -event 20 1 680.00 -event 21 0 700.00 +event 0 0 0.00 +event 1 1001 4.00 +event 2 1000 8.00 +event 3 1001 74.00 +event 4 1000 78.00 +event 5 1001 184.00 +event 6 1000 188.00 +event 7 1001 254.00 +event 8 1000 258.00 +event 9 1 320.00 +event 10 0 340.00 +event 11 1001 364.00 +event 12 1000 368.00 +event 13 1001 434.00 +event 14 1000 438.00 +event 15 1001 544.00 +event 16 1000 548.00 +event 17 1001 614.00 +event 18 1000 618.00 +event 19 1 660.00 +event 20 0 680.00 +event 21 1 700.00 TRIGGERTYPE 36 38 TT_SUBARU_7_6 0.00 # duty 0.95 0.08 event 0 1 0.00 @@ -2132,57 +2132,57 @@ event 35 1000 645.00 event 36 1001 695.00 event 37 1000 700.00 TRIGGERTYPE 37 50 TT_JEEP_18_2_2_2 581.00 -# duty 0.50 0.07 -event 0 1 0.00 -event 1 1001 26.00 -event 2 1000 28.00 -event 3 1001 46.00 -event 4 1000 48.00 -event 5 1001 66.00 -event 6 1000 68.00 -event 7 1001 86.00 -event 8 1000 88.00 -event 9 1001 146.00 -event 10 1000 148.00 -event 11 1001 166.00 -event 12 1000 168.00 -event 13 1001 186.00 -event 14 1000 188.00 -event 15 1001 206.00 -event 16 1000 208.00 -event 17 1001 266.00 -event 18 1000 268.00 -event 19 1001 286.00 -event 20 1000 288.00 -event 21 1001 306.00 -event 22 1000 308.00 -event 23 1001 326.00 -event 24 1000 328.00 -event 25 0 360.00 -event 26 1001 386.00 -event 27 1000 388.00 -event 28 1001 406.00 -event 29 1000 408.00 -event 30 1001 426.00 -event 31 1000 428.00 -event 32 1001 446.00 -event 33 1000 448.00 -event 34 1001 506.00 -event 35 1000 508.00 -event 36 1001 526.00 -event 37 1000 528.00 -event 38 1001 546.00 -event 39 1000 548.00 -event 40 1001 566.00 -event 41 1000 568.00 -event 42 1001 626.00 -event 43 1000 628.00 -event 44 1001 646.00 -event 45 1000 648.00 -event 46 1001 666.00 -event 47 1000 668.00 -event 48 1001 686.00 -event 49 1000 688.00 +# duty 0.50 0.93 +event 0 1001 0.00 +event 1 1000 2.00 +event 2 1001 20.00 +event 3 1000 22.00 +event 4 1001 40.00 +event 5 1000 42.00 +event 6 1001 60.00 +event 7 1000 62.00 +event 8 1001 120.00 +event 9 1000 122.00 +event 10 1001 140.00 +event 11 1000 142.00 +event 12 1001 160.00 +event 13 1000 162.00 +event 14 1001 180.00 +event 15 1000 182.00 +event 16 1001 240.00 +event 17 1000 242.00 +event 18 1001 260.00 +event 19 1000 262.00 +event 20 1001 280.00 +event 21 1000 282.00 +event 22 1001 300.00 +event 23 1000 302.00 +event 24 1 334.00 +event 25 1001 360.00 +event 26 1000 362.00 +event 27 1001 380.00 +event 28 1000 382.00 +event 29 1001 400.00 +event 30 1000 402.00 +event 31 1001 420.00 +event 32 1000 422.00 +event 33 1001 480.00 +event 34 1000 482.00 +event 35 1001 500.00 +event 36 1000 502.00 +event 37 1001 520.00 +event 38 1000 522.00 +event 39 1001 540.00 +event 40 1000 542.00 +event 41 1001 600.00 +event 42 1000 602.00 +event 43 1001 620.00 +event 44 1000 622.00 +event 45 1001 640.00 +event 46 1000 642.00 +event 47 1001 660.00 +event 48 1000 662.00 +event 49 0 694.00 TRIGGERTYPE 38 186 TT_NISSAN_SR20VE_360 630.00 # duty 0.96 0.12 event 0 1 0.00 @@ -2406,41 +2406,41 @@ event 29 0 586.00 event 30 1 610.00 event 31 0 615.00 TRIGGERTYPE 40 34 TT_JEEP_4_CYL 484.00 -# duty 0.50 0.04 -event 0 1 0.00 -event 1 1001 58.00 -event 2 1000 60.00 -event 3 1001 78.00 -event 4 1000 80.00 -event 5 1001 98.00 -event 6 1000 100.00 -event 7 1001 118.00 -event 8 1000 120.00 -event 9 1001 238.00 -event 10 1000 240.00 -event 11 1001 258.00 -event 12 1000 260.00 -event 13 1001 278.00 -event 14 1000 280.00 -event 15 1001 298.00 -event 16 1000 300.00 -event 17 0 360.00 -event 18 1001 418.00 -event 19 1000 420.00 -event 20 1001 438.00 -event 21 1000 440.00 -event 22 1001 458.00 -event 23 1000 460.00 -event 24 1001 478.00 -event 25 1000 480.00 -event 26 1001 598.00 -event 27 1000 600.00 -event 28 1001 618.00 -event 29 1000 620.00 -event 30 1001 638.00 -event 31 1000 640.00 -event 32 1001 658.00 -event 33 1000 660.00 +# duty 0.50 0.96 +event 0 1001 0.00 +event 1 1000 2.00 +event 2 1001 20.00 +event 3 1000 22.00 +event 4 1001 40.00 +event 5 1000 42.00 +event 6 1001 60.00 +event 7 1000 62.00 +event 8 1001 180.00 +event 9 1000 182.00 +event 10 1001 200.00 +event 11 1000 202.00 +event 12 1001 220.00 +event 13 1000 222.00 +event 14 1001 240.00 +event 15 1000 242.00 +event 16 1 302.00 +event 17 1001 360.00 +event 18 1000 362.00 +event 19 1001 380.00 +event 20 1000 382.00 +event 21 1001 400.00 +event 22 1000 402.00 +event 23 1001 420.00 +event 24 1000 422.00 +event 25 1001 540.00 +event 26 1000 542.00 +event 27 1001 560.00 +event 28 1000 562.00 +event 29 1001 580.00 +event 30 1000 582.00 +event 31 1001 600.00 +event 32 1000 602.00 +event 33 0 662.00 TRIGGERTYPE 41 4 TT_FIAT_IAW_P8 60.00 # duty 0.17 0.00 event 0 1 0.00 From a4e5d83a17dc538bca77cfc22f906af04dba4a48 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 21 Mar 2020 11:17:12 -0400 Subject: [PATCH 164/171] 55 photos and eBay link --- .../963063-board.jpg | Bin 0 -> 251689 bytes .../963063-connector.jpg | Bin 0 -> 133134 bytes .../963063-together.jpg | Bin 0 -> 202732 bytes hardware/963063-15_55_pin_connector/board.png | Bin 23537 -> 0 bytes hardware/963063-15_55_pin_connector/readme.md | 9 +++++++-- 5 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 hardware/963063-15_55_pin_connector/963063-board.jpg create mode 100644 hardware/963063-15_55_pin_connector/963063-connector.jpg create mode 100644 hardware/963063-15_55_pin_connector/963063-together.jpg delete mode 100644 hardware/963063-15_55_pin_connector/board.png diff --git a/hardware/963063-15_55_pin_connector/963063-board.jpg b/hardware/963063-15_55_pin_connector/963063-board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33b57ba772b68929de89c39133a83a12e65a06a4 GIT binary patch literal 251689 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Ã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

SKU59`WF=wH%iPq|e9S9Afq}MA3v=L44Wv=NSy7 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 literal 0 HcmV?d00001 diff --git a/hardware/963063-15_55_pin_connector/963063-connector.jpg b/hardware/963063-15_55_pin_connector/963063-connector.jpg new file mode 100644 index 0000000000000000000000000000000000000000..685120ff03f7033ce447390a8b2f64ed88bc3b5e GIT binary patch literal 133134 zcmbTdbyyrt(=WWh0*eF|%|eh}+_Sj5y9Jlv?h-t~f;++8gS!R@?(PsE!JQB!0YZ|q z+;^VyKG(U#ww@tNd)rz8 z0P^xo01yBGzy{zTAp?*R2osTU5%`gsi^yOE#z2&%h>VYf0zg8PXoyUTg!&JzL*QqB zaT@|N{N;IUiycuH8&UQkG6w<^BFYIwCP4nToyWFp!-4;_^96xvBmTt#C;$Km2mrX7 zI=Xv0SpzhcS!Mb7Im7{v!vDklpHfy{Sq;j;#tvuW18~4O-~w&Ou)a`4S|so z|K&k?)FTP=ABn;cbmXLe`-($gl)v=U$GU%UE&`+e&25yC@m2A{}>S- z0WR+UD~*B~060Xnk@2^l0s=qQe@u__@jvu(L~v-Pq1|1DtxWY{^>H5J6+a7|_CKUh%$&aNr(kL{5VEg`Ii z7!4%E+CdZmmB(X5zmEo~Lj0iorAs4@fq&@(2>PRB|MZWbqy3e09YII`%d?BXO>ink!)Bk(sKga(m|3iPYDq`^e>FaUTKAva&TmH}JAXXdV)L+XXSdjkW z1Oz8C!a|P%I3ZL;`LFel_FtIjFMi}hLjJcM4+KB*UmQk^IDtr@e?EWydq;W{3DM)9 zPXI{(2n`J#4Hblrj*fu=!o((gf{lfRO@dE=OGr*iNkL9ZMh2x}qlZ$lP?M1{@G`Q% z*}1s5DCzly`8b5wIJr0;8$rUrz`(}BhCF!!;ee6BIR2m0pB?}n2#|n;P?idSjE97R zhxBIvK#7nO6|sLlZlQk@V(|k}(a=E{m{P>_KrsHi}M>PP{Pn*$IJ6(7bf zjz*wvicaN9$PtuS0HT(t?(tEX>nVQFP;V{7N`;rYtT+s8K~^leypL}XM_^1GDOwDgS3!lL4m(z5sE z6%CC|%`L5M?Hzsn1A{}uBco$;^9zeh%PXsETiZLkd;156N5|hTudZ*t|G2%of7I(y z&;O)<75hK*!b9kV3Vb4^EQCulHz>im|1BQ{3v||fIcIm4WKZJ0Z@jipbzj;S0-!>q ztlItna393$zv0xhfIp4mdD4=vkPp1-`98g86!1hBFe^<6(3C6F&_G@(EW&vr=#r1F zp1P>crI*KfgHDS__p8CC-44IkxHP_k9j^a6LRsN&n=51p;i zfP@Bx3f-Oj(Gxu{W1)-5LZ@WiR%e?=*dM^KI6{)*;u?JCsNa;qsI*Qc>F-$*2YdK# zXtez)3D4OyE#t#$zFO`EhwhN<1eWG86HO}>aqnsWX8m?^mSwnN4>+jMkEl2p{W_r}TxSwiLnRo5X`)pu+Gzy|76%$^iJ6I{udKLB-kvQcI^ z!rh@y&rSm0RQrg&^;h4H6_jqz{2|@>G3ZLbNba{W8b3|q$PU-Wv)=@cD1BF(XbtxK z?^HwGR}aIiz!(w6)x4(aJb#XH8{VG@3I6=@()eCF`ZQ6pjo1lyLKQ+TM_ys;k5#It zXj-Cg*V-`Z$FA3t&SFVG`&&)mLRK?GI>9i`Ifj!l!_lLbJ>xP=o=?38#fI#6fc*Q? zZ(i{k=3%U~)w#zS_42gs*t*$YocVevHc)jI{s6WJFa7{xJi_WCN;(P54x6gP1tZXt zULP54hEv?seZ*^G?37tvc2C59w%w{$^-0$2i>DLd8Zet5Ghg~3mV5tMF+k3ssi1_R zF{s%+NjLvowbr+qzW+>NfBT%e8Y6WGUoVPXm6J>c!&#-Qm54=@usYu_tGFrSE1Trk zR{+#uy!X2o==5>&Rm`6wTIX!-P3?iNW+C6lCVpnh(z6_t8G0O`aGj(60RV5`$SgEv zO=@b}TG;#em$b@bo||z9xKFw8pW3(AU08>md6fTNwX~y4pTqrf;Vo8A>mPt)!}58} z9Aq)NN7@tIyzmyBq8 zqHfSa%%vzx)V(%|hPQ_9l==ck;yURac~0jgO6ozJ`%A@JlCQEMO*acL@6s1*C^w7` z^q*oh5@zQ#G@Qt7CSlRiye=i{!Zyeq8@T!jhVlA)OAq%8mGAxL>&W446iv@k)RTH} z-3<>H0!{`y-C6r@JHAoqk#aWgU=IXh#^tU~Vjz9h@J^PCJ7Ue#Y$9kx)$QC{mp^3B zUi&?`5k1HJiT9du$iIsMjOC!m;IirGF4=BPF0izwNj*iT`SkW9oMO!jZ002wN8nfrW%?9tXolHd}m(~3%}{pcZw{# zH71u3WcFy|8Qe<=GiX2d^{DKoSTJk3aI9kiMp{`xeaSK}-rt)lmLh9{aWFFP-YI2aen3PLCfJnE!fsb#1#E+F{BAu-pLZZ=k%APRY-O^eU<0LWMp znu^Z|(d>p);?Xw-<_0=!9vr~b7g4H@Il2paj;KvZ4xqPk)BH-`?t<>;+N#u5v214iMq1rJfX{YszHq0!w_mf& zxyFCCVj*Sn%-#uzvK()=NOUkj&PMKjmO9Sz<;<#QXrBZP|w!-;$UQ}uv`@1B5Xi*dU_D+!XgKM%QmIQ^wR#NC`%dF*N1l8Vuq zNt^@VJ0w#`56t{R=G&ki1KXrkv@ghPE|A^$sdS2~QWe&k=hawGq8U9XqSk*)mTeiM z?>rGbeND6AShxjzn{2ydyNf%rXb^p7t>N~A_lG9I@TM^O9XI}w%7J@1{bCl^Oq9Oi zuw?S3xbg4Zj6PNdy$=o0m(=ynoA z_bad{Eb7f$B5s2_^KQq9%68cwU2jSNerk(&?>Oq9mmp!=vKKGE>hR=s#Hyn$s0X5p zF>DUEmzlr_cDlH0d63YUr2xb+rHnF$L?dhO@`vW*xv<>>~^$bT2 zXuj~~zMO}ns)M`=?-*rt{X#DG88Q7Xl+669Qn}2adZ-dp77`~nyRB9f$N6xqm=#gf zp0U>!3rq;Pf>WvvKe^Xpyj6d7*LgzN+P13*#uVzW9-(%p%z5M61>cgoQw zT3%+$*7BovKcCsvF8>dpIS%)Vdzz9+PjEc)le9DX{Vu|VNqb= z?FHgaE+GWew7*QVo{s7?DgqCsqC0L)ykCoe~$)W%z=)%Vq#++iR#!R})G*|bU$WLS_ z1$yhp=_f?1)n=b}_f{GhCWq?u{{eJ(b2o{tNn!`{6HPSuxOWBw^^}JCWv(U0U3X{dkbU-7$hUzf@pD59QpB7)iXa)E%z0rYw=AC(_G8 zdv7i0Ax|LZDDPC51a{#GJIMAzP8-;yP^84@T5mkJRRdJzV<#rwFXe0ucIEYtGwkNl z*yea!qr?vU0Vs^$rfriGXk4rdIK~x`{lM$!rW(gVB9|rqWoLjgyo=TL(0@_cpwQgf49IN_+3DCMDU_%?n=Racncs$7!nn*wfmzND0t7s`<;UYVOM=MG-$3Td{lS(H}J(Up1I4w%_)UyABiXxrSuV0HfLtxEUl9n8@!AnIsv+ygC?e z=m}4O=^*}mh3Iu{|Fx1NVzhwaS#i-{c7^u?))D#U=fi}j)E-mC7aZ=o_o3F)_~y^r zxcy}2Z>nE^bF9WA+K>nM;`rvK9Fjim`;-Auu3jfJJQ$4)VSn&NOshV|2WV%8C-Vt; z)l8>^h95IZ{IY0??{}t_ypmO0?LI7Kk1+OSo84ckn%c((jFf`oo9)%kQ+kVw*)lq0 z6r4t6v58CX4GR^YQOA^5n7CO+9^0Vh`8X{#obfaHa_elUyU?$5iV0-~3JX#AOahcM z6`YO@zY_vZqa+r-M7Pq{*uFv%djcf&rpl;GJp`0FQU%hG+n$`L$HDESg>LdKDuj;~ zdc+9##wn2U(SwFna*o6y@5iYE?uY^+_p`o#@cjKVPa0BYO5AT%qL~Ee%uTP_d3`(J z5?@I+FEZ|AxVd8?|7s~OxrC7i>p7!pnuw2RCUp_rlOy&kv*ePe(KZ_38 zNWs#X?eGfoP(=A1TWSCs;`K4fo4C^Nqg73L0T4uz?i&uV{fz1Pb0*hcZ4JiH%IqGW zKU%Xae=AsQ;20or>{o_PtBF_s{rru(aSS@w1*0L0=DbIMpj`BLT~ie5p+cPMLayBn zD=m~z!>cegP{iJ=Vy;UbR?%RQ>0l|?L?ENpj#jtVnuIKOm$pnaD`27J6~h0XWSXRy z`q>D@x+V(PJz0O=_Wc3$OjM!fJC#UrCUQULon}g3Vs7rcbu!26ud1=|p2Wo5fTJY6 zx0dOaT3WJhE~pCB+FuOCUY5@6&^6XL?Y0TJHn7j4i>smXL(qaUw>UBm#dkH#n^|kL zpMD-?jvwYaZ(qZYk23Kvy5d44I~SNV+M5{PV!z>mxT_IBtq5`d9^Lx2>wE34=uk%%?vukc zTkWQK)<*_bLrsKlcn+O?+-vP|!^|z|E>!_Tp)fKtj7FiJw zjmC$B*d`j=(Q(5Wy8aaPv5jxuEAsw?=c_L4cSPd?Zk>9bWIDLD{wSsW1CSg(GJ+F+ zL5zSTYDrg<86Px`hMb6yfigu`Ynm{C z?=l_X?=2xzS3)g8_)VaNL5gCOoFmN`am`c>spqDIcujE|L^8^+I_Lw7)EbZT*o7j* zzXT}rg!yDBMDEm-4f?(ywQ9Kd!YvwOi&heCvd^ky~B4o$1jFkl){_1>PUZiq(nqU4D=k;9Of>J!+n?keZy*Pv+7R(se}j1+psHXd_~z~JrGQ`N#m|ch^?d^^@`C| z4116d(@-NwECgY8Mri>1kR8HlOd1ns10c8ao)p)BAsk7jA@V9tVq9xtgc??0Uu*GvLr(N6S|tL^cV*~#k6BW3D{^@op8d?bOV@w+kZGy@ z%d03DUG^j+%D${nUWq13RA*b}{nkO7+a>=fU8TdMaqg784<=&Y!zl=3Xl+d0w~S&~ z-G~Dq2eREdOF0^7=#Eek-4#2F8-D~cVl(42yifz6)K%5u+Kd+4juWG2f98t)dSpOV z5>xyBXz9K*k2_`TJWOkC<>ZEF@5g6!rs3!*Be?FN4UNVg%XG&v&L#u+irl%@8E+LYW3yP9p30xRC41H5x@qviAB zN~KpmW|`=;+)DPV-`dN8d4@X@&U2*?RZWD$Z|M}|z1*3owl>4jGt2W69JT!Pu47?8jm4U?I4M8Lz z3X^sHaeUCa!>I_o5HfLWSQvOG2K*(06-$Bw7bA=~;jrLBG87&uKZYqQeb3=i4?r=#kwiTB?uz- zE@A*0Oa=~uz>xXOzFv2K3|( zODD(h^@2=$!N@=tWGbL3NRlfPFBB>RG97?ZN0|0eWBUfAN+-k@K9dFEfuI8-(ur}9 z2*ya*0HhyHi7HCEoM?=yj2bA3OhW@C)fmVxhHqg*r9fi6CSrjSa=tU+KoR7${_}Lu3i> zh7HBrpvWU^d2P?yR{Y z(}Y>d{Ga5%bw|H5k=YbFZ!F=?(P=OLX+E$Yp!@BfgSDeA9Ab(L--eh-fa$CEUj$PC zTyfx3K*@v{sCa2GH8>0i*QZN&Etdczg%sKB;Gjt-;_w9nU{91)6G5h<$i;kX{DG+9&pU46?D5W%?(`*no%r_@Dj(&1Jn-m>zvc!1-lUK;Oi2$g zy!_R9_qwKRuf>*Y3meu8{({XH%8z#f9aN+r4TT^j#(=&g#=ze5=rWjw!ci()LWOxI zC%(kN`#t!=!+Ju&J0MsPHeeXsANEu-&TO8cC)0N_)QUjeW18B|&ttA*n)1~UMbl=< znG%tym3z}CKOEnasJ&0q=hNfgomfuvZ-x=K9nR#>I@Q`Quyb+?J?_PKPHvXRH~KvA zh9QzM{19f(76in@=Ej+vpn~85=4kBT!^9y;h^6Ng3jN{&mn6;2 z_BGWYC*+Se*lzF9+lj5DAnerB{*v>& zivB(2w7;#j#?{jCUN`vuwR7IO^F}RhS!O`zYtrw7JT892;i|gnonHekmk+~xkH#4V zV7(B@U|1No1b|>6^eH=T{(`q0A4&vL5YPx4up)%>eXiRirXCL;8)61tDCj{fKl50H zC=_!U=IX?0T6e8HPb5PlqmmTgJM(2qRrXrRw0>M?3a+!5H%eygZtSSC(Q`@H799kn z_vF(7wvkt6-AVG7=JV4B-(SA}%&X#U-*^1#D--ihhxP8$kJIg)!mlW5C*rNiO()|w zp&X$k7FONcw*lmiIfRGhAhE|;jmAe!@y?~ro0T|rqK~{d5`c%N>CpcqM9S~e*eWbS zoD9}SQ(91001bwPlaazsG?vz6tpvTdYQ{!R?;__#r5XdQUUL0(pA!g3-~8WW<-ylenmaG&)f&=y-)T^u4tqDpJg}>X{oB6nsqi^^MXlH`jS%DbMHI&l}V9FUhU<-8cG=oN@BxZcn!9%hK3y4ptw$Dwy+r zeRf z6<0@G4%6|=g*3M7gPM(N>#g&8rD4)GoBGs0fWco3K7RLP*9q~mWXSMP7?o6Lc_}AS zQWEefR{)NPYH~17P<~<{oEiwAJ`iWXu91sHpBEvXc7kI}kkiY^mouw=6>^;CcT`qv zFHG($MPfX1izrQCQ{-)H_v|Yp|9;?%>zFgq)yTFyxwY~$a@r4yo`E+?3z ztAMw&u^K<;O`4Cn|CamI+DGL!`z$YhbG$W|VYm(RpIn@rnMZVkG z@*69oE=qz9^P|viCS#5Db$r*g+bnMRkXS*TKs4GuGyG;k{${gvGv;cC4PUocIris59~n%V^|cM z<7LRoM?$xClW52|#D_=|c-SGw;F+cX^Jw1q$lsfUo-RJLp&yJtJ%^^K7GD_|jQd%= zOuGEFe^7AHt+mO2`MJbpQM2*2nd~RNt(_Qq7rGgd7xsev zn$n5~)lHLXiqaBQcp7AD-ac3XD$b^Rg(n-MYY^K?c$vIo4%gRbGX@s+Ni_FcvM&X3 zmg8S8_KIXbm<(KHq$Om4OmRiRbe=+TjbV-G z_~HX~*FWPXY=Wrr_2`nKi0dyu)rv^oxGlTa&SD#V8aqDK_sdi8`JA3LJ?fPFb)S1t zB%uE#X4B8c95iPNC;N(1L!*$F#JJ7jL`$LV!>i+rTWJQ0%|#01>ddQ{dUM<)h3_m1 zt<4y2(5tJuEkP??Y&!=&n#oRQ?bK@9*HcyxpX6!$onPG3H5(xfUZYn=#iZoiW$)dq zh|N3uWT~z!23Q|t>GfUtq<-VGD&lf_f62YywEFGGJfm#|IrV$Fkt7Zxi&*h=f=yn2 z5rToKFeMVca3PucVqUJ;sq{^cLEGQ0C*Qf3bN%RemSNVz-4ETtt;5+j3;fHf+ehWz zSehpkhFw(;u#>#{%OBya$C0m9DCMS-Ma+);R9PG}5AYqeeZC3pY0tI0QH6(!$r9~# zv}Yf;ZyZ2|W<|1|Pi+b;s;|5*-@TpkJrFRMx#pf0F<8jHIr^|6yzdmFGIDJl&&i%` zbhB~w!7)7CkrM7JpwaO>=KJdy`vCswsqe#+vpr4;#cd>Ziya|$hF{d(t8e7rwtvj34$$jkdw0n@VEOBe zdaDbz@B2CbV4B(V^3@N+hl`V(#BisrtNFQ=#D&gv)Rp^O9Rg!#0oT@|{^SHM@b$HYm1DDovMOB$yRUKjL%)YN^<2bwcGcis9M10BEd>t97VP^TRfs_$V zvN2@!?!)19dDXQ?XooTPr?(I#D#S#wQ?t!fE_D)CR7-?HJk4mO1xxgYxyI8&AKd0w@iMOf$Er=_)N`Ck~N4=0qo zepsKQjC4QdIU4zXE{J`y>ompcdTKLL8}?BMPoi!_e@La4gzCsy-lLApGNx-vnd2xU zCgDcctsV*t#DCh-tUXbnv6J3PX%F#hJpQTETs8yNb?IRj`h_0`4k8*P9|M3X&_rYg z@LoZw=3z#82Ai{K6Z;Q8Cc~6YebzTVkUktAFYtSG98vh*B<^?cyk5x@K6v=RTQun2 z?JRIne@*Qbe#f}&NDG98R{_P#!KxydFPT_ous@>}Zm-n(Yj-!XQ|h!uSHY2jd+$?(M1qrK9f5-mTj z@0#m?>$hy=>E;_n()a^~TgT_h<%cQVuj*!xyTd$R@}NvruaGXzg-X92FS%l~#wrfd?4yBDacEmAWa=)ytyJ5Zh1FXmbn3H`;7@(4=H)6))~Xix zk#$7yiZvmFra@6|KXNHGaY4$HBnB=p+$dwm8bK^2#zj=50Aa(wkB{Px(Z8BYIv?7&CoQmFa5=}abaq3hQ8fsuV zxQ`Ya55M8Wx`c%`BD&yknbYtS%V2?4-`Ny>sgJwu_4tX%N8a;1k=$UNO2Qi$?25ij zp+&NDNUCP>_WIWGwNjWyzvY$9ZjR8sgp`8c-hH@pm9wVy+IW`#XeCmZbM*L)qq(YO zvmo~my4^UF{i8giIf{U@mBrbX0KKK({Hc*Ym7EPKJ0~?uavQZA-!i30#w5}jnXMUM zQ;CgR$&F@k9I;zSkVU+6GvmUQ?%d6naiReNkfFk_Y?yXh`-C(wHh|HQ>n@EBn>}LnCn|HK8`KzFXNx{c4zxK zyxg_7>t#8SRk&#GrCsqP+dn6Y&3^LG=agN1`jt!89$kX}Lnf;h?qkGg3MAnvUP~Ki zwlxF{vC$53yiI0$$$|zJ#|DRk;1XnYawH7W!BlP%y%sSIR4b_NbgFgg#q)UDCQz*H zCC@U4Bjwt4!;W(&fuHQtuNWK4L&Qa%{bIxeqwM+^4J(gFAGs7*@)hWt<7T?XM%1Iq zGV&Zg=?E{x--_DlObc5+y)rg9^81vXf0HYV%Y0;h$6ey%{cVV^25p(i%pFRmXN8r9 z&E2MNP_4&N94QD?;`@>mD90xr1{Mn?fh9z29WU~GfE6tYKy6}{$W*lD*Ga|XVM?p|r5k40(1&Jg8|Bww!_`8n8}DP7bK5O{gtn#UY&pjgwRyfH4_ zbX}V?;*OWE@rrJKEsz}hb7TLjl|u=v=@#|cXF1AoDBsH5Y3sz?)iP*29(&J&+yvt5$YMouBX~v(a5vSn*lByOyC&HdMc+seJomn~ZN-o8d`6zyl zwXRj5)(8KW6~`|cZ{cTH!jv$g*RQ)<1=1I-D)0t$<$MWFoawT5cc&$f)6h!yZ`s_> zbyp%hM`@F`pur?f*{p#XCv4|KBD$kD9S5wCc!TCS;kAz(($ zXfQtgMvTJvN8?O`Y5er`(t)I4adTZTl*)vA;1g znuMk&md_o7c4-r%2BHPc_JI}yg)k^9@!}`5nXR~Yt7E)S=|V9q)Sxg4vl-w(Z>l&w z3qC+aNuk0pwxLl#ha(7C?>%n@og0z4udn|YzIb!MRhin0Wu^w=`Io}F!irD%pR_D- zUpr6NY;Sco&6-Q%VBCGb&pzaqv8y4Hb8~2!$}_*^qt7Ba3V>a;H)dUp>K}+lv%h9d zm0%;5mvxZSg^qx*0`VD}lmLBXiF!16CSLNvpm*7c?27yeWE~Kxf<#Uf-e@F(WP+zM zG-M-zDpcQ~(F2lC?G%}hbu!3_SEl0i(=wE}x3_Xmq{P9_v=m!FXxdCZcaDS=!Pn^lfy|^FTgwWQe6#s<<7_ zmKZu{L7P}S5X{2jsB0DxE!ES(7wn#$IHwF7bNgccE}SDUjKm`c*k7OeJR(^l8js)G zZPfOCsuewAn~>uVuS`{mnXIVRBR@W2*VgVl^TE7~xplOjwz=V1p5JV2u`LkU?-Y(8pw z)X-oLW+KMur3KSi>`HwB0m1-MA#o~ls|;}i zqs+GI3GzXjtjSOsr8QdYN}ZONY&{FcV~$fH{h}gdPFEcXTDJK2zEh?Qx&D`n+c!c> zjWOlb&F*$pVX4f*kSCl(ZKWRwa3=O@Du;eiFe+T^SX_vMkU~lBF7N#hwfU>w2>VQ_ zNDd?h;iBSvvg(#mlEGj{;uDX7Qu&6uxk1CI@W8tRZwomr6U)IQ*>oF@XcH&47LZr0 z#VChT1&6?1P(l;CgPDYc#;8N9#)@ZPBZ~X}$;43z9ZPDB#iqQ4&O*xb4F4{p59b1{ zybbLqZ!R}g=rqXu;{}0qy5ccl6tvfVuge6aQOKvg&%Ly+Y^kcozdYfQO^#ELf|$`! zv*0D66CI99>CjL^kg(NoRy$p(bU4={G1&N^MDVICdhPKTFrxp1O^|-x1@`#v!ud<_TtE~ z>q_kwfMbc-+|WrzFsX;&N|DJD*I2ZVYQNAju3HR=;SXfL*DW8{dR_AV z+=0{6>FN9i_sre0oaJox&CLAk9QwhOa+E=r(SDkR)YX}HXe5&t-gszyp%{1D_fdD| zm*pvB^_@48ymF?s?y!VHMs)VIS4j!BboD%`=ycSh4dM>mumn2nKzs=l94V_XFq%}W zmPZ>Qzl(rCx|tXX87r1zxhb7ek{LFtX(fv8T544))vQN)n{3H(F6Ywu%Hi!1iC3zD zoncJNc;~reM>%qxMxUpwwgmN&T%xf=^;Ci)!FhNZ3MHa*}{vwMD zT|#^T6tz%3=_WclItY8@h)13xom_ei7zG=Nkslx>z->Gxj1!Ykr%%m7Bwry3d!ol$ zSs$guYQ{{UP|9kf<+dMSrB}(Rk%qnCC|OK*iYrl*W<3Oi z=_~2? z)nB=D#)dTBhw2*GM!~;?Yf2UOhRGR?KgT;$LR@0)6tF{KAaH{>gx#h=eEx;{UFY|T z1FiPs?iZIO(=YS~w&JpethTO%+$m@oIT(V#)N#JK=_yp$;BjeX#kCeyRo-{PtWzXH zwugaCiPuQ*r`+7>6>ggJ#@cl$ta7?6Y4T0EWesk9_j+DkT_iakxz5sNr*~GV4sv6)}X+vFDMeW=>P z)i-%%7nr6Str4L`YjN^SSD?)(a#UtblFd>2NWLa!@(|(Uk+HNmuqX(g$uHDOX$4Eh zDH+gM4|7PRn9+h@kyvkcs9r>+Fo=b5(v836nj?iZm};ueoAiR*uk=oiG%-s={7P7{ znJsmo_LS2vV*ED@*I4el%!k*_)!`@9QbVf6Q|uT@H5tUQufCj=#q*S)s#tNyTb9>( zT&?Lm^U+~n6sD_;OkTKZ8MRHFmV7p6UrKxA-|_s}n(jhWNrsvvFt{d(Ne@E?+eMO= zh0`&QMT&_p9U2a5GvE-H5y>_M(#gLg7EtDx2;4d%j$=p$!mwZ42?sE4De~lcX=1XY zDKe~8PHROeFHTlk8bn3zWt4_h(b-;4rm`O{85FV%SEXsS8p1}=6rT-u&3`@%XIlBx ze?$?i$BD{xv)1)AO|f-OZ&_;lzAZ^}%=BFrz66z65RghNgcckk3rWdh!S)Yq#=RLM7fM>QaFaM7C2wjRiUARS@_oRbR*kH zY62y6^f4mYeJ7uoV-Lxy-9$>#3mxz<&W@td)HTQa^6l#KG)?ddE;^K`D)!)7US@HA zW396W9Vg)!fgB%8f=t4J;v9A-aB+^_2Jwi577h3p9DW9IG+mabmmgDU(HNO?-!rIEFL;#e7xp@SH2gX}Sax+^j~xMthmt_I!IIeE9UM;l z$RcbWY%}p;I_%KFlrRv7DNsT8xuqA?TxmiWtXIMm2ignL<>Ct_6Q|64qpHCFqOVD3 zsK|CG;v$ClSW%mL3<{DPc~;ow7h`o5*-7cvPXG>;@GuOJsLgodZf4QUzWBP4hBV0@ zMVlw{i_F%buyxH%@bKK=J0n~tzE;j|7D_U`@wb0N!_qWP1ONzJD(jMSPy5pscG zi?{D@?mlYm-bIt;xgYqtw|9G1y>%cc8R$)B(ND02r4Xla@i?vz8%K2~UY*?N#M={i zti3}Tjg-Vr7l-$OBr#|pu86A+CD;I;DF`1Q86R&zj!JA)aj>d-Po`*2AjyI~?V0tc zWCS=ICl@G={Mw^C%yvh;f5$jW;PmtZdRCvCf91w9t4<3C6_Yl%s$&svxWBBM=~WAV zY_8#FQP^@8Cr%m`Sbe8rDb+TFL(s6k#&RL4;oHY=AG`cJe1$yd_4kDW&9=PjR22A} z%=mWDkf1cd)YyopRW1_P31)CPF(@FxG@O=}HLc-83dfVMC@Ue0z|~7{#FPy#3IFt&uigl7G0W>cjBKx7#V5)d^uY*d1t1J50e@sya35H!;OLj#!u`L>X$ullb!?Mcst1kqF4a|V-Q z9sJ+V8=s*iN`zq+SH1OP=`K7ln9nW7!FM0e>lazSiFc3{6Ngkmu1Tvc7BdunJZYY_ z%@O>Zrdt2|^}I5E={9pp82xi%!^hf7U5ca#|8Qrp;9_kCWz^bw5#7DO}@u58PS)?0&>F zQn+B3ftSHy+E11s0TK%ZnMAk_A!e?47`#6aj<|4>f+HdG!}wu|`01cJ^ga-fX7*1`3LS(7FmexwgM3bxeO?b_W6O|$EU|nd5ikCsK!2VGQ-KH zJ1;-0`2O%&U-|6del$@AHkj%d&N+hnA|f!!%@%Wi=KPc#uC;JK^jSYss6U|!mcw8O z$Ce6;K!oEUgM)$4P=&`R98*M~OhgbhHN-{Ua8K`9dzf5pXU|A5k90yPpaYW<4Fv83 z5nS!v@Ygu|@gBQ+%tp?2N>EY3P4SZ{$^`H2$G(z1x8yVJc*ZswEwMx`wZiJgIhcLd zY4c>#%RNsee7yQwZ9o>Md6wy%YcnFU2pkUH!jFK3BBDZI!C+Vth9TFf@ zf>1sQ>=>wAA6P6gF%Wdx$Uyt*+%jowHI|wrG?;H!61CoB`!NFK_UR2D1@8%aP5Mv^ z$-q$KTD4A{mKZv*+b8b;v4f9_(LBDS3KQ?eL5KmC(}L2M+cY7YsRJSA1o)|#1Bi#8aq;|;>3=FiUR}UF#w40 zD(qX^YoF_BVb45aU&8_+q@gwUmd!VE1qC6(DlcXEPkatEO?m7Z#3Iq?Xd$rCu^Sy* zc@$6rydMJVr(;bd!jK@7Aali!;gbZw@IkIYAb20yJJX0EaDRk}I2B2nxC9<^alJiu z1S*esB1s`05;iGV;*7<{ZiL!P2t%X9Yv#?CmbiXi_Td z7Os7G@Ef{Ch2A7$bP$L7Ft$|jU@%nygLojHBqG8IjtF3q#0EqRgDrw05~Qfe07GP8 z(E2(!2<((Boz0RuVGf8xv3ieB&o4s;3nmlGL&T?Xfgi)w5HCg}!s8I{LnFS3_i`WK zo5sUOCxC&W?1WTsaS#!Q7_|g34d+t`Eu9)7bPa@vcSAx&{sR#E11Np7vi$x#rBheY z7evrYt>)ny*n?=Tn0Iz zGbg=;Xrk2B`H5GB%hIQ9MrW@|wQmei3bk^)2MV-4j_?vGFB>K)zGayx5BUSQ5`7cu zZSdpdA}{D*O%y|NF84@WOTVQiBUXI8ohj;Af#-%-v}NPm&9fDyNkiukfa)l-;dki< z$I{YGv|!5OkIKC%Ii_8955M=x+T&Lz>3b~?0<#Im=On1RZONLNvT`Hm>RlXaI&xnN zzeW0~?uyJGiZVXD5t+RcmHX|bttqQ@lxZ70G8le4YKw`}<&cOC)6B zp3^<@Njgjr*XqjaXWxIUd=eMVgEEb{T|un*WQZuYiiH2im3-E$%JuzVJek;>F!% zi?_JDyHniV-J!suixjtFi!bgDg)T1rw%;!~_vGAjAS9W2W+pdep6GJB1J?T|LM%Rz ztC}0q)h4NF&$~60dXVKYaInSbt>*0Yu4r$24cPJBEanm#)pdWI-0#1BXOmg|?c^rc zkc)QjlGd2(wkG}x8N7dy{%Tk=lPJ@)Su-PXf~v+ zW~l0x?9ey#Z?tapy+FR5Mv#fNx;)9RO{lr5#MUTR?OJrn5 zV*Wv3a99@CbV-&Q=c1AG_Eqf}buDmqBhl4JgnO-;T(97+r6n9V>2tygJ;~5KyNgl& zzB-xae#+mmQhs#dVD*t`A$nUfc&=->6Szpm!RwsN}C|FJfQ=Y?@XNPAKg$)%%E@6J^a>+zzPCUI0+t${}j`F_geo_(6A86P|*Vf)b_ON zU*+eo?Z&*VJ&{3|sPVa(JFz%iH!2*nsiztvkJdI`QYl)jUVGwb2bX3I>4>G*##h0< zJQHLx93AQaT5UdDKkKAp*B=miM`*1W44Irx*;g+kM9%f)l`nI3t43| z^r~El_XJhVmDG-P$gj)DIUr{bIA)=htR^nh(8eSWIB2Re=uF8me(xJAJ(bi?ZRWK{ zI}bP#YEYW+SuuN^AbLqIcXZ+R68c?7;x}Zzczxi<68mzDXOw}v-8m#U4C@3_w zxVRv)QR;3|ye%yQohsXMQ|N8@giPCX6Ctd#um7CfEnv`jTCfnkcFF?o`Qe-`+s^cf zRj+=Qo>onKg5KwtUa-;(_E)AWs#vn(;{nrk8C9|nTp zxe1qFKF#sKy@lQ}L67RqJtH7X!>O@aje%o^@2_}o*O+K$yF0`o(3HE z9I~d>1CJP@(w1ef0y~XuY_B47ddG(Gi!wpnthRuIj%kp=R{qkn|CFss(JRmW3BQW- zum5146`5<9LxA!H3Bi^?zS_V-;6=1=gdvVIQ>ZQCKTYeyE zllX4?8?QRY8Fbspm&<^F?w94HkC;lV1cNdR?q6>_8>g?A}IhwiIy7N^SfR`@-UK0Wl4}imH&TZuy1`+FzA5 z=kGhAC+T0GV;Fx(tA@b-B9!ne4jmGowki_xwijsnIDR+DO3*sbh%d3s`^(a^0~kh0+P8EK7~OGC-LpG4QSr zzFRSRmMVhs)0&7=*+~%L$eQKa66^py#eC^vgJ-q+dooN~wxHAqmVDQkjUojap0?N> znbWaw)wV9Eo1B;%IdO{c4P9J+Ic~HKm!2Ry71>beip1$zWjJA&uF5>?Htzb1KwsOW zf$?h-m~^AhGiJ~D;A2lfL0|k~U0F?(bf(;Q-!r0wUFb1WEjRo_O}=6PUg{c^MN8|c zbNNt~Q}4{qa=eJ=R4okmFf*;%?n!L?_(OtmCv?ol=26qc?BOqhmQ@_X-N%@}2rS2u zvSyBVhQLDd-^W=2gMvPR)jdthZP|69kHXMC!87DB*@a6{Ngv8%p;xPzZ(+RGW1IKj! zlXvJ6@1!RpH^-LY&^mexrq>1Xn&Hrz@hCW@fFZKHL&gwq$i~`%xM6oa{)^QkS&#;H zCF~DD(@x&I7ux8UCq*Ic@!yM;bZBO2GyIX!*YF2{|^T5uSb@*lZI+rgzlQd8E zCLOzAam2Z}U$PEp0Lg0evn>aDs+(o#@j*L7B{kQ}F6t{JVRNRgjkTBTQ^9Sq4qH=j z&K77T>`Gew<4|%tAKKS4b8zJfa{i`%`np5t6Km5C=ws$}X0<2PJZGg$5nSkDHoyhW zN@ER@dCqEy8msvS{35}N`V;trU&M-Ee|^ao5Bv&Zy=d7YlmS1GnVHnTN}IVe0tRVc>E=nd6f0(GM zX;M?s;3&zm)zmYyxc(>Ml*Q)po4l;UNb{pN^Qpr^8p_D`pDc~f(FtI6>*B}u|45BX znl^X-A|&t1ocNw6=cO)TX5&;ht?xW`@e>EmDrab7&dN_Gi_?;zYawmBnbo zkJg2GR+e!4))vSYZljXZ<1?bT^zgab`jjVM6sj!UD*LoNqXBE}=?1r05`{-WXtTa! zEZ@md9str~+V34>e`7A1_8aS1>QL@A8@6;bJ#S5##ykGbW8UKa46&_Rr`jF35RvHvy_ha7LUxF8-r>C$)K*Ej5aDQ`#fQI|h+B3u3Gb!`53RWPVOHwaYh^`WK z?f~ng@G~b;^_}+jTnbd4WbFk_o!LDK@v8ysdQ1&DddWm3b$yBpwbyJauY_W~UhaB2 z`+TcgOtlR#(`%k#i3{$UD5Z`%f=OS;j~u;)I7m+aB51l`MxW}>pPhhofLaFm9wDCi zrTNweJ06BbW8bHKhASzan6YM)o*ZB3unpDSs^sYyT5+?RFDk~#aK)|u#?FPihGyEL z*8#HQg<;Zn&oZ(GOw>cn6_0|3rwrOdc?-fWWfue#*lw* zk59&*NO~dfQK+`gG+YdwbXF6qW&aS7YDM?_=DeX*JIl_q$G*){YwiuUr6LUY+*t6zMR^5?6x(I*lbU zG^xXj86W)Ut1G=fkNZT22CX*Qd272%Wa+pQ(4}gb2`GQ7&T0}~nw2u?kQ4^pj(gUK zGLE;%DyupMjsA9y9YJdY z>n6U1KaOx))OPQGXKSe3)Y?iqx{0cJ;m&vBSD&^hTp}`IpJ5=9XEF4x&8Pvi;EC>Y zntXftaI2m+JGJ65c|I^;A*Q-LR(E~b;bn6%Ja0p5tOInhtg^mPZylI>j-(A`7^-RX zIWxs;GO+sL3qU?)>)J{0)FVTPPd}Yk?7h|HpOsdPbH~rg?$nyloSVuWzOQo=HcQ?l zOg~*Dlc(VQi$GS;!l`8?1bixETd^yzdHl`|%mACD!E7bIAYaO(G zurlwKr%paMr1h7U+LQd4Vnt5_!cr~`Vw4(AL@AJ#owK#IoO$$AOG8&n`d4STduG66%V{{L$Hv^A zj4z*`&82@fN5UqUf6bHnhqOuEBiT?ZNM7=W?L^1b!yTJ*Q|n<^*D7Q?dE?^T+ciaO zN@iGpVC><%a0&1qlOp0r*=F_K?vH7dY$?E|;%FPa#_+~SV$iGsCyAZJBvA%s1gpnvr}{X1|G}$U+q=NiYugu0lRt#P%NK^KH+;5s*!g`yi!LQ0 z4y)I!a)H+qqwWhL#4-ix~{`!;3T8I&Pt6dMw%19{Bmh+buK)Ql$y{TiF=(! zx$QsZ$}Nl^i06szj51lWJY}t&ak4go=1tjL6y*AEz$iTA!11JCG$r!!$cQtMaK@zM zY;MSU`F|X2Wo=rU$^akRrR>Aq>gc(;SZK=D;EOD ztxLq-c|wfYbay-aMe3IPd~_ZrCluaQBkd^d9aENXn~>}-tUa^A=bQ80qpfXiw#^2P z8f%TwPnymKGSRoc8VJfjxen8BYk^~Q_9Ijxt48KBrw+<)hZG#x7aIz6F>OR20a?fw z8)lV#o{Hb5k6+t9H2(1i5-leE_shN6mT<{C&3wxQ->T-GJ1jw%I zssRGDac;jX5MEY+mg3JjaMYHoxoX^6CqioeBFr~*8^g~<1N|nbD(c(!O{|%H5}*1RuIQn18}E$s^btX zU{g%SHdx|agItE$=;eJ`EHOZQ{2lj`J^U|%p*fq4U{;Z8w!A6>F0}6yqq3ue#MPQ^6~j6p(2vA@q`ohPXu2{@=NA2 z$>ypfJ)2p@wat!4zc>A{%~y=)Sn6{;F=t#SdEMYj=**749S}VZ$pBln41lYW5%gW}pG3`fi1{qS0CgxET$cA+ZD!C_O$gs?>ajIKaes-AL zDvUGkw0y9SAck1r&Zs(__?vYgt2laODS9OXbMjQywS_}fT?m^K0oRPHyUHcuRgFB< z^KXMNLUVIug;MO}8PZ#kDKPQUB}Qj<-pbKstWFkwAlM*pou}BY-Q&wfhi&Aw)&p$y z))`;wtgyHu?SJwbvGk;a`%#l;zEDg&DN@;cjGxy-&eE0*!@J|^^$e%610(WS%H|CD zX(`qAfFB4GMXuJYCjl<>9J?e=%;pT=h$IB8Y2v>D&3o1s_V`jnxOC&Fvw>XsQ8sQKQ0?98>=!i8ZYZyu4)j+q>>aQT+hg`|1pSRdD@_fNie|^QNGGIbn~VUGFyKnJTRxr8D#N72byN6978@=xVH_ zDYtiC`J|izJU*^;MPX3L{899rsOr6SCe2r_cAST7-*BYc{vwNC;B=V?Oz5_4X*;Q1 z6sO>jdi18v-X?K4O<%L;C63`UH7)(I=>85_F=x#lzHz#@P+OUO%wD#TBJ!cs<;|3_ zDvLzYP@wS;Up&up=3Ji>hLKl!-^Y13P5f2Ih}CWNxz7~kS2j-y*uVFuellp?Y#ltV5S?*>i^;xSpmVnD) z5trBU8;A1+P5=KS@;pf9!l;c^;xu^agVpvo*?QD6OZXN#!l&c1$$>ehkX&df-70h=OnEkviTroK+zu5MUB2<*bq*T6qxWA!Dg1lzJ_UO z9-_M5YA8AplfPomTQsBdYs(DG^$Wc5-iDbgGk5j(HDKV#VI`c7w%v5WZGgOhb>ss@ zgGfco7@w|&vCH)35_+{Gk+uV`%hh9)&f5NJVv%C|5Gmmm!lD#0i1)NYfDb)CN1BFe zsig{}#$0TRLtHfU>DbZquDdQsA4GB#0(^Np&1hG={^>|eMXJO961mrTM(~@`MffUY z&A~A*v=Egzg6KC&(6=X#{-E#t`$<6}oIDZfKkOJ&N#q}O|90mm3cxc{S%o`f4`%JzPq$v0-`Z(!>~9@di<2+c^l1o zNz)|LoEeAfv7I(n_N;HLJaW`pt!MJ>fVpXD^QPpnMcn$T`8KFu&LuYRF9PXbgz;k* zRt^#Qi%IPa1Izq2+V(Y!8hV$H<2q|6jbL~?c=2)uM#h}=OP$V;9u=Dv8w6YEHG`FFm^-6gjSjU zZb{CAvV--&v#K$nD{0+4`t3~%m%lPLoVjG9x%HmCEk~KU!<^5XqNGP zva3JO0%ZKMD(wSR-KTPHk9LjjAyAP=@eb+Fw&oL3AXW<~-sSPl5GV|GA?f$_!JRG)JA*A>lGCq){#pIHue7zBV@lL zp78A%blJgU&6Oj;7l|5gY8Hno;}H}W8&_uoc#6>-Zq4oF|9JUEN}+j;zGdwS+`@Z1 zJLIgVXQ0m34~23V%p{>lU#2o$Gf3}$Iyb-7Ww}U}F#UF8IVHpra>{_E`IXGTD_T*C zi0?^zJbg*mF!c+IMFM9?{5CKTC`|SOA(?cotaPq);qGc+@YqnR@RmsBtcXKfCQ0~w z!IZ_+kHvsi#;hS+BwGf%YH_kcegtGpl+Ip|;O=zbM?~)dsTU@au0tO5g`k3ZP%C{j zD%8V-M8noLd)sVO4#n4jbIZR7(i7IT^r(punUgI){Sfx_6t>IAczXAo0bf<)wKmWr6uCIWJ9$n;zg zDhF~++qB0^8x1mly`sJYGFc0alzh3aoY=0cKM7B}m2cLSFW~A@D(^9{Kq;E&+>Z&h3yZXfW#y6F{2$67TzMzu;n+3qX|^>%OfE!IpA3l80amh@jcw%pNlPy) zh0-ljgz~A*`Rk747g|d!4tx>&A-?}0`pu(9&Sv&sIa2)l{~~~$oHtVE!rd)BsCn9U zs8Gwi5gPZe5^p&ZG;(!dG3g6f^l5Vgk;0wiDx(Y1b5AT5%5i%3>0mmfmU)n~EYa(K z6Gqmk0g$f%DVeAsx{ngPNcDe~XuDEr5=)eN@`9bd>RCxH*`}v2kt8qEGi!Jg&LS=E zAmPy1*Ccc53+-3%TY-PtY(|t^(Re_YkY*dVK&b)An^6!}hvK_kS8mX4Zj0U59Y3J?f)Po5wr48-9^CX0R z4Z}p^s_94le(+9+&FUPB^U9zrc`N%Gc;16Rna`t2_-ClGT~M~`4>^bjm(&Q@{~JbD zR;=lUns1=;Y-L}w7tfZ&_PSkIKGbIq;s1+}`5+ZhzezMqElW>Hxfodi8ax6=l|%*X zr}(!utG8L^1P(=pCX9)>6{t zlJ4q%@W&c{sr-wua%?6tQD~@~$UT(28rONe@8n{~vHFeqzY;X8E!?+CHml-$=m$}- zRgyUV@s-6CpolNu?*I~-I(r<97*%t87q}V@YE_r%TMMV8`l(BXu!hu z)DsZ8g@7D?cto)~jjJiC`FSb4t|4gjLFR&{G(XVG)esI~T3fTmG;^ox zNtBAo;`*x(F0e3yj4AUqZ_V%?sNT3hAH*lVrZl-JuwA^d#zG=rn5-HZ_4VAH>qnI< zAo~poRq5Z`ANlNub(vC1jwX?}wmZO2%J12trCC7aaX#WBV_ML8`9_1ZRHCJRGRX8gRnBBov0 zvt_QchP}wTfU9mFaB;2%G5S+VnmJjGA*GE~(bk853{Q|?Gn|tz3+a`;up6Y$(OckBSVVF=%@25WU zf?a>7cachkXht!6>0xYL>x-|6A82~kA$Czoj@g~2galF-yDYAbMBAF~_t2~vp*(!@ z+QIar_%T4brx!Ygd@=8oK_YwC_}x~S&feB2n1<(`TvAS0F&f+C8+>*6laZH@f?UOS zBH@Dp+_UBuT+=SLfA<}WvyGv1CHylp{Fs|PNw7a*T;(D(IIfVLwHS@pUZU{g48aly zD~F{iDqZZSj{psxT}#q#q8Dt-Kx$92KYXarkD)5Sqo?#4;7FmM?3|)e0rRmR{CNC!UF-)VTW75e;@Mc58kG}|14L1s7GiRd9m34d*c7bWf$D7#NwHI@zDx#=qyYrtOudl}J z1A2g`UxNey0NWW3`3fs)UQpUQ2BdP26s8P+d6)W*tBjUweFgGETsYBL2vD%mXPv)D4dbyF|dyL5h9;!iaB*(2>TodoFJMup#_Dtp> znX^Ed<@-K$Oz!B6zIFcOXtx@=LEi3)STJzBx|ZJ)!atD+;ZjVV+GjX8=Js@vpkr$S ze&b^-!js`fFgZtpYPQaFkCO@4>zvU(IP+~p?YrBo&U_*T7}5>`PNGMw3mxr{5Fu}P zUQN1aHKRRJK)HEkUaeLF+4{@ZBG}Li#pJ!#h!=7{nM>4NJ%syvRA1S{xow0UKMv;R z5#)hsOR4{g>cSQuR+dSrVBg-9jQ>Sw9W!S3-@-zK0ORm(TgECbmf7?TBA%UJ_=Aij z=CaAgb$#)ba&UL)stQs5Na6=b&6xEX7+KWRR?+g%GE0StzjFcW831uhE_hyq8jWcn(@*a#dnwo8g~G)Kg}=rGZO=HHhRexE83 zv^Q2^7oG#EDc8|Z=s}0qUa*>&QK+rCJ$}^H(_aLF>tdQFF&X8LQ8w4D8yqR}H#jb) zQS1l+AwRVlB`DMA@AHQ_d0V~xp_+ax^vyS;<2)l=19#NQmDKjK+62p$I|=}eGe zMF(Hfh5D+|u3aBDMs^E~iLIK4YGlICCZ=@R5WTobukIIK91kaDw&XVNe-+_Rw>V#) zN$-+lKv7buJGq+C&hK<0qaQyi9g6TtER23~c1?9_?(%I-oE8p8tDxX{WYa0nasuka$fro;@Ev7#Xb}fw2)vIL*q6?x|=} zRg=5`fiF_(j7LsWLzZSSC1Uk|pV=&zMAczAB)-!*hF(Y3$VP;h65w7h;fVeen}ago z$E4)ut23#nvKDnOYO9IjOKharR+BEx&&yxLttqOm9@>lYmkI+yN^pFH^^mTZ#=|bv zdMt@MrULyZ+Lt)qW{_ARAL?(GM6OrZ<>h%(QTwln_5nT;T&OV_?6WMSsTjLv5cPT7 zhH{5z9DUMq{AXt*KWjV zr5yXF522;uv&gT9yk5t1gdoV9fbj=$r1?wg@CL6NwAYUye{`why`5;5KDl{`bd=F* zW<_;t%128twtag)Cb48wO>x$E=)+tEqrWGEjdtPT)v$b^>nYy+^ zSt~H0abBd(tZRYYWlZ6PbM|)vMe)Ka#Fng0=y(^w(X4QUaG8NMe^yuPNmk){wYmi! z3_0=Hj3pZN7~ltq^d-(C;@ONO{YCwu;zXsy>D`DJH*{X@0N=oGNQ8l$7)Ixh2_p@% zw9!J+LURdlGCzQHJ&_A2PMkr;aBHvA2pwv<&g>n+YH2 z{UV{Fl6s>@?l2CBX#Fx3z-lF)-nu*w_P%>@>l7&6^b`yVq#|lA$<*$eS*dGXzW3U_ zvz=-=!V{-TdxX6_;;1g2`8~EB+IXA?%%XWo?iv;G^7lJIMYAQZk*_XTHjxR{A7=EV z!BW=FXpPpy^~~WzxCNxX1QD?V=VUIJSXkGgCsw$ttNPCDg@=oV&L+Ix2&R(7nm+BKK)$UWqovwu+ z{b)`^-iY&0s2)<@(Gny{d!>R1=W@iiYzm_9p(OQ;UjjT%ndK~%sJ%uG@}h3U$N2YwH(e9 ziu&`k>~R(-`&e7!e1)MsA-)D>_GGel;MD+!c%JBb1};}b zT&#f%O-lzJZIjGA*ZRA7kp3cI{J1MZQr0(aeg5G^Hw+8a8zMmeg2KY5=~Y@95|M`^ zek8NlE!({BM|b@A@@S2NhWvQ5)GYT*DBFB@BtjbEm|h_Hnq}jvju8!jZv~maWdMrN zX>G4(i=RebHH=r7h|)1O2kTq30u>Mv@>fS*d4JC+#0^#3L>=%PT9J5^zOkrBW=)P4@U>bdIBf3wX5Gw2j>8Y>&Ur z4#Y`HGF=vzTWb6~b{&xsRLqnP$|<}W#Bx#d{^amcH_6CeXIzmNr5jzUUcO%01$Cb0 z+JDREbPk4Eb%W-U_9(mZbc4+Ehy(CEq%88%(?gbiupmr{TRPGEWAp!YTEc2D-k+DuKeux-BmKbh2C6H1wAQ1#DW-$u3>>_cS!z8ff=gR9gqs#8i#ovOt3p^ zNS5*S`02#j&W_*XKRdo&tfbv@!n8~YLcmE-X4x^TJuz0U0r0x2{|=Z?-)kpQwWzQC z+R{mAy+)Y2s_&}Gmpq2uGrt&eqWiU+4@22Q+--!NCv!cQGp#`b6snU*dF~B+K@#;Z z=(X&p{Bs6bD!iu@kwCB6uQ*&&gKh5E9N##;%d#mB&f-`5fZx!iqci$IzNfBdpp%|K z2><-8)f;>&Gw+OGWwj?o^)t6rXg+?vs09`o{mq7P^}dVWoH|)34++j8@PehK)sSx>L}lL; z6*`LMgX4IruP5z%{mnLQ4s!*fQWs!=xn@4e?hM)7B$h*I(`Wg&rNr?K!W(Dv{CEz{nfZFSrcj>o2 zO?$|#4i!>IHs3wI1VoOK$?hW|E)`noeFpgO7UDqA{HRdxo}Ni>3nVXI0z&S^@lO0l ze&eL4isB^79*TAv7AqsiH}xp;s|d7ihv*y2`}|O~&$>EFjL}I??>gp4%YS7(%y z0J^P8zzsn!)lai5HNDF7tKd>SqQxOa*Z7AJtvSK+5Gw;y1Dy=QMSHawMQsk6c)mG> znILhT0z+R!G?qjdWf4^Z1imJjVF?_8q9jzxLjA>L=ZwHGsAw?Nl!#uYn-Sgv-R9Gs z-=q4<`Ftf0jv5~Nxiv`*R#P=wcX@K!wbaiT2~2CPnZ}C&c8{Yfs0iXxD#=U6F`?Ml zMnM(sgXBKW^=_QO2vNk3m^Ln- z8E7`j!1hOXC$RG3g(FA3<&Joxnkh*_1OmJI3CNB27@4;HsuVQgqfa;&YK~;*^B|#V z&KbF-`0i%1<3{zis?Qt;%@J^{GV%?c9oh$9*anofkU{byJgDg4jXXGx&OB(4;wx_Q z&}a#8(0utkgsc^tXvVBje#DD9vYk|zq{4@D<|)=lwd_eo>63>YDOq@*7^&_oNFgU# zPfUsD>}T~|!XA0hO5)3&WPM^j&-opnX5;dOClw>GLbD3FFDB@I+r+#WH|!Vn2A*up z?|$5DE)txVQ|#g|z5Xk?S*!nrF=_}VhJ3N4ARrqEz{>bIMIk3aV5R(ES=q(n&!V`m zSVk}~avfL%?-RR}20cuIK)%`g-^j)xxM4JC$~3$=BD#adWL{;E2hB#69dEA#hWL&! zrZUc4#+fiuM);@pYfj6eH&@e1)9*!K$aNUad>9RSuVH4ycjbbZdluPDcfrK${%;N= zO(fwgigiLHxH$t=^N|_^|7G{ldNhAnDq zp~`fTB{KmYH{U?(2&F+DLAUFDic29mU@Xe;xIHaq}t)s(HM;x6( z{-Cw&9(Qv~vu$#@hoadNF7gHQrh}JLP7HpF*Ni&29Y8g9b|_TBm^!_)r#rYa*#1+L zdG#@b4pRTYuFx!OPs|aEAh^<8?}eLp8H-}CNou&R7ZtgkU^jPn9RY zaSIL=ddbT66x{rVbvSN5@&u-@1iW{L16iq7RnIus#CFO0fn+$fvz|!^a%2R&1W5#ZTTM5cRj&Go-op0I%h+!N*e z1_*`pU?zNs61ZX4flL4a-@0_2#LTewqrBC=VqYYy=CjMLHq-WdgY7^iK1v{AF~%2s zc*p;s%#>o{quDn9O8=sk|HE`egtEbm#?MZAh-&dwv6?f)%hZ%AoU%dY&(JqN_DuRJi-{=E31i2 z3m1IL;Z;O11s8H4-ZLAU*2Kw_B+SlHDy&!cnN8TwA+@tHVX|8-u}hyt@qu$k*XUG6 zSfnC>(7FFb_6k720dMGML@L0}6khVhhXwRfIs zF0gOj>kL2Z|Dr+ZR!5I$Gro3YTZM-ahJW{|!jmE4apM1x`oF^-D8FwF8pWzo+#oFOeMS7D5Uo> z-wlw(4g@~Y;LL}h!RT7~^7K!X^0q?IP6mV3hQzO^KB(gTei!Cv3BZLFN3oRSAXX;j z*388$Y}7t36ez;dkFntY&Jh(5#dD5{y`POH;txTY>0o|L$%*OH_~Rf*UnEYCE1opf zZ3A8?(BnSw=|jSmnUOBE8Bck;LxRwr5OkjuzB5&vU3lJ4X8(NMfPXD)mQrrmIxVlk#Y zGEaQU8)uBD0s{El>5>zUj#(s(-W_p$IwqyUtqhTwP5ww^V##0x5Z7dBrk$Z@GvSe5 z$YB+m1pc<2ieI34iB(KDjX^&fssIAba32DePN^QuReIy&cl0`nBkaed2TXLT(X&# zJbkj(GcOyuKIiK@&Js5(vf!3riPAWd2np~dP@vcKP@z*c+ zrtB!TCOmaS5PYn7_4K;`5Y8y|J&8LRBp9u$&IqipG_jE7l5As|9e&np;K_9yjs7rp z=UFZ78Gq2JL9K-mYhbclx?dK^KIDMYob^EPfiH&!(??e6l0NR3KGsfY_mP!CmO$WL zyx?N~bXLQVDdA0!daT%v3 zFu0Tk(^Fv+;t&BB55Ae1+!zZhg@h?*2CtdDHw zM3~iUO8cc%xkR}IveX5yVf#dB1&1|#8m#3i42U08$pt_*>B;gUitWZt*jz?WP0hyR)N8zGO*{V<3c46eYiuq^!jowT>Zu%VaEg|xqo*p(3!8-aC zuEr)6!RRq=W^lL*z35{=3`eR8p2p8gCyGSA>e;dl(Xe*}Bb=(H3GogAKt&hQ%P- z;&-p{OndvEs@bHGt#$=)tNtV4;%WvO=XYwSol1DX-MMZvEA7nZ}u~{MYd3Lnb z&Yx4((hQa()E7m$_IO!@D^9^>#$Xhvceg&&1j~`~ z$T_$}M8cKcQur+sr3>e|4*r7;-ZN8GG)wXH7`%i#v;YOtg=10%xEF{kgu5=d;%G0L z;OW|9XMy#g5d*hS3XMfH>Ja#YDM$3rg^5biK;_BK;4^zN-V#Uh>_ft{qSFF}j_sw; zEQ*RR^4GxDS1$tgbU8-p{N%d+d6$OKNO-f4A2~AV8o^*8{;m{oKsM!=8@-7*()-LL zD=zropBujBGZXw31%dlAY4C}|)WsxJsZCY4>(NOZ$*rvG{RY|!EgC561HP&mF2{E| zZ!pDr4$S&;Fr>(>k2sEcFlI-(kQaE6)fqQ{D;@(HTA)KHGqpFN5(Y;BlI? zFNz`=-pPor==HIk!{quV9ZeJ5kO^RmKTKQyVHQ5mn6b=L_%-)1U5aadPdA>=7iVW@ zFFcn*b<~P-)N$!6bTo@*D$^AYry_=n@za(kD$T_}h2JI&R@5=l#Vd4sA1N%%j_CqJ zR+5tV<$__2E9dl&<70+w;v|aJ+!T^#Dfet;C-t`;4pY-sboH1@az_%KO$+#Dg0Ye6 zN%XI@$38XPdF$(&dO$^BEuMLoZeug8Qfx29il=CVkhVtyk~`DP!d6U~yIBLDU10jT zs_T*IN*#54xcO3il&&rfW>v~Vl?S){v8^1POpDbZ+@Nb~>t~5WctSYR;}UKQOm&7Y z<=_a8kxr~_iNjw2!0+OeaZk3VkGpBHqMgLFQ!NJ&OPs{f{${Yr+&t2@Cd!++^9A!; zjKD!cVl!zd0Q#piI;jR?kE+)=ppK{HI!uTQ%!Tg8b(EyKoVNRg_SkB8C^7XmkS$09dI*4Wrz!xy70FC^CV zDhpQik4DLWuQum5@R&TBN1vm5y09DxS>c1*yFBAB)5~DawVFn^J#BURWJb9xy4kpu z+lI}6TBw`K@zL26{$GUPfCl)&Qu80v2K*K(WK{UYRLF?P$p43F0}mOWhD%%>mw@)0 zGYU0#a8gktA)SOq-|TOq|2}>;acSD7msHa<4Jq#b>Y5C>BHm%((Q+C<<#h{f{=Y;V zC}MCTj!+!Vk^86B(8xXIU7*js*~_&)%+Ku5pwz9j=GMAE#|w10EJ{84vtGf195Y#3-m4z2=lN;*NhP zX=gv+he`Y)e?_Oot4}t>8b8!ku>SxjH2TuieSj)+Q%QwKL7WG*jCJz(-9>N?u4 zF|>LfCz|B9R84#HR8#)|M}Kv;_gnrGf{pXW+NlGJBfhQ!ewWr|Y_+fK!o$S#_$nUOlk9sev#IU#|wv5h6KI<-^nJKHOrOdhIQ(sg}>&AMvw8MS0g&2DFsq{gaZY%ZDdq zDq$TlW8MM3m-NplaVnVhvt=z|{{Semo;OI?!R;T~ zM)HsPks0opD?;t$$(%LN4xDE|W8}zz{n|jKR4#Un!Js8@~Us~MH z1jo$4E97X;{uuhb2Opt}`g{ZDtUWe!^($6L@r2Gqbxr!5pX&H1=Yj2#CpR-(HX&3> z1>~nW{ak*;=J7`By;$96D3P+l@g^H}Gd1VDara$CJZ=tSng~4q0N_VLBxhU(V%zEm zKAPN8VRk~y*1qcp#w3ralA;F4=JGu`p^@Jq!fD>;TWsVO0sg0+i6@!uiWW4v&O0;? zDB*ZXo{Ew6eLf_RQ0gokBX8(c0Oqu%Z_#> z56U>!7fRkab3FVkjVxHaxRizYTb3-h98Tp@)_FmOKD!Z=b(tiPfg5-W3n$b;fZ()| z#@xmK04HfJ^_^32d@?sWS>D)$ZTcT>Op+9@#T9hu+OTaWCo{ZouG@)LS?AL9GEXYzTq zP|u07F0xogxf!7Cdq#`pltqx?a|0+YK7isqNxn+rH6&9tx#;JZ<|Zme?((TfCCBu{o~ieKpO^=*ijumT;dFw&Y-7>lz?z2HU9wH(}`esJd(&6QYqw` z-HA88USoY$6Zs}s=fgfv7=i8C%*&@n34mc$brejJ^VK>sTIUOkHsgl=- zEFACdr3Kjq{om#t80)(64_O$C#1p9YT{_{W`f4^*o=$mDSj;+lcJ**n$@)1X;2eI5 z8*8Get7nvWJ#|A_c;cs>vbpZzqg7@nBTHQKpgVwwx`LNDiH{;Y$7bJ(r@-lIDkr7u zK5|=IustUx^ZtrKUK}sJZ@W_s5yZkY^@p1bU zaKgbHO#!WF;1t8H>gJKBU#QL}>`%vW2v6jyX9wjwIQfIkI z@n&YNmj3`J4&9*c{{UK&X&f0FMafJI8pYXYzKm(-@lT4)xVR)6+^iD0gD_pPAis;H9)#OQHcRo9Lo1cFAf+{qefs_|@0V%XP}wZxi- zHJ~;I-r<>?ePsR0YMPfAsJ3ii>23qT7E@*UK^i{)0HYszr^E2LSxr?=>s7Y>r^gDcSLG zC4WuwlO3I>cKoT~zx3Y9k~*sB+k@gVb#-la&2hd*cUb$6Mm1R!jfz;QWs$Bt2x&#^ zYh-2JVDWLTiM~qtOHuMVR=Ap4mwF7j)sN+_x9?1;sPdBnh6f9WI<7lA!&Nm-7U3=# z0|YTiYjwQOf(5!JQB;0U#-nR;vGq-NSl<@{GkWz2 z@Czj#8(C8ROpKI1UximucCGWVmh052?VmA3iGGryD;P->;PV$lYB&n+=HXo@QO^>y}`#L`*QAxexZMl6XeTkD)$CnnX zw3A-sin$ld#d~GlNib%Zqs{0cCum`8G%AVwh!V4sP0u*$Wlv*r$GuOM>3ezT@Jy>E@%u>msGc zshH5%%;bq$IcFRC^;6*H8XO}HlSx|*^TQq=|BXZM0 z7>%B#S5=vX>=q6Et^rj|15DpUJL}l$$mhFVNdcqOqVj_sq^_>PsLpz7c(Ust^fO%gBY)ms zB&5J(!(u(CUnJR#r){h|)qOq-R|OoEGIg_0)HU)r^1H96-k`*Bs@j^fvmWtl+m*R@ zCrvD}%~gKPj(x~PmtE&lQO}v@f(2Qv(Rxh^*|T?r*<+lu2pk#C%2+TgI-?LQ^vfC9 zXNfx|ep8x@3xfKW&76-@ZmIBWDYt0tODl(Jcky$UC5Jm+wkJ2%t0}!4uCg5t<$*X2fy4CV{`> zR570thg;<}6vzAqx?kW0c_EHqzbvea50%fJ@#N0ZTcdB_Rj}_RrjT=*t1q}Tqw*{- z1EXgPvF~@cH`tH=03I}rKSmg1ZM}B7sIIHWDnBW<7aqDvot{87$Pd___iE$0=C@mv zDSDP|)ro7z@4Rg--<)WqoB! zhzB`n;7QWoyX{fqIIasvh*eZd;~AZ~@~~;K({NA}IA$G2Kf;Bq_$ec6$eGO~cfCCz^1{MR zV){foy;>@-CTOK(IDGQ;vIaA>@;SSbhYF*|F?wt|JC?&8LzvA?&Vch$J@U;YAe@Fn z+B)ug*JbuZL?4#=X5BEmGlO>SLu)Hu!D}G(YOL11%Hk}o?@pFDo?;qi4A6SlS3}iB z74r3yNtL%$xRrJzM_VkibzzX^HuaDY`CN5hlw@_IjA^Gbqr^O+!l|pVd4P9UFwEL< z%G+jD%){{dDn_yFaS+7T>FQMsqXn^6Q%5eR={JAl>2*CJj;G2QoAWX7h<$f`+*GwS zG8re4#m{l#dI@`jTAE@co`3+kO@@({Xx3?+=u@}9zqvCE!lJhsWj>tl=6|s-(o2W| zU_Mabn5`})C}F0qjt6G!Url!6eTrD2!ZGRG(``g;{{V7uqw-~}ZwE_NbN>KHZ`!0~ zEj|ZA-UYC^&L8zU-sJ;v+-hpJ#QwHE%NfM=LrwpR0WOS~062=}gW^TIpm6ira3wbbGqITc1*n@p{BkT*w z*Z|5tNXL6dZ?~efX2|D)&uGi>a9&y$Mjr2w7-PTphgSap0>G$oXqhz&>bjECvyaig zb@Hl-A!8wqD9eLbEHoUHG}d&HNnF_7`;E|_V|p6;iK2mp!GOKi?Hz&?koN5Ctpl5m zp6rXseZOJ}1Jr%fQIZX^NXl1^Yu08j^twkk34EZ%7sha#=MeXnk zw;ILfmVcF3%`64R=c~|v5OR|ahIYDVv5~gU^mNzaeX9k+-;N0?gaPuh7+(JXoH~(k zE#1Ebg5#!+d`HRbH!Gs2F34nkuXDY-R`x79U&(C4sp*bkA6?dUhlS08u7d`}K11@E z%|!1IvCn(0ZQKrtl=zpFSf(o3dvZr4j>#DW>20|mTClJvJ??RzYg<4+7gDj0djs2* z-QwW=fd+-yxN;es0@gr$7i2iC7|@#Tt?gmh<=s;nW-=&cIa>K;4Ia(ZSWY1&HC$t%$1iEEzjoR$CS<~}x*7^+I!3rb z6Jx)lYuR}_eR8sxUGKF^Aq3xIr{jh1vbOs=Qx7@o<23j&%$B;7>)dCu$R z84bOT4d}$M@-uaj5IlG)R=nBtbC_TIm$&eheu}ED(T-pw1gr5`oL46B9XL$|#XNNr zHZHN>KoY6&ye0<0Owq45pRD7=`MduBVf8dsFQ%TZcGHsG`n;|#x3b=~Ii3MinljdQ zh{)~^S)IDjmBg*JUpB|Tz##f;3m2##u}J4GnD*s!d_rqQwN#kaC5+WU z)?emgjA^gdC0=OpO7s3Czz_6*tq+p;W4q-BPvRw3!%Ykj#@fjPLmB{YYl3#XdMkCc zv3ZbFCuXxkifBb6^o3rwXD(wF2 zG+X$JtEHjK42-Q4Kz^vcX8WwC@}03Z0{*ZT@a#P8;ux{7DdBi+T{IbCe<@@+eYP$u z0K_XsTDhpJ9g*d|w}_iiZyQOXtrnfws9|_cSQ{ zqpqo_sPcagfVP;z%b6dSmY-e9s-FnKu};10a~mYiYcgr+SY1tC_J`EIPP1K<^q8hK zPWl<$)f#A`V{L4%zJm7GpEVvHF-%9~4biZ5?&{m%+u07a*2}O^)HADd*x=wE+|52A zYpaU6YJ1*p;%-p8fLgp2qh42_9DGwDh9^2#9HFgk$txph%s0R3Bn;SJWfc^%nrO~z z$&)p-&eyWXDd}Kr6aswFvM>W% z8QDRE*BM0|Mbb@ksExb&$*}dQspukQG#!bcXc{zfUQ6TD^FAieNF&bEV{lL276XY? z4zdwTB%=IgZ)fgurNko{M6JF50Bi6U%7DF1DQv%wXjC%2ql=n15ZKA z6~HAqp3Kn;_v+tzj7ke#4MBzdz@gEMPyicER6bD{;rQ3wsiY^i21j^}Iw;o zt=>`>2O3MQz zk_HQ@F#JYFQ@%M&Qd?Z48x;jrPn4BaQ9YrpOf!{VpXMWDM{{XppNmq~KOrx5jyEJfR zbDfkoZ~*VOsbZc`QbOqI#4e5u!?b$=fS-z=$hSTjaCaQc%--BO+=iY1fr^3=6-(9_tE-Aj(P zRTI|BJalo3b~G+>t?D6v%30{S&L`;)v0}Ayb#uQfa^`NixB=}|cQF~vd*c)<<2?fI)B=zDvsHMntrHw%75CMR@UA~ z9v$jfpOf_l?3yP5`1SjhMKghlqL!q_dx1aAR5&-aldNxYmWEeZv#_`P&DZZ$&<@Ns ztn1_b?f(A&VyBadXz0NFql{|=-CV!Ae+5X^?Ee6q9T=?<8JuD+XYUPEv7IbY3w3B> zl1~7d>7x)Z@p-a2@d|t2VRBS>RvV9EP|&vdTN7B@U-qqaYTAnW{{a60l~nl$vi4SC zikyDK0A5eb`l;V)xc7H`lTUX>{Tr?NcU$ysw_B|box0s`(YimB@vJh0@|I?_`w;^d zePh4Dh3@y-$={Q3JWi$DI@h)^eVLK`pM&8vU-Jv3KVm2H@5q_;Ac>9l+UT0xcNnX` z*Qt5?Qz@l+e6-RQZ}d*Tf14Z)IfPV^v)6YY_XUMC3mG#=eYX1oiy4KMr>kw9{{S_= zc(<^oQa()6({>0ySBFMF6|R0x=?9B@Ut)$5dosrMf2RKcXGSZLx!(z7?e4R+_Y$4i zC8?D4H7tfl)^%}*eJ2);JVE^?dR#ddLM=$Lpx0|&fPEJBsDzdWKjoY5ig zw)>~PXUg|j>wRvw)m>?_8h5Le>4kjRmW*|mWq}#ZG~%3nJch&8rKZE0Bz$q1A9q+a zzk-Gw_eCX5+APg=JU!}cPHawUxfvf>mM{SORM19S@@7w!q0aP$^i0C2Xz1y(p0W8D z0ptb!zU3AREK&82Zh3Uw&fo4$iP5$0rj|&%TOMBpgT=HZ@@Ea=@o)Q<9KbC1H>`Jw zQ%C*eXWFaq;yZFe_P6)j+8@JjS}pq07hm1>DoOZXDNV_7*04Rc<`yJFLtisnRy)JJ zFJrVuR*SwDhkCyjO?b1W!|FQ0`;Pv0SRNx0yiwEu@A-0!zr~SaRQtOpSlYw0rPJg3Mh(*>9-~47q zH=M!4UtjaO>&3yRsL$%Uz&xj??HYMTVmPq=3T{^yTT$SD2cr_9(&jwF#A>MBi(?pV z6pRKUWtpJq{{V#c!&zI2NIs1PS1@OaA3|VsD9`RyMV& znxwdw7WTYW{{Wah7r&j&c|jO%Rz6<1cjf`#5_&8a%KF=*5u=(=$ebE=;rO^*mgue4 zF!r3o7H|7j6-qS8PQmN4t)&1use`VAo_6paBIDMZ1dg>dcvXrlt~P ziIq{$;99dg$|@;)qP&OwD+{H;Usp5Wsq0+lN0p>yAy#8lu}cAxOyRCK%CLN1Z;{eg zP`f+^78?Vh*5vX|6M098Fdy!SkN9k*@6uN9=lxrHCv&4yL3xD?|jp| z-Of9bu2HZG_gkZONOaQN*PsH9mXVTAQuCFpV7YNkj}oPpl0$tSb^K}+7>w1iQb8s1 zjHI3HqM)ah^_ij)=F4s*eTs+5DJaC4liKFHJBjUVH2(mlRpJIVIk7M`x_u-3fmqaI zwD!Pc1H)B}H{|_TejPh+e@nA}_Nsa6J5Dc>XL#6=?^Dsu+K*QHimHsawAY_e8X-|@ zM^GY@yH=02M<$_ER7cuu@d<~B-B-q0)^#prOME>O{6pBV=fmhaAbooucq*EIs_PX{ zS(G|C8#6~Sb&lZrHIPash<}Ff{IlAn199353B-8EC=dO^_$$fE=8=)oyAOHpc)Wk= z%&KV}{bXgnwKf{_^HnW0?!P_<+hsl%CY2$tr5E7wt3CM@B}2U#Vg+JDQkCJ_ZNY7gr|gO*P$GIHWD`QDYe0NUX&@D4=9cdujX0wTr$8 z{!YUxs()%%2*l8%ZN;*=BUIIPwXyOB11{{jJ=aPe~JDgm4~t)o!&t8}x6}y4_J%eHp2(>uEoD zL#HW1M*1h*R8ijDV_eU2WAC9CTdmacxY?~~a(!MUB(c^_DJ^(*jd?ficPM0u;n5a? z)7-EOUYb`%Y3oL7AEH6sOzI%xO!o?yvhZuaoz@cQaR|mO9I?n@zibh3RT!39>1z6x z=W8O_*4I^u)KE4?Lo~)#2mKz^(_@B%42I1D=P@VVrKQB{Vv>=BN!5lmylvulLgXC* zxIM`5Tc^`?aFAqdnez69fztf7_b)|yI`nG2CX%$dD@N$7#@zP=$4LcDOn;(FZFJhI zMnKwfNX;YESbb}vmS;pIymz&UBkWZ&;%}@KUng|2hPVN6cf3SY zL`e3JwPEy(E$Yrw{+20G#aqORReJso|RJ2In z^9~;sBQLm3s{mz|&-Unj>juOFMd5p?oJajl_`lexs{a7Jjk5bfq;vO;#fSG?rNid5 zWV!UOKeFL#s@gfmN{ULHu5S^W?ksn;N(TFdh1H!SljdLRUQJhvbv5+w!{j#pwZ4zW zFJf~K9Ti<8hN9tA)3CqgeMeZ%VpxuE_L1vQ*Dz&l>}^2q%q~Z$+$zA%%X4+D_3EqI z$67kJHnKZ?Z>8}*#aA0UFo}BD`(#>B_@5?I`A#@^v6CB%DI>5B&@Xoh(vmxiY5;e}n#V^?Uo%UJK?yDR~1bV&rSM(WLBd$|C= zMVH4#ce#Z3Ck(;<3r1buD$Qn5dmFB=FU^htIJ7w0#BZXwc(wUxq>NQRE&hg!=N}{g z0C?STLCrT*xQygYAs&wgs|`H;{NCf;T(| zi9znfu$ZRbAdV{rlY0#A>0YBRfO8`6Cu3iB?py`K>r_!(}L zm7)Hyu^|YxE-gv&mRpPMpZM7Jq6(Na+E|~Ns-kF1n^j0+#9$+b2Y(PgrSgdMilL3D zXM@ITd+et&OB`);Z`vwzTU(WksBF>XX?}iVM9e=7rmv`MGt9^y@FNa@yt$j}e$hf! z!9zw`+?vQ_zrj<_9w9Sjg{84ND8pps*&1P!?0-H|d) zBkr0qy~Hm-h1+ln?s0NIG!KfODiHjdMRcUg0NQ$TrZQ+rmAjnp*|wb!+tO1{3njsaC+ zkABBH75@M?ZjS!|HsM#1+H_@-_*uj3C!w%ZXv^=(Q`6xy(^Nxj&XJD4Sng#ydiuyI zV;@<`l(b>-;c=UQca;5Nn(iu{#ltpM{6CWP*A+Yh`CRs2+Pf}rDVdyJ8`&4&wpT8? z;I}AfNLFiCTw;;2eQdfXK}GYDftcO-bVb!pgVM`po2r-9)XvVYE{wLfzud6Fh6;!E zrOY|qdz~%ztWV`sbndN%;rWX}a2&7dO~}w2k-ID~G~9Iz_$tqsrig!YPcQuqj?`$@^Nj$=$hc{SWy{lQ0`mdM$;ZsL8tPU}FUu5BROE}QW5pS$4BB+C#FIMjn+4u%~ zRU2IH+cQLcU&w_tF4eDTX;4r|Ky;mD8SXl_{lKPBNYfu$=_&R4$I%|#y%=?P(6RYX zg1~V=8t1_)sbn3;wBO;A+OTTZ-#nDe9}r$TPkx=Wc_A^ZQk6 zF!?I0saq?AZeu+r-%aeLd{m8zj{f#fxju@Xu8c%seLj%pIUF_L#X$_Xh9x|4N7cqU z%zzGEpA~ToK=XfS`_;Zs=-bJmKcjtFHIDcQ64cP5A4 z*4e1)9Bixyv1MSl*sN{#ruK!#h+V**OFnC|%2+_T0{;MloX-AA<#(zoti`O&mEHw0 z<6=5?{LT6|TdmgXb&1jI^N>Bhk@BRAy;n=BFanFBAM*X&e~RJKP`x!^k5 zXsacpqO|R0!;8sOv6i#7cKellO$ReupV)8qD4R+s?O3K9S=oGlkBZ3?esBvLo=XmnL9;aP7g$Yue`*(eNBflww*3U| zi1-n8LmbdYVJ(Y*?Reb_l~p8XFIv`3_8)?MMZZYKP7iqA01G)Esw=bTL8<~Iy^!Le)XO1*-9CdM(ax* zzN3a_` z7Mjku{{V*4<%l{8d1Q)M!+TE4+6LgMJfWtg!>KAC9!Ign$Q*jCjwf$RQ|nsdH4Gf0 z0jsTlTTvzMOs_6a>as(Bsui5~6|;);EVXb8wC5G*-Dm*ybQ>E3zebEDeu#jDl8*V-5yRo0vvuEvHTplXmmiBlaDcQ6t z`H4D>Q$~GwuGN`fy1g?igST?**cE30TzMUkw`s@Pw9(h#tT*_m*vprln`^9&h3qGL zAHY(Ev#XB!0#?g{7jmV0otj3Bj`1BkbZzJD&~(*r(Zy_?aI0yJ{%%)C@8~_Hu~!JT z>OkTEYlFR8eXCv7$3{uuhISqgXdzWbY9fcJnavF+Q>u<#%bFakqHV@mU2kfx2VSz8 z{_uXp`Xf1QJaZn!yYy95{2s#9Nhpor$1_ds$fq}UI9t@9VcnBtC&1Z9CADjde;&ms zgRG8jsGiaEkK*dCmEMezxt`@n=K|Kq3q53Q?Nw4T#AnUwI;wX$#JVzB>fh}t=Glx- zY`=fFm5b9yuxlr^xf_4G+@qG^nqKND0rZ;J`$g6nTrH+(o$J@^D-Eg^cj+nKd3_=L zPxdTEjoyQy%-uM*Uxsdq{-or~Jaf1F-_1^csC)XsZVZrT9~FbtdS5hQC!3gU{5cg( zIr>Z?NkeSxuA-VI5AmbzH{QnkP{Z!u=`qVnFU94jtN#E{V!P#I2YFOeOK2;2H zo)O3QtgzJAFj$QxAZxnL)-k1ik;`)Bpg@wqwQ}DxmW^m#fnmd<+FzqayV!?h1*^rD zrS9gLnT!n_NZlUIt*N&Fvj8lt?MBxqI6NEbM@e8$QEwoy(7Mz1Eo-!FF6pJQhtY z`&<^gaXge`HnunIZWJ|HM`y5Yz%AEhcdCpj?$SY>zC9asZPT*Vz%NL7yt*|WW+>ZO zJtYs^>8E zZ3IiNf8ecmbWE4mU{qrEZfvK(>GrL3PGFN*>Py<+9@pHe8V6@kJU1TVu{uM$17scg z+x^O-ocb?eXSqd(xu2$E;6J=uVg9VX#M|j(m0@yR+%eFe^3(S@s-TV8X+58Uv6_Ca z#ezE6`~k{+(m48+6W(nXTpIrX+;)fDRJ8I~Ove^G#40SsjAZOEImFt>aIiX&Sx?u9 z9Ze%Mi{_2}lm7rqnmtNdDc?Mmk<^J}Yglz_nnU&5=tP_;u;&r}BfwBr(8)(m_~q*( z8FOSQl~LB!$2(pm4vE<^9_wwg%<}mi&F;FsfqG6`IIl*_Qmp*hm!cM(0>=FY%~~*{ zdo^9pH@_s?-Q3e`(9y)%UfS)i1bL&UYl6xNx;G)tx;rb4)~_pKLMR-z1T4)j-8e?q zXVhchEXqyXddlkdM zU8dX*8umfmjt8=i|HWG)ApLsh~^a{CYd<(PA_=h74tjSE}~am*dAo(aoz-Bkrc zGP&KRecx)Qzof^O9^s+?0J&33Yvm*rfXGQ}8&TB~cmr?!%8o~l4vhHz0*L)t9?t=x zAMQ<`Z8a+okZLkzzk&Y%!h&0NB#5x5_8}uPX1F?jJC=6p z*M`aM7yDCQ(`LRr-m&-#46WQr19ko0$NNH#0jFD<4_k$YzRS5xL%O#|QP%@)M-l3} z#iEYgOP$xp`>yQ|aSF85)l$XO%*TxH0OdWGd-}C3Ggh`-%`LQJGGk?>sH&#%iFH%R?9LHKmgk8?)J;)Rf5dqxv{(YYH!aCpG_F!#+`CRz z-DuE(S1Y+$TGw8RH?UrrC|nhzbmXnETJzta6RH4aR@Uo^;vBba$1V$A%HXu&y3die z{uFueM?iJwy0x=h*l2)%WTFp_jo_NxkK~%rOUE5nzKQjs;(PQz6`8$@{w$xP?l{>1 z*1R2)jov$#X5Q4>hc`{ucM?t0y&!f#Si6$GP*w9c?pdX1dw(2I5oeL)tGhd$w~x6p z`h@V-oQF`k^c76UpPr}rmwLAMesnCwZRTMZfQ_;ksxs;>EJq*uQ>6}sX1U1I==!~C z-e!i%Fdb)x<#&kwNP_isqR(LB#|J9>yEi1dcO1X|MI(1Rs-W!Q@tEdq{Br%Oc|qCX z{;RA;4#SHwNZSLOLvQ~8A@(bgbXq^DoA`(R#SF}GZb=3E#>&1grwojj{HE_S1u zO}G_=)DP~=XT%%)9@RrM(#I5G#jYgqBk!^_l{kcLs)lFeVAkz$A8UQ;D(Xn;B$clO z8)>4Q^jK_E@j31-50d#s`;+GD*$bR3dbXyzuC}VB!J&fg;01yMfL@UcQcBUKa$Bz1 zHd|e67K5XHjR9VYer&=207sI!bBehaT38`u2S&I1mii!ht(Mn7E0L!(G&kd_;oYvt zaVT@LI|5dk++AfYyNL?z*TahR#zU_BP-|S=DzFuONyy!a@!j@pyly0ekGb3*yW_>?RLaywe=pKh`49@OUc zo2IrvG#3Njh|O2LgGn!y zWywDaeatm1BzHI$a;2tt z%EvbP^YbQ;YqdTWze!^;v~zQsZSS&h+$pKehgiqP)80Y1zRAOb;!z*~IsG`H;m6F5NyF2Z#1MLA? zQBMnPZo^Y)e<@Wq782&L8w;CX;1%R9kp9!Iv^G}E>ncC}4zL1452dOEF^ z>t*Pa+cf6lyIL#fLtCINb*Ae@Ym&CQ??q{;=&&Vmb(OUp4dKlKG%J!D1UpwNHrx@^ zq0e+P*|+1|tlWg#*s~CM`_KRa>)%vIcODAYb+;rg%SYO;a2#~qGb36F@9tJM1P;$< zb(Yr_(cDks>ol2N%hri?oaXCm*#{f(6(t#YVwC_hUKf=?SNEKZc(8CV=Uyxs`(Z{~L`*8XR5l3Hk<_#_=>gFtwo=Qw8i zynMi^k3A5b(K)dnq^z5DQB?O3=7o9ZhCZSFo11KJ_A0obsrf`=S9N8A_igk{uA`@U zdtMwf8*Gbd>FH^r*C_Oe3O6>cdUv$vW=_stH$~G;G{^Rxb!EEdy%JWsF4L9r``4n? zb;$#LR=f0Q304g&Q)Q{T)LnL35Y!+D*P7cgLhV~FBcKbeYe2Y^Nn5QJ%ZEVZjrHzU z%i8c=kUVa!VSfdd;T>8JG()WG9y^pTqkhHokAll)8ylTf>>3H%?nGyC8+fDjPP?n> zG~>-UcWj*902==Q=h&T<_wM?`k{mVLl4e%sHtdfCcahG}=J*fC6vh$OYUku``u_mo zF_r_EzJ)oVr(Q>I$EiK8XIFD}>G0A zMr8WBucSEdV4ZB{KM#t|4qNbT^gw{d-|?v_%+TEM*?L*nou_2#xb)QE@;~P(pV=R> ze=%=2k4JjYA(jW9QZhP{V8O>Kq?Yc{<)_v^mqwjFiBQX!b`E7theJtSB}+ie?E_We zrj4JxZom1KL_cAOht}3PpI59lTrRXFb6XWAX(Nb%ahvIPFGvNsLqXHOM+I&xKvu{% zvJW+Kt(9!FvfkYq>C=7J4(%50E4!l0ReLL)5erl^c0zF)^m-(%Y=-Myt;3H%Cf*3x zZ^M$gH_+&|x@(+!V{H|zRh!wrH0HZmIBJh+iI+Ki6`1CO;DB&zKJ*;sdaj5q+eN}R z4i-(jnSHP0q7DYyW$;;KZd+d3e0lD>M@w$fiEJj?-;L~KsLbpyH`6TM;XZeTv_V?Kb4ZPm(HL%239C@2BpTuzJfBxWr zsK@AYa%+=c*2_@S#1%BqQ(95PxkBChN;^iurvR%zaH^0!FyP_sMZ}9OU8>j;yC5xq zSGv@dv0jar=@+C*^g&uTqiuRS`Z%o{(WxP7RqV9cSy@|(%CB|FSy+2j-I>bQ1EX{e z!;#Ew+z~%U%EG~0Vy$Jiy&cPf7U&_jTIRV|8gbQgR|8agc088(k06Uhye_YOewT7~ zne_LfII9cWnM^OdW5FD)Y1@Jhw0ihmI9aYF`pNtSa13qAyD+@pVe3GU-EYUy9MIU@ z0ho=DlOr|m)UHDQ9<FoG;W;MJ2mxff+3-;EP)!+%GOf@uxVg7)d@ za90wWYoS0qKTF>ItNt}X;BnK1)61nTlQ*DvEQd6V<#gw@y;Zf-WE*y~$L~bB`i>Ue zTuSTxCY}pd0{#1wvvyoK6f*XB8zMvRAspx5}MP!zH=p z{LT6|Dlx9=iNCNBZ!)Qy&B>zH(PA}KG6>>pcPdFH9bGUsV|ck2aOtw$aVyaS%-f_` z61^Q(u3D?*TXbJyjg8g!Tn9zTa93*7EAG{`mDc0biQuiO4YKB~e79H1=UbUg%d*rf zUd31|?zK8^y0cF~xXMt`YJZyDTysMGt1YZmk7vJ{3BzEVdd@!7ZrsP}@mpzYCTiXJ zt2*srE3@c>rl=hqrTdp>)8ncHhQBDkf&;1&aqT8K+G~{Qwx7)r*e=v)tjiAK5f;wi z&N~h()5#^TudmpmbK{UY*S24?l7Cptj^Nvo`2J|QqRqJf04e-kN02>(G3{}>Y>m(Z zc3s;Pa}y{H*Gt>+bof~J7VO}$CTU}|oxzMZH=(NOhblTTlqJ_0u0!ri+ z^tvBeY^--cI?V_hY0Yz2A!^VXR@d-Azh$+Dayt9g_FLNA)`;7*i)f`lw+$A)n(5u`Db06SGXBmbw2Y2?Q8M0>wkMJes;z=PTHoPy^CEhf z{4Mc7LrVi6_4U8T%JNl7>d_0`#WJ3XmTHMl28A6?KOlRz>KJ}5`;#eXsp6)9Y}N~Y zb7e}vK9EdpxCKiE_7`1cwioDoKC`T+jiS)Iw$BA+v0C&5$7dv-3!2$(wdk-5Ri^8G zR;3Nqjjpr+IdfZGY^*d~ZnY(ID^q2mx+8+wa|-B`J0{D0(QVf2OBV6b8#d$Mx6_(7 zdyge^nae8zw#z|qxDT~!b*q3SUB2aEy47wGu?E3wXA651uKw39YloautwK6($-fXn~Ulf($`A?zNi*Ev2q#+zqx0T-DhYtkNkR*nAYVT zoZ8=C=8fC03yssP=XP~#ePMj&*A_0iaC;0^xoHD)r`U^)!6PU(_T6U8*A47VjlHSB zIicK|cm7H(es6r%P@dCyaMU7N4TgsMA9m-*Nhcjm&}#uDH>}Fz z+-|!qQNc}3G_sw8TBE7QU-DSD>YM4Gxe9DHmMVDrhOY5Hohr(Y_xd`w)I!@b-jbeN zPZP@PST&KCpK>k3u$)&A5igS0Gt- zeHCVc-+~SWwntPlUi_A0lq{gG*4$Q&%!P%QWP{JPQsQpxpqv zxM)00X}$A(Wt>Hoz}WV+Dl*B8me4m*VfeZMp`z{7 zfqVWnLFRTfjT`B29`x?EwUS#wZq>#6woYw4GfLhcNAE$@)U?#c*6-wlA6-$CgF~#d zInHtK>CtA9(g%G}#bjh9uI5!xV}L$!sjNvfzL!?ONGvufbgl1-4&W*2_y3eJ-r)1+~^tI4%n) zA#ZndX`=0Rmlf$*X5y}Wh*?_0D(z^j(Q;LfwP~xD(P-~lI2QLH+uKe&72NBqFb&rE zd{ytNHYfz<3mfrG&@>GY0_a@≤3~_f7)MJjc>b5#IL%yI#maqV2Zo`GDumTT_%B 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 D!e?}t literal 0 HcmV?d00001 diff --git a/hardware/963063-15_55_pin_connector/board.png b/hardware/963063-15_55_pin_connector/board.png deleted file mode 100644 index c4be40bdfe2dc05431973f43621c5302d0d17d2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23537 zcmZU)dmz*O`#)Z}JGw=oX-?^YRHSUqmYkxTNf^ph%&A$9F_oN+BsV#RWiG&yx( zI+#N?$a|`?zU}JN&MU!JHhXJ?_9FS zZrgV7F7My=v0KtX+qOAI8SCrX1Ub((+f{4X`_B%WtI~3!g)wuecpvC6zBhP+f1yVy z-^0LYVP{uxPo~s%;~*uinuQ}m@A-ws_RMSVc_cb^>_X773&c0Dt3N(!`^{B-eL9@l zz*KT=t3YBC?VmN2`jNx0ZmhJpre;alaXGoFNl)BxP0O{FPGJ*#((ZLnjyH57F)NL# zN>Y&5fV@O1-VadPb-WoAo4LeRBNM?~ja=#!s4mPwYknu`|cHFTa^QIc_iYO)FcB zlk9ZvHg2gvx?E~~umkRB{N(tT)R`o&9J3hiN5yBFNx_|{tBB3Tq|EZ;#){{^ zX`L{V;XRkTHqh#<{ar@TgD3hgH`deR#^>JJwXRXA)j904Tc?bld@omj^RoD=?1^Q}8w$fY^}b;{RfKWRoM zHokLyH!)z9_F)SV(q464DaayRo1YWBfR0Kau35YQ5$2lurc84aCPv%rhZ%i2xI&_w+$o(D%Gt0bco*e(S zd);0@X?ul?eSQG*75?hED_XasHGFe9owu*@OqN;BNx=g&qJY7USM(Bpl`8vG>3F5U ze59W^b$xRjU+bq11E0M$%5rub38YU!(cWJ$uJumi8Y`w@cU@ zHrF%X7!S_<(spxo%N?EJMIEreO0oE__}dzg^P7}s0TBX+YBj5FTFcM*r%S zZP{fD=XX5N?U>W(<^%k{hG>w3&OGXoo^=6kzE1Ud^=_!!@d(_$=Lv^h8QvW7QBUft zm$x~be>jDysBZ8&*u-Jvy+AwZ=W>1P#`K$+ikUsA+olx!w+l}91Aq^I{4b7Y)ZD6H zX$Q|eK_!!|t?tAti-;HT?pbIVCm_;M^T3a7Rg^c{BkPIqEgy8#EqcrIE9#8%%9~p= zOCJqy-1|Lp;?vpnhWAQO$R!y5(=W)vP&w}$2>^EU#&^3s!+qbO;P!vG-G7?a20L{6 zy~t^U@@~~<@mhhOZr%*Hn~S6!GQE^pba8)te*B~=c= z`9zoxWonZ9e;k4D`*!-uv2Lf=$ARYGo{16?FDlQFvsOxd7@(I~w$W638GG|k^ZM9I z3xUUJKQMkdL0v&(Pi_DyvDXoHgWxpPeWn(l>{a#coP%!$kL(sN^2)JV{|a=P;mm9t z-q4{k{VRahz8|(nZ-N4Dkf*kg?@jKyHS*^{!Ob;@nT~H zl!9i*nuofwzoxa+XpKc77wY7?hnL&1X-wZg$bSI%mN7S-PW#B@yRvLNpNlnauFX_q zOtPCu|MF7KN>kA{tHJA*jVb(N0pEj%@mk@-|C%Gd^!uY-pMSp0^!ZFWSu3W^RPR2C z2#gTu-&E9X81y#M@(rGQnarF|@XC2Y4V$Aw60r`d=3KS8ioj;i;j^Q3sTFzNJ5{u~ zlY;eh*lZV0yd3!p$T#ZqydlQn;APDmo!7w{9gL?$gXiX6&-0N!3NX8kU$+s}^ewIA z2gqec&VItyi&uTh&_kVz4jX|0bDtIpykTCb*r)@1eRvV&8Mr*`_P|SI>%ncZGv{E+ z5D@1?M|NtazWEix)ExKdFt=~49ydJ2vta@_f6gtXR{C}DxrEIYYX$#LOMqzy6O{}a z^8kt!%fFrW>i*g_S|y%6=q9<&G0)y;`T+UBxJ!&jE2O@0Wv_N1#u8oNv-`!%Hk=-& z^`DkVQO|0$_HkB3VQX6h=Z+3$?GLQF0wlz(G>(5;v}p~9HU(N6C>oQ`I_D)~(=l?sd&GHa&v%3Et)w)xm&J;973g};`>#Wzq#FH-F5iIl&m}Qd)=($=|D7s zdqXovqb1;WtLdSShMxCa!3)3s1Tp0c!-mLjyCvSVUF%R{k(p!T2U*YXF9vY?;S_wo z$E()B55K-;?F(EqF0`^M%h_Bi8eXLM)rfn&DjtnBy$W~e`^cES^NT6ka%5!ZiBuD( zst{iG&|#fs4s<8W?^cj1k>ZuJWA0+|P~~s)!A^4ou~r}((1)aDkRf!kxfY8b?B0E)_2->TIG=Ezw? zxkI<6NEP?tmoxefr$8;K%zgBd*`p?fq>{=mRo;C8We(e+Fb8mR~A5yGRro1WzIxk+b`7l}*#wsj-V@Vo zd634%0DG85-wZ#m>Ig4-+pKG~E}XG9pUi)EgFR5cc<$vG8=iSatL4WTUwdeAovwY7 zZ8JW1q6+T3d`z!gMmbEU^n6R#fVZuq()X#=lQXAWIB}BZg;pPUH-F<6aToIobqn&~ zUT@LzsfVOVfY+I6sTE?!G{AbPsyUh7IPya=TP;&CW;mhNxg>8fEYvNiLvyT({-for zQDIfaDl)7po&vZ|M>EHyaJk5P3T|GUXR_ZoXL8qytC^&sH}(!4KP%R&wTCR~XY3*W zLj9+T^E>`_(%*pH9ZNy79Re?(fke=-Z>nq*YERGZM_aJmTJE(Njl>`G*Ge8D=970DEYBvf8?;xG zZxjrMR@pyXP{T>jAn~%f7`VAN{i}-6a~1twY1+c?F3}dXZZ%JTbeS}YOPBt$I$fv~ z=D}1y?Ag)Jc~g#_flbF3T9y3pC^^0I(U2yq>5rr`-o0b!?W|*`=&g=sp9*#R$RMm7 z`!I+s7e6%8fEE|@a5d3d%k$5gSe*3@zc;M)z^Z$7d?8A;Y>bt&;zjeUl~#v4&n3+X zQxhvaJ#tKPE0z8+Dg39LMXc(ZtXY|R?zMl^)ODIzN{-+oKZ;9OG@8%bfbK5$Z8M4z z%8*kza2zfNRYJW>N)mx3GGg(2A1NPfHketh&fWM$O>0>y{2jE=mAcr$wDu^I?cb9B z=FiH_eFOhg&-9)28@dL`_sTMfgaMDQ?Vl@ zWkqZMxDDxh~sw!PU^A&`C%xDJVHeS*pFMYf!_b-qyR>uy)Z# z!CzzOPC%Htf!V$J#QT{<%A)?7s~ehi;2ACOS6{b5mVPTiHz`i7m9)6p71)CH&{_(I zp6lR*gCeS2iu2LPhgNmNqb`i3m#tjOA?}i&i#(%E4E?k2Kl(~M<~M&Y zS6hd7&i({&4#oiaw^a@2`K8<>3b*&3d^j>o=CyAtX%A^>KxK)O*B!peB7}20!cSwq zqp>^w^kfsvHfoEOt8SEda1;2n4C$16%+En|R*A~hl>T2lvv0U7cHTB$`OJ7V3KUkE z*Kou-10qjrx}E^}HJuc%)ZmVY!L^MqCI*&`aT%&~pQPKN~ssnDIVzd1)Il z_Ohf)Tl*0!Pv`qA-QywDaptkcwbAz`X4F6VkY;ywiFsJ5)-D(#W^)iZshoLmI22Yz z^OfpQt2>FWZz*Q0y`wv@+CyOB;=brt99m0p`oLkwfh~@0xu)Qc_7g}+VfCv(7}Z6) z-mwcJ$Y~lls}!cx7JNjgxpzKPNEe4}0w&X+FIf*?A0DreTDZSk<#2QuPH01Ucal-K zmpm-S)6JEO#IwbC*ZOOX8>%y97Wl?`ahw6KKRJxawSmqEZ-Hpmy29hVr}%q>)e-zn zR?QxG^e@>n{#8~;iBcE>oXA#hWm&vEa|Qf(vlQXy^+&a35l`*QS+0?#*DOnuQ`R03 z^3;RM@Sm=;YP(`vCboR&hUFa>RNyx0BV5rewqLFlAj81XC+5zT+3&=Z1yLKn*g!5b!)pTSn z8XY>NC+*NYZCi;x_j3JM$1>1zb$60L2RG;R!w&ZhqO?UqBlOWG&zzEfLL74|$sUx$ zF3g#_QtR{I+pnQHLn>yfccF4{bN$Ss!3zx;r2@ArH>`gwtt?z18ef()H{mq;;6<1b zQ5kX*p%yNzzp{3J-N_fHCMXKjuO;-8r711)jJDf7tLH-Ul(e;;`c1?gn9A;?qD|iq zLCk$gwi2i&>w*KiS!CfyjGv{13I%$CCL%YYy9kH(NGz3f8Ti^HujAsaRV$G?;Mk`% zS^H?k06(bpAa57?!#B@AHtHMNTH82bMe&g9A0EvoPXGX|Y{Ppz5AetdvYh|GIpQQD z(ZyF%$q3Zh^EW43@Mzd(hM@Gf$pXzD=I$=(pM(P&6(pIBBWoy$>j|xLr}|?yukj_J zP&6E0Xb~yIkq#KCqtdzL9TDylR7Qr(sE3D|rIOa#LNwsZs4PmX@tnqFt;!>~`NA?; z-Bo;*br*;j$dwggxYwnrJu*vxV!?V5m{`N1p-zOzI1{7qIJF1A zBj7cQ-!tUk24bFc(aN>j#rL;=HKp@0neCYiJ1TW1nk<$yvjp?&8G%wJ&0Rpcn6arO zDQ?J)5Zzov$jO_f8B=cdZsg*~}P$WE|a^`29f{w4t>Dq#zmEvaw%2{L&xOp|n6zJ+J zg9$Rxo5Mmk#K(m_=%g?4+KTTNUUSfh<-YjfBYdg$M4+-d8R)*Hz>h{0Nt!TP&FDEC7TcgiA`$7C1}XMJeW=FwpD3FWa< z3l_>_c6{-2+@a7>+M#-Rx_3du&a2G_XTHY_E&8`G461IqoQ7Q#&Xmh8@*DU}^-_^z z)YjiS(mH?lsDl#dT?$7goxAf+x=(96@@cQu&qxVrgR@25Nl29|#F%>N!*EFOSLW`I zb|<^|OIo8?x(oY(^8v*UAi2hebaqYq!zhF;gFh|78Ic7^lo(uj6+!x!!v_v*|EqHH zK)Oc*qRaf?0vvflIQF0?AKp8 z&n2Ma-*2;2^x)CcvZwu(cep>LwZ0sVuUb62Yl%kgK>fLP#t*~X2f3b5wTpiJV-h1C zKTsD~F%i3EdZVo9hxOgvT3qGp%o&zv%Rc?^vdPdb5WiUByn8IYL>;6G2Jqx0LNg*d zR&#Ab$@v^8*I$4PqCE-a=h5nV~#QJL}L=*tURy=;p#x{&;-L5q;UCd}}S`LsS znL1C?UO<-e)ZU_2#ydP=8dbNpPl&a7pZjj~;StFrQ`0UK$2MDBnGAhA7cTH!`*(6u zS;#uKSFdD%lO4UIw-T1M+v??-WMjYD3u%dhUE0>IOI?xGbv@_yBL%(-fl%AF(>_zq z0-ad=V8)PLpvN?~U(8CKr%jH;FF^cETQ_G~%LKn}1gZ%d z_>uuqEGh~Ae_bV7qQnu0Oe6Wv{CQVE78NVaGuO2y23Je+^uQn5RtIx$%;%mLKTcc-=E_APHXiFvsp6A+D%hl2JUAC1Pv7e z1P5sGH6HQR4rRv!N(Juh%Uuxb7Use=3{0iybesEQeI`vCMk#nNhS{WGD4iErteR&X z&U05-B;}OUA=9Bfrm4=4P}o9$*nC{$cys58o<+DKyFkb;-;R#jaMu|O^6t~Rk??*{ zq!n(y*hLjXh#>qz=kJX-hVXiU8;|>ofwG$P0O3u|f*A3_+3rKI{Ht=8XVXdge_A}R zu&aMskSIM-H#4ChlccGh_(TZ)>l(A6(J}7UWthjL38A8iQv_QknwZ6JJO zz|;&7OKzOLlBlOzmLLt&e@7~AEMq)ap8W>e#h2{OO>TiUt^p?TQj@=V1wSz&OMV|M>bAEfvwfJ0nWqRY@=RYcKN+SM&6`OPOn?7vmKa0}M zxckT;c9-ajzo|fBl>bs*{Z(MYv)==CF8w4Zf8QC#GhwD^>T6HD)5i14UGZk1m^x7m|4@ zZZS_o$nWU%?U7&^vdrMvk1ku0IV9-V{kq+sbZgq!JjCjgK?=J*e7(N#QwS)G2H^J6 zAo({*VQ0^W-tKdYMd%=)O57y5jX?{`O2T&H`~hZU{`h}=5@6Y4Nu!me>sD--o3;c~ z1U``GNxU|FS4EXk-;wf7BA+McMZR|(L@}&P1g%3|s24gdH=U<}p%?9e>=8XlPF*Zr z<47h2w=Pwf^+CWAs7H7rs+%MHQp3HtA7t7k=9RkAb%cjhDdf&PDet$7?@Hc7HBDr``0)gC*jYF~2xMsgq>6&bG# zIU5tc{3zVl3<783H|3iLjSvR;Nk_W~JEr4t_r006RPNBV5~P6q+JpYWth9?-50%Fn zT=6b{)&>Zz+%K&XWe+++a(Y7-yF~A7cH@?-34&o$dW8C>A7|PlWckOdLRLRWx4Z$j z=!4tysw5ybXj(UWzh2Njtz!Qdt{EGN=!;NppN){>Tgm3JYq$WjU}ByysU^}311U9# zm08g{hE>iyer<~XSO*&kny%Thf+J1#RBdk$jU03)34(Hpd6j+x(^vIGxT(v$vJsU3 zN|;Y}${;3Ox?!41yN&ZTb%j@#}`*DbqtZK8?&WUNgP$)7q2~VhC>E%Kf3F+I<5pq%~eawv+DS$1iG1 zw_&L~r)KwayLLbD&Nvk3Wqpk2=6Nmu*JT_hWEH618LQ_%;|WRccRu6K7gidYwya#^ zs4`!wn4ges=;F_kK02L83~%F{yqIKysKYv^vQA0pDKd{K^iN_5t-@){q>IQ{XZ!${ z7kvkXn1LoNHo#z>iv2y55YSk%%qZi{ zK)h3GlQiwt9IT_bVQNZ${jm@LEKH3$Mhms@x`qV5d<1`q{0PU<04S}_Ta&x{ZtL88 zBbxaEE1aq!3~`Wy^tC@biqyAha@U*AJ1fx^L-8f04wJ`z*bLQ(}GN$%X2Aum!cQ-kwVI^%UEdzS^#EP_Ddr z1Ezq(aC@bocl<-LGbrixYaXv#)<@?9Hr-4e!)J{mT4%CP&D~qt!Hjkl0K`)9Ge%AN zh3VyTkY#~1o+p0=4stm=F~c5>%h6$d>yy00llzdRs52Ew!gpHWvi!y(o)m6I zJYz3^#@GR|5FFb`Ngs{Nmns!j#hE-X62;(n`OmwmDJsdt05R{}>p~DVK*Zwknur(b zLBCoS%%ZqinOl>%T<&+dS$NCYKQC3AOSrEs*!iDACQ<{BBZG|qy zyglp!Yi9$4p9n=^oaNz?`AeWt*=K8w|!=18@Ze1XS zcL5{S{SDV#bl&dBqp8JkI%Q6@+J8Kv7}xoeMNleb+!i1k(C=CXR^*!}3941b^%zzC zd~lytnlEiNXagADsz&iglL#$&Y9K2Q8q}F2Ak)+pg){F@3g^(ynRObkCnnwM)aa&qhBC zO{Fzicxj;3K-f)-;Zgop(!n##Us4crr?QXD^P_*>Xq*6@0f1cvs;zf##9hnp^cHRg z8hZeu?V~BcpQV8#+VvkUi- z%IqFVgprGDmIob7md?*LiD38CaWY>PjWz7hK!kF^w5LMFp2t<*csZ@fy@cI})pvkI z!6a@J7zd2zFQ-Hz@GQ`lD^alrD6j0|Xs#1+I^HcL++Fv~MDfn_MJqiuL0ivIP~}d| z@^ZZU9qm>Sg8I4cW~p{Y&xn3u*Q3Zz{6JfKcl(-6W<2r8_5_0m$~Z5qOyB(1r;FPW zVU~KE2R;2Nn|^;b2Ii42-7wb^+9=bd==sw~yz9i(1ingeq1y4?N#KM!8I-h!`SgvX z61Bp4=DM8-03+-*lgsJRw0lcE;{N)qs{3m&&NVLwQ?QlPSzc3)zzf1I+F&B4#PNE~ z8#~mS_BVndbls=5&6QS{jIz35Fck~MUCP}5U6065>WE|Mq3-CE_OA*t^9I$}AUMb9 z0JqCxeAHSA+2NCKb^HB}A0$s&KEoAu0D|SW68Y9I_&^3B<=MC01FzE>f)1=e!VHUXxtSw!hcPn#YdUTE|so495 z(#7rmESdkY(QQ%NPSh_x`bd^v;7!b`%V_4SLi+6QoNq-%v+2?hSxzCD1 zz%Zl5rZg34Xmiyh1s-n^vk}q zWPNCGRP=S}%OC^c6r zV{j_=yy=pi%f_@_{BF~J@v(&{>SgEOPqsEd>JDX=-PWQX_Dc zyi1L=*G%+EylYv@hXmSxIM^O?Yc6`EcD)C^Y`lWkr@0|AUitJyE_X)Yq(QI!PLI%{#kOa zvN<~@^F2X;{V-)`f^NR~&Nc2F z*SZWuKTSLLoL7%M1ZdpCy6^8BO<6lBdL9x)sK_L))*MgQ+i`&Jl5Ab4{SBFxwAoXY40C``=X%!RqbY4gQsj`Zd*Xs%0l*o=DH<>ik zL+Ix>K8zApn@;c$9$nbK3 z9t4bm#NS{8ra^;BZb3DiF6WU8eKTR%*%!)`)C|~%h6vghzjD8*VTcA1;J59Yi6ze7 z6=MU&#BLbk4vuW;A`*k^KjO3hNdFYeQ^%R_gbV3Xc@#tHHD^b~t{2a50a_}RK}--? zdO`D=2TpHVR_t$=FldGb;!JdLT+{io?O87LZTS7Und1fTS4tO71gO|o?9w?$0mY7;J#&#fAVt{72lWoUb#sr8+j%aS$qds*dpJSI)z`Xg7uuW zL_yDTlP+-Ac7hCWBK&XK!1;+Uv#Ys}#6HY_yqLl!c4$|G9?mg6)N(xOPja#8Klc(T z7!^B4Ba;s}Nj+_6DcsPbOvxMupBMWYrtT=z^=MpJxC0%pzw{yAfF(q>%XOJdkE5V@ zEYz@8(z+VoDpqEh$yeH4nd4d69FU@f@^&u#f3+=Ho+$x8rVzP>-?3J+grxGq;SXWrdO@>h!Bc9`4TNPEN3h$2_$)hf zA>$Nll(l{2_^cyw;cq;(F8X&AN$DcS<#RBcU!dJUPg?{c%%C012x69!4^KufZ=Cp% z#~gs(M=4kl^7Jc7Nt3`&Hjm6%;HPXK$h2neb}u$OoEEC$QWXrX7IfglZ8iwU5utG* z#a$R^>%QxgNmifJy6|=|8@&!{^h$$u=5Xj_bN__L8M*KBy_Gx;{Z22?gI{j~wQ()h z09huhV!zt{V#sY0l18g3pK8sO7N zJM9E~BFR~lwT3SW|XYrC2udh=ikRDq+&w$ z1hbi5Fea9S>$l+bfVj^YyY*oCb~~fEK2p!CVChMWSgCSrKf~3$I?fZ>7$VgB!x4^U z96|R0{D4Axur27SNMLbs15NT1bIuJ=1)ytl!1+URM)zd%7wyj7IDyExU+frPA(kQU;Q1 z7Yqh4Ng`Do3~Z>~Iipa%oeFL#zHfr7a3Lv9dcg8#=c;X$;a@0X3*|d{vSDwB&4n;a zl%JWg`|F&AM{;F3pfeGeQDz>#)<@taKh-|38J|N}ns%$|7M11klTNy4hLw^d74`4O zJBq|O7YnEDG;7b&X=M}y$DsxlyDdxdK=R^WhF}md50ybNt8CP)EVWU_bMTH;-6hYi zbZGBoUUoLXaJ?chP&Orofqf=^&*wb+yi(!T^!+d*bNh3SLOb>Oo+MpR+E6V7Bm;4x zel-6lUo}vk+aa0NHJ`S+Vj+E*V-%oc(CaA!8=8n~^9CLtI0OA9=UcUNR_Z4(a<;lax!eIA9C=8wNLC-Ao6{3<@Jz1^+zYOV9O4t7b_Q!mhr`Ifs({LHWz`TinN zX+qIi=+IH7W-h>(P8;Je&5oRV z8I?jqUx*8_%fs-Dfq8m22`>S0n+G+KyLL`-&3&|-c}$VofZIHK6bqjl)ce2DAc?tOW# zAo*q#cqnkr^)qbI?uwgflR)DtF70YltW#p~M^Whi?G)nlil}`4yCQdRr2BAjOBC8& zCqph_2DnGe+G2*EwB$oz8I2A!S40r!(M2PM$l3*$(=y zl2_;QBO>Jzb=%r)hF5D#tUUHZ3?#8f6<^}sW>{Vb6G1)i53&fuv472g&5Xu&uv?Or zPKg0yn4Ks~H_+V0W9*LYFh_dDvOFd9eG_~g`HoiX(sc%{-~KzBW*f57mAiFToEG5?C zfJnF16?_y!6rZViOYKpM850|?jbiD=v8>;64)ayq$OD~nu6Jh9HNMtO-HsSSUUBra z1Ywm1JK`Tieil3*_Jwhl2Z~dQ4%zJ%H2seJA*d|;dt?Axuc|8FBJhg9!47)M_C$|_ zv*wW!R=?TEN>NWL4=6kbtMF{OM0RntI%e{dpgZ+J&49F8Rcv^&!mu-T^M7OHoDE-+ zr|E7Gp44)EgzX~ELcnZ^oWd|Vz@FSFA1?Xe+0}V(p3le6%%CZ~aWJb8lC>;W6=Q66 z%3jDj^i2O$7U89oN5?4*rX8LLx_5FT{Unn@bp=X!yG>g=(f9uP^j|y(yqb)0#b^8h zwQrzYF5vT^7ly%!CU{U_JF#}AW=SD>LT%+bC=;&cgA&D0ojem3BS6aoc)2Pm8bAZY z`oDrJZag6MU)KRDOGzks*XUBQ-CBCA{!O+<6Qi?fMQ1{md6b)V$qyF!eQ8mJwZo(QAYqlagiH zmXShzYIk5qmr7#(bwlY=L$@?&r?f^<7$8yD%P0^PN=KU&);-WK5)0JN&o@Ix+K@HQ z%f)|c-^@5|N{egWY;Sjhgi78{NYdob_+I0XBzUHHHXlvXifboUZqu)1u^?EMlD{#xE@nbqpb-OY1%-uOQJv(Efe@Uh*@*5_Tow9{bKolijo z_G-_=LB&v69nyIJSxkbkxC^2DhAV)q9&ChI+MR^Sxo6u+&^CAR7R4y9?wwJ8AQP@R zZiqskUFolH@vjelvhyG>WE|@2S3b62syxGkf-r`^6l zD>^o5Q5eG9Ox2JzLte2Z=+c5HJvzii`7U#j>BJIU* zkWWug+*#Vm2Cp0tc-sU?{V`T+XrZ;UW&kky%~etVn$*QjAm(rCTU2&@kk9t8AYb=v z%A|jNK*bxD4usJ#uuD}PQuzAF$7Ss~OcIqn;4*$#6ZUh*49&831dDwT>AjH>e?v>P zwCkZ5oxI~4qixlpFd&6VLvg(Yggex#7Hc(NHZx+eImLBRv66KD`A!10crG)BD8^0L zKIbbEi;Gzt+OfBNrxlfST$(IQstwMt;=^6q5CUO=L0FY|%Ns(^>erR$bru>fmEK=l zeN$;XE)G_f<~slE=_ke-dsiw$4sMi`l6OP&AqB)EZ^WRF^PneW$tFhRpmFTdS{_>s zvl#H_+ObO*Tq)%&9T<2Pmp&+lc!5)tu*{GK`&6~CUBvFSru#{@Nba6G)CWt)<0t{P zx@pOSR=Mc;0V1QMTTlfN_cwK0?>$AG{9SbgPkF9q6)_B!BCNwInaY(bl)L2YXVUL( zt&Fz4s2k{sY}1YcnaLaZ<&tiMO$1RaBdrDMoj^|fbOS#Gq{_tjDUKCaOUoDnv^suh zBdzA?AnqtDo>NG(BS_lblRAAr;Q>*t^um%}!h^v(7J9HftX{3&0)Lal#roP4Y0{F; zVA)g>A?CP6he3aX2oQt3D*%~ExmP~zNnCa?^R8?-|L52>x~yz%^O~Yan6g!T14a~6 zrOdC0QHG0z`Ns{wbS(O~Z(V+0Y$_l9-X7E&l0^(Eii#EF$n?wmUrcCQEY6SyQLB_X z@lZsRbx9(c81p7Qj+n04_C~GXTaWkI?@8o1^c4XHt@Z1CLGb%grO_xr`})!^I`)A8 z8SE>VwY?FT6*@PimN1O+l| z5IPH%SsTu;AG?$C1X@It|4A=aoBNGs=_0QfkP<=nn{b8!^2#uQowiL?i<1F;ZO;uq z^<~u#t(iI}K*~E};{(y@tB<8!@m3ve>rJH@t)Y`)ZE0f-*WQS&Jg6KfPKUG`4DzDJ zT^VMJ2FU4Ge?kvknju0TafqIgj87Y%cQT_*uK0O^Ic_#xB+2A(>Gq%zg~H0H_*sQ8 zr^4lehV%4eY9rz&{GAtR2kK)J@v$Xnb>PBozk);P@%Tl(rRtKnIF4moJMAKQ!}dnjS@XiD z+@3qH_TRz9=vS6j8j7cc!p%cg;u6Xy^#Nyi^+k7p9hGB=KkNF^2i~V=QB=IAx@NM{ z=W|qv#>SE^FAibp3g=)iOMeJKtbx*CddrYE-bzv!0tXf|0#UZ-+T%~Y~bByx+ zj-ldWkX?kTn2QZ$xS8Oso9_JxO~0*L0ZmECcnR{>Okq%-?@~QkLf^-K;w0+EqIbtV zeYCP_#ZhZisl$GZGVpvX`OyIk`Eu>a1GUa{C5I$z1+odxUd?+#2kWZqVxHHxBmW%F zzGg9g(Fl3PzZeSUjVeX}ixmH=)hvCieE+s`^9+GR<;qIKB}074JLJaH0$3G8cYI2R z!VcISJJ?){n#x3=ub81T;90r#4QI!-UFfpM{e#;1jmICB5!DQ~BmxefRQlrp#5!4R zED&V7?L#ly+T>j`bJ>FyAb)@!hup^hmXICm55(EGp>ccoC4SKUjY~n4y7jkF3LsWC zZpBK^ZBkgkqM%MwxAKs*i%?5S1QkwCsBZKct#OSuGDS@JVrtrVcrD1e^KQ3l3=bTfA zUK&oTIqay`*~fF9($g6-bKPfi8e*GFjc_R8+0Yw=DvYZwus%2@v!0c}6#$Ehz!Mt2D zA06z#cPBi1i{S&t61KeCOe~O`LP*xg`RA=y60P#jkh#e;aasidMIEc|2YY)BOuv5A zccfQ&7poDr+hvSsVs0%Iyx3b(Sezcc#(mqKf9(Uz&Z0B0R2zcs5KGE@5BB)uU>9a4CEzqQ zvC;$0K>8B8$KK8b`QPo~$#D?J;iecNC4nbF6i3(TUWpRR96c01WTPh}AuGPTedu{Y zBvij6izk<@8~Tdv7a3qhMR-83j3Q}gPdgxaBzFxhq6E1tEbVY%c#RJhgRi94=eD)y zgOx5au8k2F7c7KsgaV4H*)^eK1f~}nn6B&ttSN$|-SjJ9EA4%%G9@3rIC)(vinS+r zCthqRt>+|b6t?q9vFbX0tkGI#ST({14`OQf^5zt@js6*iHWZ= zbdmh3n4Yj$Wq-le`$}`^OGS+Otj;p!2z;!#9K}loqrsw7stFcA)MB`u#yUvOyT(`3 za;xGb^FPuM0;;xq-Lg@%GZ2x8p-W4X5W5gNo`C{mct{ibDzfAT@uQrtSJwB$0<>|2LycY8F~;$B&mp>^6_ zS3_Vp0E?l*DEL(cvWx~pKg#v~x`b#L#>J|mH>x@~^H}xBx_8UG%^~CSId6itcbc1a z=_O+YEUHKC3h=!ITq!WvF`y{aQbz8h9C<4(n*`$);b%~5s$Wce$wvw=z&moY9Kyke zJ)3+F6bhZ%obaY5)CViKTs>UL$&eBPP2n;ndsu>h4z)f zYnIA_6toa85y_!UQai7*usNMx^Qw(AvL9mOQKnrfrGx;>;pn$;tiA@`s31>6Y(5B; zNIA)Seu)!HZw5o7F_&ff4=-5%$D?Vkyzs(f0zjK=`1Yd~zZLNOt`o>I%UGB|V!R;L z9aRe@tEoeLA89ZXBVb0WB~~92^ibR$9rVJQaOB`1)N-jPv8WMNInPdjA()>|uZ)?- z?BhR3wSNi)!_VB`rB3ck7hn1{L<{w(x$N|qr(B{1 zI*V=y{Q7@Ulwv>pgzU?sHyyi~4&Hi4QI^L;9Lqb_mkU8~k)inwZQO+!u9np8uhTn| zkAl_0^6xOw??+Fm?#CcT{P)Chus!MYJE$T>zsh^r+Bv{}_f%z`I`t^*I59vm&K^+o zwQ1f~jGU{Zjnr3ePZ2gS!3BjSl<+wukuGLGDOxmS=BP5tIzBcGI$X0bDYF;SciL{rB%@itj`sJqlhAufjI1TpF`*^`f@$N| zefnjzXpaj*A+7T0T86a%^`tVRgGiC@K0x=pp?gxf{w)mkLRdH%yD6snpD6QxA+Yv) z&9&6Q+2xpSa#!f14n2Q|@SA3bk0}?w@0tqb1am)Jm}p2x42fr{kX zs^WC)-)ABZOB%Bb;VHVc{M3+l4P8^Ax{UsAJc_V?U7EH;Poes+b$>uiq}@k z2ov@$_#0JqS)BPA0vk)XaYJ4m>S=Qbe@jLS!VIeZm>pk9?XRHT58;aNl;+ThH`@9_ z{SA;26Hh&~CU5ZtB``q~`kC3+66`&r8mtILDQ#i11YNHtOUK);UWplg+5{&)CxJBj z@BQV4XA6$~3{R=!x2>LVXMMlUSG(xOQhBi|OXu{nq zqlG{fYh9$|4=Jnr{P$B>7T-s9w9nRB6nu|KLZhZ_VK9@#*g&o} zkFpJhluHbTt|e{79v&coyS24PISY#v|8Na0-v2XmAYjw93IA@~I)WI~n9Bzn(t_kZ zqrr;jhuW&d=D$cnHEaHP|0}W0bk_@h^$a=pJ>UHn17Oy-zp5V2l*;jy%ZJ&N9hi~t zV!j}*D!#{PHjFs^MFdFj5ow;?aSU1-A?B{FTvTG|=jv6i%PSNV$4cHUE~M9>wg3v` z*&>jwFJZx9m3u)4^AWVbMO@Zd-Fk3rN2a12Ez87Fq z%~dk`3*u>za{+QrMxU5&pe`7x<_?i7fZt9)Fs_t8sJeE$*;Ipm)UU#jm2$RKb}KHm zG_|Cc{$qqZUHZ>}Dg?xDikNj#8$HxY%*Aubv!H1I6+`1)1v@lj&pWL4=us<*h0 z(YH!D>MpnZ{vwNiyz*DAeZt}oU#^7CX@+QSNxe#gYRWx2g>({rN-Ml))+ey>tJdUY zPKfhmFdvNQt3dtq@{-5@&M~&vNbS(I= zqi^WTv9Br&(}UPorayzc94cDYrm-k56Uy!b!j4 zJs`yAc^Z-Cu!jf*!*x=lvk(SXJZiLttH8fsYrDYZPlu z5=qe7s;R;ZXxopwXp4;V6GgmG3pnsU-(up~ z^*9_nua<%FJzM;}JhO=0%}(z%RUNglaU4mLZ!!jnB#QKHkjN0P?Hl4jrsh9)D{K`5U3M%sJ;kE@Y+ragJdBz?(!bb|bt@|?zS5TT zvyyTIl#DTK&yhBp{~-E*fQ_ycSP791*^pk_z$DW+77a~$p2nRM?(oJb+5A#}zV@95 z-z<{E<3XqBUe=kcuE1E4ajiwXDBV)On>C2NjO^RNrpjc1COjC7zjFGm08>e8)whM1 z)3{C7)8gxbNI|w+{PRyH_TvvJha))yU3H5VF%ex_XUDu&sOn5r^)gG4dIU-rZ)N2# zK=Vy2LH)lh{huJGj`6GX4I6d&esAKOyKyJOeMEn$w1KZZl2|9^auwfjA))#4746m+ zK`&x&Wal}60a+OA(kCY+Gv0!iN7j(09r?X#jm5=Ie=sVpGAt`lb1{vJ_dV6JD<3&m zu_MHJh=uYin4)5htM=bG3x2^#9Y&wLdc5zJHQR9wD@tLryuQ zNo~WEL&Y3(CeloiVkox6lt?KyrN~qF8dQKKH8c^H+R- z-FxrreZQ~weZB7czOL8xTFX+DNwAZGyWXx7rF#N3g}J^L#lBIZezKWp=2c0qCFneJ z0*p+?M5{#(SAspO)(cSj$bfYk&#~x`czh2Mo0juF?#;bOH~vltECU^#^|zArRk%Jv z14{fb-SulcOSC+S)0Mdq9$*9B=mDrY&$APnm~L}R$jdtQO8XO} zOtaRqbrJUS1$y7uAu|xkHdGRh;B=FefIVLMVZ8gnKDc*T2k69``(d4=2{>M}A>OL} zc>jeZxoO<;{)b$(UV`h_=G7Ppp?=Xjj6(2LaPYm_wUXBc6G&+XcVQ(#3C6|OsUDxw z6>yyAdPQs$3Z$rq`VPBO zRS`BAYIT!iQ0pF$a9-A9IO&GG)tslW7r&{uCIiez4&z<=Q+h&Gs8anJfr8vPtJ#r8 zx)#`C(7SS!*ejmux?NC7+UF_wwLw{N{=vktzce8!Aa@M|sefhSZChRi62m`p?vFZs znUn>m(eK+JJ1|CAh-87%{ibJz@g(q~1y(&w;d7OG^;Tc0b7Yr=z}EFw5}W$P>(@0` zwb{?41CJnbKJRAF8uU)jyBrxH^-fc)dJytO0u7gi1ZsJAI+>+r~W) zyS4}J$zr3bm5|A`C*^LqPRn||B};xD?Q`K4bDJBN8Z35JBOF{fL(_9SM2O}RBDwU@ zp|1;9?=Lu=X6h43D;`ZE_7ALeRUYt8ta@MYJJI>MC`2y?JuhE3r}tr@f%MYTcSdpv z)$R=n{D2DHP&etWACl83H)n!uvIkJeh_9FC&W<2+l|%JTG(C$F>BO6XMP!KJC^mYu zVlu_>SLg)RY=Jw1l3Qr(n%p-1^QnEaV|4=RxtpmaA8N1rIO3(XXQa4ux%vDyBcY$}EgWGcI_ zBmWx9;gNEyy}m|Y*ob!5f5(gdXY93+Ldt6;$!tnc&9{9msqc69QPV)5%8T37oowo* z4?b3KZv>}cht`)e^bcoLZ)l&PJl-Te_h(tFoH=j7Gv3?t_VcOxa=}sM6Rtd$3aLP? ze)qdBvk^N;)&-mc0-#KEm@Zv$pEI$!CJnfSVOWEK{35$_KK#XS zsXYWu=fz7V5*HO4!ZTtsRYngx&UVrs{UM7aA z?_eLZ%Yur%-wFzZ*o}2_;f)~A8w%E%1fvCeyU9+ zdmH9O)yMNbdi2PCJkJZmzH8ppkGGXNS5o#s1)uc57O?gwNB0I#b|py?48{dxPNiL2d? zK^2;r%@+lcHco8>=hAYqCFU~AqyLUhJn2Hs8Z7Y$-YZ#3E4QZcuThnu(izIpd!%=M zogC43^%DlNE*%L5ro|z7Zv9Wrj`j;pExL8mgu&{1;3vO&N3fGlp(|HetjpWMHYDbg zlNZb?B=f>6yyN6{WHvke^7NQh_Fl;CZ>v|!zY}TmYw52xa!kQH+jc2KbE9Ot`3x!b(n>qI>%<@d@UhYd= zvYKHxjOO;N&8hK#L;knDSlvZsjMPw^pwEL=PjmhzCZ5xL*!@f9vpanLp3C+q*7BPl zx?V>H+SBkytNU+k*8^>}3DzbiYk_&*UBKB&_=Tr0W<`}8_=Ka>EA}#>Z#C(mjjX6X zFZ`ZNC<3V)c6I+9KSj5LAcGr571M{O%yf#%BZQYNCXn?ho?Gm^+# zN@#oq!!Z^9oi2f4Y|q}eO#dVdcMPg3dE4&8n}&r9O0%+S&@8{Ji62Jdu8)~52^b^t zEqb66mb^HWv*{XiQK)jl6_=RjOz*}!b|qEsT|)=ivqR0B&@x(0IFm_27$)AsVfQ{l zx}4rm2f+5W6)N%V9F1Y|0M+`@%DCF?zIT}+UZIoaB<9YO94B?lLdNN&COpc=7iHJp za^`^mL?pe>O|qfvh*?+x#M@JM_28{JvipJ%XHg%g#AYG{xTVsH`T#hpA`~NFhkd&& zhm^QxaRz0pg7}O0?6JD=>Mu+I1ABDRWz%dH9(xTX5Q^A?v`_tky{?DR7%UIKIhR(e zKYm$gW4{ING{$Nt(wJ2=nfQzBl`Tp;->Xbc8A;cQx~S4M4OKTbl2|U;8Z`dyRBPxk z$H;u>&}cYu*!Mo}xLU3Qwrp3eqO2;Y=%;x5jJ<7&!c$U_7DCS#1ZA! zlg`Bj*7)$?x1tapQJc{B_=!uKDjk2iqXHi$D)MNM`Pk6J#7fCHuC8HMwTcl)RCqtd za%1_)vDJsSW>U$|FW^9XJ6s8I2@3cr^Z;^fgVZ5F+In<K1n`*HK?r@^3IYGG9W8#lf3f9gfT}C2SpFF; z!!B`2&JzNW25Qe}AfDA$cm2f`*V!U_TWCM$nuyMF}km zqpCxc*ymG;UnU3gzg%%&8&dv*avy2|11AI4W}&qmv;n75l9I7yJI(-tmC194^4E!$ zV!rv}$1GJ_vJftD3+3~CCL88~kYpZc1Tico8uz#Q`68tx7s3VEY){o|7e%#!H?(H* z*K$pXZH2fd{7z`baNWHKyEepOiSFyXV``Cw+oB@g0lL6Pf4*i6d1{kZc+%ydn)fM5 zGVt^_!ok^bt&^f+-HyfuCK_~2f-3g?K>qRXA5#4JYq(AR#g_z+rvlJoO^_~BXTt3y zeA-rBN=tu_QR=oBqvdlHiV|Fg@F+9h6+T1}@xS{Jx2j!`MC8BO5BhWUt?Bos9|yHi>nQT*D!JMp&4n=*5NDzYB|wNzLA^Wr{ePCP{r^#OVXmQ#Y%F4YFU)#kA4 z<-2cnxxqB*P4}lyE1o2ych)rxZ?T2uDYIjb*-^cW9>gF;e6xj}am7vvNn1bgDBa^N zS)M{PrpZs{9`hV`R2N(h@Aj_tec0dUDv+2yyE#i+zb4BJHEY|-_N-02WJ^uZLJ-}u z;s6l{%S19bVx>{xkO{H#94byu{rpYupBb!IDL=O113|zQHKsK5HZF{sdwV~@VP6C~ zD$QPY-Ou1!&w+v{b7rT^?%iHp-DvmGz}L6Sd41&86Xq-DU)FFEgU9V!ZcNJ^@M5_( zzlXhv+7uL#lLOp0WiB?V{L<8ww;9ydO4B}|c&-48OMLacBjyqnn9OW#PVqO@)@zLF zha4{Mx3M!pBc}~no3`4ud%Y~IJ0pjUa5aZ25W~Q?R4!=!=XEM4?kmF|w@O{sindMu zHFIPpLd#-!^3D-0e4nUNDYRaAMsQb4|-y4RPA32$(Ew**@?*Mk}(YsdGsRp4jS@W1P_T7mo zwB`yN*Qj@Ot?q0_)Fo@OP6hyswRxj66PJkci}UHHiuQo{UUf3xu@o$Zlk;xt8wc&X z7>4xmeGe7&!{wRJ-gvxQ@ss2p?kBiv4A4V85B8Zn1!}1XUucC%qoySo2uxxyE?|aD zkJKhT;5n(Su`mA~#?O1<)d$3%dO-^f!k<xSebgTfa8gV)jZP4v`zQVv1 zcKJTNKNx@Q=km`V?}B+G!cD$t+AgZ$AfYUvM`!&5P=viaMVG61qe2x9epyiBtP8Qi z9yi|Eq7BxpE^!d6%i}G>-`iJ5{w`m@a*GTbKndZ&-!!Q~&c|I1ji@k1?4Nffs~(`A zRz}_eg(R0y(UW-syUa9z)6gCdfYWxHy84h!zs<|^Co!y(m>d>6jFgwnDHn%3xO;`U z-F;3lZhi{1VR-+jWe{9}WUPioP)*4T;eE&xgRWRn1!%_Onyj2GdLMPS+^Li@eX#XS zUMMZ0w>2Ueh=hOxQsq%)QESoe$$;^-;3!^{2QISks}N+5~)OF0+U)Ar(IV9l*T zju!F+U7}WyM7rQTVm?7&MPQ4v3^lnCXN8IhKqM77$NC}TH1&_|1kxdFXD!{llIxsZ z+PZ}p$_mpStIGXjl^lcuuc3lG4S1R{Z{wVm6}wp~xijup=8LXBUVCCU3FoLD{=fgq zC%!rz8l+uYJ6sY#WF3osJ!)ubY&Y_%OT_c<-w%fLn#^N@W5QK~x0UoFglr+nr?S;F zxRihn+^Ix9uBur--tBXvo;FSqYu5LuI_W|FC-|N#P#Xk7tRTuQp%rtl;qI?b2W!B+ zpc!L6{3Qrn=u8!3oC)jt&j>ll8tE}MdoY#e!oM8Ut_62b4Ll8V&b$s(EWs~R0_dsn zecy+dVcr{WE&ls8_Eq=|nd}lRT+$%&>0iJ63Z~Lanh8z9pyV2!djuR3-*_J6Wrwo?EA diff --git a/hardware/963063-15_55_pin_connector/readme.md b/hardware/963063-15_55_pin_connector/readme.md index 51cf1b0fd2..67c9c56cbf 100644 --- a/hardware/963063-15_55_pin_connector/readme.md +++ b/hardware/963063-15_55_pin_connector/readme.md @@ -2,6 +2,11 @@ ![Connector](963063-2.jpg) -![Board](board.png) +![Board](963063-board.jpg) -https://rusefi.com/forum/viewtopic.php?f=4&t=616 \ No newline at end of file +https://rusefi.com/forum/viewtopic.php?f=4&t=616 + + +[For sale](https://www.ebay.com/itm/333553816490) + +[For sale with connector](https://www.ebay.com/itm/333553815170) \ No newline at end of file From 92dc1c76cb71d64bf2c0c1f1e7008bf6ad5212d1 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 21 Mar 2020 12:35:46 -0400 Subject: [PATCH 165/171] fresh libraries --- hardware/rusefi_lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/rusefi_lib b/hardware/rusefi_lib index 08677673d2..5132aab742 160000 --- a/hardware/rusefi_lib +++ b/hardware/rusefi_lib @@ -1 +1 @@ -Subproject commit 08677673d2e6c05e8650555fd87ec30876acf831 +Subproject commit 5132aab742848c66fd2f4d3a1b68f0c9c76ec22f From e6ef563d750253133cf2430a0783da1750183dbf Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 21 Mar 2020 14:36:47 -0400 Subject: [PATCH 166/171] more fresh libs --- hardware/rusefi_lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/rusefi_lib b/hardware/rusefi_lib index 5132aab742..ec3889b76b 160000 --- a/hardware/rusefi_lib +++ b/hardware/rusefi_lib @@ -1 +1 @@ -Subproject commit 5132aab742848c66fd2f4d3a1b68f0c9c76ec22f +Subproject commit ec3889b76b2fc7c4cb4461525b2d5f46ea9e56f1 From 8a7b70a9dce5fcfdfd3410bef4b3c48469ec4b9d Mon Sep 17 00:00:00 2001 From: CrazyStriker <38209146+CrazyStriker@users.noreply.github.com> Date: Sat, 21 Mar 2020 22:11:03 +0100 Subject: [PATCH 167/171] 48 pins breakout board (#1206) --- .../breakout_48_pin_174917/174917-cache.lib | 150 + .../breakout_48_pin_174917/174917.kicad_pcb | 3971 +- hardware/breakout_48_pin_174917/174917.pro | 3 +- hardware/breakout_48_pin_174917/174917.sch | 431 +- .../export/V0.1/V0.1.zip | Bin 0 -> 118980 bytes hardware/breakout_48_pin_174917/fp-info-cache | 71702 ++++++++++++++++ .../modules/174917.kicad_mod | 253 +- .../breakout_48_pin_174917/symbols/174917.lib | 104 +- 8 files changed, 74480 insertions(+), 2134 deletions(-) create mode 100644 hardware/breakout_48_pin_174917/174917-cache.lib create mode 100644 hardware/breakout_48_pin_174917/export/V0.1/V0.1.zip create mode 100644 hardware/breakout_48_pin_174917/fp-info-cache diff --git a/hardware/breakout_48_pin_174917/174917-cache.lib b/hardware/breakout_48_pin_174917/174917-cache.lib new file mode 100644 index 0000000000..f2492713c3 --- /dev/null +++ b/hardware/breakout_48_pin_174917/174917-cache.lib @@ -0,0 +1,150 @@ +EESchema-LIBRARY Version 2.4 +#encoding utf-8 +# +# 174917_174917 +# +DEF 174917_174917 P 0 40 Y Y 2 F N +F0 "P" 0 -100 50 H V C CNN +F1 "174917_174917" 0 450 50 H V C CNN +F2 "MODULE" 0 -350 50 H I C CNN +F3 "DOCUMENTATION" 0 -350 50 H I C CNN +$FPLIST + 176122-6 +$ENDFPLIST +DRAW +S -450 -1450 450 850 1 0 0 N +S -450 -750 450 1950 2 0 0 N +X 1A 1A -750 750 300 R 50 50 1 1 P +X 1B 1B -750 650 300 R 50 50 1 1 P +X 1C 1C -750 550 300 R 50 50 1 1 P +X 1D 1D -750 450 300 R 50 50 1 1 P +X 1E 1E -750 350 300 R 50 50 1 1 P +X 1F 1F -750 250 300 R 50 50 1 1 P +X 1G 1G -750 150 300 R 50 50 1 1 P +X 1H 1H -750 50 300 R 50 50 1 1 P +X 1I 1I -750 -50 300 R 50 50 1 1 P +X 1J 1J -750 -150 300 R 50 50 1 1 P +X 1K 1K -750 -250 300 R 50 50 1 1 P +X 1L 1L -750 -350 300 R 50 50 1 1 P +X 1M 1M -750 -450 300 R 50 50 1 1 P +X 1N 1N -750 -550 300 R 50 50 1 1 P +X 1O 1O -750 -650 300 R 50 50 1 1 P +X 1P 1P -750 -750 300 R 50 50 1 1 P +X 1Q 1Q -750 -850 300 R 50 50 1 1 P +X 1R 1R -750 -950 300 R 50 50 1 1 P +X 1S 1S -750 -1050 300 R 50 50 1 1 P +X 1T 1T -750 -1150 300 R 50 50 1 1 P +X 1U 1U -750 -1250 300 R 50 50 1 1 P +X 1V 1V -750 -1350 300 R 50 50 1 1 P +X 2A 2A -750 1850 300 R 50 50 2 1 P +X 2B 2B -750 1750 300 R 50 50 2 1 P +X 2C 2C -750 1650 300 R 50 50 2 1 P +X 2D 2D -750 1550 300 R 50 50 2 1 P +X 2E 2E -750 1450 300 R 50 50 2 1 P +X 2F 2F -750 1350 300 R 50 50 2 1 P +X 2G 2G -750 1250 300 R 50 50 2 1 P +X 2H 2H -750 1150 300 R 50 50 2 1 P +X 2I 2I -750 1050 300 R 50 50 2 1 P +X 2J 2J -750 950 300 R 50 50 2 1 P +X 2K 2K -750 850 300 R 50 50 2 1 P +X 2L 2L -750 750 300 R 50 50 2 1 P +X 2M 2M -750 650 300 R 50 50 2 1 P +X 2N 2N -750 550 300 R 50 50 2 1 P +X 2O 2O -750 450 300 R 50 50 2 1 P +X 2P 2P -750 350 300 R 50 50 2 1 P +X 2Q 2Q -750 250 300 R 50 50 2 1 P +X 2R 2R -750 150 300 R 50 50 2 1 P +X 2S 2S -750 50 300 R 50 50 2 1 P +X 2T 2T -750 -50 300 R 50 50 2 1 P +X 2U 2U -750 -150 300 R 50 50 2 1 P +X 2V 2V -750 -250 300 R 50 50 2 1 P +X 2W 2W -750 -350 300 R 50 50 2 1 P +X 2X 2X -750 -450 300 R 50 50 2 1 P +X 2Y 2Y -750 -550 300 R 50 50 2 1 P +X 2Z 2Z -750 -650 300 R 50 50 2 1 P +ENDDRAW +ENDDEF +# +# Connector_Generic_Conn_01x01 +# +DEF Connector_Generic_Conn_01x01 J 0 40 Y N 1 F N +F0 "J" 0 100 50 H V C CNN +F1 "Connector_Generic_Conn_01x01" 0 -100 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:* +$ENDFPLIST +DRAW +S -50 5 0 -5 1 1 6 N +S -50 50 50 -50 1 1 10 f +X Pin_1 1 -200 0 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Connector_Generic_Conn_01x03 +# +DEF Connector_Generic_Conn_01x03 J 0 40 Y N 1 F N +F0 "J" 0 200 50 H V C CNN +F1 "Connector_Generic_Conn_01x03" 0 -200 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_1x??_* +$ENDFPLIST +DRAW +S -50 -95 0 -105 1 1 6 N +S -50 5 0 -5 1 1 6 N +S -50 105 0 95 1 1 6 N +S -50 150 50 -150 1 1 10 f +X Pin_1 1 -200 100 150 R 50 50 1 1 P +X Pin_2 2 -200 0 150 R 50 50 1 1 P +X Pin_3 3 -200 -100 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +# Connector_Generic_Conn_01x08 +# +DEF Connector_Generic_Conn_01x08 J 0 40 Y N 1 F N +F0 "J" 0 400 50 H V C CNN +F1 "Connector_Generic_Conn_01x08" 0 -500 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + Connector*:*_1x??_* +$ENDFPLIST +DRAW +S -50 -395 0 -405 1 1 6 N +S -50 -295 0 -305 1 1 6 N +S -50 -195 0 -205 1 1 6 N +S -50 -95 0 -105 1 1 6 N +S -50 5 0 -5 1 1 6 N +S -50 105 0 95 1 1 6 N +S -50 205 0 195 1 1 6 N +S -50 305 0 295 1 1 6 N +S -50 350 50 -450 1 1 10 f +X Pin_1 1 -200 300 150 R 50 50 1 1 P +X Pin_2 2 -200 200 150 R 50 50 1 1 P +X Pin_3 3 -200 100 150 R 50 50 1 1 P +X Pin_4 4 -200 0 150 R 50 50 1 1 P +X Pin_5 5 -200 -100 150 R 50 50 1 1 P +X Pin_6 6 -200 -200 150 R 50 50 1 1 P +X Pin_7 7 -200 -300 150 R 50 50 1 1 P +X Pin_8 8 -200 -400 150 R 50 50 1 1 P +ENDDRAW +ENDDEF +# +# power_GND +# +DEF power_GND #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 -250 50 H I C CNN +F1 "power_GND" 0 -150 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +DRAW +P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N +X GND 1 0 0 0 D 50 50 1 1 W N +ENDDRAW +ENDDEF +# +#End Library diff --git a/hardware/breakout_48_pin_174917/174917.kicad_pcb b/hardware/breakout_48_pin_174917/174917.kicad_pcb index 790cadcae8..43ce817e7a 100644 --- a/hardware/breakout_48_pin_174917/174917.kicad_pcb +++ b/hardware/breakout_48_pin_174917/174917.kicad_pcb @@ -1,12 +1,12 @@ -(kicad_pcb (version 20171130) (host pcbnew "(5.1.5)-3") +(kicad_pcb (version 20171130) (host pcbnew "(5.1.2)-1") (general (thickness 1.6002) - (drawings 79) - (tracks 366) + (drawings 57) + (tracks 380) (zones 0) (modules 39) - (nets 50) + (nets 82) ) (page A) @@ -40,6 +40,7 @@ (setup (last_trace_width 0.2032) + (user_trace_width 0.503) (trace_clearance 0.254) (zone_clearance 0.2159) (zone_45_only no) @@ -66,7 +67,7 @@ (aux_axis_origin 0 0) (visible_elements 7FFFFF7F) (pcbplotparams - (layerselection 0x010fc_80000001) + (layerselection 0x010fc_ffffffff) (usegerberextensions true) (usegerberattributes false) (usegerberadvancedattributes false) @@ -91,7 +92,7 @@ (mirror false) (drillshape 0) (scaleselection 1) - (outputdirectory "176122-6-mfg/")) + (outputdirectory "export/V0.1/")) ) (net 0 "") @@ -144,6 +145,38 @@ (net 47 "Net-(P25-Pad26)") (net 48 "Net-(P25-Pad17)") (net 49 "Net-(P25-Pad25)") + (net 50 "Net-(P25-Pad1Q)") + (net 51 "Net-(P26-Pad2)") + (net 52 "Net-(P25-Pad1S)") + (net 53 "Net-(P25-Pad1T)") + (net 54 "Net-(P25-Pad1U)") + (net 55 "Net-(P25-Pad1V)") + (net 56 "Net-(P25-Pad2A)") + (net 57 "Net-(P25-Pad2B)") + (net 58 "Net-(P25-Pad2J)") + (net 59 "Net-(P25-Pad2I)") + (net 60 "Net-(P25-Pad2H)") + (net 61 "Net-(P25-Pad2G)") + (net 62 "Net-(P25-Pad2F)") + (net 63 "Net-(P25-Pad2E)") + (net 64 "Net-(P25-Pad2D)") + (net 65 "Net-(P25-Pad2C)") + (net 66 "Net-(P25-Pad2K)") + (net 67 "Net-(P25-Pad2L)") + (net 68 "Net-(P25-Pad2M)") + (net 69 "Net-(P25-Pad2N)") + (net 70 "Net-(P25-Pad2O)") + (net 71 "Net-(P25-Pad2P)") + (net 72 "Net-(P25-Pad2Q)") + (net 73 "Net-(P25-Pad2R)") + (net 74 "Net-(P25-Pad2Z)") + (net 75 "Net-(P25-Pad2Y)") + (net 76 "Net-(P25-Pad2X)") + (net 77 "Net-(P25-Pad2W)") + (net 78 "Net-(P25-Pad2V)") + (net 79 "Net-(P25-Pad2U)") + (net 80 "Net-(P25-Pad2T)") + (net 81 "Net-(P25-Pad2S)") (net_class Default "This is the default net class." (clearance 0.254) @@ -154,6 +187,38 @@ (uvia_drill 0.127) (diff_pair_width 0.2032) (diff_pair_gap 0.25) + (add_net "Net-(P25-Pad1Q)") + (add_net "Net-(P25-Pad1S)") + (add_net "Net-(P25-Pad1T)") + (add_net "Net-(P25-Pad1U)") + (add_net "Net-(P25-Pad1V)") + (add_net "Net-(P25-Pad2A)") + (add_net "Net-(P25-Pad2B)") + (add_net "Net-(P25-Pad2C)") + (add_net "Net-(P25-Pad2D)") + (add_net "Net-(P25-Pad2E)") + (add_net "Net-(P25-Pad2F)") + (add_net "Net-(P25-Pad2G)") + (add_net "Net-(P25-Pad2H)") + (add_net "Net-(P25-Pad2I)") + (add_net "Net-(P25-Pad2J)") + (add_net "Net-(P25-Pad2K)") + (add_net "Net-(P25-Pad2L)") + (add_net "Net-(P25-Pad2M)") + (add_net "Net-(P25-Pad2N)") + (add_net "Net-(P25-Pad2O)") + (add_net "Net-(P25-Pad2P)") + (add_net "Net-(P25-Pad2Q)") + (add_net "Net-(P25-Pad2R)") + (add_net "Net-(P25-Pad2S)") + (add_net "Net-(P25-Pad2T)") + (add_net "Net-(P25-Pad2U)") + (add_net "Net-(P25-Pad2V)") + (add_net "Net-(P25-Pad2W)") + (add_net "Net-(P25-Pad2X)") + (add_net "Net-(P25-Pad2Y)") + (add_net "Net-(P25-Pad2Z)") + (add_net "Net-(P26-Pad2)") ) (net_class 1.5A "" @@ -249,7 +314,7 @@ (diff_pair_gap 0.25) ) - (module connector:174917 (layer F.Cu) (tedit 5E4346DA) (tstamp 5E4376B2) + (module connector:174917 (layer F.Cu) (tedit 5E763CAD) (tstamp 5E4376B2) (at 69.723 57.785) (path /52230AB7) (fp_text reference P25 (at 80.75422 -0.89916 90) (layer F.SilkS) hide @@ -258,6 +323,156 @@ (fp_text value 174917 (at 78.1558 -2.70002 90) (layer F.SilkS) hide (effects (font (size 0.889 0.889) (thickness 0.22225))) ) + (fp_text user "48 PIN CONNECTOR" (at 56.134 -11.176) (layer F.SilkS) + (effects (font (size 2 2) (thickness 0.15))) + ) + (fp_text user 174917-6 (at 15.113 -11.303) (layer F.SilkS) + (effects (font (size 3 3) (thickness 0.15))) + ) + (fp_text user 2Z (at 75.565 -5.842) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2Y (at 74.422 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2X (at 70.739 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2W (at 70.993 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2V (at 67.564 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2U (at 67.691 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2T (at 64.516 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2S (at 64.389 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2R (at 61.468 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2Q (at 61.468 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2P (at 58.166 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2O (at 58.547 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2N (at 55.499 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2M (at 55.499 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2L (at 52.451 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2K (at 52.705 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2J (at 49.403 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2I (at 49.53 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2H (at 46.609 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2G (at 46.482 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2F (at 43.434 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2E (at 43.688 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2D (at 40.64 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2C (at 40.259 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2B (at 36.068 -5.969) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 2A (at 36.83 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1V (at 31.115 -6.096) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1U (at 30.607 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1T (at 26.924 -6.477) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1S (at 27.686 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1R (at 24.511 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1Q (at 24.638 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1P (at 21.59 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1O (at 21.59 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1N (at 18.542 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1M (at 18.542 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1L (at 15.494 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1K (at 15.494 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1J (at 12.573 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1I (at 12.319 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1H (at 9.398 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1G (at 9.525 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1F (at 6.477 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1E (at 6.604 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1D (at 3.556 -6.294) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1C (at 3.556 -1.841) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1B (at -1.143 -5.969) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user 1A (at -0.127 -1.778) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) (fp_line (start -3.85064 -25.49906) (end 78.45552 -25.49906) (layer F.SilkS) (width 0.381)) (fp_line (start -3.85064 -25.49906) (end -3.85064 -15.49908) (layer F.SilkS) (width 0.381)) (fp_line (start 78.45552 -25.49906) (end 78.45552 -15.49908) (layer F.SilkS) (width 0.381)) @@ -273,109 +488,66 @@ (fp_line (start 73.45426 -7.00024) (end 73.45426 -15.49908) (layer F.SilkS) (width 0.381)) (fp_line (start 73.45426 -15.49908) (end 82.8548 -15.49908) (layer F.SilkS) (width 0.381)) (fp_line (start 82.8548 -15.49908) (end 82.8548 -7.00024) (layer F.SilkS) (width 0.381)) - (pad 16 thru_hole circle (at 0.00254 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 7 "Net-(P12-Pad1)")) - (pad 13 thru_hole circle (at 0.00254 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 5 "Net-(P10-Pad1)")) - (pad 12 thru_hole circle (at 3.50012 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 17 "Net-(P21-Pad1)")) - (pad 15 thru_hole circle (at 3.50012 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 6 "Net-(P11-Pad1)")) - (pad 45 thru_hole circle (at 15.60068 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 18 "Net-(P25-Pad45)")) - (pad 37 thru_hole circle (at 15.60068 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 19 "Net-(P25-Pad37)")) - (pad 38 thru_hole circle (at 12.60094 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 20 "Net-(P25-Pad38)")) - (pad 46 thru_hole circle (at 12.60094 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 21 "Net-(P25-Pad46)")) - (pad 48 thru_hole circle (at 6.60146 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 22 "Net-(P25-Pad48)")) - (pad 40 thru_hole circle (at 6.60146 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 23 "Net-(P25-Pad40)")) - (pad 39 thru_hole circle (at 9.6012 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 24 "Net-(P25-Pad39)")) - (pad 47 thru_hole circle (at 9.6012 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 25 "Net-(P25-Pad47)")) - (pad 43 thru_hole circle (at 21.60016 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 26 "Net-(P25-Pad43)")) - (pad 35 thru_hole circle (at 21.60016 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 27 "Net-(P25-Pad35)")) - (pad 36 thru_hole circle (at 18.60042 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 28 "Net-(P25-Pad36)")) - (pad 44 thru_hole circle (at 18.60042 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 29 "Net-(P25-Pad44)")) - (pad 42 thru_hole circle (at 24.5999 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 30 "Net-(P25-Pad42)")) - (pad 34 thru_hole circle (at 24.5999 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 31 "Net-(P25-Pad34)")) - (pad 33 thru_hole circle (at 27.59964 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 32 "Net-(P25-Pad33)")) - (pad 41 thru_hole circle (at 27.59964 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 33 "Net-(P25-Pad41)")) - (pad 14 thru_hole circle (at 30.70098 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 16 "Net-(P20-Pad1)")) - (pad 11 thru_hole circle (at 30.70098 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 15 "Net-(P19-Pad1)")) - (pad 4 thru_hole circle (at 40.40124 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 11 "Net-(P15-Pad1)")) - (pad 9 thru_hole circle (at 40.40124 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 13 "Net-(P17-Pad1)")) - (pad 5 thru_hole circle (at 36.90112 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 12 "Net-(P16-Pad1)")) - (pad 10 thru_hole circle (at 36.90112 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 14 "Net-(P18-Pad1)")) - (pad 21 thru_hole circle (at 52.50434 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 34 "Net-(P25-Pad21)")) - (pad 29 thru_hole circle (at 52.50434 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 35 "Net-(P25-Pad29)")) - (pad 22 thru_hole circle (at 49.5046 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 36 "Net-(P25-Pad22)")) - (pad 30 thru_hole circle (at 49.5046 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 37 "Net-(P25-Pad30)")) - (pad 24 thru_hole circle (at 43.50512 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 38 "Net-(P25-Pad24)")) - (pad 32 thru_hole circle (at 43.50512 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 39 "Net-(P25-Pad32)")) - (pad 23 thru_hole circle (at 46.50486 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 40 "Net-(P25-Pad23)")) - (pad 31 thru_hole circle (at 46.50486 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 41 "Net-(P25-Pad31)")) - (pad 19 thru_hole circle (at 58.50382 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 42 "Net-(P25-Pad19)")) - (pad 27 thru_hole circle (at 58.50382 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 43 "Net-(P25-Pad27)")) - (pad 20 thru_hole circle (at 55.50408 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 44 "Net-(P25-Pad20)")) - (pad 28 thru_hole circle (at 55.50408 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 45 "Net-(P25-Pad28)")) - (pad 18 thru_hole circle (at 61.50356 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 46 "Net-(P25-Pad18)")) - (pad 26 thru_hole circle (at 61.50356 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 47 "Net-(P25-Pad26)")) - (pad 17 thru_hole circle (at 64.5033 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 48 "Net-(P25-Pad17)")) - (pad 25 thru_hole circle (at 64.5033 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 49 "Net-(P25-Pad25)")) - (pad 3 thru_hole circle (at 67.60464 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 4 "Net-(P1-Pad3)")) - (pad 8 thru_hole circle (at 67.60464 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 10 "Net-(P14-Pad3)")) - (pad 2 thru_hole circle (at 71.10476 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 3 "Net-(P1-Pad2)")) - (pad 7 thru_hole circle (at 71.10476 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 9 "Net-(P14-Pad2)")) + (pad 16 thru_hole circle (at 0.00254 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 13 thru_hole rect (at 0.00254 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 12 thru_hole circle (at 3.50012 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 15 thru_hole circle (at 3.50012 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 45 thru_hole circle (at 15.60068 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 37 thru_hole circle (at 15.60068 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 38 thru_hole circle (at 12.60094 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 46 thru_hole circle (at 12.60094 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 48 thru_hole circle (at 6.60146 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 40 thru_hole circle (at 6.60146 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 39 thru_hole circle (at 9.6012 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 47 thru_hole circle (at 9.6012 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 43 thru_hole circle (at 21.60016 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 35 thru_hole circle (at 21.60016 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 36 thru_hole circle (at 18.60042 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 44 thru_hole circle (at 18.60042 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 42 thru_hole circle (at 24.5999 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 34 thru_hole circle (at 24.5999 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 33 thru_hole circle (at 27.59964 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 41 thru_hole circle (at 27.59964 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 14 thru_hole circle (at 30.70098 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 11 thru_hole circle (at 30.70098 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 4 thru_hole circle (at 40.40124 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 9 thru_hole circle (at 40.40124 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 5 thru_hole rect (at 36.90112 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 10 thru_hole circle (at 36.90112 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 21 thru_hole circle (at 52.50434 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 29 thru_hole circle (at 52.50434 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 22 thru_hole circle (at 49.5046 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 30 thru_hole circle (at 49.5046 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 24 thru_hole circle (at 43.50512 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 32 thru_hole circle (at 43.50512 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 23 thru_hole circle (at 46.50486 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 31 thru_hole circle (at 46.50486 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 19 thru_hole circle (at 58.50382 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 27 thru_hole circle (at 58.50382 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 20 thru_hole circle (at 55.50408 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 28 thru_hole circle (at 55.50408 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 18 thru_hole circle (at 61.50356 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 26 thru_hole circle (at 61.50356 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 17 thru_hole circle (at 64.5033 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 25 thru_hole circle (at 64.5033 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 3 thru_hole circle (at 67.60464 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 8 thru_hole circle (at 67.60464 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 2 thru_hole circle (at 71.10476 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 7 thru_hole circle (at 71.10476 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) (pad "" thru_hole circle (at -5.04952 -10.20064) (size 3.50012 3.50012) (drill 3.50012) (layers *.Cu *.Mask F.SilkS)) (pad "" thru_hole circle (at 33.80486 -10.20064) (size 3.50012 3.50012) (drill 3.50012) (layers *.Cu *.Mask F.SilkS)) - (pad 1 thru_hole circle (at 74.60488 0) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 2 "Net-(P1-Pad1)")) - (pad 6 thru_hole circle (at 74.60488 -4.50088 180) (size 1.15062 1.15062) (drill 1.09982) (layers *.Cu *.Mask F.SilkS) - (net 8 "Net-(P14-Pad1)")) + (pad 1 thru_hole circle (at 74.60488 0) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) + (pad 6 thru_hole circle (at 74.60488 -4.50088 180) (size 1.5 1.5) (drill 1.09982) (layers *.Cu *.Mask F.SilkS)) (pad "" thru_hole circle (at 79.6544 -10.20064) (size 3.50012 3.50012) (drill 3.50012) (layers *.Cu *.Mask F.SilkS)) + (model C:/Users/gwend/Downloads/c-0174917-06-m-3d.stp + (offset (xyz 37 7 3)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 180 0)) + ) ) (module 1pin (layer F.Cu) (tedit 589744A9) (tstamp 5223E083) - (at 55.88 62.23) + (at 57.88 62.23) (descr "module 1 pin (ou trou mecanique de percage)") (tags DEV) (path 1pin) @@ -1362,21 +1534,21 @@ (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 48 "Net-(P25-Pad17)")) + (net 50 "Net-(P25-Pad1Q)")) (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 46 "Net-(P25-Pad18)")) + (net 51 "Net-(P26-Pad2)")) (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 42 "Net-(P25-Pad19)")) + (net 52 "Net-(P25-Pad1S)")) (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 44 "Net-(P25-Pad20)")) + (net 53 "Net-(P25-Pad1T)")) (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 34 "Net-(P25-Pad21)")) + (net 54 "Net-(P25-Pad1U)")) (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 36 "Net-(P25-Pad22)")) + (net 55 "Net-(P25-Pad1V)")) (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 40 "Net-(P25-Pad23)")) + (net 56 "Net-(P25-Pad2A)")) (pad 8 thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 38 "Net-(P25-Pad24)")) + (net 57 "Net-(P25-Pad2B)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -1414,21 +1586,21 @@ (fp_line (start 1.27 -1.27) (end 1.27 19.05) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (pad 8 thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 39 "Net-(P25-Pad32)")) + (net 58 "Net-(P25-Pad2J)")) (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 41 "Net-(P25-Pad31)")) + (net 59 "Net-(P25-Pad2I)")) (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 37 "Net-(P25-Pad30)")) + (net 60 "Net-(P25-Pad2H)")) (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 35 "Net-(P25-Pad29)")) + (net 61 "Net-(P25-Pad2G)")) (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 45 "Net-(P25-Pad28)")) + (net 62 "Net-(P25-Pad2F)")) (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 43 "Net-(P25-Pad27)")) + (net 63 "Net-(P25-Pad2E)")) (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 47 "Net-(P25-Pad26)")) + (net 64 "Net-(P25-Pad2D)")) (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 49 "Net-(P25-Pad25)")) + (net 65 "Net-(P25-Pad2C)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -1466,21 +1638,21 @@ (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 32 "Net-(P25-Pad33)")) + (net 66 "Net-(P25-Pad2K)")) (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 31 "Net-(P25-Pad34)")) + (net 67 "Net-(P25-Pad2L)")) (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 27 "Net-(P25-Pad35)")) + (net 68 "Net-(P25-Pad2M)")) (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 28 "Net-(P25-Pad36)")) + (net 69 "Net-(P25-Pad2N)")) (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 19 "Net-(P25-Pad37)")) + (net 70 "Net-(P25-Pad2O)")) (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 20 "Net-(P25-Pad38)")) + (net 71 "Net-(P25-Pad2P)")) (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 24 "Net-(P25-Pad39)")) + (net 72 "Net-(P25-Pad2Q)")) (pad 8 thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 23 "Net-(P25-Pad40)")) + (net 73 "Net-(P25-Pad2R)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -1518,21 +1690,21 @@ (fp_line (start 1.27 -1.27) (end 1.27 19.05) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (pad 8 thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 22 "Net-(P25-Pad48)")) + (net 74 "Net-(P25-Pad2Z)")) (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 25 "Net-(P25-Pad47)")) + (net 75 "Net-(P25-Pad2Y)")) (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 21 "Net-(P25-Pad46)")) + (net 76 "Net-(P25-Pad2X)")) (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 18 "Net-(P25-Pad45)")) + (net 77 "Net-(P25-Pad2W)")) (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 29 "Net-(P25-Pad44)")) + (net 78 "Net-(P25-Pad2V)")) (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 26 "Net-(P25-Pad43)")) + (net 79 "Net-(P25-Pad2U)")) (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 30 "Net-(P25-Pad42)")) + (net 80 "Net-(P25-Pad2T)")) (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 33 "Net-(P25-Pad41)")) + (net 81 "Net-(P25-Pad2S)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -1570,21 +1742,21 @@ (fp_line (start 1.27 -1.27) (end 1.27 19.05) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (pad 8 thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 38 "Net-(P25-Pad24)")) + (net 57 "Net-(P25-Pad2B)")) (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 40 "Net-(P25-Pad23)")) + (net 56 "Net-(P25-Pad2A)")) (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 36 "Net-(P25-Pad22)")) + (net 55 "Net-(P25-Pad1V)")) (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 34 "Net-(P25-Pad21)")) + (net 54 "Net-(P25-Pad1U)")) (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 44 "Net-(P25-Pad20)")) + (net 53 "Net-(P25-Pad1T)")) (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 42 "Net-(P25-Pad19)")) + (net 52 "Net-(P25-Pad1S)")) (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 46 "Net-(P25-Pad18)")) + (net 51 "Net-(P26-Pad2)")) (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 48 "Net-(P25-Pad17)")) + (net 50 "Net-(P25-Pad1Q)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -1622,21 +1794,21 @@ (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 49 "Net-(P25-Pad25)")) + (net 65 "Net-(P25-Pad2C)")) (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 47 "Net-(P25-Pad26)")) + (net 64 "Net-(P25-Pad2D)")) (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 43 "Net-(P25-Pad27)")) + (net 63 "Net-(P25-Pad2E)")) (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 45 "Net-(P25-Pad28)")) + (net 62 "Net-(P25-Pad2F)")) (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 35 "Net-(P25-Pad29)")) + (net 61 "Net-(P25-Pad2G)")) (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 37 "Net-(P25-Pad30)")) + (net 60 "Net-(P25-Pad2H)")) (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 41 "Net-(P25-Pad31)")) + (net 59 "Net-(P25-Pad2I)")) (pad 8 thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 39 "Net-(P25-Pad32)")) + (net 58 "Net-(P25-Pad2J)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -1674,21 +1846,21 @@ (fp_line (start 1.27 -1.27) (end 1.27 19.05) (layer F.Fab) (width 0.1)) (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) (pad 8 thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 23 "Net-(P25-Pad40)")) + (net 73 "Net-(P25-Pad2R)")) (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 24 "Net-(P25-Pad39)")) + (net 72 "Net-(P25-Pad2Q)")) (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 20 "Net-(P25-Pad38)")) + (net 71 "Net-(P25-Pad2P)")) (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 19 "Net-(P25-Pad37)")) + (net 70 "Net-(P25-Pad2O)")) (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 28 "Net-(P25-Pad36)")) + (net 69 "Net-(P25-Pad2N)")) (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 27 "Net-(P25-Pad35)")) + (net 68 "Net-(P25-Pad2M)")) (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 31 "Net-(P25-Pad34)")) + (net 67 "Net-(P25-Pad2L)")) (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 32 "Net-(P25-Pad33)")) + (net 66 "Net-(P25-Pad2K)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -1726,21 +1898,21 @@ (effects (font (size 1 1) (thickness 0.15))) ) (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 33 "Net-(P25-Pad41)")) + (net 81 "Net-(P25-Pad2S)")) (pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 30 "Net-(P25-Pad42)")) + (net 80 "Net-(P25-Pad2T)")) (pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 26 "Net-(P25-Pad43)")) + (net 79 "Net-(P25-Pad2U)")) (pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 29 "Net-(P25-Pad44)")) + (net 78 "Net-(P25-Pad2V)")) (pad 5 thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 18 "Net-(P25-Pad45)")) + (net 77 "Net-(P25-Pad2W)")) (pad 6 thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 21 "Net-(P25-Pad46)")) + (net 76 "Net-(P25-Pad2X)")) (pad 7 thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 25 "Net-(P25-Pad47)")) + (net 75 "Net-(P25-Pad2Y)")) (pad 8 thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) - (net 22 "Net-(P25-Pad48)")) + (net 74 "Net-(P25-Pad2Z)")) (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl (at (xyz 0 0 0)) (scale (xyz 1 1 1)) @@ -1900,67 +2072,22 @@ ) ) - (dimension 102.87 (width 0.381) (layer Cmts.User) - (gr_text "102.870 mm" (at 102.235 88.525999) (layer Cmts.User) + (gr_poly (pts (xy 153.5 40.5) (xy 53.5 40.5) (xy 53.5 74) (xy 153.5 74)) (layer Edge.Cuts) (width 0.1)) + (dimension 100.00125 (width 0.381) (layer Cmts.User) + (gr_text "100.001 mm" (at 103.48532 77.185962 359.7135235) (layer Cmts.User) (effects (font (size 1 1) (thickness 0.15))) ) - (feature1 (pts (xy 153.67 85.09) (xy 153.67 87.58142))) - (feature2 (pts (xy 50.8 85.09) (xy 50.8 87.58142))) - (crossbar (pts (xy 50.8 86.994999) (xy 153.67 86.994999))) - (arrow1a (pts (xy 153.67 86.994999) (xy 152.543496 87.58142))) - (arrow1b (pts (xy 153.67 86.994999) (xy 152.543496 86.408578))) - (arrow2a (pts (xy 50.8 86.994999) (xy 51.926504 87.58142))) - (arrow2b (pts (xy 50.8 86.994999) (xy 51.926504 86.408578))) + (feature1 (pts (xy 153.5 74.5) (xy 153.490043 76.491395))) + (feature2 (pts (xy 53.5 74) (xy 53.490043 75.991395))) + (crossbar (pts (xy 53.492975 75.404981) (xy 153.492975 75.904981))) + (arrow1a (pts (xy 153.492975 75.904981) (xy 152.363553 76.485762))) + (arrow1b (pts (xy 153.492975 75.904981) (xy 152.369417 75.312935))) + (arrow2a (pts (xy 53.492975 75.404981) (xy 54.616533 75.997027))) + (arrow2b (pts (xy 53.492975 75.404981) (xy 54.622397 74.8242))) ) - (gr_line (start 153.67 73.66) (end 50.8 73.66) (angle 90) (layer Edge.Cuts) (width 0.381)) - (gr_text R0.2 (at 54.61 71.12) (layer F.SilkS) + (gr_text "R0.1\n" (at 150.5 67) (layer F.SilkS) (effects (font (size 2.032 1.524) (thickness 0.3048))) ) - (gr_text R (at 158.115 60.325) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text P (at 155.575 60.325) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text N (at 153.035 60.325) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text L (at 150.495 60.325) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text J (at 147.955 60.325) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text H (at 145.415 60.325) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text U (at 165.1 64.77) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text U (at 165.1 71.755) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text 3S (at 163.195 72.39) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text 3S (at 163.195 65.405) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text 3T (at 163.195 69.85) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text V (at 165.1 69.215) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text 3T (at 163.195 62.23) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text V (at 165.1 61.595) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text 3X (at 169.545 60.325) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) (gr_text F (at 140.97 69.215) (layer F.SilkS) (effects (font (size 1.016 1.016) (thickness 0.22352))) ) @@ -2117,18 +2244,6 @@ (gr_text 3A (at 132.08 72.39) (layer F.SilkS) (effects (font (size 1.016 1.016) (thickness 0.22352))) ) - (gr_text 3Z (at 175.26 62.23) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text 3Y (at 175.26 65.405) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text 3Z (at 175.26 69.85) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) - (gr_text 3Y (at 175.26 72.39) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.22352))) - ) (dimension 33.02 (width 0.3048) (layer Cmts.User) (gr_text "33.020 mm" (at 213.715599 57.15 270) (layer Cmts.User) (effects (font (size 2.032 1.524) (thickness 0.3048))) @@ -2141,12 +2256,9 @@ (arrow2a (pts (xy 212.089999 40.64) (xy 211.503579 41.766503))) (arrow2b (pts (xy 212.089999 40.64) (xy 212.676419 41.766503))) ) - (gr_text "rusEFI by DAECU\nrusEFI.com" (at 54.61 50.8 90) (layer F.SilkS) - (effects (font (size 2.032 1.524) (thickness 0.3048))) + (gr_text "rusEFI by CrazyStriker\nVisit rusEFI.com" (at 60.5 72.5 90) (layer F.SilkS) + (effects (font (size 1.9 1.4) (thickness 0.3048)) (justify left)) ) - (gr_line (start 50.8 73.66) (end 50.8 40.46) (angle 90) (layer Edge.Cuts) (width 0.381)) - (gr_line (start 153.67 40.46) (end 153.67 73.66) (angle 90) (layer Edge.Cuts) (width 0.381)) - (gr_line (start 50.8 40.46) (end 153.67 40.46) (angle 90) (layer Edge.Cuts) (width 0.381)) (segment (start 141.058001 66.128001) (end 139.7 64.77) (width 0.508) (layer B.Cu) (net 2)) (segment (start 141.058001 72.135999) (end 141.058001 66.128001) (width 0.508) (layer B.Cu) (net 2)) @@ -2185,10 +2297,11 @@ (segment (start 73.152 67.056) (end 73.152 64.008) (width 0.508) (layer F.Cu) (net 6)) (segment (start 73.152 64.008) (end 71.374 62.23) (width 0.508) (layer F.Cu) (net 6)) (segment (start 71.374 69.596) (end 71.374 68.834) (width 0.508) (layer F.Cu) (net 6)) - (segment (start 71.882 62.23) (end 74.93 59.182) (width 0.508) (layer F.Cu) (net 6)) - (segment (start 74.93 59.182) (end 74.93 54.9402) (width 0.508) (layer F.Cu) (net 6)) - (segment (start 74.93 54.9402) (end 73.27392 53.28412) (width 0.508) (layer F.Cu) (net 6)) (segment (start 71.374 62.23) (end 71.882 62.23) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 72.478 62.23) (end 74.8 59.908) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 71.374 62.23) (end 72.478 62.23) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 74.8 54.861) (end 73.22312 53.28412) (width 0.508) (layer F.Cu) (net 6)) + (segment (start 74.8 59.908) (end 74.8 54.861) (width 0.508) (layer F.Cu) (net 6)) (segment (start 68.834 68.58) (end 70.104 67.31) (width 0.508) (layer F.Cu) (net 7)) (segment (start 68.834 69.596) (end 68.834 68.58) (width 0.508) (layer F.Cu) (net 7)) (segment (start 70.104 67.31) (end 70.104 63.5) (width 0.254) (layer F.Cu) (net 7)) @@ -2197,14 +2310,16 @@ (segment (start 71.374 54.88178) (end 69.77634 53.28412) (width 0.508) (layer F.Cu) (net 7)) (segment (start 68.834 62.23) (end 68.834 61.214) (width 0.508) (layer F.Cu) (net 7)) (segment (start 71.374 58.674) (end 71.374 54.88178) (width 0.508) (layer F.Cu) (net 7)) - (segment (start 144.32788 56.24412) (end 144.32788 54.097731) (width 0.508) (layer F.Cu) (net 8)) - (segment (start 139.7 60.872) (end 144.32788 56.24412) (width 0.508) (layer F.Cu) (net 8)) (segment (start 144.32788 54.097731) (end 144.32788 53.28412) (width 0.508) (layer F.Cu) (net 8)) (segment (start 139.7 62.23) (end 139.7 60.872) (width 0.508) (layer F.Cu) (net 8)) (segment (start 141.058001 66.752999) (end 141.058 62.23) (width 0.508) (layer F.Cu) (net 8)) (segment (start 139.7 68.111) (end 141.058001 66.752999) (width 0.508) (layer F.Cu) (net 8)) (segment (start 141.058 62.23) (end 139.7 62.23) (width 0.508) (layer F.Cu) (net 8)) (segment (start 139.7 69.469) (end 139.7 68.111) (width 0.508) (layer F.Cu) (net 8)) + (segment (start 143.072379 57.499621) (end 139.7 60.872) (width 0.503) (layer F.Cu) (net 8)) + (segment (start 143.072379 55.600281) (end 143.072379 57.499621) (width 0.503) (layer F.Cu) (net 8)) + (segment (start 144.32788 54.34478) (end 143.072379 55.600281) (width 0.503) (layer F.Cu) (net 8)) + (segment (start 144.32788 53.28412) (end 144.32788 54.34478) (width 0.503) (layer F.Cu) (net 8)) (segment (start 137.16 67.818) (end 135.89 66.548) (width 0.508) (layer F.Cu) (net 9)) (segment (start 135.89 66.548) (end 135.89 63.5) (width 0.254) (layer F.Cu) (net 9)) (segment (start 135.89 63.5) (end 137.16 62.23) (width 0.508) (layer F.Cu) (net 9)) @@ -2218,9 +2333,12 @@ (segment (start 134.62 69.596) (end 134.62 68.072) (width 0.508) (layer F.Cu) (net 10)) (segment (start 134.62 68.072) (end 133.096 66.548) (width 0.508) (layer F.Cu) (net 10)) (segment (start 136.244329 54.367431) (end 136.752331 53.859429) (width 0.508) (layer F.Cu) (net 10)) - (segment (start 136.244329 60.605671) (end 136.244329 54.367431) (width 0.508) (layer F.Cu) (net 10)) (segment (start 136.752331 53.859429) (end 137.32764 53.28412) (width 0.508) (layer F.Cu) (net 10)) - (segment (start 134.62 62.23) (end 136.244329 60.605671) (width 0.508) (layer F.Cu) (net 10)) + (segment (start 135.469999 61.380001) (end 134.62 62.23) (width 0.503) (layer F.Cu) (net 10)) + (segment (start 135.481801 61.368199) (end 135.469999 61.380001) (width 0.503) (layer F.Cu) (net 10)) + (segment (start 135.481801 57.772697) (end 135.481801 61.368199) (width 0.503) (layer F.Cu) (net 10)) + (segment (start 136.244329 57.010169) (end 135.481801 57.772697) (width 0.503) (layer F.Cu) (net 10)) + (segment (start 136.244329 54.367431) (end 136.244329 57.010169) (width 0.503) (layer F.Cu) (net 10)) (segment (start 111.506 70.866) (end 111.506 66.04) (width 0.254) (layer B.Cu) (net 11)) (segment (start 111.506 66.04) (end 110.236 64.77) (width 0.254) (layer B.Cu) (net 11)) (segment (start 110.236 72.136) (end 111.506 70.866) (width 0.254) (layer B.Cu) (net 11)) @@ -2241,13 +2359,10 @@ (segment (start 110.236 67.564) (end 108.966 66.294) (width 0.254) (layer F.Cu) (net 13)) (segment (start 108.966 66.294) (end 108.966 63.5) (width 0.254) (layer F.Cu) (net 13)) (segment (start 110.236 69.596) (end 110.236 67.564) (width 0.254) (layer F.Cu) (net 13)) - (segment (start 109.548931 53.859429) (end 110.12424 53.28412) (width 0.254) (layer F.Cu) (net 13)) - (segment (start 109.167929 54.240431) (end 109.548931 53.859429) (width 0.254) (layer F.Cu) (net 13)) - (segment (start 109.167929 60.057929) (end 109.167929 54.240431) (width 0.254) (layer F.Cu) (net 13)) - (segment (start 110.236 61.126) (end 109.167929 60.057929) (width 0.254) (layer F.Cu) (net 13)) - (segment (start 110.236 62.23) (end 110.236 61.126) (width 0.254) (layer F.Cu) (net 13)) - (segment (start 107.696 54.356) (end 106.62412 53.28412) (width 0.254) (layer F.Cu) (net 14)) - (segment (start 107.696 62.23) (end 107.696 54.356) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 110.236 61.126) (end 110.236 62.23) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 108.993239 59.883239) (end 110.236 61.126) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 108.993239 54.415121) (end 108.993239 59.883239) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 110.12424 53.28412) (end 108.993239 54.415121) (width 0.254) (layer F.Cu) (net 13)) (segment (start 106.414199 63.538999) (end 106.426 63.538999) (width 0.254) (layer F.Cu) (net 14)) (segment (start 106.337999 63.615199) (end 106.414199 63.538999) (width 0.254) (layer F.Cu) (net 14)) (segment (start 106.426 63.538999) (end 106.426 63.5) (width 0.254) (layer F.Cu) (net 14)) @@ -2258,6 +2373,10 @@ (segment (start 106.426 66.548) (end 106.426 66.001001) (width 0.254) (layer F.Cu) (net 14)) (segment (start 106.337999 65.924801) (end 106.337999 63.615199) (width 0.254) (layer F.Cu) (net 14)) (segment (start 106.426 66.001001) (end 106.414199 66.001001) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 107.696 61.126) (end 107.696 62.23) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 107.755121 61.066879) (end 107.696 61.126) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 107.755121 54.415121) (end 107.755121 61.066879) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 106.62412 53.28412) (end 107.755121 54.415121) (width 0.254) (layer F.Cu) (net 14)) (segment (start 103.124 70.358) (end 103.124 66.548) (width 0.508) (layer B.Cu) (net 15)) (segment (start 103.124 66.548) (end 101.346 64.77) (width 0.508) (layer B.Cu) (net 15)) (segment (start 101.346 72.136) (end 103.124 70.358) (width 0.508) (layer B.Cu) (net 15)) @@ -2401,8 +2520,8 @@ (segment (start 119.126 63.5) (end 120.396 62.23) (width 0.254) (layer F.Cu) (net 35)) (segment (start 120.396 67.564) (end 119.126 66.294) (width 0.254) (layer F.Cu) (net 35)) (segment (start 120.396 69.596) (end 120.396 67.564) (width 0.254) (layer F.Cu) (net 35)) - (segment (start 120.396 55.11546) (end 122.22734 53.28412) (width 0.254) (layer F.Cu) (net 35)) - (segment (start 120.396 62.23) (end 120.396 55.11546) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 120.396 55.11546) (end 120.396 62.23) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 122.22734 53.28412) (end 120.396 55.11546) (width 0.254) (layer F.Cu) (net 35)) (segment (start 117.856 72.136) (end 119.126 70.866) (width 0.254) (layer B.Cu) (net 36)) (segment (start 119.126 66.04) (end 117.856 64.77) (width 0.254) (layer B.Cu) (net 36)) (segment (start 119.126 70.866) (end 119.126 66.04) (width 0.254) (layer B.Cu) (net 36)) @@ -2461,10 +2580,12 @@ (segment (start 124.206 66.548) (end 124.206 63.5) (width 0.254) (layer F.Cu) (net 43)) (segment (start 124.206 63.5) (end 125.476 62.23) (width 0.254) (layer F.Cu) (net 43)) (segment (start 125.476 69.596) (end 125.476 67.818) (width 0.254) (layer F.Cu) (net 43)) - (segment (start 128.22682 54.097731) (end 128.22682 53.28412) (width 0.254) (layer F.Cu) (net 43)) - (segment (start 128.22682 56.369659) (end 128.22682 54.097731) (width 0.254) (layer F.Cu) (net 43)) - (segment (start 125.476 59.120479) (end 128.22682 56.369659) (width 0.254) (layer F.Cu) (net 43)) - (segment (start 125.476 62.23) (end 125.476 59.120479) (width 0.254) (layer F.Cu) (net 43)) + (segment (start 126.325999 61.380001) (end 125.476 62.23) (width 0.254) (layer F.Cu) (net 43)) + (segment (start 126.358081 61.347919) (end 126.325999 61.380001) (width 0.254) (layer F.Cu) (net 43)) + (segment (start 126.358081 57.979857) (end 126.358081 61.347919) (width 0.254) (layer F.Cu) (net 43)) + (segment (start 127.968279 56.369659) (end 126.358081 57.979857) (width 0.254) (layer F.Cu) (net 43)) + (segment (start 128.22682 56.369659) (end 127.968279 56.369659) (width 0.254) (layer F.Cu) (net 43)) + (segment (start 128.22682 53.28412) (end 128.22682 56.369659) (width 0.254) (layer F.Cu) (net 43)) (segment (start 124.206 70.866) (end 124.206 66.04) (width 0.254) (layer B.Cu) (net 44)) (segment (start 124.206 66.04) (end 122.936 64.77) (width 0.254) (layer B.Cu) (net 44)) (segment (start 122.936 72.136) (end 124.206 70.866) (width 0.254) (layer B.Cu) (net 44)) @@ -2476,10 +2597,11 @@ (segment (start 121.666 66.294) (end 121.666 63.5) (width 0.254) (layer F.Cu) (net 45)) (segment (start 121.666 63.5) (end 122.936 62.23) (width 0.254) (layer F.Cu) (net 45)) (segment (start 122.936 69.596) (end 122.936 67.564) (width 0.254) (layer F.Cu) (net 45)) - (segment (start 125.22708 56.200601) (end 125.22708 54.097731) (width 0.254) (layer F.Cu) (net 45)) - (segment (start 125.22708 54.097731) (end 125.22708 53.28412) (width 0.254) (layer F.Cu) (net 45)) - (segment (start 122.936 58.491681) (end 125.22708 56.200601) (width 0.254) (layer F.Cu) (net 45)) - (segment (start 122.936 62.23) (end 122.936 58.491681) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 123.785999 61.380001) (end 122.936 62.23) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 123.785999 57.552199) (end 123.785999 61.380001) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 125.137597 56.200601) (end 123.785999 57.552199) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 125.22708 56.200601) (end 125.137597 56.200601) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 125.22708 53.28412) (end 125.22708 56.200601) (width 0.254) (layer F.Cu) (net 45)) (segment (start 130.651251 58.360309) (end 131.22656 57.785) (width 0.254) (layer B.Cu) (net 46)) (segment (start 129.247001 59.764559) (end 130.651251 58.360309) (width 0.254) (layer B.Cu) (net 46)) (segment (start 129.247001 63.538999) (end 129.247001 59.764559) (width 0.254) (layer B.Cu) (net 46)) @@ -2488,14 +2610,16 @@ (segment (start 129.247001 66.001001) (end 128.865999 65.619999) (width 0.254) (layer B.Cu) (net 46)) (segment (start 129.247001 70.904999) (end 129.247001 66.001001) (width 0.254) (layer B.Cu) (net 46)) (segment (start 128.016 72.136) (end 129.247001 70.904999) (width 0.254) (layer B.Cu) (net 46)) - (segment (start 131.22656 54.097731) (end 131.22656 53.28412) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 128.016 59.411161) (end 131.22656 56.200601) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 131.22656 56.200601) (end 131.22656 54.097731) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 128.016 62.23) (end 128.016 59.411161) (width 0.254) (layer F.Cu) (net 47)) (segment (start 126.707001 63.538999) (end 127.166001 63.079999) (width 0.254) (layer F.Cu) (net 47)) (segment (start 127.166001 63.079999) (end 128.016 62.23) (width 0.254) (layer F.Cu) (net 47)) (segment (start 126.707001 68.287001) (end 126.707001 63.538999) (width 0.254) (layer F.Cu) (net 47)) (segment (start 128.016 69.596) (end 126.707001 68.287001) (width 0.254) (layer F.Cu) (net 47)) + (segment (start 128.865999 61.380001) (end 128.016 62.23) (width 0.254) (layer F.Cu) (net 47)) + (segment (start 129.357821 60.888179) (end 128.865999 61.380001) (width 0.254) (layer F.Cu) (net 47)) + (segment (start 129.357821 57.979857) (end 129.357821 60.888179) (width 0.254) (layer F.Cu) (net 47)) + (segment (start 131.137077 56.200601) (end 129.357821 57.979857) (width 0.254) (layer F.Cu) (net 47)) + (segment (start 131.22656 56.200601) (end 131.137077 56.200601) (width 0.254) (layer F.Cu) (net 47)) + (segment (start 131.22656 53.28412) (end 131.22656 56.200601) (width 0.254) (layer F.Cu) (net 47)) (segment (start 131.787001 60.224299) (end 133.650991 58.360309) (width 0.254) (layer B.Cu) (net 48)) (segment (start 133.650991 58.360309) (end 134.2263 57.785) (width 0.254) (layer B.Cu) (net 48)) (segment (start 131.787001 64.642999) (end 131.787001 60.224299) (width 0.254) (layer B.Cu) (net 48)) @@ -2506,16 +2630,18 @@ (segment (start 131.66 72.136) (end 131.787001 72.008999) (width 0.254) (layer B.Cu) (net 48)) (segment (start 130.556 72.136) (end 131.66 72.136) (width 0.254) (layer B.Cu) (net 48)) (segment (start 134.2263 54.097731) (end 134.2263 53.28412) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 134.2263 56.369659) (end 134.2263 54.097731) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 130.556 60.039959) (end 134.2263 56.369659) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 130.556 62.23) (end 130.556 60.039959) (width 0.254) (layer F.Cu) (net 49)) (segment (start 129.452 62.23) (end 130.556 62.23) (width 0.254) (layer F.Cu) (net 49)) (segment (start 129.324999 62.357001) (end 129.452 62.23) (width 0.254) (layer F.Cu) (net 49)) (segment (start 129.324999 67.260999) (end 129.324999 62.357001) (width 0.254) (layer F.Cu) (net 49)) (segment (start 130.556 68.492) (end 129.324999 67.260999) (width 0.254) (layer F.Cu) (net 49)) (segment (start 130.556 69.596) (end 130.556 68.492) (width 0.254) (layer F.Cu) (net 49)) + (segment (start 134.2263 53.28412) (end 134.2263 55.0737) (width 0.254) (layer F.Cu) (net 49)) + (segment (start 134.2263 55.0737) (end 132.7 56.6) (width 0.254) (layer F.Cu) (net 49)) + (segment (start 130.556 61.126) (end 130.556 62.23) (width 0.254) (layer F.Cu) (net 49)) + (segment (start 132.7 58.982) (end 130.556 61.126) (width 0.254) (layer F.Cu) (net 49)) + (segment (start 132.7 56.6) (end 132.7 58.982) (width 0.254) (layer F.Cu) (net 49)) - (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 5897442D) (hatch edge 0.508) + (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 5E771DF0) (hatch edge 0.508) (connect_pads (clearance 0.2159)) (min_thickness 0.2159) (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) @@ -2526,356 +2652,386 @@ ) (filled_polygon (pts - (xy 153.155651 73.14565) (xy 140.875075 73.14565) (xy 140.886016 73.125182) (xy 140.906713 73.056955) (xy 140.913701 72.986) - (xy 140.913701 71.462) (xy 144.96207 71.462) (xy 144.973963 71.582747) (xy 145.009183 71.698854) (xy 145.066379 71.805859) - (xy 145.14335 71.89965) (xy 145.237141 71.976621) (xy 145.344146 72.033817) (xy 145.460253 72.069037) (xy 145.581 72.08093) - (xy 146.130963 72.07795) (xy 146.28495 71.923963) (xy 146.28495 70.75805) (xy 146.57705 70.75805) (xy 146.57705 71.923963) - (xy 146.731037 72.07795) (xy 147.281 72.08093) (xy 147.401747 72.069037) (xy 147.517854 72.033817) (xy 147.624859 71.976621) - (xy 147.71865 71.89965) (xy 147.795621 71.805859) (xy 147.852817 71.698854) (xy 147.888037 71.582747) (xy 147.89993 71.462) - (xy 147.89695 70.912037) (xy 147.742963 70.75805) (xy 146.57705 70.75805) (xy 146.28495 70.75805) (xy 145.119037 70.75805) - (xy 144.96505 70.912037) (xy 144.96207 71.462) (xy 140.913701 71.462) (xy 140.913701 71.286) (xy 140.906713 71.215045) - (xy 140.886016 71.146818) (xy 140.852406 71.083939) (xy 140.807175 71.028825) (xy 140.752061 70.983594) (xy 140.689182 70.949984) - (xy 140.620955 70.929287) (xy 140.55 70.922299) (xy 138.85 70.922299) (xy 138.779045 70.929287) (xy 138.710818 70.949984) - (xy 138.647939 70.983594) (xy 138.592825 71.028825) (xy 138.547594 71.083939) (xy 138.513984 71.146818) (xy 138.493287 71.215045) - (xy 138.486299 71.286) (xy 138.486299 72.986) (xy 138.493287 73.056955) (xy 138.513984 73.125182) (xy 138.524925 73.14565) - (xy 137.830404 73.14565) (xy 137.932573 73.077383) (xy 138.101383 72.908573) (xy 138.234016 72.710074) (xy 138.325375 72.489513) - (xy 138.37195 72.255367) (xy 138.37195 72.016633) (xy 138.325375 71.782487) (xy 138.234016 71.561926) (xy 138.101383 71.363427) - (xy 137.932573 71.194617) (xy 137.734074 71.061984) (xy 137.513513 70.970625) (xy 137.279367 70.92405) (xy 137.040633 70.92405) - (xy 136.806487 70.970625) (xy 136.585926 71.061984) (xy 136.387427 71.194617) (xy 136.218617 71.363427) (xy 136.085984 71.561926) - (xy 135.994625 71.782487) (xy 135.94805 72.016633) (xy 135.94805 72.255367) (xy 135.994625 72.489513) (xy 136.085984 72.710074) - (xy 136.218617 72.908573) (xy 136.387427 73.077383) (xy 136.489596 73.14565) (xy 135.290404 73.14565) (xy 135.392573 73.077383) - (xy 135.561383 72.908573) (xy 135.694016 72.710074) (xy 135.785375 72.489513) (xy 135.83195 72.255367) (xy 135.83195 72.016633) - (xy 135.785375 71.782487) (xy 135.694016 71.561926) (xy 135.561383 71.363427) (xy 135.392573 71.194617) (xy 135.194074 71.061984) - (xy 134.973513 70.970625) (xy 134.739367 70.92405) (xy 134.500633 70.92405) (xy 134.266487 70.970625) (xy 134.045926 71.061984) - (xy 133.847427 71.194617) (xy 133.678617 71.363427) (xy 133.545984 71.561926) (xy 133.454625 71.782487) (xy 133.40805 72.016633) - (xy 133.40805 72.255367) (xy 133.454625 72.489513) (xy 133.545984 72.710074) (xy 133.678617 72.908573) (xy 133.847427 73.077383) - (xy 133.949596 73.14565) (xy 131.731075 73.14565) (xy 131.742016 73.125182) (xy 131.762713 73.056955) (xy 131.769701 72.986) - (xy 131.769701 71.286) (xy 131.762713 71.215045) (xy 131.742016 71.146818) (xy 131.708406 71.083939) (xy 131.663175 71.028825) - (xy 131.608061 70.983594) (xy 131.545182 70.949984) (xy 131.476955 70.929287) (xy 131.406 70.922299) (xy 129.706 70.922299) - (xy 129.635045 70.929287) (xy 129.566818 70.949984) (xy 129.503939 70.983594) (xy 129.448825 71.028825) (xy 129.403594 71.083939) - (xy 129.369984 71.146818) (xy 129.349287 71.215045) (xy 129.342299 71.286) (xy 129.342299 72.986) (xy 129.349287 73.056955) - (xy 129.369984 73.125182) (xy 129.380925 73.14565) (xy 128.686404 73.14565) (xy 128.788573 73.077383) (xy 128.957383 72.908573) - (xy 129.090016 72.710074) (xy 129.181375 72.489513) (xy 129.22795 72.255367) (xy 129.22795 72.016633) (xy 129.181375 71.782487) - (xy 129.090016 71.561926) (xy 128.957383 71.363427) (xy 128.788573 71.194617) (xy 128.590074 71.061984) (xy 128.369513 70.970625) - (xy 128.135367 70.92405) (xy 127.896633 70.92405) (xy 127.662487 70.970625) (xy 127.441926 71.061984) (xy 127.243427 71.194617) - (xy 127.074617 71.363427) (xy 126.941984 71.561926) (xy 126.850625 71.782487) (xy 126.80405 72.016633) (xy 126.80405 72.255367) - (xy 126.850625 72.489513) (xy 126.941984 72.710074) (xy 127.074617 72.908573) (xy 127.243427 73.077383) (xy 127.345596 73.14565) - (xy 126.146404 73.14565) (xy 126.248573 73.077383) (xy 126.417383 72.908573) (xy 126.550016 72.710074) (xy 126.641375 72.489513) - (xy 126.68795 72.255367) (xy 126.68795 72.016633) (xy 126.641375 71.782487) (xy 126.550016 71.561926) (xy 126.417383 71.363427) - (xy 126.248573 71.194617) (xy 126.050074 71.061984) (xy 125.829513 70.970625) (xy 125.595367 70.92405) (xy 125.356633 70.92405) - (xy 125.122487 70.970625) (xy 124.901926 71.061984) (xy 124.703427 71.194617) (xy 124.534617 71.363427) (xy 124.401984 71.561926) - (xy 124.310625 71.782487) (xy 124.26405 72.016633) (xy 124.26405 72.255367) (xy 124.310625 72.489513) (xy 124.401984 72.710074) - (xy 124.534617 72.908573) (xy 124.703427 73.077383) (xy 124.805596 73.14565) (xy 123.606404 73.14565) (xy 123.708573 73.077383) - (xy 123.877383 72.908573) (xy 124.010016 72.710074) (xy 124.101375 72.489513) (xy 124.14795 72.255367) (xy 124.14795 72.016633) - (xy 124.101375 71.782487) (xy 124.010016 71.561926) (xy 123.877383 71.363427) (xy 123.708573 71.194617) (xy 123.510074 71.061984) - (xy 123.289513 70.970625) (xy 123.055367 70.92405) (xy 122.816633 70.92405) (xy 122.582487 70.970625) (xy 122.361926 71.061984) - (xy 122.163427 71.194617) (xy 121.994617 71.363427) (xy 121.861984 71.561926) (xy 121.770625 71.782487) (xy 121.72405 72.016633) - (xy 121.72405 72.255367) (xy 121.770625 72.489513) (xy 121.861984 72.710074) (xy 121.994617 72.908573) (xy 122.163427 73.077383) - (xy 122.265596 73.14565) (xy 121.066404 73.14565) (xy 121.168573 73.077383) (xy 121.337383 72.908573) (xy 121.470016 72.710074) - (xy 121.561375 72.489513) (xy 121.60795 72.255367) (xy 121.60795 72.016633) (xy 121.561375 71.782487) (xy 121.470016 71.561926) - (xy 121.337383 71.363427) (xy 121.168573 71.194617) (xy 120.970074 71.061984) (xy 120.749513 70.970625) (xy 120.515367 70.92405) - (xy 120.276633 70.92405) (xy 120.042487 70.970625) (xy 119.821926 71.061984) (xy 119.623427 71.194617) (xy 119.454617 71.363427) - (xy 119.321984 71.561926) (xy 119.230625 71.782487) (xy 119.18405 72.016633) (xy 119.18405 72.255367) (xy 119.230625 72.489513) - (xy 119.321984 72.710074) (xy 119.454617 72.908573) (xy 119.623427 73.077383) (xy 119.725596 73.14565) (xy 118.526404 73.14565) - (xy 118.628573 73.077383) (xy 118.797383 72.908573) (xy 118.930016 72.710074) (xy 119.021375 72.489513) (xy 119.06795 72.255367) - (xy 119.06795 72.016633) (xy 119.021375 71.782487) (xy 118.930016 71.561926) (xy 118.797383 71.363427) (xy 118.628573 71.194617) - (xy 118.430074 71.061984) (xy 118.209513 70.970625) (xy 117.975367 70.92405) (xy 117.736633 70.92405) (xy 117.502487 70.970625) - (xy 117.281926 71.061984) (xy 117.083427 71.194617) (xy 116.914617 71.363427) (xy 116.781984 71.561926) (xy 116.690625 71.782487) - (xy 116.64405 72.016633) (xy 116.64405 72.255367) (xy 116.690625 72.489513) (xy 116.781984 72.710074) (xy 116.914617 72.908573) - (xy 117.083427 73.077383) (xy 117.185596 73.14565) (xy 115.986404 73.14565) (xy 116.088573 73.077383) (xy 116.257383 72.908573) - (xy 116.390016 72.710074) (xy 116.481375 72.489513) (xy 116.52795 72.255367) (xy 116.52795 72.016633) (xy 116.481375 71.782487) - (xy 116.390016 71.561926) (xy 116.257383 71.363427) (xy 116.088573 71.194617) (xy 115.890074 71.061984) (xy 115.669513 70.970625) - (xy 115.435367 70.92405) (xy 115.196633 70.92405) (xy 114.962487 70.970625) (xy 114.741926 71.061984) (xy 114.543427 71.194617) - (xy 114.374617 71.363427) (xy 114.241984 71.561926) (xy 114.150625 71.782487) (xy 114.10405 72.016633) (xy 114.10405 72.255367) - (xy 114.150625 72.489513) (xy 114.241984 72.710074) (xy 114.374617 72.908573) (xy 114.543427 73.077383) (xy 114.645596 73.14565) - (xy 113.446404 73.14565) (xy 113.548573 73.077383) (xy 113.717383 72.908573) (xy 113.850016 72.710074) (xy 113.941375 72.489513) - (xy 113.98795 72.255367) (xy 113.98795 72.016633) (xy 113.941375 71.782487) (xy 113.850016 71.561926) (xy 113.717383 71.363427) - (xy 113.548573 71.194617) (xy 113.350074 71.061984) (xy 113.129513 70.970625) (xy 112.895367 70.92405) (xy 112.656633 70.92405) - (xy 112.422487 70.970625) (xy 112.201926 71.061984) (xy 112.003427 71.194617) (xy 111.834617 71.363427) (xy 111.701984 71.561926) - (xy 111.610625 71.782487) (xy 111.56405 72.016633) (xy 111.56405 72.255367) (xy 111.610625 72.489513) (xy 111.701984 72.710074) - (xy 111.834617 72.908573) (xy 112.003427 73.077383) (xy 112.105596 73.14565) (xy 111.411075 73.14565) (xy 111.422016 73.125182) - (xy 111.442713 73.056955) (xy 111.449701 72.986) (xy 111.449701 71.286) (xy 111.442713 71.215045) (xy 111.422016 71.146818) - (xy 111.388406 71.083939) (xy 111.343175 71.028825) (xy 111.288061 70.983594) (xy 111.225182 70.949984) (xy 111.156955 70.929287) - (xy 111.086 70.922299) (xy 109.386 70.922299) (xy 109.315045 70.929287) (xy 109.246818 70.949984) (xy 109.183939 70.983594) - (xy 109.128825 71.028825) (xy 109.083594 71.083939) (xy 109.049984 71.146818) (xy 109.029287 71.215045) (xy 109.022299 71.286) - (xy 109.022299 72.986) (xy 109.029287 73.056955) (xy 109.049984 73.125182) (xy 109.060925 73.14565) (xy 108.871075 73.14565) - (xy 108.882016 73.125182) (xy 108.902713 73.056955) (xy 108.909701 72.986) (xy 108.909701 71.286) (xy 108.902713 71.215045) - (xy 108.882016 71.146818) (xy 108.848406 71.083939) (xy 108.803175 71.028825) (xy 108.748061 70.983594) (xy 108.685182 70.949984) - (xy 108.616955 70.929287) (xy 108.546 70.922299) (xy 106.846 70.922299) (xy 106.775045 70.929287) (xy 106.706818 70.949984) - (xy 106.643939 70.983594) (xy 106.588825 71.028825) (xy 106.543594 71.083939) (xy 106.509984 71.146818) (xy 106.489287 71.215045) - (xy 106.482299 71.286) (xy 106.482299 72.986) (xy 106.489287 73.056955) (xy 106.509984 73.125182) (xy 106.520925 73.14565) - (xy 102.521075 73.14565) (xy 102.532016 73.125182) (xy 102.552713 73.056955) (xy 102.559701 72.986) (xy 102.559701 71.286) - (xy 102.552713 71.215045) (xy 102.532016 71.146818) (xy 102.498406 71.083939) (xy 102.453175 71.028825) (xy 102.398061 70.983594) - (xy 102.335182 70.949984) (xy 102.266955 70.929287) (xy 102.196 70.922299) (xy 100.496 70.922299) (xy 100.425045 70.929287) - (xy 100.356818 70.949984) (xy 100.293939 70.983594) (xy 100.238825 71.028825) (xy 100.193594 71.083939) (xy 100.159984 71.146818) - (xy 100.139287 71.215045) (xy 100.132299 71.286) (xy 100.132299 72.986) (xy 100.139287 73.056955) (xy 100.159984 73.125182) - (xy 100.170925 73.14565) (xy 96.679075 73.14565) (xy 96.690016 73.125182) (xy 96.710713 73.056955) (xy 96.717701 72.986) - (xy 96.717701 71.286) (xy 96.710713 71.215045) (xy 96.690016 71.146818) (xy 96.656406 71.083939) (xy 96.611175 71.028825) - (xy 96.556061 70.983594) (xy 96.493182 70.949984) (xy 96.424955 70.929287) (xy 96.354 70.922299) (xy 94.654 70.922299) - (xy 94.583045 70.929287) (xy 94.514818 70.949984) (xy 94.451939 70.983594) (xy 94.396825 71.028825) (xy 94.351594 71.083939) - (xy 94.317984 71.146818) (xy 94.297287 71.215045) (xy 94.290299 71.286) (xy 94.290299 72.986) (xy 94.297287 73.056955) - (xy 94.317984 73.125182) (xy 94.328925 73.14565) (xy 93.634404 73.14565) (xy 93.736573 73.077383) (xy 93.905383 72.908573) - (xy 94.038016 72.710074) (xy 94.129375 72.489513) (xy 94.17595 72.255367) (xy 94.17595 72.016633) (xy 94.129375 71.782487) - (xy 94.038016 71.561926) (xy 93.905383 71.363427) (xy 93.736573 71.194617) (xy 93.538074 71.061984) (xy 93.317513 70.970625) - (xy 93.083367 70.92405) (xy 92.844633 70.92405) (xy 92.610487 70.970625) (xy 92.389926 71.061984) (xy 92.191427 71.194617) - (xy 92.022617 71.363427) (xy 91.889984 71.561926) (xy 91.798625 71.782487) (xy 91.75205 72.016633) (xy 91.75205 72.255367) - (xy 91.798625 72.489513) (xy 91.889984 72.710074) (xy 92.022617 72.908573) (xy 92.191427 73.077383) (xy 92.293596 73.14565) - (xy 91.094404 73.14565) (xy 91.196573 73.077383) (xy 91.365383 72.908573) (xy 91.498016 72.710074) (xy 91.589375 72.489513) - (xy 91.63595 72.255367) (xy 91.63595 72.016633) (xy 91.589375 71.782487) (xy 91.498016 71.561926) (xy 91.365383 71.363427) - (xy 91.196573 71.194617) (xy 90.998074 71.061984) (xy 90.777513 70.970625) (xy 90.543367 70.92405) (xy 90.304633 70.92405) - (xy 90.070487 70.970625) (xy 89.849926 71.061984) (xy 89.651427 71.194617) (xy 89.482617 71.363427) (xy 89.349984 71.561926) - (xy 89.258625 71.782487) (xy 89.21205 72.016633) (xy 89.21205 72.255367) (xy 89.258625 72.489513) (xy 89.349984 72.710074) - (xy 89.482617 72.908573) (xy 89.651427 73.077383) (xy 89.753596 73.14565) (xy 88.554404 73.14565) (xy 88.656573 73.077383) - (xy 88.825383 72.908573) (xy 88.958016 72.710074) (xy 89.049375 72.489513) (xy 89.09595 72.255367) (xy 89.09595 72.016633) - (xy 89.049375 71.782487) (xy 88.958016 71.561926) (xy 88.825383 71.363427) (xy 88.656573 71.194617) (xy 88.458074 71.061984) - (xy 88.237513 70.970625) (xy 88.003367 70.92405) (xy 87.764633 70.92405) (xy 87.530487 70.970625) (xy 87.309926 71.061984) - (xy 87.111427 71.194617) (xy 86.942617 71.363427) (xy 86.809984 71.561926) (xy 86.718625 71.782487) (xy 86.67205 72.016633) - (xy 86.67205 72.255367) (xy 86.718625 72.489513) (xy 86.809984 72.710074) (xy 86.942617 72.908573) (xy 87.111427 73.077383) - (xy 87.213596 73.14565) (xy 86.014404 73.14565) (xy 86.116573 73.077383) (xy 86.285383 72.908573) (xy 86.418016 72.710074) - (xy 86.509375 72.489513) (xy 86.55595 72.255367) (xy 86.55595 72.016633) (xy 86.509375 71.782487) (xy 86.418016 71.561926) - (xy 86.285383 71.363427) (xy 86.116573 71.194617) (xy 85.918074 71.061984) (xy 85.697513 70.970625) (xy 85.463367 70.92405) - (xy 85.224633 70.92405) (xy 84.990487 70.970625) (xy 84.769926 71.061984) (xy 84.571427 71.194617) (xy 84.402617 71.363427) - (xy 84.269984 71.561926) (xy 84.178625 71.782487) (xy 84.13205 72.016633) (xy 84.13205 72.255367) (xy 84.178625 72.489513) - (xy 84.269984 72.710074) (xy 84.402617 72.908573) (xy 84.571427 73.077383) (xy 84.673596 73.14565) (xy 83.474404 73.14565) - (xy 83.576573 73.077383) (xy 83.745383 72.908573) (xy 83.878016 72.710074) (xy 83.969375 72.489513) (xy 84.01595 72.255367) - (xy 84.01595 72.016633) (xy 83.969375 71.782487) (xy 83.878016 71.561926) (xy 83.745383 71.363427) (xy 83.576573 71.194617) - (xy 83.378074 71.061984) (xy 83.157513 70.970625) (xy 82.923367 70.92405) (xy 82.684633 70.92405) (xy 82.450487 70.970625) - (xy 82.229926 71.061984) (xy 82.031427 71.194617) (xy 81.862617 71.363427) (xy 81.729984 71.561926) (xy 81.638625 71.782487) - (xy 81.59205 72.016633) (xy 81.59205 72.255367) (xy 81.638625 72.489513) (xy 81.729984 72.710074) (xy 81.862617 72.908573) - (xy 82.031427 73.077383) (xy 82.133596 73.14565) (xy 80.934404 73.14565) (xy 81.036573 73.077383) (xy 81.205383 72.908573) - (xy 81.338016 72.710074) (xy 81.429375 72.489513) (xy 81.47595 72.255367) (xy 81.47595 72.016633) (xy 81.429375 71.782487) - (xy 81.338016 71.561926) (xy 81.205383 71.363427) (xy 81.036573 71.194617) (xy 80.838074 71.061984) (xy 80.617513 70.970625) - (xy 80.383367 70.92405) (xy 80.144633 70.92405) (xy 79.910487 70.970625) (xy 79.689926 71.061984) (xy 79.491427 71.194617) - (xy 79.322617 71.363427) (xy 79.189984 71.561926) (xy 79.098625 71.782487) (xy 79.05205 72.016633) (xy 79.05205 72.255367) - (xy 79.098625 72.489513) (xy 79.189984 72.710074) (xy 79.322617 72.908573) (xy 79.491427 73.077383) (xy 79.593596 73.14565) - (xy 78.394404 73.14565) (xy 78.496573 73.077383) (xy 78.665383 72.908573) (xy 78.798016 72.710074) (xy 78.889375 72.489513) - (xy 78.93595 72.255367) (xy 78.93595 72.016633) (xy 78.889375 71.782487) (xy 78.798016 71.561926) (xy 78.665383 71.363427) - (xy 78.496573 71.194617) (xy 78.298074 71.061984) (xy 78.077513 70.970625) (xy 77.843367 70.92405) (xy 77.604633 70.92405) - (xy 77.370487 70.970625) (xy 77.149926 71.061984) (xy 76.951427 71.194617) (xy 76.782617 71.363427) (xy 76.649984 71.561926) - (xy 76.558625 71.782487) (xy 76.51205 72.016633) (xy 76.51205 72.255367) (xy 76.558625 72.489513) (xy 76.649984 72.710074) - (xy 76.782617 72.908573) (xy 76.951427 73.077383) (xy 77.053596 73.14565) (xy 72.549075 73.14565) (xy 72.560016 73.125182) - (xy 72.580713 73.056955) (xy 72.587701 72.986) (xy 72.587701 71.286) (xy 72.580713 71.215045) (xy 72.560016 71.146818) - (xy 72.526406 71.083939) (xy 72.481175 71.028825) (xy 72.426061 70.983594) (xy 72.363182 70.949984) (xy 72.294955 70.929287) - (xy 72.224 70.922299) (xy 70.524 70.922299) (xy 70.453045 70.929287) (xy 70.384818 70.949984) (xy 70.321939 70.983594) - (xy 70.266825 71.028825) (xy 70.221594 71.083939) (xy 70.187984 71.146818) (xy 70.167287 71.215045) (xy 70.160299 71.286) - (xy 70.160299 72.986) (xy 70.167287 73.056955) (xy 70.187984 73.125182) (xy 70.198925 73.14565) (xy 70.009075 73.14565) - (xy 70.020016 73.125182) (xy 70.040713 73.056955) (xy 70.047701 72.986) (xy 70.047701 71.286) (xy 70.040713 71.215045) + (xy 153.12615 73.62615) (xy 53.87385 73.62615) (xy 53.87385 71.286) (xy 67.620299 71.286) (xy 67.620299 72.986) + (xy 67.627287 73.056955) (xy 67.647984 73.125182) (xy 67.681594 73.188061) (xy 67.726825 73.243175) (xy 67.781939 73.288406) + (xy 67.844818 73.322016) (xy 67.913045 73.342713) (xy 67.984 73.349701) (xy 69.684 73.349701) (xy 69.754955 73.342713) + (xy 69.823182 73.322016) (xy 69.886061 73.288406) (xy 69.941175 73.243175) (xy 69.986406 73.188061) (xy 70.020016 73.125182) + (xy 70.040713 73.056955) (xy 70.047701 72.986) (xy 70.047701 71.286) (xy 70.160299 71.286) (xy 70.160299 72.986) + (xy 70.167287 73.056955) (xy 70.187984 73.125182) (xy 70.221594 73.188061) (xy 70.266825 73.243175) (xy 70.321939 73.288406) + (xy 70.384818 73.322016) (xy 70.453045 73.342713) (xy 70.524 73.349701) (xy 72.224 73.349701) (xy 72.294955 73.342713) + (xy 72.363182 73.322016) (xy 72.426061 73.288406) (xy 72.481175 73.243175) (xy 72.526406 73.188061) (xy 72.560016 73.125182) + (xy 72.580713 73.056955) (xy 72.587701 72.986) (xy 72.587701 72.136) (xy 76.506186 72.136) (xy 76.529586 72.373584) + (xy 76.598887 72.602037) (xy 76.711425 72.812581) (xy 76.862875 72.997125) (xy 77.047419 73.148575) (xy 77.257963 73.261113) + (xy 77.486416 73.330414) (xy 77.664462 73.34795) (xy 77.783538 73.34795) (xy 77.961584 73.330414) (xy 78.190037 73.261113) + (xy 78.400581 73.148575) (xy 78.585125 72.997125) (xy 78.736575 72.812581) (xy 78.849113 72.602037) (xy 78.918414 72.373584) + (xy 78.941814 72.136) (xy 79.046186 72.136) (xy 79.069586 72.373584) (xy 79.138887 72.602037) (xy 79.251425 72.812581) + (xy 79.402875 72.997125) (xy 79.587419 73.148575) (xy 79.797963 73.261113) (xy 80.026416 73.330414) (xy 80.204462 73.34795) + (xy 80.323538 73.34795) (xy 80.501584 73.330414) (xy 80.730037 73.261113) (xy 80.940581 73.148575) (xy 81.125125 72.997125) + (xy 81.276575 72.812581) (xy 81.389113 72.602037) (xy 81.458414 72.373584) (xy 81.481814 72.136) (xy 81.586186 72.136) + (xy 81.609586 72.373584) (xy 81.678887 72.602037) (xy 81.791425 72.812581) (xy 81.942875 72.997125) (xy 82.127419 73.148575) + (xy 82.337963 73.261113) (xy 82.566416 73.330414) (xy 82.744462 73.34795) (xy 82.863538 73.34795) (xy 83.041584 73.330414) + (xy 83.270037 73.261113) (xy 83.480581 73.148575) (xy 83.665125 72.997125) (xy 83.816575 72.812581) (xy 83.929113 72.602037) + (xy 83.998414 72.373584) (xy 84.021814 72.136) (xy 84.126186 72.136) (xy 84.149586 72.373584) (xy 84.218887 72.602037) + (xy 84.331425 72.812581) (xy 84.482875 72.997125) (xy 84.667419 73.148575) (xy 84.877963 73.261113) (xy 85.106416 73.330414) + (xy 85.284462 73.34795) (xy 85.403538 73.34795) (xy 85.581584 73.330414) (xy 85.810037 73.261113) (xy 86.020581 73.148575) + (xy 86.205125 72.997125) (xy 86.356575 72.812581) (xy 86.469113 72.602037) (xy 86.538414 72.373584) (xy 86.561814 72.136) + (xy 86.666186 72.136) (xy 86.689586 72.373584) (xy 86.758887 72.602037) (xy 86.871425 72.812581) (xy 87.022875 72.997125) + (xy 87.207419 73.148575) (xy 87.417963 73.261113) (xy 87.646416 73.330414) (xy 87.824462 73.34795) (xy 87.943538 73.34795) + (xy 88.121584 73.330414) (xy 88.350037 73.261113) (xy 88.560581 73.148575) (xy 88.745125 72.997125) (xy 88.896575 72.812581) + (xy 89.009113 72.602037) (xy 89.078414 72.373584) (xy 89.101814 72.136) (xy 89.206186 72.136) (xy 89.229586 72.373584) + (xy 89.298887 72.602037) (xy 89.411425 72.812581) (xy 89.562875 72.997125) (xy 89.747419 73.148575) (xy 89.957963 73.261113) + (xy 90.186416 73.330414) (xy 90.364462 73.34795) (xy 90.483538 73.34795) (xy 90.661584 73.330414) (xy 90.890037 73.261113) + (xy 91.100581 73.148575) (xy 91.285125 72.997125) (xy 91.436575 72.812581) (xy 91.549113 72.602037) (xy 91.618414 72.373584) + (xy 91.641814 72.136) (xy 91.746186 72.136) (xy 91.769586 72.373584) (xy 91.838887 72.602037) (xy 91.951425 72.812581) + (xy 92.102875 72.997125) (xy 92.287419 73.148575) (xy 92.497963 73.261113) (xy 92.726416 73.330414) (xy 92.904462 73.34795) + (xy 93.023538 73.34795) (xy 93.201584 73.330414) (xy 93.430037 73.261113) (xy 93.640581 73.148575) (xy 93.825125 72.997125) + (xy 93.976575 72.812581) (xy 94.089113 72.602037) (xy 94.158414 72.373584) (xy 94.181814 72.136) (xy 94.158414 71.898416) + (xy 94.089113 71.669963) (xy 93.976575 71.459419) (xy 93.834255 71.286) (xy 94.290299 71.286) (xy 94.290299 72.986) + (xy 94.297287 73.056955) (xy 94.317984 73.125182) (xy 94.351594 73.188061) (xy 94.396825 73.243175) (xy 94.451939 73.288406) + (xy 94.514818 73.322016) (xy 94.583045 73.342713) (xy 94.654 73.349701) (xy 96.354 73.349701) (xy 96.424955 73.342713) + (xy 96.493182 73.322016) (xy 96.556061 73.288406) (xy 96.611175 73.243175) (xy 96.656406 73.188061) (xy 96.690016 73.125182) + (xy 96.710713 73.056955) (xy 96.717701 72.986) (xy 96.717701 71.286) (xy 100.132299 71.286) (xy 100.132299 72.986) + (xy 100.139287 73.056955) (xy 100.159984 73.125182) (xy 100.193594 73.188061) (xy 100.238825 73.243175) (xy 100.293939 73.288406) + (xy 100.356818 73.322016) (xy 100.425045 73.342713) (xy 100.496 73.349701) (xy 102.196 73.349701) (xy 102.266955 73.342713) + (xy 102.335182 73.322016) (xy 102.398061 73.288406) (xy 102.453175 73.243175) (xy 102.498406 73.188061) (xy 102.532016 73.125182) + (xy 102.552713 73.056955) (xy 102.559701 72.986) (xy 102.559701 71.286) (xy 106.482299 71.286) (xy 106.482299 72.986) + (xy 106.489287 73.056955) (xy 106.509984 73.125182) (xy 106.543594 73.188061) (xy 106.588825 73.243175) (xy 106.643939 73.288406) + (xy 106.706818 73.322016) (xy 106.775045 73.342713) (xy 106.846 73.349701) (xy 108.546 73.349701) (xy 108.616955 73.342713) + (xy 108.685182 73.322016) (xy 108.748061 73.288406) (xy 108.803175 73.243175) (xy 108.848406 73.188061) (xy 108.882016 73.125182) + (xy 108.902713 73.056955) (xy 108.909701 72.986) (xy 108.909701 71.286) (xy 109.022299 71.286) (xy 109.022299 72.986) + (xy 109.029287 73.056955) (xy 109.049984 73.125182) (xy 109.083594 73.188061) (xy 109.128825 73.243175) (xy 109.183939 73.288406) + (xy 109.246818 73.322016) (xy 109.315045 73.342713) (xy 109.386 73.349701) (xy 111.086 73.349701) (xy 111.156955 73.342713) + (xy 111.225182 73.322016) (xy 111.288061 73.288406) (xy 111.343175 73.243175) (xy 111.388406 73.188061) (xy 111.422016 73.125182) + (xy 111.442713 73.056955) (xy 111.449701 72.986) (xy 111.449701 72.136) (xy 111.558186 72.136) (xy 111.581586 72.373584) + (xy 111.650887 72.602037) (xy 111.763425 72.812581) (xy 111.914875 72.997125) (xy 112.099419 73.148575) (xy 112.309963 73.261113) + (xy 112.538416 73.330414) (xy 112.716462 73.34795) (xy 112.835538 73.34795) (xy 113.013584 73.330414) (xy 113.242037 73.261113) + (xy 113.452581 73.148575) (xy 113.637125 72.997125) (xy 113.788575 72.812581) (xy 113.901113 72.602037) (xy 113.970414 72.373584) + (xy 113.993814 72.136) (xy 114.098186 72.136) (xy 114.121586 72.373584) (xy 114.190887 72.602037) (xy 114.303425 72.812581) + (xy 114.454875 72.997125) (xy 114.639419 73.148575) (xy 114.849963 73.261113) (xy 115.078416 73.330414) (xy 115.256462 73.34795) + (xy 115.375538 73.34795) (xy 115.553584 73.330414) (xy 115.782037 73.261113) (xy 115.992581 73.148575) (xy 116.177125 72.997125) + (xy 116.328575 72.812581) (xy 116.441113 72.602037) (xy 116.510414 72.373584) (xy 116.533814 72.136) (xy 116.638186 72.136) + (xy 116.661586 72.373584) (xy 116.730887 72.602037) (xy 116.843425 72.812581) (xy 116.994875 72.997125) (xy 117.179419 73.148575) + (xy 117.389963 73.261113) (xy 117.618416 73.330414) (xy 117.796462 73.34795) (xy 117.915538 73.34795) (xy 118.093584 73.330414) + (xy 118.322037 73.261113) (xy 118.532581 73.148575) (xy 118.717125 72.997125) (xy 118.868575 72.812581) (xy 118.981113 72.602037) + (xy 119.050414 72.373584) (xy 119.073814 72.136) (xy 119.178186 72.136) (xy 119.201586 72.373584) (xy 119.270887 72.602037) + (xy 119.383425 72.812581) (xy 119.534875 72.997125) (xy 119.719419 73.148575) (xy 119.929963 73.261113) (xy 120.158416 73.330414) + (xy 120.336462 73.34795) (xy 120.455538 73.34795) (xy 120.633584 73.330414) (xy 120.862037 73.261113) (xy 121.072581 73.148575) + (xy 121.257125 72.997125) (xy 121.408575 72.812581) (xy 121.521113 72.602037) (xy 121.590414 72.373584) (xy 121.613814 72.136) + (xy 121.718186 72.136) (xy 121.741586 72.373584) (xy 121.810887 72.602037) (xy 121.923425 72.812581) (xy 122.074875 72.997125) + (xy 122.259419 73.148575) (xy 122.469963 73.261113) (xy 122.698416 73.330414) (xy 122.876462 73.34795) (xy 122.995538 73.34795) + (xy 123.173584 73.330414) (xy 123.402037 73.261113) (xy 123.612581 73.148575) (xy 123.797125 72.997125) (xy 123.948575 72.812581) + (xy 124.061113 72.602037) (xy 124.130414 72.373584) (xy 124.153814 72.136) (xy 124.258186 72.136) (xy 124.281586 72.373584) + (xy 124.350887 72.602037) (xy 124.463425 72.812581) (xy 124.614875 72.997125) (xy 124.799419 73.148575) (xy 125.009963 73.261113) + (xy 125.238416 73.330414) (xy 125.416462 73.34795) (xy 125.535538 73.34795) (xy 125.713584 73.330414) (xy 125.942037 73.261113) + (xy 126.152581 73.148575) (xy 126.337125 72.997125) (xy 126.488575 72.812581) (xy 126.601113 72.602037) (xy 126.670414 72.373584) + (xy 126.693814 72.136) (xy 126.798186 72.136) (xy 126.821586 72.373584) (xy 126.890887 72.602037) (xy 127.003425 72.812581) + (xy 127.154875 72.997125) (xy 127.339419 73.148575) (xy 127.549963 73.261113) (xy 127.778416 73.330414) (xy 127.956462 73.34795) + (xy 128.075538 73.34795) (xy 128.253584 73.330414) (xy 128.482037 73.261113) (xy 128.692581 73.148575) (xy 128.877125 72.997125) + (xy 129.028575 72.812581) (xy 129.141113 72.602037) (xy 129.210414 72.373584) (xy 129.233814 72.136) (xy 129.210414 71.898416) + (xy 129.141113 71.669963) (xy 129.028575 71.459419) (xy 128.886255 71.286) (xy 129.342299 71.286) (xy 129.342299 72.986) + (xy 129.349287 73.056955) (xy 129.369984 73.125182) (xy 129.403594 73.188061) (xy 129.448825 73.243175) (xy 129.503939 73.288406) + (xy 129.566818 73.322016) (xy 129.635045 73.342713) (xy 129.706 73.349701) (xy 131.406 73.349701) (xy 131.476955 73.342713) + (xy 131.545182 73.322016) (xy 131.608061 73.288406) (xy 131.663175 73.243175) (xy 131.708406 73.188061) (xy 131.742016 73.125182) + (xy 131.762713 73.056955) (xy 131.769701 72.986) (xy 131.769701 72.136) (xy 133.402186 72.136) (xy 133.425586 72.373584) + (xy 133.494887 72.602037) (xy 133.607425 72.812581) (xy 133.758875 72.997125) (xy 133.943419 73.148575) (xy 134.153963 73.261113) + (xy 134.382416 73.330414) (xy 134.560462 73.34795) (xy 134.679538 73.34795) (xy 134.857584 73.330414) (xy 135.086037 73.261113) + (xy 135.296581 73.148575) (xy 135.481125 72.997125) (xy 135.632575 72.812581) (xy 135.745113 72.602037) (xy 135.814414 72.373584) + (xy 135.837814 72.136) (xy 135.942186 72.136) (xy 135.965586 72.373584) (xy 136.034887 72.602037) (xy 136.147425 72.812581) + (xy 136.298875 72.997125) (xy 136.483419 73.148575) (xy 136.693963 73.261113) (xy 136.922416 73.330414) (xy 137.100462 73.34795) + (xy 137.219538 73.34795) (xy 137.397584 73.330414) (xy 137.626037 73.261113) (xy 137.836581 73.148575) (xy 138.021125 72.997125) + (xy 138.172575 72.812581) (xy 138.285113 72.602037) (xy 138.354414 72.373584) (xy 138.377814 72.136) (xy 138.354414 71.898416) + (xy 138.285113 71.669963) (xy 138.172575 71.459419) (xy 138.030255 71.286) (xy 138.486299 71.286) (xy 138.486299 72.986) + (xy 138.493287 73.056955) (xy 138.513984 73.125182) (xy 138.547594 73.188061) (xy 138.592825 73.243175) (xy 138.647939 73.288406) + (xy 138.710818 73.322016) (xy 138.779045 73.342713) (xy 138.85 73.349701) (xy 140.55 73.349701) (xy 140.620955 73.342713) + (xy 140.689182 73.322016) (xy 140.752061 73.288406) (xy 140.807175 73.243175) (xy 140.852406 73.188061) (xy 140.886016 73.125182) + (xy 140.906713 73.056955) (xy 140.913701 72.986) (xy 140.913701 71.462) (xy 144.96207 71.462) (xy 144.973963 71.582747) + (xy 145.009183 71.698854) (xy 145.066379 71.805859) (xy 145.14335 71.89965) (xy 145.237141 71.976621) (xy 145.344146 72.033817) + (xy 145.460253 72.069037) (xy 145.581 72.08093) (xy 146.130963 72.07795) (xy 146.28495 71.923963) (xy 146.28495 70.75805) + (xy 146.57705 70.75805) (xy 146.57705 71.923963) (xy 146.731037 72.07795) (xy 147.281 72.08093) (xy 147.401747 72.069037) + (xy 147.517854 72.033817) (xy 147.624859 71.976621) (xy 147.71865 71.89965) (xy 147.795621 71.805859) (xy 147.852817 71.698854) + (xy 147.888037 71.582747) (xy 147.89993 71.462) (xy 147.89695 70.912037) (xy 147.742963 70.75805) (xy 146.57705 70.75805) + (xy 146.28495 70.75805) (xy 145.119037 70.75805) (xy 144.96505 70.912037) (xy 144.96207 71.462) (xy 140.913701 71.462) + (xy 140.913701 71.286) (xy 140.906713 71.215045) (xy 140.886016 71.146818) (xy 140.852406 71.083939) (xy 140.807175 71.028825) + (xy 140.752061 70.983594) (xy 140.689182 70.949984) (xy 140.620955 70.929287) (xy 140.55 70.922299) (xy 138.85 70.922299) + (xy 138.779045 70.929287) (xy 138.710818 70.949984) (xy 138.647939 70.983594) (xy 138.592825 71.028825) (xy 138.547594 71.083939) + (xy 138.513984 71.146818) (xy 138.493287 71.215045) (xy 138.486299 71.286) (xy 138.030255 71.286) (xy 138.021125 71.274875) + (xy 137.836581 71.123425) (xy 137.626037 71.010887) (xy 137.397584 70.941586) (xy 137.219538 70.92405) (xy 137.100462 70.92405) + (xy 136.922416 70.941586) (xy 136.693963 71.010887) (xy 136.483419 71.123425) (xy 136.298875 71.274875) (xy 136.147425 71.459419) + (xy 136.034887 71.669963) (xy 135.965586 71.898416) (xy 135.942186 72.136) (xy 135.837814 72.136) (xy 135.814414 71.898416) + (xy 135.745113 71.669963) (xy 135.632575 71.459419) (xy 135.481125 71.274875) (xy 135.296581 71.123425) (xy 135.086037 71.010887) + (xy 134.857584 70.941586) (xy 134.679538 70.92405) (xy 134.560462 70.92405) (xy 134.382416 70.941586) (xy 134.153963 71.010887) + (xy 133.943419 71.123425) (xy 133.758875 71.274875) (xy 133.607425 71.459419) (xy 133.494887 71.669963) (xy 133.425586 71.898416) + (xy 133.402186 72.136) (xy 131.769701 72.136) (xy 131.769701 71.286) (xy 131.762713 71.215045) (xy 131.742016 71.146818) + (xy 131.708406 71.083939) (xy 131.663175 71.028825) (xy 131.608061 70.983594) (xy 131.545182 70.949984) (xy 131.476955 70.929287) + (xy 131.406 70.922299) (xy 129.706 70.922299) (xy 129.635045 70.929287) (xy 129.566818 70.949984) (xy 129.503939 70.983594) + (xy 129.448825 71.028825) (xy 129.403594 71.083939) (xy 129.369984 71.146818) (xy 129.349287 71.215045) (xy 129.342299 71.286) + (xy 128.886255 71.286) (xy 128.877125 71.274875) (xy 128.692581 71.123425) (xy 128.482037 71.010887) (xy 128.253584 70.941586) + (xy 128.075538 70.92405) (xy 127.956462 70.92405) (xy 127.778416 70.941586) (xy 127.549963 71.010887) (xy 127.339419 71.123425) + (xy 127.154875 71.274875) (xy 127.003425 71.459419) (xy 126.890887 71.669963) (xy 126.821586 71.898416) (xy 126.798186 72.136) + (xy 126.693814 72.136) (xy 126.670414 71.898416) (xy 126.601113 71.669963) (xy 126.488575 71.459419) (xy 126.337125 71.274875) + (xy 126.152581 71.123425) (xy 125.942037 71.010887) (xy 125.713584 70.941586) (xy 125.535538 70.92405) (xy 125.416462 70.92405) + (xy 125.238416 70.941586) (xy 125.009963 71.010887) (xy 124.799419 71.123425) (xy 124.614875 71.274875) (xy 124.463425 71.459419) + (xy 124.350887 71.669963) (xy 124.281586 71.898416) (xy 124.258186 72.136) (xy 124.153814 72.136) (xy 124.130414 71.898416) + (xy 124.061113 71.669963) (xy 123.948575 71.459419) (xy 123.797125 71.274875) (xy 123.612581 71.123425) (xy 123.402037 71.010887) + (xy 123.173584 70.941586) (xy 122.995538 70.92405) (xy 122.876462 70.92405) (xy 122.698416 70.941586) (xy 122.469963 71.010887) + (xy 122.259419 71.123425) (xy 122.074875 71.274875) (xy 121.923425 71.459419) (xy 121.810887 71.669963) (xy 121.741586 71.898416) + (xy 121.718186 72.136) (xy 121.613814 72.136) (xy 121.590414 71.898416) (xy 121.521113 71.669963) (xy 121.408575 71.459419) + (xy 121.257125 71.274875) (xy 121.072581 71.123425) (xy 120.862037 71.010887) (xy 120.633584 70.941586) (xy 120.455538 70.92405) + (xy 120.336462 70.92405) (xy 120.158416 70.941586) (xy 119.929963 71.010887) (xy 119.719419 71.123425) (xy 119.534875 71.274875) + (xy 119.383425 71.459419) (xy 119.270887 71.669963) (xy 119.201586 71.898416) (xy 119.178186 72.136) (xy 119.073814 72.136) + (xy 119.050414 71.898416) (xy 118.981113 71.669963) (xy 118.868575 71.459419) (xy 118.717125 71.274875) (xy 118.532581 71.123425) + (xy 118.322037 71.010887) (xy 118.093584 70.941586) (xy 117.915538 70.92405) (xy 117.796462 70.92405) (xy 117.618416 70.941586) + (xy 117.389963 71.010887) (xy 117.179419 71.123425) (xy 116.994875 71.274875) (xy 116.843425 71.459419) (xy 116.730887 71.669963) + (xy 116.661586 71.898416) (xy 116.638186 72.136) (xy 116.533814 72.136) (xy 116.510414 71.898416) (xy 116.441113 71.669963) + (xy 116.328575 71.459419) (xy 116.177125 71.274875) (xy 115.992581 71.123425) (xy 115.782037 71.010887) (xy 115.553584 70.941586) + (xy 115.375538 70.92405) (xy 115.256462 70.92405) (xy 115.078416 70.941586) (xy 114.849963 71.010887) (xy 114.639419 71.123425) + (xy 114.454875 71.274875) (xy 114.303425 71.459419) (xy 114.190887 71.669963) (xy 114.121586 71.898416) (xy 114.098186 72.136) + (xy 113.993814 72.136) (xy 113.970414 71.898416) (xy 113.901113 71.669963) (xy 113.788575 71.459419) (xy 113.637125 71.274875) + (xy 113.452581 71.123425) (xy 113.242037 71.010887) (xy 113.013584 70.941586) (xy 112.835538 70.92405) (xy 112.716462 70.92405) + (xy 112.538416 70.941586) (xy 112.309963 71.010887) (xy 112.099419 71.123425) (xy 111.914875 71.274875) (xy 111.763425 71.459419) + (xy 111.650887 71.669963) (xy 111.581586 71.898416) (xy 111.558186 72.136) (xy 111.449701 72.136) (xy 111.449701 71.286) + (xy 111.442713 71.215045) (xy 111.422016 71.146818) (xy 111.388406 71.083939) (xy 111.343175 71.028825) (xy 111.288061 70.983594) + (xy 111.225182 70.949984) (xy 111.156955 70.929287) (xy 111.086 70.922299) (xy 109.386 70.922299) (xy 109.315045 70.929287) + (xy 109.246818 70.949984) (xy 109.183939 70.983594) (xy 109.128825 71.028825) (xy 109.083594 71.083939) (xy 109.049984 71.146818) + (xy 109.029287 71.215045) (xy 109.022299 71.286) (xy 108.909701 71.286) (xy 108.902713 71.215045) (xy 108.882016 71.146818) + (xy 108.848406 71.083939) (xy 108.803175 71.028825) (xy 108.748061 70.983594) (xy 108.685182 70.949984) (xy 108.616955 70.929287) + (xy 108.546 70.922299) (xy 106.846 70.922299) (xy 106.775045 70.929287) (xy 106.706818 70.949984) (xy 106.643939 70.983594) + (xy 106.588825 71.028825) (xy 106.543594 71.083939) (xy 106.509984 71.146818) (xy 106.489287 71.215045) (xy 106.482299 71.286) + (xy 102.559701 71.286) (xy 102.552713 71.215045) (xy 102.532016 71.146818) (xy 102.498406 71.083939) (xy 102.453175 71.028825) + (xy 102.398061 70.983594) (xy 102.335182 70.949984) (xy 102.266955 70.929287) (xy 102.196 70.922299) (xy 100.496 70.922299) + (xy 100.425045 70.929287) (xy 100.356818 70.949984) (xy 100.293939 70.983594) (xy 100.238825 71.028825) (xy 100.193594 71.083939) + (xy 100.159984 71.146818) (xy 100.139287 71.215045) (xy 100.132299 71.286) (xy 96.717701 71.286) (xy 96.710713 71.215045) + (xy 96.690016 71.146818) (xy 96.656406 71.083939) (xy 96.611175 71.028825) (xy 96.556061 70.983594) (xy 96.493182 70.949984) + (xy 96.424955 70.929287) (xy 96.354 70.922299) (xy 94.654 70.922299) (xy 94.583045 70.929287) (xy 94.514818 70.949984) + (xy 94.451939 70.983594) (xy 94.396825 71.028825) (xy 94.351594 71.083939) (xy 94.317984 71.146818) (xy 94.297287 71.215045) + (xy 94.290299 71.286) (xy 93.834255 71.286) (xy 93.825125 71.274875) (xy 93.640581 71.123425) (xy 93.430037 71.010887) + (xy 93.201584 70.941586) (xy 93.023538 70.92405) (xy 92.904462 70.92405) (xy 92.726416 70.941586) (xy 92.497963 71.010887) + (xy 92.287419 71.123425) (xy 92.102875 71.274875) (xy 91.951425 71.459419) (xy 91.838887 71.669963) (xy 91.769586 71.898416) + (xy 91.746186 72.136) (xy 91.641814 72.136) (xy 91.618414 71.898416) (xy 91.549113 71.669963) (xy 91.436575 71.459419) + (xy 91.285125 71.274875) (xy 91.100581 71.123425) (xy 90.890037 71.010887) (xy 90.661584 70.941586) (xy 90.483538 70.92405) + (xy 90.364462 70.92405) (xy 90.186416 70.941586) (xy 89.957963 71.010887) (xy 89.747419 71.123425) (xy 89.562875 71.274875) + (xy 89.411425 71.459419) (xy 89.298887 71.669963) (xy 89.229586 71.898416) (xy 89.206186 72.136) (xy 89.101814 72.136) + (xy 89.078414 71.898416) (xy 89.009113 71.669963) (xy 88.896575 71.459419) (xy 88.745125 71.274875) (xy 88.560581 71.123425) + (xy 88.350037 71.010887) (xy 88.121584 70.941586) (xy 87.943538 70.92405) (xy 87.824462 70.92405) (xy 87.646416 70.941586) + (xy 87.417963 71.010887) (xy 87.207419 71.123425) (xy 87.022875 71.274875) (xy 86.871425 71.459419) (xy 86.758887 71.669963) + (xy 86.689586 71.898416) (xy 86.666186 72.136) (xy 86.561814 72.136) (xy 86.538414 71.898416) (xy 86.469113 71.669963) + (xy 86.356575 71.459419) (xy 86.205125 71.274875) (xy 86.020581 71.123425) (xy 85.810037 71.010887) (xy 85.581584 70.941586) + (xy 85.403538 70.92405) (xy 85.284462 70.92405) (xy 85.106416 70.941586) (xy 84.877963 71.010887) (xy 84.667419 71.123425) + (xy 84.482875 71.274875) (xy 84.331425 71.459419) (xy 84.218887 71.669963) (xy 84.149586 71.898416) (xy 84.126186 72.136) + (xy 84.021814 72.136) (xy 83.998414 71.898416) (xy 83.929113 71.669963) (xy 83.816575 71.459419) (xy 83.665125 71.274875) + (xy 83.480581 71.123425) (xy 83.270037 71.010887) (xy 83.041584 70.941586) (xy 82.863538 70.92405) (xy 82.744462 70.92405) + (xy 82.566416 70.941586) (xy 82.337963 71.010887) (xy 82.127419 71.123425) (xy 81.942875 71.274875) (xy 81.791425 71.459419) + (xy 81.678887 71.669963) (xy 81.609586 71.898416) (xy 81.586186 72.136) (xy 81.481814 72.136) (xy 81.458414 71.898416) + (xy 81.389113 71.669963) (xy 81.276575 71.459419) (xy 81.125125 71.274875) (xy 80.940581 71.123425) (xy 80.730037 71.010887) + (xy 80.501584 70.941586) (xy 80.323538 70.92405) (xy 80.204462 70.92405) (xy 80.026416 70.941586) (xy 79.797963 71.010887) + (xy 79.587419 71.123425) (xy 79.402875 71.274875) (xy 79.251425 71.459419) (xy 79.138887 71.669963) (xy 79.069586 71.898416) + (xy 79.046186 72.136) (xy 78.941814 72.136) (xy 78.918414 71.898416) (xy 78.849113 71.669963) (xy 78.736575 71.459419) + (xy 78.585125 71.274875) (xy 78.400581 71.123425) (xy 78.190037 71.010887) (xy 77.961584 70.941586) (xy 77.783538 70.92405) + (xy 77.664462 70.92405) (xy 77.486416 70.941586) (xy 77.257963 71.010887) (xy 77.047419 71.123425) (xy 76.862875 71.274875) + (xy 76.711425 71.459419) (xy 76.598887 71.669963) (xy 76.529586 71.898416) (xy 76.506186 72.136) (xy 72.587701 72.136) + (xy 72.587701 71.286) (xy 72.580713 71.215045) (xy 72.560016 71.146818) (xy 72.526406 71.083939) (xy 72.481175 71.028825) + (xy 72.426061 70.983594) (xy 72.363182 70.949984) (xy 72.294955 70.929287) (xy 72.224 70.922299) (xy 70.524 70.922299) + (xy 70.453045 70.929287) (xy 70.384818 70.949984) (xy 70.321939 70.983594) (xy 70.266825 71.028825) (xy 70.221594 71.083939) + (xy 70.187984 71.146818) (xy 70.167287 71.215045) (xy 70.160299 71.286) (xy 70.047701 71.286) (xy 70.040713 71.215045) (xy 70.020016 71.146818) (xy 69.986406 71.083939) (xy 69.941175 71.028825) (xy 69.886061 70.983594) (xy 69.823182 70.949984) (xy 69.754955 70.929287) (xy 69.684 70.922299) (xy 67.984 70.922299) (xy 67.913045 70.929287) (xy 67.844818 70.949984) (xy 67.781939 70.983594) (xy 67.726825 71.028825) (xy 67.681594 71.083939) (xy 67.647984 71.146818) (xy 67.627287 71.215045) - (xy 67.620299 71.286) (xy 67.620299 72.986) (xy 67.627287 73.056955) (xy 67.647984 73.125182) (xy 67.658925 73.14565) - (xy 51.31435 73.14565) (xy 51.31435 61.994217) (xy 53.48605 61.994217) (xy 53.48605 62.465783) (xy 53.578048 62.928289) - (xy 53.758509 63.36396) (xy 54.020498 63.756054) (xy 54.353946 64.089502) (xy 54.74604 64.351491) (xy 55.181711 64.531952) - (xy 55.644217 64.62395) (xy 56.115783 64.62395) (xy 56.578289 64.531952) (xy 57.01396 64.351491) (xy 57.406054 64.089502) - (xy 57.739502 63.756054) (xy 58.001491 63.36396) (xy 58.181952 62.928289) (xy 58.27395 62.465783) (xy 58.27395 61.994217) - (xy 58.181952 61.531711) (xy 58.119112 61.38) (xy 67.620299 61.38) (xy 67.620299 63.08) (xy 67.627287 63.150955) - (xy 67.647984 63.219182) (xy 67.681594 63.282061) (xy 67.726825 63.337175) (xy 67.781939 63.382406) (xy 67.844818 63.416016) - (xy 67.913045 63.436713) (xy 67.984 63.443701) (xy 69.176617 63.443701) (xy 69.289215 63.556299) (xy 67.984 63.556299) - (xy 67.913045 63.563287) (xy 67.844818 63.583984) (xy 67.781939 63.617594) (xy 67.726825 63.662825) (xy 67.681594 63.717939) - (xy 67.647984 63.780818) (xy 67.627287 63.849045) (xy 67.620299 63.92) (xy 67.620299 65.62) (xy 67.627287 65.690955) - (xy 67.647984 65.759182) (xy 67.681594 65.822061) (xy 67.726825 65.877175) (xy 67.781939 65.922406) (xy 67.844818 65.956016) - (xy 67.913045 65.976713) (xy 67.984 65.983701) (xy 69.61505 65.983701) (xy 69.61505 66.927865) (xy 68.41986 68.123057) - (xy 68.396351 68.14235) (xy 68.356302 68.191151) (xy 68.319379 68.236142) (xy 68.262184 68.343146) (xy 68.250307 68.382299) - (xy 67.984 68.382299) (xy 67.913045 68.389287) (xy 67.844818 68.409984) (xy 67.781939 68.443594) (xy 67.726825 68.488825) - (xy 67.681594 68.543939) (xy 67.647984 68.606818) (xy 67.627287 68.675045) (xy 67.620299 68.746) (xy 67.620299 70.446) - (xy 67.627287 70.516955) (xy 67.647984 70.585182) (xy 67.681594 70.648061) (xy 67.726825 70.703175) (xy 67.781939 70.748406) - (xy 67.844818 70.782016) (xy 67.913045 70.802713) (xy 67.984 70.809701) (xy 69.684 70.809701) (xy 69.754955 70.802713) - (xy 69.823182 70.782016) (xy 69.886061 70.748406) (xy 69.941175 70.703175) (xy 69.986406 70.648061) (xy 70.020016 70.585182) - (xy 70.040713 70.516955) (xy 70.047701 70.446) (xy 70.047701 68.746) (xy 70.040713 68.675045) (xy 70.020016 68.606818) - (xy 69.986406 68.543939) (xy 69.941175 68.488825) (xy 69.886061 68.443594) (xy 69.857015 68.428069) (xy 70.560935 67.72415) - (xy 70.61862 67.65386) (xy 70.675816 67.546855) (xy 70.711036 67.430748) (xy 70.72293 67.310001) (xy 70.711036 67.189254) - (xy 70.675816 67.073146) (xy 70.61862 66.966142) (xy 70.59295 66.934862) (xy 70.59295 65.983701) (xy 72.224 65.983701) - (xy 72.294955 65.976713) (xy 72.363182 65.956016) (xy 72.426061 65.922406) (xy 72.481175 65.877175) (xy 72.526406 65.822061) - (xy 72.53605 65.804018) (xy 72.53605 66.800865) (xy 70.95986 68.377057) (xy 70.953472 68.382299) (xy 70.524 68.382299) - (xy 70.453045 68.389287) (xy 70.384818 68.409984) (xy 70.321939 68.443594) (xy 70.266825 68.488825) (xy 70.221594 68.543939) - (xy 70.187984 68.606818) (xy 70.167287 68.675045) (xy 70.160299 68.746) (xy 70.160299 70.446) (xy 70.167287 70.516955) - (xy 70.187984 70.585182) (xy 70.221594 70.648061) (xy 70.266825 70.703175) (xy 70.321939 70.748406) (xy 70.384818 70.782016) - (xy 70.453045 70.802713) (xy 70.524 70.809701) (xy 72.224 70.809701) (xy 72.294955 70.802713) (xy 72.363182 70.782016) - (xy 72.426061 70.748406) (xy 72.481175 70.703175) (xy 72.526406 70.648061) (xy 72.560016 70.585182) (xy 72.580713 70.516955) - (xy 72.587701 70.446) (xy 72.587701 68.746) (xy 72.580713 68.675045) (xy 72.560016 68.606818) (xy 72.52945 68.549634) - (xy 73.566147 67.512938) (xy 73.58965 67.49365) (xy 73.666621 67.399859) (xy 73.723817 67.292854) (xy 73.759037 67.176747) - (xy 73.76795 67.086255) (xy 73.76795 67.086254) (xy 73.77093 67.056) (xy 73.76795 67.025745) (xy 73.76795 64.038255) - (xy 73.77093 64.008) (xy 73.759037 63.887253) (xy 73.747447 63.849045) (xy 73.723817 63.771146) (xy 73.666621 63.664141) - (xy 73.58965 63.57035) (xy 73.566146 63.551061) (xy 72.587701 62.572617) (xy 72.587701 62.395382) (xy 75.344142 59.638942) - (xy 75.36765 59.61965) (xy 75.444621 59.525859) (xy 75.501817 59.418854) (xy 75.537037 59.302747) (xy 75.54595 59.212255) - (xy 75.54595 59.212254) (xy 75.54893 59.182) (xy 75.54595 59.151745) (xy 75.54595 58.3069) (xy 75.596443 58.382468) - (xy 75.726992 58.513017) (xy 75.880501 58.615589) (xy 76.051071 58.686242) (xy 76.232148 58.72226) (xy 76.416772 58.72226) - (xy 76.597849 58.686242) (xy 76.768419 58.615589) (xy 76.921928 58.513017) (xy 77.052477 58.382468) (xy 77.155049 58.228959) - (xy 77.225702 58.058389) (xy 77.235051 58.01139) (xy 77.23505 61.120725) (xy 77.149926 61.155984) (xy 76.951427 61.288617) - (xy 76.782617 61.457427) (xy 76.649984 61.655926) (xy 76.558625 61.876487) (xy 76.51205 62.110633) (xy 76.51205 62.349367) - (xy 76.558625 62.583513) (xy 76.649984 62.804074) (xy 76.782617 63.002573) (xy 76.951427 63.171383) (xy 77.149926 63.304016) - (xy 77.370487 63.395375) (xy 77.604633 63.44195) (xy 77.843367 63.44195) (xy 78.077513 63.395375) (xy 78.162636 63.360116) - (xy 78.505051 63.702531) (xy 78.505051 63.837095) (xy 78.496573 63.828617) (xy 78.298074 63.695984) (xy 78.077513 63.604625) - (xy 77.843367 63.55805) (xy 77.604633 63.55805) (xy 77.370487 63.604625) (xy 77.149926 63.695984) (xy 76.951427 63.828617) - (xy 76.782617 63.997427) (xy 76.649984 64.195926) (xy 76.558625 64.416487) (xy 76.51205 64.650633) (xy 76.51205 64.889367) - (xy 76.558625 65.123513) (xy 76.649984 65.344074) (xy 76.782617 65.542573) (xy 76.951427 65.711383) (xy 77.149926 65.844016) - (xy 77.370487 65.935375) (xy 77.604633 65.98195) (xy 77.843367 65.98195) (xy 78.077513 65.935375) (xy 78.298074 65.844016) - (xy 78.496573 65.711383) (xy 78.50505 65.702906) (xy 78.50505 65.83747) (xy 77.395237 66.947284) (xy 77.376589 66.962588) - (xy 77.361285 66.981236) (xy 77.36128 66.981241) (xy 77.315487 67.03704) (xy 77.276445 67.110084) (xy 77.270085 67.121982) - (xy 77.242126 67.214149) (xy 77.237512 67.260999) (xy 77.232686 67.31) (xy 77.235051 67.334013) (xy 77.23505 68.486724) - (xy 77.149926 68.521984) (xy 76.951427 68.654617) (xy 76.782617 68.823427) (xy 76.649984 69.021926) (xy 76.558625 69.242487) - (xy 76.51205 69.476633) (xy 76.51205 69.715367) (xy 76.558625 69.949513) (xy 76.649984 70.170074) (xy 76.782617 70.368573) - (xy 76.951427 70.537383) (xy 77.149926 70.670016) (xy 77.370487 70.761375) (xy 77.604633 70.80795) (xy 77.843367 70.80795) - (xy 78.077513 70.761375) (xy 78.298074 70.670016) (xy 78.496573 70.537383) (xy 78.665383 70.368573) (xy 78.798016 70.170074) - (xy 78.889375 69.949513) (xy 78.93595 69.715367) (xy 78.93595 69.476633) (xy 78.889375 69.242487) (xy 78.798016 69.021926) - (xy 78.665383 68.823427) (xy 78.496573 68.654617) (xy 78.298074 68.521984) (xy 78.21295 68.486725) (xy 78.21295 67.512529) - (xy 79.322764 66.402716) (xy 79.341412 66.387412) (xy 79.356716 66.368764) (xy 79.35672 66.36876) (xy 79.402513 66.312961) - (xy 79.447915 66.228019) (xy 79.447916 66.228018) (xy 79.475875 66.135851) (xy 79.48295 66.064014) (xy 79.48295 66.064004) - (xy 79.485314 66.040001) (xy 79.48295 66.015998) (xy 79.48295 65.702906) (xy 79.491427 65.711383) (xy 79.689926 65.844016) - (xy 79.910487 65.935375) (xy 80.144633 65.98195) (xy 80.383367 65.98195) (xy 80.617513 65.935375) (xy 80.838074 65.844016) - (xy 81.036573 65.711383) (xy 81.04505 65.702906) (xy 81.04505 65.83747) (xy 79.935237 66.947284) (xy 79.916589 66.962588) - (xy 79.901285 66.981236) (xy 79.90128 66.981241) (xy 79.855487 67.03704) (xy 79.816445 67.110084) (xy 79.810085 67.121982) - (xy 79.782126 67.214149) (xy 79.777512 67.260999) (xy 79.772686 67.31) (xy 79.775051 67.334013) (xy 79.77505 68.486724) - (xy 79.689926 68.521984) (xy 79.491427 68.654617) (xy 79.322617 68.823427) (xy 79.189984 69.021926) (xy 79.098625 69.242487) - (xy 79.05205 69.476633) (xy 79.05205 69.715367) (xy 79.098625 69.949513) (xy 79.189984 70.170074) (xy 79.322617 70.368573) - (xy 79.491427 70.537383) (xy 79.689926 70.670016) (xy 79.910487 70.761375) (xy 80.144633 70.80795) (xy 80.383367 70.80795) - (xy 80.617513 70.761375) (xy 80.838074 70.670016) (xy 81.036573 70.537383) (xy 81.205383 70.368573) (xy 81.338016 70.170074) - (xy 81.429375 69.949513) (xy 81.47595 69.715367) (xy 81.47595 69.476633) (xy 81.429375 69.242487) (xy 81.338016 69.021926) - (xy 81.205383 68.823427) (xy 81.036573 68.654617) (xy 80.838074 68.521984) (xy 80.75295 68.486725) (xy 80.75295 67.512529) - (xy 81.862764 66.402716) (xy 81.881412 66.387412) (xy 81.896716 66.368764) (xy 81.89672 66.36876) (xy 81.942513 66.312961) - (xy 81.987915 66.228019) (xy 81.987916 66.228018) (xy 82.015875 66.135851) (xy 82.02295 66.064014) (xy 82.02295 66.064004) - (xy 82.025314 66.040001) (xy 82.02295 66.015998) (xy 82.02295 65.702906) (xy 82.031427 65.711383) (xy 82.229926 65.844016) - (xy 82.450487 65.935375) (xy 82.684633 65.98195) (xy 82.923367 65.98195) (xy 83.157513 65.935375) (xy 83.378074 65.844016) - (xy 83.576573 65.711383) (xy 83.58505 65.702906) (xy 83.58505 66.09147) (xy 82.475237 67.201284) (xy 82.456589 67.216588) - (xy 82.441285 67.235236) (xy 82.44128 67.235241) (xy 82.395487 67.29104) (xy 82.371389 67.336125) (xy 82.350085 67.375982) - (xy 82.322126 67.468149) (xy 82.319184 67.498017) (xy 82.312686 67.564) (xy 82.315051 67.588013) (xy 82.315051 68.486724) - (xy 82.229926 68.521984) (xy 82.031427 68.654617) (xy 81.862617 68.823427) (xy 81.729984 69.021926) (xy 81.638625 69.242487) - (xy 81.59205 69.476633) (xy 81.59205 69.715367) (xy 81.638625 69.949513) (xy 81.729984 70.170074) (xy 81.862617 70.368573) - (xy 82.031427 70.537383) (xy 82.229926 70.670016) (xy 82.450487 70.761375) (xy 82.684633 70.80795) (xy 82.923367 70.80795) - (xy 83.157513 70.761375) (xy 83.378074 70.670016) (xy 83.576573 70.537383) (xy 83.745383 70.368573) (xy 83.878016 70.170074) - (xy 83.969375 69.949513) (xy 84.01595 69.715367) (xy 84.01595 69.476633) (xy 83.969375 69.242487) (xy 83.878016 69.021926) - (xy 83.745383 68.823427) (xy 83.576573 68.654617) (xy 83.378074 68.521984) (xy 83.29295 68.486725) (xy 83.29295 67.766529) - (xy 84.402764 66.656716) (xy 84.421412 66.641412) (xy 84.436716 66.622764) (xy 84.43672 66.62276) (xy 84.482513 66.566961) - (xy 84.506781 66.521558) (xy 84.527916 66.482018) (xy 84.555875 66.389851) (xy 84.56295 66.318014) (xy 84.56295 66.318004) - (xy 84.565314 66.294001) (xy 84.56295 66.269998) (xy 84.56295 65.702906) (xy 84.571427 65.711383) (xy 84.769926 65.844016) - (xy 84.990487 65.935375) (xy 85.224633 65.98195) (xy 85.463367 65.98195) (xy 85.697513 65.935375) (xy 85.918074 65.844016) - (xy 86.116573 65.711383) (xy 86.12505 65.702906) (xy 86.12505 66.34547) (xy 85.015237 67.455284) (xy 84.996589 67.470588) - (xy 84.981285 67.489236) (xy 84.98128 67.489241) (xy 84.935487 67.54504) (xy 84.915219 67.58296) (xy 84.890085 67.629982) - (xy 84.862126 67.722149) (xy 84.857695 67.767141) (xy 84.852686 67.818) (xy 84.855051 67.842013) (xy 84.855051 68.486724) - (xy 84.769926 68.521984) (xy 84.571427 68.654617) (xy 84.402617 68.823427) (xy 84.269984 69.021926) (xy 84.178625 69.242487) - (xy 84.13205 69.476633) (xy 84.13205 69.715367) (xy 84.178625 69.949513) (xy 84.269984 70.170074) (xy 84.402617 70.368573) - (xy 84.571427 70.537383) (xy 84.769926 70.670016) (xy 84.990487 70.761375) (xy 85.224633 70.80795) (xy 85.463367 70.80795) - (xy 85.697513 70.761375) (xy 85.918074 70.670016) (xy 86.116573 70.537383) (xy 86.285383 70.368573) (xy 86.418016 70.170074) - (xy 86.509375 69.949513) (xy 86.55595 69.715367) (xy 86.55595 69.476633) (xy 86.509375 69.242487) (xy 86.418016 69.021926) - (xy 86.285383 68.823427) (xy 86.116573 68.654617) (xy 85.918074 68.521984) (xy 85.83295 68.486725) (xy 85.83295 68.020529) - (xy 86.942764 66.910716) (xy 86.961412 66.895412) (xy 86.976716 66.876764) (xy 86.97672 66.87676) (xy 87.022513 66.820961) - (xy 87.067915 66.736019) (xy 87.067916 66.736018) (xy 87.095875 66.643851) (xy 87.10295 66.572014) (xy 87.10295 66.572004) - (xy 87.105314 66.548001) (xy 87.10295 66.523998) (xy 87.10295 65.702906) (xy 87.111427 65.711383) (xy 87.309926 65.844016) - (xy 87.530487 65.935375) (xy 87.764633 65.98195) (xy 88.003367 65.98195) (xy 88.237513 65.935375) (xy 88.458074 65.844016) - (xy 88.656573 65.711383) (xy 88.66505 65.702906) (xy 88.66505 66.34547) (xy 87.555237 67.455284) (xy 87.536589 67.470588) - (xy 87.521285 67.489236) (xy 87.52128 67.489241) (xy 87.475487 67.54504) (xy 87.455219 67.58296) (xy 87.430085 67.629982) - (xy 87.402126 67.722149) (xy 87.397695 67.767141) (xy 87.392686 67.818) (xy 87.395051 67.842013) (xy 87.395051 68.486724) - (xy 87.309926 68.521984) (xy 87.111427 68.654617) (xy 86.942617 68.823427) (xy 86.809984 69.021926) (xy 86.718625 69.242487) - (xy 86.67205 69.476633) (xy 86.67205 69.715367) (xy 86.718625 69.949513) (xy 86.809984 70.170074) (xy 86.942617 70.368573) - (xy 87.111427 70.537383) (xy 87.309926 70.670016) (xy 87.530487 70.761375) (xy 87.764633 70.80795) (xy 88.003367 70.80795) - (xy 88.237513 70.761375) (xy 88.458074 70.670016) (xy 88.656573 70.537383) (xy 88.825383 70.368573) (xy 88.958016 70.170074) - (xy 89.049375 69.949513) (xy 89.09595 69.715367) (xy 89.09595 69.476633) (xy 89.049375 69.242487) (xy 88.958016 69.021926) - (xy 88.825383 68.823427) (xy 88.656573 68.654617) (xy 88.458074 68.521984) (xy 88.37295 68.486725) (xy 88.37295 68.020529) - (xy 89.482764 66.910716) (xy 89.501412 66.895412) (xy 89.516716 66.876764) (xy 89.51672 66.87676) (xy 89.562513 66.820961) - (xy 89.607915 66.736019) (xy 89.607916 66.736018) (xy 89.635875 66.643851) (xy 89.64295 66.572014) (xy 89.64295 66.572004) - (xy 89.645314 66.548001) (xy 89.64295 66.523998) (xy 89.64295 65.702906) (xy 89.651427 65.711383) (xy 89.849926 65.844016) - (xy 90.070487 65.935375) (xy 90.304633 65.98195) (xy 90.543367 65.98195) (xy 90.777513 65.935375) (xy 90.998074 65.844016) - (xy 91.196573 65.711383) (xy 91.20505 65.702906) (xy 91.20505 66.34547) (xy 90.095237 67.455284) (xy 90.076589 67.470588) - (xy 90.061285 67.489236) (xy 90.06128 67.489241) (xy 90.015487 67.54504) (xy 89.995219 67.58296) (xy 89.970085 67.629982) - (xy 89.942126 67.722149) (xy 89.937695 67.767141) (xy 89.932686 67.818) (xy 89.935051 67.842013) (xy 89.935051 68.486724) - (xy 89.849926 68.521984) (xy 89.651427 68.654617) (xy 89.482617 68.823427) (xy 89.349984 69.021926) (xy 89.258625 69.242487) - (xy 89.21205 69.476633) (xy 89.21205 69.715367) (xy 89.258625 69.949513) (xy 89.349984 70.170074) (xy 89.482617 70.368573) - (xy 89.651427 70.537383) (xy 89.849926 70.670016) (xy 90.070487 70.761375) (xy 90.304633 70.80795) (xy 90.543367 70.80795) - (xy 90.777513 70.761375) (xy 90.998074 70.670016) (xy 91.196573 70.537383) (xy 91.365383 70.368573) (xy 91.498016 70.170074) - (xy 91.589375 69.949513) (xy 91.63595 69.715367) (xy 91.63595 69.476633) (xy 91.589375 69.242487) (xy 91.498016 69.021926) - (xy 91.365383 68.823427) (xy 91.196573 68.654617) (xy 90.998074 68.521984) (xy 90.91295 68.486725) (xy 90.91295 68.020529) - (xy 92.022764 66.910716) (xy 92.041412 66.895412) (xy 92.056716 66.876764) (xy 92.05672 66.87676) (xy 92.102513 66.820961) - (xy 92.147915 66.736019) (xy 92.147916 66.736018) (xy 92.175875 66.643851) (xy 92.18295 66.572014) (xy 92.18295 66.572004) - (xy 92.185314 66.548001) (xy 92.18295 66.523998) (xy 92.18295 65.702906) (xy 92.191427 65.711383) (xy 92.389926 65.844016) - (xy 92.610487 65.935375) (xy 92.844633 65.98195) (xy 93.083367 65.98195) (xy 93.317513 65.935375) (xy 93.538074 65.844016) - (xy 93.736573 65.711383) (xy 93.74505 65.702906) (xy 93.74505 66.34547) (xy 92.635237 67.455284) (xy 92.616589 67.470588) - (xy 92.601285 67.489236) (xy 92.60128 67.489241) (xy 92.555487 67.54504) (xy 92.535219 67.58296) (xy 92.510085 67.629982) - (xy 92.482126 67.722149) (xy 92.477695 67.767141) (xy 92.472686 67.818) (xy 92.475051 67.842013) (xy 92.475051 68.486724) - (xy 92.389926 68.521984) (xy 92.191427 68.654617) (xy 92.022617 68.823427) (xy 91.889984 69.021926) (xy 91.798625 69.242487) - (xy 91.75205 69.476633) (xy 91.75205 69.715367) (xy 91.798625 69.949513) (xy 91.889984 70.170074) (xy 92.022617 70.368573) - (xy 92.191427 70.537383) (xy 92.389926 70.670016) (xy 92.610487 70.761375) (xy 92.844633 70.80795) (xy 93.083367 70.80795) - (xy 93.317513 70.761375) (xy 93.538074 70.670016) (xy 93.736573 70.537383) (xy 93.905383 70.368573) (xy 94.038016 70.170074) - (xy 94.129375 69.949513) (xy 94.17595 69.715367) (xy 94.17595 69.476633) (xy 94.129375 69.242487) (xy 94.038016 69.021926) - (xy 93.905383 68.823427) (xy 93.736573 68.654617) (xy 93.538074 68.521984) (xy 93.45295 68.486725) (xy 93.45295 68.020529) - (xy 94.562764 66.910716) (xy 94.581412 66.895412) (xy 94.596716 66.876764) (xy 94.59672 66.87676) (xy 94.642513 66.820961) - (xy 94.687915 66.736019) (xy 94.687916 66.736018) (xy 94.715875 66.643851) (xy 94.72295 66.572014) (xy 94.72295 66.572004) - (xy 94.725314 66.548001) (xy 94.72295 66.523998) (xy 94.72295 65.983701) (xy 96.28505 65.983701) (xy 96.28505 66.59947) - (xy 95.175237 67.709284) (xy 95.156589 67.724588) (xy 95.141285 67.743236) (xy 95.14128 67.743241) (xy 95.095487 67.79904) - (xy 95.053022 67.878488) (xy 95.050085 67.883982) (xy 95.023093 67.972963) (xy 95.022126 67.97615) (xy 95.012686 68.072) - (xy 95.015051 68.096013) (xy 95.015051 68.382299) (xy 94.654 68.382299) (xy 94.583045 68.389287) (xy 94.514818 68.409984) - (xy 94.451939 68.443594) (xy 94.396825 68.488825) (xy 94.351594 68.543939) (xy 94.317984 68.606818) (xy 94.297287 68.675045) - (xy 94.290299 68.746) (xy 94.290299 70.446) (xy 94.297287 70.516955) (xy 94.317984 70.585182) (xy 94.351594 70.648061) - (xy 94.396825 70.703175) (xy 94.451939 70.748406) (xy 94.514818 70.782016) (xy 94.583045 70.802713) (xy 94.654 70.809701) - (xy 96.354 70.809701) (xy 96.424955 70.802713) (xy 96.493182 70.782016) (xy 96.556061 70.748406) (xy 96.611175 70.703175) - (xy 96.656406 70.648061) (xy 96.690016 70.585182) (xy 96.710713 70.516955) (xy 96.717701 70.446) (xy 96.717701 68.746) - (xy 96.710713 68.675045) (xy 96.690016 68.606818) (xy 96.656406 68.543939) (xy 96.611175 68.488825) (xy 96.556061 68.443594) - (xy 96.493182 68.409984) (xy 96.424955 68.389287) (xy 96.354 68.382299) (xy 95.99295 68.382299) (xy 95.99295 68.274529) - (xy 97.102764 67.164716) (xy 97.121412 67.149412) (xy 97.136716 67.130764) (xy 97.13672 67.13076) (xy 97.182513 67.074961) - (xy 97.227915 66.990019) (xy 97.227916 66.990018) (xy 97.255875 66.897851) (xy 97.26295 66.826014) (xy 97.26295 66.826004) - (xy 97.265314 66.802001) (xy 97.26295 66.777998) (xy 97.26295 63.524002) (xy 97.265314 63.499999) (xy 97.26295 63.475996) - (xy 97.26295 63.475986) (xy 97.255875 63.404149) (xy 97.227916 63.311982) (xy 97.206781 63.272442) (xy 97.182513 63.227039) - (xy 97.13672 63.17124) (xy 97.136716 63.171236) (xy 97.121412 63.152588) (xy 97.102764 63.137284) (xy 96.717701 62.752221) - (xy 96.717701 61.38) (xy 96.710713 61.309045) (xy 96.690016 61.240818) (xy 96.656406 61.177939) (xy 96.611175 61.122825) - (xy 96.556061 61.077594) (xy 96.493182 61.043984) (xy 96.424955 61.023287) (xy 96.354 61.016299) (xy 96.147998 61.016299) - (xy 96.147998 57.692688) (xy 96.38538 57.692688) (xy 96.38538 57.877312) (xy 96.421398 58.058389) (xy 96.492051 58.228959) - (xy 96.594623 58.382468) (xy 96.725172 58.513017) (xy 96.878681 58.615589) (xy 97.049251 58.686242) (xy 97.230328 58.72226) - (xy 97.414952 58.72226) (xy 97.596029 58.686242) (xy 97.766599 58.615589) (xy 97.920108 58.513017) (xy 98.050657 58.382468) - (xy 98.153229 58.228959) (xy 98.223882 58.058389) (xy 98.2599 57.877312) (xy 98.2599 57.692688) (xy 98.223882 57.511611) - (xy 98.153229 57.341041) (xy 98.050657 57.187532) (xy 97.920108 57.056983) (xy 97.766599 56.954411) (xy 97.596029 56.883758) - (xy 97.414952 56.84774) (xy 97.230328 56.84774) (xy 97.049251 56.883758) (xy 96.878681 56.954411) (xy 96.725172 57.056983) - (xy 96.594623 57.187532) (xy 96.492051 57.341041) (xy 96.421398 57.511611) (xy 96.38538 57.692688) (xy 96.147998 57.692688) - (xy 96.147998 55.201041) (xy 96.650139 54.6989) (xy 98.44107 54.6989) (xy 98.444051 54.729165) (xy 98.44405 59.151745) - (xy 98.44107 59.182) (xy 98.447356 59.245817) (xy 98.452963 59.302746) (xy 98.488183 59.418853) (xy 98.545379 59.525858) - (xy 98.62235 59.61965) (xy 98.645864 59.638947) (xy 100.19055 61.183634) (xy 100.159984 61.240818) (xy 100.139287 61.309045) - (xy 100.132299 61.38) (xy 100.132299 63.08) (xy 100.139287 63.150955) (xy 100.159984 63.219182) (xy 100.193594 63.282061) - (xy 100.238825 63.337175) (xy 100.293939 63.382406) (xy 100.356818 63.416016) (xy 100.425045 63.436713) (xy 100.496 63.443701) - (xy 101.688617 63.443701) (xy 101.801215 63.556299) (xy 100.496 63.556299) (xy 100.425045 63.563287) (xy 100.356818 63.583984) - (xy 100.293939 63.617594) (xy 100.238825 63.662825) (xy 100.193594 63.717939) (xy 100.159984 63.780818) (xy 100.139287 63.849045) - (xy 100.132299 63.92) (xy 100.132299 65.62) (xy 100.139287 65.690955) (xy 100.159984 65.759182) (xy 100.193594 65.822061) - (xy 100.238825 65.877175) (xy 100.293939 65.922406) (xy 100.356818 65.956016) (xy 100.425045 65.976713) (xy 100.496 65.983701) - (xy 102.196 65.983701) (xy 102.25405 65.977984) (xy 102.25405 66.800865) (xy 100.93186 68.123057) (xy 100.908351 68.14235) - (xy 100.868302 68.191151) (xy 100.831379 68.236142) (xy 100.774184 68.343146) (xy 100.762307 68.382299) (xy 100.496 68.382299) - (xy 100.425045 68.389287) (xy 100.356818 68.409984) (xy 100.293939 68.443594) (xy 100.238825 68.488825) (xy 100.193594 68.543939) - (xy 100.159984 68.606818) (xy 100.139287 68.675045) (xy 100.132299 68.746) (xy 100.132299 70.446) (xy 100.139287 70.516955) - (xy 100.159984 70.585182) (xy 100.193594 70.648061) (xy 100.238825 70.703175) (xy 100.293939 70.748406) (xy 100.356818 70.782016) - (xy 100.425045 70.802713) (xy 100.496 70.809701) (xy 102.196 70.809701) (xy 102.266955 70.802713) (xy 102.335182 70.782016) - (xy 102.398061 70.748406) (xy 102.453175 70.703175) (xy 102.498406 70.648061) (xy 102.532016 70.585182) (xy 102.552713 70.516955) - (xy 102.559701 70.446) (xy 102.559701 68.746) (xy 102.552713 68.675045) (xy 102.532016 68.606818) (xy 102.498406 68.543939) - (xy 102.453175 68.488825) (xy 102.398061 68.443594) (xy 102.369015 68.428069) (xy 103.284147 67.512938) (xy 103.30765 67.49365) - (xy 103.384621 67.399859) (xy 103.441817 67.292854) (xy 103.477037 67.176747) (xy 103.48595 67.086255) (xy 103.48595 67.086254) - (xy 103.48893 67.056001) (xy 103.48595 67.025748) (xy 103.48595 63.784252) (xy 103.48893 63.753999) (xy 103.485378 63.717939) - (xy 103.477037 63.633253) (xy 103.441817 63.517146) (xy 103.384621 63.410141) (xy 103.30765 63.31635) (xy 103.284146 63.297061) - (xy 102.559701 62.572617) (xy 102.559701 61.38) (xy 102.552713 61.309045) (xy 102.532016 61.240818) (xy 102.498406 61.177939) - (xy 102.453175 61.122825) (xy 102.398061 61.077594) (xy 102.335182 61.043984) (xy 102.266955 61.023287) (xy 102.196 61.016299) - (xy 101.766529 61.016299) (xy 101.760146 61.011061) (xy 99.67595 58.926867) (xy 99.67595 58.352517) (xy 99.695963 58.382468) - (xy 99.826512 58.513017) (xy 99.980021 58.615589) (xy 100.150591 58.686242) (xy 100.331668 58.72226) (xy 100.516292 58.72226) - (xy 100.697369 58.686242) (xy 100.867939 58.615589) (xy 101.021448 58.513017) (xy 101.151997 58.382468) (xy 101.254569 58.228959) - (xy 101.325222 58.058389) (xy 101.36124 57.877312) (xy 101.36124 57.692688) (xy 101.325222 57.511611) (xy 101.254569 57.341041) - (xy 101.151997 57.187532) (xy 101.021448 57.056983) (xy 100.867939 56.954411) (xy 100.697369 56.883758) (xy 100.516292 56.84774) - (xy 100.331668 56.84774) (xy 100.150591 56.883758) (xy 99.980021 56.954411) (xy 99.826512 57.056983) (xy 99.695963 57.187532) - (xy 99.67595 57.217483) (xy 99.67595 56.476) (xy 101.65507 56.476) (xy 101.666963 56.596747) (xy 101.702183 56.712854) + (xy 67.620299 71.286) (xy 53.87385 71.286) (xy 53.87385 61.994217) (xy 55.48605 61.994217) (xy 55.48605 62.465783) + (xy 55.578048 62.928289) (xy 55.758509 63.36396) (xy 56.020498 63.756054) (xy 56.353946 64.089502) (xy 56.74604 64.351491) + (xy 57.181711 64.531952) (xy 57.644217 64.62395) (xy 58.115783 64.62395) (xy 58.578289 64.531952) (xy 59.01396 64.351491) + (xy 59.406054 64.089502) (xy 59.739502 63.756054) (xy 60.001491 63.36396) (xy 60.181952 62.928289) (xy 60.27395 62.465783) + (xy 60.27395 61.994217) (xy 60.181952 61.531711) (xy 60.119112 61.38) (xy 67.620299 61.38) (xy 67.620299 63.08) + (xy 67.627287 63.150955) (xy 67.647984 63.219182) (xy 67.681594 63.282061) (xy 67.726825 63.337175) (xy 67.781939 63.382406) + (xy 67.844818 63.416016) (xy 67.913045 63.436713) (xy 67.984 63.443701) (xy 69.176617 63.443701) (xy 69.289215 63.556299) + (xy 67.984 63.556299) (xy 67.913045 63.563287) (xy 67.844818 63.583984) (xy 67.781939 63.617594) (xy 67.726825 63.662825) + (xy 67.681594 63.717939) (xy 67.647984 63.780818) (xy 67.627287 63.849045) (xy 67.620299 63.92) (xy 67.620299 65.62) + (xy 67.627287 65.690955) (xy 67.647984 65.759182) (xy 67.681594 65.822061) (xy 67.726825 65.877175) (xy 67.781939 65.922406) + (xy 67.844818 65.956016) (xy 67.913045 65.976713) (xy 67.984 65.983701) (xy 69.61505 65.983701) (xy 69.61505 66.927865) + (xy 68.41986 68.123057) (xy 68.396351 68.14235) (xy 68.356302 68.191151) (xy 68.319379 68.236142) (xy 68.262184 68.343146) + (xy 68.250307 68.382299) (xy 67.984 68.382299) (xy 67.913045 68.389287) (xy 67.844818 68.409984) (xy 67.781939 68.443594) + (xy 67.726825 68.488825) (xy 67.681594 68.543939) (xy 67.647984 68.606818) (xy 67.627287 68.675045) (xy 67.620299 68.746) + (xy 67.620299 70.446) (xy 67.627287 70.516955) (xy 67.647984 70.585182) (xy 67.681594 70.648061) (xy 67.726825 70.703175) + (xy 67.781939 70.748406) (xy 67.844818 70.782016) (xy 67.913045 70.802713) (xy 67.984 70.809701) (xy 69.684 70.809701) + (xy 69.754955 70.802713) (xy 69.823182 70.782016) (xy 69.886061 70.748406) (xy 69.941175 70.703175) (xy 69.986406 70.648061) + (xy 70.020016 70.585182) (xy 70.040713 70.516955) (xy 70.047701 70.446) (xy 70.047701 68.746) (xy 70.040713 68.675045) + (xy 70.020016 68.606818) (xy 69.986406 68.543939) (xy 69.941175 68.488825) (xy 69.886061 68.443594) (xy 69.857015 68.428069) + (xy 70.560935 67.72415) (xy 70.61862 67.65386) (xy 70.675816 67.546855) (xy 70.711036 67.430748) (xy 70.72293 67.310001) + (xy 70.711036 67.189254) (xy 70.675816 67.073146) (xy 70.61862 66.966142) (xy 70.59295 66.934862) (xy 70.59295 65.983701) + (xy 72.224 65.983701) (xy 72.294955 65.976713) (xy 72.363182 65.956016) (xy 72.426061 65.922406) (xy 72.481175 65.877175) + (xy 72.526406 65.822061) (xy 72.53605 65.804018) (xy 72.53605 66.800865) (xy 70.95986 68.377057) (xy 70.953472 68.382299) + (xy 70.524 68.382299) (xy 70.453045 68.389287) (xy 70.384818 68.409984) (xy 70.321939 68.443594) (xy 70.266825 68.488825) + (xy 70.221594 68.543939) (xy 70.187984 68.606818) (xy 70.167287 68.675045) (xy 70.160299 68.746) (xy 70.160299 70.446) + (xy 70.167287 70.516955) (xy 70.187984 70.585182) (xy 70.221594 70.648061) (xy 70.266825 70.703175) (xy 70.321939 70.748406) + (xy 70.384818 70.782016) (xy 70.453045 70.802713) (xy 70.524 70.809701) (xy 72.224 70.809701) (xy 72.294955 70.802713) + (xy 72.363182 70.782016) (xy 72.426061 70.748406) (xy 72.481175 70.703175) (xy 72.526406 70.648061) (xy 72.560016 70.585182) + (xy 72.580713 70.516955) (xy 72.587701 70.446) (xy 72.587701 68.746) (xy 72.580713 68.675045) (xy 72.560016 68.606818) + (xy 72.52945 68.549634) (xy 73.566147 67.512938) (xy 73.58965 67.49365) (xy 73.666621 67.399859) (xy 73.723817 67.292854) + (xy 73.759037 67.176747) (xy 73.76795 67.086255) (xy 73.76795 67.086254) (xy 73.77093 67.056) (xy 73.76795 67.025745) + (xy 73.76795 64.038255) (xy 73.77093 64.008) (xy 73.759037 63.887253) (xy 73.747447 63.849045) (xy 73.723817 63.771146) + (xy 73.666621 63.664141) (xy 73.58965 63.57035) (xy 73.566146 63.551061) (xy 72.781355 62.766271) (xy 72.821859 62.744621) + (xy 72.91565 62.66765) (xy 72.934947 62.644136) (xy 75.214147 60.364938) (xy 75.23765 60.34565) (xy 75.314621 60.251859) + (xy 75.371817 60.144854) (xy 75.407037 60.028747) (xy 75.41595 59.938255) (xy 75.41595 59.938254) (xy 75.41893 59.908) + (xy 75.41595 59.877745) (xy 75.41595 58.426776) (xy 75.460752 58.493827) (xy 75.615633 58.648708) (xy 75.797754 58.770397) + (xy 76.000116 58.854218) (xy 76.214943 58.89695) (xy 76.433977 58.89695) (xy 76.648804 58.854218) (xy 76.851166 58.770397) + (xy 77.033287 58.648708) (xy 77.188168 58.493827) (xy 77.235051 58.423662) (xy 77.23505 61.117134) (xy 77.047419 61.217425) + (xy 76.862875 61.368875) (xy 76.711425 61.553419) (xy 76.598887 61.763963) (xy 76.529586 61.992416) (xy 76.506186 62.23) + (xy 76.529586 62.467584) (xy 76.598887 62.696037) (xy 76.711425 62.906581) (xy 76.862875 63.091125) (xy 77.047419 63.242575) + (xy 77.257963 63.355113) (xy 77.486416 63.424414) (xy 77.664462 63.44195) (xy 77.783538 63.44195) (xy 77.961584 63.424414) + (xy 78.165175 63.362655) (xy 78.505051 63.702531) (xy 78.505051 63.84316) (xy 78.400581 63.757425) (xy 78.190037 63.644887) + (xy 77.961584 63.575586) (xy 77.783538 63.55805) (xy 77.664462 63.55805) (xy 77.486416 63.575586) (xy 77.257963 63.644887) + (xy 77.047419 63.757425) (xy 76.862875 63.908875) (xy 76.711425 64.093419) (xy 76.598887 64.303963) (xy 76.529586 64.532416) + (xy 76.506186 64.77) (xy 76.529586 65.007584) (xy 76.598887 65.236037) (xy 76.711425 65.446581) (xy 76.862875 65.631125) + (xy 77.047419 65.782575) (xy 77.257963 65.895113) (xy 77.486416 65.964414) (xy 77.664462 65.98195) (xy 77.783538 65.98195) + (xy 77.961584 65.964414) (xy 78.190037 65.895113) (xy 78.400581 65.782575) (xy 78.50505 65.69684) (xy 78.50505 65.83747) + (xy 77.395237 66.947284) (xy 77.376589 66.962588) (xy 77.361285 66.981236) (xy 77.36128 66.981241) (xy 77.315487 67.03704) + (xy 77.276445 67.110084) (xy 77.270085 67.121982) (xy 77.242126 67.214149) (xy 77.237512 67.260999) (xy 77.232686 67.31) + (xy 77.235051 67.334013) (xy 77.23505 68.483134) (xy 77.047419 68.583425) (xy 76.862875 68.734875) (xy 76.711425 68.919419) + (xy 76.598887 69.129963) (xy 76.529586 69.358416) (xy 76.506186 69.596) (xy 76.529586 69.833584) (xy 76.598887 70.062037) + (xy 76.711425 70.272581) (xy 76.862875 70.457125) (xy 77.047419 70.608575) (xy 77.257963 70.721113) (xy 77.486416 70.790414) + (xy 77.664462 70.80795) (xy 77.783538 70.80795) (xy 77.961584 70.790414) (xy 78.190037 70.721113) (xy 78.400581 70.608575) + (xy 78.585125 70.457125) (xy 78.736575 70.272581) (xy 78.849113 70.062037) (xy 78.918414 69.833584) (xy 78.941814 69.596) + (xy 78.918414 69.358416) (xy 78.849113 69.129963) (xy 78.736575 68.919419) (xy 78.585125 68.734875) (xy 78.400581 68.583425) + (xy 78.21295 68.483134) (xy 78.21295 67.512529) (xy 79.322764 66.402716) (xy 79.341412 66.387412) (xy 79.356716 66.368764) + (xy 79.35672 66.36876) (xy 79.402513 66.312961) (xy 79.447915 66.228019) (xy 79.447916 66.228018) (xy 79.475875 66.135851) + (xy 79.48295 66.064014) (xy 79.48295 66.064004) (xy 79.485314 66.040001) (xy 79.48295 66.015998) (xy 79.48295 65.69684) + (xy 79.587419 65.782575) (xy 79.797963 65.895113) (xy 80.026416 65.964414) (xy 80.204462 65.98195) (xy 80.323538 65.98195) + (xy 80.501584 65.964414) (xy 80.730037 65.895113) (xy 80.940581 65.782575) (xy 81.04505 65.69684) (xy 81.04505 65.83747) + (xy 79.935237 66.947284) (xy 79.916589 66.962588) (xy 79.901285 66.981236) (xy 79.90128 66.981241) (xy 79.855487 67.03704) + (xy 79.816445 67.110084) (xy 79.810085 67.121982) (xy 79.782126 67.214149) (xy 79.777512 67.260999) (xy 79.772686 67.31) + (xy 79.775051 67.334013) (xy 79.77505 68.483134) (xy 79.587419 68.583425) (xy 79.402875 68.734875) (xy 79.251425 68.919419) + (xy 79.138887 69.129963) (xy 79.069586 69.358416) (xy 79.046186 69.596) (xy 79.069586 69.833584) (xy 79.138887 70.062037) + (xy 79.251425 70.272581) (xy 79.402875 70.457125) (xy 79.587419 70.608575) (xy 79.797963 70.721113) (xy 80.026416 70.790414) + (xy 80.204462 70.80795) (xy 80.323538 70.80795) (xy 80.501584 70.790414) (xy 80.730037 70.721113) (xy 80.940581 70.608575) + (xy 81.125125 70.457125) (xy 81.276575 70.272581) (xy 81.389113 70.062037) (xy 81.458414 69.833584) (xy 81.481814 69.596) + (xy 81.458414 69.358416) (xy 81.389113 69.129963) (xy 81.276575 68.919419) (xy 81.125125 68.734875) (xy 80.940581 68.583425) + (xy 80.75295 68.483134) (xy 80.75295 67.512529) (xy 81.862764 66.402716) (xy 81.881412 66.387412) (xy 81.896716 66.368764) + (xy 81.89672 66.36876) (xy 81.942513 66.312961) (xy 81.987915 66.228019) (xy 81.987916 66.228018) (xy 82.015875 66.135851) + (xy 82.02295 66.064014) (xy 82.02295 66.064004) (xy 82.025314 66.040001) (xy 82.02295 66.015998) (xy 82.02295 65.69684) + (xy 82.127419 65.782575) (xy 82.337963 65.895113) (xy 82.566416 65.964414) (xy 82.744462 65.98195) (xy 82.863538 65.98195) + (xy 83.041584 65.964414) (xy 83.270037 65.895113) (xy 83.480581 65.782575) (xy 83.58505 65.69684) (xy 83.58505 66.09147) + (xy 82.475237 67.201284) (xy 82.456589 67.216588) (xy 82.441285 67.235236) (xy 82.44128 67.235241) (xy 82.395487 67.29104) + (xy 82.371389 67.336125) (xy 82.350085 67.375982) (xy 82.322126 67.468149) (xy 82.319184 67.498017) (xy 82.312686 67.564) + (xy 82.315051 67.588013) (xy 82.315051 68.483134) (xy 82.127419 68.583425) (xy 81.942875 68.734875) (xy 81.791425 68.919419) + (xy 81.678887 69.129963) (xy 81.609586 69.358416) (xy 81.586186 69.596) (xy 81.609586 69.833584) (xy 81.678887 70.062037) + (xy 81.791425 70.272581) (xy 81.942875 70.457125) (xy 82.127419 70.608575) (xy 82.337963 70.721113) (xy 82.566416 70.790414) + (xy 82.744462 70.80795) (xy 82.863538 70.80795) (xy 83.041584 70.790414) (xy 83.270037 70.721113) (xy 83.480581 70.608575) + (xy 83.665125 70.457125) (xy 83.816575 70.272581) (xy 83.929113 70.062037) (xy 83.998414 69.833584) (xy 84.021814 69.596) + (xy 83.998414 69.358416) (xy 83.929113 69.129963) (xy 83.816575 68.919419) (xy 83.665125 68.734875) (xy 83.480581 68.583425) + (xy 83.29295 68.483134) (xy 83.29295 67.766529) (xy 84.402764 66.656716) (xy 84.421412 66.641412) (xy 84.436716 66.622764) + (xy 84.43672 66.62276) (xy 84.482513 66.566961) (xy 84.506781 66.521558) (xy 84.527916 66.482018) (xy 84.555875 66.389851) + (xy 84.56295 66.318014) (xy 84.56295 66.318004) (xy 84.565314 66.294001) (xy 84.56295 66.269998) (xy 84.56295 65.69684) + (xy 84.667419 65.782575) (xy 84.877963 65.895113) (xy 85.106416 65.964414) (xy 85.284462 65.98195) (xy 85.403538 65.98195) + (xy 85.581584 65.964414) (xy 85.810037 65.895113) (xy 86.020581 65.782575) (xy 86.12505 65.69684) (xy 86.12505 66.34547) + (xy 85.015237 67.455284) (xy 84.996589 67.470588) (xy 84.981285 67.489236) (xy 84.98128 67.489241) (xy 84.935487 67.54504) + (xy 84.915219 67.58296) (xy 84.890085 67.629982) (xy 84.862126 67.722149) (xy 84.857695 67.767141) (xy 84.852686 67.818) + (xy 84.855051 67.842013) (xy 84.855051 68.483134) (xy 84.667419 68.583425) (xy 84.482875 68.734875) (xy 84.331425 68.919419) + (xy 84.218887 69.129963) (xy 84.149586 69.358416) (xy 84.126186 69.596) (xy 84.149586 69.833584) (xy 84.218887 70.062037) + (xy 84.331425 70.272581) (xy 84.482875 70.457125) (xy 84.667419 70.608575) (xy 84.877963 70.721113) (xy 85.106416 70.790414) + (xy 85.284462 70.80795) (xy 85.403538 70.80795) (xy 85.581584 70.790414) (xy 85.810037 70.721113) (xy 86.020581 70.608575) + (xy 86.205125 70.457125) (xy 86.356575 70.272581) (xy 86.469113 70.062037) (xy 86.538414 69.833584) (xy 86.561814 69.596) + (xy 86.538414 69.358416) (xy 86.469113 69.129963) (xy 86.356575 68.919419) (xy 86.205125 68.734875) (xy 86.020581 68.583425) + (xy 85.83295 68.483134) (xy 85.83295 68.020529) (xy 86.942764 66.910716) (xy 86.961412 66.895412) (xy 86.976716 66.876764) + (xy 86.97672 66.87676) (xy 87.022513 66.820961) (xy 87.067915 66.736019) (xy 87.067916 66.736018) (xy 87.095875 66.643851) + (xy 87.10295 66.572014) (xy 87.10295 66.572004) (xy 87.105314 66.548001) (xy 87.10295 66.523998) (xy 87.10295 65.69684) + (xy 87.207419 65.782575) (xy 87.417963 65.895113) (xy 87.646416 65.964414) (xy 87.824462 65.98195) (xy 87.943538 65.98195) + (xy 88.121584 65.964414) (xy 88.350037 65.895113) (xy 88.560581 65.782575) (xy 88.66505 65.69684) (xy 88.66505 66.34547) + (xy 87.555237 67.455284) (xy 87.536589 67.470588) (xy 87.521285 67.489236) (xy 87.52128 67.489241) (xy 87.475487 67.54504) + (xy 87.455219 67.58296) (xy 87.430085 67.629982) (xy 87.402126 67.722149) (xy 87.397695 67.767141) (xy 87.392686 67.818) + (xy 87.395051 67.842013) (xy 87.395051 68.483134) (xy 87.207419 68.583425) (xy 87.022875 68.734875) (xy 86.871425 68.919419) + (xy 86.758887 69.129963) (xy 86.689586 69.358416) (xy 86.666186 69.596) (xy 86.689586 69.833584) (xy 86.758887 70.062037) + (xy 86.871425 70.272581) (xy 87.022875 70.457125) (xy 87.207419 70.608575) (xy 87.417963 70.721113) (xy 87.646416 70.790414) + (xy 87.824462 70.80795) (xy 87.943538 70.80795) (xy 88.121584 70.790414) (xy 88.350037 70.721113) (xy 88.560581 70.608575) + (xy 88.745125 70.457125) (xy 88.896575 70.272581) (xy 89.009113 70.062037) (xy 89.078414 69.833584) (xy 89.101814 69.596) + (xy 89.078414 69.358416) (xy 89.009113 69.129963) (xy 88.896575 68.919419) (xy 88.745125 68.734875) (xy 88.560581 68.583425) + (xy 88.37295 68.483134) (xy 88.37295 68.020529) (xy 89.482764 66.910716) (xy 89.501412 66.895412) (xy 89.516716 66.876764) + (xy 89.51672 66.87676) (xy 89.562513 66.820961) (xy 89.607915 66.736019) (xy 89.607916 66.736018) (xy 89.635875 66.643851) + (xy 89.64295 66.572014) (xy 89.64295 66.572004) (xy 89.645314 66.548001) (xy 89.64295 66.523998) (xy 89.64295 65.69684) + (xy 89.747419 65.782575) (xy 89.957963 65.895113) (xy 90.186416 65.964414) (xy 90.364462 65.98195) (xy 90.483538 65.98195) + (xy 90.661584 65.964414) (xy 90.890037 65.895113) (xy 91.100581 65.782575) (xy 91.20505 65.69684) (xy 91.20505 66.34547) + (xy 90.095237 67.455284) (xy 90.076589 67.470588) (xy 90.061285 67.489236) (xy 90.06128 67.489241) (xy 90.015487 67.54504) + (xy 89.995219 67.58296) (xy 89.970085 67.629982) (xy 89.942126 67.722149) (xy 89.937695 67.767141) (xy 89.932686 67.818) + (xy 89.935051 67.842013) (xy 89.935051 68.483134) (xy 89.747419 68.583425) (xy 89.562875 68.734875) (xy 89.411425 68.919419) + (xy 89.298887 69.129963) (xy 89.229586 69.358416) (xy 89.206186 69.596) (xy 89.229586 69.833584) (xy 89.298887 70.062037) + (xy 89.411425 70.272581) (xy 89.562875 70.457125) (xy 89.747419 70.608575) (xy 89.957963 70.721113) (xy 90.186416 70.790414) + (xy 90.364462 70.80795) (xy 90.483538 70.80795) (xy 90.661584 70.790414) (xy 90.890037 70.721113) (xy 91.100581 70.608575) + (xy 91.285125 70.457125) (xy 91.436575 70.272581) (xy 91.549113 70.062037) (xy 91.618414 69.833584) (xy 91.641814 69.596) + (xy 91.618414 69.358416) (xy 91.549113 69.129963) (xy 91.436575 68.919419) (xy 91.285125 68.734875) (xy 91.100581 68.583425) + (xy 90.91295 68.483134) (xy 90.91295 68.020529) (xy 92.022764 66.910716) (xy 92.041412 66.895412) (xy 92.056716 66.876764) + (xy 92.05672 66.87676) (xy 92.102513 66.820961) (xy 92.147915 66.736019) (xy 92.147916 66.736018) (xy 92.175875 66.643851) + (xy 92.18295 66.572014) (xy 92.18295 66.572004) (xy 92.185314 66.548001) (xy 92.18295 66.523998) (xy 92.18295 65.69684) + (xy 92.287419 65.782575) (xy 92.497963 65.895113) (xy 92.726416 65.964414) (xy 92.904462 65.98195) (xy 93.023538 65.98195) + (xy 93.201584 65.964414) (xy 93.430037 65.895113) (xy 93.640581 65.782575) (xy 93.74505 65.69684) (xy 93.74505 66.34547) + (xy 92.635237 67.455284) (xy 92.616589 67.470588) (xy 92.601285 67.489236) (xy 92.60128 67.489241) (xy 92.555487 67.54504) + (xy 92.535219 67.58296) (xy 92.510085 67.629982) (xy 92.482126 67.722149) (xy 92.477695 67.767141) (xy 92.472686 67.818) + (xy 92.475051 67.842013) (xy 92.475051 68.483134) (xy 92.287419 68.583425) (xy 92.102875 68.734875) (xy 91.951425 68.919419) + (xy 91.838887 69.129963) (xy 91.769586 69.358416) (xy 91.746186 69.596) (xy 91.769586 69.833584) (xy 91.838887 70.062037) + (xy 91.951425 70.272581) (xy 92.102875 70.457125) (xy 92.287419 70.608575) (xy 92.497963 70.721113) (xy 92.726416 70.790414) + (xy 92.904462 70.80795) (xy 93.023538 70.80795) (xy 93.201584 70.790414) (xy 93.430037 70.721113) (xy 93.640581 70.608575) + (xy 93.825125 70.457125) (xy 93.976575 70.272581) (xy 94.089113 70.062037) (xy 94.158414 69.833584) (xy 94.181814 69.596) + (xy 94.158414 69.358416) (xy 94.089113 69.129963) (xy 93.976575 68.919419) (xy 93.825125 68.734875) (xy 93.640581 68.583425) + (xy 93.45295 68.483134) (xy 93.45295 68.020529) (xy 94.562764 66.910716) (xy 94.581412 66.895412) (xy 94.596716 66.876764) + (xy 94.59672 66.87676) (xy 94.642513 66.820961) (xy 94.687915 66.736019) (xy 94.687916 66.736018) (xy 94.715875 66.643851) + (xy 94.72295 66.572014) (xy 94.72295 66.572004) (xy 94.725314 66.548001) (xy 94.72295 66.523998) (xy 94.72295 65.983701) + (xy 96.28505 65.983701) (xy 96.28505 66.59947) (xy 95.175237 67.709284) (xy 95.156589 67.724588) (xy 95.141285 67.743236) + (xy 95.14128 67.743241) (xy 95.095487 67.79904) (xy 95.053022 67.878488) (xy 95.050085 67.883982) (xy 95.023093 67.972963) + (xy 95.022126 67.97615) (xy 95.012686 68.072) (xy 95.015051 68.096013) (xy 95.015051 68.382299) (xy 94.654 68.382299) + (xy 94.583045 68.389287) (xy 94.514818 68.409984) (xy 94.451939 68.443594) (xy 94.396825 68.488825) (xy 94.351594 68.543939) + (xy 94.317984 68.606818) (xy 94.297287 68.675045) (xy 94.290299 68.746) (xy 94.290299 70.446) (xy 94.297287 70.516955) + (xy 94.317984 70.585182) (xy 94.351594 70.648061) (xy 94.396825 70.703175) (xy 94.451939 70.748406) (xy 94.514818 70.782016) + (xy 94.583045 70.802713) (xy 94.654 70.809701) (xy 96.354 70.809701) (xy 96.424955 70.802713) (xy 96.493182 70.782016) + (xy 96.556061 70.748406) (xy 96.611175 70.703175) (xy 96.656406 70.648061) (xy 96.690016 70.585182) (xy 96.710713 70.516955) + (xy 96.717701 70.446) (xy 96.717701 68.746) (xy 96.710713 68.675045) (xy 96.690016 68.606818) (xy 96.656406 68.543939) + (xy 96.611175 68.488825) (xy 96.556061 68.443594) (xy 96.493182 68.409984) (xy 96.424955 68.389287) (xy 96.354 68.382299) + (xy 95.99295 68.382299) (xy 95.99295 68.274529) (xy 97.102764 67.164716) (xy 97.121412 67.149412) (xy 97.136716 67.130764) + (xy 97.13672 67.13076) (xy 97.182513 67.074961) (xy 97.227915 66.990019) (xy 97.227916 66.990018) (xy 97.255875 66.897851) + (xy 97.26295 66.826014) (xy 97.26295 66.826004) (xy 97.265314 66.802001) (xy 97.26295 66.777998) (xy 97.26295 63.524002) + (xy 97.265314 63.499999) (xy 97.26295 63.475996) (xy 97.26295 63.475986) (xy 97.255875 63.404149) (xy 97.227916 63.311982) + (xy 97.206781 63.272442) (xy 97.182513 63.227039) (xy 97.13672 63.17124) (xy 97.136716 63.171236) (xy 97.121412 63.152588) + (xy 97.102764 63.137284) (xy 96.717701 62.752221) (xy 96.717701 61.38) (xy 96.710713 61.309045) (xy 96.690016 61.240818) + (xy 96.656406 61.177939) (xy 96.611175 61.122825) (xy 96.556061 61.077594) (xy 96.493182 61.043984) (xy 96.424955 61.023287) + (xy 96.354 61.016299) (xy 96.147998 61.016299) (xy 96.147998 57.675483) (xy 96.21069 57.675483) (xy 96.21069 57.894517) + (xy 96.253422 58.109344) (xy 96.337243 58.311706) (xy 96.458932 58.493827) (xy 96.613813 58.648708) (xy 96.795934 58.770397) + (xy 96.998296 58.854218) (xy 97.213123 58.89695) (xy 97.432157 58.89695) (xy 97.646984 58.854218) (xy 97.849346 58.770397) + (xy 98.031467 58.648708) (xy 98.186348 58.493827) (xy 98.308037 58.311706) (xy 98.391858 58.109344) (xy 98.43459 57.894517) + (xy 98.43459 57.675483) (xy 98.391858 57.460656) (xy 98.308037 57.258294) (xy 98.186348 57.076173) (xy 98.031467 56.921292) + (xy 97.849346 56.799603) (xy 97.646984 56.715782) (xy 97.432157 56.67305) (xy 97.213123 56.67305) (xy 96.998296 56.715782) + (xy 96.795934 56.799603) (xy 96.613813 56.921292) (xy 96.458932 57.076173) (xy 96.337243 57.258294) (xy 96.253422 57.460656) + (xy 96.21069 57.675483) (xy 96.147998 57.675483) (xy 96.147998 55.201041) (xy 96.650139 54.6989) (xy 98.44107 54.6989) + (xy 98.444051 54.729165) (xy 98.44405 59.151745) (xy 98.44107 59.182) (xy 98.44405 59.212254) (xy 98.452963 59.302746) + (xy 98.488183 59.418853) (xy 98.545379 59.525858) (xy 98.62235 59.61965) (xy 98.645864 59.638947) (xy 100.19055 61.183634) + (xy 100.159984 61.240818) (xy 100.139287 61.309045) (xy 100.132299 61.38) (xy 100.132299 63.08) (xy 100.139287 63.150955) + (xy 100.159984 63.219182) (xy 100.193594 63.282061) (xy 100.238825 63.337175) (xy 100.293939 63.382406) (xy 100.356818 63.416016) + (xy 100.425045 63.436713) (xy 100.496 63.443701) (xy 101.688617 63.443701) (xy 101.801215 63.556299) (xy 100.496 63.556299) + (xy 100.425045 63.563287) (xy 100.356818 63.583984) (xy 100.293939 63.617594) (xy 100.238825 63.662825) (xy 100.193594 63.717939) + (xy 100.159984 63.780818) (xy 100.139287 63.849045) (xy 100.132299 63.92) (xy 100.132299 65.62) (xy 100.139287 65.690955) + (xy 100.159984 65.759182) (xy 100.193594 65.822061) (xy 100.238825 65.877175) (xy 100.293939 65.922406) (xy 100.356818 65.956016) + (xy 100.425045 65.976713) (xy 100.496 65.983701) (xy 102.196 65.983701) (xy 102.25405 65.977984) (xy 102.25405 66.800865) + (xy 100.93186 68.123057) (xy 100.908351 68.14235) (xy 100.868302 68.191151) (xy 100.831379 68.236142) (xy 100.774184 68.343146) + (xy 100.762307 68.382299) (xy 100.496 68.382299) (xy 100.425045 68.389287) (xy 100.356818 68.409984) (xy 100.293939 68.443594) + (xy 100.238825 68.488825) (xy 100.193594 68.543939) (xy 100.159984 68.606818) (xy 100.139287 68.675045) (xy 100.132299 68.746) + (xy 100.132299 70.446) (xy 100.139287 70.516955) (xy 100.159984 70.585182) (xy 100.193594 70.648061) (xy 100.238825 70.703175) + (xy 100.293939 70.748406) (xy 100.356818 70.782016) (xy 100.425045 70.802713) (xy 100.496 70.809701) (xy 102.196 70.809701) + (xy 102.266955 70.802713) (xy 102.335182 70.782016) (xy 102.398061 70.748406) (xy 102.453175 70.703175) (xy 102.498406 70.648061) + (xy 102.532016 70.585182) (xy 102.552713 70.516955) (xy 102.559701 70.446) (xy 102.559701 68.746) (xy 102.552713 68.675045) + (xy 102.532016 68.606818) (xy 102.498406 68.543939) (xy 102.453175 68.488825) (xy 102.398061 68.443594) (xy 102.369015 68.428069) + (xy 103.284147 67.512938) (xy 103.30765 67.49365) (xy 103.384621 67.399859) (xy 103.441817 67.292854) (xy 103.477037 67.176747) + (xy 103.48595 67.086255) (xy 103.48595 67.086254) (xy 103.48893 67.056001) (xy 103.48595 67.025748) (xy 103.48595 63.784252) + (xy 103.48893 63.753999) (xy 103.485378 63.717939) (xy 103.477037 63.633253) (xy 103.441817 63.517146) (xy 103.384621 63.410141) + (xy 103.30765 63.31635) (xy 103.284146 63.297061) (xy 102.559701 62.572617) (xy 102.559701 61.38) (xy 102.552713 61.309045) + (xy 102.532016 61.240818) (xy 102.498406 61.177939) (xy 102.453175 61.122825) (xy 102.398061 61.077594) (xy 102.335182 61.043984) + (xy 102.266955 61.023287) (xy 102.196 61.016299) (xy 101.766529 61.016299) (xy 101.760146 61.011061) (xy 99.67595 58.926867) + (xy 99.67595 58.609505) (xy 99.715153 58.648708) (xy 99.897274 58.770397) (xy 100.099636 58.854218) (xy 100.314463 58.89695) + (xy 100.533497 58.89695) (xy 100.748324 58.854218) (xy 100.950686 58.770397) (xy 101.132807 58.648708) (xy 101.287688 58.493827) + (xy 101.409377 58.311706) (xy 101.493198 58.109344) (xy 101.53593 57.894517) (xy 101.53593 57.675483) (xy 101.493198 57.460656) + (xy 101.409377 57.258294) (xy 101.287688 57.076173) (xy 101.132807 56.921292) (xy 100.950686 56.799603) (xy 100.748324 56.715782) + (xy 100.533497 56.67305) (xy 100.314463 56.67305) (xy 100.099636 56.715782) (xy 99.897274 56.799603) (xy 99.715153 56.921292) + (xy 99.67595 56.960495) (xy 99.67595 56.476) (xy 101.65507 56.476) (xy 101.666963 56.596747) (xy 101.702183 56.712854) (xy 101.759379 56.819859) (xy 101.83635 56.91365) (xy 101.930141 56.990621) (xy 102.037146 57.047817) (xy 102.153253 57.083037) (xy 102.274 57.09493) (xy 102.823963 57.09195) (xy 102.97795 56.937963) (xy 102.97795 55.77205) (xy 103.27005 55.77205) (xy 103.27005 56.937963) (xy 103.424037 57.09195) (xy 103.974 57.09493) (xy 104.094747 57.083037) (xy 104.210854 57.047817) - (xy 104.317859 56.990621) (xy 104.41165 56.91365) (xy 104.488621 56.819859) (xy 104.545817 56.712854) (xy 104.581037 56.596747) - (xy 104.59293 56.476) (xy 104.58995 55.926037) (xy 104.435963 55.77205) (xy 103.27005 55.77205) (xy 102.97795 55.77205) - (xy 101.812037 55.77205) (xy 101.65805 55.926037) (xy 101.65507 56.476) (xy 99.67595 56.476) (xy 99.67595 54.954033) - (xy 99.853983 54.776) (xy 101.65507 54.776) (xy 101.65805 55.325963) (xy 101.812037 55.47995) (xy 102.97795 55.47995) - (xy 102.97795 54.314037) (xy 103.27005 54.314037) (xy 103.27005 55.47995) (xy 104.435963 55.47995) (xy 104.58995 55.325963) - (xy 104.59293 54.776) (xy 104.581037 54.655253) (xy 104.545817 54.539146) (xy 104.488621 54.432141) (xy 104.41165 54.33835) - (xy 104.317859 54.261379) (xy 104.210854 54.204183) (xy 104.094747 54.168963) (xy 103.974 54.15707) (xy 103.424037 54.16005) - (xy 103.27005 54.314037) (xy 102.97795 54.314037) (xy 102.823963 54.16005) (xy 102.274 54.15707) (xy 102.153253 54.168963) - (xy 102.037146 54.204183) (xy 101.930141 54.261379) (xy 101.83635 54.33835) (xy 101.759379 54.432141) (xy 101.702183 54.539146) - (xy 101.666963 54.655253) (xy 101.65507 54.776) (xy 99.853983 54.776) (xy 100.408604 54.22138) (xy 100.516292 54.22138) - (xy 100.697369 54.185362) (xy 100.867939 54.114709) (xy 101.021448 54.012137) (xy 101.151997 53.881588) (xy 101.254569 53.728079) - (xy 101.325222 53.557509) (xy 101.36124 53.376432) (xy 101.36124 53.191808) (xy 105.68686 53.191808) (xy 105.68686 53.376432) - (xy 105.722878 53.557509) (xy 105.793531 53.728079) (xy 105.896103 53.881588) (xy 106.026652 54.012137) (xy 106.180161 54.114709) - (xy 106.350731 54.185362) (xy 106.531808 54.22138) (xy 106.716432 54.22138) (xy 106.844439 54.195918) (xy 107.207051 54.558531) - (xy 107.207051 57.047269) (xy 107.068079 56.954411) (xy 106.897509 56.883758) (xy 106.716432 56.84774) (xy 106.531808 56.84774) - (xy 106.350731 56.883758) (xy 106.180161 56.954411) (xy 106.026652 57.056983) (xy 105.896103 57.187532) (xy 105.793531 57.341041) - (xy 105.722878 57.511611) (xy 105.68686 57.692688) (xy 105.68686 57.877312) (xy 105.722878 58.058389) (xy 105.793531 58.228959) - (xy 105.896103 58.382468) (xy 106.026652 58.513017) (xy 106.180161 58.615589) (xy 106.350731 58.686242) (xy 106.531808 58.72226) - (xy 106.716432 58.72226) (xy 106.897509 58.686242) (xy 107.068079 58.615589) (xy 107.20705 58.522731) (xy 107.20705 61.016299) + (xy 104.234832 57.035) (xy 105.510419 57.035) (xy 105.510419 58.535) (xy 105.517407 58.605955) (xy 105.538104 58.674182) + (xy 105.571714 58.737061) (xy 105.616945 58.792175) (xy 105.672059 58.837406) (xy 105.734938 58.871016) (xy 105.803165 58.891713) + (xy 105.87412 58.898701) (xy 107.266172 58.898701) (xy 107.266172 60.892918) (xy 107.242084 60.937983) (xy 107.218327 61.016299) (xy 106.846 61.016299) (xy 106.775045 61.023287) (xy 106.706818 61.043984) (xy 106.643939 61.077594) (xy 106.588825 61.122825) (xy 106.543594 61.177939) (xy 106.509984 61.240818) (xy 106.489287 61.309045) (xy 106.482299 61.38) (xy 106.482299 62.752222) (xy 106.097241 63.13728) (xy 106.078588 63.152588) (xy 106.017487 63.22704) (xy 105.999707 63.260303) (xy 105.990588 63.267787) @@ -2910,1030 +3066,875 @@ (xy 110.598716 67.235236) (xy 110.583412 67.216588) (xy 110.564764 67.201284) (xy 109.45495 66.091471) (xy 109.45495 65.983701) (xy 111.01705 65.983701) (xy 111.01705 66.269997) (xy 111.014686 66.294) (xy 111.01705 66.318003) (xy 111.01705 66.318013) (xy 111.024125 66.38985) (xy 111.052084 66.482017) (xy 111.097487 66.56696) (xy 111.158588 66.641412) (xy 111.177241 66.65672) - (xy 112.287051 67.766531) (xy 112.287051 68.486724) (xy 112.201926 68.521984) (xy 112.003427 68.654617) (xy 111.834617 68.823427) - (xy 111.701984 69.021926) (xy 111.610625 69.242487) (xy 111.56405 69.476633) (xy 111.56405 69.715367) (xy 111.610625 69.949513) - (xy 111.701984 70.170074) (xy 111.834617 70.368573) (xy 112.003427 70.537383) (xy 112.201926 70.670016) (xy 112.422487 70.761375) - (xy 112.656633 70.80795) (xy 112.895367 70.80795) (xy 113.129513 70.761375) (xy 113.350074 70.670016) (xy 113.548573 70.537383) - (xy 113.717383 70.368573) (xy 113.850016 70.170074) (xy 113.941375 69.949513) (xy 113.98795 69.715367) (xy 113.98795 69.476633) - (xy 113.941375 69.242487) (xy 113.850016 69.021926) (xy 113.717383 68.823427) (xy 113.548573 68.654617) (xy 113.350074 68.521984) - (xy 113.26495 68.486725) (xy 113.26495 67.588002) (xy 113.267314 67.563999) (xy 113.26495 67.539996) (xy 113.26495 67.539986) + (xy 112.287051 67.766531) (xy 112.287051 68.483134) (xy 112.099419 68.583425) (xy 111.914875 68.734875) (xy 111.763425 68.919419) + (xy 111.650887 69.129963) (xy 111.581586 69.358416) (xy 111.558186 69.596) (xy 111.581586 69.833584) (xy 111.650887 70.062037) + (xy 111.763425 70.272581) (xy 111.914875 70.457125) (xy 112.099419 70.608575) (xy 112.309963 70.721113) (xy 112.538416 70.790414) + (xy 112.716462 70.80795) (xy 112.835538 70.80795) (xy 113.013584 70.790414) (xy 113.242037 70.721113) (xy 113.452581 70.608575) + (xy 113.637125 70.457125) (xy 113.788575 70.272581) (xy 113.901113 70.062037) (xy 113.970414 69.833584) (xy 113.993814 69.596) + (xy 113.970414 69.358416) (xy 113.901113 69.129963) (xy 113.788575 68.919419) (xy 113.637125 68.734875) (xy 113.452581 68.583425) + (xy 113.26495 68.483134) (xy 113.26495 67.588002) (xy 113.267314 67.563999) (xy 113.26495 67.539996) (xy 113.26495 67.539986) (xy 113.257875 67.468149) (xy 113.229916 67.375982) (xy 113.194648 67.310001) (xy 113.184513 67.291039) (xy 113.13872 67.23524) - (xy 113.138716 67.235236) (xy 113.123412 67.216588) (xy 113.104764 67.201284) (xy 111.99495 66.091471) (xy 111.99495 65.702906) - (xy 112.003427 65.711383) (xy 112.201926 65.844016) (xy 112.422487 65.935375) (xy 112.656633 65.98195) (xy 112.895367 65.98195) - (xy 113.129513 65.935375) (xy 113.350074 65.844016) (xy 113.548573 65.711383) (xy 113.55705 65.702906) (xy 113.55705 66.015997) + (xy 113.138716 67.235236) (xy 113.123412 67.216588) (xy 113.104764 67.201284) (xy 111.99495 66.091471) (xy 111.99495 65.69684) + (xy 112.099419 65.782575) (xy 112.309963 65.895113) (xy 112.538416 65.964414) (xy 112.716462 65.98195) (xy 112.835538 65.98195) + (xy 113.013584 65.964414) (xy 113.242037 65.895113) (xy 113.452581 65.782575) (xy 113.55705 65.69684) (xy 113.55705 66.015997) (xy 113.554686 66.04) (xy 113.55705 66.064003) (xy 113.55705 66.064013) (xy 113.564125 66.13585) (xy 113.592084 66.228017) - (xy 113.637487 66.31296) (xy 113.698588 66.387412) (xy 113.717241 66.40272) (xy 114.827051 67.512531) (xy 114.82705 68.486724) - (xy 114.741926 68.521984) (xy 114.543427 68.654617) (xy 114.374617 68.823427) (xy 114.241984 69.021926) (xy 114.150625 69.242487) - (xy 114.10405 69.476633) (xy 114.10405 69.715367) (xy 114.150625 69.949513) (xy 114.241984 70.170074) (xy 114.374617 70.368573) - (xy 114.543427 70.537383) (xy 114.741926 70.670016) (xy 114.962487 70.761375) (xy 115.196633 70.80795) (xy 115.435367 70.80795) - (xy 115.669513 70.761375) (xy 115.890074 70.670016) (xy 116.088573 70.537383) (xy 116.257383 70.368573) (xy 116.390016 70.170074) - (xy 116.481375 69.949513) (xy 116.52795 69.715367) (xy 116.52795 69.476633) (xy 116.481375 69.242487) (xy 116.390016 69.021926) - (xy 116.257383 68.823427) (xy 116.088573 68.654617) (xy 115.890074 68.521984) (xy 115.80495 68.486725) (xy 115.80495 67.334002) + (xy 113.637487 66.31296) (xy 113.698588 66.387412) (xy 113.717241 66.40272) (xy 114.827051 67.512531) (xy 114.82705 68.483134) + (xy 114.639419 68.583425) (xy 114.454875 68.734875) (xy 114.303425 68.919419) (xy 114.190887 69.129963) (xy 114.121586 69.358416) + (xy 114.098186 69.596) (xy 114.121586 69.833584) (xy 114.190887 70.062037) (xy 114.303425 70.272581) (xy 114.454875 70.457125) + (xy 114.639419 70.608575) (xy 114.849963 70.721113) (xy 115.078416 70.790414) (xy 115.256462 70.80795) (xy 115.375538 70.80795) + (xy 115.553584 70.790414) (xy 115.782037 70.721113) (xy 115.992581 70.608575) (xy 116.177125 70.457125) (xy 116.328575 70.272581) + (xy 116.441113 70.062037) (xy 116.510414 69.833584) (xy 116.533814 69.596) (xy 116.510414 69.358416) (xy 116.441113 69.129963) + (xy 116.328575 68.919419) (xy 116.177125 68.734875) (xy 115.992581 68.583425) (xy 115.80495 68.483134) (xy 115.80495 67.334002) (xy 115.807314 67.309999) (xy 115.80495 67.285996) (xy 115.80495 67.285986) (xy 115.797875 67.214149) (xy 115.769916 67.121982) (xy 115.748612 67.082125) (xy 115.724513 67.037039) (xy 115.67872 66.98124) (xy 115.678716 66.981236) (xy 115.663412 66.962588) - (xy 115.644764 66.947284) (xy 114.53495 65.837471) (xy 114.53495 65.702906) (xy 114.543427 65.711383) (xy 114.741926 65.844016) - (xy 114.962487 65.935375) (xy 115.196633 65.98195) (xy 115.435367 65.98195) (xy 115.669513 65.935375) (xy 115.890074 65.844016) - (xy 116.088573 65.711383) (xy 116.09705 65.702906) (xy 116.09705 66.015997) (xy 116.094686 66.04) (xy 116.09705 66.064003) + (xy 115.644764 66.947284) (xy 114.53495 65.837471) (xy 114.53495 65.69684) (xy 114.639419 65.782575) (xy 114.849963 65.895113) + (xy 115.078416 65.964414) (xy 115.256462 65.98195) (xy 115.375538 65.98195) (xy 115.553584 65.964414) (xy 115.782037 65.895113) + (xy 115.992581 65.782575) (xy 116.09705 65.69684) (xy 116.09705 66.015997) (xy 116.094686 66.04) (xy 116.09705 66.064003) (xy 116.09705 66.064013) (xy 116.104125 66.13585) (xy 116.132084 66.228017) (xy 116.177487 66.31296) (xy 116.238588 66.387412) - (xy 116.257241 66.40272) (xy 117.367051 67.512531) (xy 117.36705 68.486724) (xy 117.281926 68.521984) (xy 117.083427 68.654617) - (xy 116.914617 68.823427) (xy 116.781984 69.021926) (xy 116.690625 69.242487) (xy 116.64405 69.476633) (xy 116.64405 69.715367) - (xy 116.690625 69.949513) (xy 116.781984 70.170074) (xy 116.914617 70.368573) (xy 117.083427 70.537383) (xy 117.281926 70.670016) - (xy 117.502487 70.761375) (xy 117.736633 70.80795) (xy 117.975367 70.80795) (xy 118.209513 70.761375) (xy 118.430074 70.670016) - (xy 118.628573 70.537383) (xy 118.797383 70.368573) (xy 118.930016 70.170074) (xy 119.021375 69.949513) (xy 119.06795 69.715367) - (xy 119.06795 69.476633) (xy 119.021375 69.242487) (xy 118.930016 69.021926) (xy 118.797383 68.823427) (xy 118.628573 68.654617) - (xy 118.430074 68.521984) (xy 118.34495 68.486725) (xy 118.34495 67.334002) (xy 118.347314 67.309999) (xy 118.34495 67.285996) + (xy 116.257241 66.40272) (xy 117.367051 67.512531) (xy 117.36705 68.483134) (xy 117.179419 68.583425) (xy 116.994875 68.734875) + (xy 116.843425 68.919419) (xy 116.730887 69.129963) (xy 116.661586 69.358416) (xy 116.638186 69.596) (xy 116.661586 69.833584) + (xy 116.730887 70.062037) (xy 116.843425 70.272581) (xy 116.994875 70.457125) (xy 117.179419 70.608575) (xy 117.389963 70.721113) + (xy 117.618416 70.790414) (xy 117.796462 70.80795) (xy 117.915538 70.80795) (xy 118.093584 70.790414) (xy 118.322037 70.721113) + (xy 118.532581 70.608575) (xy 118.717125 70.457125) (xy 118.868575 70.272581) (xy 118.981113 70.062037) (xy 119.050414 69.833584) + (xy 119.073814 69.596) (xy 119.050414 69.358416) (xy 118.981113 69.129963) (xy 118.868575 68.919419) (xy 118.717125 68.734875) + (xy 118.532581 68.583425) (xy 118.34495 68.483134) (xy 118.34495 67.334002) (xy 118.347314 67.309999) (xy 118.34495 67.285996) (xy 118.34495 67.285986) (xy 118.337875 67.214149) (xy 118.309916 67.121982) (xy 118.288612 67.082125) (xy 118.264513 67.037039) (xy 118.21872 66.98124) (xy 118.218716 66.981236) (xy 118.203412 66.962588) (xy 118.184764 66.947284) (xy 117.07495 65.837471) - (xy 117.07495 65.702906) (xy 117.083427 65.711383) (xy 117.281926 65.844016) (xy 117.502487 65.935375) (xy 117.736633 65.98195) - (xy 117.975367 65.98195) (xy 118.209513 65.935375) (xy 118.430074 65.844016) (xy 118.628573 65.711383) (xy 118.63705 65.702906) + (xy 117.07495 65.69684) (xy 117.179419 65.782575) (xy 117.389963 65.895113) (xy 117.618416 65.964414) (xy 117.796462 65.98195) + (xy 117.915538 65.98195) (xy 118.093584 65.964414) (xy 118.322037 65.895113) (xy 118.532581 65.782575) (xy 118.63705 65.69684) (xy 118.63705 66.269997) (xy 118.634686 66.294) (xy 118.63705 66.318003) (xy 118.63705 66.318013) (xy 118.644125 66.38985) (xy 118.672084 66.482017) (xy 118.717487 66.56696) (xy 118.778588 66.641412) (xy 118.797241 66.65672) (xy 119.907051 67.766531) - (xy 119.907051 68.486724) (xy 119.821926 68.521984) (xy 119.623427 68.654617) (xy 119.454617 68.823427) (xy 119.321984 69.021926) - (xy 119.230625 69.242487) (xy 119.18405 69.476633) (xy 119.18405 69.715367) (xy 119.230625 69.949513) (xy 119.321984 70.170074) - (xy 119.454617 70.368573) (xy 119.623427 70.537383) (xy 119.821926 70.670016) (xy 120.042487 70.761375) (xy 120.276633 70.80795) - (xy 120.515367 70.80795) (xy 120.749513 70.761375) (xy 120.970074 70.670016) (xy 121.168573 70.537383) (xy 121.337383 70.368573) - (xy 121.470016 70.170074) (xy 121.561375 69.949513) (xy 121.60795 69.715367) (xy 121.60795 69.476633) (xy 121.561375 69.242487) - (xy 121.470016 69.021926) (xy 121.337383 68.823427) (xy 121.168573 68.654617) (xy 120.970074 68.521984) (xy 120.88495 68.486725) + (xy 119.907051 68.483134) (xy 119.719419 68.583425) (xy 119.534875 68.734875) (xy 119.383425 68.919419) (xy 119.270887 69.129963) + (xy 119.201586 69.358416) (xy 119.178186 69.596) (xy 119.201586 69.833584) (xy 119.270887 70.062037) (xy 119.383425 70.272581) + (xy 119.534875 70.457125) (xy 119.719419 70.608575) (xy 119.929963 70.721113) (xy 120.158416 70.790414) (xy 120.336462 70.80795) + (xy 120.455538 70.80795) (xy 120.633584 70.790414) (xy 120.862037 70.721113) (xy 121.072581 70.608575) (xy 121.257125 70.457125) + (xy 121.408575 70.272581) (xy 121.521113 70.062037) (xy 121.590414 69.833584) (xy 121.613814 69.596) (xy 121.590414 69.358416) + (xy 121.521113 69.129963) (xy 121.408575 68.919419) (xy 121.257125 68.734875) (xy 121.072581 68.583425) (xy 120.88495 68.483134) (xy 120.88495 67.588002) (xy 120.887314 67.563999) (xy 120.88495 67.539996) (xy 120.88495 67.539986) (xy 120.877875 67.468149) (xy 120.849916 67.375982) (xy 120.814648 67.310001) (xy 120.804513 67.291039) (xy 120.75872 67.23524) (xy 120.758716 67.235236) - (xy 120.743412 67.216588) (xy 120.724764 67.201284) (xy 119.61495 66.091471) (xy 119.61495 65.702906) (xy 119.623427 65.711383) - (xy 119.821926 65.844016) (xy 120.042487 65.935375) (xy 120.276633 65.98195) (xy 120.515367 65.98195) (xy 120.749513 65.935375) - (xy 120.970074 65.844016) (xy 121.168573 65.711383) (xy 121.17705 65.702906) (xy 121.17705 66.269997) (xy 121.174686 66.294) + (xy 120.743412 67.216588) (xy 120.724764 67.201284) (xy 119.61495 66.091471) (xy 119.61495 65.69684) (xy 119.719419 65.782575) + (xy 119.929963 65.895113) (xy 120.158416 65.964414) (xy 120.336462 65.98195) (xy 120.455538 65.98195) (xy 120.633584 65.964414) + (xy 120.862037 65.895113) (xy 121.072581 65.782575) (xy 121.17705 65.69684) (xy 121.17705 66.269997) (xy 121.174686 66.294) (xy 121.17705 66.318003) (xy 121.17705 66.318013) (xy 121.184125 66.38985) (xy 121.212084 66.482017) (xy 121.257487 66.56696) - (xy 121.318588 66.641412) (xy 121.337241 66.65672) (xy 122.447051 67.766531) (xy 122.447051 68.486724) (xy 122.361926 68.521984) - (xy 122.163427 68.654617) (xy 121.994617 68.823427) (xy 121.861984 69.021926) (xy 121.770625 69.242487) (xy 121.72405 69.476633) - (xy 121.72405 69.715367) (xy 121.770625 69.949513) (xy 121.861984 70.170074) (xy 121.994617 70.368573) (xy 122.163427 70.537383) - (xy 122.361926 70.670016) (xy 122.582487 70.761375) (xy 122.816633 70.80795) (xy 123.055367 70.80795) (xy 123.289513 70.761375) - (xy 123.510074 70.670016) (xy 123.708573 70.537383) (xy 123.877383 70.368573) (xy 124.010016 70.170074) (xy 124.101375 69.949513) - (xy 124.14795 69.715367) (xy 124.14795 69.476633) (xy 124.101375 69.242487) (xy 124.010016 69.021926) (xy 123.877383 68.823427) - (xy 123.708573 68.654617) (xy 123.510074 68.521984) (xy 123.42495 68.486725) (xy 123.42495 67.588002) (xy 123.427314 67.563999) + (xy 121.318588 66.641412) (xy 121.337241 66.65672) (xy 122.447051 67.766531) (xy 122.447051 68.483134) (xy 122.259419 68.583425) + (xy 122.074875 68.734875) (xy 121.923425 68.919419) (xy 121.810887 69.129963) (xy 121.741586 69.358416) (xy 121.718186 69.596) + (xy 121.741586 69.833584) (xy 121.810887 70.062037) (xy 121.923425 70.272581) (xy 122.074875 70.457125) (xy 122.259419 70.608575) + (xy 122.469963 70.721113) (xy 122.698416 70.790414) (xy 122.876462 70.80795) (xy 122.995538 70.80795) (xy 123.173584 70.790414) + (xy 123.402037 70.721113) (xy 123.612581 70.608575) (xy 123.797125 70.457125) (xy 123.948575 70.272581) (xy 124.061113 70.062037) + (xy 124.130414 69.833584) (xy 124.153814 69.596) (xy 124.130414 69.358416) (xy 124.061113 69.129963) (xy 123.948575 68.919419) + (xy 123.797125 68.734875) (xy 123.612581 68.583425) (xy 123.42495 68.483134) (xy 123.42495 67.588002) (xy 123.427314 67.563999) (xy 123.42495 67.539996) (xy 123.42495 67.539986) (xy 123.417875 67.468149) (xy 123.389916 67.375982) (xy 123.354648 67.310001) (xy 123.344513 67.291039) (xy 123.29872 67.23524) (xy 123.298716 67.235236) (xy 123.283412 67.216588) (xy 123.264764 67.201284) - (xy 122.15495 66.091471) (xy 122.15495 65.702906) (xy 122.163427 65.711383) (xy 122.361926 65.844016) (xy 122.582487 65.935375) - (xy 122.816633 65.98195) (xy 123.055367 65.98195) (xy 123.289513 65.935375) (xy 123.510074 65.844016) (xy 123.708573 65.711383) - (xy 123.71705 65.702906) (xy 123.71705 66.523997) (xy 123.714686 66.548) (xy 123.71705 66.572003) (xy 123.71705 66.572013) + (xy 122.15495 66.091471) (xy 122.15495 65.69684) (xy 122.259419 65.782575) (xy 122.469963 65.895113) (xy 122.698416 65.964414) + (xy 122.876462 65.98195) (xy 122.995538 65.98195) (xy 123.173584 65.964414) (xy 123.402037 65.895113) (xy 123.612581 65.782575) + (xy 123.71705 65.69684) (xy 123.71705 66.523997) (xy 123.714686 66.548) (xy 123.71705 66.572003) (xy 123.71705 66.572013) (xy 123.724125 66.64385) (xy 123.752084 66.736017) (xy 123.797487 66.82096) (xy 123.858588 66.895412) (xy 123.877241 66.91072) - (xy 124.987051 68.020531) (xy 124.987051 68.486724) (xy 124.901926 68.521984) (xy 124.703427 68.654617) (xy 124.534617 68.823427) - (xy 124.401984 69.021926) (xy 124.310625 69.242487) (xy 124.26405 69.476633) (xy 124.26405 69.715367) (xy 124.310625 69.949513) - (xy 124.401984 70.170074) (xy 124.534617 70.368573) (xy 124.703427 70.537383) (xy 124.901926 70.670016) (xy 125.122487 70.761375) - (xy 125.356633 70.80795) (xy 125.595367 70.80795) (xy 125.829513 70.761375) (xy 126.050074 70.670016) (xy 126.248573 70.537383) - (xy 126.417383 70.368573) (xy 126.550016 70.170074) (xy 126.641375 69.949513) (xy 126.68795 69.715367) (xy 126.68795 69.476633) - (xy 126.641375 69.242487) (xy 126.550016 69.021926) (xy 126.417383 68.823427) (xy 126.248573 68.654617) (xy 126.050074 68.521984) - (xy 125.96495 68.486725) (xy 125.96495 67.842002) (xy 125.967314 67.817999) (xy 125.96495 67.793996) (xy 125.96495 67.793986) + (xy 124.987051 68.020531) (xy 124.987051 68.483134) (xy 124.799419 68.583425) (xy 124.614875 68.734875) (xy 124.463425 68.919419) + (xy 124.350887 69.129963) (xy 124.281586 69.358416) (xy 124.258186 69.596) (xy 124.281586 69.833584) (xy 124.350887 70.062037) + (xy 124.463425 70.272581) (xy 124.614875 70.457125) (xy 124.799419 70.608575) (xy 125.009963 70.721113) (xy 125.238416 70.790414) + (xy 125.416462 70.80795) (xy 125.535538 70.80795) (xy 125.713584 70.790414) (xy 125.942037 70.721113) (xy 126.152581 70.608575) + (xy 126.337125 70.457125) (xy 126.488575 70.272581) (xy 126.601113 70.062037) (xy 126.670414 69.833584) (xy 126.693814 69.596) + (xy 126.670414 69.358416) (xy 126.601113 69.129963) (xy 126.488575 68.919419) (xy 126.337125 68.734875) (xy 126.152581 68.583425) + (xy 125.96495 68.483134) (xy 125.96495 67.842002) (xy 125.967314 67.817999) (xy 125.96495 67.793996) (xy 125.96495 67.793986) (xy 125.957875 67.722149) (xy 125.929916 67.629982) (xy 125.903566 67.580685) (xy 125.884513 67.545039) (xy 125.83872 67.48924) - (xy 125.838716 67.489236) (xy 125.823412 67.470588) (xy 125.804764 67.455284) (xy 124.69495 66.345471) (xy 124.69495 65.702906) - (xy 124.703427 65.711383) (xy 124.901926 65.844016) (xy 125.122487 65.935375) (xy 125.356633 65.98195) (xy 125.595367 65.98195) - (xy 125.829513 65.935375) (xy 126.050074 65.844016) (xy 126.218052 65.731777) (xy 126.218051 68.262998) (xy 126.215687 68.287001) - (xy 126.218051 68.311004) (xy 126.218051 68.311014) (xy 126.225126 68.382851) (xy 126.253085 68.475018) (xy 126.298488 68.559961) - (xy 126.359589 68.634413) (xy 126.378242 68.649721) (xy 126.885884 69.157364) (xy 126.850625 69.242487) (xy 126.80405 69.476633) - (xy 126.80405 69.715367) (xy 126.850625 69.949513) (xy 126.941984 70.170074) (xy 127.074617 70.368573) (xy 127.243427 70.537383) - (xy 127.441926 70.670016) (xy 127.662487 70.761375) (xy 127.896633 70.80795) (xy 128.135367 70.80795) (xy 128.369513 70.761375) - (xy 128.590074 70.670016) (xy 128.788573 70.537383) (xy 128.957383 70.368573) (xy 129.090016 70.170074) (xy 129.181375 69.949513) - (xy 129.22795 69.715367) (xy 129.22795 69.476633) (xy 129.181375 69.242487) (xy 129.090016 69.021926) (xy 128.957383 68.823427) - (xy 128.788573 68.654617) (xy 128.590074 68.521984) (xy 128.369513 68.430625) (xy 128.135367 68.38405) (xy 127.896633 68.38405) - (xy 127.662487 68.430625) (xy 127.577364 68.465884) (xy 127.195951 68.084472) (xy 127.195951 65.663907) (xy 127.243427 65.711383) - (xy 127.441926 65.844016) (xy 127.662487 65.935375) (xy 127.896633 65.98195) (xy 128.135367 65.98195) (xy 128.369513 65.935375) - (xy 128.590074 65.844016) (xy 128.788573 65.711383) (xy 128.836049 65.663907) (xy 128.836049 67.236996) (xy 128.833685 67.260999) - (xy 128.836049 67.285002) (xy 128.836049 67.285012) (xy 128.843124 67.356849) (xy 128.871083 67.449016) (xy 128.916486 67.533959) - (xy 128.977587 67.608411) (xy 128.99624 67.623719) (xy 129.754819 68.382299) (xy 129.706 68.382299) (xy 129.635045 68.389287) - (xy 129.566818 68.409984) (xy 129.503939 68.443594) (xy 129.448825 68.488825) (xy 129.403594 68.543939) (xy 129.369984 68.606818) - (xy 129.349287 68.675045) (xy 129.342299 68.746) (xy 129.342299 70.446) (xy 129.349287 70.516955) (xy 129.369984 70.585182) - (xy 129.403594 70.648061) (xy 129.448825 70.703175) (xy 129.503939 70.748406) (xy 129.566818 70.782016) (xy 129.635045 70.802713) - (xy 129.706 70.809701) (xy 131.406 70.809701) (xy 131.476955 70.802713) (xy 131.545182 70.782016) (xy 131.608061 70.748406) - (xy 131.663175 70.703175) (xy 131.708406 70.648061) (xy 131.742016 70.585182) (xy 131.762713 70.516955) (xy 131.769701 70.446) - (xy 131.769701 68.746) (xy 131.762713 68.675045) (xy 131.742016 68.606818) (xy 131.708406 68.543939) (xy 131.663175 68.488825) - (xy 131.608061 68.443594) (xy 131.545182 68.409984) (xy 131.476955 68.389287) (xy 131.406 68.382299) (xy 131.033674 68.382299) - (xy 131.009916 68.303982) (xy 130.987574 68.262183) (xy 130.964513 68.219039) (xy 130.91872 68.16324) (xy 130.918716 68.163236) - (xy 130.903412 68.144588) (xy 130.884764 68.129284) (xy 129.813949 67.05847) (xy 129.813949 65.983701) (xy 131.406 65.983701) - (xy 131.476955 65.976713) (xy 131.545182 65.956016) (xy 131.608061 65.922406) (xy 131.663175 65.877175) (xy 131.708406 65.822061) - (xy 131.742016 65.759182) (xy 131.762713 65.690955) (xy 131.769701 65.62) (xy 131.769701 63.92) (xy 131.762713 63.849045) - (xy 131.742016 63.780818) (xy 131.727682 63.754) (xy 132.47707 63.754) (xy 132.480051 63.784265) (xy 132.48005 66.517745) - (xy 132.47707 66.548) (xy 132.484434 66.62276) (xy 132.488963 66.668746) (xy 132.524183 66.784853) (xy 132.581379 66.891858) - (xy 132.65835 66.98565) (xy 132.681864 67.004947) (xy 134.004051 68.327136) (xy 134.004051 68.422964) (xy 133.847427 68.527617) - (xy 133.678617 68.696427) (xy 133.545984 68.894926) (xy 133.454625 69.115487) (xy 133.40805 69.349633) (xy 133.40805 69.588367) - (xy 133.454625 69.822513) (xy 133.545984 70.043074) (xy 133.678617 70.241573) (xy 133.847427 70.410383) (xy 134.045926 70.543016) - (xy 134.266487 70.634375) (xy 134.500633 70.68095) (xy 134.739367 70.68095) (xy 134.973513 70.634375) (xy 135.194074 70.543016) - (xy 135.392573 70.410383) (xy 135.561383 70.241573) (xy 135.694016 70.043074) (xy 135.785375 69.822513) (xy 135.83195 69.588367) - (xy 135.83195 69.349633) (xy 135.785375 69.115487) (xy 135.694016 68.894926) (xy 135.561383 68.696427) (xy 135.392573 68.527617) - (xy 135.23595 68.422965) (xy 135.23595 68.102252) (xy 135.23893 68.071999) (xy 135.233221 68.014041) (xy 135.227037 67.951253) - (xy 135.191817 67.835146) (xy 135.134621 67.728141) (xy 135.05765 67.63435) (xy 135.034146 67.615061) (xy 133.71195 66.292867) - (xy 133.71195 65.575906) (xy 133.847427 65.711383) (xy 134.045926 65.844016) (xy 134.266487 65.935375) (xy 134.500633 65.98195) - (xy 134.739367 65.98195) (xy 134.973513 65.935375) (xy 135.194074 65.844016) (xy 135.392573 65.711383) (xy 135.40105 65.702906) - (xy 135.40105 66.172862) (xy 135.375379 66.204142) (xy 135.318184 66.311146) (xy 135.282963 66.427254) (xy 135.27107 66.548) - (xy 135.282963 66.668746) (xy 135.318184 66.784854) (xy 135.375379 66.891858) (xy 135.433065 66.962148) (xy 136.544051 68.073136) - (xy 136.544051 68.422964) (xy 136.387427 68.527617) (xy 136.218617 68.696427) (xy 136.085984 68.894926) (xy 135.994625 69.115487) - (xy 135.94805 69.349633) (xy 135.94805 69.588367) (xy 135.994625 69.822513) (xy 136.085984 70.043074) (xy 136.218617 70.241573) - (xy 136.387427 70.410383) (xy 136.585926 70.543016) (xy 136.806487 70.634375) (xy 137.040633 70.68095) (xy 137.279367 70.68095) - (xy 137.513513 70.634375) (xy 137.734074 70.543016) (xy 137.932573 70.410383) (xy 138.101383 70.241573) (xy 138.234016 70.043074) - (xy 138.325375 69.822513) (xy 138.37195 69.588367) (xy 138.37195 69.349633) (xy 138.325375 69.115487) (xy 138.234016 68.894926) - (xy 138.101383 68.696427) (xy 137.932573 68.527617) (xy 137.77595 68.422965) (xy 137.77595 67.848252) (xy 137.77893 67.817999) - (xy 137.77595 67.787745) (xy 137.767037 67.697253) (xy 137.731817 67.581146) (xy 137.674621 67.474141) (xy 137.59765 67.38035) - (xy 137.574146 67.361061) (xy 136.37895 66.165867) (xy 136.37895 65.702906) (xy 136.387427 65.711383) (xy 136.585926 65.844016) - (xy 136.806487 65.935375) (xy 137.040633 65.98195) (xy 137.279367 65.98195) (xy 137.513513 65.935375) (xy 137.734074 65.844016) - (xy 137.932573 65.711383) (xy 138.101383 65.542573) (xy 138.234016 65.344074) (xy 138.325375 65.123513) (xy 138.37195 64.889367) - (xy 138.37195 64.650633) (xy 138.325375 64.416487) (xy 138.234016 64.195926) (xy 138.101383 63.997427) (xy 137.932573 63.828617) - (xy 137.734074 63.695984) (xy 137.513513 63.604625) (xy 137.279367 63.55805) (xy 137.040633 63.55805) (xy 136.806487 63.604625) - (xy 136.585926 63.695984) (xy 136.523161 63.737922) (xy 136.855883 63.405201) (xy 137.040633 63.44195) (xy 137.279367 63.44195) - (xy 137.513513 63.395375) (xy 137.734074 63.304016) (xy 137.932573 63.171383) (xy 138.101383 63.002573) (xy 138.234016 62.804074) - (xy 138.325375 62.583513) (xy 138.37195 62.349367) (xy 138.37195 62.110633) (xy 138.325375 61.876487) (xy 138.234016 61.655926) - (xy 138.101383 61.457427) (xy 138.023956 61.38) (xy 138.486299 61.38) (xy 138.486299 63.08) (xy 138.493287 63.150955) - (xy 138.513984 63.219182) (xy 138.547594 63.282061) (xy 138.592825 63.337175) (xy 138.647939 63.382406) (xy 138.710818 63.416016) - (xy 138.779045 63.436713) (xy 138.85 63.443701) (xy 140.442051 63.443701) (xy 140.442051 63.556299) (xy 138.85 63.556299) - (xy 138.779045 63.563287) (xy 138.710818 63.583984) (xy 138.647939 63.617594) (xy 138.592825 63.662825) (xy 138.547594 63.717939) - (xy 138.513984 63.780818) (xy 138.493287 63.849045) (xy 138.486299 63.92) (xy 138.486299 65.62) (xy 138.493287 65.690955) - (xy 138.513984 65.759182) (xy 138.547594 65.822061) (xy 138.592825 65.877175) (xy 138.647939 65.922406) (xy 138.710818 65.956016) - (xy 138.779045 65.976713) (xy 138.85 65.983701) (xy 140.442052 65.983701) (xy 140.442052 66.497863) (xy 139.28586 67.654057) - (xy 139.262351 67.67335) (xy 139.205295 67.742874) (xy 139.185379 67.767142) (xy 139.128184 67.874146) (xy 139.092963 67.990254) - (xy 139.08107 68.111) (xy 139.084051 68.141265) (xy 139.084051 68.255299) (xy 138.85 68.255299) (xy 138.779045 68.262287) - (xy 138.710818 68.282984) (xy 138.647939 68.316594) (xy 138.592825 68.361825) (xy 138.547594 68.416939) (xy 138.513984 68.479818) - (xy 138.493287 68.548045) (xy 138.486299 68.619) (xy 138.486299 70.319) (xy 138.493287 70.389955) (xy 138.513984 70.458182) - (xy 138.547594 70.521061) (xy 138.592825 70.576175) (xy 138.647939 70.621406) (xy 138.710818 70.655016) (xy 138.779045 70.675713) - (xy 138.85 70.682701) (xy 140.55 70.682701) (xy 140.620955 70.675713) (xy 140.689182 70.655016) (xy 140.752061 70.621406) - (xy 140.807175 70.576175) (xy 140.852406 70.521061) (xy 140.886016 70.458182) (xy 140.906713 70.389955) (xy 140.913701 70.319) - (xy 140.913701 69.762) (xy 144.96207 69.762) (xy 144.96505 70.311963) (xy 145.119037 70.46595) (xy 146.28495 70.46595) - (xy 146.28495 69.300037) (xy 146.57705 69.300037) (xy 146.57705 70.46595) (xy 147.742963 70.46595) (xy 147.89695 70.311963) - (xy 147.89993 69.762) (xy 147.888037 69.641253) (xy 147.852817 69.525146) (xy 147.795621 69.418141) (xy 147.71865 69.32435) - (xy 147.624859 69.247379) (xy 147.517854 69.190183) (xy 147.401747 69.154963) (xy 147.281 69.14307) (xy 146.731037 69.14605) - (xy 146.57705 69.300037) (xy 146.28495 69.300037) (xy 146.130963 69.14605) (xy 145.581 69.14307) (xy 145.460253 69.154963) - (xy 145.344146 69.190183) (xy 145.237141 69.247379) (xy 145.14335 69.32435) (xy 145.066379 69.418141) (xy 145.009183 69.525146) - (xy 144.973963 69.641253) (xy 144.96207 69.762) (xy 140.913701 69.762) (xy 140.913701 68.619) (xy 140.906713 68.548045) - (xy 140.886016 68.479818) (xy 140.852406 68.416939) (xy 140.807175 68.361825) (xy 140.752061 68.316594) (xy 140.689182 68.282984) - (xy 140.620955 68.262287) (xy 140.55 68.255299) (xy 140.426784 68.255299) (xy 141.472153 67.209932) (xy 141.495651 67.190648) - (xy 141.516577 67.165149) (xy 141.572621 67.096859) (xy 141.629817 66.989854) (xy 141.630368 66.988039) (xy 141.665038 66.873745) - (xy 141.673951 66.783253) (xy 141.676931 66.753) (xy 141.673951 66.722747) (xy 141.673949 62.260265) (xy 141.67693 62.23) - (xy 141.665037 62.109253) (xy 141.630142 61.994217) (xy 146.19605 61.994217) (xy 146.19605 62.465783) (xy 146.288048 62.928289) - (xy 146.468509 63.36396) (xy 146.730498 63.756054) (xy 147.063946 64.089502) (xy 147.45604 64.351491) (xy 147.891711 64.531952) - (xy 148.354217 64.62395) (xy 148.825783 64.62395) (xy 149.288289 64.531952) (xy 149.72396 64.351491) (xy 150.116054 64.089502) - (xy 150.449502 63.756054) (xy 150.711491 63.36396) (xy 150.891952 62.928289) (xy 150.98395 62.465783) (xy 150.98395 61.994217) - (xy 150.891952 61.531711) (xy 150.711491 61.09604) (xy 150.449502 60.703946) (xy 150.116054 60.370498) (xy 149.72396 60.108509) - (xy 149.288289 59.928048) (xy 148.825783 59.83605) (xy 148.354217 59.83605) (xy 147.891711 59.928048) (xy 147.45604 60.108509) - (xy 147.063946 60.370498) (xy 146.730498 60.703946) (xy 146.468509 61.09604) (xy 146.288048 61.531711) (xy 146.19605 61.994217) - (xy 141.630142 61.994217) (xy 141.629817 61.993146) (xy 141.572621 61.886141) (xy 141.49565 61.79235) (xy 141.401859 61.715379) - (xy 141.294854 61.658183) (xy 141.178747 61.622963) (xy 141.088255 61.61405) (xy 141.088247 61.61405) (xy 141.058 61.611071) - (xy 141.027755 61.61405) (xy 140.913701 61.61405) (xy 140.913701 61.38) (xy 140.906713 61.309045) (xy 140.886016 61.240818) - (xy 140.852406 61.177939) (xy 140.807175 61.122825) (xy 140.752061 61.077594) (xy 140.689182 61.043984) (xy 140.620955 61.023287) - (xy 140.55 61.016299) (xy 140.426784 61.016299) (xy 143.419679 58.023405) (xy 143.426638 58.058389) (xy 143.497291 58.228959) - (xy 143.599863 58.382468) (xy 143.730412 58.513017) (xy 143.883921 58.615589) (xy 144.054491 58.686242) (xy 144.235568 58.72226) - (xy 144.420192 58.72226) (xy 144.601269 58.686242) (xy 144.771839 58.615589) (xy 144.925348 58.513017) (xy 145.055897 58.382468) - (xy 145.158469 58.228959) (xy 145.229122 58.058389) (xy 145.26514 57.877312) (xy 145.26514 57.692688) (xy 145.229122 57.511611) - (xy 145.158469 57.341041) (xy 145.055897 57.187532) (xy 144.925348 57.056983) (xy 144.771839 56.954411) (xy 144.601269 56.883758) - (xy 144.566285 56.876799) (xy 144.742028 56.701057) (xy 144.76553 56.68177) (xy 144.842501 56.587979) (xy 144.899697 56.480974) - (xy 144.901205 56.476) (xy 146.35907 56.476) (xy 146.370963 56.596747) (xy 146.406183 56.712854) (xy 146.463379 56.819859) - (xy 146.54035 56.91365) (xy 146.634141 56.990621) (xy 146.741146 57.047817) (xy 146.857253 57.083037) (xy 146.978 57.09493) - (xy 147.527963 57.09195) (xy 147.68195 56.937963) (xy 147.68195 55.77205) (xy 147.97405 55.77205) (xy 147.97405 56.937963) - (xy 148.128037 57.09195) (xy 148.678 57.09493) (xy 148.798747 57.083037) (xy 148.914854 57.047817) (xy 149.021859 56.990621) - (xy 149.11565 56.91365) (xy 149.192621 56.819859) (xy 149.249817 56.712854) (xy 149.285037 56.596747) (xy 149.29693 56.476) - (xy 149.29395 55.926037) (xy 149.139963 55.77205) (xy 147.97405 55.77205) (xy 147.68195 55.77205) (xy 146.516037 55.77205) - (xy 146.36205 55.926037) (xy 146.35907 56.476) (xy 144.901205 56.476) (xy 144.934917 56.364867) (xy 144.94383 56.274375) - (xy 144.94383 56.274374) (xy 144.94681 56.24412) (xy 144.94383 56.213865) (xy 144.94383 54.776) (xy 146.35907 54.776) - (xy 146.36205 55.325963) (xy 146.516037 55.47995) (xy 147.68195 55.47995) (xy 147.68195 54.314037) (xy 147.97405 54.314037) - (xy 147.97405 55.47995) (xy 149.139963 55.47995) (xy 149.29395 55.325963) (xy 149.29693 54.776) (xy 149.285037 54.655253) - (xy 149.249817 54.539146) (xy 149.192621 54.432141) (xy 149.11565 54.33835) (xy 149.021859 54.261379) (xy 148.914854 54.204183) - (xy 148.798747 54.168963) (xy 148.678 54.15707) (xy 148.128037 54.16005) (xy 147.97405 54.314037) (xy 147.68195 54.314037) - (xy 147.527963 54.16005) (xy 146.978 54.15707) (xy 146.857253 54.168963) (xy 146.741146 54.204183) (xy 146.634141 54.261379) - (xy 146.54035 54.33835) (xy 146.463379 54.432141) (xy 146.406183 54.539146) (xy 146.370963 54.655253) (xy 146.35907 54.776) - (xy 144.94383 54.776) (xy 144.94383 53.993655) (xy 145.055897 53.881588) (xy 145.158469 53.728079) (xy 145.229122 53.557509) - (xy 145.26514 53.376432) (xy 145.26514 53.191808) (xy 145.229122 53.010731) (xy 145.158469 52.840161) (xy 145.055897 52.686652) - (xy 144.925348 52.556103) (xy 144.771839 52.453531) (xy 144.601269 52.382878) (xy 144.420192 52.34686) (xy 144.235568 52.34686) - (xy 144.054491 52.382878) (xy 143.883921 52.453531) (xy 143.730412 52.556103) (xy 143.599863 52.686652) (xy 143.497291 52.840161) - (xy 143.426638 53.010731) (xy 143.39062 53.191808) (xy 143.39062 53.376432) (xy 143.426638 53.557509) (xy 143.497291 53.728079) - (xy 143.599863 53.881588) (xy 143.71193 53.993655) (xy 143.71193 54.127985) (xy 143.711931 54.127995) (xy 143.71193 55.988985) - (xy 141.750474 57.950442) (xy 141.76502 57.877312) (xy 141.76502 57.692688) (xy 141.729002 57.511611) (xy 141.658349 57.341041) - (xy 141.555777 57.187532) (xy 141.425228 57.056983) (xy 141.271719 56.954411) (xy 141.101149 56.883758) (xy 140.920072 56.84774) - (xy 140.735448 56.84774) (xy 140.554371 56.883758) (xy 140.383801 56.954411) (xy 140.230292 57.056983) (xy 140.099743 57.187532) - (xy 139.997171 57.341041) (xy 139.926518 57.511611) (xy 139.8905 57.692688) (xy 139.8905 57.877312) (xy 139.926518 58.058389) - (xy 139.997171 58.228959) (xy 140.099743 58.382468) (xy 140.230292 58.513017) (xy 140.383801 58.615589) (xy 140.554371 58.686242) - (xy 140.735448 58.72226) (xy 140.920072 58.72226) (xy 140.993203 58.707714) (xy 139.28586 60.415057) (xy 139.262351 60.43435) - (xy 139.213502 60.493874) (xy 139.185379 60.528142) (xy 139.128184 60.635146) (xy 139.092963 60.751254) (xy 139.08107 60.872) - (xy 139.084051 60.902265) (xy 139.084051 61.016299) (xy 138.85 61.016299) (xy 138.779045 61.023287) (xy 138.710818 61.043984) - (xy 138.647939 61.077594) (xy 138.592825 61.122825) (xy 138.547594 61.177939) (xy 138.513984 61.240818) (xy 138.493287 61.309045) - (xy 138.486299 61.38) (xy 138.023956 61.38) (xy 137.932573 61.288617) (xy 137.794634 61.196449) (xy 139.479147 59.511938) - (xy 139.50265 59.49265) (xy 139.579621 59.398859) (xy 139.636817 59.291854) (xy 139.672037 59.175747) (xy 139.67835 59.11165) - (xy 139.68393 59.055) (xy 139.68095 59.024745) (xy 139.68095 55.302013) (xy 140.761584 54.22138) (xy 140.920072 54.22138) - (xy 141.101149 54.185362) (xy 141.271719 54.114709) (xy 141.425228 54.012137) (xy 141.555777 53.881588) (xy 141.658349 53.728079) - (xy 141.729002 53.557509) (xy 141.76502 53.376432) (xy 141.76502 53.191808) (xy 141.729002 53.010731) (xy 141.658349 52.840161) - (xy 141.555777 52.686652) (xy 141.425228 52.556103) (xy 141.271719 52.453531) (xy 141.101149 52.382878) (xy 140.920072 52.34686) - (xy 140.735448 52.34686) (xy 140.554371 52.382878) (xy 140.383801 52.453531) (xy 140.230292 52.556103) (xy 140.099743 52.686652) - (xy 139.997171 52.840161) (xy 139.926518 53.010731) (xy 139.8905 53.191808) (xy 139.8905 53.350296) (xy 138.65086 54.589937) - (xy 138.627351 54.60923) (xy 138.567558 54.682089) (xy 138.550379 54.703022) (xy 138.493184 54.810026) (xy 138.457963 54.926134) - (xy 138.44607 55.04688) (xy 138.449051 55.077145) (xy 138.44905 58.799865) (xy 136.860279 60.388638) (xy 136.860279 58.599952) - (xy 136.883681 58.615589) (xy 137.054251 58.686242) (xy 137.235328 58.72226) (xy 137.419952 58.72226) (xy 137.601029 58.686242) - (xy 137.771599 58.615589) (xy 137.925108 58.513017) (xy 138.055657 58.382468) (xy 138.158229 58.228959) (xy 138.228882 58.058389) - (xy 138.2649 57.877312) (xy 138.2649 57.692688) (xy 138.228882 57.511611) (xy 138.158229 57.341041) (xy 138.055657 57.187532) - (xy 137.925108 57.056983) (xy 137.771599 56.954411) (xy 137.601029 56.883758) (xy 137.419952 56.84774) (xy 137.235328 56.84774) - (xy 137.054251 56.883758) (xy 136.883681 56.954411) (xy 136.860279 56.970048) (xy 136.860279 54.622565) (xy 137.209266 54.273579) - (xy 137.209275 54.273569) (xy 137.261463 54.22138) (xy 137.419952 54.22138) (xy 137.601029 54.185362) (xy 137.771599 54.114709) - (xy 137.925108 54.012137) (xy 138.055657 53.881588) (xy 138.158229 53.728079) (xy 138.228882 53.557509) (xy 138.2649 53.376432) - (xy 138.2649 53.191808) (xy 138.228882 53.010731) (xy 138.158229 52.840161) (xy 138.055657 52.686652) (xy 137.925108 52.556103) - (xy 137.771599 52.453531) (xy 137.601029 52.382878) (xy 137.419952 52.34686) (xy 137.235328 52.34686) (xy 137.054251 52.382878) - (xy 136.883681 52.453531) (xy 136.730172 52.556103) (xy 136.599623 52.686652) (xy 136.497051 52.840161) (xy 136.426398 53.010731) - (xy 136.39038 53.191808) (xy 136.39038 53.350297) (xy 136.338191 53.402485) (xy 136.338181 53.402494) (xy 135.830188 53.910489) - (xy 135.80668 53.929781) (xy 135.765322 53.980177) (xy 135.729708 54.023573) (xy 135.672513 54.130577) (xy 135.637292 54.246685) - (xy 135.625399 54.367431) (xy 135.62838 54.397696) (xy 135.628379 60.350537) (xy 134.924117 61.054799) (xy 134.739367 61.01805) - (xy 134.500633 61.01805) (xy 134.266487 61.064625) (xy 134.045926 61.155984) (xy 133.847427 61.288617) (xy 133.678617 61.457427) - (xy 133.545984 61.655926) (xy 133.454625 61.876487) (xy 133.40805 62.110633) (xy 133.40805 62.349367) (xy 133.444799 62.534117) - (xy 132.68186 63.297057) (xy 132.658351 63.31635) (xy 132.598672 63.38907) (xy 132.581379 63.410142) (xy 132.524184 63.517146) - (xy 132.488963 63.633254) (xy 132.47707 63.754) (xy 131.727682 63.754) (xy 131.708406 63.717939) (xy 131.663175 63.662825) + (xy 125.838716 67.489236) (xy 125.823412 67.470588) (xy 125.804764 67.455284) (xy 124.69495 66.345471) (xy 124.69495 65.69684) + (xy 124.799419 65.782575) (xy 125.009963 65.895113) (xy 125.238416 65.964414) (xy 125.416462 65.98195) (xy 125.535538 65.98195) + (xy 125.713584 65.964414) (xy 125.942037 65.895113) (xy 126.152581 65.782575) (xy 126.218052 65.728845) (xy 126.218051 68.262998) + (xy 126.215687 68.287001) (xy 126.218051 68.311004) (xy 126.218051 68.311014) (xy 126.225126 68.382851) (xy 126.253085 68.475018) + (xy 126.298488 68.559961) (xy 126.359589 68.634413) (xy 126.378242 68.649721) (xy 126.883345 69.154825) (xy 126.821586 69.358416) + (xy 126.798186 69.596) (xy 126.821586 69.833584) (xy 126.890887 70.062037) (xy 127.003425 70.272581) (xy 127.154875 70.457125) + (xy 127.339419 70.608575) (xy 127.549963 70.721113) (xy 127.778416 70.790414) (xy 127.956462 70.80795) (xy 128.075538 70.80795) + (xy 128.253584 70.790414) (xy 128.482037 70.721113) (xy 128.692581 70.608575) (xy 128.877125 70.457125) (xy 129.028575 70.272581) + (xy 129.141113 70.062037) (xy 129.210414 69.833584) (xy 129.233814 69.596) (xy 129.210414 69.358416) (xy 129.141113 69.129963) + (xy 129.028575 68.919419) (xy 128.877125 68.734875) (xy 128.692581 68.583425) (xy 128.482037 68.470887) (xy 128.253584 68.401586) + (xy 128.075538 68.38405) (xy 127.956462 68.38405) (xy 127.778416 68.401586) (xy 127.574825 68.463345) (xy 127.195951 68.084472) + (xy 127.195951 65.664835) (xy 127.339419 65.782575) (xy 127.549963 65.895113) (xy 127.778416 65.964414) (xy 127.956462 65.98195) + (xy 128.075538 65.98195) (xy 128.253584 65.964414) (xy 128.482037 65.895113) (xy 128.692581 65.782575) (xy 128.836049 65.664835) + (xy 128.836049 67.236996) (xy 128.833685 67.260999) (xy 128.836049 67.285002) (xy 128.836049 67.285012) (xy 128.843124 67.356849) + (xy 128.871083 67.449016) (xy 128.916486 67.533959) (xy 128.977587 67.608411) (xy 128.99624 67.623719) (xy 129.754819 68.382299) + (xy 129.706 68.382299) (xy 129.635045 68.389287) (xy 129.566818 68.409984) (xy 129.503939 68.443594) (xy 129.448825 68.488825) + (xy 129.403594 68.543939) (xy 129.369984 68.606818) (xy 129.349287 68.675045) (xy 129.342299 68.746) (xy 129.342299 70.446) + (xy 129.349287 70.516955) (xy 129.369984 70.585182) (xy 129.403594 70.648061) (xy 129.448825 70.703175) (xy 129.503939 70.748406) + (xy 129.566818 70.782016) (xy 129.635045 70.802713) (xy 129.706 70.809701) (xy 131.406 70.809701) (xy 131.476955 70.802713) + (xy 131.545182 70.782016) (xy 131.608061 70.748406) (xy 131.663175 70.703175) (xy 131.708406 70.648061) (xy 131.742016 70.585182) + (xy 131.762713 70.516955) (xy 131.769701 70.446) (xy 131.769701 68.746) (xy 131.762713 68.675045) (xy 131.742016 68.606818) + (xy 131.708406 68.543939) (xy 131.663175 68.488825) (xy 131.608061 68.443594) (xy 131.545182 68.409984) (xy 131.476955 68.389287) + (xy 131.406 68.382299) (xy 131.033674 68.382299) (xy 131.009916 68.303982) (xy 130.987574 68.262183) (xy 130.964513 68.219039) + (xy 130.91872 68.16324) (xy 130.918716 68.163236) (xy 130.903412 68.144588) (xy 130.884764 68.129284) (xy 129.813949 67.05847) + (xy 129.813949 65.983701) (xy 131.406 65.983701) (xy 131.476955 65.976713) (xy 131.545182 65.956016) (xy 131.608061 65.922406) + (xy 131.663175 65.877175) (xy 131.708406 65.822061) (xy 131.742016 65.759182) (xy 131.762713 65.690955) (xy 131.769701 65.62) + (xy 131.769701 63.92) (xy 131.762713 63.849045) (xy 131.742016 63.780818) (xy 131.708406 63.717939) (xy 131.663175 63.662825) (xy 131.608061 63.617594) (xy 131.545182 63.583984) (xy 131.476955 63.563287) (xy 131.406 63.556299) (xy 129.813949 63.556299) (xy 129.813949 63.443701) (xy 131.406 63.443701) (xy 131.476955 63.436713) (xy 131.545182 63.416016) (xy 131.608061 63.382406) (xy 131.663175 63.337175) (xy 131.708406 63.282061) (xy 131.742016 63.219182) (xy 131.762713 63.150955) (xy 131.769701 63.08) (xy 131.769701 61.38) (xy 131.762713 61.309045) (xy 131.742016 61.240818) (xy 131.708406 61.177939) (xy 131.663175 61.122825) - (xy 131.608061 61.077594) (xy 131.545182 61.043984) (xy 131.476955 61.023287) (xy 131.406 61.016299) (xy 131.04495 61.016299) - (xy 131.04495 60.242488) (xy 133.309129 57.978309) (xy 133.325058 58.058389) (xy 133.395711 58.228959) (xy 133.498283 58.382468) - (xy 133.628832 58.513017) (xy 133.782341 58.615589) (xy 133.952911 58.686242) (xy 134.133988 58.72226) (xy 134.318612 58.72226) - (xy 134.499689 58.686242) (xy 134.670259 58.615589) (xy 134.823768 58.513017) (xy 134.954317 58.382468) (xy 135.056889 58.228959) - (xy 135.127542 58.058389) (xy 135.16356 57.877312) (xy 135.16356 57.692688) (xy 135.127542 57.511611) (xy 135.056889 57.341041) - (xy 134.954317 57.187532) (xy 134.823768 57.056983) (xy 134.670259 56.954411) (xy 134.499689 56.883758) (xy 134.41961 56.867829) - (xy 134.555064 56.732375) (xy 134.573712 56.717071) (xy 134.589016 56.698423) (xy 134.58902 56.698419) (xy 134.634813 56.64262) - (xy 134.664019 56.587979) (xy 134.680216 56.557677) (xy 134.708175 56.46551) (xy 134.71525 56.393673) (xy 134.71525 56.393663) - (xy 134.717614 56.36966) (xy 134.71525 56.345657) (xy 134.71525 54.084647) (xy 134.823768 54.012137) (xy 134.954317 53.881588) - (xy 135.056889 53.728079) (xy 135.127542 53.557509) (xy 135.16356 53.376432) (xy 135.16356 53.191808) (xy 135.127542 53.010731) - (xy 135.056889 52.840161) (xy 134.954317 52.686652) (xy 134.823768 52.556103) (xy 134.670259 52.453531) (xy 134.499689 52.382878) - (xy 134.318612 52.34686) (xy 134.133988 52.34686) (xy 133.952911 52.382878) (xy 133.782341 52.453531) (xy 133.628832 52.556103) - (xy 133.498283 52.686652) (xy 133.395711 52.840161) (xy 133.325058 53.010731) (xy 133.28904 53.191808) (xy 133.28904 53.376432) - (xy 133.325058 53.557509) (xy 133.395711 53.728079) (xy 133.498283 53.881588) (xy 133.628832 54.012137) (xy 133.73735 54.084647) - (xy 133.73735 54.121744) (xy 133.737351 54.121754) (xy 133.73735 56.167129) (xy 132.16382 57.740659) (xy 132.16382 57.692688) - (xy 132.127802 57.511611) (xy 132.057149 57.341041) (xy 131.954577 57.187532) (xy 131.824028 57.056983) (xy 131.670519 56.954411) - (xy 131.499949 56.883758) (xy 131.318872 56.84774) (xy 131.2709 56.84774) (xy 131.555319 56.563321) (xy 131.573972 56.548013) - (xy 131.628989 56.480975) (xy 131.635073 56.473562) (xy 131.659341 56.428159) (xy 131.680476 56.388619) (xy 131.708435 56.296452) - (xy 131.71551 56.224615) (xy 131.71551 56.224603) (xy 131.717874 56.200602) (xy 131.71551 56.176601) (xy 131.71551 54.084647) - (xy 131.824028 54.012137) (xy 131.954577 53.881588) (xy 132.057149 53.728079) (xy 132.127802 53.557509) (xy 132.16382 53.376432) - (xy 132.16382 53.191808) (xy 132.127802 53.010731) (xy 132.057149 52.840161) (xy 131.954577 52.686652) (xy 131.824028 52.556103) - (xy 131.670519 52.453531) (xy 131.499949 52.382878) (xy 131.318872 52.34686) (xy 131.134248 52.34686) (xy 130.953171 52.382878) - (xy 130.782601 52.453531) (xy 130.629092 52.556103) (xy 130.498543 52.686652) (xy 130.395971 52.840161) (xy 130.325318 53.010731) - (xy 130.2893 53.191808) (xy 130.2893 53.376432) (xy 130.325318 53.557509) (xy 130.395971 53.728079) (xy 130.498543 53.881588) - (xy 130.629092 54.012137) (xy 130.73761 54.084647) (xy 130.73761 54.121744) (xy 130.737611 54.121754) (xy 130.73761 55.998072) - (xy 129.143991 57.591691) (xy 129.128062 57.511611) (xy 129.057409 57.341041) (xy 128.954837 57.187532) (xy 128.824288 57.056983) - (xy 128.670779 56.954411) (xy 128.500209 56.883758) (xy 128.42013 56.867829) (xy 128.555584 56.732375) (xy 128.574232 56.717071) - (xy 128.589536 56.698423) (xy 128.58954 56.698419) (xy 128.635334 56.64262) (xy 128.680735 56.557678) (xy 128.680736 56.557677) - (xy 128.708695 56.46551) (xy 128.71577 56.393673) (xy 128.71577 56.393662) (xy 128.718134 56.369659) (xy 128.71577 56.345656) - (xy 128.71577 54.084647) (xy 128.824288 54.012137) (xy 128.954837 53.881588) (xy 129.057409 53.728079) (xy 129.128062 53.557509) - (xy 129.16408 53.376432) (xy 129.16408 53.191808) (xy 129.128062 53.010731) (xy 129.057409 52.840161) (xy 128.954837 52.686652) - (xy 128.824288 52.556103) (xy 128.670779 52.453531) (xy 128.500209 52.382878) (xy 128.319132 52.34686) (xy 128.134508 52.34686) - (xy 127.953431 52.382878) (xy 127.782861 52.453531) (xy 127.629352 52.556103) (xy 127.498803 52.686652) (xy 127.396231 52.840161) - (xy 127.325578 53.010731) (xy 127.28956 53.191808) (xy 127.28956 53.376432) (xy 127.325578 53.557509) (xy 127.396231 53.728079) - (xy 127.498803 53.881588) (xy 127.629352 54.012137) (xy 127.73787 54.084647) (xy 127.73787 54.121744) (xy 127.737871 54.121754) - (xy 127.73787 56.167129) (xy 126.16434 57.74066) (xy 126.16434 57.692688) (xy 126.128322 57.511611) (xy 126.057669 57.341041) - (xy 125.955097 57.187532) (xy 125.824548 57.056983) (xy 125.671039 56.954411) (xy 125.500469 56.883758) (xy 125.319392 56.84774) - (xy 125.271421 56.84774) (xy 125.555844 56.563317) (xy 125.574492 56.548013) (xy 125.589796 56.529365) (xy 125.5898 56.529361) - (xy 125.635593 56.473562) (xy 125.659861 56.428159) (xy 125.680996 56.388619) (xy 125.708955 56.296452) (xy 125.71603 56.224615) - (xy 125.71603 56.224603) (xy 125.718394 56.200602) (xy 125.71603 56.176601) (xy 125.71603 54.084647) (xy 125.824548 54.012137) - (xy 125.955097 53.881588) (xy 126.057669 53.728079) (xy 126.128322 53.557509) (xy 126.16434 53.376432) (xy 126.16434 53.191808) - (xy 126.128322 53.010731) (xy 126.057669 52.840161) (xy 125.955097 52.686652) (xy 125.824548 52.556103) (xy 125.671039 52.453531) - (xy 125.500469 52.382878) (xy 125.319392 52.34686) (xy 125.134768 52.34686) (xy 124.953691 52.382878) (xy 124.783121 52.453531) - (xy 124.629612 52.556103) (xy 124.499063 52.686652) (xy 124.396491 52.840161) (xy 124.325838 53.010731) (xy 124.28982 53.191808) - (xy 124.28982 53.376432) (xy 124.325838 53.557509) (xy 124.396491 53.728079) (xy 124.499063 53.881588) (xy 124.629612 54.012137) - (xy 124.73813 54.084647) (xy 124.73813 54.121744) (xy 124.738131 54.121754) (xy 124.73813 55.998071) (xy 123.144511 57.591691) - (xy 123.128582 57.511611) (xy 123.057929 57.341041) (xy 122.955357 57.187532) (xy 122.824808 57.056983) (xy 122.671299 56.954411) - (xy 122.500729 56.883758) (xy 122.319652 56.84774) (xy 122.135028 56.84774) (xy 121.953951 56.883758) (xy 121.783381 56.954411) - (xy 121.629872 57.056983) (xy 121.499323 57.187532) (xy 121.396751 57.341041) (xy 121.326098 57.511611) (xy 121.29008 57.692688) - (xy 121.29008 57.877312) (xy 121.326098 58.058389) (xy 121.396751 58.228959) (xy 121.499323 58.382468) (xy 121.629872 58.513017) - (xy 121.783381 58.615589) (xy 121.953951 58.686242) (xy 122.135028 58.72226) (xy 122.319652 58.72226) (xy 122.447051 58.696919) - (xy 122.44705 61.120724) (xy 122.361926 61.155984) (xy 122.163427 61.288617) (xy 121.994617 61.457427) (xy 121.861984 61.655926) - (xy 121.770625 61.876487) (xy 121.72405 62.110633) (xy 121.72405 62.349367) (xy 121.770625 62.583513) (xy 121.805884 62.668636) - (xy 121.337237 63.137284) (xy 121.318589 63.152588) (xy 121.303285 63.171236) (xy 121.30328 63.171241) (xy 121.257487 63.22704) - (xy 121.216343 63.304016) (xy 121.212085 63.311982) (xy 121.185093 63.400963) (xy 121.184126 63.40415) (xy 121.174686 63.5) - (xy 121.177051 63.524013) (xy 121.177051 63.837095) (xy 121.168573 63.828617) (xy 120.970074 63.695984) (xy 120.749513 63.604625) - (xy 120.515367 63.55805) (xy 120.276633 63.55805) (xy 120.042487 63.604625) (xy 119.821926 63.695984) (xy 119.623427 63.828617) - (xy 119.61495 63.837094) (xy 119.61495 63.702529) (xy 119.957364 63.360116) (xy 120.042487 63.395375) (xy 120.276633 63.44195) - (xy 120.515367 63.44195) (xy 120.749513 63.395375) (xy 120.970074 63.304016) (xy 121.168573 63.171383) (xy 121.337383 63.002573) - (xy 121.470016 62.804074) (xy 121.561375 62.583513) (xy 121.60795 62.349367) (xy 121.60795 62.110633) (xy 121.561375 61.876487) - (xy 121.470016 61.655926) (xy 121.337383 61.457427) (xy 121.168573 61.288617) (xy 120.970074 61.155984) (xy 120.88495 61.120725) - (xy 120.88495 55.317989) (xy 122.007021 54.195918) (xy 122.135028 54.22138) (xy 122.319652 54.22138) (xy 122.500729 54.185362) - (xy 122.671299 54.114709) (xy 122.824808 54.012137) (xy 122.955357 53.881588) (xy 123.057929 53.728079) (xy 123.128582 53.557509) - (xy 123.1646 53.376432) (xy 123.1646 53.191808) (xy 123.128582 53.010731) (xy 123.057929 52.840161) (xy 122.955357 52.686652) - (xy 122.824808 52.556103) (xy 122.671299 52.453531) (xy 122.500729 52.382878) (xy 122.319652 52.34686) (xy 122.135028 52.34686) - (xy 121.953951 52.382878) (xy 121.783381 52.453531) (xy 121.629872 52.556103) (xy 121.499323 52.686652) (xy 121.396751 52.840161) - (xy 121.326098 53.010731) (xy 121.29008 53.191808) (xy 121.29008 53.376432) (xy 121.315542 53.504439) (xy 120.067237 54.752744) - (xy 120.048589 54.768048) (xy 120.033285 54.786696) (xy 120.03328 54.786701) (xy 119.987487 54.8425) (xy 119.955331 54.902661) - (xy 119.942085 54.927442) (xy 119.915853 55.013918) (xy 119.914126 55.01961) (xy 119.904686 55.11546) (xy 119.907051 55.139473) - (xy 119.907051 57.138966) (xy 119.825068 57.056983) (xy 119.671559 56.954411) (xy 119.500989 56.883758) (xy 119.319912 56.84774) - (xy 119.135288 56.84774) (xy 118.954211 56.883758) (xy 118.783641 56.954411) (xy 118.630132 57.056983) (xy 118.499583 57.187532) - (xy 118.397011 57.341041) (xy 118.34495 57.466726) (xy 118.34495 54.858249) (xy 119.007281 54.195918) (xy 119.135288 54.22138) - (xy 119.319912 54.22138) (xy 119.500989 54.185362) (xy 119.671559 54.114709) (xy 119.825068 54.012137) (xy 119.955617 53.881588) - (xy 120.058189 53.728079) (xy 120.128842 53.557509) (xy 120.16486 53.376432) (xy 120.16486 53.191808) (xy 120.128842 53.010731) - (xy 120.058189 52.840161) (xy 119.955617 52.686652) (xy 119.825068 52.556103) (xy 119.671559 52.453531) (xy 119.500989 52.382878) - (xy 119.319912 52.34686) (xy 119.135288 52.34686) (xy 118.954211 52.382878) (xy 118.783641 52.453531) (xy 118.630132 52.556103) - (xy 118.499583 52.686652) (xy 118.397011 52.840161) (xy 118.326358 53.010731) (xy 118.29034 53.191808) (xy 118.29034 53.376432) - (xy 118.315802 53.504439) (xy 117.527237 54.293004) (xy 117.508589 54.308308) (xy 117.493285 54.326956) (xy 117.49328 54.326961) - (xy 117.447487 54.38276) (xy 117.410558 54.45185) (xy 117.402085 54.467702) (xy 117.374126 54.559869) (xy 117.367051 54.631706) - (xy 117.364686 54.65572) (xy 117.367051 54.679733) (xy 117.36705 61.120725) (xy 117.281926 61.155984) (xy 117.083427 61.288617) - (xy 116.914617 61.457427) (xy 116.781984 61.655926) (xy 116.690625 61.876487) (xy 116.64405 62.110633) (xy 116.64405 62.349367) - (xy 116.690625 62.583513) (xy 116.725884 62.668636) (xy 116.257237 63.137284) (xy 116.238589 63.152588) (xy 116.223285 63.171236) - (xy 116.22328 63.171241) (xy 116.177487 63.22704) (xy 116.136343 63.304016) (xy 116.132085 63.311982) (xy 116.105093 63.400963) - (xy 116.104126 63.40415) (xy 116.094686 63.5) (xy 116.097051 63.524013) (xy 116.097051 63.837095) (xy 116.088573 63.828617) - (xy 115.890074 63.695984) (xy 115.669513 63.604625) (xy 115.435367 63.55805) (xy 115.196633 63.55805) (xy 114.962487 63.604625) - (xy 114.741926 63.695984) (xy 114.543427 63.828617) (xy 114.53495 63.837094) (xy 114.53495 63.702529) (xy 114.877364 63.360116) - (xy 114.962487 63.395375) (xy 115.196633 63.44195) (xy 115.435367 63.44195) (xy 115.669513 63.395375) (xy 115.890074 63.304016) - (xy 116.088573 63.171383) (xy 116.257383 63.002573) (xy 116.390016 62.804074) (xy 116.481375 62.583513) (xy 116.52795 62.349367) - (xy 116.52795 62.110633) (xy 116.481375 61.876487) (xy 116.390016 61.655926) (xy 116.257383 61.457427) (xy 116.088573 61.288617) - (xy 115.890074 61.155984) (xy 115.669513 61.064625) (xy 115.435367 61.01805) (xy 115.196633 61.01805) (xy 114.962487 61.064625) - (xy 114.954951 61.067747) (xy 114.954951 57.692688) (xy 115.2906 57.692688) (xy 115.2906 57.877312) (xy 115.326618 58.058389) - (xy 115.397271 58.228959) (xy 115.499843 58.382468) (xy 115.630392 58.513017) (xy 115.783901 58.615589) (xy 115.954471 58.686242) - (xy 116.135548 58.72226) (xy 116.320172 58.72226) (xy 116.501249 58.686242) (xy 116.671819 58.615589) (xy 116.825328 58.513017) - (xy 116.955877 58.382468) (xy 117.058449 58.228959) (xy 117.129102 58.058389) (xy 117.16512 57.877312) (xy 117.16512 57.692688) - (xy 117.129102 57.511611) (xy 117.058449 57.341041) (xy 116.955877 57.187532) (xy 116.825328 57.056983) (xy 116.671819 56.954411) - (xy 116.501249 56.883758) (xy 116.320172 56.84774) (xy 116.135548 56.84774) (xy 115.954471 56.883758) (xy 115.783901 56.954411) - (xy 115.630392 57.056983) (xy 115.499843 57.187532) (xy 115.397271 57.341041) (xy 115.326618 57.511611) (xy 115.2906 57.692688) - (xy 114.954951 57.692688) (xy 114.954951 55.248508) (xy 116.007542 54.195918) (xy 116.135548 54.22138) (xy 116.320172 54.22138) - (xy 116.501249 54.185362) (xy 116.671819 54.114709) (xy 116.825328 54.012137) (xy 116.955877 53.881588) (xy 117.058449 53.728079) - (xy 117.129102 53.557509) (xy 117.16512 53.376432) (xy 117.16512 53.191808) (xy 117.129102 53.010731) (xy 117.058449 52.840161) - (xy 116.955877 52.686652) (xy 116.825328 52.556103) (xy 116.671819 52.453531) (xy 116.501249 52.382878) (xy 116.320172 52.34686) - (xy 116.135548 52.34686) (xy 115.954471 52.382878) (xy 115.783901 52.453531) (xy 115.630392 52.556103) (xy 115.499843 52.686652) - (xy 115.397271 52.840161) (xy 115.326618 53.010731) (xy 115.2906 53.191808) (xy 115.2906 53.376432) (xy 115.316062 53.504438) - (xy 114.137238 54.683263) (xy 114.11859 54.698567) (xy 114.103286 54.717215) (xy 114.103281 54.71722) (xy 114.057488 54.773019) - (xy 114.022823 54.837874) (xy 114.012086 54.857961) (xy 113.984127 54.950128) (xy 113.978924 55.002955) (xy 113.974687 55.045979) - (xy 113.977052 55.069992) (xy 113.977052 57.218833) (xy 113.956137 57.187532) (xy 113.825588 57.056983) (xy 113.672079 56.954411) - (xy 113.501509 56.883758) (xy 113.320432 56.84774) (xy 113.135808 56.84774) (xy 112.954731 56.883758) (xy 112.784161 56.954411) - (xy 112.630652 57.056983) (xy 112.500103 57.187532) (xy 112.414951 57.31497) (xy 112.414951 54.788768) (xy 113.007802 54.195918) - (xy 113.135808 54.22138) (xy 113.320432 54.22138) (xy 113.501509 54.185362) (xy 113.672079 54.114709) (xy 113.825588 54.012137) - (xy 113.956137 53.881588) (xy 114.058709 53.728079) (xy 114.129362 53.557509) (xy 114.16538 53.376432) (xy 114.16538 53.191808) - (xy 114.129362 53.010731) (xy 114.058709 52.840161) (xy 113.956137 52.686652) (xy 113.825588 52.556103) (xy 113.672079 52.453531) - (xy 113.501509 52.382878) (xy 113.320432 52.34686) (xy 113.135808 52.34686) (xy 112.954731 52.382878) (xy 112.784161 52.453531) - (xy 112.630652 52.556103) (xy 112.500103 52.686652) (xy 112.397531 52.840161) (xy 112.326878 53.010731) (xy 112.29086 53.191808) - (xy 112.29086 53.376432) (xy 112.316322 53.504438) (xy 111.597238 54.223523) (xy 111.57859 54.238827) (xy 111.563286 54.257475) - (xy 111.563281 54.25748) (xy 111.517488 54.313279) (xy 111.48035 54.38276) (xy 111.472086 54.398221) (xy 111.444127 54.490388) - (xy 111.437797 54.554664) (xy 111.434687 54.586239) (xy 111.437052 54.610252) (xy 111.437051 61.29038) (xy 111.422016 61.240818) - (xy 111.388406 61.177939) (xy 111.343175 61.122825) (xy 111.288061 61.077594) (xy 111.225182 61.043984) (xy 111.156955 61.023287) - (xy 111.086 61.016299) (xy 110.713674 61.016299) (xy 110.689916 60.937982) (xy 110.667574 60.896183) (xy 110.644513 60.853039) - (xy 110.605487 60.805487) (xy 110.583412 60.778588) (xy 110.564759 60.76328) (xy 109.656879 59.8554) (xy 109.656879 58.599952) - (xy 109.680281 58.615589) (xy 109.850851 58.686242) (xy 110.031928 58.72226) (xy 110.216552 58.72226) (xy 110.397629 58.686242) - (xy 110.568199 58.615589) (xy 110.721708 58.513017) (xy 110.852257 58.382468) (xy 110.954829 58.228959) (xy 111.025482 58.058389) - (xy 111.0615 57.877312) (xy 111.0615 57.692688) (xy 111.025482 57.511611) (xy 110.954829 57.341041) (xy 110.852257 57.187532) - (xy 110.721708 57.056983) (xy 110.568199 56.954411) (xy 110.397629 56.883758) (xy 110.216552 56.84774) (xy 110.031928 56.84774) - (xy 109.850851 56.883758) (xy 109.680281 56.954411) (xy 109.656879 56.970048) (xy 109.656879 54.44296) (xy 109.903922 54.195918) - (xy 110.031928 54.22138) (xy 110.216552 54.22138) (xy 110.397629 54.185362) (xy 110.568199 54.114709) (xy 110.721708 54.012137) - (xy 110.852257 53.881588) (xy 110.954829 53.728079) (xy 111.025482 53.557509) (xy 111.0615 53.376432) (xy 111.0615 53.191808) - (xy 111.025482 53.010731) (xy 110.954829 52.840161) (xy 110.852257 52.686652) (xy 110.721708 52.556103) (xy 110.568199 52.453531) - (xy 110.397629 52.382878) (xy 110.216552 52.34686) (xy 110.031928 52.34686) (xy 109.850851 52.382878) (xy 109.680281 52.453531) - (xy 109.526772 52.556103) (xy 109.396223 52.686652) (xy 109.293651 52.840161) (xy 109.222998 53.010731) (xy 109.18698 53.191808) - (xy 109.18698 53.376432) (xy 109.212442 53.504438) (xy 108.839165 53.877716) (xy 108.820518 53.893019) (xy 108.805214 53.911667) - (xy 108.805209 53.911672) (xy 108.759416 53.967471) (xy 108.727469 54.02724) (xy 108.714014 54.052413) (xy 108.686055 54.14458) - (xy 108.68375 54.167981) (xy 108.676615 54.240431) (xy 108.67898 54.264444) (xy 108.678979 60.033926) (xy 108.676615 60.057929) - (xy 108.678979 60.081932) (xy 108.678979 60.081942) (xy 108.686054 60.153779) (xy 108.714013 60.245946) (xy 108.759416 60.330889) - (xy 108.820517 60.405341) (xy 108.83917 60.420649) (xy 109.43482 61.016299) (xy 109.386 61.016299) (xy 109.315045 61.023287) - (xy 109.246818 61.043984) (xy 109.183939 61.077594) (xy 109.128825 61.122825) (xy 109.083594 61.177939) (xy 109.049984 61.240818) - (xy 109.029287 61.309045) (xy 109.022299 61.38) (xy 109.022299 62.752222) (xy 108.909701 62.86482) (xy 108.909701 61.38) - (xy 108.902713 61.309045) (xy 108.882016 61.240818) (xy 108.848406 61.177939) (xy 108.803175 61.122825) (xy 108.748061 61.077594) - (xy 108.685182 61.043984) (xy 108.616955 61.023287) (xy 108.546 61.016299) (xy 108.18495 61.016299) (xy 108.18495 54.380002) - (xy 108.187314 54.355999) (xy 108.18495 54.331996) (xy 108.18495 54.331986) (xy 108.177875 54.260149) (xy 108.149916 54.167982) - (xy 108.113518 54.099887) (xy 108.104513 54.083039) (xy 108.05872 54.02724) (xy 108.058716 54.027236) (xy 108.043412 54.008588) - (xy 108.024764 53.993284) (xy 107.535918 53.504439) (xy 107.56138 53.376432) (xy 107.56138 53.191808) (xy 107.525362 53.010731) - (xy 107.454709 52.840161) (xy 107.352137 52.686652) (xy 107.221588 52.556103) (xy 107.068079 52.453531) (xy 106.897509 52.382878) - (xy 106.716432 52.34686) (xy 106.531808 52.34686) (xy 106.350731 52.382878) (xy 106.180161 52.453531) (xy 106.026652 52.556103) - (xy 105.896103 52.686652) (xy 105.793531 52.840161) (xy 105.722878 53.010731) (xy 105.68686 53.191808) (xy 101.36124 53.191808) - (xy 101.325222 53.010731) (xy 101.254569 52.840161) (xy 101.151997 52.686652) (xy 101.021448 52.556103) (xy 100.867939 52.453531) - (xy 100.697369 52.382878) (xy 100.516292 52.34686) (xy 100.331668 52.34686) (xy 100.150591 52.382878) (xy 99.980021 52.453531) - (xy 99.826512 52.556103) (xy 99.695963 52.686652) (xy 99.593391 52.840161) (xy 99.522738 53.010731) (xy 99.48672 53.191808) - (xy 99.48672 53.376432) (xy 99.490812 53.397004) (xy 98.64586 54.241957) (xy 98.622351 54.26125) (xy 98.562168 54.334585) - (xy 98.545379 54.355042) (xy 98.488184 54.462046) (xy 98.452963 54.578154) (xy 98.44107 54.6989) (xy 96.650139 54.6989) - (xy 97.144693 54.204346) (xy 97.230328 54.22138) (xy 97.414952 54.22138) (xy 97.596029 54.185362) (xy 97.766599 54.114709) - (xy 97.920108 54.012137) (xy 98.050657 53.881588) (xy 98.153229 53.728079) (xy 98.223882 53.557509) (xy 98.2599 53.376432) - (xy 98.2599 53.191808) (xy 98.223882 53.010731) (xy 98.153229 52.840161) (xy 98.050657 52.686652) (xy 97.920108 52.556103) - (xy 97.766599 52.453531) (xy 97.596029 52.382878) (xy 97.414952 52.34686) (xy 97.230328 52.34686) (xy 97.049251 52.382878) - (xy 96.878681 52.453531) (xy 96.725172 52.556103) (xy 96.594623 52.686652) (xy 96.492051 52.840161) (xy 96.421398 53.010731) - (xy 96.38538 53.191808) (xy 96.38538 53.376432) (xy 96.41927 53.54681) (xy 95.330285 54.635796) (xy 95.311637 54.6511) - (xy 95.296333 54.669748) (xy 95.296328 54.669753) (xy 95.250535 54.725552) (xy 95.209734 54.801886) (xy 95.205133 54.810494) - (xy 95.177174 54.902661) (xy 95.174122 54.933651) (xy 95.167734 54.998512) (xy 95.170099 55.022525) (xy 95.170099 57.38114) - (xy 95.153489 57.341041) (xy 95.050917 57.187532) (xy 94.920368 57.056983) (xy 94.766859 56.954411) (xy 94.596289 56.883758) - (xy 94.415212 56.84774) (xy 94.230588 56.84774) (xy 94.049511 56.883758) (xy 93.878941 56.954411) (xy 93.725432 57.056983) - (xy 93.59773 57.184685) (xy 93.59773 54.751569) (xy 94.144953 54.204346) (xy 94.230588 54.22138) (xy 94.415212 54.22138) - (xy 94.596289 54.185362) (xy 94.766859 54.114709) (xy 94.920368 54.012137) (xy 95.050917 53.881588) (xy 95.153489 53.728079) - (xy 95.224142 53.557509) (xy 95.26016 53.376432) (xy 95.26016 53.191808) (xy 95.224142 53.010731) (xy 95.153489 52.840161) - (xy 95.050917 52.686652) (xy 94.920368 52.556103) (xy 94.766859 52.453531) (xy 94.596289 52.382878) (xy 94.415212 52.34686) - (xy 94.230588 52.34686) (xy 94.049511 52.382878) (xy 93.878941 52.453531) (xy 93.725432 52.556103) (xy 93.594883 52.686652) - (xy 93.492311 52.840161) (xy 93.421658 53.010731) (xy 93.38564 53.191808) (xy 93.38564 53.376432) (xy 93.41953 53.546811) - (xy 92.87383 54.09251) (xy 92.243386 53.462067) (xy 92.26042 53.376432) (xy 92.26042 53.191808) (xy 92.224402 53.010731) - (xy 92.153749 52.840161) (xy 92.051177 52.686652) (xy 91.920628 52.556103) (xy 91.767119 52.453531) (xy 91.596549 52.382878) - (xy 91.415472 52.34686) (xy 91.230848 52.34686) (xy 91.049771 52.382878) (xy 90.879201 52.453531) (xy 90.725692 52.556103) - (xy 90.595143 52.686652) (xy 90.492571 52.840161) (xy 90.421918 53.010731) (xy 90.3859 53.191808) (xy 90.3859 53.376432) - (xy 90.421918 53.557509) (xy 90.492571 53.728079) (xy 90.595143 53.881588) (xy 90.725692 54.012137) (xy 90.879201 54.114709) - (xy 91.049771 54.185362) (xy 91.230848 54.22138) (xy 91.415472 54.22138) (xy 91.585851 54.18749) (xy 92.109291 54.710931) - (xy 92.10929 57.274504) (xy 92.051177 57.187532) (xy 91.920628 57.056983) (xy 91.767119 56.954411) (xy 91.596549 56.883758) - (xy 91.415472 56.84774) (xy 91.230848 56.84774) (xy 91.049771 56.883758) (xy 90.879201 56.954411) (xy 90.725692 57.056983) - (xy 90.595143 57.187532) (xy 90.492571 57.341041) (xy 90.421918 57.511611) (xy 90.40495 57.596916) (xy 90.40495 54.849902) - (xy 90.407314 54.825899) (xy 90.40495 54.801896) (xy 90.40495 54.801886) (xy 90.397875 54.730049) (xy 90.369916 54.637882) - (xy 90.342312 54.586239) (xy 90.324513 54.552939) (xy 90.27872 54.49714) (xy 90.278716 54.497136) (xy 90.263412 54.478488) - (xy 90.244764 54.463184) (xy 89.243646 53.462067) (xy 89.26068 53.376432) (xy 89.26068 53.191808) (xy 89.224662 53.010731) - (xy 89.154009 52.840161) (xy 89.051437 52.686652) (xy 88.920888 52.556103) (xy 88.767379 52.453531) (xy 88.596809 52.382878) - (xy 88.415732 52.34686) (xy 88.231108 52.34686) (xy 88.050031 52.382878) (xy 87.879461 52.453531) (xy 87.725952 52.556103) - (xy 87.595403 52.686652) (xy 87.492831 52.840161) (xy 87.422178 53.010731) (xy 87.38616 53.191808) (xy 87.38616 53.376432) - (xy 87.422178 53.557509) (xy 87.492831 53.728079) (xy 87.595403 53.881588) (xy 87.725952 54.012137) (xy 87.879461 54.114709) - (xy 88.050031 54.185362) (xy 88.231108 54.22138) (xy 88.415732 54.22138) (xy 88.586111 54.18749) (xy 89.427051 55.028431) - (xy 89.42705 58.97947) (xy 87.555237 60.851284) (xy 87.536589 60.866588) (xy 87.521285 60.885236) (xy 87.52128 60.885241) - (xy 87.475487 60.94104) (xy 87.430085 61.025982) (xy 87.402249 61.117743) (xy 87.309926 61.155984) (xy 87.111427 61.288617) - (xy 86.942617 61.457427) (xy 86.809984 61.655926) (xy 86.718625 61.876487) (xy 86.67205 62.110633) (xy 86.67205 62.349367) - (xy 86.718625 62.583513) (xy 86.809984 62.804074) (xy 86.942617 63.002573) (xy 87.111427 63.171383) (xy 87.309926 63.304016) - (xy 87.530487 63.395375) (xy 87.764633 63.44195) (xy 88.003367 63.44195) (xy 88.237513 63.395375) (xy 88.322636 63.360116) - (xy 88.665051 63.702531) (xy 88.665051 63.837095) (xy 88.656573 63.828617) (xy 88.458074 63.695984) (xy 88.237513 63.604625) - (xy 88.003367 63.55805) (xy 87.764633 63.55805) (xy 87.530487 63.604625) (xy 87.309926 63.695984) (xy 87.111427 63.828617) - (xy 87.10295 63.837094) (xy 87.10295 63.524002) (xy 87.105314 63.499999) (xy 87.10295 63.475996) (xy 87.10295 63.475986) - (xy 87.095875 63.404149) (xy 87.067916 63.311982) (xy 87.046781 63.272442) (xy 87.022513 63.227039) (xy 86.97672 63.17124) - (xy 86.976716 63.171236) (xy 86.961412 63.152588) (xy 86.942764 63.137284) (xy 86.474116 62.668636) (xy 86.509375 62.583513) - (xy 86.55595 62.349367) (xy 86.55595 62.110633) (xy 86.509375 61.876487) (xy 86.418016 61.655926) (xy 86.285383 61.457427) - (xy 86.116573 61.288617) (xy 85.918074 61.155984) (xy 85.83295 61.120725) (xy 85.83295 60.908529) (xy 87.196759 59.54472) - (xy 87.215412 59.529412) (xy 87.253338 59.483199) (xy 87.276513 59.454961) (xy 87.3065 59.398859) (xy 87.321916 59.370018) - (xy 87.349875 59.277851) (xy 87.35695 59.206014) (xy 87.35695 59.206002) (xy 87.359314 59.182001) (xy 87.35695 59.158) - (xy 87.35695 57.692688) (xy 87.38616 57.692688) (xy 87.38616 57.877312) (xy 87.422178 58.058389) (xy 87.492831 58.228959) - (xy 87.595403 58.382468) (xy 87.725952 58.513017) (xy 87.879461 58.615589) (xy 88.050031 58.686242) (xy 88.231108 58.72226) - (xy 88.415732 58.72226) (xy 88.596809 58.686242) (xy 88.767379 58.615589) (xy 88.920888 58.513017) (xy 89.051437 58.382468) - (xy 89.154009 58.228959) (xy 89.224662 58.058389) (xy 89.26068 57.877312) (xy 89.26068 57.692688) (xy 89.224662 57.511611) - (xy 89.154009 57.341041) (xy 89.051437 57.187532) (xy 88.920888 57.056983) (xy 88.767379 56.954411) (xy 88.596809 56.883758) - (xy 88.415732 56.84774) (xy 88.231108 56.84774) (xy 88.050031 56.883758) (xy 87.879461 56.954411) (xy 87.725952 57.056983) - (xy 87.595403 57.187532) (xy 87.492831 57.341041) (xy 87.422178 57.511611) (xy 87.38616 57.692688) (xy 87.35695 57.692688) - (xy 87.35695 54.801642) (xy 87.359314 54.777639) (xy 87.35695 54.753636) (xy 87.35695 54.753626) (xy 87.349875 54.681789) - (xy 87.321916 54.589622) (xy 87.294281 54.537921) (xy 87.276513 54.504679) (xy 87.23072 54.44888) (xy 87.230716 54.448876) - (xy 87.215412 54.430228) (xy 87.196764 54.414924) (xy 86.243906 53.462067) (xy 86.26094 53.376432) (xy 86.26094 53.191808) - (xy 86.224922 53.010731) (xy 86.154269 52.840161) (xy 86.051697 52.686652) (xy 85.921148 52.556103) (xy 85.767639 52.453531) - (xy 85.597069 52.382878) (xy 85.415992 52.34686) (xy 85.231368 52.34686) (xy 85.050291 52.382878) (xy 84.879721 52.453531) - (xy 84.726212 52.556103) (xy 84.595663 52.686652) (xy 84.493091 52.840161) (xy 84.422438 53.010731) (xy 84.38642 53.191808) - (xy 84.38642 53.376432) (xy 84.422438 53.557509) (xy 84.493091 53.728079) (xy 84.595663 53.881588) (xy 84.726212 54.012137) - (xy 84.879721 54.114709) (xy 85.050291 54.185362) (xy 85.231368 54.22138) (xy 85.415992 54.22138) (xy 85.586371 54.18749) - (xy 86.379051 54.980171) (xy 86.37905 58.979471) (xy 85.015237 60.343284) (xy 84.996589 60.358588) (xy 84.981285 60.377236) - (xy 84.98128 60.377241) (xy 84.935487 60.43304) (xy 84.902971 60.493874) (xy 84.890085 60.517982) (xy 84.863093 60.606963) - (xy 84.862126 60.61015) (xy 84.852686 60.706) (xy 84.855051 60.730013) (xy 84.855051 61.120724) (xy 84.769926 61.155984) - (xy 84.571427 61.288617) (xy 84.402617 61.457427) (xy 84.269984 61.655926) (xy 84.178625 61.876487) (xy 84.13205 62.110633) - (xy 84.13205 62.349367) (xy 84.178625 62.583513) (xy 84.269984 62.804074) (xy 84.402617 63.002573) (xy 84.571427 63.171383) - (xy 84.769926 63.304016) (xy 84.990487 63.395375) (xy 85.224633 63.44195) (xy 85.463367 63.44195) (xy 85.697513 63.395375) - (xy 85.782636 63.360116) (xy 86.125051 63.702531) (xy 86.125051 63.837095) (xy 86.116573 63.828617) (xy 85.918074 63.695984) - (xy 85.697513 63.604625) (xy 85.463367 63.55805) (xy 85.224633 63.55805) (xy 84.990487 63.604625) (xy 84.769926 63.695984) - (xy 84.571427 63.828617) (xy 84.56295 63.837094) (xy 84.56295 63.524002) (xy 84.565314 63.499999) (xy 84.56295 63.475996) - (xy 84.56295 63.475986) (xy 84.555875 63.404149) (xy 84.527916 63.311982) (xy 84.506781 63.272442) (xy 84.482513 63.227039) - (xy 84.43672 63.17124) (xy 84.436716 63.171236) (xy 84.421412 63.152588) (xy 84.402764 63.137284) (xy 83.934116 62.668636) - (xy 83.969375 62.583513) (xy 84.01595 62.349367) (xy 84.01595 62.110633) (xy 83.969375 61.876487) (xy 83.878016 61.655926) - (xy 83.745383 61.457427) (xy 83.576573 61.288617) (xy 83.378074 61.155984) (xy 83.29295 61.120725) (xy 83.29295 60.400529) - (xy 84.148764 59.544716) (xy 84.167412 59.529412) (xy 84.182716 59.510764) (xy 84.18272 59.51076) (xy 84.228513 59.454961) - (xy 84.2585 59.398859) (xy 84.273916 59.370018) (xy 84.301875 59.277851) (xy 84.30895 59.206014) (xy 84.30895 59.206003) - (xy 84.311314 59.182) (xy 84.30895 59.157997) (xy 84.30895 57.692688) (xy 84.38642 57.692688) (xy 84.38642 57.877312) - (xy 84.422438 58.058389) (xy 84.493091 58.228959) (xy 84.595663 58.382468) (xy 84.726212 58.513017) (xy 84.879721 58.615589) - (xy 85.050291 58.686242) (xy 85.231368 58.72226) (xy 85.415992 58.72226) (xy 85.597069 58.686242) (xy 85.767639 58.615589) - (xy 85.921148 58.513017) (xy 86.051697 58.382468) (xy 86.154269 58.228959) (xy 86.224922 58.058389) (xy 86.26094 57.877312) - (xy 86.26094 57.692688) (xy 86.224922 57.511611) (xy 86.154269 57.341041) (xy 86.051697 57.187532) (xy 85.921148 57.056983) - (xy 85.767639 56.954411) (xy 85.597069 56.883758) (xy 85.415992 56.84774) (xy 85.231368 56.84774) (xy 85.050291 56.883758) - (xy 84.879721 56.954411) (xy 84.726212 57.056983) (xy 84.595663 57.187532) (xy 84.493091 57.341041) (xy 84.422438 57.511611) - (xy 84.38642 57.692688) (xy 84.30895 57.692688) (xy 84.30895 54.75338) (xy 84.311314 54.729379) (xy 84.30895 54.705378) - (xy 84.30895 54.705366) (xy 84.301875 54.633529) (xy 84.273916 54.541362) (xy 84.24667 54.490389) (xy 84.228513 54.456419) - (xy 84.18272 54.40062) (xy 84.182716 54.400616) (xy 84.167412 54.381968) (xy 84.148764 54.366664) (xy 83.244166 53.462067) - (xy 83.2612 53.376432) (xy 83.2612 53.191808) (xy 83.225182 53.010731) (xy 83.154529 52.840161) (xy 83.051957 52.686652) - (xy 82.921408 52.556103) (xy 82.767899 52.453531) (xy 82.597329 52.382878) (xy 82.416252 52.34686) (xy 82.231628 52.34686) - (xy 82.050551 52.382878) (xy 81.879981 52.453531) (xy 81.726472 52.556103) (xy 81.595923 52.686652) (xy 81.493351 52.840161) - (xy 81.422698 53.010731) (xy 81.38668 53.191808) (xy 81.38668 53.376432) (xy 81.422698 53.557509) (xy 81.493351 53.728079) - (xy 81.595923 53.881588) (xy 81.726472 54.012137) (xy 81.879981 54.114709) (xy 82.050551 54.185362) (xy 82.231628 54.22138) - (xy 82.416252 54.22138) (xy 82.586631 54.18749) (xy 83.331051 54.931911) (xy 83.33105 58.97947) (xy 82.475237 59.835284) - (xy 82.456589 59.850588) (xy 82.441285 59.869236) (xy 82.44128 59.869241) (xy 82.395487 59.92504) (xy 82.362242 59.987238) - (xy 82.350085 60.009982) (xy 82.340992 60.039959) (xy 82.322126 60.10215) (xy 82.312686 60.198) (xy 82.315051 60.222013) - (xy 82.315051 61.120724) (xy 82.229926 61.155984) (xy 82.031427 61.288617) (xy 81.862617 61.457427) (xy 81.729984 61.655926) - (xy 81.638625 61.876487) (xy 81.59205 62.110633) (xy 81.59205 62.349367) (xy 81.638625 62.583513) (xy 81.729984 62.804074) - (xy 81.862617 63.002573) (xy 82.031427 63.171383) (xy 82.229926 63.304016) (xy 82.450487 63.395375) (xy 82.684633 63.44195) - (xy 82.923367 63.44195) (xy 83.157513 63.395375) (xy 83.242636 63.360116) (xy 83.585051 63.702531) (xy 83.585051 63.837095) - (xy 83.576573 63.828617) (xy 83.378074 63.695984) (xy 83.157513 63.604625) (xy 82.923367 63.55805) (xy 82.684633 63.55805) - (xy 82.450487 63.604625) (xy 82.229926 63.695984) (xy 82.031427 63.828617) (xy 82.02295 63.837094) (xy 82.02295 63.524002) - (xy 82.025314 63.499999) (xy 82.02295 63.475996) (xy 82.02295 63.475986) (xy 82.015875 63.404149) (xy 81.987916 63.311982) - (xy 81.966781 63.272442) (xy 81.942513 63.227039) (xy 81.89672 63.17124) (xy 81.896716 63.171236) (xy 81.881412 63.152588) - (xy 81.862764 63.137284) (xy 81.394116 62.668636) (xy 81.429375 62.583513) (xy 81.47595 62.349367) (xy 81.47595 62.110633) - (xy 81.429375 61.876487) (xy 81.338016 61.655926) (xy 81.205383 61.457427) (xy 81.036573 61.288617) (xy 80.838074 61.155984) - (xy 80.75295 61.120725) (xy 80.75295 59.638529) (xy 81.100759 59.29072) (xy 81.119412 59.275412) (xy 81.162308 59.223143) - (xy 81.180513 59.200961) (xy 81.214059 59.138201) (xy 81.225916 59.116018) (xy 81.253875 59.023851) (xy 81.26095 58.952014) - (xy 81.26095 58.952002) (xy 81.263314 58.928001) (xy 81.26095 58.904) (xy 81.26095 57.692688) (xy 81.38668 57.692688) - (xy 81.38668 57.877312) (xy 81.422698 58.058389) (xy 81.493351 58.228959) (xy 81.595923 58.382468) (xy 81.726472 58.513017) - (xy 81.879981 58.615589) (xy 82.050551 58.686242) (xy 82.231628 58.72226) (xy 82.416252 58.72226) (xy 82.597329 58.686242) - (xy 82.767899 58.615589) (xy 82.921408 58.513017) (xy 83.051957 58.382468) (xy 83.154529 58.228959) (xy 83.225182 58.058389) - (xy 83.2612 57.877312) (xy 83.2612 57.692688) (xy 83.225182 57.511611) (xy 83.154529 57.341041) (xy 83.051957 57.187532) - (xy 82.921408 57.056983) (xy 82.767899 56.954411) (xy 82.597329 56.883758) (xy 82.416252 56.84774) (xy 82.231628 56.84774) - (xy 82.050551 56.883758) (xy 81.879981 56.954411) (xy 81.726472 57.056983) (xy 81.595923 57.187532) (xy 81.493351 57.341041) - (xy 81.422698 57.511611) (xy 81.38668 57.692688) (xy 81.26095 57.692688) (xy 81.26095 54.70512) (xy 81.263314 54.681119) - (xy 81.26095 54.657118) (xy 81.26095 54.657106) (xy 81.253875 54.585269) (xy 81.225916 54.493102) (xy 81.198382 54.44159) - (xy 81.180513 54.408159) (xy 81.13472 54.35236) (xy 81.134716 54.352356) (xy 81.119412 54.333708) (xy 81.100764 54.318404) - (xy 80.244426 53.462067) (xy 80.26146 53.376432) (xy 80.26146 53.191808) (xy 80.225442 53.010731) (xy 80.154789 52.840161) - (xy 80.052217 52.686652) (xy 79.921668 52.556103) (xy 79.768159 52.453531) (xy 79.597589 52.382878) (xy 79.416512 52.34686) - (xy 79.231888 52.34686) (xy 79.050811 52.382878) (xy 78.880241 52.453531) (xy 78.726732 52.556103) (xy 78.596183 52.686652) - (xy 78.493611 52.840161) (xy 78.422958 53.010731) (xy 78.38694 53.191808) (xy 78.38694 53.376432) (xy 78.422958 53.557509) - (xy 78.493611 53.728079) (xy 78.596183 53.881588) (xy 78.726732 54.012137) (xy 78.880241 54.114709) (xy 79.050811 54.185362) - (xy 79.231888 54.22138) (xy 79.416512 54.22138) (xy 79.586891 54.18749) (xy 80.283051 54.883651) (xy 80.28305 58.725471) - (xy 79.935237 59.073284) (xy 79.916589 59.088588) (xy 79.901285 59.107236) (xy 79.90128 59.107241) (xy 79.855487 59.16304) - (xy 79.827004 59.216329) (xy 79.810085 59.247982) (xy 79.782126 59.340149) (xy 79.777497 59.387147) (xy 79.772686 59.436) - (xy 79.775051 59.460013) (xy 79.77505 61.120724) (xy 79.689926 61.155984) (xy 79.491427 61.288617) (xy 79.322617 61.457427) - (xy 79.189984 61.655926) (xy 79.098625 61.876487) (xy 79.05205 62.110633) (xy 79.05205 62.349367) (xy 79.098625 62.583513) - (xy 79.189984 62.804074) (xy 79.322617 63.002573) (xy 79.491427 63.171383) (xy 79.689926 63.304016) (xy 79.910487 63.395375) - (xy 80.144633 63.44195) (xy 80.383367 63.44195) (xy 80.617513 63.395375) (xy 80.702636 63.360116) (xy 81.045051 63.702531) - (xy 81.045051 63.837095) (xy 81.036573 63.828617) (xy 80.838074 63.695984) (xy 80.617513 63.604625) (xy 80.383367 63.55805) - (xy 80.144633 63.55805) (xy 79.910487 63.604625) (xy 79.689926 63.695984) (xy 79.491427 63.828617) (xy 79.48295 63.837094) - (xy 79.48295 63.524002) (xy 79.485314 63.499999) (xy 79.48295 63.475996) (xy 79.48295 63.475986) (xy 79.475875 63.404149) - (xy 79.447916 63.311982) (xy 79.426781 63.272442) (xy 79.402513 63.227039) (xy 79.35672 63.17124) (xy 79.356716 63.171236) - (xy 79.341412 63.152588) (xy 79.322764 63.137284) (xy 78.854116 62.668636) (xy 78.889375 62.583513) (xy 78.93595 62.349367) - (xy 78.93595 62.110633) (xy 78.889375 61.876487) (xy 78.798016 61.655926) (xy 78.665383 61.457427) (xy 78.496573 61.288617) - (xy 78.298074 61.155984) (xy 78.21295 61.120725) (xy 78.21295 57.692688) (xy 78.38694 57.692688) (xy 78.38694 57.877312) - (xy 78.422958 58.058389) (xy 78.493611 58.228959) (xy 78.596183 58.382468) (xy 78.726732 58.513017) (xy 78.880241 58.615589) - (xy 79.050811 58.686242) (xy 79.231888 58.72226) (xy 79.416512 58.72226) (xy 79.597589 58.686242) (xy 79.768159 58.615589) - (xy 79.921668 58.513017) (xy 80.052217 58.382468) (xy 80.154789 58.228959) (xy 80.225442 58.058389) (xy 80.26146 57.877312) - (xy 80.26146 57.692688) (xy 80.225442 57.511611) (xy 80.154789 57.341041) (xy 80.052217 57.187532) (xy 79.921668 57.056983) - (xy 79.768159 56.954411) (xy 79.597589 56.883758) (xy 79.416512 56.84774) (xy 79.231888 56.84774) (xy 79.050811 56.883758) - (xy 78.880241 56.954411) (xy 78.726732 57.056983) (xy 78.596183 57.187532) (xy 78.493611 57.341041) (xy 78.422958 57.511611) - (xy 78.38694 57.692688) (xy 78.21295 57.692688) (xy 78.21295 54.65686) (xy 78.215314 54.632859) (xy 78.21295 54.608858) - (xy 78.21295 54.608846) (xy 78.205875 54.537009) (xy 78.177916 54.444842) (xy 78.144309 54.381968) (xy 78.132513 54.359899) - (xy 78.08672 54.3041) (xy 78.086716 54.304096) (xy 78.071412 54.285448) (xy 78.052764 54.270144) (xy 77.244686 53.462067) - (xy 77.26172 53.376432) (xy 77.26172 53.191808) (xy 77.225702 53.010731) (xy 77.155049 52.840161) (xy 77.052477 52.686652) - (xy 76.921928 52.556103) (xy 76.768419 52.453531) (xy 76.597849 52.382878) (xy 76.416772 52.34686) (xy 76.232148 52.34686) - (xy 76.051071 52.382878) (xy 75.880501 52.453531) (xy 75.726992 52.556103) (xy 75.596443 52.686652) (xy 75.493871 52.840161) - (xy 75.423218 53.010731) (xy 75.3872 53.191808) (xy 75.3872 53.376432) (xy 75.423218 53.557509) (xy 75.493871 53.728079) - (xy 75.596443 53.881588) (xy 75.726992 54.012137) (xy 75.880501 54.114709) (xy 76.051071 54.185362) (xy 76.232148 54.22138) - (xy 76.416772 54.22138) (xy 76.587151 54.18749) (xy 77.235051 54.835391) (xy 77.235051 57.55861) (xy 77.225702 57.511611) - (xy 77.155049 57.341041) (xy 77.052477 57.187532) (xy 76.921928 57.056983) (xy 76.768419 56.954411) (xy 76.597849 56.883758) - (xy 76.416772 56.84774) (xy 76.232148 56.84774) (xy 76.051071 56.883758) (xy 75.880501 56.954411) (xy 75.726992 57.056983) - (xy 75.596443 57.187532) (xy 75.54595 57.2631) (xy 75.54595 54.970455) (xy 75.54893 54.9402) (xy 75.537037 54.819453) - (xy 75.527102 54.786701) (xy 75.501817 54.703346) (xy 75.444621 54.596341) (xy 75.36765 54.50255) (xy 75.344146 54.483261) - (xy 74.16038 53.299496) (xy 74.16038 53.191808) (xy 74.124362 53.010731) (xy 74.053709 52.840161) (xy 73.951137 52.686652) - (xy 73.820588 52.556103) (xy 73.667079 52.453531) (xy 73.496509 52.382878) (xy 73.315432 52.34686) (xy 73.130808 52.34686) - (xy 72.949731 52.382878) (xy 72.779161 52.453531) (xy 72.625652 52.556103) (xy 72.495103 52.686652) (xy 72.392531 52.840161) - (xy 72.321878 53.010731) (xy 72.28586 53.191808) (xy 72.28586 53.376432) (xy 72.321878 53.557509) (xy 72.392531 53.728079) - (xy 72.495103 53.881588) (xy 72.625652 54.012137) (xy 72.779161 54.114709) (xy 72.949731 54.185362) (xy 73.130808 54.22138) - (xy 73.315432 54.22138) (xy 73.336004 54.217288) (xy 74.314051 55.195336) (xy 74.31405 58.926866) (xy 72.224562 61.016354) - (xy 72.224 61.016299) (xy 70.524 61.016299) (xy 70.453045 61.023287) (xy 70.384818 61.043984) (xy 70.321939 61.077594) - (xy 70.266825 61.122825) (xy 70.221594 61.177939) (xy 70.187984 61.240818) (xy 70.167287 61.309045) (xy 70.160299 61.38) - (xy 70.160299 62.685215) (xy 70.047701 62.572617) (xy 70.047701 61.38) (xy 70.040713 61.309045) (xy 70.020016 61.240818) - (xy 69.986406 61.177939) (xy 69.941175 61.122825) (xy 69.886061 61.077594) (xy 69.857015 61.062068) (xy 71.788147 59.130938) - (xy 71.81165 59.11165) (xy 71.888621 59.017859) (xy 71.945817 58.910854) (xy 71.981037 58.794747) (xy 71.98995 58.704255) - (xy 71.98995 58.704254) (xy 71.99293 58.674001) (xy 71.98995 58.643748) (xy 71.98995 57.692688) (xy 72.28586 57.692688) - (xy 72.28586 57.877312) (xy 72.321878 58.058389) (xy 72.392531 58.228959) (xy 72.495103 58.382468) (xy 72.625652 58.513017) - (xy 72.779161 58.615589) (xy 72.949731 58.686242) (xy 73.130808 58.72226) (xy 73.315432 58.72226) (xy 73.496509 58.686242) - (xy 73.667079 58.615589) (xy 73.820588 58.513017) (xy 73.951137 58.382468) (xy 74.053709 58.228959) (xy 74.124362 58.058389) - (xy 74.16038 57.877312) (xy 74.16038 57.692688) (xy 74.124362 57.511611) (xy 74.053709 57.341041) (xy 73.951137 57.187532) - (xy 73.820588 57.056983) (xy 73.667079 56.954411) (xy 73.496509 56.883758) (xy 73.315432 56.84774) (xy 73.130808 56.84774) - (xy 72.949731 56.883758) (xy 72.779161 56.954411) (xy 72.625652 57.056983) (xy 72.495103 57.187532) (xy 72.392531 57.341041) - (xy 72.321878 57.511611) (xy 72.28586 57.692688) (xy 71.98995 57.692688) (xy 71.98995 54.912032) (xy 71.99293 54.881779) - (xy 71.986791 54.819453) (xy 71.981037 54.761033) (xy 71.945817 54.644926) (xy 71.888621 54.537921) (xy 71.81165 54.44413) - (xy 71.788146 54.424841) (xy 70.6628 53.299496) (xy 70.6628 53.191808) (xy 70.626782 53.010731) (xy 70.556129 52.840161) - (xy 70.453557 52.686652) (xy 70.323008 52.556103) (xy 70.169499 52.453531) (xy 69.998929 52.382878) (xy 69.817852 52.34686) - (xy 69.633228 52.34686) (xy 69.452151 52.382878) (xy 69.281581 52.453531) (xy 69.128072 52.556103) (xy 68.997523 52.686652) - (xy 68.894951 52.840161) (xy 68.824298 53.010731) (xy 68.78828 53.191808) (xy 68.78828 53.376432) (xy 68.824298 53.557509) - (xy 68.894951 53.728079) (xy 68.997523 53.881588) (xy 69.128072 54.012137) (xy 69.281581 54.114709) (xy 69.452151 54.185362) - (xy 69.633228 54.22138) (xy 69.817852 54.22138) (xy 69.838424 54.217288) (xy 70.758051 55.136916) (xy 70.75805 58.418865) - (xy 68.41986 60.757057) (xy 68.396351 60.77635) (xy 68.342043 60.842526) (xy 68.319379 60.870142) (xy 68.262184 60.977146) - (xy 68.250307 61.016299) (xy 67.984 61.016299) (xy 67.913045 61.023287) (xy 67.844818 61.043984) (xy 67.781939 61.077594) - (xy 67.726825 61.122825) (xy 67.681594 61.177939) (xy 67.647984 61.240818) (xy 67.627287 61.309045) (xy 67.620299 61.38) - (xy 58.119112 61.38) (xy 58.001491 61.09604) (xy 57.739502 60.703946) (xy 57.406054 60.370498) (xy 57.01396 60.108509) - (xy 56.578289 59.928048) (xy 56.115783 59.83605) (xy 55.644217 59.83605) (xy 55.181711 59.928048) (xy 54.74604 60.108509) - (xy 54.353946 60.370498) (xy 54.020498 60.703946) (xy 53.758509 61.09604) (xy 53.578048 61.531711) (xy 53.48605 61.994217) - (xy 51.31435 61.994217) (xy 51.31435 57.692688) (xy 68.78828 57.692688) (xy 68.78828 57.877312) (xy 68.824298 58.058389) - (xy 68.894951 58.228959) (xy 68.997523 58.382468) (xy 69.128072 58.513017) (xy 69.281581 58.615589) (xy 69.452151 58.686242) - (xy 69.633228 58.72226) (xy 69.817852 58.72226) (xy 69.998929 58.686242) (xy 70.169499 58.615589) (xy 70.323008 58.513017) - (xy 70.453557 58.382468) (xy 70.556129 58.228959) (xy 70.626782 58.058389) (xy 70.6628 57.877312) (xy 70.6628 57.692688) - (xy 70.626782 57.511611) (xy 70.556129 57.341041) (xy 70.453557 57.187532) (xy 70.323008 57.056983) (xy 70.169499 56.954411) - (xy 69.998929 56.883758) (xy 69.817852 56.84774) (xy 69.633228 56.84774) (xy 69.452151 56.883758) (xy 69.281581 56.954411) - (xy 69.128072 57.056983) (xy 68.997523 57.187532) (xy 68.894951 57.341041) (xy 68.824298 57.511611) (xy 68.78828 57.692688) - (xy 51.31435 57.692688) (xy 51.31435 56.476) (xy 65.58707 56.476) (xy 65.598963 56.596747) (xy 65.634183 56.712854) - (xy 65.691379 56.819859) (xy 65.76835 56.91365) (xy 65.862141 56.990621) (xy 65.969146 57.047817) (xy 66.085253 57.083037) - (xy 66.206 57.09493) (xy 66.755963 57.09195) (xy 66.90995 56.937963) (xy 66.90995 55.77205) (xy 67.20205 55.77205) - (xy 67.20205 56.937963) (xy 67.356037 57.09195) (xy 67.906 57.09493) (xy 68.026747 57.083037) (xy 68.142854 57.047817) - (xy 68.249859 56.990621) (xy 68.34365 56.91365) (xy 68.420621 56.819859) (xy 68.477817 56.712854) (xy 68.513037 56.596747) - (xy 68.52493 56.476) (xy 68.52195 55.926037) (xy 68.367963 55.77205) (xy 67.20205 55.77205) (xy 66.90995 55.77205) - (xy 65.744037 55.77205) (xy 65.59005 55.926037) (xy 65.58707 56.476) (xy 51.31435 56.476) (xy 51.31435 54.776) - (xy 65.58707 54.776) (xy 65.59005 55.325963) (xy 65.744037 55.47995) (xy 66.90995 55.47995) (xy 66.90995 54.314037) - (xy 67.20205 54.314037) (xy 67.20205 55.47995) (xy 68.367963 55.47995) (xy 68.52195 55.325963) (xy 68.52493 54.776) - (xy 68.513037 54.655253) (xy 68.477817 54.539146) (xy 68.420621 54.432141) (xy 68.34365 54.33835) (xy 68.249859 54.261379) - (xy 68.142854 54.204183) (xy 68.026747 54.168963) (xy 67.906 54.15707) (xy 67.356037 54.16005) (xy 67.20205 54.314037) - (xy 66.90995 54.314037) (xy 66.755963 54.16005) (xy 66.206 54.15707) (xy 66.085253 54.168963) (xy 65.969146 54.204183) - (xy 65.862141 54.261379) (xy 65.76835 54.33835) (xy 65.691379 54.432141) (xy 65.634183 54.539146) (xy 65.598963 54.655253) - (xy 65.58707 54.776) (xy 51.31435 54.776) (xy 51.31435 47.376345) (xy 62.56147 47.376345) (xy 62.56147 47.792375) - (xy 62.642633 48.200411) (xy 62.801841 48.584772) (xy 63.032975 48.930688) (xy 63.327152 49.224865) (xy 63.673068 49.455999) - (xy 64.057429 49.615207) (xy 64.465465 49.69637) (xy 64.881495 49.69637) (xy 65.289531 49.615207) (xy 65.673892 49.455999) - (xy 66.019808 49.224865) (xy 66.313985 48.930688) (xy 66.545119 48.584772) (xy 66.704327 48.200411) (xy 66.78549 47.792375) - (xy 66.78549 47.376345) (xy 101.41585 47.376345) (xy 101.41585 47.792375) (xy 101.497013 48.200411) (xy 101.656221 48.584772) - (xy 101.887355 48.930688) (xy 102.181532 49.224865) (xy 102.527448 49.455999) (xy 102.911809 49.615207) (xy 103.319845 49.69637) - (xy 103.735875 49.69637) (xy 104.143911 49.615207) (xy 104.528272 49.455999) (xy 104.874188 49.224865) (xy 105.168365 48.930688) - (xy 105.399499 48.584772) (xy 105.558707 48.200411) (xy 105.63987 47.792375) (xy 105.63987 47.376345) (xy 147.26539 47.376345) - (xy 147.26539 47.792375) (xy 147.346553 48.200411) (xy 147.505761 48.584772) (xy 147.736895 48.930688) (xy 148.031072 49.224865) - (xy 148.376988 49.455999) (xy 148.761349 49.615207) (xy 149.169385 49.69637) (xy 149.585415 49.69637) (xy 149.993451 49.615207) - (xy 150.377812 49.455999) (xy 150.723728 49.224865) (xy 151.017905 48.930688) (xy 151.249039 48.584772) (xy 151.408247 48.200411) - (xy 151.48941 47.792375) (xy 151.48941 47.376345) (xy 151.408247 46.968309) (xy 151.249039 46.583948) (xy 151.017905 46.238032) - (xy 150.723728 45.943855) (xy 150.377812 45.712721) (xy 149.993451 45.553513) (xy 149.585415 45.47235) (xy 149.169385 45.47235) - (xy 148.761349 45.553513) (xy 148.376988 45.712721) (xy 148.031072 45.943855) (xy 147.736895 46.238032) (xy 147.505761 46.583948) - (xy 147.346553 46.968309) (xy 147.26539 47.376345) (xy 105.63987 47.376345) (xy 105.558707 46.968309) (xy 105.399499 46.583948) - (xy 105.168365 46.238032) (xy 104.874188 45.943855) (xy 104.528272 45.712721) (xy 104.143911 45.553513) (xy 103.735875 45.47235) - (xy 103.319845 45.47235) (xy 102.911809 45.553513) (xy 102.527448 45.712721) (xy 102.181532 45.943855) (xy 101.887355 46.238032) - (xy 101.656221 46.583948) (xy 101.497013 46.968309) (xy 101.41585 47.376345) (xy 66.78549 47.376345) (xy 66.704327 46.968309) - (xy 66.545119 46.583948) (xy 66.313985 46.238032) (xy 66.019808 45.943855) (xy 65.673892 45.712721) (xy 65.289531 45.553513) - (xy 64.881495 45.47235) (xy 64.465465 45.47235) (xy 64.057429 45.553513) (xy 63.673068 45.712721) (xy 63.327152 45.943855) - (xy 63.032975 46.238032) (xy 62.801841 46.583948) (xy 62.642633 46.968309) (xy 62.56147 47.376345) (xy 51.31435 47.376345) - (xy 51.31435 40.97435) (xy 153.15565 40.97435) - ) - ) - ) - (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 5897443D) (hatch edge 0.508) - (connect_pads (clearance 0.2159)) - (min_thickness 0.2159) - (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) - (polygon - (pts - (xy 40.64 30.48) (xy 195.58 30.48) (xy 195.58 81.28) (xy 40.64 81.28) - ) - ) - (filled_polygon - (pts - (xy 153.155651 73.14565) (xy 140.875075 73.14565) (xy 140.886016 73.125182) (xy 140.906713 73.056955) (xy 140.913701 72.986) - (xy 140.913701 72.751948) (xy 141.027736 72.751948) (xy 141.058001 72.754929) (xy 141.178747 72.743036) (xy 141.294854 72.707816) - (xy 141.401859 72.65062) (xy 141.495651 72.573649) (xy 141.572622 72.479858) (xy 141.629818 72.372853) (xy 141.665038 72.256746) - (xy 141.673951 72.166254) (xy 141.673951 72.166246) (xy 141.67693 72.135999) (xy 141.673951 72.105754) (xy 141.673951 71.462) - (xy 144.96207 71.462) (xy 144.973963 71.582747) (xy 145.009183 71.698854) (xy 145.066379 71.805859) (xy 145.14335 71.89965) - (xy 145.237141 71.976621) (xy 145.344146 72.033817) (xy 145.460253 72.069037) (xy 145.581 72.08093) (xy 146.130963 72.07795) - (xy 146.28495 71.923963) (xy 146.28495 70.75805) (xy 146.57705 70.75805) (xy 146.57705 71.923963) (xy 146.731037 72.07795) - (xy 147.281 72.08093) (xy 147.401747 72.069037) (xy 147.517854 72.033817) (xy 147.624859 71.976621) (xy 147.71865 71.89965) - (xy 147.795621 71.805859) (xy 147.852817 71.698854) (xy 147.888037 71.582747) (xy 147.89993 71.462) (xy 147.89695 70.912037) - (xy 147.742963 70.75805) (xy 146.57705 70.75805) (xy 146.28495 70.75805) (xy 145.119037 70.75805) (xy 144.96505 70.912037) - (xy 144.96207 71.462) (xy 141.673951 71.462) (xy 141.673951 69.762) (xy 144.96207 69.762) (xy 144.96505 70.311963) - (xy 145.119037 70.46595) (xy 146.28495 70.46595) (xy 146.28495 69.300037) (xy 146.57705 69.300037) (xy 146.57705 70.46595) - (xy 147.742963 70.46595) (xy 147.89695 70.311963) (xy 147.89993 69.762) (xy 147.888037 69.641253) (xy 147.852817 69.525146) - (xy 147.795621 69.418141) (xy 147.71865 69.32435) (xy 147.624859 69.247379) (xy 147.517854 69.190183) (xy 147.401747 69.154963) - (xy 147.281 69.14307) (xy 146.731037 69.14605) (xy 146.57705 69.300037) (xy 146.28495 69.300037) (xy 146.130963 69.14605) - (xy 145.581 69.14307) (xy 145.460253 69.154963) (xy 145.344146 69.190183) (xy 145.237141 69.247379) (xy 145.14335 69.32435) - (xy 145.066379 69.418141) (xy 145.009183 69.525146) (xy 144.973963 69.641253) (xy 144.96207 69.762) (xy 141.673951 69.762) - (xy 141.673951 66.158253) (xy 141.676931 66.128) (xy 141.671901 66.076934) (xy 141.665038 66.007254) (xy 141.629818 65.891147) - (xy 141.572622 65.784142) (xy 141.495651 65.690351) (xy 141.472147 65.671062) (xy 141.178178 65.377093) (xy 141.178747 65.377037) - (xy 141.294854 65.341817) (xy 141.401859 65.284621) (xy 141.49565 65.20765) (xy 141.514948 65.184135) (xy 144.704866 61.994217) + (xy 131.608061 61.077594) (xy 131.545182 61.043984) (xy 131.476955 61.023287) (xy 131.406 61.016299) (xy 131.35718 61.016299) + (xy 133.028764 59.344716) (xy 133.047412 59.329412) (xy 133.062716 59.310764) (xy 133.06272 59.31076) (xy 133.108514 59.254961) + (xy 133.147511 59.182) (xy 133.153916 59.170018) (xy 133.181875 59.077851) (xy 133.18895 59.006014) (xy 133.18895 59.006003) + (xy 133.191314 58.982) (xy 133.18895 58.957997) (xy 133.18895 58.18628) (xy 133.240903 58.311706) (xy 133.362592 58.493827) + (xy 133.517473 58.648708) (xy 133.699594 58.770397) (xy 133.901956 58.854218) (xy 134.116783 58.89695) (xy 134.335817 58.89695) + (xy 134.550644 58.854218) (xy 134.753006 58.770397) (xy 134.868351 58.693326) (xy 134.868352 61.038852) (xy 134.857584 61.035586) + (xy 134.679538 61.01805) (xy 134.560462 61.01805) (xy 134.382416 61.035586) (xy 134.153963 61.104887) (xy 133.943419 61.217425) + (xy 133.758875 61.368875) (xy 133.607425 61.553419) (xy 133.494887 61.763963) (xy 133.425586 61.992416) (xy 133.402186 62.23) + (xy 133.425586 62.467584) (xy 133.445543 62.533373) (xy 132.68186 63.297057) (xy 132.658351 63.31635) (xy 132.598672 63.38907) + (xy 132.581379 63.410142) (xy 132.524184 63.517146) (xy 132.488963 63.633254) (xy 132.47707 63.754) (xy 132.480051 63.784265) + (xy 132.48005 66.517745) (xy 132.47707 66.548) (xy 132.484434 66.62276) (xy 132.488963 66.668746) (xy 132.524183 66.784853) + (xy 132.581379 66.891858) (xy 132.65835 66.98565) (xy 132.681864 67.004947) (xy 134.004051 68.327136) (xy 134.004051 68.424017) + (xy 133.943419 68.456425) (xy 133.758875 68.607875) (xy 133.607425 68.792419) (xy 133.494887 69.002963) (xy 133.425586 69.231416) + (xy 133.402186 69.469) (xy 133.425586 69.706584) (xy 133.494887 69.935037) (xy 133.607425 70.145581) (xy 133.758875 70.330125) + (xy 133.943419 70.481575) (xy 134.153963 70.594113) (xy 134.382416 70.663414) (xy 134.560462 70.68095) (xy 134.679538 70.68095) + (xy 134.857584 70.663414) (xy 135.086037 70.594113) (xy 135.296581 70.481575) (xy 135.481125 70.330125) (xy 135.632575 70.145581) + (xy 135.745113 69.935037) (xy 135.814414 69.706584) (xy 135.837814 69.469) (xy 135.814414 69.231416) (xy 135.745113 69.002963) + (xy 135.632575 68.792419) (xy 135.481125 68.607875) (xy 135.296581 68.456425) (xy 135.23595 68.424017) (xy 135.23595 68.102252) + (xy 135.23893 68.071999) (xy 135.233221 68.014041) (xy 135.227037 67.951253) (xy 135.191817 67.835146) (xy 135.134621 67.728141) + (xy 135.05765 67.63435) (xy 135.034146 67.615061) (xy 133.71195 66.292867) (xy 133.71195 65.573946) (xy 133.758875 65.631125) + (xy 133.943419 65.782575) (xy 134.153963 65.895113) (xy 134.382416 65.964414) (xy 134.560462 65.98195) (xy 134.679538 65.98195) + (xy 134.857584 65.964414) (xy 135.086037 65.895113) (xy 135.296581 65.782575) (xy 135.40105 65.69684) (xy 135.40105 66.172862) + (xy 135.375379 66.204142) (xy 135.318184 66.311146) (xy 135.282963 66.427254) (xy 135.27107 66.548) (xy 135.282963 66.668746) + (xy 135.318184 66.784854) (xy 135.375379 66.891858) (xy 135.433065 66.962148) (xy 136.544051 68.073136) (xy 136.544051 68.424017) + (xy 136.483419 68.456425) (xy 136.298875 68.607875) (xy 136.147425 68.792419) (xy 136.034887 69.002963) (xy 135.965586 69.231416) + (xy 135.942186 69.469) (xy 135.965586 69.706584) (xy 136.034887 69.935037) (xy 136.147425 70.145581) (xy 136.298875 70.330125) + (xy 136.483419 70.481575) (xy 136.693963 70.594113) (xy 136.922416 70.663414) (xy 137.100462 70.68095) (xy 137.219538 70.68095) + (xy 137.397584 70.663414) (xy 137.626037 70.594113) (xy 137.836581 70.481575) (xy 138.021125 70.330125) (xy 138.172575 70.145581) + (xy 138.285113 69.935037) (xy 138.354414 69.706584) (xy 138.377814 69.469) (xy 138.354414 69.231416) (xy 138.285113 69.002963) + (xy 138.172575 68.792419) (xy 138.021125 68.607875) (xy 137.836581 68.456425) (xy 137.77595 68.424017) (xy 137.77595 67.848252) + (xy 137.77893 67.817999) (xy 137.77595 67.787745) (xy 137.767037 67.697253) (xy 137.731817 67.581146) (xy 137.674621 67.474141) + (xy 137.59765 67.38035) (xy 137.574146 67.361061) (xy 136.37895 66.165867) (xy 136.37895 65.69684) (xy 136.483419 65.782575) + (xy 136.693963 65.895113) (xy 136.922416 65.964414) (xy 137.100462 65.98195) (xy 137.219538 65.98195) (xy 137.397584 65.964414) + (xy 137.626037 65.895113) (xy 137.836581 65.782575) (xy 138.021125 65.631125) (xy 138.172575 65.446581) (xy 138.285113 65.236037) + (xy 138.354414 65.007584) (xy 138.377814 64.77) (xy 138.354414 64.532416) (xy 138.285113 64.303963) (xy 138.172575 64.093419) + (xy 138.021125 63.908875) (xy 137.836581 63.757425) (xy 137.626037 63.644887) (xy 137.397584 63.575586) (xy 137.219538 63.55805) + (xy 137.100462 63.55805) (xy 136.922416 63.575586) (xy 136.693963 63.644887) (xy 136.526899 63.734185) (xy 136.856627 63.404457) + (xy 136.922416 63.424414) (xy 137.100462 63.44195) (xy 137.219538 63.44195) (xy 137.397584 63.424414) (xy 137.626037 63.355113) + (xy 137.836581 63.242575) (xy 138.021125 63.091125) (xy 138.172575 62.906581) (xy 138.285113 62.696037) (xy 138.354414 62.467584) + (xy 138.377814 62.23) (xy 138.354414 61.992416) (xy 138.285113 61.763963) (xy 138.172575 61.553419) (xy 138.030255 61.38) + (xy 138.486299 61.38) (xy 138.486299 63.08) (xy 138.493287 63.150955) (xy 138.513984 63.219182) (xy 138.547594 63.282061) + (xy 138.592825 63.337175) (xy 138.647939 63.382406) (xy 138.710818 63.416016) (xy 138.779045 63.436713) (xy 138.85 63.443701) + (xy 140.442051 63.443701) (xy 140.442051 63.556299) (xy 138.85 63.556299) (xy 138.779045 63.563287) (xy 138.710818 63.583984) + (xy 138.647939 63.617594) (xy 138.592825 63.662825) (xy 138.547594 63.717939) (xy 138.513984 63.780818) (xy 138.493287 63.849045) + (xy 138.486299 63.92) (xy 138.486299 65.62) (xy 138.493287 65.690955) (xy 138.513984 65.759182) (xy 138.547594 65.822061) + (xy 138.592825 65.877175) (xy 138.647939 65.922406) (xy 138.710818 65.956016) (xy 138.779045 65.976713) (xy 138.85 65.983701) + (xy 140.442052 65.983701) (xy 140.442052 66.497863) (xy 139.28586 67.654057) (xy 139.262351 67.67335) (xy 139.205295 67.742874) + (xy 139.185379 67.767142) (xy 139.128184 67.874146) (xy 139.092963 67.990254) (xy 139.08107 68.111) (xy 139.084051 68.141265) + (xy 139.084051 68.255299) (xy 138.85 68.255299) (xy 138.779045 68.262287) (xy 138.710818 68.282984) (xy 138.647939 68.316594) + (xy 138.592825 68.361825) (xy 138.547594 68.416939) (xy 138.513984 68.479818) (xy 138.493287 68.548045) (xy 138.486299 68.619) + (xy 138.486299 70.319) (xy 138.493287 70.389955) (xy 138.513984 70.458182) (xy 138.547594 70.521061) (xy 138.592825 70.576175) + (xy 138.647939 70.621406) (xy 138.710818 70.655016) (xy 138.779045 70.675713) (xy 138.85 70.682701) (xy 140.55 70.682701) + (xy 140.620955 70.675713) (xy 140.689182 70.655016) (xy 140.752061 70.621406) (xy 140.807175 70.576175) (xy 140.852406 70.521061) + (xy 140.886016 70.458182) (xy 140.906713 70.389955) (xy 140.913701 70.319) (xy 140.913701 69.762) (xy 144.96207 69.762) + (xy 144.96505 70.311963) (xy 145.119037 70.46595) (xy 146.28495 70.46595) (xy 146.28495 69.300037) (xy 146.57705 69.300037) + (xy 146.57705 70.46595) (xy 147.742963 70.46595) (xy 147.89695 70.311963) (xy 147.89993 69.762) (xy 147.888037 69.641253) + (xy 147.852817 69.525146) (xy 147.795621 69.418141) (xy 147.71865 69.32435) (xy 147.624859 69.247379) (xy 147.517854 69.190183) + (xy 147.401747 69.154963) (xy 147.281 69.14307) (xy 146.731037 69.14605) (xy 146.57705 69.300037) (xy 146.28495 69.300037) + (xy 146.130963 69.14605) (xy 145.581 69.14307) (xy 145.460253 69.154963) (xy 145.344146 69.190183) (xy 145.237141 69.247379) + (xy 145.14335 69.32435) (xy 145.066379 69.418141) (xy 145.009183 69.525146) (xy 144.973963 69.641253) (xy 144.96207 69.762) + (xy 140.913701 69.762) (xy 140.913701 68.619) (xy 140.906713 68.548045) (xy 140.886016 68.479818) (xy 140.852406 68.416939) + (xy 140.807175 68.361825) (xy 140.752061 68.316594) (xy 140.689182 68.282984) (xy 140.620955 68.262287) (xy 140.55 68.255299) + (xy 140.426784 68.255299) (xy 141.472153 67.209932) (xy 141.495651 67.190648) (xy 141.516577 67.165149) (xy 141.572621 67.096859) + (xy 141.629817 66.989854) (xy 141.630368 66.988039) (xy 141.665038 66.873745) (xy 141.673951 66.783253) (xy 141.676931 66.753) + (xy 141.673951 66.722747) (xy 141.673949 62.260265) (xy 141.67693 62.23) (xy 141.665037 62.109253) (xy 141.630142 61.994217) (xy 146.19605 61.994217) (xy 146.19605 62.465783) (xy 146.288048 62.928289) (xy 146.468509 63.36396) (xy 146.730498 63.756054) (xy 147.063946 64.089502) (xy 147.45604 64.351491) (xy 147.891711 64.531952) (xy 148.354217 64.62395) (xy 148.825783 64.62395) (xy 149.288289 64.531952) (xy 149.72396 64.351491) (xy 150.116054 64.089502) (xy 150.449502 63.756054) (xy 150.711491 63.36396) (xy 150.891952 62.928289) (xy 150.98395 62.465783) (xy 150.98395 61.994217) (xy 150.891952 61.531711) (xy 150.711491 61.09604) (xy 150.449502 60.703946) (xy 150.116054 60.370498) (xy 149.72396 60.108509) (xy 149.288289 59.928048) (xy 148.825783 59.83605) (xy 148.354217 59.83605) (xy 147.891711 59.928048) (xy 147.45604 60.108509) (xy 147.063946 60.370498) (xy 146.730498 60.703946) - (xy 146.468509 61.09604) (xy 146.288048 61.531711) (xy 146.19605 61.994217) (xy 144.704866 61.994217) (xy 144.742027 61.957057) - (xy 144.76553 61.93777) (xy 144.842501 61.843979) (xy 144.842502 61.843978) (xy 144.899697 61.736975) (xy 144.934917 61.620867) - (xy 144.94681 61.50012) (xy 144.94383 61.469865) (xy 144.94383 58.494535) (xy 145.055897 58.382468) (xy 145.158469 58.228959) - (xy 145.229122 58.058389) (xy 145.26514 57.877312) (xy 145.26514 57.692688) (xy 145.229122 57.511611) (xy 145.158469 57.341041) - (xy 145.055897 57.187532) (xy 144.925348 57.056983) (xy 144.771839 56.954411) (xy 144.601269 56.883758) (xy 144.420192 56.84774) - (xy 144.235568 56.84774) (xy 144.054491 56.883758) (xy 143.883921 56.954411) (xy 143.730412 57.056983) (xy 143.599863 57.187532) - (xy 143.497291 57.341041) (xy 143.426638 57.511611) (xy 143.39062 57.692688) (xy 143.39062 57.877312) (xy 143.426638 58.058389) - (xy 143.497291 58.228959) (xy 143.599863 58.382468) (xy 143.71193 58.494535) (xy 143.71193 58.628865) (xy 143.711931 58.628875) - (xy 143.71193 61.244985) (xy 140.913701 64.043216) (xy 140.913701 63.92) (xy 140.906713 63.849045) (xy 140.886016 63.780818) - (xy 140.852406 63.717939) (xy 140.807175 63.662825) (xy 140.752061 63.617594) (xy 140.689182 63.583984) (xy 140.620955 63.563287) - (xy 140.55 63.556299) (xy 139.078542 63.556299) (xy 139.087929 63.461002) (xy 139.086225 63.443701) (xy 140.55 63.443701) - (xy 140.620955 63.436713) (xy 140.689182 63.416016) (xy 140.752061 63.382406) (xy 140.807175 63.337175) (xy 140.852406 63.282061) - (xy 140.886016 63.219182) (xy 140.906713 63.150955) (xy 140.913701 63.08) (xy 140.913701 61.38) (xy 140.906713 61.309045) - (xy 140.886016 61.240818) (xy 140.852406 61.177939) (xy 140.807175 61.122825) (xy 140.752061 61.077594) (xy 140.689182 61.043984) - (xy 140.620955 61.023287) (xy 140.55 61.016299) (xy 138.957949 61.016299) (xy 138.957949 60.525894) (xy 140.709386 58.774458) - (xy 140.70939 58.774453) (xy 140.761583 58.72226) (xy 140.920072 58.72226) (xy 141.101149 58.686242) (xy 141.271719 58.615589) - (xy 141.425228 58.513017) (xy 141.555777 58.382468) (xy 141.658349 58.228959) (xy 141.729002 58.058389) (xy 141.76502 57.877312) - (xy 141.76502 57.692688) (xy 141.729002 57.511611) (xy 141.658349 57.341041) (xy 141.555777 57.187532) (xy 141.425228 57.056983) - (xy 141.271719 56.954411) (xy 141.101149 56.883758) (xy 140.920072 56.84774) (xy 140.735448 56.84774) (xy 140.554371 56.883758) - (xy 140.383801 56.954411) (xy 140.230292 57.056983) (xy 140.099743 57.187532) (xy 139.997171 57.341041) (xy 139.926518 57.511611) - (xy 139.8905 57.692688) (xy 139.8905 57.851177) (xy 139.838307 57.90337) (xy 139.838302 57.903374) (xy 138.012064 59.729613) - (xy 137.954378 59.799903) (xy 137.897183 59.906907) (xy 137.861962 60.023015) (xy 137.850069 60.143761) (xy 137.861962 60.264507) - (xy 137.897183 60.380615) (xy 137.954378 60.487619) (xy 137.98005 60.5189) (xy 137.98005 61.336094) (xy 137.932573 61.288617) - (xy 137.734074 61.155984) (xy 137.513513 61.064625) (xy 137.279367 61.01805) (xy 137.040633 61.01805) (xy 136.806487 61.064625) - (xy 136.585926 61.155984) (xy 136.387427 61.288617) (xy 136.218617 61.457427) (xy 136.085984 61.655926) (xy 135.994625 61.876487) - (xy 135.94805 62.110633) (xy 135.94805 62.349367) (xy 135.994625 62.583513) (xy 136.085984 62.804074) (xy 136.218617 63.002573) - (xy 136.387427 63.171383) (xy 136.585926 63.304016) (xy 136.806487 63.395375) (xy 137.040633 63.44195) (xy 137.279367 63.44195) - (xy 137.513513 63.395375) (xy 137.734074 63.304016) (xy 137.796835 63.26208) (xy 137.464117 63.594799) (xy 137.279367 63.55805) - (xy 137.040633 63.55805) (xy 136.806487 63.604625) (xy 136.585926 63.695984) (xy 136.387427 63.828617) (xy 136.218617 63.997427) - (xy 136.085984 64.195926) (xy 135.994625 64.416487) (xy 135.94805 64.650633) (xy 135.94805 64.889367) (xy 135.984799 65.074117) - (xy 135.895857 65.16306) (xy 135.895852 65.163064) (xy 135.652078 65.406839) (xy 135.694016 65.344074) (xy 135.785375 65.123513) - (xy 135.83195 64.889367) (xy 135.83195 64.650633) (xy 135.785375 64.416487) (xy 135.694016 64.195926) (xy 135.561383 63.997427) - (xy 135.392573 63.828617) (xy 135.194074 63.695984) (xy 134.973513 63.604625) (xy 134.739367 63.55805) (xy 134.500633 63.55805) - (xy 134.266487 63.604625) (xy 134.045926 63.695984) (xy 133.877949 63.808223) (xy 133.877949 63.191777) (xy 134.045926 63.304016) - (xy 134.266487 63.395375) (xy 134.500633 63.44195) (xy 134.739367 63.44195) (xy 134.973513 63.395375) (xy 135.194074 63.304016) - (xy 135.392573 63.171383) (xy 135.561383 63.002573) (xy 135.694016 62.804074) (xy 135.785375 62.583513) (xy 135.83195 62.349367) - (xy 135.83195 62.110633) (xy 135.785375 61.876487) (xy 135.694016 61.655926) (xy 135.561383 61.457427) (xy 135.392573 61.288617) - (xy 135.194074 61.155984) (xy 134.973513 61.064625) (xy 134.739367 61.01805) (xy 134.500633 61.01805) (xy 134.266487 61.064625) - (xy 134.045926 61.155984) (xy 133.950097 61.220015) (xy 136.693634 58.476479) (xy 136.730172 58.513017) (xy 136.883681 58.615589) - (xy 137.054251 58.686242) (xy 137.235328 58.72226) (xy 137.419952 58.72226) (xy 137.601029 58.686242) (xy 137.771599 58.615589) - (xy 137.925108 58.513017) (xy 138.055657 58.382468) (xy 138.158229 58.228959) (xy 138.228882 58.058389) (xy 138.2649 57.877312) - (xy 138.2649 57.692688) (xy 138.228882 57.511611) (xy 138.158229 57.341041) (xy 138.055657 57.187532) (xy 137.925108 57.056983) - (xy 137.771599 56.954411) (xy 137.601029 56.883758) (xy 137.419952 56.84774) (xy 137.235328 56.84774) (xy 137.054251 56.883758) - (xy 136.883681 56.954411) (xy 136.730172 57.056983) (xy 136.618105 57.16905) (xy 136.544284 57.16905) (xy 136.514029 57.16607) - (xy 136.483774 57.16905) (xy 136.393282 57.177963) (xy 136.277175 57.213183) (xy 136.17017 57.270379) (xy 136.076379 57.34735) - (xy 136.057086 57.370859) (xy 132.847859 60.580087) (xy 132.82435 60.59938) (xy 132.759654 60.678214) (xy 132.747378 60.693172) - (xy 132.690183 60.800176) (xy 132.654962 60.916284) (xy 132.643069 61.03703) (xy 132.64605 61.067295) (xy 132.646049 64.583825) - (xy 132.643069 64.61408) (xy 132.646669 64.650633) (xy 132.654962 64.734826) (xy 132.690182 64.850933) (xy 132.747378 64.957938) - (xy 132.824349 65.05173) (xy 132.847862 65.071027) (xy 132.960975 65.18414) (xy 132.980269 65.20765) (xy 133.07406 65.284621) - (xy 133.178481 65.340436) (xy 132.68186 65.837057) (xy 132.658351 65.85635) (xy 132.598672 65.92907) (xy 132.581379 65.950142) - (xy 132.524184 66.057146) (xy 132.488963 66.173254) (xy 132.47707 66.294) (xy 132.480051 66.324265) (xy 132.48005 70.835745) - (xy 132.47707 70.866) (xy 132.482615 70.922299) (xy 132.488963 70.986746) (xy 132.524183 71.102853) (xy 132.581379 71.209858) - (xy 132.65835 71.30365) (xy 132.681864 71.322947) (xy 133.40805 72.049134) (xy 133.40805 72.255367) (xy 133.454625 72.489513) - (xy 133.545984 72.710074) (xy 133.678617 72.908573) (xy 133.847427 73.077383) (xy 133.949596 73.14565) (xy 131.731075 73.14565) - (xy 131.742016 73.125182) (xy 131.762713 73.056955) (xy 131.769701 72.986) (xy 131.769701 72.613674) (xy 131.848018 72.589916) - (xy 131.93296 72.544513) (xy 132.007412 72.483412) (xy 132.02272 72.464759) (xy 132.11576 72.371719) (xy 132.134413 72.356411) - (xy 132.195514 72.281959) (xy 132.240917 72.197017) (xy 132.268876 72.10485) (xy 132.275951 72.033013) (xy 132.275951 72.03301) - (xy 132.278316 72.008999) (xy 132.275951 71.984988) (xy 132.275951 64.921012) (xy 132.278316 64.897001) (xy 132.275248 64.86585) - (xy 132.268876 64.80115) (xy 132.259427 64.77) (xy 132.268876 64.73885) (xy 132.275951 64.667013) (xy 132.275951 64.66701) - (xy 132.278316 64.642999) (xy 132.275951 64.618988) (xy 132.275951 60.426828) (xy 134.005982 58.696798) (xy 134.133988 58.72226) - (xy 134.318612 58.72226) (xy 134.499689 58.686242) (xy 134.670259 58.615589) (xy 134.823768 58.513017) (xy 134.954317 58.382468) - (xy 135.056889 58.228959) (xy 135.127542 58.058389) (xy 135.16356 57.877312) (xy 135.16356 57.692688) (xy 135.127542 57.511611) - (xy 135.056889 57.341041) (xy 134.954317 57.187532) (xy 134.823768 57.056983) (xy 134.670259 56.954411) (xy 134.499689 56.883758) - (xy 134.318612 56.84774) (xy 134.133988 56.84774) (xy 133.952911 56.883758) (xy 133.782341 56.954411) (xy 133.628832 57.056983) - (xy 133.498283 57.187532) (xy 133.395711 57.341041) (xy 133.325058 57.511611) (xy 133.28904 57.692688) (xy 133.28904 57.877312) - (xy 133.314502 58.005318) (xy 131.458238 59.861583) (xy 131.43959 59.876887) (xy 131.424286 59.895535) (xy 131.424281 59.89554) - (xy 131.378488 59.951339) (xy 131.340177 60.023015) (xy 131.333086 60.036281) (xy 131.307767 60.119747) (xy 131.305127 60.128449) - (xy 131.295687 60.224299) (xy 131.298052 60.248312) (xy 131.298052 61.016299) (xy 129.735951 61.016299) (xy 129.735951 59.967088) - (xy 131.006242 58.696798) (xy 131.134248 58.72226) (xy 131.318872 58.72226) (xy 131.499949 58.686242) (xy 131.670519 58.615589) - (xy 131.824028 58.513017) (xy 131.954577 58.382468) (xy 132.057149 58.228959) (xy 132.127802 58.058389) (xy 132.16382 57.877312) - (xy 132.16382 57.692688) (xy 132.127802 57.511611) (xy 132.057149 57.341041) (xy 131.954577 57.187532) (xy 131.824028 57.056983) - (xy 131.670519 56.954411) (xy 131.499949 56.883758) (xy 131.318872 56.84774) (xy 131.134248 56.84774) (xy 130.953171 56.883758) - (xy 130.782601 56.954411) (xy 130.629092 57.056983) (xy 130.498543 57.187532) (xy 130.395971 57.341041) (xy 130.325318 57.511611) - (xy 130.2893 57.692688) (xy 130.2893 57.877312) (xy 130.314762 58.005318) (xy 128.918238 59.401843) (xy 128.89959 59.417147) - (xy 128.884286 59.435795) (xy 128.884281 59.4358) (xy 128.838488 59.491599) (xy 128.814609 59.536274) (xy 128.793086 59.576541) - (xy 128.765127 59.668708) (xy 128.758052 59.740545) (xy 128.755687 59.764559) (xy 128.758052 59.788572) (xy 128.758052 61.268223) - (xy 128.590074 61.155984) (xy 128.369513 61.064625) (xy 128.135367 61.01805) (xy 127.896633 61.01805) (xy 127.662487 61.064625) - (xy 127.441926 61.155984) (xy 127.273949 61.268223) (xy 127.273949 59.42935) (xy 128.006502 58.696798) (xy 128.134508 58.72226) - (xy 128.319132 58.72226) (xy 128.500209 58.686242) (xy 128.670779 58.615589) (xy 128.824288 58.513017) (xy 128.954837 58.382468) - (xy 129.057409 58.228959) (xy 129.128062 58.058389) (xy 129.16408 57.877312) (xy 129.16408 57.692688) (xy 129.128062 57.511611) - (xy 129.057409 57.341041) (xy 128.954837 57.187532) (xy 128.824288 57.056983) (xy 128.670779 56.954411) (xy 128.500209 56.883758) - (xy 128.319132 56.84774) (xy 128.134508 56.84774) (xy 127.953431 56.883758) (xy 127.782861 56.954411) (xy 127.629352 57.056983) - (xy 127.498803 57.187532) (xy 127.396231 57.341041) (xy 127.325578 57.511611) (xy 127.28956 57.692688) (xy 127.28956 57.877312) - (xy 127.315022 58.005318) (xy 126.456236 58.864105) (xy 126.437588 58.879409) (xy 126.422284 58.898057) (xy 126.422279 58.898062) - (xy 126.376486 58.953861) (xy 126.341832 59.018695) (xy 126.331084 59.038803) (xy 126.307347 59.117054) (xy 126.303125 59.130971) - (xy 126.293685 59.226821) (xy 126.29605 59.250834) (xy 126.29605 61.336094) (xy 126.248573 61.288617) (xy 126.050074 61.155984) - (xy 125.829513 61.064625) (xy 125.595367 61.01805) (xy 125.356633 61.01805) (xy 125.122487 61.064625) (xy 124.901926 61.155984) - (xy 124.733949 61.268223) (xy 124.733949 58.96961) (xy 125.006761 58.696798) (xy 125.134768 58.72226) (xy 125.319392 58.72226) - (xy 125.500469 58.686242) (xy 125.671039 58.615589) (xy 125.824548 58.513017) (xy 125.955097 58.382468) (xy 126.057669 58.228959) - (xy 126.128322 58.058389) (xy 126.16434 57.877312) (xy 126.16434 57.692688) (xy 126.128322 57.511611) (xy 126.057669 57.341041) - (xy 125.955097 57.187532) (xy 125.824548 57.056983) (xy 125.671039 56.954411) (xy 125.500469 56.883758) (xy 125.319392 56.84774) - (xy 125.134768 56.84774) (xy 124.953691 56.883758) (xy 124.783121 56.954411) (xy 124.629612 57.056983) (xy 124.499063 57.187532) - (xy 124.396491 57.341041) (xy 124.325838 57.511611) (xy 124.28982 57.692688) (xy 124.28982 57.877312) (xy 124.315282 58.005319) - (xy 123.916236 58.404365) (xy 123.897588 58.419669) (xy 123.882284 58.438317) (xy 123.882279 58.438322) (xy 123.836486 58.494121) - (xy 123.798719 58.564779) (xy 123.791084 58.579063) (xy 123.763125 58.67123) (xy 123.757066 58.732751) (xy 123.753685 58.767081) - (xy 123.75605 58.791094) (xy 123.756049 61.336093) (xy 123.708573 61.288617) (xy 123.510074 61.155984) (xy 123.289513 61.064625) - (xy 123.055367 61.01805) (xy 122.816633 61.01805) (xy 122.582487 61.064625) (xy 122.361926 61.155984) (xy 122.163427 61.288617) - (xy 122.115951 61.336093) (xy 122.115951 58.718465) (xy 122.135028 58.72226) (xy 122.319652 58.72226) (xy 122.500729 58.686242) - (xy 122.671299 58.615589) (xy 122.824808 58.513017) (xy 122.955357 58.382468) (xy 123.057929 58.228959) (xy 123.128582 58.058389) - (xy 123.1646 57.877312) (xy 123.1646 57.692688) (xy 123.128582 57.511611) (xy 123.057929 57.341041) (xy 122.955357 57.187532) - (xy 122.824808 57.056983) (xy 122.671299 56.954411) (xy 122.500729 56.883758) (xy 122.319652 56.84774) (xy 122.135028 56.84774) - (xy 121.953951 56.883758) (xy 121.783381 56.954411) (xy 121.629872 57.056983) (xy 121.499323 57.187532) (xy 121.396751 57.341041) - (xy 121.326098 57.511611) (xy 121.29008 57.692688) (xy 121.29008 57.877312) (xy 121.315542 58.005319) (xy 121.298238 58.022623) - (xy 121.27959 58.037927) (xy 121.264286 58.056575) (xy 121.264281 58.05658) (xy 121.218488 58.112379) (xy 121.186465 58.172291) - (xy 121.173086 58.197321) (xy 121.145127 58.289488) (xy 121.140896 58.332453) (xy 121.135687 58.385339) (xy 121.138052 58.409352) - (xy 121.138051 61.268223) (xy 120.970074 61.155984) (xy 120.749513 61.064625) (xy 120.515367 61.01805) (xy 120.276633 61.01805) - (xy 120.042487 61.064625) (xy 119.821926 61.155984) (xy 119.653949 61.268223) (xy 119.653949 58.838203) (xy 119.681516 58.786629) - (xy 119.709475 58.694462) (xy 119.71655 58.622625) (xy 119.71655 58.622615) (xy 119.718914 58.598612) (xy 119.717559 58.584853) - (xy 119.825068 58.513017) (xy 119.955617 58.382468) (xy 120.058189 58.228959) (xy 120.128842 58.058389) (xy 120.16486 57.877312) - (xy 120.16486 57.692688) (xy 120.128842 57.511611) (xy 120.058189 57.341041) (xy 119.955617 57.187532) (xy 119.825068 57.056983) - (xy 119.671559 56.954411) (xy 119.500989 56.883758) (xy 119.319912 56.84774) (xy 119.135288 56.84774) (xy 118.954211 56.883758) - (xy 118.783641 56.954411) (xy 118.630132 57.056983) (xy 118.499583 57.187532) (xy 118.397011 57.341041) (xy 118.326358 57.511611) - (xy 118.29034 57.692688) (xy 118.29034 57.877312) (xy 118.326358 58.058389) (xy 118.397011 58.228959) (xy 118.499583 58.382468) - (xy 118.630132 58.513017) (xy 118.687396 58.55128) (xy 118.683125 58.565361) (xy 118.67696 58.627963) (xy 118.673685 58.661212) - (xy 118.67605 58.685225) (xy 118.676049 61.336093) (xy 118.628573 61.288617) (xy 118.430074 61.155984) (xy 118.209513 61.064625) - (xy 117.975367 61.01805) (xy 117.736633 61.01805) (xy 117.502487 61.064625) (xy 117.281926 61.155984) (xy 117.113949 61.268223) - (xy 117.113949 59.01975) (xy 117.116313 58.995749) (xy 117.113949 58.971748) (xy 117.113949 58.971736) (xy 117.106874 58.899899) - (xy 117.078915 58.807732) (xy 117.045355 58.744946) (xy 117.033512 58.722789) (xy 116.987719 58.66699) (xy 116.987715 58.666986) - (xy 116.972411 58.648338) (xy 116.953763 58.633034) (xy 116.829537 58.508808) (xy 116.955877 58.382468) (xy 117.058449 58.228959) - (xy 117.129102 58.058389) (xy 117.16512 57.877312) (xy 117.16512 57.692688) (xy 117.129102 57.511611) (xy 117.058449 57.341041) - (xy 116.955877 57.187532) (xy 116.825328 57.056983) (xy 116.671819 56.954411) (xy 116.501249 56.883758) (xy 116.320172 56.84774) - (xy 116.135548 56.84774) (xy 115.954471 56.883758) (xy 115.783901 56.954411) (xy 115.630392 57.056983) (xy 115.499843 57.187532) - (xy 115.397271 57.341041) (xy 115.326618 57.511611) (xy 115.2906 57.692688) (xy 115.2906 57.877312) (xy 115.326618 58.058389) - (xy 115.397271 58.228959) (xy 115.499843 58.382468) (xy 115.630392 58.513017) (xy 115.737901 58.584853) (xy 115.736546 58.598611) - (xy 115.73891 58.622614) (xy 115.73891 58.622624) (xy 115.745985 58.694461) (xy 115.773944 58.786628) (xy 115.819347 58.871571) - (xy 115.880448 58.946023) (xy 115.899101 58.961331) (xy 116.13605 59.198281) (xy 116.136049 61.336093) (xy 116.088573 61.288617) - (xy 115.890074 61.155984) (xy 115.669513 61.064625) (xy 115.435367 61.01805) (xy 115.196633 61.01805) (xy 114.962487 61.064625) - (xy 114.741926 61.155984) (xy 114.543427 61.288617) (xy 114.495951 61.336093) (xy 114.495951 58.587881) (xy 114.498315 58.56388) - (xy 114.495951 58.539879) (xy 114.495951 58.539867) (xy 114.488876 58.46803) (xy 114.460917 58.375863) (xy 114.415514 58.290921) - (xy 114.354413 58.216469) (xy 114.33576 58.201161) (xy 114.166154 58.031555) (xy 114.166149 58.031549) (xy 114.139918 58.005318) - (xy 114.16538 57.877312) (xy 114.16538 57.692688) (xy 114.129362 57.511611) (xy 114.058709 57.341041) (xy 113.956137 57.187532) - (xy 113.825588 57.056983) (xy 113.672079 56.954411) (xy 113.501509 56.883758) (xy 113.320432 56.84774) (xy 113.135808 56.84774) - (xy 112.954731 56.883758) (xy 112.784161 56.954411) (xy 112.630652 57.056983) (xy 112.500103 57.187532) (xy 112.397531 57.341041) - (xy 112.326878 57.511611) (xy 112.29086 57.692688) (xy 112.29086 57.877312) (xy 112.326878 58.058389) (xy 112.397531 58.228959) - (xy 112.500103 58.382468) (xy 112.630652 58.513017) (xy 112.784161 58.615589) (xy 112.954731 58.686242) (xy 113.135808 58.72226) - (xy 113.320432 58.72226) (xy 113.448438 58.696798) (xy 113.474669 58.723029) (xy 113.474675 58.723034) (xy 113.518052 58.766411) - (xy 113.518051 61.268223) (xy 113.350074 61.155984) (xy 113.129513 61.064625) (xy 112.895367 61.01805) (xy 112.656633 61.01805) - (xy 112.422487 61.064625) (xy 112.201926 61.155984) (xy 112.003427 61.288617) (xy 111.955951 61.336093) (xy 111.955951 59.151763) - (xy 111.958315 59.12776) (xy 111.955951 59.103757) (xy 111.955951 59.103747) (xy 111.948876 59.03191) (xy 111.920917 58.939743) - (xy 111.898317 58.897462) (xy 111.875514 58.8548) (xy 111.829721 58.799001) (xy 111.829717 58.798997) (xy 111.814413 58.780349) - (xy 111.795765 58.765045) (xy 111.062273 58.031554) (xy 111.062269 58.031549) (xy 111.036038 58.005318) (xy 111.0615 57.877312) - (xy 111.0615 57.692688) (xy 111.025482 57.511611) (xy 110.954829 57.341041) (xy 110.852257 57.187532) (xy 110.721708 57.056983) - (xy 110.568199 56.954411) (xy 110.397629 56.883758) (xy 110.216552 56.84774) (xy 110.031928 56.84774) (xy 109.850851 56.883758) - (xy 109.680281 56.954411) (xy 109.526772 57.056983) (xy 109.396223 57.187532) (xy 109.293651 57.341041) (xy 109.222998 57.511611) - (xy 109.18698 57.692688) (xy 109.18698 57.877312) (xy 109.222998 58.058389) (xy 109.293651 58.228959) (xy 109.396223 58.382468) - (xy 109.526772 58.513017) (xy 109.680281 58.615589) (xy 109.850851 58.686242) (xy 110.031928 58.72226) (xy 110.216552 58.72226) - (xy 110.344558 58.696798) (xy 110.370789 58.723029) (xy 110.370794 58.723033) (xy 110.978052 59.330292) (xy 110.978052 61.016299) - (xy 109.415951 61.016299) (xy 109.415951 60.111884) (xy 109.418315 60.087881) (xy 109.415951 60.063878) (xy 109.415951 60.063867) - (xy 109.408876 59.99203) (xy 109.380917 59.899863) (xy 109.380917 59.899862) (xy 109.335515 59.81492) (xy 109.289721 59.759121) - (xy 109.289717 59.759117) (xy 109.274413 59.740469) (xy 109.255765 59.725165) (xy 107.562153 58.031554) (xy 107.562149 58.031549) - (xy 107.535918 58.005318) (xy 107.56138 57.877312) (xy 107.56138 57.692688) (xy 107.525362 57.511611) (xy 107.454709 57.341041) - (xy 107.352137 57.187532) (xy 107.221588 57.056983) (xy 107.068079 56.954411) (xy 106.897509 56.883758) (xy 106.716432 56.84774) - (xy 106.531808 56.84774) (xy 106.350731 56.883758) (xy 106.180161 56.954411) (xy 106.026652 57.056983) (xy 105.896103 57.187532) - (xy 105.793531 57.341041) (xy 105.722878 57.511611) (xy 105.68686 57.692688) (xy 105.68686 57.877312) (xy 105.722878 58.058389) - (xy 105.793531 58.228959) (xy 105.896103 58.382468) (xy 106.026652 58.513017) (xy 106.180161 58.615589) (xy 106.350731 58.686242) - (xy 106.531808 58.72226) (xy 106.716432 58.72226) (xy 106.844438 58.696798) (xy 106.870669 58.723029) (xy 106.870674 58.723033) - (xy 108.438052 60.290412) (xy 108.438052 61.016299) (xy 106.846 61.016299) (xy 106.775045 61.023287) (xy 106.706818 61.043984) - (xy 106.643939 61.077594) (xy 106.588825 61.122825) (xy 106.543594 61.177939) (xy 106.509984 61.240818) (xy 106.489287 61.309045) - (xy 106.482299 61.38) (xy 106.482299 63.08) (xy 106.489287 63.150955) (xy 106.509984 63.219182) (xy 106.543594 63.282061) - (xy 106.588825 63.337175) (xy 106.643939 63.382406) (xy 106.706818 63.416016) (xy 106.775045 63.436713) (xy 106.846 63.443701) - (xy 108.438051 63.443701) (xy 108.438051 63.558175) (xy 108.419 63.556299) (xy 106.719 63.556299) (xy 106.648045 63.563287) - (xy 106.579818 63.583984) (xy 106.516939 63.617594) (xy 106.461825 63.662825) (xy 106.416594 63.717939) (xy 106.382984 63.780818) - (xy 106.362287 63.849045) (xy 106.355299 63.92) (xy 106.355299 65.62) (xy 106.362287 65.690955) (xy 106.382984 65.759182) - (xy 106.416594 65.822061) (xy 106.461825 65.877175) (xy 106.516939 65.922406) (xy 106.579818 65.956016) (xy 106.648045 65.976713) - (xy 106.719 65.983701) (xy 108.218221 65.983701) (xy 108.477051 66.242531) (xy 108.477051 68.382299) (xy 106.846 68.382299) - (xy 106.775045 68.389287) (xy 106.706818 68.409984) (xy 106.643939 68.443594) (xy 106.588825 68.488825) (xy 106.543594 68.543939) - (xy 106.509984 68.606818) (xy 106.489287 68.675045) (xy 106.482299 68.746) (xy 106.482299 70.446) (xy 106.489287 70.516955) - (xy 106.509984 70.585182) (xy 106.543594 70.648061) (xy 106.588825 70.703175) (xy 106.643939 70.748406) (xy 106.706818 70.782016) - (xy 106.775045 70.802713) (xy 106.846 70.809701) (xy 108.330819 70.809701) (xy 108.218221 70.922299) (xy 106.846 70.922299) - (xy 106.775045 70.929287) (xy 106.706818 70.949984) (xy 106.643939 70.983594) (xy 106.588825 71.028825) (xy 106.543594 71.083939) - (xy 106.509984 71.146818) (xy 106.489287 71.215045) (xy 106.482299 71.286) (xy 106.482299 72.986) (xy 106.489287 73.056955) - (xy 106.509984 73.125182) (xy 106.520925 73.14565) (xy 102.521075 73.14565) (xy 102.532016 73.125182) (xy 102.552713 73.056955) - (xy 102.559701 72.986) (xy 102.559701 71.793383) (xy 103.538147 70.814938) (xy 103.56165 70.79565) (xy 103.638621 70.701859) - (xy 103.695817 70.594854) (xy 103.731037 70.478747) (xy 103.73995 70.388255) (xy 103.73995 70.388254) (xy 103.74293 70.358) - (xy 103.73995 70.327745) (xy 103.73995 66.578255) (xy 103.74293 66.548) (xy 103.731037 66.427253) (xy 103.719691 66.38985) - (xy 103.695817 66.311146) (xy 103.638621 66.204141) (xy 103.56165 66.11035) (xy 103.538146 66.091061) (xy 102.559701 65.112617) - (xy 102.559701 63.92) (xy 102.552713 63.849045) (xy 102.532016 63.780818) (xy 102.498406 63.717939) (xy 102.453175 63.662825) - (xy 102.398061 63.617594) (xy 102.335182 63.583984) (xy 102.266955 63.563287) (xy 102.196 63.556299) (xy 100.496 63.556299) - (xy 100.495438 63.556354) (xy 100.353127 63.414043) (xy 100.356818 63.416016) (xy 100.425045 63.436713) (xy 100.496 63.443701) - (xy 102.196 63.443701) (xy 102.266955 63.436713) (xy 102.335182 63.416016) (xy 102.398061 63.382406) (xy 102.453175 63.337175) - (xy 102.498406 63.282061) (xy 102.532016 63.219182) (xy 102.552713 63.150955) (xy 102.559701 63.08) (xy 102.559701 61.38) - (xy 102.552713 61.309045) (xy 102.532016 61.240818) (xy 102.498406 61.177939) (xy 102.453175 61.122825) (xy 102.398061 61.077594) - (xy 102.335182 61.043984) (xy 102.266955 61.023287) (xy 102.196 61.016299) (xy 100.496 61.016299) (xy 100.425045 61.023287) - (xy 100.356818 61.043984) (xy 100.293939 61.077594) (xy 100.238825 61.122825) (xy 100.193594 61.177939) (xy 100.159984 61.240818) - (xy 100.139287 61.309045) (xy 100.132299 61.38) (xy 100.132299 63.08) (xy 100.139287 63.150955) (xy 100.159984 63.219182) - (xy 100.161957 63.222873) (xy 99.67595 62.736867) (xy 99.67595 59.454913) (xy 100.408604 58.72226) (xy 100.516292 58.72226) - (xy 100.697369 58.686242) (xy 100.867939 58.615589) (xy 101.021448 58.513017) (xy 101.151997 58.382468) (xy 101.254569 58.228959) - (xy 101.325222 58.058389) (xy 101.36124 57.877312) (xy 101.36124 57.692688) (xy 101.325222 57.511611) (xy 101.254569 57.341041) - (xy 101.151997 57.187532) (xy 101.021448 57.056983) (xy 100.867939 56.954411) (xy 100.697369 56.883758) (xy 100.516292 56.84774) - (xy 100.331668 56.84774) (xy 100.150591 56.883758) (xy 99.980021 56.954411) (xy 99.826512 57.056983) (xy 99.695963 57.187532) - (xy 99.593391 57.341041) (xy 99.522738 57.511611) (xy 99.48672 57.692688) (xy 99.48672 57.877312) (xy 99.490812 57.897884) - (xy 98.64586 58.742837) (xy 98.622351 58.76213) (xy 98.559058 58.839254) (xy 98.545379 58.855922) (xy 98.488184 58.962926) - (xy 98.452963 59.079034) (xy 98.44107 59.19978) (xy 98.444051 59.230045) (xy 98.44405 62.961745) (xy 98.44107 62.992) - (xy 98.44405 63.022254) (xy 98.452963 63.112746) (xy 98.488183 63.228853) (xy 98.545379 63.335858) (xy 98.62235 63.42965) - (xy 98.645864 63.448947) (xy 100.132299 64.935384) (xy 100.132299 65.62) (xy 100.139287 65.690955) (xy 100.159984 65.759182) - (xy 100.193594 65.822061) (xy 100.238825 65.877175) (xy 100.293939 65.922406) (xy 100.356818 65.956016) (xy 100.425045 65.976713) - (xy 100.496 65.983701) (xy 101.688617 65.983701) (xy 102.508051 66.803136) (xy 102.50805 68.561982) (xy 102.498406 68.543939) - (xy 102.453175 68.488825) (xy 102.398061 68.443594) (xy 102.335182 68.409984) (xy 102.266955 68.389287) (xy 102.196 68.382299) - (xy 100.496 68.382299) (xy 100.425045 68.389287) (xy 100.356818 68.409984) (xy 100.293939 68.443594) (xy 100.238825 68.488825) - (xy 100.193594 68.543939) (xy 100.159984 68.606818) (xy 100.139287 68.675045) (xy 100.132299 68.746) (xy 100.132299 70.446) - (xy 100.139287 70.516955) (xy 100.159984 70.585182) (xy 100.193594 70.648061) (xy 100.238825 70.703175) (xy 100.293939 70.748406) - (xy 100.356818 70.782016) (xy 100.425045 70.802713) (xy 100.496 70.809701) (xy 101.801215 70.809701) (xy 101.688617 70.922299) - (xy 100.496 70.922299) (xy 100.425045 70.929287) (xy 100.356818 70.949984) (xy 100.293939 70.983594) (xy 100.238825 71.028825) - (xy 100.193594 71.083939) (xy 100.159984 71.146818) (xy 100.139287 71.215045) (xy 100.132299 71.286) (xy 100.132299 72.986) - (xy 100.139287 73.056955) (xy 100.159984 73.125182) (xy 100.170925 73.14565) (xy 96.679075 73.14565) (xy 96.690016 73.125182) - (xy 96.710713 73.056955) (xy 96.717701 72.986) (xy 96.717701 71.867778) (xy 97.356764 71.228716) (xy 97.375412 71.213412) - (xy 97.390716 71.194764) (xy 97.39072 71.19476) (xy 97.436513 71.138961) (xy 97.477658 71.061984) (xy 97.481916 71.054018) - (xy 97.509875 70.961851) (xy 97.51695 70.890014) (xy 97.51695 70.890004) (xy 97.519314 70.866001) (xy 97.51695 70.841998) - (xy 97.51695 66.318) (xy 97.519314 66.293999) (xy 97.51695 66.269998) (xy 97.51695 66.269986) (xy 97.509875 66.198149) - (xy 97.481916 66.105982) (xy 97.446647 66.039999) (xy 97.436513 66.021039) (xy 97.390719 65.96524) (xy 97.375412 65.946588) - (xy 97.356759 65.93128) (xy 96.717701 65.292222) (xy 96.717701 64.247778) (xy 97.356759 63.60872) (xy 97.375412 63.593412) - (xy 97.420067 63.539) (xy 97.436513 63.518961) (xy 97.460781 63.473558) (xy 97.481916 63.434018) (xy 97.509875 63.341851) - (xy 97.51695 63.270014) (xy 97.51695 63.270002) (xy 97.519314 63.246001) (xy 97.51695 63.222) (xy 97.51695 58.701972) - (xy 97.596029 58.686242) (xy 97.766599 58.615589) (xy 97.920108 58.513017) (xy 98.050657 58.382468) (xy 98.153229 58.228959) - (xy 98.223882 58.058389) (xy 98.2599 57.877312) (xy 98.2599 57.692688) (xy 98.223882 57.511611) (xy 98.153229 57.341041) - (xy 98.050657 57.187532) (xy 97.920108 57.056983) (xy 97.766599 56.954411) (xy 97.596029 56.883758) (xy 97.414952 56.84774) - (xy 97.230328 56.84774) (xy 97.049251 56.883758) (xy 96.878681 56.954411) (xy 96.725172 57.056983) (xy 96.594623 57.187532) - (xy 96.492051 57.341041) (xy 96.421398 57.511611) (xy 96.38538 57.692688) (xy 96.38538 57.877312) (xy 96.421398 58.058389) - (xy 96.492051 58.228959) (xy 96.539051 58.299299) (xy 96.53905 61.068502) (xy 96.493182 61.043984) (xy 96.424955 61.023287) - (xy 96.354 61.016299) (xy 94.72295 61.016299) (xy 94.72295 58.633777) (xy 94.766859 58.615589) (xy 94.920368 58.513017) - (xy 95.050917 58.382468) (xy 95.153489 58.228959) (xy 95.224142 58.058389) (xy 95.26016 57.877312) (xy 95.26016 57.692688) - (xy 95.224142 57.511611) (xy 95.153489 57.341041) (xy 95.050917 57.187532) (xy 94.920368 57.056983) (xy 94.766859 56.954411) - (xy 94.596289 56.883758) (xy 94.415212 56.84774) (xy 94.230588 56.84774) (xy 94.049511 56.883758) (xy 93.878941 56.954411) - (xy 93.725432 57.056983) (xy 93.594883 57.187532) (xy 93.492311 57.341041) (xy 93.421658 57.511611) (xy 93.38564 57.692688) - (xy 93.38564 57.877312) (xy 93.421658 58.058389) (xy 93.492311 58.228959) (xy 93.594883 58.382468) (xy 93.725432 58.513017) - (xy 93.745051 58.526126) (xy 93.74505 61.297094) (xy 93.736573 61.288617) (xy 93.538074 61.155984) (xy 93.317513 61.064625) - (xy 93.083367 61.01805) (xy 92.844633 61.01805) (xy 92.610487 61.064625) (xy 92.389926 61.155984) (xy 92.191427 61.288617) - (xy 92.18295 61.297094) (xy 92.18295 58.158462) (xy 92.224402 58.058389) (xy 92.26042 57.877312) (xy 92.26042 57.692688) - (xy 92.224402 57.511611) (xy 92.153749 57.341041) (xy 92.051177 57.187532) (xy 91.920628 57.056983) (xy 91.767119 56.954411) - (xy 91.596549 56.883758) (xy 91.415472 56.84774) (xy 91.230848 56.84774) (xy 91.049771 56.883758) (xy 90.879201 56.954411) - (xy 90.725692 57.056983) (xy 90.595143 57.187532) (xy 90.492571 57.341041) (xy 90.421918 57.511611) (xy 90.3859 57.692688) - (xy 90.3859 57.877312) (xy 90.421918 58.058389) (xy 90.492571 58.228959) (xy 90.595143 58.382468) (xy 90.725692 58.513017) - (xy 90.879201 58.615589) (xy 91.049771 58.686242) (xy 91.205051 58.717129) (xy 91.20505 61.297094) (xy 91.196573 61.288617) - (xy 90.998074 61.155984) (xy 90.777513 61.064625) (xy 90.543367 61.01805) (xy 90.304633 61.01805) (xy 90.070487 61.064625) - (xy 89.849926 61.155984) (xy 89.651427 61.288617) (xy 89.64295 61.297094) (xy 89.64295 58.58878) (xy 89.645314 58.564779) - (xy 89.64295 58.540778) (xy 89.64295 58.540766) (xy 89.635875 58.468929) (xy 89.607916 58.376762) (xy 89.579169 58.32298) - (xy 89.562513 58.291819) (xy 89.51672 58.23602) (xy 89.516716 58.236016) (xy 89.501412 58.217368) (xy 89.482764 58.202064) - (xy 89.243646 57.962947) (xy 89.26068 57.877312) (xy 89.26068 57.692688) (xy 89.224662 57.511611) (xy 89.154009 57.341041) - (xy 89.051437 57.187532) (xy 88.920888 57.056983) (xy 88.767379 56.954411) (xy 88.596809 56.883758) (xy 88.415732 56.84774) - (xy 88.231108 56.84774) (xy 88.050031 56.883758) (xy 87.879461 56.954411) (xy 87.725952 57.056983) (xy 87.595403 57.187532) - (xy 87.492831 57.341041) (xy 87.422178 57.511611) (xy 87.38616 57.692688) (xy 87.38616 57.877312) (xy 87.422178 58.058389) - (xy 87.492831 58.228959) (xy 87.595403 58.382468) (xy 87.725952 58.513017) (xy 87.879461 58.615589) (xy 88.050031 58.686242) - (xy 88.231108 58.72226) (xy 88.415732 58.72226) (xy 88.58611 58.68837) (xy 88.665051 58.767311) (xy 88.66505 61.297094) - (xy 88.656573 61.288617) (xy 88.458074 61.155984) (xy 88.237513 61.064625) (xy 88.003367 61.01805) (xy 87.764633 61.01805) - (xy 87.530487 61.064625) (xy 87.309926 61.155984) (xy 87.111427 61.288617) (xy 86.942617 61.457427) (xy 86.809984 61.655926) - (xy 86.718625 61.876487) (xy 86.67205 62.110633) (xy 86.67205 62.349367) (xy 86.718625 62.583513) (xy 86.809984 62.804074) - (xy 86.942617 63.002573) (xy 87.111427 63.171383) (xy 87.309926 63.304016) (xy 87.530487 63.395375) (xy 87.764633 63.44195) - (xy 88.003367 63.44195) (xy 88.014856 63.439665) (xy 87.896471 63.55805) (xy 87.764633 63.55805) (xy 87.530487 63.604625) - (xy 87.309926 63.695984) (xy 87.111427 63.828617) (xy 86.942617 63.997427) (xy 86.809984 64.195926) (xy 86.718625 64.416487) - (xy 86.67205 64.650633) (xy 86.67205 64.889367) (xy 86.718625 65.123513) (xy 86.809984 65.344074) (xy 86.942617 65.542573) - (xy 87.111427 65.711383) (xy 87.309926 65.844016) (xy 87.530487 65.935375) (xy 87.764633 65.98195) (xy 88.003367 65.98195) - (xy 88.237513 65.935375) (xy 88.322636 65.900116) (xy 88.665051 66.242531) (xy 88.66505 68.663094) (xy 88.656573 68.654617) - (xy 88.458074 68.521984) (xy 88.237513 68.430625) (xy 88.003367 68.38405) (xy 87.764633 68.38405) (xy 87.530487 68.430625) - (xy 87.309926 68.521984) (xy 87.111427 68.654617) (xy 87.10295 68.663094) (xy 87.10295 66.064002) (xy 87.105314 66.039999) - (xy 87.10295 66.015996) (xy 87.10295 66.015986) (xy 87.095875 65.944149) (xy 87.067916 65.851982) (xy 87.041566 65.802685) - (xy 87.022513 65.767039) (xy 86.97672 65.71124) (xy 86.976716 65.711236) (xy 86.961412 65.692588) (xy 86.942764 65.677284) - (xy 86.474116 65.208636) (xy 86.509375 65.123513) (xy 86.55595 64.889367) (xy 86.55595 64.650633) (xy 86.509375 64.416487) - (xy 86.418016 64.195926) (xy 86.285383 63.997427) (xy 86.116573 63.828617) (xy 85.918074 63.695984) (xy 85.697513 63.604625) - (xy 85.463367 63.55805) (xy 85.224633 63.55805) (xy 84.990487 63.604625) (xy 84.905364 63.639884) (xy 84.56295 63.297471) - (xy 84.56295 63.162906) (xy 84.571427 63.171383) (xy 84.769926 63.304016) (xy 84.990487 63.395375) (xy 85.224633 63.44195) - (xy 85.463367 63.44195) (xy 85.697513 63.395375) (xy 85.918074 63.304016) (xy 86.116573 63.171383) (xy 86.285383 63.002573) - (xy 86.418016 62.804074) (xy 86.509375 62.583513) (xy 86.55595 62.349367) (xy 86.55595 62.110633) (xy 86.509375 61.876487) - (xy 86.418016 61.655926) (xy 86.285383 61.457427) (xy 86.116573 61.288617) (xy 85.918074 61.155984) (xy 85.697513 61.064625) - (xy 85.463367 61.01805) (xy 85.224633 61.01805) (xy 84.990487 61.064625) (xy 84.769926 61.155984) (xy 84.571427 61.288617) - (xy 84.56295 61.297094) (xy 84.56295 59.288009) (xy 85.145733 58.705226) (xy 85.231368 58.72226) (xy 85.415992 58.72226) - (xy 85.597069 58.686242) (xy 85.767639 58.615589) (xy 85.921148 58.513017) (xy 86.051697 58.382468) (xy 86.154269 58.228959) - (xy 86.224922 58.058389) (xy 86.26094 57.877312) (xy 86.26094 57.692688) (xy 86.224922 57.511611) (xy 86.154269 57.341041) - (xy 86.051697 57.187532) (xy 85.921148 57.056983) (xy 85.767639 56.954411) (xy 85.597069 56.883758) (xy 85.415992 56.84774) - (xy 85.231368 56.84774) (xy 85.050291 56.883758) (xy 84.879721 56.954411) (xy 84.726212 57.056983) (xy 84.595663 57.187532) - (xy 84.493091 57.341041) (xy 84.422438 57.511611) (xy 84.38642 57.692688) (xy 84.38642 57.877312) (xy 84.42031 58.047691) - (xy 83.745237 58.722764) (xy 83.726589 58.738068) (xy 83.711285 58.756716) (xy 83.71128 58.756721) (xy 83.665487 58.81252) - (xy 83.620085 58.897462) (xy 83.592126 58.989629) (xy 83.58651 59.046653) (xy 83.582686 59.08548) (xy 83.585051 59.109493) - (xy 83.58505 61.297094) (xy 83.576573 61.288617) (xy 83.378074 61.155984) (xy 83.157513 61.064625) (xy 82.923367 61.01805) - (xy 82.684633 61.01805) (xy 82.450487 61.064625) (xy 82.229926 61.155984) (xy 82.031427 61.288617) (xy 82.02295 61.297094) - (xy 82.02295 58.828269) (xy 82.145993 58.705226) (xy 82.231628 58.72226) (xy 82.416252 58.72226) (xy 82.597329 58.686242) - (xy 82.767899 58.615589) (xy 82.921408 58.513017) (xy 83.051957 58.382468) (xy 83.154529 58.228959) (xy 83.225182 58.058389) - (xy 83.2612 57.877312) (xy 83.2612 57.692688) (xy 83.225182 57.511611) (xy 83.154529 57.341041) (xy 83.051957 57.187532) - (xy 82.921408 57.056983) (xy 82.767899 56.954411) (xy 82.597329 56.883758) (xy 82.416252 56.84774) (xy 82.231628 56.84774) - (xy 82.050551 56.883758) (xy 81.879981 56.954411) (xy 81.726472 57.056983) (xy 81.595923 57.187532) (xy 81.493351 57.341041) - (xy 81.422698 57.511611) (xy 81.38668 57.692688) (xy 81.38668 57.877312) (xy 81.42057 58.047691) (xy 81.205237 58.263024) - (xy 81.186589 58.278328) (xy 81.171285 58.296976) (xy 81.17128 58.296981) (xy 81.125487 58.35278) (xy 81.088734 58.421541) - (xy 81.080085 58.437722) (xy 81.052126 58.529889) (xy 81.048632 58.565362) (xy 81.042686 58.62574) (xy 81.045051 58.649753) - (xy 81.04505 61.297094) (xy 81.036573 61.288617) (xy 80.838074 61.155984) (xy 80.617513 61.064625) (xy 80.383367 61.01805) - (xy 80.144633 61.01805) (xy 79.910487 61.064625) (xy 79.689926 61.155984) (xy 79.491427 61.288617) (xy 79.48295 61.297094) - (xy 79.48295 58.709045) (xy 79.597589 58.686242) (xy 79.768159 58.615589) (xy 79.921668 58.513017) (xy 80.052217 58.382468) - (xy 80.154789 58.228959) (xy 80.225442 58.058389) (xy 80.26146 57.877312) (xy 80.26146 57.692688) (xy 80.225442 57.511611) - (xy 80.154789 57.341041) (xy 80.052217 57.187532) (xy 79.921668 57.056983) (xy 79.768159 56.954411) (xy 79.597589 56.883758) - (xy 79.416512 56.84774) (xy 79.231888 56.84774) (xy 79.050811 56.883758) (xy 78.880241 56.954411) (xy 78.726732 57.056983) - (xy 78.596183 57.187532) (xy 78.493611 57.341041) (xy 78.422958 57.511611) (xy 78.38694 57.692688) (xy 78.38694 57.877312) - (xy 78.422958 58.058389) (xy 78.493611 58.228959) (xy 78.505051 58.24608) (xy 78.50505 61.297094) (xy 78.496573 61.288617) - (xy 78.298074 61.155984) (xy 78.077513 61.064625) (xy 77.843367 61.01805) (xy 77.604633 61.01805) (xy 77.370487 61.064625) - (xy 77.149926 61.155984) (xy 76.951427 61.288617) (xy 76.782617 61.457427) (xy 76.68895 61.597609) (xy 76.68895 58.648506) - (xy 76.768419 58.615589) (xy 76.921928 58.513017) (xy 77.052477 58.382468) (xy 77.155049 58.228959) (xy 77.225702 58.058389) - (xy 77.26172 57.877312) (xy 77.26172 57.692688) (xy 77.225702 57.511611) (xy 77.155049 57.341041) (xy 77.052477 57.187532) - (xy 76.921928 57.056983) (xy 76.768419 56.954411) (xy 76.597849 56.883758) (xy 76.416772 56.84774) (xy 76.232148 56.84774) - (xy 76.051071 56.883758) (xy 75.880501 56.954411) (xy 75.726992 57.056983) (xy 75.596443 57.187532) (xy 75.493871 57.341041) - (xy 75.423218 57.511611) (xy 75.3872 57.692688) (xy 75.3872 57.877312) (xy 75.423218 58.058389) (xy 75.493871 58.228959) - (xy 75.596443 58.382468) (xy 75.711051 58.497076) (xy 75.71105 63.221997) (xy 75.708686 63.246) (xy 75.71105 63.270003) - (xy 75.71105 63.270013) (xy 75.718125 63.34185) (xy 75.746084 63.434017) (xy 75.791487 63.51896) (xy 75.852588 63.593412) - (xy 75.871241 63.60872) (xy 76.593884 64.331363) (xy 76.558625 64.416487) (xy 76.51205 64.650633) (xy 76.51205 64.889367) - (xy 76.558625 65.123513) (xy 76.649984 65.344074) (xy 76.782617 65.542573) (xy 76.951427 65.711383) (xy 77.149926 65.844016) - (xy 77.370487 65.935375) (xy 77.604633 65.98195) (xy 77.843367 65.98195) (xy 78.077513 65.935375) (xy 78.162636 65.900116) - (xy 78.505051 66.242531) (xy 78.50505 68.663094) (xy 78.496573 68.654617) (xy 78.298074 68.521984) (xy 78.077513 68.430625) - (xy 77.843367 68.38405) (xy 77.604633 68.38405) (xy 77.370487 68.430625) (xy 77.149926 68.521984) (xy 76.951427 68.654617) - (xy 76.782617 68.823427) (xy 76.649984 69.021926) (xy 76.558625 69.242487) (xy 76.51205 69.476633) (xy 76.51205 69.715367) - (xy 76.558625 69.949513) (xy 76.649984 70.170074) (xy 76.782617 70.368573) (xy 76.951427 70.537383) (xy 77.149926 70.670016) - (xy 77.370487 70.761375) (xy 77.604633 70.80795) (xy 77.843367 70.80795) (xy 78.077513 70.761375) (xy 78.298074 70.670016) - (xy 78.496573 70.537383) (xy 78.50505 70.528906) (xy 78.50505 70.66347) (xy 78.162636 71.005884) (xy 78.077513 70.970625) - (xy 77.843367 70.92405) (xy 77.604633 70.92405) (xy 77.370487 70.970625) (xy 77.149926 71.061984) (xy 76.951427 71.194617) - (xy 76.782617 71.363427) (xy 76.649984 71.561926) (xy 76.558625 71.782487) (xy 76.51205 72.016633) (xy 76.51205 72.255367) - (xy 76.558625 72.489513) (xy 76.649984 72.710074) (xy 76.782617 72.908573) (xy 76.951427 73.077383) (xy 77.053596 73.14565) - (xy 72.549075 73.14565) (xy 72.560016 73.125182) (xy 72.580713 73.056955) (xy 72.587701 72.986) (xy 72.587701 71.793383) - (xy 73.312147 71.068938) (xy 73.33565 71.04965) (xy 73.412621 70.955859) (xy 73.469817 70.848854) (xy 73.505037 70.732747) - (xy 73.51395 70.642255) (xy 73.51395 70.642254) (xy 73.51693 70.612001) (xy 73.51395 70.581748) (xy 73.51395 66.324252) - (xy 73.51693 66.293999) (xy 73.512473 66.248747) (xy 73.505037 66.173253) (xy 73.469817 66.057146) (xy 73.412621 65.950141) - (xy 73.33565 65.85635) (xy 73.312146 65.837061) (xy 72.587701 65.112617) (xy 72.587701 64.427383) (xy 73.566147 63.448938) - (xy 73.58965 63.42965) (xy 73.666621 63.335859) (xy 73.723817 63.228854) (xy 73.759037 63.112747) (xy 73.76795 63.022255) - (xy 73.76795 63.022254) (xy 73.77093 62.992) (xy 73.76795 62.961745) (xy 73.76795 58.548189) (xy 73.820588 58.513017) - (xy 73.951137 58.382468) (xy 74.053709 58.228959) (xy 74.124362 58.058389) (xy 74.16038 57.877312) (xy 74.16038 57.692688) - (xy 74.124362 57.511611) (xy 74.053709 57.341041) (xy 73.951137 57.187532) (xy 73.820588 57.056983) (xy 73.667079 56.954411) - (xy 73.496509 56.883758) (xy 73.315432 56.84774) (xy 73.130808 56.84774) (xy 72.949731 56.883758) (xy 72.779161 56.954411) - (xy 72.625652 57.056983) (xy 72.495103 57.187532) (xy 72.392531 57.341041) (xy 72.321878 57.511611) (xy 72.28586 57.692688) - (xy 72.28586 57.877312) (xy 72.321878 58.058389) (xy 72.392531 58.228959) (xy 72.495103 58.382468) (xy 72.536051 58.423416) - (xy 72.53605 61.195982) (xy 72.526406 61.177939) (xy 72.481175 61.122825) (xy 72.426061 61.077594) (xy 72.363182 61.043984) + (xy 146.468509 61.09604) (xy 146.288048 61.531711) (xy 146.19605 61.994217) (xy 141.630142 61.994217) (xy 141.629817 61.993146) + (xy 141.572621 61.886141) (xy 141.49565 61.79235) (xy 141.401859 61.715379) (xy 141.294854 61.658183) (xy 141.178747 61.622963) + (xy 141.088255 61.61405) (xy 141.088247 61.61405) (xy 141.058 61.611071) (xy 141.027755 61.61405) (xy 140.913701 61.61405) + (xy 140.913701 61.38) (xy 140.906713 61.309045) (xy 140.886016 61.240818) (xy 140.852406 61.177939) (xy 140.807175 61.122825) + (xy 140.752061 61.077594) (xy 140.689182 61.043984) (xy 140.620955 61.023287) (xy 140.55 61.016299) (xy 140.423249 61.016299) + (xy 143.279617 58.159933) (xy 143.342483 58.311706) (xy 143.464172 58.493827) (xy 143.619053 58.648708) (xy 143.801174 58.770397) + (xy 144.003536 58.854218) (xy 144.218363 58.89695) (xy 144.437397 58.89695) (xy 144.652224 58.854218) (xy 144.854586 58.770397) + (xy 145.036707 58.648708) (xy 145.191588 58.493827) (xy 145.313277 58.311706) (xy 145.397098 58.109344) (xy 145.43983 57.894517) + (xy 145.43983 57.675483) (xy 145.397098 57.460656) (xy 145.313277 57.258294) (xy 145.191588 57.076173) (xy 145.036707 56.921292) + (xy 144.854586 56.799603) (xy 144.652224 56.715782) (xy 144.437397 56.67305) (xy 144.218363 56.67305) (xy 144.003536 56.715782) + (xy 143.801174 56.799603) (xy 143.685829 56.876674) (xy 143.685829 56.476) (xy 146.35907 56.476) (xy 146.370963 56.596747) + (xy 146.406183 56.712854) (xy 146.463379 56.819859) (xy 146.54035 56.91365) (xy 146.634141 56.990621) (xy 146.741146 57.047817) + (xy 146.857253 57.083037) (xy 146.978 57.09493) (xy 147.527963 57.09195) (xy 147.68195 56.937963) (xy 147.68195 55.77205) + (xy 147.97405 55.77205) (xy 147.97405 56.937963) (xy 148.128037 57.09195) (xy 148.678 57.09493) (xy 148.798747 57.083037) + (xy 148.914854 57.047817) (xy 149.021859 56.990621) (xy 149.11565 56.91365) (xy 149.192621 56.819859) (xy 149.249817 56.712854) + (xy 149.285037 56.596747) (xy 149.29693 56.476) (xy 149.29395 55.926037) (xy 149.139963 55.77205) (xy 147.97405 55.77205) + (xy 147.68195 55.77205) (xy 146.516037 55.77205) (xy 146.36205 55.926037) (xy 146.35907 56.476) (xy 143.685829 56.476) + (xy 143.685829 55.854379) (xy 144.740347 54.799862) (xy 144.763753 54.780653) (xy 144.767571 54.776) (xy 146.35907 54.776) + (xy 146.36205 55.325963) (xy 146.516037 55.47995) (xy 147.68195 55.47995) (xy 147.68195 54.314037) (xy 147.97405 54.314037) + (xy 147.97405 55.47995) (xy 149.139963 55.47995) (xy 149.29395 55.325963) (xy 149.29693 54.776) (xy 149.285037 54.655253) + (xy 149.249817 54.539146) (xy 149.192621 54.432141) (xy 149.11565 54.33835) (xy 149.021859 54.261379) (xy 148.914854 54.204183) + (xy 148.798747 54.168963) (xy 148.678 54.15707) (xy 148.128037 54.16005) (xy 147.97405 54.314037) (xy 147.68195 54.314037) + (xy 147.527963 54.16005) (xy 146.978 54.15707) (xy 146.857253 54.168963) (xy 146.741146 54.204183) (xy 146.634141 54.261379) + (xy 146.54035 54.33835) (xy 146.463379 54.432141) (xy 146.406183 54.539146) (xy 146.370963 54.655253) (xy 146.35907 54.776) + (xy 144.767571 54.776) (xy 144.796909 54.740253) (xy 144.840413 54.687244) (xy 144.897376 54.580673) (xy 144.902972 54.562225) + (xy 144.932454 54.465037) (xy 144.94133 54.374915) (xy 144.94133 54.374905) (xy 144.944297 54.34478) (xy 144.94133 54.314655) + (xy 144.94133 54.211557) (xy 145.036707 54.147828) (xy 145.191588 53.992947) (xy 145.313277 53.810826) (xy 145.397098 53.608464) + (xy 145.43983 53.393637) (xy 145.43983 53.174603) (xy 145.397098 52.959776) (xy 145.313277 52.757414) (xy 145.191588 52.575293) + (xy 145.036707 52.420412) (xy 144.854586 52.298723) (xy 144.652224 52.214902) (xy 144.437397 52.17217) (xy 144.218363 52.17217) + (xy 144.003536 52.214902) (xy 143.801174 52.298723) (xy 143.619053 52.420412) (xy 143.464172 52.575293) (xy 143.342483 52.757414) + (xy 143.258662 52.959776) (xy 143.21593 53.174603) (xy 143.21593 53.393637) (xy 143.258662 53.608464) (xy 143.342483 53.810826) + (xy 143.464172 53.992947) (xy 143.619053 54.147828) (xy 143.64197 54.163141) (xy 142.659917 55.145195) (xy 142.636506 55.164408) + (xy 142.559846 55.257819) (xy 142.502883 55.364389) (xy 142.467805 55.480025) (xy 142.458929 55.570147) (xy 142.458929 55.570156) + (xy 142.455962 55.600281) (xy 142.458929 55.630406) (xy 142.45893 57.24552) (xy 141.93971 57.76474) (xy 141.93971 57.675483) + (xy 141.896978 57.460656) (xy 141.813157 57.258294) (xy 141.691468 57.076173) (xy 141.536587 56.921292) (xy 141.354466 56.799603) + (xy 141.152104 56.715782) (xy 140.937277 56.67305) (xy 140.718243 56.67305) (xy 140.503416 56.715782) (xy 140.301054 56.799603) + (xy 140.118933 56.921292) (xy 139.964052 57.076173) (xy 139.842363 57.258294) (xy 139.758542 57.460656) (xy 139.71581 57.675483) + (xy 139.71581 57.894517) (xy 139.758542 58.109344) (xy 139.842363 58.311706) (xy 139.964052 58.493827) (xy 140.118933 58.648708) + (xy 140.301054 58.770397) (xy 140.503416 58.854218) (xy 140.718243 58.89695) (xy 140.807501 58.89695) (xy 139.305572 60.39888) + (xy 139.262351 60.43435) (xy 139.18538 60.528141) (xy 139.128184 60.635146) (xy 139.092964 60.751253) (xy 139.084051 60.841745) + (xy 139.084051 60.867248) (xy 139.083583 60.872) (xy 139.084051 60.876752) (xy 139.084051 61.016299) (xy 138.85 61.016299) + (xy 138.779045 61.023287) (xy 138.710818 61.043984) (xy 138.647939 61.077594) (xy 138.592825 61.122825) (xy 138.547594 61.177939) + (xy 138.513984 61.240818) (xy 138.493287 61.309045) (xy 138.486299 61.38) (xy 138.030255 61.38) (xy 138.021125 61.368875) + (xy 137.836581 61.217425) (xy 137.795576 61.195507) (xy 139.479147 59.511938) (xy 139.50265 59.49265) (xy 139.579621 59.398859) + (xy 139.636817 59.291854) (xy 139.672037 59.175747) (xy 139.67835 59.11165) (xy 139.68393 59.055) (xy 139.68095 59.024745) + (xy 139.68095 55.302013) (xy 140.608686 54.374278) (xy 140.718243 54.39607) (xy 140.937277 54.39607) (xy 141.152104 54.353338) + (xy 141.354466 54.269517) (xy 141.536587 54.147828) (xy 141.691468 53.992947) (xy 141.813157 53.810826) (xy 141.896978 53.608464) + (xy 141.93971 53.393637) (xy 141.93971 53.174603) (xy 141.896978 52.959776) (xy 141.813157 52.757414) (xy 141.691468 52.575293) + (xy 141.536587 52.420412) (xy 141.354466 52.298723) (xy 141.152104 52.214902) (xy 140.937277 52.17217) (xy 140.718243 52.17217) + (xy 140.503416 52.214902) (xy 140.301054 52.298723) (xy 140.118933 52.420412) (xy 139.964052 52.575293) (xy 139.842363 52.757414) + (xy 139.758542 52.959776) (xy 139.71581 53.174603) (xy 139.71581 53.393637) (xy 139.737602 53.503194) (xy 138.65086 54.589937) + (xy 138.627351 54.60923) (xy 138.563328 54.687244) (xy 138.550379 54.703022) (xy 138.493184 54.810026) (xy 138.457963 54.926134) + (xy 138.44607 55.04688) (xy 138.449051 55.077145) (xy 138.44905 58.799865) (xy 136.74586 60.503057) (xy 136.722351 60.52235) + (xy 136.662672 60.59507) (xy 136.645379 60.616142) (xy 136.588184 60.723146) (xy 136.552963 60.839254) (xy 136.54107 60.96) + (xy 136.544051 60.990265) (xy 136.544051 61.185017) (xy 136.483419 61.217425) (xy 136.298875 61.368875) (xy 136.147425 61.553419) + (xy 136.034887 61.763963) (xy 135.965586 61.992416) (xy 135.942186 62.23) (xy 135.965586 62.467584) (xy 135.985543 62.533373) + (xy 135.655815 62.863101) (xy 135.745113 62.696037) (xy 135.814414 62.467584) (xy 135.837814 62.23) (xy 135.814414 61.992416) + (xy 135.793634 61.923915) (xy 135.894274 61.823276) (xy 135.917674 61.804072) (xy 135.994334 61.710662) (xy 136.051297 61.604092) + (xy 136.086375 61.488456) (xy 136.095251 61.398334) (xy 136.095251 61.398324) (xy 136.098218 61.368199) (xy 136.095251 61.338074) + (xy 136.095251 58.026795) (xy 136.217654 57.904392) (xy 136.258422 58.109344) (xy 136.342243 58.311706) (xy 136.463932 58.493827) + (xy 136.618813 58.648708) (xy 136.800934 58.770397) (xy 137.003296 58.854218) (xy 137.218123 58.89695) (xy 137.437157 58.89695) + (xy 137.651984 58.854218) (xy 137.854346 58.770397) (xy 138.036467 58.648708) (xy 138.191348 58.493827) (xy 138.313037 58.311706) + (xy 138.396858 58.109344) (xy 138.43959 57.894517) (xy 138.43959 57.675483) (xy 138.396858 57.460656) (xy 138.313037 57.258294) + (xy 138.191348 57.076173) (xy 138.036467 56.921292) (xy 137.854346 56.799603) (xy 137.651984 56.715782) (xy 137.437157 56.67305) + (xy 137.218123 56.67305) (xy 137.003296 56.715782) (xy 136.857779 56.776057) (xy 136.857779 54.625065) (xy 137.108567 54.374278) + (xy 137.218123 54.39607) (xy 137.437157 54.39607) (xy 137.651984 54.353338) (xy 137.854346 54.269517) (xy 138.036467 54.147828) + (xy 138.191348 53.992947) (xy 138.313037 53.810826) (xy 138.396858 53.608464) (xy 138.43959 53.393637) (xy 138.43959 53.174603) + (xy 138.396858 52.959776) (xy 138.313037 52.757414) (xy 138.191348 52.575293) (xy 138.036467 52.420412) (xy 137.854346 52.298723) + (xy 137.651984 52.214902) (xy 137.437157 52.17217) (xy 137.218123 52.17217) (xy 137.003296 52.214902) (xy 136.800934 52.298723) + (xy 136.618813 52.420412) (xy 136.463932 52.575293) (xy 136.342243 52.757414) (xy 136.258422 52.959776) (xy 136.21569 53.174603) + (xy 136.21569 53.393637) (xy 136.237482 53.503193) (xy 135.812153 53.928524) (xy 135.808456 53.931558) (xy 135.805422 53.935255) + (xy 135.787394 53.953283) (xy 135.729708 54.023573) (xy 135.672513 54.130577) (xy 135.637292 54.246685) (xy 135.625399 54.367431) + (xy 135.630879 54.423068) (xy 135.63088 56.756069) (xy 135.178435 57.208514) (xy 135.090008 57.076173) (xy 134.935127 56.921292) + (xy 134.753006 56.799603) (xy 134.550644 56.715782) (xy 134.335817 56.67305) (xy 134.116783 56.67305) (xy 133.901956 56.715782) + (xy 133.699594 56.799603) (xy 133.517473 56.921292) (xy 133.362592 57.076173) (xy 133.240903 57.258294) (xy 133.18895 57.38372) + (xy 133.18895 56.802529) (xy 134.555064 55.436416) (xy 134.573712 55.421112) (xy 134.589016 55.402464) (xy 134.58902 55.40246) + (xy 134.634813 55.346661) (xy 134.680215 55.261719) (xy 134.680216 55.261718) (xy 134.708175 55.169551) (xy 134.71525 55.097714) + (xy 134.71525 55.097704) (xy 134.717614 55.073701) (xy 134.71525 55.049698) (xy 134.71525 54.285156) (xy 134.753006 54.269517) + (xy 134.935127 54.147828) (xy 135.090008 53.992947) (xy 135.211697 53.810826) (xy 135.295518 53.608464) (xy 135.33825 53.393637) + (xy 135.33825 53.174603) (xy 135.295518 52.959776) (xy 135.211697 52.757414) (xy 135.090008 52.575293) (xy 134.935127 52.420412) + (xy 134.753006 52.298723) (xy 134.550644 52.214902) (xy 134.335817 52.17217) (xy 134.116783 52.17217) (xy 133.901956 52.214902) + (xy 133.699594 52.298723) (xy 133.517473 52.420412) (xy 133.362592 52.575293) (xy 133.240903 52.757414) (xy 133.157082 52.959776) + (xy 133.11435 53.174603) (xy 133.11435 53.393637) (xy 133.157082 53.608464) (xy 133.240903 53.810826) (xy 133.362592 53.992947) + (xy 133.517473 54.147828) (xy 133.699594 54.269517) (xy 133.737351 54.285156) (xy 133.737351 54.871169) (xy 132.371241 56.23728) + (xy 132.352588 56.252588) (xy 132.291487 56.32704) (xy 132.246084 56.411983) (xy 132.218125 56.50415) (xy 132.21105 56.575987) + (xy 132.21105 56.575997) (xy 132.208686 56.6) (xy 132.21105 56.624003) (xy 132.21105 57.256937) (xy 132.090268 57.076173) + (xy 131.935387 56.921292) (xy 131.753266 56.799603) (xy 131.550904 56.715782) (xy 131.352785 56.676373) (xy 131.357251 56.671907) + (xy 131.414578 56.654517) (xy 131.49952 56.609114) (xy 131.573972 56.548013) (xy 131.635073 56.473561) (xy 131.680476 56.388619) + (xy 131.708435 56.296452) (xy 131.71551 56.224615) (xy 131.717875 56.200601) (xy 131.71551 56.176587) (xy 131.71551 54.285156) + (xy 131.753266 54.269517) (xy 131.935387 54.147828) (xy 132.090268 53.992947) (xy 132.211957 53.810826) (xy 132.295778 53.608464) + (xy 132.33851 53.393637) (xy 132.33851 53.174603) (xy 132.295778 52.959776) (xy 132.211957 52.757414) (xy 132.090268 52.575293) + (xy 131.935387 52.420412) (xy 131.753266 52.298723) (xy 131.550904 52.214902) (xy 131.336077 52.17217) (xy 131.117043 52.17217) + (xy 130.902216 52.214902) (xy 130.699854 52.298723) (xy 130.517733 52.420412) (xy 130.362852 52.575293) (xy 130.241163 52.757414) + (xy 130.157342 52.959776) (xy 130.11461 53.174603) (xy 130.11461 53.393637) (xy 130.157342 53.608464) (xy 130.241163 53.810826) + (xy 130.362852 53.992947) (xy 130.517733 54.147828) (xy 130.699854 54.269517) (xy 130.73761 54.285156) (xy 130.737611 55.908587) + (xy 129.263675 57.382524) (xy 129.212217 57.258294) (xy 129.090528 57.076173) (xy 128.935647 56.921292) (xy 128.753526 56.799603) + (xy 128.567538 56.722564) (xy 128.574232 56.717071) (xy 128.635333 56.642619) (xy 128.680736 56.557677) (xy 128.708695 56.46551) + (xy 128.71577 56.393673) (xy 128.718135 56.369659) (xy 128.71577 56.345645) (xy 128.71577 54.285156) (xy 128.753526 54.269517) + (xy 128.935647 54.147828) (xy 129.090528 53.992947) (xy 129.212217 53.810826) (xy 129.296038 53.608464) (xy 129.33877 53.393637) + (xy 129.33877 53.174603) (xy 129.296038 52.959776) (xy 129.212217 52.757414) (xy 129.090528 52.575293) (xy 128.935647 52.420412) + (xy 128.753526 52.298723) (xy 128.551164 52.214902) (xy 128.336337 52.17217) (xy 128.117303 52.17217) (xy 127.902476 52.214902) + (xy 127.700114 52.298723) (xy 127.517993 52.420412) (xy 127.363112 52.575293) (xy 127.241423 52.757414) (xy 127.157602 52.959776) + (xy 127.11487 53.174603) (xy 127.11487 53.393637) (xy 127.157602 53.608464) (xy 127.241423 53.810826) (xy 127.363112 53.992947) + (xy 127.517993 54.147828) (xy 127.700114 54.269517) (xy 127.73787 54.285156) (xy 127.737871 55.938401) (xy 127.695318 55.961145) + (xy 127.639519 56.006939) (xy 127.639515 56.006943) (xy 127.620867 56.022247) (xy 127.605563 56.040895) (xy 126.263935 57.382524) + (xy 126.212477 57.258294) (xy 126.090788 57.076173) (xy 125.935907 56.921292) (xy 125.753786 56.799603) (xy 125.551424 56.715782) + (xy 125.353305 56.676373) (xy 125.357771 56.671907) (xy 125.415098 56.654517) (xy 125.50004 56.609114) (xy 125.574492 56.548013) + (xy 125.635593 56.473561) (xy 125.680996 56.388619) (xy 125.708955 56.296452) (xy 125.71603 56.224615) (xy 125.718395 56.200601) + (xy 125.71603 56.176587) (xy 125.71603 54.285156) (xy 125.753786 54.269517) (xy 125.935907 54.147828) (xy 126.090788 53.992947) + (xy 126.212477 53.810826) (xy 126.296298 53.608464) (xy 126.33903 53.393637) (xy 126.33903 53.174603) (xy 126.296298 52.959776) + (xy 126.212477 52.757414) (xy 126.090788 52.575293) (xy 125.935907 52.420412) (xy 125.753786 52.298723) (xy 125.551424 52.214902) + (xy 125.336597 52.17217) (xy 125.117563 52.17217) (xy 124.902736 52.214902) (xy 124.700374 52.298723) (xy 124.518253 52.420412) + (xy 124.363372 52.575293) (xy 124.241683 52.757414) (xy 124.157862 52.959776) (xy 124.11513 53.174603) (xy 124.11513 53.393637) + (xy 124.157862 53.608464) (xy 124.241683 53.810826) (xy 124.363372 53.992947) (xy 124.518253 54.147828) (xy 124.700374 54.269517) + (xy 124.73813 54.285156) (xy 124.738131 55.908587) (xy 123.45724 57.189479) (xy 123.438587 57.204787) (xy 123.377486 57.279239) + (xy 123.332083 57.364182) (xy 123.304124 57.456349) (xy 123.301335 57.48467) (xy 123.296558 57.460656) (xy 123.212737 57.258294) + (xy 123.091048 57.076173) (xy 122.936167 56.921292) (xy 122.754046 56.799603) (xy 122.551684 56.715782) (xy 122.336857 56.67305) + (xy 122.117823 56.67305) (xy 121.902996 56.715782) (xy 121.700634 56.799603) (xy 121.518513 56.921292) (xy 121.363632 57.076173) + (xy 121.241943 57.258294) (xy 121.158122 57.460656) (xy 121.11539 57.675483) (xy 121.11539 57.894517) (xy 121.158122 58.109344) + (xy 121.241943 58.311706) (xy 121.363632 58.493827) (xy 121.518513 58.648708) (xy 121.700634 58.770397) (xy 121.902996 58.854218) + (xy 122.117823 58.89695) (xy 122.336857 58.89695) (xy 122.551684 58.854218) (xy 122.754046 58.770397) (xy 122.936167 58.648708) + (xy 123.091048 58.493827) (xy 123.212737 58.311706) (xy 123.296558 58.109344) (xy 123.297049 58.106875) (xy 123.29705 61.073039) + (xy 123.173584 61.035586) (xy 122.995538 61.01805) (xy 122.876462 61.01805) (xy 122.698416 61.035586) (xy 122.469963 61.104887) + (xy 122.259419 61.217425) (xy 122.074875 61.368875) (xy 121.923425 61.553419) (xy 121.810887 61.763963) (xy 121.741586 61.992416) + (xy 121.718186 62.23) (xy 121.741586 62.467584) (xy 121.803345 62.671175) (xy 121.337237 63.137284) (xy 121.318589 63.152588) + (xy 121.303285 63.171236) (xy 121.30328 63.171241) (xy 121.257487 63.22704) (xy 121.212086 63.311981) (xy 121.212085 63.311982) + (xy 121.185093 63.400963) (xy 121.184126 63.40415) (xy 121.174686 63.5) (xy 121.177051 63.524013) (xy 121.177051 63.84316) + (xy 121.072581 63.757425) (xy 120.862037 63.644887) (xy 120.633584 63.575586) (xy 120.455538 63.55805) (xy 120.336462 63.55805) + (xy 120.158416 63.575586) (xy 119.929963 63.644887) (xy 119.719419 63.757425) (xy 119.61495 63.84316) (xy 119.61495 63.702529) + (xy 119.954825 63.362655) (xy 120.158416 63.424414) (xy 120.336462 63.44195) (xy 120.455538 63.44195) (xy 120.633584 63.424414) + (xy 120.862037 63.355113) (xy 121.072581 63.242575) (xy 121.257125 63.091125) (xy 121.408575 62.906581) (xy 121.521113 62.696037) + (xy 121.590414 62.467584) (xy 121.613814 62.23) (xy 121.590414 61.992416) (xy 121.521113 61.763963) (xy 121.408575 61.553419) + (xy 121.257125 61.368875) (xy 121.072581 61.217425) (xy 120.88495 61.117134) (xy 120.88495 55.317989) (xy 121.86524 54.337699) + (xy 121.902996 54.353338) (xy 122.117823 54.39607) (xy 122.336857 54.39607) (xy 122.551684 54.353338) (xy 122.754046 54.269517) + (xy 122.936167 54.147828) (xy 123.091048 53.992947) (xy 123.212737 53.810826) (xy 123.296558 53.608464) (xy 123.33929 53.393637) + (xy 123.33929 53.174603) (xy 123.296558 52.959776) (xy 123.212737 52.757414) (xy 123.091048 52.575293) (xy 122.936167 52.420412) + (xy 122.754046 52.298723) (xy 122.551684 52.214902) (xy 122.336857 52.17217) (xy 122.117823 52.17217) (xy 121.902996 52.214902) + (xy 121.700634 52.298723) (xy 121.518513 52.420412) (xy 121.363632 52.575293) (xy 121.241943 52.757414) (xy 121.158122 52.959776) + (xy 121.11539 53.174603) (xy 121.11539 53.393637) (xy 121.158122 53.608464) (xy 121.173761 53.64622) (xy 120.067241 54.75274) + (xy 120.048588 54.768048) (xy 119.987487 54.8425) (xy 119.942084 54.927443) (xy 119.914125 55.01961) (xy 119.90705 55.091447) + (xy 119.90705 55.091457) (xy 119.904686 55.11546) (xy 119.90705 55.139463) (xy 119.90705 56.901663) (xy 119.754306 56.799603) + (xy 119.551944 56.715782) (xy 119.337117 56.67305) (xy 119.118083 56.67305) (xy 118.903256 56.715782) (xy 118.700894 56.799603) + (xy 118.518773 56.921292) (xy 118.363892 57.076173) (xy 118.34495 57.104522) (xy 118.34495 54.858249) (xy 118.8655 54.337699) + (xy 118.903256 54.353338) (xy 119.118083 54.39607) (xy 119.337117 54.39607) (xy 119.551944 54.353338) (xy 119.754306 54.269517) + (xy 119.936427 54.147828) (xy 120.091308 53.992947) (xy 120.212997 53.810826) (xy 120.296818 53.608464) (xy 120.33955 53.393637) + (xy 120.33955 53.174603) (xy 120.296818 52.959776) (xy 120.212997 52.757414) (xy 120.091308 52.575293) (xy 119.936427 52.420412) + (xy 119.754306 52.298723) (xy 119.551944 52.214902) (xy 119.337117 52.17217) (xy 119.118083 52.17217) (xy 118.903256 52.214902) + (xy 118.700894 52.298723) (xy 118.518773 52.420412) (xy 118.363892 52.575293) (xy 118.242203 52.757414) (xy 118.158382 52.959776) + (xy 118.11565 53.174603) (xy 118.11565 53.393637) (xy 118.158382 53.608464) (xy 118.174021 53.64622) (xy 117.527237 54.293004) + (xy 117.508589 54.308308) (xy 117.493285 54.326956) (xy 117.49328 54.326961) (xy 117.447487 54.38276) (xy 117.409842 54.453189) + (xy 117.402085 54.467702) (xy 117.374126 54.559869) (xy 117.369755 54.60425) (xy 117.364686 54.65572) (xy 117.367051 54.679733) + (xy 117.36705 61.117134) (xy 117.179419 61.217425) (xy 116.994875 61.368875) (xy 116.843425 61.553419) (xy 116.730887 61.763963) + (xy 116.661586 61.992416) (xy 116.638186 62.23) (xy 116.661586 62.467584) (xy 116.723345 62.671175) (xy 116.257237 63.137284) + (xy 116.238589 63.152588) (xy 116.223285 63.171236) (xy 116.22328 63.171241) (xy 116.177487 63.22704) (xy 116.132086 63.311981) + (xy 116.132085 63.311982) (xy 116.105093 63.400963) (xy 116.104126 63.40415) (xy 116.094686 63.5) (xy 116.097051 63.524013) + (xy 116.097051 63.84316) (xy 115.992581 63.757425) (xy 115.782037 63.644887) (xy 115.553584 63.575586) (xy 115.375538 63.55805) + (xy 115.256462 63.55805) (xy 115.078416 63.575586) (xy 114.849963 63.644887) (xy 114.639419 63.757425) (xy 114.53495 63.84316) + (xy 114.53495 63.702529) (xy 114.874825 63.362655) (xy 115.078416 63.424414) (xy 115.256462 63.44195) (xy 115.375538 63.44195) + (xy 115.553584 63.424414) (xy 115.782037 63.355113) (xy 115.992581 63.242575) (xy 116.177125 63.091125) (xy 116.328575 62.906581) + (xy 116.441113 62.696037) (xy 116.510414 62.467584) (xy 116.533814 62.23) (xy 116.510414 61.992416) (xy 116.441113 61.763963) + (xy 116.328575 61.553419) (xy 116.177125 61.368875) (xy 115.992581 61.217425) (xy 115.782037 61.104887) (xy 115.553584 61.035586) + (xy 115.375538 61.01805) (xy 115.256462 61.01805) (xy 115.078416 61.035586) (xy 114.954951 61.073039) (xy 114.954951 57.675483) + (xy 115.11591 57.675483) (xy 115.11591 57.894517) (xy 115.158642 58.109344) (xy 115.242463 58.311706) (xy 115.364152 58.493827) + (xy 115.519033 58.648708) (xy 115.701154 58.770397) (xy 115.903516 58.854218) (xy 116.118343 58.89695) (xy 116.337377 58.89695) + (xy 116.552204 58.854218) (xy 116.754566 58.770397) (xy 116.936687 58.648708) (xy 117.091568 58.493827) (xy 117.213257 58.311706) + (xy 117.297078 58.109344) (xy 117.33981 57.894517) (xy 117.33981 57.675483) (xy 117.297078 57.460656) (xy 117.213257 57.258294) + (xy 117.091568 57.076173) (xy 116.936687 56.921292) (xy 116.754566 56.799603) (xy 116.552204 56.715782) (xy 116.337377 56.67305) + (xy 116.118343 56.67305) (xy 115.903516 56.715782) (xy 115.701154 56.799603) (xy 115.519033 56.921292) (xy 115.364152 57.076173) + (xy 115.242463 57.258294) (xy 115.158642 57.460656) (xy 115.11591 57.675483) (xy 114.954951 57.675483) (xy 114.954951 55.248508) + (xy 115.865761 54.337699) (xy 115.903516 54.353338) (xy 116.118343 54.39607) (xy 116.337377 54.39607) (xy 116.552204 54.353338) + (xy 116.754566 54.269517) (xy 116.936687 54.147828) (xy 117.091568 53.992947) (xy 117.213257 53.810826) (xy 117.297078 53.608464) + (xy 117.33981 53.393637) (xy 117.33981 53.174603) (xy 117.297078 52.959776) (xy 117.213257 52.757414) (xy 117.091568 52.575293) + (xy 116.936687 52.420412) (xy 116.754566 52.298723) (xy 116.552204 52.214902) (xy 116.337377 52.17217) (xy 116.118343 52.17217) + (xy 115.903516 52.214902) (xy 115.701154 52.298723) (xy 115.519033 52.420412) (xy 115.364152 52.575293) (xy 115.242463 52.757414) + (xy 115.158642 52.959776) (xy 115.11591 53.174603) (xy 115.11591 53.393637) (xy 115.158642 53.608464) (xy 115.174281 53.646219) + (xy 114.137238 54.683263) (xy 114.11859 54.698567) (xy 114.103286 54.717215) (xy 114.103281 54.71722) (xy 114.057488 54.773019) + (xy 114.026633 54.830745) (xy 114.012086 54.857961) (xy 113.984127 54.950128) (xy 113.978924 55.002955) (xy 113.974687 55.045979) + (xy 113.977052 55.069992) (xy 113.977052 56.961397) (xy 113.936947 56.921292) (xy 113.754826 56.799603) (xy 113.552464 56.715782) + (xy 113.337637 56.67305) (xy 113.118603 56.67305) (xy 112.903776 56.715782) (xy 112.701414 56.799603) (xy 112.519293 56.921292) + (xy 112.414951 57.025634) (xy 112.414951 54.788768) (xy 112.866021 54.337699) (xy 112.903776 54.353338) (xy 113.118603 54.39607) + (xy 113.337637 54.39607) (xy 113.552464 54.353338) (xy 113.754826 54.269517) (xy 113.936947 54.147828) (xy 114.091828 53.992947) + (xy 114.213517 53.810826) (xy 114.297338 53.608464) (xy 114.34007 53.393637) (xy 114.34007 53.174603) (xy 114.297338 52.959776) + (xy 114.213517 52.757414) (xy 114.091828 52.575293) (xy 113.936947 52.420412) (xy 113.754826 52.298723) (xy 113.552464 52.214902) + (xy 113.337637 52.17217) (xy 113.118603 52.17217) (xy 112.903776 52.214902) (xy 112.701414 52.298723) (xy 112.519293 52.420412) + (xy 112.364412 52.575293) (xy 112.242723 52.757414) (xy 112.158902 52.959776) (xy 112.11617 53.174603) (xy 112.11617 53.393637) + (xy 112.158902 53.608464) (xy 112.174541 53.646219) (xy 111.597238 54.223523) (xy 111.57859 54.238827) (xy 111.563286 54.257475) + (xy 111.563281 54.25748) (xy 111.517488 54.313279) (xy 111.475888 54.391108) (xy 111.472086 54.398221) (xy 111.444127 54.490388) + (xy 111.437797 54.554664) (xy 111.434687 54.586239) (xy 111.437052 54.610252) (xy 111.437051 61.29038) (xy 111.422016 61.240818) + (xy 111.388406 61.177939) (xy 111.343175 61.122825) (xy 111.288061 61.077594) (xy 111.225182 61.043984) (xy 111.156955 61.023287) + (xy 111.086 61.016299) (xy 110.713674 61.016299) (xy 110.689916 60.937982) (xy 110.667574 60.896183) (xy 110.644513 60.853039) + (xy 110.605487 60.805487) (xy 110.583412 60.778588) (xy 110.564759 60.76328) (xy 109.482189 59.68071) (xy 109.482189 58.693326) + (xy 109.597534 58.770397) (xy 109.799896 58.854218) (xy 110.014723 58.89695) (xy 110.233757 58.89695) (xy 110.448584 58.854218) + (xy 110.650946 58.770397) (xy 110.833067 58.648708) (xy 110.987948 58.493827) (xy 111.109637 58.311706) (xy 111.193458 58.109344) + (xy 111.23619 57.894517) (xy 111.23619 57.675483) (xy 111.193458 57.460656) (xy 111.109637 57.258294) (xy 110.987948 57.076173) + (xy 110.833067 56.921292) (xy 110.650946 56.799603) (xy 110.448584 56.715782) (xy 110.233757 56.67305) (xy 110.014723 56.67305) + (xy 109.799896 56.715782) (xy 109.597534 56.799603) (xy 109.482189 56.876674) (xy 109.482189 54.61765) (xy 109.76214 54.337699) + (xy 109.799896 54.353338) (xy 110.014723 54.39607) (xy 110.233757 54.39607) (xy 110.448584 54.353338) (xy 110.650946 54.269517) + (xy 110.833067 54.147828) (xy 110.987948 53.992947) (xy 111.109637 53.810826) (xy 111.193458 53.608464) (xy 111.23619 53.393637) + (xy 111.23619 53.174603) (xy 111.193458 52.959776) (xy 111.109637 52.757414) (xy 110.987948 52.575293) (xy 110.833067 52.420412) + (xy 110.650946 52.298723) (xy 110.448584 52.214902) (xy 110.233757 52.17217) (xy 110.014723 52.17217) (xy 109.799896 52.214902) + (xy 109.597534 52.298723) (xy 109.415413 52.420412) (xy 109.260532 52.575293) (xy 109.138843 52.757414) (xy 109.055022 52.959776) + (xy 109.01229 53.174603) (xy 109.01229 53.393637) (xy 109.055022 53.608464) (xy 109.070661 53.64622) (xy 108.66448 54.052401) + (xy 108.645827 54.067709) (xy 108.584726 54.142161) (xy 108.539323 54.227104) (xy 108.511364 54.319271) (xy 108.504289 54.391108) + (xy 108.504289 54.391118) (xy 108.501925 54.415121) (xy 108.504289 54.439124) (xy 108.50429 59.859226) (xy 108.501925 59.883239) + (xy 108.50429 59.907252) (xy 108.50429 59.907253) (xy 108.511365 59.97909) (xy 108.513837 59.987238) (xy 108.539324 60.071257) + (xy 108.584726 60.156199) (xy 108.630519 60.211998) (xy 108.630524 60.212003) (xy 108.645828 60.230651) (xy 108.664476 60.245955) + (xy 109.43482 61.016299) (xy 109.386 61.016299) (xy 109.315045 61.023287) (xy 109.246818 61.043984) (xy 109.183939 61.077594) + (xy 109.128825 61.122825) (xy 109.083594 61.177939) (xy 109.049984 61.240818) (xy 109.029287 61.309045) (xy 109.022299 61.38) + (xy 109.022299 62.752222) (xy 108.909701 62.86482) (xy 108.909701 61.38) (xy 108.902713 61.309045) (xy 108.882016 61.240818) + (xy 108.848406 61.177939) (xy 108.803175 61.122825) (xy 108.748061 61.077594) (xy 108.685182 61.043984) (xy 108.616955 61.023287) + (xy 108.546 61.016299) (xy 108.244071 61.016299) (xy 108.244071 54.439124) (xy 108.246435 54.415121) (xy 108.244071 54.391118) + (xy 108.244071 54.391107) (xy 108.236996 54.31927) (xy 108.209037 54.227103) (xy 108.19542 54.201628) (xy 108.163635 54.14216) + (xy 108.117841 54.086361) (xy 108.117837 54.086357) (xy 108.102533 54.067709) (xy 108.083885 54.052405) (xy 107.677699 53.64622) + (xy 107.693338 53.608464) (xy 107.73607 53.393637) (xy 107.73607 53.174603) (xy 107.693338 52.959776) (xy 107.609517 52.757414) + (xy 107.487828 52.575293) (xy 107.332947 52.420412) (xy 107.150826 52.298723) (xy 106.948464 52.214902) (xy 106.733637 52.17217) + (xy 106.514603 52.17217) (xy 106.299776 52.214902) (xy 106.097414 52.298723) (xy 105.915293 52.420412) (xy 105.760412 52.575293) + (xy 105.638723 52.757414) (xy 105.554902 52.959776) (xy 105.51217 53.174603) (xy 105.51217 53.393637) (xy 105.554902 53.608464) + (xy 105.638723 53.810826) (xy 105.760412 53.992947) (xy 105.915293 54.147828) (xy 106.097414 54.269517) (xy 106.299776 54.353338) + (xy 106.514603 54.39607) (xy 106.733637 54.39607) (xy 106.948464 54.353338) (xy 106.98622 54.337699) (xy 107.266171 54.617651) + (xy 107.266171 56.671299) (xy 105.87412 56.671299) (xy 105.803165 56.678287) (xy 105.734938 56.698984) (xy 105.672059 56.732594) + (xy 105.616945 56.777825) (xy 105.571714 56.832939) (xy 105.538104 56.895818) (xy 105.517407 56.964045) (xy 105.510419 57.035) + (xy 104.234832 57.035) (xy 104.317859 56.990621) (xy 104.41165 56.91365) (xy 104.488621 56.819859) (xy 104.545817 56.712854) + (xy 104.581037 56.596747) (xy 104.59293 56.476) (xy 104.58995 55.926037) (xy 104.435963 55.77205) (xy 103.27005 55.77205) + (xy 102.97795 55.77205) (xy 101.812037 55.77205) (xy 101.65805 55.926037) (xy 101.65507 56.476) (xy 99.67595 56.476) + (xy 99.67595 54.954033) (xy 99.853983 54.776) (xy 101.65507 54.776) (xy 101.65805 55.325963) (xy 101.812037 55.47995) + (xy 102.97795 55.47995) (xy 102.97795 54.314037) (xy 103.27005 54.314037) (xy 103.27005 55.47995) (xy 104.435963 55.47995) + (xy 104.58995 55.325963) (xy 104.59293 54.776) (xy 104.581037 54.655253) (xy 104.545817 54.539146) (xy 104.488621 54.432141) + (xy 104.41165 54.33835) (xy 104.317859 54.261379) (xy 104.210854 54.204183) (xy 104.094747 54.168963) (xy 103.974 54.15707) + (xy 103.424037 54.16005) (xy 103.27005 54.314037) (xy 102.97795 54.314037) (xy 102.823963 54.16005) (xy 102.274 54.15707) + (xy 102.153253 54.168963) (xy 102.037146 54.204183) (xy 101.930141 54.261379) (xy 101.83635 54.33835) (xy 101.759379 54.432141) + (xy 101.702183 54.539146) (xy 101.666963 54.655253) (xy 101.65507 54.776) (xy 99.853983 54.776) (xy 100.247278 54.382706) + (xy 100.314463 54.39607) (xy 100.533497 54.39607) (xy 100.748324 54.353338) (xy 100.950686 54.269517) (xy 101.132807 54.147828) + (xy 101.287688 53.992947) (xy 101.409377 53.810826) (xy 101.493198 53.608464) (xy 101.53593 53.393637) (xy 101.53593 53.174603) + (xy 101.493198 52.959776) (xy 101.409377 52.757414) (xy 101.287688 52.575293) (xy 101.132807 52.420412) (xy 100.950686 52.298723) + (xy 100.748324 52.214902) (xy 100.533497 52.17217) (xy 100.314463 52.17217) (xy 100.099636 52.214902) (xy 99.897274 52.298723) + (xy 99.715153 52.420412) (xy 99.560272 52.575293) (xy 99.438583 52.757414) (xy 99.354762 52.959776) (xy 99.31203 53.174603) + (xy 99.31203 53.393637) (xy 99.342251 53.545566) (xy 98.64586 54.241957) (xy 98.622351 54.26125) (xy 98.562168 54.334585) + (xy 98.545379 54.355042) (xy 98.488184 54.462046) (xy 98.452963 54.578154) (xy 98.44107 54.6989) (xy 96.650139 54.6989) + (xy 96.996461 54.352578) (xy 96.998296 54.353338) (xy 97.213123 54.39607) (xy 97.432157 54.39607) (xy 97.646984 54.353338) + (xy 97.849346 54.269517) (xy 98.031467 54.147828) (xy 98.186348 53.992947) (xy 98.308037 53.810826) (xy 98.391858 53.608464) + (xy 98.43459 53.393637) (xy 98.43459 53.174603) (xy 98.391858 52.959776) (xy 98.308037 52.757414) (xy 98.186348 52.575293) + (xy 98.031467 52.420412) (xy 97.849346 52.298723) (xy 97.646984 52.214902) (xy 97.432157 52.17217) (xy 97.213123 52.17217) + (xy 96.998296 52.214902) (xy 96.795934 52.298723) (xy 96.613813 52.420412) (xy 96.458932 52.575293) (xy 96.337243 52.757414) + (xy 96.253422 52.959776) (xy 96.21069 53.174603) (xy 96.21069 53.393637) (xy 96.253422 53.608464) (xy 96.28394 53.682141) + (xy 95.330285 54.635796) (xy 95.311637 54.6511) (xy 95.296333 54.669748) (xy 95.296328 54.669753) (xy 95.250535 54.725552) + (xy 95.210347 54.80074) (xy 95.205133 54.810494) (xy 95.177174 54.902661) (xy 95.174122 54.933651) (xy 95.167734 54.998512) + (xy 95.170099 55.022525) (xy 95.170099 57.059664) (xy 95.031727 56.921292) (xy 94.849606 56.799603) (xy 94.647244 56.715782) + (xy 94.432417 56.67305) (xy 94.213383 56.67305) (xy 93.998556 56.715782) (xy 93.796194 56.799603) (xy 93.614073 56.921292) + (xy 93.59773 56.937635) (xy 93.59773 54.751569) (xy 93.996721 54.352578) (xy 93.998556 54.353338) (xy 94.213383 54.39607) + (xy 94.432417 54.39607) (xy 94.647244 54.353338) (xy 94.849606 54.269517) (xy 95.031727 54.147828) (xy 95.186608 53.992947) + (xy 95.308297 53.810826) (xy 95.392118 53.608464) (xy 95.43485 53.393637) (xy 95.43485 53.174603) (xy 95.392118 52.959776) + (xy 95.308297 52.757414) (xy 95.186608 52.575293) (xy 95.031727 52.420412) (xy 94.849606 52.298723) (xy 94.647244 52.214902) + (xy 94.432417 52.17217) (xy 94.213383 52.17217) (xy 93.998556 52.214902) (xy 93.796194 52.298723) (xy 93.614073 52.420412) + (xy 93.459192 52.575293) (xy 93.337503 52.757414) (xy 93.253682 52.959776) (xy 93.21095 53.174603) (xy 93.21095 53.393637) + (xy 93.253682 53.608464) (xy 93.2842 53.682141) (xy 92.87383 54.09251) (xy 92.391618 53.610299) (xy 92.392378 53.608464) + (xy 92.43511 53.393637) (xy 92.43511 53.174603) (xy 92.392378 52.959776) (xy 92.308557 52.757414) (xy 92.186868 52.575293) + (xy 92.031987 52.420412) (xy 91.849866 52.298723) (xy 91.647504 52.214902) (xy 91.432677 52.17217) (xy 91.213643 52.17217) + (xy 90.998816 52.214902) (xy 90.796454 52.298723) (xy 90.614333 52.420412) (xy 90.459452 52.575293) (xy 90.337763 52.757414) + (xy 90.253942 52.959776) (xy 90.21121 53.174603) (xy 90.21121 53.393637) (xy 90.253942 53.608464) (xy 90.337763 53.810826) + (xy 90.459452 53.992947) (xy 90.614333 54.147828) (xy 90.796454 54.269517) (xy 90.998816 54.353338) (xy 91.213643 54.39607) + (xy 91.432677 54.39607) (xy 91.647504 54.353338) (xy 91.721181 54.32282) (xy 92.109291 54.710931) (xy 92.10929 56.998595) + (xy 92.031987 56.921292) (xy 91.849866 56.799603) (xy 91.647504 56.715782) (xy 91.432677 56.67305) (xy 91.213643 56.67305) + (xy 90.998816 56.715782) (xy 90.796454 56.799603) (xy 90.614333 56.921292) (xy 90.459452 57.076173) (xy 90.40495 57.157741) + (xy 90.40495 54.849902) (xy 90.407314 54.825899) (xy 90.40495 54.801896) (xy 90.40495 54.801886) (xy 90.397875 54.730049) + (xy 90.369916 54.637882) (xy 90.342312 54.586239) (xy 90.324513 54.552939) (xy 90.27872 54.49714) (xy 90.278716 54.497136) + (xy 90.263412 54.478488) (xy 90.244764 54.463184) (xy 89.391878 53.610299) (xy 89.392638 53.608464) (xy 89.43537 53.393637) + (xy 89.43537 53.174603) (xy 89.392638 52.959776) (xy 89.308817 52.757414) (xy 89.187128 52.575293) (xy 89.032247 52.420412) + (xy 88.850126 52.298723) (xy 88.647764 52.214902) (xy 88.432937 52.17217) (xy 88.213903 52.17217) (xy 87.999076 52.214902) + (xy 87.796714 52.298723) (xy 87.614593 52.420412) (xy 87.459712 52.575293) (xy 87.338023 52.757414) (xy 87.254202 52.959776) + (xy 87.21147 53.174603) (xy 87.21147 53.393637) (xy 87.254202 53.608464) (xy 87.338023 53.810826) (xy 87.459712 53.992947) + (xy 87.614593 54.147828) (xy 87.796714 54.269517) (xy 87.999076 54.353338) (xy 88.213903 54.39607) (xy 88.432937 54.39607) + (xy 88.647764 54.353338) (xy 88.721441 54.32282) (xy 89.427051 55.028431) (xy 89.42705 57.633658) (xy 89.392638 57.460656) + (xy 89.308817 57.258294) (xy 89.187128 57.076173) (xy 89.032247 56.921292) (xy 88.850126 56.799603) (xy 88.647764 56.715782) + (xy 88.432937 56.67305) (xy 88.213903 56.67305) (xy 87.999076 56.715782) (xy 87.796714 56.799603) (xy 87.614593 56.921292) + (xy 87.459712 57.076173) (xy 87.35695 57.229968) (xy 87.35695 54.801642) (xy 87.359314 54.777639) (xy 87.35695 54.753636) + (xy 87.35695 54.753626) (xy 87.349875 54.681789) (xy 87.321916 54.589622) (xy 87.294281 54.537921) (xy 87.276513 54.504679) + (xy 87.23072 54.44888) (xy 87.230716 54.448876) (xy 87.215412 54.430228) (xy 87.196764 54.414924) (xy 86.392138 53.610299) + (xy 86.392898 53.608464) (xy 86.43563 53.393637) (xy 86.43563 53.174603) (xy 86.392898 52.959776) (xy 86.309077 52.757414) + (xy 86.187388 52.575293) (xy 86.032507 52.420412) (xy 85.850386 52.298723) (xy 85.648024 52.214902) (xy 85.433197 52.17217) + (xy 85.214163 52.17217) (xy 84.999336 52.214902) (xy 84.796974 52.298723) (xy 84.614853 52.420412) (xy 84.459972 52.575293) + (xy 84.338283 52.757414) (xy 84.254462 52.959776) (xy 84.21173 53.174603) (xy 84.21173 53.393637) (xy 84.254462 53.608464) + (xy 84.338283 53.810826) (xy 84.459972 53.992947) (xy 84.614853 54.147828) (xy 84.796974 54.269517) (xy 84.999336 54.353338) + (xy 85.214163 54.39607) (xy 85.433197 54.39607) (xy 85.648024 54.353338) (xy 85.721701 54.32282) (xy 86.379051 54.980171) + (xy 86.37905 57.427225) (xy 86.309077 57.258294) (xy 86.187388 57.076173) (xy 86.032507 56.921292) (xy 85.850386 56.799603) + (xy 85.648024 56.715782) (xy 85.433197 56.67305) (xy 85.214163 56.67305) (xy 84.999336 56.715782) (xy 84.796974 56.799603) + (xy 84.614853 56.921292) (xy 84.459972 57.076173) (xy 84.338283 57.258294) (xy 84.30895 57.32911) (xy 84.30895 54.75338) + (xy 84.311314 54.729379) (xy 84.30895 54.705378) (xy 84.30895 54.705366) (xy 84.301875 54.633529) (xy 84.273916 54.541362) + (xy 84.24667 54.490389) (xy 84.228513 54.456419) (xy 84.18272 54.40062) (xy 84.182716 54.400616) (xy 84.167412 54.381968) + (xy 84.148764 54.366664) (xy 83.392398 53.610299) (xy 83.393158 53.608464) (xy 83.43589 53.393637) (xy 83.43589 53.174603) + (xy 83.393158 52.959776) (xy 83.309337 52.757414) (xy 83.187648 52.575293) (xy 83.032767 52.420412) (xy 82.850646 52.298723) + (xy 82.648284 52.214902) (xy 82.433457 52.17217) (xy 82.214423 52.17217) (xy 81.999596 52.214902) (xy 81.797234 52.298723) + (xy 81.615113 52.420412) (xy 81.460232 52.575293) (xy 81.338543 52.757414) (xy 81.254722 52.959776) (xy 81.21199 53.174603) + (xy 81.21199 53.393637) (xy 81.254722 53.608464) (xy 81.338543 53.810826) (xy 81.460232 53.992947) (xy 81.615113 54.147828) + (xy 81.797234 54.269517) (xy 81.999596 54.353338) (xy 82.214423 54.39607) (xy 82.433457 54.39607) (xy 82.648284 54.353338) + (xy 82.721961 54.32282) (xy 83.331051 54.931911) (xy 83.33105 57.310715) (xy 83.309337 57.258294) (xy 83.187648 57.076173) + (xy 83.032767 56.921292) (xy 82.850646 56.799603) (xy 82.648284 56.715782) (xy 82.433457 56.67305) (xy 82.214423 56.67305) + (xy 81.999596 56.715782) (xy 81.797234 56.799603) (xy 81.615113 56.921292) (xy 81.460232 57.076173) (xy 81.338543 57.258294) + (xy 81.26095 57.44562) (xy 81.26095 54.70512) (xy 81.263314 54.681119) (xy 81.26095 54.657118) (xy 81.26095 54.657106) + (xy 81.253875 54.585269) (xy 81.225916 54.493102) (xy 81.198382 54.44159) (xy 81.180513 54.408159) (xy 81.13472 54.35236) + (xy 81.134716 54.352356) (xy 81.119412 54.333708) (xy 81.100764 54.318404) (xy 80.392658 53.610299) (xy 80.393418 53.608464) + (xy 80.43615 53.393637) (xy 80.43615 53.174603) (xy 80.393418 52.959776) (xy 80.309597 52.757414) (xy 80.187908 52.575293) + (xy 80.033027 52.420412) (xy 79.850906 52.298723) (xy 79.648544 52.214902) (xy 79.433717 52.17217) (xy 79.214683 52.17217) + (xy 78.999856 52.214902) (xy 78.797494 52.298723) (xy 78.615373 52.420412) (xy 78.460492 52.575293) (xy 78.338803 52.757414) + (xy 78.254982 52.959776) (xy 78.21225 53.174603) (xy 78.21225 53.393637) (xy 78.254982 53.608464) (xy 78.338803 53.810826) + (xy 78.460492 53.992947) (xy 78.615373 54.147828) (xy 78.797494 54.269517) (xy 78.999856 54.353338) (xy 79.214683 54.39607) + (xy 79.433717 54.39607) (xy 79.648544 54.353338) (xy 79.722221 54.32282) (xy 80.283051 54.883651) (xy 80.28305 57.218564) + (xy 80.187908 57.076173) (xy 80.033027 56.921292) (xy 79.850906 56.799603) (xy 79.648544 56.715782) (xy 79.433717 56.67305) + (xy 79.214683 56.67305) (xy 78.999856 56.715782) (xy 78.797494 56.799603) (xy 78.615373 56.921292) (xy 78.460492 57.076173) + (xy 78.338803 57.258294) (xy 78.254982 57.460656) (xy 78.21295 57.671964) (xy 78.21295 54.65686) (xy 78.215314 54.632859) + (xy 78.21295 54.608858) (xy 78.21295 54.608846) (xy 78.205875 54.537009) (xy 78.177916 54.444842) (xy 78.140539 54.374915) + (xy 78.132513 54.359899) (xy 78.08672 54.3041) (xy 78.086716 54.304096) (xy 78.071412 54.285448) (xy 78.052764 54.270144) + (xy 77.392918 53.610299) (xy 77.393678 53.608464) (xy 77.43641 53.393637) (xy 77.43641 53.174603) (xy 77.393678 52.959776) + (xy 77.309857 52.757414) (xy 77.188168 52.575293) (xy 77.033287 52.420412) (xy 76.851166 52.298723) (xy 76.648804 52.214902) + (xy 76.433977 52.17217) (xy 76.214943 52.17217) (xy 76.000116 52.214902) (xy 75.797754 52.298723) (xy 75.615633 52.420412) + (xy 75.460752 52.575293) (xy 75.339063 52.757414) (xy 75.255242 52.959776) (xy 75.21251 53.174603) (xy 75.21251 53.393637) + (xy 75.255242 53.608464) (xy 75.339063 53.810826) (xy 75.460752 53.992947) (xy 75.615633 54.147828) (xy 75.797754 54.269517) + (xy 76.000116 54.353338) (xy 76.214943 54.39607) (xy 76.433977 54.39607) (xy 76.648804 54.353338) (xy 76.722481 54.32282) + (xy 77.235051 54.835391) (xy 77.235051 57.146338) (xy 77.188168 57.076173) (xy 77.033287 56.921292) (xy 76.851166 56.799603) + (xy 76.648804 56.715782) (xy 76.433977 56.67305) (xy 76.214943 56.67305) (xy 76.000116 56.715782) (xy 75.797754 56.799603) + (xy 75.615633 56.921292) (xy 75.460752 57.076173) (xy 75.41595 57.143224) (xy 75.41595 54.891252) (xy 75.41893 54.860999) + (xy 75.41525 54.823635) (xy 75.407037 54.740253) (xy 75.371817 54.624146) (xy 75.314621 54.517141) (xy 75.23765 54.42335) + (xy 75.214141 54.404057) (xy 74.313278 53.503194) (xy 74.33507 53.393637) (xy 74.33507 53.174603) (xy 74.292338 52.959776) + (xy 74.208517 52.757414) (xy 74.086828 52.575293) (xy 73.931947 52.420412) (xy 73.749826 52.298723) (xy 73.547464 52.214902) + (xy 73.332637 52.17217) (xy 73.113603 52.17217) (xy 72.898776 52.214902) (xy 72.696414 52.298723) (xy 72.514293 52.420412) + (xy 72.359412 52.575293) (xy 72.237723 52.757414) (xy 72.153902 52.959776) (xy 72.11117 53.174603) (xy 72.11117 53.393637) + (xy 72.153902 53.608464) (xy 72.237723 53.810826) (xy 72.359412 53.992947) (xy 72.514293 54.147828) (xy 72.696414 54.269517) + (xy 72.898776 54.353338) (xy 73.113603 54.39607) (xy 73.332637 54.39607) (xy 73.442194 54.374278) (xy 74.184051 55.116135) + (xy 74.184051 57.221677) (xy 74.086828 57.076173) (xy 73.931947 56.921292) (xy 73.749826 56.799603) (xy 73.547464 56.715782) + (xy 73.332637 56.67305) (xy 73.113603 56.67305) (xy 72.898776 56.715782) (xy 72.696414 56.799603) (xy 72.514293 56.921292) + (xy 72.359412 57.076173) (xy 72.237723 57.258294) (xy 72.153902 57.460656) (xy 72.11117 57.675483) (xy 72.11117 57.894517) + (xy 72.153902 58.109344) (xy 72.237723 58.311706) (xy 72.359412 58.493827) (xy 72.514293 58.648708) (xy 72.696414 58.770397) + (xy 72.898776 58.854218) (xy 73.113603 58.89695) (xy 73.332637 58.89695) (xy 73.547464 58.854218) (xy 73.749826 58.770397) + (xy 73.931947 58.648708) (xy 74.086828 58.493827) (xy 74.18405 58.348323) (xy 74.18405 59.652865) (xy 72.568414 61.268502) + (xy 72.560016 61.240818) (xy 72.526406 61.177939) (xy 72.481175 61.122825) (xy 72.426061 61.077594) (xy 72.363182 61.043984) (xy 72.294955 61.023287) (xy 72.224 61.016299) (xy 70.524 61.016299) (xy 70.453045 61.023287) (xy 70.384818 61.043984) (xy 70.321939 61.077594) (xy 70.266825 61.122825) (xy 70.221594 61.177939) (xy 70.187984 61.240818) (xy 70.167287 61.309045) - (xy 70.160299 61.38) (xy 70.160299 63.08) (xy 70.167287 63.150955) (xy 70.187984 63.219182) (xy 70.221594 63.282061) - (xy 70.266825 63.337175) (xy 70.321939 63.382406) (xy 70.384818 63.416016) (xy 70.453045 63.436713) (xy 70.524 63.443701) - (xy 71.829215 63.443701) (xy 71.716617 63.556299) (xy 70.524 63.556299) (xy 70.453045 63.563287) (xy 70.384818 63.583984) - (xy 70.321939 63.617594) (xy 70.266825 63.662825) (xy 70.221594 63.717939) (xy 70.187984 63.780818) (xy 70.167287 63.849045) - (xy 70.160299 63.92) (xy 70.160299 65.62) (xy 70.167287 65.690955) (xy 70.187984 65.759182) (xy 70.221594 65.822061) - (xy 70.266825 65.877175) (xy 70.321939 65.922406) (xy 70.384818 65.956016) (xy 70.453045 65.976713) (xy 70.524 65.983701) - (xy 71.716617 65.983701) (xy 72.282051 66.549136) (xy 72.282051 68.388016) (xy 72.224 68.382299) (xy 70.524 68.382299) - (xy 70.453045 68.389287) (xy 70.384818 68.409984) (xy 70.321939 68.443594) (xy 70.266825 68.488825) (xy 70.221594 68.543939) - (xy 70.187984 68.606818) (xy 70.167287 68.675045) (xy 70.160299 68.746) (xy 70.160299 70.446) (xy 70.167287 70.516955) - (xy 70.187984 70.585182) (xy 70.221594 70.648061) (xy 70.266825 70.703175) (xy 70.321939 70.748406) (xy 70.384818 70.782016) - (xy 70.453045 70.802713) (xy 70.524 70.809701) (xy 71.829215 70.809701) (xy 71.716617 70.922299) (xy 70.524 70.922299) - (xy 70.453045 70.929287) (xy 70.384818 70.949984) (xy 70.321939 70.983594) (xy 70.266825 71.028825) (xy 70.221594 71.083939) - (xy 70.187984 71.146818) (xy 70.167287 71.215045) (xy 70.160299 71.286) (xy 70.160299 72.986) (xy 70.167287 73.056955) - (xy 70.187984 73.125182) (xy 70.198925 73.14565) (xy 70.009075 73.14565) (xy 70.020016 73.125182) (xy 70.040713 73.056955) - (xy 70.047701 72.986) (xy 70.047701 71.286) (xy 70.040713 71.215045) (xy 70.020016 71.146818) (xy 69.986406 71.083939) - (xy 69.941175 71.028825) (xy 69.886061 70.983594) (xy 69.823182 70.949984) (xy 69.754955 70.929287) (xy 69.684 70.922299) - (xy 68.237383 70.922299) (xy 68.124785 70.809701) (xy 69.684 70.809701) (xy 69.754955 70.802713) (xy 69.823182 70.782016) - (xy 69.886061 70.748406) (xy 69.941175 70.703175) (xy 69.986406 70.648061) (xy 70.020016 70.585182) (xy 70.040713 70.516955) - (xy 70.047701 70.446) (xy 70.047701 68.746) (xy 70.040713 68.675045) (xy 70.020016 68.606818) (xy 69.986406 68.543939) - (xy 69.941175 68.488825) (xy 69.886061 68.443594) (xy 69.823182 68.409984) (xy 69.754955 68.389287) (xy 69.684 68.382299) - (xy 67.984 68.382299) (xy 67.92595 68.388016) (xy 67.92595 66.549133) (xy 68.491383 65.983701) (xy 69.684 65.983701) - (xy 69.754955 65.976713) (xy 69.823182 65.956016) (xy 69.886061 65.922406) (xy 69.941175 65.877175) (xy 69.986406 65.822061) - (xy 70.020016 65.759182) (xy 70.040713 65.690955) (xy 70.047701 65.62) (xy 70.047701 63.92) (xy 70.040713 63.849045) - (xy 70.020016 63.780818) (xy 69.986406 63.717939) (xy 69.941175 63.662825) (xy 69.886061 63.617594) (xy 69.823182 63.583984) - (xy 69.754955 63.563287) (xy 69.684 63.556299) (xy 67.984 63.556299) (xy 67.983438 63.556354) (xy 67.841126 63.414043) - (xy 67.844818 63.416016) (xy 67.913045 63.436713) (xy 67.984 63.443701) (xy 69.684 63.443701) (xy 69.754955 63.436713) - (xy 69.823182 63.416016) (xy 69.886061 63.382406) (xy 69.941175 63.337175) (xy 69.986406 63.282061) (xy 70.020016 63.219182) - (xy 70.040713 63.150955) (xy 70.047701 63.08) (xy 70.047701 61.38) (xy 70.040713 61.309045) (xy 70.020016 61.240818) - (xy 69.986406 61.177939) (xy 69.941175 61.122825) (xy 69.886061 61.077594) (xy 69.823182 61.043984) (xy 69.754955 61.023287) - (xy 69.684 61.016299) (xy 67.984 61.016299) (xy 67.913045 61.023287) (xy 67.844818 61.043984) (xy 67.781939 61.077594) - (xy 67.726825 61.122825) (xy 67.681594 61.177939) (xy 67.67195 61.195981) (xy 67.67195 60.760473) (xy 69.710165 58.72226) - (xy 69.817852 58.72226) (xy 69.998929 58.686242) (xy 70.169499 58.615589) (xy 70.323008 58.513017) (xy 70.453557 58.382468) - (xy 70.556129 58.228959) (xy 70.626782 58.058389) (xy 70.6628 57.877312) (xy 70.6628 57.692688) (xy 70.626782 57.511611) - (xy 70.556129 57.341041) (xy 70.453557 57.187532) (xy 70.323008 57.056983) (xy 70.169499 56.954411) (xy 69.998929 56.883758) - (xy 69.817852 56.84774) (xy 69.633228 56.84774) (xy 69.452151 56.883758) (xy 69.281581 56.954411) (xy 69.128072 57.056983) - (xy 68.997523 57.187532) (xy 68.894951 57.341041) (xy 68.824298 57.511611) (xy 68.78828 57.692688) (xy 68.78828 57.877312) - (xy 68.792372 57.897884) (xy 66.64186 60.048397) (xy 66.618351 60.06769) (xy 66.555922 60.143761) (xy 66.541379 60.161482) - (xy 66.484184 60.268486) (xy 66.448963 60.384594) (xy 66.43707 60.50534) (xy 66.440051 60.535605) (xy 66.44005 63.469745) - (xy 66.43707 63.5) (xy 66.444434 63.57476) (xy 66.448963 63.620746) (xy 66.484183 63.736853) (xy 66.541379 63.843858) - (xy 66.61835 63.93765) (xy 66.641864 63.956947) (xy 67.620299 64.935384) (xy 67.620299 65.112617) (xy 66.89586 65.837057) - (xy 66.872351 65.85635) (xy 66.812672 65.92907) (xy 66.795379 65.950142) (xy 66.738184 66.057146) (xy 66.702963 66.173254) - (xy 66.69107 66.294) (xy 66.694051 66.324265) (xy 66.69405 70.835745) (xy 66.69107 70.866) (xy 66.696615 70.922299) - (xy 66.702963 70.986746) (xy 66.738183 71.102853) (xy 66.795379 71.209858) (xy 66.87235 71.30365) (xy 66.895864 71.322947) - (xy 67.620299 72.047383) (xy 67.620299 72.986) (xy 67.627287 73.056955) (xy 67.647984 73.125182) (xy 67.658925 73.14565) - (xy 51.31435 73.14565) (xy 51.31435 61.994217) (xy 53.48605 61.994217) (xy 53.48605 62.465783) (xy 53.578048 62.928289) - (xy 53.758509 63.36396) (xy 54.020498 63.756054) (xy 54.353946 64.089502) (xy 54.74604 64.351491) (xy 55.181711 64.531952) - (xy 55.644217 64.62395) (xy 56.115783 64.62395) (xy 56.578289 64.531952) (xy 57.01396 64.351491) (xy 57.406054 64.089502) - (xy 57.739502 63.756054) (xy 58.001491 63.36396) (xy 58.181952 62.928289) (xy 58.27395 62.465783) (xy 58.27395 61.994217) - (xy 58.181952 61.531711) (xy 58.001491 61.09604) (xy 57.739502 60.703946) (xy 57.406054 60.370498) (xy 57.01396 60.108509) - (xy 56.578289 59.928048) (xy 56.115783 59.83605) (xy 55.644217 59.83605) (xy 55.181711 59.928048) (xy 54.74604 60.108509) - (xy 54.353946 60.370498) (xy 54.020498 60.703946) (xy 53.758509 61.09604) (xy 53.578048 61.531711) (xy 53.48605 61.994217) - (xy 51.31435 61.994217) (xy 51.31435 56.476) (xy 65.58707 56.476) (xy 65.598963 56.596747) (xy 65.634183 56.712854) + (xy 70.160299 61.38) (xy 70.160299 62.685215) (xy 70.047701 62.572617) (xy 70.047701 61.38) (xy 70.040713 61.309045) + (xy 70.020016 61.240818) (xy 69.986406 61.177939) (xy 69.941175 61.122825) (xy 69.886061 61.077594) (xy 69.857015 61.062068) + (xy 71.788147 59.130938) (xy 71.81165 59.11165) (xy 71.888621 59.017859) (xy 71.945817 58.910854) (xy 71.981037 58.794747) + (xy 71.98995 58.704255) (xy 71.98995 58.704254) (xy 71.99293 58.674001) (xy 71.98995 58.643748) (xy 71.98995 54.912032) + (xy 71.99293 54.881779) (xy 71.98681 54.819646) (xy 71.981037 54.761033) (xy 71.945817 54.644926) (xy 71.888621 54.537921) + (xy 71.81165 54.44413) (xy 71.788146 54.424841) (xy 70.824126 53.460822) (xy 70.83749 53.393637) (xy 70.83749 53.174603) + (xy 70.794758 52.959776) (xy 70.710937 52.757414) (xy 70.589248 52.575293) (xy 70.434367 52.420412) (xy 70.252246 52.298723) + (xy 70.049884 52.214902) (xy 69.835057 52.17217) (xy 69.616023 52.17217) (xy 69.401196 52.214902) (xy 69.198834 52.298723) + (xy 69.016713 52.420412) (xy 68.861832 52.575293) (xy 68.740143 52.757414) (xy 68.656322 52.959776) (xy 68.61359 53.174603) + (xy 68.61359 53.393637) (xy 68.656322 53.608464) (xy 68.740143 53.810826) (xy 68.861832 53.992947) (xy 69.016713 54.147828) + (xy 69.198834 54.269517) (xy 69.401196 54.353338) (xy 69.616023 54.39607) (xy 69.835057 54.39607) (xy 69.986986 54.365849) + (xy 70.758051 55.136916) (xy 70.75805 56.808696) (xy 70.732715 56.777825) (xy 70.677601 56.732594) (xy 70.614722 56.698984) + (xy 70.546495 56.678287) (xy 70.47554 56.671299) (xy 68.97554 56.671299) (xy 68.904585 56.678287) (xy 68.836358 56.698984) + (xy 68.773479 56.732594) (xy 68.718365 56.777825) (xy 68.673134 56.832939) (xy 68.639524 56.895818) (xy 68.618827 56.964045) + (xy 68.611839 57.035) (xy 68.611839 58.535) (xy 68.618827 58.605955) (xy 68.639524 58.674182) (xy 68.673134 58.737061) + (xy 68.718365 58.792175) (xy 68.773479 58.837406) (xy 68.836358 58.871016) (xy 68.904585 58.891713) (xy 68.97554 58.898701) + (xy 70.278215 58.898701) (xy 68.41986 60.757057) (xy 68.396351 60.77635) (xy 68.344729 60.839253) (xy 68.319379 60.870142) + (xy 68.262184 60.977146) (xy 68.250307 61.016299) (xy 67.984 61.016299) (xy 67.913045 61.023287) (xy 67.844818 61.043984) + (xy 67.781939 61.077594) (xy 67.726825 61.122825) (xy 67.681594 61.177939) (xy 67.647984 61.240818) (xy 67.627287 61.309045) + (xy 67.620299 61.38) (xy 60.119112 61.38) (xy 60.001491 61.09604) (xy 59.739502 60.703946) (xy 59.406054 60.370498) + (xy 59.01396 60.108509) (xy 58.578289 59.928048) (xy 58.115783 59.83605) (xy 57.644217 59.83605) (xy 57.181711 59.928048) + (xy 56.74604 60.108509) (xy 56.353946 60.370498) (xy 56.020498 60.703946) (xy 55.758509 61.09604) (xy 55.578048 61.531711) + (xy 55.48605 61.994217) (xy 53.87385 61.994217) (xy 53.87385 56.476) (xy 65.58707 56.476) (xy 65.598963 56.596747) + (xy 65.634183 56.712854) (xy 65.691379 56.819859) (xy 65.76835 56.91365) (xy 65.862141 56.990621) (xy 65.969146 57.047817) + (xy 66.085253 57.083037) (xy 66.206 57.09493) (xy 66.755963 57.09195) (xy 66.90995 56.937963) (xy 66.90995 55.77205) + (xy 67.20205 55.77205) (xy 67.20205 56.937963) (xy 67.356037 57.09195) (xy 67.906 57.09493) (xy 68.026747 57.083037) + (xy 68.142854 57.047817) (xy 68.249859 56.990621) (xy 68.34365 56.91365) (xy 68.420621 56.819859) (xy 68.477817 56.712854) + (xy 68.513037 56.596747) (xy 68.52493 56.476) (xy 68.52195 55.926037) (xy 68.367963 55.77205) (xy 67.20205 55.77205) + (xy 66.90995 55.77205) (xy 65.744037 55.77205) (xy 65.59005 55.926037) (xy 65.58707 56.476) (xy 53.87385 56.476) + (xy 53.87385 54.776) (xy 65.58707 54.776) (xy 65.59005 55.325963) (xy 65.744037 55.47995) (xy 66.90995 55.47995) + (xy 66.90995 54.314037) (xy 67.20205 54.314037) (xy 67.20205 55.47995) (xy 68.367963 55.47995) (xy 68.52195 55.325963) + (xy 68.52493 54.776) (xy 68.513037 54.655253) (xy 68.477817 54.539146) (xy 68.420621 54.432141) (xy 68.34365 54.33835) + (xy 68.249859 54.261379) (xy 68.142854 54.204183) (xy 68.026747 54.168963) (xy 67.906 54.15707) (xy 67.356037 54.16005) + (xy 67.20205 54.314037) (xy 66.90995 54.314037) (xy 66.755963 54.16005) (xy 66.206 54.15707) (xy 66.085253 54.168963) + (xy 65.969146 54.204183) (xy 65.862141 54.261379) (xy 65.76835 54.33835) (xy 65.691379 54.432141) (xy 65.634183 54.539146) + (xy 65.598963 54.655253) (xy 65.58707 54.776) (xy 53.87385 54.776) (xy 53.87385 47.376345) (xy 62.56147 47.376345) + (xy 62.56147 47.792375) (xy 62.642633 48.200411) (xy 62.801841 48.584772) (xy 63.032975 48.930688) (xy 63.327152 49.224865) + (xy 63.673068 49.455999) (xy 64.057429 49.615207) (xy 64.465465 49.69637) (xy 64.881495 49.69637) (xy 65.289531 49.615207) + (xy 65.673892 49.455999) (xy 66.019808 49.224865) (xy 66.313985 48.930688) (xy 66.545119 48.584772) (xy 66.704327 48.200411) + (xy 66.78549 47.792375) (xy 66.78549 47.376345) (xy 101.41585 47.376345) (xy 101.41585 47.792375) (xy 101.497013 48.200411) + (xy 101.656221 48.584772) (xy 101.887355 48.930688) (xy 102.181532 49.224865) (xy 102.527448 49.455999) (xy 102.911809 49.615207) + (xy 103.319845 49.69637) (xy 103.735875 49.69637) (xy 104.143911 49.615207) (xy 104.528272 49.455999) (xy 104.874188 49.224865) + (xy 105.168365 48.930688) (xy 105.399499 48.584772) (xy 105.558707 48.200411) (xy 105.63987 47.792375) (xy 105.63987 47.376345) + (xy 147.26539 47.376345) (xy 147.26539 47.792375) (xy 147.346553 48.200411) (xy 147.505761 48.584772) (xy 147.736895 48.930688) + (xy 148.031072 49.224865) (xy 148.376988 49.455999) (xy 148.761349 49.615207) (xy 149.169385 49.69637) (xy 149.585415 49.69637) + (xy 149.993451 49.615207) (xy 150.377812 49.455999) (xy 150.723728 49.224865) (xy 151.017905 48.930688) (xy 151.249039 48.584772) + (xy 151.408247 48.200411) (xy 151.48941 47.792375) (xy 151.48941 47.376345) (xy 151.408247 46.968309) (xy 151.249039 46.583948) + (xy 151.017905 46.238032) (xy 150.723728 45.943855) (xy 150.377812 45.712721) (xy 149.993451 45.553513) (xy 149.585415 45.47235) + (xy 149.169385 45.47235) (xy 148.761349 45.553513) (xy 148.376988 45.712721) (xy 148.031072 45.943855) (xy 147.736895 46.238032) + (xy 147.505761 46.583948) (xy 147.346553 46.968309) (xy 147.26539 47.376345) (xy 105.63987 47.376345) (xy 105.558707 46.968309) + (xy 105.399499 46.583948) (xy 105.168365 46.238032) (xy 104.874188 45.943855) (xy 104.528272 45.712721) (xy 104.143911 45.553513) + (xy 103.735875 45.47235) (xy 103.319845 45.47235) (xy 102.911809 45.553513) (xy 102.527448 45.712721) (xy 102.181532 45.943855) + (xy 101.887355 46.238032) (xy 101.656221 46.583948) (xy 101.497013 46.968309) (xy 101.41585 47.376345) (xy 66.78549 47.376345) + (xy 66.704327 46.968309) (xy 66.545119 46.583948) (xy 66.313985 46.238032) (xy 66.019808 45.943855) (xy 65.673892 45.712721) + (xy 65.289531 45.553513) (xy 64.881495 45.47235) (xy 64.465465 45.47235) (xy 64.057429 45.553513) (xy 63.673068 45.712721) + (xy 63.327152 45.943855) (xy 63.032975 46.238032) (xy 62.801841 46.583948) (xy 62.642633 46.968309) (xy 62.56147 47.376345) + (xy 53.87385 47.376345) (xy 53.87385 40.87385) (xy 153.126151 40.87385) + ) + ) + ) + (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 5E771DED) (hatch edge 0.508) + (connect_pads (clearance 0.2159)) + (min_thickness 0.2159) + (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 14 30.6) (xy 195.58 30.48) (xy 195.58 81.28) (xy 14 81.4) + ) + ) + (filled_polygon + (pts + (xy 153.12615 73.62615) (xy 53.87385 73.62615) (xy 53.87385 61.994217) (xy 55.48605 61.994217) (xy 55.48605 62.465783) + (xy 55.578048 62.928289) (xy 55.758509 63.36396) (xy 56.020498 63.756054) (xy 56.353946 64.089502) (xy 56.74604 64.351491) + (xy 57.181711 64.531952) (xy 57.644217 64.62395) (xy 58.115783 64.62395) (xy 58.578289 64.531952) (xy 59.01396 64.351491) + (xy 59.406054 64.089502) (xy 59.739502 63.756054) (xy 60.001491 63.36396) (xy 60.181952 62.928289) (xy 60.27395 62.465783) + (xy 60.27395 61.994217) (xy 60.181952 61.531711) (xy 60.001491 61.09604) (xy 59.739502 60.703946) (xy 59.540896 60.50534) + (xy 66.43707 60.50534) (xy 66.440051 60.535605) (xy 66.44005 63.469745) (xy 66.43707 63.5) (xy 66.444434 63.57476) + (xy 66.448963 63.620746) (xy 66.484183 63.736853) (xy 66.541379 63.843858) (xy 66.61835 63.93765) (xy 66.641864 63.956947) + (xy 67.620299 64.935384) (xy 67.620299 65.112617) (xy 66.89586 65.837057) (xy 66.872351 65.85635) (xy 66.812672 65.92907) + (xy 66.795379 65.950142) (xy 66.738184 66.057146) (xy 66.702963 66.173254) (xy 66.69107 66.294) (xy 66.694051 66.324265) + (xy 66.69405 70.835745) (xy 66.69107 70.866) (xy 66.696615 70.922299) (xy 66.702963 70.986746) (xy 66.738183 71.102853) + (xy 66.795379 71.209858) (xy 66.87235 71.30365) (xy 66.895864 71.322947) (xy 67.620299 72.047383) (xy 67.620299 72.986) + (xy 67.627287 73.056955) (xy 67.647984 73.125182) (xy 67.681594 73.188061) (xy 67.726825 73.243175) (xy 67.781939 73.288406) + (xy 67.844818 73.322016) (xy 67.913045 73.342713) (xy 67.984 73.349701) (xy 69.684 73.349701) (xy 69.754955 73.342713) + (xy 69.823182 73.322016) (xy 69.886061 73.288406) (xy 69.941175 73.243175) (xy 69.986406 73.188061) (xy 70.020016 73.125182) + (xy 70.040713 73.056955) (xy 70.047701 72.986) (xy 70.047701 71.286) (xy 70.040713 71.215045) (xy 70.020016 71.146818) + (xy 69.986406 71.083939) (xy 69.941175 71.028825) (xy 69.886061 70.983594) (xy 69.823182 70.949984) (xy 69.754955 70.929287) + (xy 69.684 70.922299) (xy 68.237383 70.922299) (xy 68.124785 70.809701) (xy 69.684 70.809701) (xy 69.754955 70.802713) + (xy 69.823182 70.782016) (xy 69.886061 70.748406) (xy 69.941175 70.703175) (xy 69.986406 70.648061) (xy 70.020016 70.585182) + (xy 70.040713 70.516955) (xy 70.047701 70.446) (xy 70.047701 68.746) (xy 70.040713 68.675045) (xy 70.020016 68.606818) + (xy 69.986406 68.543939) (xy 69.941175 68.488825) (xy 69.886061 68.443594) (xy 69.823182 68.409984) (xy 69.754955 68.389287) + (xy 69.684 68.382299) (xy 67.984 68.382299) (xy 67.92595 68.388016) (xy 67.92595 66.549133) (xy 68.491383 65.983701) + (xy 69.684 65.983701) (xy 69.754955 65.976713) (xy 69.823182 65.956016) (xy 69.886061 65.922406) (xy 69.941175 65.877175) + (xy 69.986406 65.822061) (xy 70.020016 65.759182) (xy 70.040713 65.690955) (xy 70.047701 65.62) (xy 70.047701 63.92) + (xy 70.040713 63.849045) (xy 70.020016 63.780818) (xy 69.986406 63.717939) (xy 69.941175 63.662825) (xy 69.886061 63.617594) + (xy 69.823182 63.583984) (xy 69.754955 63.563287) (xy 69.684 63.556299) (xy 67.984 63.556299) (xy 67.983438 63.556354) + (xy 67.841126 63.414043) (xy 67.844818 63.416016) (xy 67.913045 63.436713) (xy 67.984 63.443701) (xy 69.684 63.443701) + (xy 69.754955 63.436713) (xy 69.823182 63.416016) (xy 69.886061 63.382406) (xy 69.941175 63.337175) (xy 69.986406 63.282061) + (xy 70.020016 63.219182) (xy 70.040713 63.150955) (xy 70.047701 63.08) (xy 70.047701 61.38) (xy 70.160299 61.38) + (xy 70.160299 63.08) (xy 70.167287 63.150955) (xy 70.187984 63.219182) (xy 70.221594 63.282061) (xy 70.266825 63.337175) + (xy 70.321939 63.382406) (xy 70.384818 63.416016) (xy 70.453045 63.436713) (xy 70.524 63.443701) (xy 71.829215 63.443701) + (xy 71.716617 63.556299) (xy 70.524 63.556299) (xy 70.453045 63.563287) (xy 70.384818 63.583984) (xy 70.321939 63.617594) + (xy 70.266825 63.662825) (xy 70.221594 63.717939) (xy 70.187984 63.780818) (xy 70.167287 63.849045) (xy 70.160299 63.92) + (xy 70.160299 65.62) (xy 70.167287 65.690955) (xy 70.187984 65.759182) (xy 70.221594 65.822061) (xy 70.266825 65.877175) + (xy 70.321939 65.922406) (xy 70.384818 65.956016) (xy 70.453045 65.976713) (xy 70.524 65.983701) (xy 71.716617 65.983701) + (xy 72.282051 66.549136) (xy 72.282051 68.388016) (xy 72.224 68.382299) (xy 70.524 68.382299) (xy 70.453045 68.389287) + (xy 70.384818 68.409984) (xy 70.321939 68.443594) (xy 70.266825 68.488825) (xy 70.221594 68.543939) (xy 70.187984 68.606818) + (xy 70.167287 68.675045) (xy 70.160299 68.746) (xy 70.160299 70.446) (xy 70.167287 70.516955) (xy 70.187984 70.585182) + (xy 70.221594 70.648061) (xy 70.266825 70.703175) (xy 70.321939 70.748406) (xy 70.384818 70.782016) (xy 70.453045 70.802713) + (xy 70.524 70.809701) (xy 71.829215 70.809701) (xy 71.716617 70.922299) (xy 70.524 70.922299) (xy 70.453045 70.929287) + (xy 70.384818 70.949984) (xy 70.321939 70.983594) (xy 70.266825 71.028825) (xy 70.221594 71.083939) (xy 70.187984 71.146818) + (xy 70.167287 71.215045) (xy 70.160299 71.286) (xy 70.160299 72.986) (xy 70.167287 73.056955) (xy 70.187984 73.125182) + (xy 70.221594 73.188061) (xy 70.266825 73.243175) (xy 70.321939 73.288406) (xy 70.384818 73.322016) (xy 70.453045 73.342713) + (xy 70.524 73.349701) (xy 72.224 73.349701) (xy 72.294955 73.342713) (xy 72.363182 73.322016) (xy 72.426061 73.288406) + (xy 72.481175 73.243175) (xy 72.526406 73.188061) (xy 72.560016 73.125182) (xy 72.580713 73.056955) (xy 72.587701 72.986) + (xy 72.587701 71.793383) (xy 73.312147 71.068938) (xy 73.33565 71.04965) (xy 73.412621 70.955859) (xy 73.469817 70.848854) + (xy 73.505037 70.732747) (xy 73.51395 70.642255) (xy 73.51395 70.642254) (xy 73.51693 70.612001) (xy 73.51395 70.581748) + (xy 73.51395 66.324252) (xy 73.51693 66.293999) (xy 73.512473 66.248747) (xy 73.505037 66.173253) (xy 73.469817 66.057146) + (xy 73.412621 65.950141) (xy 73.33565 65.85635) (xy 73.312146 65.837061) (xy 72.587701 65.112617) (xy 72.587701 64.427383) + (xy 73.566147 63.448938) (xy 73.58965 63.42965) (xy 73.666621 63.335859) (xy 73.723817 63.228854) (xy 73.759037 63.112747) + (xy 73.76795 63.022255) (xy 73.76795 63.022254) (xy 73.77093 62.992) (xy 73.76795 62.961745) (xy 73.76795 58.758287) + (xy 73.931947 58.648708) (xy 74.086828 58.493827) (xy 74.208517 58.311706) (xy 74.292338 58.109344) (xy 74.33507 57.894517) + (xy 74.33507 57.675483) (xy 75.21251 57.675483) (xy 75.21251 57.894517) (xy 75.255242 58.109344) (xy 75.339063 58.311706) + (xy 75.460752 58.493827) (xy 75.615633 58.648708) (xy 75.711051 58.712464) (xy 75.71105 63.221997) (xy 75.708686 63.246) + (xy 75.71105 63.270003) (xy 75.71105 63.270013) (xy 75.718125 63.34185) (xy 75.746084 63.434017) (xy 75.791487 63.51896) + (xy 75.852588 63.593412) (xy 75.871241 63.60872) (xy 76.591345 64.328824) (xy 76.529586 64.532416) (xy 76.506186 64.77) + (xy 76.529586 65.007584) (xy 76.598887 65.236037) (xy 76.711425 65.446581) (xy 76.862875 65.631125) (xy 77.047419 65.782575) + (xy 77.257963 65.895113) (xy 77.486416 65.964414) (xy 77.664462 65.98195) (xy 77.783538 65.98195) (xy 77.961584 65.964414) + (xy 78.165175 65.902655) (xy 78.505051 66.242531) (xy 78.50505 68.66916) (xy 78.400581 68.583425) (xy 78.190037 68.470887) + (xy 77.961584 68.401586) (xy 77.783538 68.38405) (xy 77.664462 68.38405) (xy 77.486416 68.401586) (xy 77.257963 68.470887) + (xy 77.047419 68.583425) (xy 76.862875 68.734875) (xy 76.711425 68.919419) (xy 76.598887 69.129963) (xy 76.529586 69.358416) + (xy 76.506186 69.596) (xy 76.529586 69.833584) (xy 76.598887 70.062037) (xy 76.711425 70.272581) (xy 76.862875 70.457125) + (xy 77.047419 70.608575) (xy 77.257963 70.721113) (xy 77.486416 70.790414) (xy 77.664462 70.80795) (xy 77.783538 70.80795) + (xy 77.961584 70.790414) (xy 78.190037 70.721113) (xy 78.400581 70.608575) (xy 78.50505 70.52284) (xy 78.50505 70.66347) + (xy 78.165175 71.003345) (xy 77.961584 70.941586) (xy 77.783538 70.92405) (xy 77.664462 70.92405) (xy 77.486416 70.941586) + (xy 77.257963 71.010887) (xy 77.047419 71.123425) (xy 76.862875 71.274875) (xy 76.711425 71.459419) (xy 76.598887 71.669963) + (xy 76.529586 71.898416) (xy 76.506186 72.136) (xy 76.529586 72.373584) (xy 76.598887 72.602037) (xy 76.711425 72.812581) + (xy 76.862875 72.997125) (xy 77.047419 73.148575) (xy 77.257963 73.261113) (xy 77.486416 73.330414) (xy 77.664462 73.34795) + (xy 77.783538 73.34795) (xy 77.961584 73.330414) (xy 78.190037 73.261113) (xy 78.400581 73.148575) (xy 78.585125 72.997125) + (xy 78.736575 72.812581) (xy 78.849113 72.602037) (xy 78.918414 72.373584) (xy 78.941814 72.136) (xy 78.918414 71.898416) + (xy 78.856655 71.694825) (xy 79.322764 71.228716) (xy 79.341412 71.213412) (xy 79.356716 71.194764) (xy 79.35672 71.19476) + (xy 79.402513 71.138961) (xy 79.431923 71.083939) (xy 79.447916 71.054018) (xy 79.475875 70.961851) (xy 79.48295 70.890014) + (xy 79.48295 70.890004) (xy 79.485314 70.866001) (xy 79.48295 70.841998) (xy 79.48295 70.52284) (xy 79.587419 70.608575) + (xy 79.797963 70.721113) (xy 80.026416 70.790414) (xy 80.204462 70.80795) (xy 80.323538 70.80795) (xy 80.501584 70.790414) + (xy 80.730037 70.721113) (xy 80.940581 70.608575) (xy 81.04505 70.52284) (xy 81.04505 70.66347) (xy 80.705175 71.003345) + (xy 80.501584 70.941586) (xy 80.323538 70.92405) (xy 80.204462 70.92405) (xy 80.026416 70.941586) (xy 79.797963 71.010887) + (xy 79.587419 71.123425) (xy 79.402875 71.274875) (xy 79.251425 71.459419) (xy 79.138887 71.669963) (xy 79.069586 71.898416) + (xy 79.046186 72.136) (xy 79.069586 72.373584) (xy 79.138887 72.602037) (xy 79.251425 72.812581) (xy 79.402875 72.997125) + (xy 79.587419 73.148575) (xy 79.797963 73.261113) (xy 80.026416 73.330414) (xy 80.204462 73.34795) (xy 80.323538 73.34795) + (xy 80.501584 73.330414) (xy 80.730037 73.261113) (xy 80.940581 73.148575) (xy 81.125125 72.997125) (xy 81.276575 72.812581) + (xy 81.389113 72.602037) (xy 81.458414 72.373584) (xy 81.481814 72.136) (xy 81.458414 71.898416) (xy 81.396655 71.694825) + (xy 81.862764 71.228716) (xy 81.881412 71.213412) (xy 81.896716 71.194764) (xy 81.89672 71.19476) (xy 81.942513 71.138961) + (xy 81.971923 71.083939) (xy 81.987916 71.054018) (xy 82.015875 70.961851) (xy 82.02295 70.890014) (xy 82.02295 70.890004) + (xy 82.025314 70.866001) (xy 82.02295 70.841998) (xy 82.02295 70.52284) (xy 82.127419 70.608575) (xy 82.337963 70.721113) + (xy 82.566416 70.790414) (xy 82.744462 70.80795) (xy 82.863538 70.80795) (xy 83.041584 70.790414) (xy 83.270037 70.721113) + (xy 83.480581 70.608575) (xy 83.58505 70.52284) (xy 83.58505 70.66347) (xy 83.245175 71.003345) (xy 83.041584 70.941586) + (xy 82.863538 70.92405) (xy 82.744462 70.92405) (xy 82.566416 70.941586) (xy 82.337963 71.010887) (xy 82.127419 71.123425) + (xy 81.942875 71.274875) (xy 81.791425 71.459419) (xy 81.678887 71.669963) (xy 81.609586 71.898416) (xy 81.586186 72.136) + (xy 81.609586 72.373584) (xy 81.678887 72.602037) (xy 81.791425 72.812581) (xy 81.942875 72.997125) (xy 82.127419 73.148575) + (xy 82.337963 73.261113) (xy 82.566416 73.330414) (xy 82.744462 73.34795) (xy 82.863538 73.34795) (xy 83.041584 73.330414) + (xy 83.270037 73.261113) (xy 83.480581 73.148575) (xy 83.665125 72.997125) (xy 83.816575 72.812581) (xy 83.929113 72.602037) + (xy 83.998414 72.373584) (xy 84.021814 72.136) (xy 83.998414 71.898416) (xy 83.936655 71.694825) (xy 84.402764 71.228716) + (xy 84.421412 71.213412) (xy 84.436716 71.194764) (xy 84.43672 71.19476) (xy 84.482513 71.138961) (xy 84.511923 71.083939) + (xy 84.527916 71.054018) (xy 84.555875 70.961851) (xy 84.56295 70.890014) (xy 84.56295 70.890004) (xy 84.565314 70.866001) + (xy 84.56295 70.841998) (xy 84.56295 70.52284) (xy 84.667419 70.608575) (xy 84.877963 70.721113) (xy 85.106416 70.790414) + (xy 85.284462 70.80795) (xy 85.403538 70.80795) (xy 85.581584 70.790414) (xy 85.810037 70.721113) (xy 86.020581 70.608575) + (xy 86.12505 70.52284) (xy 86.12505 70.66347) (xy 85.785175 71.003345) (xy 85.581584 70.941586) (xy 85.403538 70.92405) + (xy 85.284462 70.92405) (xy 85.106416 70.941586) (xy 84.877963 71.010887) (xy 84.667419 71.123425) (xy 84.482875 71.274875) + (xy 84.331425 71.459419) (xy 84.218887 71.669963) (xy 84.149586 71.898416) (xy 84.126186 72.136) (xy 84.149586 72.373584) + (xy 84.218887 72.602037) (xy 84.331425 72.812581) (xy 84.482875 72.997125) (xy 84.667419 73.148575) (xy 84.877963 73.261113) + (xy 85.106416 73.330414) (xy 85.284462 73.34795) (xy 85.403538 73.34795) (xy 85.581584 73.330414) (xy 85.810037 73.261113) + (xy 86.020581 73.148575) (xy 86.205125 72.997125) (xy 86.356575 72.812581) (xy 86.469113 72.602037) (xy 86.538414 72.373584) + (xy 86.561814 72.136) (xy 86.538414 71.898416) (xy 86.476655 71.694825) (xy 86.942764 71.228716) (xy 86.961412 71.213412) + (xy 86.976716 71.194764) (xy 86.97672 71.19476) (xy 87.022513 71.138961) (xy 87.051923 71.083939) (xy 87.067916 71.054018) + (xy 87.095875 70.961851) (xy 87.10295 70.890014) (xy 87.10295 70.890004) (xy 87.105314 70.866001) (xy 87.10295 70.841998) + (xy 87.10295 70.52284) (xy 87.207419 70.608575) (xy 87.417963 70.721113) (xy 87.646416 70.790414) (xy 87.824462 70.80795) + (xy 87.943538 70.80795) (xy 88.121584 70.790414) (xy 88.350037 70.721113) (xy 88.560581 70.608575) (xy 88.66505 70.52284) + (xy 88.66505 70.66347) (xy 88.325175 71.003345) (xy 88.121584 70.941586) (xy 87.943538 70.92405) (xy 87.824462 70.92405) + (xy 87.646416 70.941586) (xy 87.417963 71.010887) (xy 87.207419 71.123425) (xy 87.022875 71.274875) (xy 86.871425 71.459419) + (xy 86.758887 71.669963) (xy 86.689586 71.898416) (xy 86.666186 72.136) (xy 86.689586 72.373584) (xy 86.758887 72.602037) + (xy 86.871425 72.812581) (xy 87.022875 72.997125) (xy 87.207419 73.148575) (xy 87.417963 73.261113) (xy 87.646416 73.330414) + (xy 87.824462 73.34795) (xy 87.943538 73.34795) (xy 88.121584 73.330414) (xy 88.350037 73.261113) (xy 88.560581 73.148575) + (xy 88.745125 72.997125) (xy 88.896575 72.812581) (xy 89.009113 72.602037) (xy 89.078414 72.373584) (xy 89.101814 72.136) + (xy 89.078414 71.898416) (xy 89.016655 71.694825) (xy 89.482764 71.228716) (xy 89.501412 71.213412) (xy 89.516716 71.194764) + (xy 89.51672 71.19476) (xy 89.562513 71.138961) (xy 89.591923 71.083939) (xy 89.607916 71.054018) (xy 89.635875 70.961851) + (xy 89.64295 70.890014) (xy 89.64295 70.890004) (xy 89.645314 70.866001) (xy 89.64295 70.841998) (xy 89.64295 70.52284) + (xy 89.747419 70.608575) (xy 89.957963 70.721113) (xy 90.186416 70.790414) (xy 90.364462 70.80795) (xy 90.483538 70.80795) + (xy 90.661584 70.790414) (xy 90.890037 70.721113) (xy 91.100581 70.608575) (xy 91.20505 70.52284) (xy 91.20505 70.66347) + (xy 90.865175 71.003345) (xy 90.661584 70.941586) (xy 90.483538 70.92405) (xy 90.364462 70.92405) (xy 90.186416 70.941586) + (xy 89.957963 71.010887) (xy 89.747419 71.123425) (xy 89.562875 71.274875) (xy 89.411425 71.459419) (xy 89.298887 71.669963) + (xy 89.229586 71.898416) (xy 89.206186 72.136) (xy 89.229586 72.373584) (xy 89.298887 72.602037) (xy 89.411425 72.812581) + (xy 89.562875 72.997125) (xy 89.747419 73.148575) (xy 89.957963 73.261113) (xy 90.186416 73.330414) (xy 90.364462 73.34795) + (xy 90.483538 73.34795) (xy 90.661584 73.330414) (xy 90.890037 73.261113) (xy 91.100581 73.148575) (xy 91.285125 72.997125) + (xy 91.436575 72.812581) (xy 91.549113 72.602037) (xy 91.618414 72.373584) (xy 91.641814 72.136) (xy 91.618414 71.898416) + (xy 91.556655 71.694825) (xy 92.022764 71.228716) (xy 92.041412 71.213412) (xy 92.056716 71.194764) (xy 92.05672 71.19476) + (xy 92.102513 71.138961) (xy 92.131923 71.083939) (xy 92.147916 71.054018) (xy 92.175875 70.961851) (xy 92.18295 70.890014) + (xy 92.18295 70.890004) (xy 92.185314 70.866001) (xy 92.18295 70.841998) (xy 92.18295 70.52284) (xy 92.287419 70.608575) + (xy 92.497963 70.721113) (xy 92.726416 70.790414) (xy 92.904462 70.80795) (xy 93.023538 70.80795) (xy 93.201584 70.790414) + (xy 93.430037 70.721113) (xy 93.640581 70.608575) (xy 93.74505 70.52284) (xy 93.74505 70.66347) (xy 93.405175 71.003345) + (xy 93.201584 70.941586) (xy 93.023538 70.92405) (xy 92.904462 70.92405) (xy 92.726416 70.941586) (xy 92.497963 71.010887) + (xy 92.287419 71.123425) (xy 92.102875 71.274875) (xy 91.951425 71.459419) (xy 91.838887 71.669963) (xy 91.769586 71.898416) + (xy 91.746186 72.136) (xy 91.769586 72.373584) (xy 91.838887 72.602037) (xy 91.951425 72.812581) (xy 92.102875 72.997125) + (xy 92.287419 73.148575) (xy 92.497963 73.261113) (xy 92.726416 73.330414) (xy 92.904462 73.34795) (xy 93.023538 73.34795) + (xy 93.201584 73.330414) (xy 93.430037 73.261113) (xy 93.640581 73.148575) (xy 93.825125 72.997125) (xy 93.976575 72.812581) + (xy 94.089113 72.602037) (xy 94.158414 72.373584) (xy 94.181814 72.136) (xy 94.158414 71.898416) (xy 94.096655 71.694825) + (xy 94.290299 71.501181) (xy 94.290299 72.986) (xy 94.297287 73.056955) (xy 94.317984 73.125182) (xy 94.351594 73.188061) + (xy 94.396825 73.243175) (xy 94.451939 73.288406) (xy 94.514818 73.322016) (xy 94.583045 73.342713) (xy 94.654 73.349701) + (xy 96.354 73.349701) (xy 96.424955 73.342713) (xy 96.493182 73.322016) (xy 96.556061 73.288406) (xy 96.611175 73.243175) + (xy 96.656406 73.188061) (xy 96.690016 73.125182) (xy 96.710713 73.056955) (xy 96.717701 72.986) (xy 96.717701 71.867778) + (xy 97.356764 71.228716) (xy 97.375412 71.213412) (xy 97.390716 71.194764) (xy 97.39072 71.19476) (xy 97.436513 71.138961) + (xy 97.465923 71.083939) (xy 97.481916 71.054018) (xy 97.509875 70.961851) (xy 97.51695 70.890014) (xy 97.51695 70.890004) + (xy 97.519314 70.866001) (xy 97.51695 70.841998) (xy 97.51695 66.318) (xy 97.519314 66.293999) (xy 97.51695 66.269998) + (xy 97.51695 66.269986) (xy 97.509875 66.198149) (xy 97.481916 66.105982) (xy 97.446647 66.039999) (xy 97.436513 66.021039) + (xy 97.390719 65.96524) (xy 97.375412 65.946588) (xy 97.356759 65.93128) (xy 96.717701 65.292222) (xy 96.717701 64.247778) + (xy 97.356759 63.60872) (xy 97.375412 63.593412) (xy 97.420067 63.539) (xy 97.436513 63.518961) (xy 97.460781 63.473558) + (xy 97.481916 63.434018) (xy 97.509875 63.341851) (xy 97.51695 63.270014) (xy 97.51695 63.270002) (xy 97.519314 63.246001) + (xy 97.51695 63.222) (xy 97.51695 59.19978) (xy 98.44107 59.19978) (xy 98.444051 59.230045) (xy 98.44405 62.961745) + (xy 98.44107 62.992) (xy 98.44405 63.022254) (xy 98.452963 63.112746) (xy 98.488183 63.228853) (xy 98.545379 63.335858) + (xy 98.62235 63.42965) (xy 98.645864 63.448947) (xy 100.132299 64.935384) (xy 100.132299 65.62) (xy 100.139287 65.690955) + (xy 100.159984 65.759182) (xy 100.193594 65.822061) (xy 100.238825 65.877175) (xy 100.293939 65.922406) (xy 100.356818 65.956016) + (xy 100.425045 65.976713) (xy 100.496 65.983701) (xy 101.688617 65.983701) (xy 102.508051 66.803136) (xy 102.50805 68.561982) + (xy 102.498406 68.543939) (xy 102.453175 68.488825) (xy 102.398061 68.443594) (xy 102.335182 68.409984) (xy 102.266955 68.389287) + (xy 102.196 68.382299) (xy 100.496 68.382299) (xy 100.425045 68.389287) (xy 100.356818 68.409984) (xy 100.293939 68.443594) + (xy 100.238825 68.488825) (xy 100.193594 68.543939) (xy 100.159984 68.606818) (xy 100.139287 68.675045) (xy 100.132299 68.746) + (xy 100.132299 70.446) (xy 100.139287 70.516955) (xy 100.159984 70.585182) (xy 100.193594 70.648061) (xy 100.238825 70.703175) + (xy 100.293939 70.748406) (xy 100.356818 70.782016) (xy 100.425045 70.802713) (xy 100.496 70.809701) (xy 101.801215 70.809701) + (xy 101.688617 70.922299) (xy 100.496 70.922299) (xy 100.425045 70.929287) (xy 100.356818 70.949984) (xy 100.293939 70.983594) + (xy 100.238825 71.028825) (xy 100.193594 71.083939) (xy 100.159984 71.146818) (xy 100.139287 71.215045) (xy 100.132299 71.286) + (xy 100.132299 72.986) (xy 100.139287 73.056955) (xy 100.159984 73.125182) (xy 100.193594 73.188061) (xy 100.238825 73.243175) + (xy 100.293939 73.288406) (xy 100.356818 73.322016) (xy 100.425045 73.342713) (xy 100.496 73.349701) (xy 102.196 73.349701) + (xy 102.266955 73.342713) (xy 102.335182 73.322016) (xy 102.398061 73.288406) (xy 102.453175 73.243175) (xy 102.498406 73.188061) + (xy 102.532016 73.125182) (xy 102.552713 73.056955) (xy 102.559701 72.986) (xy 102.559701 71.793383) (xy 103.538147 70.814938) + (xy 103.56165 70.79565) (xy 103.638621 70.701859) (xy 103.695817 70.594854) (xy 103.731037 70.478747) (xy 103.73995 70.388255) + (xy 103.73995 70.388254) (xy 103.74293 70.358) (xy 103.73995 70.327745) (xy 103.73995 66.578255) (xy 103.74293 66.548) + (xy 103.731037 66.427253) (xy 103.719691 66.38985) (xy 103.695817 66.311146) (xy 103.638621 66.204141) (xy 103.56165 66.11035) + (xy 103.538146 66.091061) (xy 102.559701 65.112617) (xy 102.559701 63.92) (xy 102.552713 63.849045) (xy 102.532016 63.780818) + (xy 102.498406 63.717939) (xy 102.453175 63.662825) (xy 102.398061 63.617594) (xy 102.335182 63.583984) (xy 102.266955 63.563287) + (xy 102.196 63.556299) (xy 100.496 63.556299) (xy 100.495438 63.556354) (xy 100.353127 63.414043) (xy 100.356818 63.416016) + (xy 100.425045 63.436713) (xy 100.496 63.443701) (xy 102.196 63.443701) (xy 102.266955 63.436713) (xy 102.335182 63.416016) + (xy 102.398061 63.382406) (xy 102.453175 63.337175) (xy 102.498406 63.282061) (xy 102.532016 63.219182) (xy 102.552713 63.150955) + (xy 102.559701 63.08) (xy 102.559701 61.38) (xy 102.552713 61.309045) (xy 102.532016 61.240818) (xy 102.498406 61.177939) + (xy 102.453175 61.122825) (xy 102.398061 61.077594) (xy 102.335182 61.043984) (xy 102.266955 61.023287) (xy 102.196 61.016299) + (xy 100.496 61.016299) (xy 100.425045 61.023287) (xy 100.356818 61.043984) (xy 100.293939 61.077594) (xy 100.238825 61.122825) + (xy 100.193594 61.177939) (xy 100.159984 61.240818) (xy 100.139287 61.309045) (xy 100.132299 61.38) (xy 100.132299 63.08) + (xy 100.139287 63.150955) (xy 100.159984 63.219182) (xy 100.161957 63.222873) (xy 99.67595 62.736867) (xy 99.67595 59.454913) + (xy 100.247278 58.883586) (xy 100.314463 58.89695) (xy 100.533497 58.89695) (xy 100.748324 58.854218) (xy 100.950686 58.770397) + (xy 101.132807 58.648708) (xy 101.287688 58.493827) (xy 101.409377 58.311706) (xy 101.493198 58.109344) (xy 101.53593 57.894517) + (xy 101.53593 57.675483) (xy 101.493198 57.460656) (xy 101.409377 57.258294) (xy 101.287688 57.076173) (xy 101.132807 56.921292) + (xy 100.950686 56.799603) (xy 100.748324 56.715782) (xy 100.533497 56.67305) (xy 100.314463 56.67305) (xy 100.099636 56.715782) + (xy 99.897274 56.799603) (xy 99.715153 56.921292) (xy 99.560272 57.076173) (xy 99.438583 57.258294) (xy 99.354762 57.460656) + (xy 99.31203 57.675483) (xy 99.31203 57.894517) (xy 99.342251 58.046446) (xy 98.64586 58.742837) (xy 98.622351 58.76213) + (xy 98.559058 58.839254) (xy 98.545379 58.855922) (xy 98.488184 58.962926) (xy 98.452963 59.079034) (xy 98.44107 59.19978) + (xy 97.51695 59.19978) (xy 97.51695 58.880084) (xy 97.646984 58.854218) (xy 97.849346 58.770397) (xy 98.031467 58.648708) + (xy 98.186348 58.493827) (xy 98.308037 58.311706) (xy 98.391858 58.109344) (xy 98.43459 57.894517) (xy 98.43459 57.675483) + (xy 98.391858 57.460656) (xy 98.308037 57.258294) (xy 98.186348 57.076173) (xy 98.031467 56.921292) (xy 97.849346 56.799603) + (xy 97.646984 56.715782) (xy 97.432157 56.67305) (xy 97.213123 56.67305) (xy 96.998296 56.715782) (xy 96.795934 56.799603) + (xy 96.613813 56.921292) (xy 96.458932 57.076173) (xy 96.337243 57.258294) (xy 96.253422 57.460656) (xy 96.21069 57.675483) + (xy 96.21069 57.894517) (xy 96.253422 58.109344) (xy 96.337243 58.311706) (xy 96.458932 58.493827) (xy 96.539051 58.573946) + (xy 96.53905 61.068502) (xy 96.493182 61.043984) (xy 96.424955 61.023287) (xy 96.354 61.016299) (xy 94.72295 61.016299) + (xy 94.72295 58.82286) (xy 94.849606 58.770397) (xy 95.031727 58.648708) (xy 95.186608 58.493827) (xy 95.308297 58.311706) + (xy 95.392118 58.109344) (xy 95.43485 57.894517) (xy 95.43485 57.675483) (xy 95.392118 57.460656) (xy 95.308297 57.258294) + (xy 95.186608 57.076173) (xy 95.031727 56.921292) (xy 94.849606 56.799603) (xy 94.647244 56.715782) (xy 94.432417 56.67305) + (xy 94.213383 56.67305) (xy 93.998556 56.715782) (xy 93.796194 56.799603) (xy 93.614073 56.921292) (xy 93.459192 57.076173) + (xy 93.337503 57.258294) (xy 93.253682 57.460656) (xy 93.21095 57.675483) (xy 93.21095 57.894517) (xy 93.253682 58.109344) + (xy 93.337503 58.311706) (xy 93.459192 58.493827) (xy 93.614073 58.648708) (xy 93.745051 58.736224) (xy 93.74505 61.30316) + (xy 93.640581 61.217425) (xy 93.430037 61.104887) (xy 93.201584 61.035586) (xy 93.023538 61.01805) (xy 92.904462 61.01805) + (xy 92.726416 61.035586) (xy 92.497963 61.104887) (xy 92.287419 61.217425) (xy 92.18295 61.30316) (xy 92.18295 58.497745) + (xy 92.186868 58.493827) (xy 92.308557 58.311706) (xy 92.392378 58.109344) (xy 92.43511 57.894517) (xy 92.43511 57.675483) + (xy 92.392378 57.460656) (xy 92.308557 57.258294) (xy 92.186868 57.076173) (xy 92.031987 56.921292) (xy 91.849866 56.799603) + (xy 91.647504 56.715782) (xy 91.432677 56.67305) (xy 91.213643 56.67305) (xy 90.998816 56.715782) (xy 90.796454 56.799603) + (xy 90.614333 56.921292) (xy 90.459452 57.076173) (xy 90.337763 57.258294) (xy 90.253942 57.460656) (xy 90.21121 57.675483) + (xy 90.21121 57.894517) (xy 90.253942 58.109344) (xy 90.337763 58.311706) (xy 90.459452 58.493827) (xy 90.614333 58.648708) + (xy 90.796454 58.770397) (xy 90.998816 58.854218) (xy 91.205051 58.895241) (xy 91.20505 61.30316) (xy 91.100581 61.217425) + (xy 90.890037 61.104887) (xy 90.661584 61.035586) (xy 90.483538 61.01805) (xy 90.364462 61.01805) (xy 90.186416 61.035586) + (xy 89.957963 61.104887) (xy 89.747419 61.217425) (xy 89.64295 61.30316) (xy 89.64295 58.58878) (xy 89.645314 58.564779) + (xy 89.64295 58.540778) (xy 89.64295 58.540766) (xy 89.635875 58.468929) (xy 89.607916 58.376762) (xy 89.579169 58.32298) + (xy 89.562513 58.291819) (xy 89.51672 58.23602) (xy 89.516716 58.236016) (xy 89.501412 58.217368) (xy 89.482764 58.202064) + (xy 89.391878 58.111178) (xy 89.392638 58.109344) (xy 89.43537 57.894517) (xy 89.43537 57.675483) (xy 89.392638 57.460656) + (xy 89.308817 57.258294) (xy 89.187128 57.076173) (xy 89.032247 56.921292) (xy 88.850126 56.799603) (xy 88.647764 56.715782) + (xy 88.432937 56.67305) (xy 88.213903 56.67305) (xy 87.999076 56.715782) (xy 87.796714 56.799603) (xy 87.614593 56.921292) + (xy 87.459712 57.076173) (xy 87.338023 57.258294) (xy 87.254202 57.460656) (xy 87.21147 57.675483) (xy 87.21147 57.894517) + (xy 87.254202 58.109344) (xy 87.338023 58.311706) (xy 87.459712 58.493827) (xy 87.614593 58.648708) (xy 87.796714 58.770397) + (xy 87.999076 58.854218) (xy 88.213903 58.89695) (xy 88.432937 58.89695) (xy 88.647764 58.854218) (xy 88.665051 58.847058) + (xy 88.66505 61.30316) (xy 88.560581 61.217425) (xy 88.350037 61.104887) (xy 88.121584 61.035586) (xy 87.943538 61.01805) + (xy 87.824462 61.01805) (xy 87.646416 61.035586) (xy 87.417963 61.104887) (xy 87.207419 61.217425) (xy 87.022875 61.368875) + (xy 86.871425 61.553419) (xy 86.758887 61.763963) (xy 86.689586 61.992416) (xy 86.666186 62.23) (xy 86.689586 62.467584) + (xy 86.758887 62.696037) (xy 86.871425 62.906581) (xy 87.022875 63.091125) (xy 87.207419 63.242575) (xy 87.417963 63.355113) + (xy 87.646416 63.424414) (xy 87.824462 63.44195) (xy 87.943538 63.44195) (xy 88.020113 63.434408) (xy 87.896471 63.55805) + (xy 87.824462 63.55805) (xy 87.646416 63.575586) (xy 87.417963 63.644887) (xy 87.207419 63.757425) (xy 87.022875 63.908875) + (xy 86.871425 64.093419) (xy 86.758887 64.303963) (xy 86.689586 64.532416) (xy 86.666186 64.77) (xy 86.689586 65.007584) + (xy 86.758887 65.236037) (xy 86.871425 65.446581) (xy 87.022875 65.631125) (xy 87.207419 65.782575) (xy 87.417963 65.895113) + (xy 87.646416 65.964414) (xy 87.824462 65.98195) (xy 87.943538 65.98195) (xy 88.121584 65.964414) (xy 88.325175 65.902655) + (xy 88.665051 66.242531) (xy 88.66505 68.66916) (xy 88.560581 68.583425) (xy 88.350037 68.470887) (xy 88.121584 68.401586) + (xy 87.943538 68.38405) (xy 87.824462 68.38405) (xy 87.646416 68.401586) (xy 87.417963 68.470887) (xy 87.207419 68.583425) + (xy 87.10295 68.66916) (xy 87.10295 66.064002) (xy 87.105314 66.039999) (xy 87.10295 66.015996) (xy 87.10295 66.015986) + (xy 87.095875 65.944149) (xy 87.067916 65.851982) (xy 87.041566 65.802685) (xy 87.022513 65.767039) (xy 86.97672 65.71124) + (xy 86.976716 65.711236) (xy 86.961412 65.692588) (xy 86.942764 65.677284) (xy 86.476655 65.211175) (xy 86.538414 65.007584) + (xy 86.561814 64.77) (xy 86.538414 64.532416) (xy 86.469113 64.303963) (xy 86.356575 64.093419) (xy 86.205125 63.908875) + (xy 86.020581 63.757425) (xy 85.810037 63.644887) (xy 85.581584 63.575586) (xy 85.403538 63.55805) (xy 85.284462 63.55805) + (xy 85.106416 63.575586) (xy 84.902825 63.637345) (xy 84.56295 63.297471) (xy 84.56295 63.15684) (xy 84.667419 63.242575) + (xy 84.877963 63.355113) (xy 85.106416 63.424414) (xy 85.284462 63.44195) (xy 85.403538 63.44195) (xy 85.581584 63.424414) + (xy 85.810037 63.355113) (xy 86.020581 63.242575) (xy 86.205125 63.091125) (xy 86.356575 62.906581) (xy 86.469113 62.696037) + (xy 86.538414 62.467584) (xy 86.561814 62.23) (xy 86.538414 61.992416) (xy 86.469113 61.763963) (xy 86.356575 61.553419) + (xy 86.205125 61.368875) (xy 86.020581 61.217425) (xy 85.810037 61.104887) (xy 85.581584 61.035586) (xy 85.403538 61.01805) + (xy 85.284462 61.01805) (xy 85.106416 61.035586) (xy 84.877963 61.104887) (xy 84.667419 61.217425) (xy 84.56295 61.30316) + (xy 84.56295 59.288009) (xy 84.997501 58.853458) (xy 84.999336 58.854218) (xy 85.214163 58.89695) (xy 85.433197 58.89695) + (xy 85.648024 58.854218) (xy 85.850386 58.770397) (xy 86.032507 58.648708) (xy 86.187388 58.493827) (xy 86.309077 58.311706) + (xy 86.392898 58.109344) (xy 86.43563 57.894517) (xy 86.43563 57.675483) (xy 86.392898 57.460656) (xy 86.309077 57.258294) + (xy 86.187388 57.076173) (xy 86.032507 56.921292) (xy 85.850386 56.799603) (xy 85.648024 56.715782) (xy 85.433197 56.67305) + (xy 85.214163 56.67305) (xy 84.999336 56.715782) (xy 84.796974 56.799603) (xy 84.614853 56.921292) (xy 84.459972 57.076173) + (xy 84.338283 57.258294) (xy 84.254462 57.460656) (xy 84.21173 57.675483) (xy 84.21173 57.894517) (xy 84.254462 58.109344) + (xy 84.28498 58.183021) (xy 83.745237 58.722764) (xy 83.726589 58.738068) (xy 83.711285 58.756716) (xy 83.71128 58.756721) + (xy 83.665487 58.81252) (xy 83.623158 58.891713) (xy 83.620085 58.897462) (xy 83.592126 58.989629) (xy 83.58651 59.046653) + (xy 83.582686 59.08548) (xy 83.585051 59.109493) (xy 83.58505 61.30316) (xy 83.480581 61.217425) (xy 83.270037 61.104887) + (xy 83.041584 61.035586) (xy 82.863538 61.01805) (xy 82.744462 61.01805) (xy 82.566416 61.035586) (xy 82.337963 61.104887) + (xy 82.127419 61.217425) (xy 82.02295 61.30316) (xy 82.02295 58.858863) (xy 82.214423 58.89695) (xy 82.433457 58.89695) + (xy 82.648284 58.854218) (xy 82.850646 58.770397) (xy 83.032767 58.648708) (xy 83.187648 58.493827) (xy 83.309337 58.311706) + (xy 83.393158 58.109344) (xy 83.43589 57.894517) (xy 83.43589 57.675483) (xy 83.393158 57.460656) (xy 83.309337 57.258294) + (xy 83.187648 57.076173) (xy 83.032767 56.921292) (xy 82.850646 56.799603) (xy 82.648284 56.715782) (xy 82.433457 56.67305) + (xy 82.214423 56.67305) (xy 81.999596 56.715782) (xy 81.797234 56.799603) (xy 81.615113 56.921292) (xy 81.460232 57.076173) + (xy 81.338543 57.258294) (xy 81.254722 57.460656) (xy 81.21199 57.675483) (xy 81.21199 57.894517) (xy 81.254722 58.109344) + (xy 81.28524 58.183021) (xy 81.205237 58.263024) (xy 81.186589 58.278328) (xy 81.171285 58.296976) (xy 81.17128 58.296981) + (xy 81.125487 58.35278) (xy 81.088734 58.421541) (xy 81.080085 58.437722) (xy 81.052126 58.529889) (xy 81.048632 58.565362) + (xy 81.042686 58.62574) (xy 81.045051 58.649753) (xy 81.04505 61.30316) (xy 80.940581 61.217425) (xy 80.730037 61.104887) + (xy 80.501584 61.035586) (xy 80.323538 61.01805) (xy 80.204462 61.01805) (xy 80.026416 61.035586) (xy 79.797963 61.104887) + (xy 79.587419 61.217425) (xy 79.48295 61.30316) (xy 79.48295 58.887157) (xy 79.648544 58.854218) (xy 79.850906 58.770397) + (xy 80.033027 58.648708) (xy 80.187908 58.493827) (xy 80.309597 58.311706) (xy 80.393418 58.109344) (xy 80.43615 57.894517) + (xy 80.43615 57.675483) (xy 80.393418 57.460656) (xy 80.309597 57.258294) (xy 80.187908 57.076173) (xy 80.033027 56.921292) + (xy 79.850906 56.799603) (xy 79.648544 56.715782) (xy 79.433717 56.67305) (xy 79.214683 56.67305) (xy 78.999856 56.715782) + (xy 78.797494 56.799603) (xy 78.615373 56.921292) (xy 78.460492 57.076173) (xy 78.338803 57.258294) (xy 78.254982 57.460656) + (xy 78.21225 57.675483) (xy 78.21225 57.894517) (xy 78.254982 58.109344) (xy 78.338803 58.311706) (xy 78.460492 58.493827) + (xy 78.505051 58.538386) (xy 78.50505 61.30316) (xy 78.400581 61.217425) (xy 78.190037 61.104887) (xy 77.961584 61.035586) + (xy 77.783538 61.01805) (xy 77.664462 61.01805) (xy 77.486416 61.035586) (xy 77.257963 61.104887) (xy 77.047419 61.217425) + (xy 76.862875 61.368875) (xy 76.711425 61.553419) (xy 76.68895 61.595467) (xy 76.68895 58.837589) (xy 76.851166 58.770397) + (xy 77.033287 58.648708) (xy 77.188168 58.493827) (xy 77.309857 58.311706) (xy 77.393678 58.109344) (xy 77.43641 57.894517) + (xy 77.43641 57.675483) (xy 77.393678 57.460656) (xy 77.309857 57.258294) (xy 77.188168 57.076173) (xy 77.033287 56.921292) + (xy 76.851166 56.799603) (xy 76.648804 56.715782) (xy 76.433977 56.67305) (xy 76.214943 56.67305) (xy 76.000116 56.715782) + (xy 75.797754 56.799603) (xy 75.615633 56.921292) (xy 75.460752 57.076173) (xy 75.339063 57.258294) (xy 75.255242 57.460656) + (xy 75.21251 57.675483) (xy 74.33507 57.675483) (xy 74.292338 57.460656) (xy 74.208517 57.258294) (xy 74.086828 57.076173) + (xy 73.931947 56.921292) (xy 73.749826 56.799603) (xy 73.547464 56.715782) (xy 73.332637 56.67305) (xy 73.113603 56.67305) + (xy 72.898776 56.715782) (xy 72.696414 56.799603) (xy 72.514293 56.921292) (xy 72.359412 57.076173) (xy 72.237723 57.258294) + (xy 72.153902 57.460656) (xy 72.11117 57.675483) (xy 72.11117 57.894517) (xy 72.153902 58.109344) (xy 72.237723 58.311706) + (xy 72.359412 58.493827) (xy 72.514293 58.648708) (xy 72.536051 58.663246) (xy 72.53605 61.195982) (xy 72.526406 61.177939) + (xy 72.481175 61.122825) (xy 72.426061 61.077594) (xy 72.363182 61.043984) (xy 72.294955 61.023287) (xy 72.224 61.016299) + (xy 70.524 61.016299) (xy 70.453045 61.023287) (xy 70.384818 61.043984) (xy 70.321939 61.077594) (xy 70.266825 61.122825) + (xy 70.221594 61.177939) (xy 70.187984 61.240818) (xy 70.167287 61.309045) (xy 70.160299 61.38) (xy 70.047701 61.38) + (xy 70.040713 61.309045) (xy 70.020016 61.240818) (xy 69.986406 61.177939) (xy 69.941175 61.122825) (xy 69.886061 61.077594) + (xy 69.823182 61.043984) (xy 69.754955 61.023287) (xy 69.684 61.016299) (xy 67.984 61.016299) (xy 67.913045 61.023287) + (xy 67.844818 61.043984) (xy 67.781939 61.077594) (xy 67.726825 61.122825) (xy 67.681594 61.177939) (xy 67.67195 61.195981) + (xy 67.67195 60.760473) (xy 69.533723 58.898701) (xy 70.47554 58.898701) (xy 70.546495 58.891713) (xy 70.614722 58.871016) + (xy 70.677601 58.837406) (xy 70.732715 58.792175) (xy 70.777946 58.737061) (xy 70.811556 58.674182) (xy 70.832253 58.605955) + (xy 70.839241 58.535) (xy 70.839241 57.035) (xy 70.832253 56.964045) (xy 70.811556 56.895818) (xy 70.777946 56.832939) + (xy 70.732715 56.777825) (xy 70.677601 56.732594) (xy 70.614722 56.698984) (xy 70.546495 56.678287) (xy 70.47554 56.671299) + (xy 68.97554 56.671299) (xy 68.904585 56.678287) (xy 68.836358 56.698984) (xy 68.773479 56.732594) (xy 68.718365 56.777825) + (xy 68.673134 56.832939) (xy 68.639524 56.895818) (xy 68.618827 56.964045) (xy 68.611839 57.035) (xy 68.611839 58.078417) + (xy 66.64186 60.048397) (xy 66.618351 60.06769) (xy 66.555922 60.143761) (xy 66.541379 60.161482) (xy 66.484184 60.268486) + (xy 66.448963 60.384594) (xy 66.43707 60.50534) (xy 59.540896 60.50534) (xy 59.406054 60.370498) (xy 59.01396 60.108509) + (xy 58.578289 59.928048) (xy 58.115783 59.83605) (xy 57.644217 59.83605) (xy 57.181711 59.928048) (xy 56.74604 60.108509) + (xy 56.353946 60.370498) (xy 56.020498 60.703946) (xy 55.758509 61.09604) (xy 55.578048 61.531711) (xy 55.48605 61.994217) + (xy 53.87385 61.994217) (xy 53.87385 56.476) (xy 65.58707 56.476) (xy 65.598963 56.596747) (xy 65.634183 56.712854) (xy 65.691379 56.819859) (xy 65.76835 56.91365) (xy 65.862141 56.990621) (xy 65.969146 57.047817) (xy 66.085253 57.083037) (xy 66.206 57.09493) (xy 66.755963 57.09195) (xy 66.90995 56.937963) (xy 66.90995 55.77205) (xy 67.20205 55.77205) (xy 67.20205 56.937963) (xy 67.356037 57.09195) (xy 67.906 57.09493) (xy 68.026747 57.083037) (xy 68.142854 57.047817) @@ -3941,222 +3942,534 @@ (xy 68.52493 56.476) (xy 101.65507 56.476) (xy 101.666963 56.596747) (xy 101.702183 56.712854) (xy 101.759379 56.819859) (xy 101.83635 56.91365) (xy 101.930141 56.990621) (xy 102.037146 57.047817) (xy 102.153253 57.083037) (xy 102.274 57.09493) (xy 102.823963 57.09195) (xy 102.97795 56.937963) (xy 102.97795 55.77205) (xy 103.27005 55.77205) (xy 103.27005 56.937963) - (xy 103.424037 57.09195) (xy 103.974 57.09493) (xy 104.094747 57.083037) (xy 104.210854 57.047817) (xy 104.317859 56.990621) - (xy 104.41165 56.91365) (xy 104.488621 56.819859) (xy 104.545817 56.712854) (xy 104.581037 56.596747) (xy 104.59293 56.476) - (xy 146.35907 56.476) (xy 146.370963 56.596747) (xy 146.406183 56.712854) (xy 146.463379 56.819859) (xy 146.54035 56.91365) - (xy 146.634141 56.990621) (xy 146.741146 57.047817) (xy 146.857253 57.083037) (xy 146.978 57.09493) (xy 147.527963 57.09195) - (xy 147.68195 56.937963) (xy 147.68195 55.77205) (xy 147.97405 55.77205) (xy 147.97405 56.937963) (xy 148.128037 57.09195) - (xy 148.678 57.09493) (xy 148.798747 57.083037) (xy 148.914854 57.047817) (xy 149.021859 56.990621) (xy 149.11565 56.91365) - (xy 149.192621 56.819859) (xy 149.249817 56.712854) (xy 149.285037 56.596747) (xy 149.29693 56.476) (xy 149.29395 55.926037) - (xy 149.139963 55.77205) (xy 147.97405 55.77205) (xy 147.68195 55.77205) (xy 146.516037 55.77205) (xy 146.36205 55.926037) - (xy 146.35907 56.476) (xy 104.59293 56.476) (xy 104.58995 55.926037) (xy 104.435963 55.77205) (xy 103.27005 55.77205) - (xy 102.97795 55.77205) (xy 101.812037 55.77205) (xy 101.65805 55.926037) (xy 101.65507 56.476) (xy 68.52493 56.476) - (xy 68.52195 55.926037) (xy 68.367963 55.77205) (xy 67.20205 55.77205) (xy 66.90995 55.77205) (xy 65.744037 55.77205) - (xy 65.59005 55.926037) (xy 65.58707 56.476) (xy 51.31435 56.476) (xy 51.31435 54.776) (xy 65.58707 54.776) - (xy 65.59005 55.325963) (xy 65.744037 55.47995) (xy 66.90995 55.47995) (xy 66.90995 54.314037) (xy 67.20205 54.314037) - (xy 67.20205 55.47995) (xy 68.367963 55.47995) (xy 68.52195 55.325963) (xy 68.52493 54.776) (xy 101.65507 54.776) - (xy 101.65805 55.325963) (xy 101.812037 55.47995) (xy 102.97795 55.47995) (xy 102.97795 54.314037) (xy 103.27005 54.314037) - (xy 103.27005 55.47995) (xy 104.435963 55.47995) (xy 104.58995 55.325963) (xy 104.59293 54.776) (xy 146.35907 54.776) - (xy 146.36205 55.325963) (xy 146.516037 55.47995) (xy 147.68195 55.47995) (xy 147.68195 54.314037) (xy 147.97405 54.314037) - (xy 147.97405 55.47995) (xy 149.139963 55.47995) (xy 149.29395 55.325963) (xy 149.29693 54.776) (xy 149.285037 54.655253) - (xy 149.249817 54.539146) (xy 149.192621 54.432141) (xy 149.11565 54.33835) (xy 149.021859 54.261379) (xy 148.914854 54.204183) - (xy 148.798747 54.168963) (xy 148.678 54.15707) (xy 148.128037 54.16005) (xy 147.97405 54.314037) (xy 147.68195 54.314037) - (xy 147.527963 54.16005) (xy 146.978 54.15707) (xy 146.857253 54.168963) (xy 146.741146 54.204183) (xy 146.634141 54.261379) - (xy 146.54035 54.33835) (xy 146.463379 54.432141) (xy 146.406183 54.539146) (xy 146.370963 54.655253) (xy 146.35907 54.776) - (xy 104.59293 54.776) (xy 104.581037 54.655253) (xy 104.545817 54.539146) (xy 104.488621 54.432141) (xy 104.41165 54.33835) - (xy 104.317859 54.261379) (xy 104.210854 54.204183) (xy 104.094747 54.168963) (xy 103.974 54.15707) (xy 103.424037 54.16005) - (xy 103.27005 54.314037) (xy 102.97795 54.314037) (xy 102.823963 54.16005) (xy 102.274 54.15707) (xy 102.153253 54.168963) - (xy 102.037146 54.204183) (xy 101.930141 54.261379) (xy 101.83635 54.33835) (xy 101.759379 54.432141) (xy 101.702183 54.539146) - (xy 101.666963 54.655253) (xy 101.65507 54.776) (xy 68.52493 54.776) (xy 68.513037 54.655253) (xy 68.477817 54.539146) - (xy 68.420621 54.432141) (xy 68.34365 54.33835) (xy 68.249859 54.261379) (xy 68.142854 54.204183) (xy 68.026747 54.168963) - (xy 67.906 54.15707) (xy 67.356037 54.16005) (xy 67.20205 54.314037) (xy 66.90995 54.314037) (xy 66.755963 54.16005) - (xy 66.206 54.15707) (xy 66.085253 54.168963) (xy 65.969146 54.204183) (xy 65.862141 54.261379) (xy 65.76835 54.33835) - (xy 65.691379 54.432141) (xy 65.634183 54.539146) (xy 65.598963 54.655253) (xy 65.58707 54.776) (xy 51.31435 54.776) - (xy 51.31435 53.191808) (xy 68.78828 53.191808) (xy 68.78828 53.376432) (xy 68.824298 53.557509) (xy 68.894951 53.728079) - (xy 68.997523 53.881588) (xy 69.128072 54.012137) (xy 69.281581 54.114709) (xy 69.452151 54.185362) (xy 69.633228 54.22138) - (xy 69.817852 54.22138) (xy 69.998929 54.185362) (xy 70.169499 54.114709) (xy 70.323008 54.012137) (xy 70.453557 53.881588) - (xy 70.556129 53.728079) (xy 70.626782 53.557509) (xy 70.6628 53.376432) (xy 70.6628 53.191808) (xy 72.28586 53.191808) - (xy 72.28586 53.376432) (xy 72.321878 53.557509) (xy 72.392531 53.728079) (xy 72.495103 53.881588) (xy 72.625652 54.012137) - (xy 72.779161 54.114709) (xy 72.949731 54.185362) (xy 73.130808 54.22138) (xy 73.315432 54.22138) (xy 73.496509 54.185362) - (xy 73.667079 54.114709) (xy 73.820588 54.012137) (xy 73.951137 53.881588) (xy 74.053709 53.728079) (xy 74.124362 53.557509) - (xy 74.16038 53.376432) (xy 74.16038 53.191808) (xy 75.3872 53.191808) (xy 75.3872 53.376432) (xy 75.423218 53.557509) - (xy 75.493871 53.728079) (xy 75.596443 53.881588) (xy 75.726992 54.012137) (xy 75.880501 54.114709) (xy 76.051071 54.185362) - (xy 76.232148 54.22138) (xy 76.416772 54.22138) (xy 76.597849 54.185362) (xy 76.768419 54.114709) (xy 76.921928 54.012137) - (xy 77.052477 53.881588) (xy 77.155049 53.728079) (xy 77.225702 53.557509) (xy 77.26172 53.376432) (xy 77.26172 53.191808) - (xy 78.38694 53.191808) (xy 78.38694 53.376432) (xy 78.422958 53.557509) (xy 78.493611 53.728079) (xy 78.596183 53.881588) - (xy 78.726732 54.012137) (xy 78.880241 54.114709) (xy 79.050811 54.185362) (xy 79.231888 54.22138) (xy 79.416512 54.22138) - (xy 79.597589 54.185362) (xy 79.768159 54.114709) (xy 79.921668 54.012137) (xy 80.052217 53.881588) (xy 80.154789 53.728079) - (xy 80.225442 53.557509) (xy 80.26146 53.376432) (xy 80.26146 53.191808) (xy 81.38668 53.191808) (xy 81.38668 53.376432) - (xy 81.422698 53.557509) (xy 81.493351 53.728079) (xy 81.595923 53.881588) (xy 81.726472 54.012137) (xy 81.879981 54.114709) - (xy 82.050551 54.185362) (xy 82.231628 54.22138) (xy 82.416252 54.22138) (xy 82.597329 54.185362) (xy 82.767899 54.114709) - (xy 82.921408 54.012137) (xy 83.051957 53.881588) (xy 83.154529 53.728079) (xy 83.225182 53.557509) (xy 83.2612 53.376432) - (xy 83.2612 53.191808) (xy 84.38642 53.191808) (xy 84.38642 53.376432) (xy 84.422438 53.557509) (xy 84.493091 53.728079) - (xy 84.595663 53.881588) (xy 84.726212 54.012137) (xy 84.879721 54.114709) (xy 85.050291 54.185362) (xy 85.231368 54.22138) - (xy 85.415992 54.22138) (xy 85.597069 54.185362) (xy 85.767639 54.114709) (xy 85.921148 54.012137) (xy 86.051697 53.881588) - (xy 86.154269 53.728079) (xy 86.224922 53.557509) (xy 86.26094 53.376432) (xy 86.26094 53.191808) (xy 87.38616 53.191808) - (xy 87.38616 53.376432) (xy 87.422178 53.557509) (xy 87.492831 53.728079) (xy 87.595403 53.881588) (xy 87.725952 54.012137) - (xy 87.879461 54.114709) (xy 88.050031 54.185362) (xy 88.231108 54.22138) (xy 88.415732 54.22138) (xy 88.596809 54.185362) - (xy 88.767379 54.114709) (xy 88.920888 54.012137) (xy 89.051437 53.881588) (xy 89.154009 53.728079) (xy 89.224662 53.557509) - (xy 89.26068 53.376432) (xy 89.26068 53.191808) (xy 90.3859 53.191808) (xy 90.3859 53.376432) (xy 90.421918 53.557509) - (xy 90.492571 53.728079) (xy 90.595143 53.881588) (xy 90.725692 54.012137) (xy 90.879201 54.114709) (xy 91.049771 54.185362) - (xy 91.230848 54.22138) (xy 91.415472 54.22138) (xy 91.596549 54.185362) (xy 91.767119 54.114709) (xy 91.920628 54.012137) - (xy 92.051177 53.881588) (xy 92.153749 53.728079) (xy 92.224402 53.557509) (xy 92.26042 53.376432) (xy 92.26042 53.191808) - (xy 93.38564 53.191808) (xy 93.38564 53.376432) (xy 93.421658 53.557509) (xy 93.492311 53.728079) (xy 93.594883 53.881588) - (xy 93.725432 54.012137) (xy 93.878941 54.114709) (xy 94.049511 54.185362) (xy 94.230588 54.22138) (xy 94.415212 54.22138) - (xy 94.596289 54.185362) (xy 94.766859 54.114709) (xy 94.920368 54.012137) (xy 95.050917 53.881588) (xy 95.153489 53.728079) - (xy 95.224142 53.557509) (xy 95.26016 53.376432) (xy 95.26016 53.191808) (xy 96.38538 53.191808) (xy 96.38538 53.376432) - (xy 96.421398 53.557509) (xy 96.492051 53.728079) (xy 96.594623 53.881588) (xy 96.725172 54.012137) (xy 96.878681 54.114709) - (xy 97.049251 54.185362) (xy 97.230328 54.22138) (xy 97.414952 54.22138) (xy 97.596029 54.185362) (xy 97.766599 54.114709) - (xy 97.920108 54.012137) (xy 98.050657 53.881588) (xy 98.153229 53.728079) (xy 98.223882 53.557509) (xy 98.2599 53.376432) - (xy 98.2599 53.191808) (xy 99.48672 53.191808) (xy 99.48672 53.376432) (xy 99.522738 53.557509) (xy 99.593391 53.728079) - (xy 99.695963 53.881588) (xy 99.826512 54.012137) (xy 99.980021 54.114709) (xy 100.150591 54.185362) (xy 100.331668 54.22138) - (xy 100.516292 54.22138) (xy 100.697369 54.185362) (xy 100.867939 54.114709) (xy 101.021448 54.012137) (xy 101.151997 53.881588) - (xy 101.254569 53.728079) (xy 101.325222 53.557509) (xy 101.36124 53.376432) (xy 101.36124 53.191808) (xy 105.68686 53.191808) - (xy 105.68686 53.376432) (xy 105.722878 53.557509) (xy 105.793531 53.728079) (xy 105.896103 53.881588) (xy 106.026652 54.012137) - (xy 106.180161 54.114709) (xy 106.350731 54.185362) (xy 106.531808 54.22138) (xy 106.716432 54.22138) (xy 106.897509 54.185362) - (xy 107.068079 54.114709) (xy 107.221588 54.012137) (xy 107.352137 53.881588) (xy 107.454709 53.728079) (xy 107.525362 53.557509) - (xy 107.56138 53.376432) (xy 107.56138 53.191808) (xy 109.18698 53.191808) (xy 109.18698 53.376432) (xy 109.222998 53.557509) - (xy 109.293651 53.728079) (xy 109.396223 53.881588) (xy 109.526772 54.012137) (xy 109.680281 54.114709) (xy 109.850851 54.185362) - (xy 110.031928 54.22138) (xy 110.216552 54.22138) (xy 110.397629 54.185362) (xy 110.568199 54.114709) (xy 110.721708 54.012137) - (xy 110.852257 53.881588) (xy 110.954829 53.728079) (xy 111.025482 53.557509) (xy 111.0615 53.376432) (xy 111.0615 53.191808) - (xy 112.29086 53.191808) (xy 112.29086 53.376432) (xy 112.326878 53.557509) (xy 112.397531 53.728079) (xy 112.500103 53.881588) - (xy 112.630652 54.012137) (xy 112.784161 54.114709) (xy 112.954731 54.185362) (xy 113.135808 54.22138) (xy 113.320432 54.22138) - (xy 113.501509 54.185362) (xy 113.672079 54.114709) (xy 113.825588 54.012137) (xy 113.956137 53.881588) (xy 114.058709 53.728079) - (xy 114.129362 53.557509) (xy 114.16538 53.376432) (xy 114.16538 53.191808) (xy 115.2906 53.191808) (xy 115.2906 53.376432) - (xy 115.326618 53.557509) (xy 115.397271 53.728079) (xy 115.499843 53.881588) (xy 115.630392 54.012137) (xy 115.783901 54.114709) - (xy 115.954471 54.185362) (xy 116.135548 54.22138) (xy 116.320172 54.22138) (xy 116.501249 54.185362) (xy 116.671819 54.114709) - (xy 116.825328 54.012137) (xy 116.955877 53.881588) (xy 117.058449 53.728079) (xy 117.129102 53.557509) (xy 117.16512 53.376432) - (xy 117.16512 53.191808) (xy 118.29034 53.191808) (xy 118.29034 53.376432) (xy 118.326358 53.557509) (xy 118.397011 53.728079) - (xy 118.499583 53.881588) (xy 118.630132 54.012137) (xy 118.783641 54.114709) (xy 118.954211 54.185362) (xy 119.135288 54.22138) - (xy 119.319912 54.22138) (xy 119.500989 54.185362) (xy 119.671559 54.114709) (xy 119.825068 54.012137) (xy 119.955617 53.881588) - (xy 120.058189 53.728079) (xy 120.128842 53.557509) (xy 120.16486 53.376432) (xy 120.16486 53.191808) (xy 121.29008 53.191808) - (xy 121.29008 53.376432) (xy 121.326098 53.557509) (xy 121.396751 53.728079) (xy 121.499323 53.881588) (xy 121.629872 54.012137) - (xy 121.783381 54.114709) (xy 121.953951 54.185362) (xy 122.135028 54.22138) (xy 122.319652 54.22138) (xy 122.500729 54.185362) - (xy 122.671299 54.114709) (xy 122.824808 54.012137) (xy 122.955357 53.881588) (xy 123.057929 53.728079) (xy 123.128582 53.557509) - (xy 123.1646 53.376432) (xy 123.1646 53.191808) (xy 124.28982 53.191808) (xy 124.28982 53.376432) (xy 124.325838 53.557509) - (xy 124.396491 53.728079) (xy 124.499063 53.881588) (xy 124.629612 54.012137) (xy 124.783121 54.114709) (xy 124.953691 54.185362) - (xy 125.134768 54.22138) (xy 125.319392 54.22138) (xy 125.500469 54.185362) (xy 125.671039 54.114709) (xy 125.824548 54.012137) - (xy 125.955097 53.881588) (xy 126.057669 53.728079) (xy 126.128322 53.557509) (xy 126.16434 53.376432) (xy 126.16434 53.191808) - (xy 127.28956 53.191808) (xy 127.28956 53.376432) (xy 127.325578 53.557509) (xy 127.396231 53.728079) (xy 127.498803 53.881588) - (xy 127.629352 54.012137) (xy 127.782861 54.114709) (xy 127.953431 54.185362) (xy 128.134508 54.22138) (xy 128.319132 54.22138) - (xy 128.500209 54.185362) (xy 128.670779 54.114709) (xy 128.824288 54.012137) (xy 128.954837 53.881588) (xy 129.057409 53.728079) - (xy 129.128062 53.557509) (xy 129.16408 53.376432) (xy 129.16408 53.191808) (xy 130.2893 53.191808) (xy 130.2893 53.376432) - (xy 130.325318 53.557509) (xy 130.395971 53.728079) (xy 130.498543 53.881588) (xy 130.629092 54.012137) (xy 130.782601 54.114709) - (xy 130.953171 54.185362) (xy 131.134248 54.22138) (xy 131.318872 54.22138) (xy 131.499949 54.185362) (xy 131.670519 54.114709) - (xy 131.824028 54.012137) (xy 131.954577 53.881588) (xy 132.057149 53.728079) (xy 132.127802 53.557509) (xy 132.16382 53.376432) - (xy 132.16382 53.191808) (xy 133.28904 53.191808) (xy 133.28904 53.376432) (xy 133.325058 53.557509) (xy 133.395711 53.728079) - (xy 133.498283 53.881588) (xy 133.628832 54.012137) (xy 133.782341 54.114709) (xy 133.952911 54.185362) (xy 134.133988 54.22138) - (xy 134.318612 54.22138) (xy 134.499689 54.185362) (xy 134.670259 54.114709) (xy 134.823768 54.012137) (xy 134.954317 53.881588) - (xy 135.056889 53.728079) (xy 135.127542 53.557509) (xy 135.16356 53.376432) (xy 135.16356 53.191808) (xy 136.39038 53.191808) - (xy 136.39038 53.376432) (xy 136.426398 53.557509) (xy 136.497051 53.728079) (xy 136.599623 53.881588) (xy 136.730172 54.012137) - (xy 136.883681 54.114709) (xy 137.054251 54.185362) (xy 137.235328 54.22138) (xy 137.419952 54.22138) (xy 137.601029 54.185362) - (xy 137.771599 54.114709) (xy 137.925108 54.012137) (xy 138.055657 53.881588) (xy 138.158229 53.728079) (xy 138.228882 53.557509) - (xy 138.2649 53.376432) (xy 138.2649 53.191808) (xy 139.8905 53.191808) (xy 139.8905 53.376432) (xy 139.926518 53.557509) - (xy 139.997171 53.728079) (xy 140.099743 53.881588) (xy 140.230292 54.012137) (xy 140.383801 54.114709) (xy 140.554371 54.185362) - (xy 140.735448 54.22138) (xy 140.920072 54.22138) (xy 141.101149 54.185362) (xy 141.271719 54.114709) (xy 141.425228 54.012137) - (xy 141.555777 53.881588) (xy 141.658349 53.728079) (xy 141.729002 53.557509) (xy 141.76502 53.376432) (xy 141.76502 53.191808) - (xy 143.39062 53.191808) (xy 143.39062 53.376432) (xy 143.426638 53.557509) (xy 143.497291 53.728079) (xy 143.599863 53.881588) - (xy 143.730412 54.012137) (xy 143.883921 54.114709) (xy 144.054491 54.185362) (xy 144.235568 54.22138) (xy 144.420192 54.22138) - (xy 144.601269 54.185362) (xy 144.771839 54.114709) (xy 144.925348 54.012137) (xy 145.055897 53.881588) (xy 145.158469 53.728079) - (xy 145.229122 53.557509) (xy 145.26514 53.376432) (xy 145.26514 53.191808) (xy 145.229122 53.010731) (xy 145.158469 52.840161) - (xy 145.055897 52.686652) (xy 144.925348 52.556103) (xy 144.771839 52.453531) (xy 144.601269 52.382878) (xy 144.420192 52.34686) - (xy 144.235568 52.34686) (xy 144.054491 52.382878) (xy 143.883921 52.453531) (xy 143.730412 52.556103) (xy 143.599863 52.686652) - (xy 143.497291 52.840161) (xy 143.426638 53.010731) (xy 143.39062 53.191808) (xy 141.76502 53.191808) (xy 141.729002 53.010731) - (xy 141.658349 52.840161) (xy 141.555777 52.686652) (xy 141.425228 52.556103) (xy 141.271719 52.453531) (xy 141.101149 52.382878) - (xy 140.920072 52.34686) (xy 140.735448 52.34686) (xy 140.554371 52.382878) (xy 140.383801 52.453531) (xy 140.230292 52.556103) - (xy 140.099743 52.686652) (xy 139.997171 52.840161) (xy 139.926518 53.010731) (xy 139.8905 53.191808) (xy 138.2649 53.191808) - (xy 138.228882 53.010731) (xy 138.158229 52.840161) (xy 138.055657 52.686652) (xy 137.925108 52.556103) (xy 137.771599 52.453531) - (xy 137.601029 52.382878) (xy 137.419952 52.34686) (xy 137.235328 52.34686) (xy 137.054251 52.382878) (xy 136.883681 52.453531) - (xy 136.730172 52.556103) (xy 136.599623 52.686652) (xy 136.497051 52.840161) (xy 136.426398 53.010731) (xy 136.39038 53.191808) - (xy 135.16356 53.191808) (xy 135.127542 53.010731) (xy 135.056889 52.840161) (xy 134.954317 52.686652) (xy 134.823768 52.556103) - (xy 134.670259 52.453531) (xy 134.499689 52.382878) (xy 134.318612 52.34686) (xy 134.133988 52.34686) (xy 133.952911 52.382878) - (xy 133.782341 52.453531) (xy 133.628832 52.556103) (xy 133.498283 52.686652) (xy 133.395711 52.840161) (xy 133.325058 53.010731) - (xy 133.28904 53.191808) (xy 132.16382 53.191808) (xy 132.127802 53.010731) (xy 132.057149 52.840161) (xy 131.954577 52.686652) - (xy 131.824028 52.556103) (xy 131.670519 52.453531) (xy 131.499949 52.382878) (xy 131.318872 52.34686) (xy 131.134248 52.34686) - (xy 130.953171 52.382878) (xy 130.782601 52.453531) (xy 130.629092 52.556103) (xy 130.498543 52.686652) (xy 130.395971 52.840161) - (xy 130.325318 53.010731) (xy 130.2893 53.191808) (xy 129.16408 53.191808) (xy 129.128062 53.010731) (xy 129.057409 52.840161) - (xy 128.954837 52.686652) (xy 128.824288 52.556103) (xy 128.670779 52.453531) (xy 128.500209 52.382878) (xy 128.319132 52.34686) - (xy 128.134508 52.34686) (xy 127.953431 52.382878) (xy 127.782861 52.453531) (xy 127.629352 52.556103) (xy 127.498803 52.686652) - (xy 127.396231 52.840161) (xy 127.325578 53.010731) (xy 127.28956 53.191808) (xy 126.16434 53.191808) (xy 126.128322 53.010731) - (xy 126.057669 52.840161) (xy 125.955097 52.686652) (xy 125.824548 52.556103) (xy 125.671039 52.453531) (xy 125.500469 52.382878) - (xy 125.319392 52.34686) (xy 125.134768 52.34686) (xy 124.953691 52.382878) (xy 124.783121 52.453531) (xy 124.629612 52.556103) - (xy 124.499063 52.686652) (xy 124.396491 52.840161) (xy 124.325838 53.010731) (xy 124.28982 53.191808) (xy 123.1646 53.191808) - (xy 123.128582 53.010731) (xy 123.057929 52.840161) (xy 122.955357 52.686652) (xy 122.824808 52.556103) (xy 122.671299 52.453531) - (xy 122.500729 52.382878) (xy 122.319652 52.34686) (xy 122.135028 52.34686) (xy 121.953951 52.382878) (xy 121.783381 52.453531) - (xy 121.629872 52.556103) (xy 121.499323 52.686652) (xy 121.396751 52.840161) (xy 121.326098 53.010731) (xy 121.29008 53.191808) - (xy 120.16486 53.191808) (xy 120.128842 53.010731) (xy 120.058189 52.840161) (xy 119.955617 52.686652) (xy 119.825068 52.556103) - (xy 119.671559 52.453531) (xy 119.500989 52.382878) (xy 119.319912 52.34686) (xy 119.135288 52.34686) (xy 118.954211 52.382878) - (xy 118.783641 52.453531) (xy 118.630132 52.556103) (xy 118.499583 52.686652) (xy 118.397011 52.840161) (xy 118.326358 53.010731) - (xy 118.29034 53.191808) (xy 117.16512 53.191808) (xy 117.129102 53.010731) (xy 117.058449 52.840161) (xy 116.955877 52.686652) - (xy 116.825328 52.556103) (xy 116.671819 52.453531) (xy 116.501249 52.382878) (xy 116.320172 52.34686) (xy 116.135548 52.34686) - (xy 115.954471 52.382878) (xy 115.783901 52.453531) (xy 115.630392 52.556103) (xy 115.499843 52.686652) (xy 115.397271 52.840161) - (xy 115.326618 53.010731) (xy 115.2906 53.191808) (xy 114.16538 53.191808) (xy 114.129362 53.010731) (xy 114.058709 52.840161) - (xy 113.956137 52.686652) (xy 113.825588 52.556103) (xy 113.672079 52.453531) (xy 113.501509 52.382878) (xy 113.320432 52.34686) - (xy 113.135808 52.34686) (xy 112.954731 52.382878) (xy 112.784161 52.453531) (xy 112.630652 52.556103) (xy 112.500103 52.686652) - (xy 112.397531 52.840161) (xy 112.326878 53.010731) (xy 112.29086 53.191808) (xy 111.0615 53.191808) (xy 111.025482 53.010731) - (xy 110.954829 52.840161) (xy 110.852257 52.686652) (xy 110.721708 52.556103) (xy 110.568199 52.453531) (xy 110.397629 52.382878) - (xy 110.216552 52.34686) (xy 110.031928 52.34686) (xy 109.850851 52.382878) (xy 109.680281 52.453531) (xy 109.526772 52.556103) - (xy 109.396223 52.686652) (xy 109.293651 52.840161) (xy 109.222998 53.010731) (xy 109.18698 53.191808) (xy 107.56138 53.191808) - (xy 107.525362 53.010731) (xy 107.454709 52.840161) (xy 107.352137 52.686652) (xy 107.221588 52.556103) (xy 107.068079 52.453531) - (xy 106.897509 52.382878) (xy 106.716432 52.34686) (xy 106.531808 52.34686) (xy 106.350731 52.382878) (xy 106.180161 52.453531) - (xy 106.026652 52.556103) (xy 105.896103 52.686652) (xy 105.793531 52.840161) (xy 105.722878 53.010731) (xy 105.68686 53.191808) - (xy 101.36124 53.191808) (xy 101.325222 53.010731) (xy 101.254569 52.840161) (xy 101.151997 52.686652) (xy 101.021448 52.556103) - (xy 100.867939 52.453531) (xy 100.697369 52.382878) (xy 100.516292 52.34686) (xy 100.331668 52.34686) (xy 100.150591 52.382878) - (xy 99.980021 52.453531) (xy 99.826512 52.556103) (xy 99.695963 52.686652) (xy 99.593391 52.840161) (xy 99.522738 53.010731) - (xy 99.48672 53.191808) (xy 98.2599 53.191808) (xy 98.223882 53.010731) (xy 98.153229 52.840161) (xy 98.050657 52.686652) - (xy 97.920108 52.556103) (xy 97.766599 52.453531) (xy 97.596029 52.382878) (xy 97.414952 52.34686) (xy 97.230328 52.34686) - (xy 97.049251 52.382878) (xy 96.878681 52.453531) (xy 96.725172 52.556103) (xy 96.594623 52.686652) (xy 96.492051 52.840161) - (xy 96.421398 53.010731) (xy 96.38538 53.191808) (xy 95.26016 53.191808) (xy 95.224142 53.010731) (xy 95.153489 52.840161) - (xy 95.050917 52.686652) (xy 94.920368 52.556103) (xy 94.766859 52.453531) (xy 94.596289 52.382878) (xy 94.415212 52.34686) - (xy 94.230588 52.34686) (xy 94.049511 52.382878) (xy 93.878941 52.453531) (xy 93.725432 52.556103) (xy 93.594883 52.686652) - (xy 93.492311 52.840161) (xy 93.421658 53.010731) (xy 93.38564 53.191808) (xy 92.26042 53.191808) (xy 92.224402 53.010731) - (xy 92.153749 52.840161) (xy 92.051177 52.686652) (xy 91.920628 52.556103) (xy 91.767119 52.453531) (xy 91.596549 52.382878) - (xy 91.415472 52.34686) (xy 91.230848 52.34686) (xy 91.049771 52.382878) (xy 90.879201 52.453531) (xy 90.725692 52.556103) - (xy 90.595143 52.686652) (xy 90.492571 52.840161) (xy 90.421918 53.010731) (xy 90.3859 53.191808) (xy 89.26068 53.191808) - (xy 89.224662 53.010731) (xy 89.154009 52.840161) (xy 89.051437 52.686652) (xy 88.920888 52.556103) (xy 88.767379 52.453531) - (xy 88.596809 52.382878) (xy 88.415732 52.34686) (xy 88.231108 52.34686) (xy 88.050031 52.382878) (xy 87.879461 52.453531) - (xy 87.725952 52.556103) (xy 87.595403 52.686652) (xy 87.492831 52.840161) (xy 87.422178 53.010731) (xy 87.38616 53.191808) - (xy 86.26094 53.191808) (xy 86.224922 53.010731) (xy 86.154269 52.840161) (xy 86.051697 52.686652) (xy 85.921148 52.556103) - (xy 85.767639 52.453531) (xy 85.597069 52.382878) (xy 85.415992 52.34686) (xy 85.231368 52.34686) (xy 85.050291 52.382878) - (xy 84.879721 52.453531) (xy 84.726212 52.556103) (xy 84.595663 52.686652) (xy 84.493091 52.840161) (xy 84.422438 53.010731) - (xy 84.38642 53.191808) (xy 83.2612 53.191808) (xy 83.225182 53.010731) (xy 83.154529 52.840161) (xy 83.051957 52.686652) - (xy 82.921408 52.556103) (xy 82.767899 52.453531) (xy 82.597329 52.382878) (xy 82.416252 52.34686) (xy 82.231628 52.34686) - (xy 82.050551 52.382878) (xy 81.879981 52.453531) (xy 81.726472 52.556103) (xy 81.595923 52.686652) (xy 81.493351 52.840161) - (xy 81.422698 53.010731) (xy 81.38668 53.191808) (xy 80.26146 53.191808) (xy 80.225442 53.010731) (xy 80.154789 52.840161) - (xy 80.052217 52.686652) (xy 79.921668 52.556103) (xy 79.768159 52.453531) (xy 79.597589 52.382878) (xy 79.416512 52.34686) - (xy 79.231888 52.34686) (xy 79.050811 52.382878) (xy 78.880241 52.453531) (xy 78.726732 52.556103) (xy 78.596183 52.686652) - (xy 78.493611 52.840161) (xy 78.422958 53.010731) (xy 78.38694 53.191808) (xy 77.26172 53.191808) (xy 77.225702 53.010731) - (xy 77.155049 52.840161) (xy 77.052477 52.686652) (xy 76.921928 52.556103) (xy 76.768419 52.453531) (xy 76.597849 52.382878) - (xy 76.416772 52.34686) (xy 76.232148 52.34686) (xy 76.051071 52.382878) (xy 75.880501 52.453531) (xy 75.726992 52.556103) - (xy 75.596443 52.686652) (xy 75.493871 52.840161) (xy 75.423218 53.010731) (xy 75.3872 53.191808) (xy 74.16038 53.191808) - (xy 74.124362 53.010731) (xy 74.053709 52.840161) (xy 73.951137 52.686652) (xy 73.820588 52.556103) (xy 73.667079 52.453531) - (xy 73.496509 52.382878) (xy 73.315432 52.34686) (xy 73.130808 52.34686) (xy 72.949731 52.382878) (xy 72.779161 52.453531) - (xy 72.625652 52.556103) (xy 72.495103 52.686652) (xy 72.392531 52.840161) (xy 72.321878 53.010731) (xy 72.28586 53.191808) - (xy 70.6628 53.191808) (xy 70.626782 53.010731) (xy 70.556129 52.840161) (xy 70.453557 52.686652) (xy 70.323008 52.556103) - (xy 70.169499 52.453531) (xy 69.998929 52.382878) (xy 69.817852 52.34686) (xy 69.633228 52.34686) (xy 69.452151 52.382878) - (xy 69.281581 52.453531) (xy 69.128072 52.556103) (xy 68.997523 52.686652) (xy 68.894951 52.840161) (xy 68.824298 53.010731) - (xy 68.78828 53.191808) (xy 51.31435 53.191808) (xy 51.31435 47.376345) (xy 62.56147 47.376345) (xy 62.56147 47.792375) - (xy 62.642633 48.200411) (xy 62.801841 48.584772) (xy 63.032975 48.930688) (xy 63.327152 49.224865) (xy 63.673068 49.455999) - (xy 64.057429 49.615207) (xy 64.465465 49.69637) (xy 64.881495 49.69637) (xy 65.289531 49.615207) (xy 65.673892 49.455999) - (xy 66.019808 49.224865) (xy 66.313985 48.930688) (xy 66.545119 48.584772) (xy 66.704327 48.200411) (xy 66.78549 47.792375) - (xy 66.78549 47.376345) (xy 101.41585 47.376345) (xy 101.41585 47.792375) (xy 101.497013 48.200411) (xy 101.656221 48.584772) - (xy 101.887355 48.930688) (xy 102.181532 49.224865) (xy 102.527448 49.455999) (xy 102.911809 49.615207) (xy 103.319845 49.69637) - (xy 103.735875 49.69637) (xy 104.143911 49.615207) (xy 104.528272 49.455999) (xy 104.874188 49.224865) (xy 105.168365 48.930688) - (xy 105.399499 48.584772) (xy 105.558707 48.200411) (xy 105.63987 47.792375) (xy 105.63987 47.376345) (xy 147.26539 47.376345) - (xy 147.26539 47.792375) (xy 147.346553 48.200411) (xy 147.505761 48.584772) (xy 147.736895 48.930688) (xy 148.031072 49.224865) - (xy 148.376988 49.455999) (xy 148.761349 49.615207) (xy 149.169385 49.69637) (xy 149.585415 49.69637) (xy 149.993451 49.615207) - (xy 150.377812 49.455999) (xy 150.723728 49.224865) (xy 151.017905 48.930688) (xy 151.249039 48.584772) (xy 151.408247 48.200411) - (xy 151.48941 47.792375) (xy 151.48941 47.376345) (xy 151.408247 46.968309) (xy 151.249039 46.583948) (xy 151.017905 46.238032) - (xy 150.723728 45.943855) (xy 150.377812 45.712721) (xy 149.993451 45.553513) (xy 149.585415 45.47235) (xy 149.169385 45.47235) - (xy 148.761349 45.553513) (xy 148.376988 45.712721) (xy 148.031072 45.943855) (xy 147.736895 46.238032) (xy 147.505761 46.583948) - (xy 147.346553 46.968309) (xy 147.26539 47.376345) (xy 105.63987 47.376345) (xy 105.558707 46.968309) (xy 105.399499 46.583948) - (xy 105.168365 46.238032) (xy 104.874188 45.943855) (xy 104.528272 45.712721) (xy 104.143911 45.553513) (xy 103.735875 45.47235) - (xy 103.319845 45.47235) (xy 102.911809 45.553513) (xy 102.527448 45.712721) (xy 102.181532 45.943855) (xy 101.887355 46.238032) - (xy 101.656221 46.583948) (xy 101.497013 46.968309) (xy 101.41585 47.376345) (xy 66.78549 47.376345) (xy 66.704327 46.968309) - (xy 66.545119 46.583948) (xy 66.313985 46.238032) (xy 66.019808 45.943855) (xy 65.673892 45.712721) (xy 65.289531 45.553513) - (xy 64.881495 45.47235) (xy 64.465465 45.47235) (xy 64.057429 45.553513) (xy 63.673068 45.712721) (xy 63.327152 45.943855) - (xy 63.032975 46.238032) (xy 62.801841 46.583948) (xy 62.642633 46.968309) (xy 62.56147 47.376345) (xy 51.31435 47.376345) - (xy 51.31435 40.97435) (xy 153.15565 40.97435) + (xy 103.424037 57.09195) (xy 103.974 57.09493) (xy 104.094747 57.083037) (xy 104.210854 57.047817) (xy 104.234832 57.035) + (xy 105.510419 57.035) (xy 105.510419 58.535) (xy 105.517407 58.605955) (xy 105.538104 58.674182) (xy 105.571714 58.737061) + (xy 105.616945 58.792175) (xy 105.672059 58.837406) (xy 105.734938 58.871016) (xy 105.803165 58.891713) (xy 105.87412 58.898701) + (xy 107.046342 58.898701) (xy 108.438052 60.290412) (xy 108.438052 61.016299) (xy 106.846 61.016299) (xy 106.775045 61.023287) + (xy 106.706818 61.043984) (xy 106.643939 61.077594) (xy 106.588825 61.122825) (xy 106.543594 61.177939) (xy 106.509984 61.240818) + (xy 106.489287 61.309045) (xy 106.482299 61.38) (xy 106.482299 63.08) (xy 106.489287 63.150955) (xy 106.509984 63.219182) + (xy 106.543594 63.282061) (xy 106.588825 63.337175) (xy 106.643939 63.382406) (xy 106.706818 63.416016) (xy 106.775045 63.436713) + (xy 106.846 63.443701) (xy 108.438051 63.443701) (xy 108.438051 63.558175) (xy 108.419 63.556299) (xy 106.719 63.556299) + (xy 106.648045 63.563287) (xy 106.579818 63.583984) (xy 106.516939 63.617594) (xy 106.461825 63.662825) (xy 106.416594 63.717939) + (xy 106.382984 63.780818) (xy 106.362287 63.849045) (xy 106.355299 63.92) (xy 106.355299 65.62) (xy 106.362287 65.690955) + (xy 106.382984 65.759182) (xy 106.416594 65.822061) (xy 106.461825 65.877175) (xy 106.516939 65.922406) (xy 106.579818 65.956016) + (xy 106.648045 65.976713) (xy 106.719 65.983701) (xy 108.218221 65.983701) (xy 108.477051 66.242531) (xy 108.477051 68.382299) + (xy 106.846 68.382299) (xy 106.775045 68.389287) (xy 106.706818 68.409984) (xy 106.643939 68.443594) (xy 106.588825 68.488825) + (xy 106.543594 68.543939) (xy 106.509984 68.606818) (xy 106.489287 68.675045) (xy 106.482299 68.746) (xy 106.482299 70.446) + (xy 106.489287 70.516955) (xy 106.509984 70.585182) (xy 106.543594 70.648061) (xy 106.588825 70.703175) (xy 106.643939 70.748406) + (xy 106.706818 70.782016) (xy 106.775045 70.802713) (xy 106.846 70.809701) (xy 108.330819 70.809701) (xy 108.218221 70.922299) + (xy 106.846 70.922299) (xy 106.775045 70.929287) (xy 106.706818 70.949984) (xy 106.643939 70.983594) (xy 106.588825 71.028825) + (xy 106.543594 71.083939) (xy 106.509984 71.146818) (xy 106.489287 71.215045) (xy 106.482299 71.286) (xy 106.482299 72.986) + (xy 106.489287 73.056955) (xy 106.509984 73.125182) (xy 106.543594 73.188061) (xy 106.588825 73.243175) (xy 106.643939 73.288406) + (xy 106.706818 73.322016) (xy 106.775045 73.342713) (xy 106.846 73.349701) (xy 108.546 73.349701) (xy 108.616955 73.342713) + (xy 108.685182 73.322016) (xy 108.748061 73.288406) (xy 108.803175 73.243175) (xy 108.848406 73.188061) (xy 108.882016 73.125182) + (xy 108.902713 73.056955) (xy 108.909701 72.986) (xy 108.909701 71.613779) (xy 109.022299 71.501181) (xy 109.022299 72.986) + (xy 109.029287 73.056955) (xy 109.049984 73.125182) (xy 109.083594 73.188061) (xy 109.128825 73.243175) (xy 109.183939 73.288406) + (xy 109.246818 73.322016) (xy 109.315045 73.342713) (xy 109.386 73.349701) (xy 111.086 73.349701) (xy 111.156955 73.342713) + (xy 111.225182 73.322016) (xy 111.288061 73.288406) (xy 111.343175 73.243175) (xy 111.388406 73.188061) (xy 111.422016 73.125182) + (xy 111.442713 73.056955) (xy 111.449701 72.986) (xy 111.449701 71.613779) (xy 111.834764 71.228716) (xy 111.853412 71.213412) + (xy 111.868716 71.194764) (xy 111.86872 71.19476) (xy 111.914513 71.138961) (xy 111.943923 71.083939) (xy 111.959916 71.054018) + (xy 111.987875 70.961851) (xy 111.99495 70.890014) (xy 111.99495 70.890004) (xy 111.997314 70.866001) (xy 111.99495 70.841998) + (xy 111.99495 70.52284) (xy 112.099419 70.608575) (xy 112.309963 70.721113) (xy 112.538416 70.790414) (xy 112.716462 70.80795) + (xy 112.835538 70.80795) (xy 113.013584 70.790414) (xy 113.242037 70.721113) (xy 113.452581 70.608575) (xy 113.55705 70.52284) + (xy 113.55705 70.66347) (xy 113.217175 71.003345) (xy 113.013584 70.941586) (xy 112.835538 70.92405) (xy 112.716462 70.92405) + (xy 112.538416 70.941586) (xy 112.309963 71.010887) (xy 112.099419 71.123425) (xy 111.914875 71.274875) (xy 111.763425 71.459419) + (xy 111.650887 71.669963) (xy 111.581586 71.898416) (xy 111.558186 72.136) (xy 111.581586 72.373584) (xy 111.650887 72.602037) + (xy 111.763425 72.812581) (xy 111.914875 72.997125) (xy 112.099419 73.148575) (xy 112.309963 73.261113) (xy 112.538416 73.330414) + (xy 112.716462 73.34795) (xy 112.835538 73.34795) (xy 113.013584 73.330414) (xy 113.242037 73.261113) (xy 113.452581 73.148575) + (xy 113.637125 72.997125) (xy 113.788575 72.812581) (xy 113.901113 72.602037) (xy 113.970414 72.373584) (xy 113.993814 72.136) + (xy 113.970414 71.898416) (xy 113.908655 71.694825) (xy 114.374764 71.228716) (xy 114.393412 71.213412) (xy 114.408716 71.194764) + (xy 114.40872 71.19476) (xy 114.454513 71.138961) (xy 114.483923 71.083939) (xy 114.499916 71.054018) (xy 114.527875 70.961851) + (xy 114.53495 70.890014) (xy 114.53495 70.890004) (xy 114.537314 70.866001) (xy 114.53495 70.841998) (xy 114.53495 70.52284) + (xy 114.639419 70.608575) (xy 114.849963 70.721113) (xy 115.078416 70.790414) (xy 115.256462 70.80795) (xy 115.375538 70.80795) + (xy 115.553584 70.790414) (xy 115.782037 70.721113) (xy 115.992581 70.608575) (xy 116.09705 70.52284) (xy 116.09705 70.66347) + (xy 115.757175 71.003345) (xy 115.553584 70.941586) (xy 115.375538 70.92405) (xy 115.256462 70.92405) (xy 115.078416 70.941586) + (xy 114.849963 71.010887) (xy 114.639419 71.123425) (xy 114.454875 71.274875) (xy 114.303425 71.459419) (xy 114.190887 71.669963) + (xy 114.121586 71.898416) (xy 114.098186 72.136) (xy 114.121586 72.373584) (xy 114.190887 72.602037) (xy 114.303425 72.812581) + (xy 114.454875 72.997125) (xy 114.639419 73.148575) (xy 114.849963 73.261113) (xy 115.078416 73.330414) (xy 115.256462 73.34795) + (xy 115.375538 73.34795) (xy 115.553584 73.330414) (xy 115.782037 73.261113) (xy 115.992581 73.148575) (xy 116.177125 72.997125) + (xy 116.328575 72.812581) (xy 116.441113 72.602037) (xy 116.510414 72.373584) (xy 116.533814 72.136) (xy 116.510414 71.898416) + (xy 116.448655 71.694825) (xy 116.914764 71.228716) (xy 116.933412 71.213412) (xy 116.948716 71.194764) (xy 116.94872 71.19476) + (xy 116.994513 71.138961) (xy 117.023923 71.083939) (xy 117.039916 71.054018) (xy 117.067875 70.961851) (xy 117.07495 70.890014) + (xy 117.07495 70.890004) (xy 117.077314 70.866001) (xy 117.07495 70.841998) (xy 117.07495 70.52284) (xy 117.179419 70.608575) + (xy 117.389963 70.721113) (xy 117.618416 70.790414) (xy 117.796462 70.80795) (xy 117.915538 70.80795) (xy 118.093584 70.790414) + (xy 118.322037 70.721113) (xy 118.532581 70.608575) (xy 118.63705 70.52284) (xy 118.63705 70.66347) (xy 118.297175 71.003345) + (xy 118.093584 70.941586) (xy 117.915538 70.92405) (xy 117.796462 70.92405) (xy 117.618416 70.941586) (xy 117.389963 71.010887) + (xy 117.179419 71.123425) (xy 116.994875 71.274875) (xy 116.843425 71.459419) (xy 116.730887 71.669963) (xy 116.661586 71.898416) + (xy 116.638186 72.136) (xy 116.661586 72.373584) (xy 116.730887 72.602037) (xy 116.843425 72.812581) (xy 116.994875 72.997125) + (xy 117.179419 73.148575) (xy 117.389963 73.261113) (xy 117.618416 73.330414) (xy 117.796462 73.34795) (xy 117.915538 73.34795) + (xy 118.093584 73.330414) (xy 118.322037 73.261113) (xy 118.532581 73.148575) (xy 118.717125 72.997125) (xy 118.868575 72.812581) + (xy 118.981113 72.602037) (xy 119.050414 72.373584) (xy 119.073814 72.136) (xy 119.050414 71.898416) (xy 118.988655 71.694825) + (xy 119.454764 71.228716) (xy 119.473412 71.213412) (xy 119.488716 71.194764) (xy 119.48872 71.19476) (xy 119.534513 71.138961) + (xy 119.563923 71.083939) (xy 119.579916 71.054018) (xy 119.607875 70.961851) (xy 119.61495 70.890014) (xy 119.61495 70.890004) + (xy 119.617314 70.866001) (xy 119.61495 70.841998) (xy 119.61495 70.52284) (xy 119.719419 70.608575) (xy 119.929963 70.721113) + (xy 120.158416 70.790414) (xy 120.336462 70.80795) (xy 120.455538 70.80795) (xy 120.633584 70.790414) (xy 120.862037 70.721113) + (xy 121.072581 70.608575) (xy 121.17705 70.52284) (xy 121.17705 70.66347) (xy 120.837175 71.003345) (xy 120.633584 70.941586) + (xy 120.455538 70.92405) (xy 120.336462 70.92405) (xy 120.158416 70.941586) (xy 119.929963 71.010887) (xy 119.719419 71.123425) + (xy 119.534875 71.274875) (xy 119.383425 71.459419) (xy 119.270887 71.669963) (xy 119.201586 71.898416) (xy 119.178186 72.136) + (xy 119.201586 72.373584) (xy 119.270887 72.602037) (xy 119.383425 72.812581) (xy 119.534875 72.997125) (xy 119.719419 73.148575) + (xy 119.929963 73.261113) (xy 120.158416 73.330414) (xy 120.336462 73.34795) (xy 120.455538 73.34795) (xy 120.633584 73.330414) + (xy 120.862037 73.261113) (xy 121.072581 73.148575) (xy 121.257125 72.997125) (xy 121.408575 72.812581) (xy 121.521113 72.602037) + (xy 121.590414 72.373584) (xy 121.613814 72.136) (xy 121.590414 71.898416) (xy 121.528655 71.694825) (xy 121.994764 71.228716) + (xy 122.013412 71.213412) (xy 122.028716 71.194764) (xy 122.02872 71.19476) (xy 122.074513 71.138961) (xy 122.103923 71.083939) + (xy 122.119916 71.054018) (xy 122.147875 70.961851) (xy 122.15495 70.890014) (xy 122.15495 70.890004) (xy 122.157314 70.866001) + (xy 122.15495 70.841998) (xy 122.15495 70.52284) (xy 122.259419 70.608575) (xy 122.469963 70.721113) (xy 122.698416 70.790414) + (xy 122.876462 70.80795) (xy 122.995538 70.80795) (xy 123.173584 70.790414) (xy 123.402037 70.721113) (xy 123.612581 70.608575) + (xy 123.71705 70.52284) (xy 123.71705 70.66347) (xy 123.377175 71.003345) (xy 123.173584 70.941586) (xy 122.995538 70.92405) + (xy 122.876462 70.92405) (xy 122.698416 70.941586) (xy 122.469963 71.010887) (xy 122.259419 71.123425) (xy 122.074875 71.274875) + (xy 121.923425 71.459419) (xy 121.810887 71.669963) (xy 121.741586 71.898416) (xy 121.718186 72.136) (xy 121.741586 72.373584) + (xy 121.810887 72.602037) (xy 121.923425 72.812581) (xy 122.074875 72.997125) (xy 122.259419 73.148575) (xy 122.469963 73.261113) + (xy 122.698416 73.330414) (xy 122.876462 73.34795) (xy 122.995538 73.34795) (xy 123.173584 73.330414) (xy 123.402037 73.261113) + (xy 123.612581 73.148575) (xy 123.797125 72.997125) (xy 123.948575 72.812581) (xy 124.061113 72.602037) (xy 124.130414 72.373584) + (xy 124.153814 72.136) (xy 124.130414 71.898416) (xy 124.068655 71.694825) (xy 124.534764 71.228716) (xy 124.553412 71.213412) + (xy 124.568716 71.194764) (xy 124.56872 71.19476) (xy 124.614513 71.138961) (xy 124.643923 71.083939) (xy 124.659916 71.054018) + (xy 124.687875 70.961851) (xy 124.69495 70.890014) (xy 124.69495 70.890004) (xy 124.697314 70.866001) (xy 124.69495 70.841998) + (xy 124.69495 70.52284) (xy 124.799419 70.608575) (xy 125.009963 70.721113) (xy 125.238416 70.790414) (xy 125.416462 70.80795) + (xy 125.535538 70.80795) (xy 125.713584 70.790414) (xy 125.876051 70.74113) (xy 125.87605 70.99087) (xy 125.713584 70.941586) + (xy 125.535538 70.92405) (xy 125.416462 70.92405) (xy 125.238416 70.941586) (xy 125.009963 71.010887) (xy 124.799419 71.123425) + (xy 124.614875 71.274875) (xy 124.463425 71.459419) (xy 124.350887 71.669963) (xy 124.281586 71.898416) (xy 124.258186 72.136) + (xy 124.281586 72.373584) (xy 124.350887 72.602037) (xy 124.463425 72.812581) (xy 124.614875 72.997125) (xy 124.799419 73.148575) + (xy 125.009963 73.261113) (xy 125.238416 73.330414) (xy 125.416462 73.34795) (xy 125.535538 73.34795) (xy 125.713584 73.330414) + (xy 125.942037 73.261113) (xy 126.152581 73.148575) (xy 126.337125 72.997125) (xy 126.488575 72.812581) (xy 126.601113 72.602037) + (xy 126.670414 72.373584) (xy 126.693814 72.136) (xy 126.670414 71.898416) (xy 126.608655 71.694825) (xy 126.693764 71.609716) + (xy 126.712412 71.594412) (xy 126.727716 71.575764) (xy 126.72772 71.57576) (xy 126.773514 71.519961) (xy 126.808348 71.454789) + (xy 126.818916 71.435018) (xy 126.846875 71.342851) (xy 126.85395 71.271014) (xy 126.85395 71.271003) (xy 126.856314 71.247) + (xy 126.85395 71.222997) (xy 126.85395 70.731411) (xy 127.035765 70.549597) (xy 127.054413 70.534293) (xy 127.069717 70.515645) + (xy 127.069721 70.515641) (xy 127.115514 70.459842) (xy 127.131918 70.429152) (xy 127.154875 70.457125) (xy 127.339419 70.608575) + (xy 127.549963 70.721113) (xy 127.778416 70.790414) (xy 127.956462 70.80795) (xy 128.075538 70.80795) (xy 128.253584 70.790414) + (xy 128.482037 70.721113) (xy 128.692581 70.608575) (xy 128.758051 70.554846) (xy 128.758051 70.702469) (xy 128.457175 71.003345) + (xy 128.253584 70.941586) (xy 128.075538 70.92405) (xy 127.956462 70.92405) (xy 127.778416 70.941586) (xy 127.549963 71.010887) + (xy 127.339419 71.123425) (xy 127.154875 71.274875) (xy 127.003425 71.459419) (xy 126.890887 71.669963) (xy 126.821586 71.898416) + (xy 126.798186 72.136) (xy 126.821586 72.373584) (xy 126.890887 72.602037) (xy 127.003425 72.812581) (xy 127.154875 72.997125) + (xy 127.339419 73.148575) (xy 127.549963 73.261113) (xy 127.778416 73.330414) (xy 127.956462 73.34795) (xy 128.075538 73.34795) + (xy 128.253584 73.330414) (xy 128.482037 73.261113) (xy 128.692581 73.148575) (xy 128.877125 72.997125) (xy 129.028575 72.812581) + (xy 129.141113 72.602037) (xy 129.210414 72.373584) (xy 129.233814 72.136) (xy 129.210414 71.898416) (xy 129.148655 71.694825) + (xy 129.342299 71.501181) (xy 129.342299 72.986) (xy 129.349287 73.056955) (xy 129.369984 73.125182) (xy 129.403594 73.188061) + (xy 129.448825 73.243175) (xy 129.503939 73.288406) (xy 129.566818 73.322016) (xy 129.635045 73.342713) (xy 129.706 73.349701) + (xy 131.406 73.349701) (xy 131.476955 73.342713) (xy 131.545182 73.322016) (xy 131.608061 73.288406) (xy 131.663175 73.243175) + (xy 131.708406 73.188061) (xy 131.742016 73.125182) (xy 131.762713 73.056955) (xy 131.769701 72.986) (xy 131.769701 72.613674) + (xy 131.848018 72.589916) (xy 131.93296 72.544513) (xy 132.007412 72.483412) (xy 132.02272 72.464759) (xy 132.11576 72.371719) + (xy 132.134413 72.356411) (xy 132.195514 72.281959) (xy 132.240917 72.197017) (xy 132.268876 72.10485) (xy 132.275951 72.033013) + (xy 132.275951 72.03301) (xy 132.278316 72.008999) (xy 132.275951 71.984988) (xy 132.275951 64.921012) (xy 132.278316 64.897001) + (xy 132.275248 64.86585) (xy 132.268876 64.80115) (xy 132.259427 64.77) (xy 132.268876 64.73885) (xy 132.275951 64.667013) + (xy 132.275951 64.66701) (xy 132.278316 64.642999) (xy 132.275951 64.618988) (xy 132.275951 60.426828) (xy 133.864201 58.838579) + (xy 133.901956 58.854218) (xy 134.116783 58.89695) (xy 134.335817 58.89695) (xy 134.550644 58.854218) (xy 134.59005 58.837896) + (xy 132.847859 60.580087) (xy 132.82435 60.59938) (xy 132.759654 60.678214) (xy 132.747378 60.693172) (xy 132.690183 60.800176) + (xy 132.654962 60.916284) (xy 132.643069 61.03703) (xy 132.64605 61.067295) (xy 132.646049 64.583825) (xy 132.643069 64.61408) + (xy 132.648283 64.667012) (xy 132.654962 64.734826) (xy 132.690182 64.850933) (xy 132.747378 64.957938) (xy 132.824349 65.05173) + (xy 132.847862 65.071027) (xy 132.960975 65.18414) (xy 132.980269 65.20765) (xy 133.07406 65.284621) (xy 133.178481 65.340436) + (xy 132.68186 65.837057) (xy 132.658351 65.85635) (xy 132.598672 65.92907) (xy 132.581379 65.950142) (xy 132.524184 66.057146) + (xy 132.488963 66.173254) (xy 132.47707 66.294) (xy 132.480051 66.324265) (xy 132.48005 70.835745) (xy 132.47707 70.866) + (xy 132.482615 70.922299) (xy 132.488963 70.986746) (xy 132.524183 71.102853) (xy 132.581379 71.209858) (xy 132.65835 71.30365) + (xy 132.681864 71.322947) (xy 133.4105 72.051584) (xy 133.402186 72.136) (xy 133.425586 72.373584) (xy 133.494887 72.602037) + (xy 133.607425 72.812581) (xy 133.758875 72.997125) (xy 133.943419 73.148575) (xy 134.153963 73.261113) (xy 134.382416 73.330414) + (xy 134.560462 73.34795) (xy 134.679538 73.34795) (xy 134.857584 73.330414) (xy 135.086037 73.261113) (xy 135.296581 73.148575) + (xy 135.481125 72.997125) (xy 135.632575 72.812581) (xy 135.745113 72.602037) (xy 135.814414 72.373584) (xy 135.837814 72.136) + (xy 135.814414 71.898416) (xy 135.745113 71.669963) (xy 135.655815 71.502899) (xy 135.985543 71.832627) (xy 135.965586 71.898416) + (xy 135.942186 72.136) (xy 135.965586 72.373584) (xy 136.034887 72.602037) (xy 136.147425 72.812581) (xy 136.298875 72.997125) + (xy 136.483419 73.148575) (xy 136.693963 73.261113) (xy 136.922416 73.330414) (xy 137.100462 73.34795) (xy 137.219538 73.34795) + (xy 137.397584 73.330414) (xy 137.626037 73.261113) (xy 137.836581 73.148575) (xy 138.021125 72.997125) (xy 138.172575 72.812581) + (xy 138.285113 72.602037) (xy 138.354414 72.373584) (xy 138.377814 72.136) (xy 138.354414 71.898416) (xy 138.285113 71.669963) + (xy 138.172575 71.459419) (xy 138.021125 71.274875) (xy 137.836581 71.123425) (xy 137.626037 71.010887) (xy 137.397584 70.941586) + (xy 137.219538 70.92405) (xy 137.100462 70.92405) (xy 136.922416 70.941586) (xy 136.856627 70.961543) (xy 136.417949 70.522866) + (xy 136.417949 70.427846) (xy 136.483419 70.481575) (xy 136.693963 70.594113) (xy 136.922416 70.663414) (xy 137.100462 70.68095) + (xy 137.219538 70.68095) (xy 137.397584 70.663414) (xy 137.626037 70.594113) (xy 137.836581 70.481575) (xy 138.021125 70.330125) + (xy 138.172575 70.145581) (xy 138.285113 69.935037) (xy 138.354414 69.706584) (xy 138.377814 69.469) (xy 138.354414 69.231416) + (xy 138.285113 69.002963) (xy 138.172575 68.792419) (xy 138.021125 68.607875) (xy 137.836581 68.456425) (xy 137.626037 68.343887) + (xy 137.397584 68.274586) (xy 137.219538 68.25705) (xy 137.100462 68.25705) (xy 136.922416 68.274586) (xy 136.693963 68.343887) + (xy 136.483419 68.456425) (xy 136.417949 68.510154) (xy 136.417949 68.359139) (xy 136.44362 68.327858) (xy 136.500816 68.220853) + (xy 136.536036 68.104746) (xy 136.544949 68.014254) (xy 136.544949 66.256134) (xy 136.766936 66.034148) (xy 136.76694 66.034143) + (xy 136.856626 65.944457) (xy 136.922416 65.964414) (xy 137.100462 65.98195) (xy 137.219538 65.98195) (xy 137.397584 65.964414) + (xy 137.626037 65.895113) (xy 137.836581 65.782575) (xy 138.021125 65.631125) (xy 138.172575 65.446581) (xy 138.285113 65.236037) + (xy 138.354414 65.007584) (xy 138.377814 64.77) (xy 138.354414 64.532416) (xy 138.334457 64.466627) (xy 138.486299 64.314785) + (xy 138.486299 65.62) (xy 138.493287 65.690955) (xy 138.513984 65.759182) (xy 138.547594 65.822061) (xy 138.592825 65.877175) + (xy 138.647939 65.922406) (xy 138.710818 65.956016) (xy 138.779045 65.976713) (xy 138.85 65.983701) (xy 140.042617 65.983701) + (xy 140.442052 66.383137) (xy 140.442052 68.255299) (xy 138.85 68.255299) (xy 138.779045 68.262287) (xy 138.710818 68.282984) + (xy 138.647939 68.316594) (xy 138.592825 68.361825) (xy 138.547594 68.416939) (xy 138.513984 68.479818) (xy 138.493287 68.548045) + (xy 138.486299 68.619) (xy 138.486299 70.319) (xy 138.493287 70.389955) (xy 138.513984 70.458182) (xy 138.547594 70.521061) + (xy 138.592825 70.576175) (xy 138.647939 70.621406) (xy 138.710818 70.655016) (xy 138.779045 70.675713) (xy 138.85 70.682701) + (xy 140.442051 70.682701) (xy 140.442051 70.922299) (xy 138.85 70.922299) (xy 138.779045 70.929287) (xy 138.710818 70.949984) + (xy 138.647939 70.983594) (xy 138.592825 71.028825) (xy 138.547594 71.083939) (xy 138.513984 71.146818) (xy 138.493287 71.215045) + (xy 138.486299 71.286) (xy 138.486299 72.986) (xy 138.493287 73.056955) (xy 138.513984 73.125182) (xy 138.547594 73.188061) + (xy 138.592825 73.243175) (xy 138.647939 73.288406) (xy 138.710818 73.322016) (xy 138.779045 73.342713) (xy 138.85 73.349701) + (xy 140.55 73.349701) (xy 140.620955 73.342713) (xy 140.689182 73.322016) (xy 140.752061 73.288406) (xy 140.807175 73.243175) + (xy 140.852406 73.188061) (xy 140.886016 73.125182) (xy 140.906713 73.056955) (xy 140.913701 72.986) (xy 140.913701 72.751948) + (xy 141.027736 72.751948) (xy 141.058001 72.754929) (xy 141.178747 72.743036) (xy 141.294854 72.707816) (xy 141.401859 72.65062) + (xy 141.495651 72.573649) (xy 141.572622 72.479858) (xy 141.629818 72.372853) (xy 141.665038 72.256746) (xy 141.673951 72.166254) + (xy 141.673951 72.166246) (xy 141.67693 72.135999) (xy 141.673951 72.105754) (xy 141.673951 71.462) (xy 144.96207 71.462) + (xy 144.973963 71.582747) (xy 145.009183 71.698854) (xy 145.066379 71.805859) (xy 145.14335 71.89965) (xy 145.237141 71.976621) + (xy 145.344146 72.033817) (xy 145.460253 72.069037) (xy 145.581 72.08093) (xy 146.130963 72.07795) (xy 146.28495 71.923963) + (xy 146.28495 70.75805) (xy 146.57705 70.75805) (xy 146.57705 71.923963) (xy 146.731037 72.07795) (xy 147.281 72.08093) + (xy 147.401747 72.069037) (xy 147.517854 72.033817) (xy 147.624859 71.976621) (xy 147.71865 71.89965) (xy 147.795621 71.805859) + (xy 147.852817 71.698854) (xy 147.888037 71.582747) (xy 147.89993 71.462) (xy 147.89695 70.912037) (xy 147.742963 70.75805) + (xy 146.57705 70.75805) (xy 146.28495 70.75805) (xy 145.119037 70.75805) (xy 144.96505 70.912037) (xy 144.96207 71.462) + (xy 141.673951 71.462) (xy 141.673951 69.762) (xy 144.96207 69.762) (xy 144.96505 70.311963) (xy 145.119037 70.46595) + (xy 146.28495 70.46595) (xy 146.28495 69.300037) (xy 146.57705 69.300037) (xy 146.57705 70.46595) (xy 147.742963 70.46595) + (xy 147.89695 70.311963) (xy 147.89993 69.762) (xy 147.888037 69.641253) (xy 147.852817 69.525146) (xy 147.795621 69.418141) + (xy 147.71865 69.32435) (xy 147.624859 69.247379) (xy 147.517854 69.190183) (xy 147.401747 69.154963) (xy 147.281 69.14307) + (xy 146.731037 69.14605) (xy 146.57705 69.300037) (xy 146.28495 69.300037) (xy 146.130963 69.14605) (xy 145.581 69.14307) + (xy 145.460253 69.154963) (xy 145.344146 69.190183) (xy 145.237141 69.247379) (xy 145.14335 69.32435) (xy 145.066379 69.418141) + (xy 145.009183 69.525146) (xy 144.973963 69.641253) (xy 144.96207 69.762) (xy 141.673951 69.762) (xy 141.673951 66.158253) + (xy 141.676931 66.128) (xy 141.671901 66.076934) (xy 141.665038 66.007254) (xy 141.629818 65.891147) (xy 141.572622 65.784142) + (xy 141.495651 65.690351) (xy 141.472147 65.671062) (xy 141.178178 65.377093) (xy 141.178747 65.377037) (xy 141.294854 65.341817) + (xy 141.401859 65.284621) (xy 141.49565 65.20765) (xy 141.514948 65.184135) (xy 144.704866 61.994217) (xy 146.19605 61.994217) + (xy 146.19605 62.465783) (xy 146.288048 62.928289) (xy 146.468509 63.36396) (xy 146.730498 63.756054) (xy 147.063946 64.089502) + (xy 147.45604 64.351491) (xy 147.891711 64.531952) (xy 148.354217 64.62395) (xy 148.825783 64.62395) (xy 149.288289 64.531952) + (xy 149.72396 64.351491) (xy 150.116054 64.089502) (xy 150.449502 63.756054) (xy 150.711491 63.36396) (xy 150.891952 62.928289) + (xy 150.98395 62.465783) (xy 150.98395 61.994217) (xy 150.891952 61.531711) (xy 150.711491 61.09604) (xy 150.449502 60.703946) + (xy 150.116054 60.370498) (xy 149.72396 60.108509) (xy 149.288289 59.928048) (xy 148.825783 59.83605) (xy 148.354217 59.83605) + (xy 147.891711 59.928048) (xy 147.45604 60.108509) (xy 147.063946 60.370498) (xy 146.730498 60.703946) (xy 146.468509 61.09604) + (xy 146.288048 61.531711) (xy 146.19605 61.994217) (xy 144.704866 61.994217) (xy 144.742027 61.957057) (xy 144.76553 61.93777) + (xy 144.842501 61.843979) (xy 144.885271 61.763963) (xy 144.899697 61.736975) (xy 144.934917 61.620867) (xy 144.94681 61.50012) + (xy 144.94383 61.469865) (xy 144.94383 58.710766) (xy 145.036707 58.648708) (xy 145.191588 58.493827) (xy 145.313277 58.311706) + (xy 145.397098 58.109344) (xy 145.43983 57.894517) (xy 145.43983 57.675483) (xy 145.397098 57.460656) (xy 145.313277 57.258294) + (xy 145.191588 57.076173) (xy 145.036707 56.921292) (xy 144.854586 56.799603) (xy 144.652224 56.715782) (xy 144.437397 56.67305) + (xy 144.218363 56.67305) (xy 144.003536 56.715782) (xy 143.801174 56.799603) (xy 143.619053 56.921292) (xy 143.464172 57.076173) + (xy 143.342483 57.258294) (xy 143.258662 57.460656) (xy 143.21593 57.675483) (xy 143.21593 57.894517) (xy 143.258662 58.109344) + (xy 143.342483 58.311706) (xy 143.464172 58.493827) (xy 143.619053 58.648708) (xy 143.711931 58.710767) (xy 143.71193 61.244985) + (xy 140.913701 64.043216) (xy 140.913701 63.92) (xy 140.906713 63.849045) (xy 140.886016 63.780818) (xy 140.852406 63.717939) + (xy 140.807175 63.662825) (xy 140.752061 63.617594) (xy 140.689182 63.583984) (xy 140.620955 63.563287) (xy 140.55 63.556299) + (xy 139.078542 63.556299) (xy 139.087929 63.461002) (xy 139.086225 63.443701) (xy 140.55 63.443701) (xy 140.620955 63.436713) + (xy 140.689182 63.416016) (xy 140.752061 63.382406) (xy 140.807175 63.337175) (xy 140.852406 63.282061) (xy 140.886016 63.219182) + (xy 140.906713 63.150955) (xy 140.913701 63.08) (xy 140.913701 61.38) (xy 140.906713 61.309045) (xy 140.886016 61.240818) + (xy 140.852406 61.177939) (xy 140.807175 61.122825) (xy 140.752061 61.077594) (xy 140.689182 61.043984) (xy 140.620955 61.023287) + (xy 140.55 61.016299) (xy 138.957949 61.016299) (xy 138.957949 60.525894) (xy 140.608686 58.875158) (xy 140.718243 58.89695) + (xy 140.937277 58.89695) (xy 141.152104 58.854218) (xy 141.354466 58.770397) (xy 141.536587 58.648708) (xy 141.691468 58.493827) + (xy 141.813157 58.311706) (xy 141.896978 58.109344) (xy 141.93971 57.894517) (xy 141.93971 57.675483) (xy 141.896978 57.460656) + (xy 141.813157 57.258294) (xy 141.691468 57.076173) (xy 141.536587 56.921292) (xy 141.354466 56.799603) (xy 141.152104 56.715782) + (xy 140.937277 56.67305) (xy 140.718243 56.67305) (xy 140.503416 56.715782) (xy 140.301054 56.799603) (xy 140.118933 56.921292) + (xy 139.964052 57.076173) (xy 139.842363 57.258294) (xy 139.758542 57.460656) (xy 139.71581 57.675483) (xy 139.71581 57.894517) + (xy 139.737602 58.004074) (xy 138.012064 59.729613) (xy 137.954378 59.799903) (xy 137.897183 59.906907) (xy 137.861962 60.023015) + (xy 137.850069 60.143761) (xy 137.861962 60.264507) (xy 137.897183 60.380615) (xy 137.954378 60.487619) (xy 137.98005 60.5189) + (xy 137.98005 61.335166) (xy 137.836581 61.217425) (xy 137.626037 61.104887) (xy 137.397584 61.035586) (xy 137.219538 61.01805) + (xy 137.100462 61.01805) (xy 136.922416 61.035586) (xy 136.693963 61.104887) (xy 136.483419 61.217425) (xy 136.298875 61.368875) + (xy 136.147425 61.553419) (xy 136.034887 61.763963) (xy 135.965586 61.992416) (xy 135.942186 62.23) (xy 135.965586 62.467584) + (xy 136.034887 62.696037) (xy 136.147425 62.906581) (xy 136.298875 63.091125) (xy 136.483419 63.242575) (xy 136.693963 63.355113) + (xy 136.922416 63.424414) (xy 137.100462 63.44195) (xy 137.219538 63.44195) (xy 137.397584 63.424414) (xy 137.626037 63.355113) + (xy 137.793099 63.265817) (xy 137.463373 63.595543) (xy 137.397584 63.575586) (xy 137.219538 63.55805) (xy 137.100462 63.55805) + (xy 136.922416 63.575586) (xy 136.693963 63.644887) (xy 136.483419 63.757425) (xy 136.298875 63.908875) (xy 136.147425 64.093419) + (xy 136.034887 64.303963) (xy 135.965586 64.532416) (xy 135.942186 64.77) (xy 135.965586 65.007584) (xy 135.985543 65.073374) + (xy 135.895857 65.16306) (xy 135.895852 65.163064) (xy 135.655815 65.403101) (xy 135.745113 65.236037) (xy 135.814414 65.007584) + (xy 135.837814 64.77) (xy 135.814414 64.532416) (xy 135.745113 64.303963) (xy 135.632575 64.093419) (xy 135.481125 63.908875) + (xy 135.296581 63.757425) (xy 135.086037 63.644887) (xy 134.857584 63.575586) (xy 134.679538 63.55805) (xy 134.560462 63.55805) + (xy 134.382416 63.575586) (xy 134.153963 63.644887) (xy 133.943419 63.757425) (xy 133.877949 63.811154) (xy 133.877949 63.188846) + (xy 133.943419 63.242575) (xy 134.153963 63.355113) (xy 134.382416 63.424414) (xy 134.560462 63.44195) (xy 134.679538 63.44195) + (xy 134.857584 63.424414) (xy 135.086037 63.355113) (xy 135.296581 63.242575) (xy 135.481125 63.091125) (xy 135.632575 62.906581) + (xy 135.745113 62.696037) (xy 135.814414 62.467584) (xy 135.837814 62.23) (xy 135.814414 61.992416) (xy 135.745113 61.763963) + (xy 135.632575 61.553419) (xy 135.481125 61.368875) (xy 135.296581 61.217425) (xy 135.086037 61.104887) (xy 134.857584 61.035586) + (xy 134.679538 61.01805) (xy 134.560462 61.01805) (xy 134.382416 61.035586) (xy 134.153963 61.104887) (xy 133.963329 61.206783) + (xy 136.570109 58.600004) (xy 136.618813 58.648708) (xy 136.800934 58.770397) (xy 137.003296 58.854218) (xy 137.218123 58.89695) + (xy 137.437157 58.89695) (xy 137.651984 58.854218) (xy 137.854346 58.770397) (xy 138.036467 58.648708) (xy 138.191348 58.493827) + (xy 138.313037 58.311706) (xy 138.396858 58.109344) (xy 138.43959 57.894517) (xy 138.43959 57.675483) (xy 138.396858 57.460656) + (xy 138.313037 57.258294) (xy 138.191348 57.076173) (xy 138.036467 56.921292) (xy 137.854346 56.799603) (xy 137.651984 56.715782) + (xy 137.437157 56.67305) (xy 137.218123 56.67305) (xy 137.003296 56.715782) (xy 136.800934 56.799603) (xy 136.618813 56.921292) + (xy 136.463932 57.076173) (xy 136.396104 57.177685) (xy 136.393282 57.177963) (xy 136.277175 57.213183) (xy 136.17017 57.270379) + (xy 136.076379 57.34735) (xy 136.057086 57.370859) (xy 135.279196 58.14875) (xy 135.295518 58.109344) (xy 135.33825 57.894517) + (xy 135.33825 57.675483) (xy 135.295518 57.460656) (xy 135.211697 57.258294) (xy 135.090008 57.076173) (xy 134.935127 56.921292) + (xy 134.753006 56.799603) (xy 134.550644 56.715782) (xy 134.335817 56.67305) (xy 134.116783 56.67305) (xy 133.901956 56.715782) + (xy 133.699594 56.799603) (xy 133.517473 56.921292) (xy 133.362592 57.076173) (xy 133.240903 57.258294) (xy 133.157082 57.460656) + (xy 133.11435 57.675483) (xy 133.11435 57.894517) (xy 133.157082 58.109344) (xy 133.172721 58.147099) (xy 131.458238 59.861583) + (xy 131.43959 59.876887) (xy 131.424286 59.895535) (xy 131.424281 59.89554) (xy 131.378488 59.951339) (xy 131.340177 60.023015) + (xy 131.333086 60.036281) (xy 131.307767 60.119747) (xy 131.305127 60.128449) (xy 131.295687 60.224299) (xy 131.298052 60.248312) + (xy 131.298052 61.016299) (xy 129.735951 61.016299) (xy 129.735951 59.967088) (xy 130.864461 58.838579) (xy 130.902216 58.854218) + (xy 131.117043 58.89695) (xy 131.336077 58.89695) (xy 131.550904 58.854218) (xy 131.753266 58.770397) (xy 131.935387 58.648708) + (xy 132.090268 58.493827) (xy 132.211957 58.311706) (xy 132.295778 58.109344) (xy 132.33851 57.894517) (xy 132.33851 57.675483) + (xy 132.295778 57.460656) (xy 132.211957 57.258294) (xy 132.090268 57.076173) (xy 131.935387 56.921292) (xy 131.753266 56.799603) + (xy 131.550904 56.715782) (xy 131.336077 56.67305) (xy 131.117043 56.67305) (xy 130.902216 56.715782) (xy 130.699854 56.799603) + (xy 130.517733 56.921292) (xy 130.362852 57.076173) (xy 130.241163 57.258294) (xy 130.157342 57.460656) (xy 130.11461 57.675483) + (xy 130.11461 57.894517) (xy 130.157342 58.109344) (xy 130.172981 58.147099) (xy 128.918238 59.401843) (xy 128.89959 59.417147) + (xy 128.884286 59.435795) (xy 128.884281 59.4358) (xy 128.838488 59.491599) (xy 128.814609 59.536274) (xy 128.793086 59.576541) + (xy 128.765127 59.668708) (xy 128.758052 59.740545) (xy 128.755687 59.764559) (xy 128.758052 59.788572) (xy 128.758052 61.271155) + (xy 128.692581 61.217425) (xy 128.482037 61.104887) (xy 128.253584 61.035586) (xy 128.075538 61.01805) (xy 127.956462 61.01805) + (xy 127.778416 61.035586) (xy 127.549963 61.104887) (xy 127.339419 61.217425) (xy 127.273949 61.271154) (xy 127.273949 59.42935) + (xy 127.864721 58.838579) (xy 127.902476 58.854218) (xy 128.117303 58.89695) (xy 128.336337 58.89695) (xy 128.551164 58.854218) + (xy 128.753526 58.770397) (xy 128.935647 58.648708) (xy 129.090528 58.493827) (xy 129.212217 58.311706) (xy 129.296038 58.109344) + (xy 129.33877 57.894517) (xy 129.33877 57.675483) (xy 129.296038 57.460656) (xy 129.212217 57.258294) (xy 129.090528 57.076173) + (xy 128.935647 56.921292) (xy 128.753526 56.799603) (xy 128.551164 56.715782) (xy 128.336337 56.67305) (xy 128.117303 56.67305) + (xy 127.902476 56.715782) (xy 127.700114 56.799603) (xy 127.517993 56.921292) (xy 127.363112 57.076173) (xy 127.241423 57.258294) + (xy 127.157602 57.460656) (xy 127.11487 57.675483) (xy 127.11487 57.894517) (xy 127.157602 58.109344) (xy 127.173241 58.147099) + (xy 126.456236 58.864105) (xy 126.437588 58.879409) (xy 126.422284 58.898057) (xy 126.422279 58.898062) (xy 126.376486 58.953861) + (xy 126.341832 59.018695) (xy 126.331084 59.038803) (xy 126.307347 59.117054) (xy 126.303125 59.130971) (xy 126.293685 59.226821) + (xy 126.29605 59.250834) (xy 126.29605 61.335166) (xy 126.152581 61.217425) (xy 125.942037 61.104887) (xy 125.713584 61.035586) + (xy 125.535538 61.01805) (xy 125.416462 61.01805) (xy 125.238416 61.035586) (xy 125.009963 61.104887) (xy 124.799419 61.217425) + (xy 124.733949 61.271154) (xy 124.733949 58.96961) (xy 124.86498 58.838579) (xy 124.902736 58.854218) (xy 125.117563 58.89695) + (xy 125.336597 58.89695) (xy 125.551424 58.854218) (xy 125.753786 58.770397) (xy 125.935907 58.648708) (xy 126.090788 58.493827) + (xy 126.212477 58.311706) (xy 126.296298 58.109344) (xy 126.33903 57.894517) (xy 126.33903 57.675483) (xy 126.296298 57.460656) + (xy 126.212477 57.258294) (xy 126.090788 57.076173) (xy 125.935907 56.921292) (xy 125.753786 56.799603) (xy 125.551424 56.715782) + (xy 125.336597 56.67305) (xy 125.117563 56.67305) (xy 124.902736 56.715782) (xy 124.700374 56.799603) (xy 124.518253 56.921292) + (xy 124.363372 57.076173) (xy 124.241683 57.258294) (xy 124.157862 57.460656) (xy 124.11513 57.675483) (xy 124.11513 57.894517) + (xy 124.157862 58.109344) (xy 124.173501 58.1471) (xy 123.916236 58.404365) (xy 123.897588 58.419669) (xy 123.882284 58.438317) + (xy 123.882279 58.438322) (xy 123.836486 58.494121) (xy 123.798719 58.564779) (xy 123.791084 58.579063) (xy 123.763125 58.67123) + (xy 123.757066 58.732751) (xy 123.753685 58.767081) (xy 123.75605 58.791094) (xy 123.756049 61.335165) (xy 123.612581 61.217425) + (xy 123.402037 61.104887) (xy 123.173584 61.035586) (xy 122.995538 61.01805) (xy 122.876462 61.01805) (xy 122.698416 61.035586) + (xy 122.469963 61.104887) (xy 122.259419 61.217425) (xy 122.115951 61.335165) (xy 122.115951 58.896578) (xy 122.117823 58.89695) + (xy 122.336857 58.89695) (xy 122.551684 58.854218) (xy 122.754046 58.770397) (xy 122.936167 58.648708) (xy 123.091048 58.493827) + (xy 123.212737 58.311706) (xy 123.296558 58.109344) (xy 123.33929 57.894517) (xy 123.33929 57.675483) (xy 123.296558 57.460656) + (xy 123.212737 57.258294) (xy 123.091048 57.076173) (xy 122.936167 56.921292) (xy 122.754046 56.799603) (xy 122.551684 56.715782) + (xy 122.336857 56.67305) (xy 122.117823 56.67305) (xy 121.902996 56.715782) (xy 121.700634 56.799603) (xy 121.518513 56.921292) + (xy 121.363632 57.076173) (xy 121.241943 57.258294) (xy 121.158122 57.460656) (xy 121.11539 57.675483) (xy 121.11539 57.894517) + (xy 121.158122 58.109344) (xy 121.185186 58.174683) (xy 121.173086 58.197321) (xy 121.145127 58.289488) (xy 121.140896 58.332453) + (xy 121.135687 58.385339) (xy 121.138052 58.409352) (xy 121.138051 61.271155) (xy 121.072581 61.217425) (xy 120.862037 61.104887) + (xy 120.633584 61.035586) (xy 120.455538 61.01805) (xy 120.336462 61.01805) (xy 120.158416 61.035586) (xy 119.929963 61.104887) + (xy 119.719419 61.217425) (xy 119.653949 61.271154) (xy 119.653949 58.838203) (xy 119.671961 58.804506) (xy 119.754306 58.770397) + (xy 119.936427 58.648708) (xy 120.091308 58.493827) (xy 120.212997 58.311706) (xy 120.296818 58.109344) (xy 120.33955 57.894517) + (xy 120.33955 57.675483) (xy 120.296818 57.460656) (xy 120.212997 57.258294) (xy 120.091308 57.076173) (xy 119.936427 56.921292) + (xy 119.754306 56.799603) (xy 119.551944 56.715782) (xy 119.337117 56.67305) (xy 119.118083 56.67305) (xy 118.903256 56.715782) + (xy 118.700894 56.799603) (xy 118.518773 56.921292) (xy 118.363892 57.076173) (xy 118.242203 57.258294) (xy 118.158382 57.460656) + (xy 118.11565 57.675483) (xy 118.11565 57.894517) (xy 118.158382 58.109344) (xy 118.242203 58.311706) (xy 118.363892 58.493827) + (xy 118.518773 58.648708) (xy 118.67605 58.753797) (xy 118.676049 61.335165) (xy 118.532581 61.217425) (xy 118.322037 61.104887) + (xy 118.093584 61.035586) (xy 117.915538 61.01805) (xy 117.796462 61.01805) (xy 117.618416 61.035586) (xy 117.389963 61.104887) + (xy 117.179419 61.217425) (xy 117.113949 61.271154) (xy 117.113949 59.01975) (xy 117.116313 58.995749) (xy 117.113949 58.971748) + (xy 117.113949 58.971736) (xy 117.106874 58.899899) (xy 117.078915 58.807732) (xy 117.045355 58.744946) (xy 117.033512 58.722789) + (xy 116.987719 58.66699) (xy 116.987715 58.666986) (xy 116.972411 58.648338) (xy 116.953763 58.633034) (xy 116.953062 58.632333) + (xy 117.091568 58.493827) (xy 117.213257 58.311706) (xy 117.297078 58.109344) (xy 117.33981 57.894517) (xy 117.33981 57.675483) + (xy 117.297078 57.460656) (xy 117.213257 57.258294) (xy 117.091568 57.076173) (xy 116.936687 56.921292) (xy 116.754566 56.799603) + (xy 116.552204 56.715782) (xy 116.337377 56.67305) (xy 116.118343 56.67305) (xy 115.903516 56.715782) (xy 115.701154 56.799603) + (xy 115.519033 56.921292) (xy 115.364152 57.076173) (xy 115.242463 57.258294) (xy 115.158642 57.460656) (xy 115.11591 57.675483) + (xy 115.11591 57.894517) (xy 115.158642 58.109344) (xy 115.242463 58.311706) (xy 115.364152 58.493827) (xy 115.519033 58.648708) + (xy 115.701154 58.770397) (xy 115.7835 58.804506) (xy 115.819347 58.871571) (xy 115.880448 58.946023) (xy 115.899101 58.961331) + (xy 116.13605 59.198281) (xy 116.136049 61.335165) (xy 115.992581 61.217425) (xy 115.782037 61.104887) (xy 115.553584 61.035586) + (xy 115.375538 61.01805) (xy 115.256462 61.01805) (xy 115.078416 61.035586) (xy 114.849963 61.104887) (xy 114.639419 61.217425) + (xy 114.495951 61.335165) (xy 114.495951 58.587881) (xy 114.498315 58.56388) (xy 114.495951 58.539879) (xy 114.495951 58.539867) + (xy 114.488876 58.46803) (xy 114.460917 58.375863) (xy 114.415514 58.290921) (xy 114.354413 58.216469) (xy 114.33576 58.201161) + (xy 114.281699 58.1471) (xy 114.297338 58.109344) (xy 114.34007 57.894517) (xy 114.34007 57.675483) (xy 114.297338 57.460656) + (xy 114.213517 57.258294) (xy 114.091828 57.076173) (xy 113.936947 56.921292) (xy 113.754826 56.799603) (xy 113.552464 56.715782) + (xy 113.337637 56.67305) (xy 113.118603 56.67305) (xy 112.903776 56.715782) (xy 112.701414 56.799603) (xy 112.519293 56.921292) + (xy 112.364412 57.076173) (xy 112.242723 57.258294) (xy 112.158902 57.460656) (xy 112.11617 57.675483) (xy 112.11617 57.894517) + (xy 112.158902 58.109344) (xy 112.242723 58.311706) (xy 112.364412 58.493827) (xy 112.519293 58.648708) (xy 112.701414 58.770397) + (xy 112.903776 58.854218) (xy 113.118603 58.89695) (xy 113.337637 58.89695) (xy 113.518052 58.861063) (xy 113.518051 61.271155) + (xy 113.452581 61.217425) (xy 113.242037 61.104887) (xy 113.013584 61.035586) (xy 112.835538 61.01805) (xy 112.716462 61.01805) + (xy 112.538416 61.035586) (xy 112.309963 61.104887) (xy 112.099419 61.217425) (xy 111.955951 61.335165) (xy 111.955951 59.151763) + (xy 111.958315 59.12776) (xy 111.955951 59.103757) (xy 111.955951 59.103747) (xy 111.948876 59.03191) (xy 111.920917 58.939743) + (xy 111.895244 58.891713) (xy 111.875514 58.8548) (xy 111.829721 58.799001) (xy 111.829717 58.798997) (xy 111.814413 58.780349) + (xy 111.795765 58.765045) (xy 111.177819 58.1471) (xy 111.193458 58.109344) (xy 111.23619 57.894517) (xy 111.23619 57.675483) + (xy 111.193458 57.460656) (xy 111.109637 57.258294) (xy 110.987948 57.076173) (xy 110.833067 56.921292) (xy 110.650946 56.799603) + (xy 110.448584 56.715782) (xy 110.233757 56.67305) (xy 110.014723 56.67305) (xy 109.799896 56.715782) (xy 109.597534 56.799603) + (xy 109.415413 56.921292) (xy 109.260532 57.076173) (xy 109.138843 57.258294) (xy 109.055022 57.460656) (xy 109.01229 57.675483) + (xy 109.01229 57.894517) (xy 109.055022 58.109344) (xy 109.138843 58.311706) (xy 109.260532 58.493827) (xy 109.415413 58.648708) + (xy 109.597534 58.770397) (xy 109.799896 58.854218) (xy 110.014723 58.89695) (xy 110.233757 58.89695) (xy 110.448584 58.854218) + (xy 110.48634 58.838579) (xy 110.978052 59.330292) (xy 110.978052 61.016299) (xy 109.415951 61.016299) (xy 109.415951 60.111884) + (xy 109.418315 60.087881) (xy 109.415951 60.063878) (xy 109.415951 60.063867) (xy 109.408876 59.99203) (xy 109.380917 59.899863) + (xy 109.380917 59.899862) (xy 109.335515 59.81492) (xy 109.289721 59.759121) (xy 109.289717 59.759117) (xy 109.274413 59.740469) + (xy 109.255765 59.725165) (xy 107.737821 58.207222) (xy 107.737821 57.035) (xy 107.730833 56.964045) (xy 107.710136 56.895818) + (xy 107.676526 56.832939) (xy 107.631295 56.777825) (xy 107.576181 56.732594) (xy 107.513302 56.698984) (xy 107.445075 56.678287) + (xy 107.37412 56.671299) (xy 105.87412 56.671299) (xy 105.803165 56.678287) (xy 105.734938 56.698984) (xy 105.672059 56.732594) + (xy 105.616945 56.777825) (xy 105.571714 56.832939) (xy 105.538104 56.895818) (xy 105.517407 56.964045) (xy 105.510419 57.035) + (xy 104.234832 57.035) (xy 104.317859 56.990621) (xy 104.41165 56.91365) (xy 104.488621 56.819859) (xy 104.545817 56.712854) + (xy 104.581037 56.596747) (xy 104.59293 56.476) (xy 146.35907 56.476) (xy 146.370963 56.596747) (xy 146.406183 56.712854) + (xy 146.463379 56.819859) (xy 146.54035 56.91365) (xy 146.634141 56.990621) (xy 146.741146 57.047817) (xy 146.857253 57.083037) + (xy 146.978 57.09493) (xy 147.527963 57.09195) (xy 147.68195 56.937963) (xy 147.68195 55.77205) (xy 147.97405 55.77205) + (xy 147.97405 56.937963) (xy 148.128037 57.09195) (xy 148.678 57.09493) (xy 148.798747 57.083037) (xy 148.914854 57.047817) + (xy 149.021859 56.990621) (xy 149.11565 56.91365) (xy 149.192621 56.819859) (xy 149.249817 56.712854) (xy 149.285037 56.596747) + (xy 149.29693 56.476) (xy 149.29395 55.926037) (xy 149.139963 55.77205) (xy 147.97405 55.77205) (xy 147.68195 55.77205) + (xy 146.516037 55.77205) (xy 146.36205 55.926037) (xy 146.35907 56.476) (xy 104.59293 56.476) (xy 104.58995 55.926037) + (xy 104.435963 55.77205) (xy 103.27005 55.77205) (xy 102.97795 55.77205) (xy 101.812037 55.77205) (xy 101.65805 55.926037) + (xy 101.65507 56.476) (xy 68.52493 56.476) (xy 68.52195 55.926037) (xy 68.367963 55.77205) (xy 67.20205 55.77205) + (xy 66.90995 55.77205) (xy 65.744037 55.77205) (xy 65.59005 55.926037) (xy 65.58707 56.476) (xy 53.87385 56.476) + (xy 53.87385 54.776) (xy 65.58707 54.776) (xy 65.59005 55.325963) (xy 65.744037 55.47995) (xy 66.90995 55.47995) + (xy 66.90995 54.314037) (xy 67.20205 54.314037) (xy 67.20205 55.47995) (xy 68.367963 55.47995) (xy 68.52195 55.325963) + (xy 68.52493 54.776) (xy 101.65507 54.776) (xy 101.65805 55.325963) (xy 101.812037 55.47995) (xy 102.97795 55.47995) + (xy 102.97795 54.314037) (xy 103.27005 54.314037) (xy 103.27005 55.47995) (xy 104.435963 55.47995) (xy 104.58995 55.325963) + (xy 104.59293 54.776) (xy 146.35907 54.776) (xy 146.36205 55.325963) (xy 146.516037 55.47995) (xy 147.68195 55.47995) + (xy 147.68195 54.314037) (xy 147.97405 54.314037) (xy 147.97405 55.47995) (xy 149.139963 55.47995) (xy 149.29395 55.325963) + (xy 149.29693 54.776) (xy 149.285037 54.655253) (xy 149.249817 54.539146) (xy 149.192621 54.432141) (xy 149.11565 54.33835) + (xy 149.021859 54.261379) (xy 148.914854 54.204183) (xy 148.798747 54.168963) (xy 148.678 54.15707) (xy 148.128037 54.16005) + (xy 147.97405 54.314037) (xy 147.68195 54.314037) (xy 147.527963 54.16005) (xy 146.978 54.15707) (xy 146.857253 54.168963) + (xy 146.741146 54.204183) (xy 146.634141 54.261379) (xy 146.54035 54.33835) (xy 146.463379 54.432141) (xy 146.406183 54.539146) + (xy 146.370963 54.655253) (xy 146.35907 54.776) (xy 104.59293 54.776) (xy 104.581037 54.655253) (xy 104.545817 54.539146) + (xy 104.488621 54.432141) (xy 104.41165 54.33835) (xy 104.317859 54.261379) (xy 104.210854 54.204183) (xy 104.094747 54.168963) + (xy 103.974 54.15707) (xy 103.424037 54.16005) (xy 103.27005 54.314037) (xy 102.97795 54.314037) (xy 102.823963 54.16005) + (xy 102.274 54.15707) (xy 102.153253 54.168963) (xy 102.037146 54.204183) (xy 101.930141 54.261379) (xy 101.83635 54.33835) + (xy 101.759379 54.432141) (xy 101.702183 54.539146) (xy 101.666963 54.655253) (xy 101.65507 54.776) (xy 68.52493 54.776) + (xy 68.513037 54.655253) (xy 68.477817 54.539146) (xy 68.420621 54.432141) (xy 68.34365 54.33835) (xy 68.249859 54.261379) + (xy 68.142854 54.204183) (xy 68.026747 54.168963) (xy 67.906 54.15707) (xy 67.356037 54.16005) (xy 67.20205 54.314037) + (xy 66.90995 54.314037) (xy 66.755963 54.16005) (xy 66.206 54.15707) (xy 66.085253 54.168963) (xy 65.969146 54.204183) + (xy 65.862141 54.261379) (xy 65.76835 54.33835) (xy 65.691379 54.432141) (xy 65.634183 54.539146) (xy 65.598963 54.655253) + (xy 65.58707 54.776) (xy 53.87385 54.776) (xy 53.87385 53.174603) (xy 68.61359 53.174603) (xy 68.61359 53.393637) + (xy 68.656322 53.608464) (xy 68.740143 53.810826) (xy 68.861832 53.992947) (xy 69.016713 54.147828) (xy 69.198834 54.269517) + (xy 69.401196 54.353338) (xy 69.616023 54.39607) (xy 69.835057 54.39607) (xy 70.049884 54.353338) (xy 70.252246 54.269517) + (xy 70.434367 54.147828) (xy 70.589248 53.992947) (xy 70.710937 53.810826) (xy 70.794758 53.608464) (xy 70.83749 53.393637) + (xy 70.83749 53.174603) (xy 72.11117 53.174603) (xy 72.11117 53.393637) (xy 72.153902 53.608464) (xy 72.237723 53.810826) + (xy 72.359412 53.992947) (xy 72.514293 54.147828) (xy 72.696414 54.269517) (xy 72.898776 54.353338) (xy 73.113603 54.39607) + (xy 73.332637 54.39607) (xy 73.547464 54.353338) (xy 73.749826 54.269517) (xy 73.931947 54.147828) (xy 74.086828 53.992947) + (xy 74.208517 53.810826) (xy 74.292338 53.608464) (xy 74.33507 53.393637) (xy 74.33507 53.174603) (xy 75.21251 53.174603) + (xy 75.21251 53.393637) (xy 75.255242 53.608464) (xy 75.339063 53.810826) (xy 75.460752 53.992947) (xy 75.615633 54.147828) + (xy 75.797754 54.269517) (xy 76.000116 54.353338) (xy 76.214943 54.39607) (xy 76.433977 54.39607) (xy 76.648804 54.353338) + (xy 76.851166 54.269517) (xy 77.033287 54.147828) (xy 77.188168 53.992947) (xy 77.309857 53.810826) (xy 77.393678 53.608464) + (xy 77.43641 53.393637) (xy 77.43641 53.174603) (xy 78.21225 53.174603) (xy 78.21225 53.393637) (xy 78.254982 53.608464) + (xy 78.338803 53.810826) (xy 78.460492 53.992947) (xy 78.615373 54.147828) (xy 78.797494 54.269517) (xy 78.999856 54.353338) + (xy 79.214683 54.39607) (xy 79.433717 54.39607) (xy 79.648544 54.353338) (xy 79.850906 54.269517) (xy 80.033027 54.147828) + (xy 80.187908 53.992947) (xy 80.309597 53.810826) (xy 80.393418 53.608464) (xy 80.43615 53.393637) (xy 80.43615 53.174603) + (xy 81.21199 53.174603) (xy 81.21199 53.393637) (xy 81.254722 53.608464) (xy 81.338543 53.810826) (xy 81.460232 53.992947) + (xy 81.615113 54.147828) (xy 81.797234 54.269517) (xy 81.999596 54.353338) (xy 82.214423 54.39607) (xy 82.433457 54.39607) + (xy 82.648284 54.353338) (xy 82.850646 54.269517) (xy 83.032767 54.147828) (xy 83.187648 53.992947) (xy 83.309337 53.810826) + (xy 83.393158 53.608464) (xy 83.43589 53.393637) (xy 83.43589 53.174603) (xy 84.21173 53.174603) (xy 84.21173 53.393637) + (xy 84.254462 53.608464) (xy 84.338283 53.810826) (xy 84.459972 53.992947) (xy 84.614853 54.147828) (xy 84.796974 54.269517) + (xy 84.999336 54.353338) (xy 85.214163 54.39607) (xy 85.433197 54.39607) (xy 85.648024 54.353338) (xy 85.850386 54.269517) + (xy 86.032507 54.147828) (xy 86.187388 53.992947) (xy 86.309077 53.810826) (xy 86.392898 53.608464) (xy 86.43563 53.393637) + (xy 86.43563 53.174603) (xy 87.21147 53.174603) (xy 87.21147 53.393637) (xy 87.254202 53.608464) (xy 87.338023 53.810826) + (xy 87.459712 53.992947) (xy 87.614593 54.147828) (xy 87.796714 54.269517) (xy 87.999076 54.353338) (xy 88.213903 54.39607) + (xy 88.432937 54.39607) (xy 88.647764 54.353338) (xy 88.850126 54.269517) (xy 89.032247 54.147828) (xy 89.187128 53.992947) + (xy 89.308817 53.810826) (xy 89.392638 53.608464) (xy 89.43537 53.393637) (xy 89.43537 53.174603) (xy 90.21121 53.174603) + (xy 90.21121 53.393637) (xy 90.253942 53.608464) (xy 90.337763 53.810826) (xy 90.459452 53.992947) (xy 90.614333 54.147828) + (xy 90.796454 54.269517) (xy 90.998816 54.353338) (xy 91.213643 54.39607) (xy 91.432677 54.39607) (xy 91.647504 54.353338) + (xy 91.849866 54.269517) (xy 92.031987 54.147828) (xy 92.186868 53.992947) (xy 92.308557 53.810826) (xy 92.392378 53.608464) + (xy 92.43511 53.393637) (xy 92.43511 53.174603) (xy 93.21095 53.174603) (xy 93.21095 53.393637) (xy 93.253682 53.608464) + (xy 93.337503 53.810826) (xy 93.459192 53.992947) (xy 93.614073 54.147828) (xy 93.796194 54.269517) (xy 93.998556 54.353338) + (xy 94.213383 54.39607) (xy 94.432417 54.39607) (xy 94.647244 54.353338) (xy 94.849606 54.269517) (xy 95.031727 54.147828) + (xy 95.186608 53.992947) (xy 95.308297 53.810826) (xy 95.392118 53.608464) (xy 95.43485 53.393637) (xy 95.43485 53.174603) + (xy 96.21069 53.174603) (xy 96.21069 53.393637) (xy 96.253422 53.608464) (xy 96.337243 53.810826) (xy 96.458932 53.992947) + (xy 96.613813 54.147828) (xy 96.795934 54.269517) (xy 96.998296 54.353338) (xy 97.213123 54.39607) (xy 97.432157 54.39607) + (xy 97.646984 54.353338) (xy 97.849346 54.269517) (xy 98.031467 54.147828) (xy 98.186348 53.992947) (xy 98.308037 53.810826) + (xy 98.391858 53.608464) (xy 98.43459 53.393637) (xy 98.43459 53.174603) (xy 99.31203 53.174603) (xy 99.31203 53.393637) + (xy 99.354762 53.608464) (xy 99.438583 53.810826) (xy 99.560272 53.992947) (xy 99.715153 54.147828) (xy 99.897274 54.269517) + (xy 100.099636 54.353338) (xy 100.314463 54.39607) (xy 100.533497 54.39607) (xy 100.748324 54.353338) (xy 100.950686 54.269517) + (xy 101.132807 54.147828) (xy 101.287688 53.992947) (xy 101.409377 53.810826) (xy 101.493198 53.608464) (xy 101.53593 53.393637) + (xy 101.53593 53.174603) (xy 105.51217 53.174603) (xy 105.51217 53.393637) (xy 105.554902 53.608464) (xy 105.638723 53.810826) + (xy 105.760412 53.992947) (xy 105.915293 54.147828) (xy 106.097414 54.269517) (xy 106.299776 54.353338) (xy 106.514603 54.39607) + (xy 106.733637 54.39607) (xy 106.948464 54.353338) (xy 107.150826 54.269517) (xy 107.332947 54.147828) (xy 107.487828 53.992947) + (xy 107.609517 53.810826) (xy 107.693338 53.608464) (xy 107.73607 53.393637) (xy 107.73607 53.174603) (xy 109.01229 53.174603) + (xy 109.01229 53.393637) (xy 109.055022 53.608464) (xy 109.138843 53.810826) (xy 109.260532 53.992947) (xy 109.415413 54.147828) + (xy 109.597534 54.269517) (xy 109.799896 54.353338) (xy 110.014723 54.39607) (xy 110.233757 54.39607) (xy 110.448584 54.353338) + (xy 110.650946 54.269517) (xy 110.833067 54.147828) (xy 110.987948 53.992947) (xy 111.109637 53.810826) (xy 111.193458 53.608464) + (xy 111.23619 53.393637) (xy 111.23619 53.174603) (xy 112.11617 53.174603) (xy 112.11617 53.393637) (xy 112.158902 53.608464) + (xy 112.242723 53.810826) (xy 112.364412 53.992947) (xy 112.519293 54.147828) (xy 112.701414 54.269517) (xy 112.903776 54.353338) + (xy 113.118603 54.39607) (xy 113.337637 54.39607) (xy 113.552464 54.353338) (xy 113.754826 54.269517) (xy 113.936947 54.147828) + (xy 114.091828 53.992947) (xy 114.213517 53.810826) (xy 114.297338 53.608464) (xy 114.34007 53.393637) (xy 114.34007 53.174603) + (xy 115.11591 53.174603) (xy 115.11591 53.393637) (xy 115.158642 53.608464) (xy 115.242463 53.810826) (xy 115.364152 53.992947) + (xy 115.519033 54.147828) (xy 115.701154 54.269517) (xy 115.903516 54.353338) (xy 116.118343 54.39607) (xy 116.337377 54.39607) + (xy 116.552204 54.353338) (xy 116.754566 54.269517) (xy 116.936687 54.147828) (xy 117.091568 53.992947) (xy 117.213257 53.810826) + (xy 117.297078 53.608464) (xy 117.33981 53.393637) (xy 117.33981 53.174603) (xy 118.11565 53.174603) (xy 118.11565 53.393637) + (xy 118.158382 53.608464) (xy 118.242203 53.810826) (xy 118.363892 53.992947) (xy 118.518773 54.147828) (xy 118.700894 54.269517) + (xy 118.903256 54.353338) (xy 119.118083 54.39607) (xy 119.337117 54.39607) (xy 119.551944 54.353338) (xy 119.754306 54.269517) + (xy 119.936427 54.147828) (xy 120.091308 53.992947) (xy 120.212997 53.810826) (xy 120.296818 53.608464) (xy 120.33955 53.393637) + (xy 120.33955 53.174603) (xy 121.11539 53.174603) (xy 121.11539 53.393637) (xy 121.158122 53.608464) (xy 121.241943 53.810826) + (xy 121.363632 53.992947) (xy 121.518513 54.147828) (xy 121.700634 54.269517) (xy 121.902996 54.353338) (xy 122.117823 54.39607) + (xy 122.336857 54.39607) (xy 122.551684 54.353338) (xy 122.754046 54.269517) (xy 122.936167 54.147828) (xy 123.091048 53.992947) + (xy 123.212737 53.810826) (xy 123.296558 53.608464) (xy 123.33929 53.393637) (xy 123.33929 53.174603) (xy 124.11513 53.174603) + (xy 124.11513 53.393637) (xy 124.157862 53.608464) (xy 124.241683 53.810826) (xy 124.363372 53.992947) (xy 124.518253 54.147828) + (xy 124.700374 54.269517) (xy 124.902736 54.353338) (xy 125.117563 54.39607) (xy 125.336597 54.39607) (xy 125.551424 54.353338) + (xy 125.753786 54.269517) (xy 125.935907 54.147828) (xy 126.090788 53.992947) (xy 126.212477 53.810826) (xy 126.296298 53.608464) + (xy 126.33903 53.393637) (xy 126.33903 53.174603) (xy 127.11487 53.174603) (xy 127.11487 53.393637) (xy 127.157602 53.608464) + (xy 127.241423 53.810826) (xy 127.363112 53.992947) (xy 127.517993 54.147828) (xy 127.700114 54.269517) (xy 127.902476 54.353338) + (xy 128.117303 54.39607) (xy 128.336337 54.39607) (xy 128.551164 54.353338) (xy 128.753526 54.269517) (xy 128.935647 54.147828) + (xy 129.090528 53.992947) (xy 129.212217 53.810826) (xy 129.296038 53.608464) (xy 129.33877 53.393637) (xy 129.33877 53.174603) + (xy 130.11461 53.174603) (xy 130.11461 53.393637) (xy 130.157342 53.608464) (xy 130.241163 53.810826) (xy 130.362852 53.992947) + (xy 130.517733 54.147828) (xy 130.699854 54.269517) (xy 130.902216 54.353338) (xy 131.117043 54.39607) (xy 131.336077 54.39607) + (xy 131.550904 54.353338) (xy 131.753266 54.269517) (xy 131.935387 54.147828) (xy 132.090268 53.992947) (xy 132.211957 53.810826) + (xy 132.295778 53.608464) (xy 132.33851 53.393637) (xy 132.33851 53.174603) (xy 133.11435 53.174603) (xy 133.11435 53.393637) + (xy 133.157082 53.608464) (xy 133.240903 53.810826) (xy 133.362592 53.992947) (xy 133.517473 54.147828) (xy 133.699594 54.269517) + (xy 133.901956 54.353338) (xy 134.116783 54.39607) (xy 134.335817 54.39607) (xy 134.550644 54.353338) (xy 134.753006 54.269517) + (xy 134.935127 54.147828) (xy 135.090008 53.992947) (xy 135.211697 53.810826) (xy 135.295518 53.608464) (xy 135.33825 53.393637) + (xy 135.33825 53.174603) (xy 136.21569 53.174603) (xy 136.21569 53.393637) (xy 136.258422 53.608464) (xy 136.342243 53.810826) + (xy 136.463932 53.992947) (xy 136.618813 54.147828) (xy 136.800934 54.269517) (xy 137.003296 54.353338) (xy 137.218123 54.39607) + (xy 137.437157 54.39607) (xy 137.651984 54.353338) (xy 137.854346 54.269517) (xy 138.036467 54.147828) (xy 138.191348 53.992947) + (xy 138.313037 53.810826) (xy 138.396858 53.608464) (xy 138.43959 53.393637) (xy 138.43959 53.174603) (xy 139.71581 53.174603) + (xy 139.71581 53.393637) (xy 139.758542 53.608464) (xy 139.842363 53.810826) (xy 139.964052 53.992947) (xy 140.118933 54.147828) + (xy 140.301054 54.269517) (xy 140.503416 54.353338) (xy 140.718243 54.39607) (xy 140.937277 54.39607) (xy 141.152104 54.353338) + (xy 141.354466 54.269517) (xy 141.536587 54.147828) (xy 141.691468 53.992947) (xy 141.813157 53.810826) (xy 141.896978 53.608464) + (xy 141.93971 53.393637) (xy 141.93971 53.174603) (xy 143.21593 53.174603) (xy 143.21593 53.393637) (xy 143.258662 53.608464) + (xy 143.342483 53.810826) (xy 143.464172 53.992947) (xy 143.619053 54.147828) (xy 143.801174 54.269517) (xy 144.003536 54.353338) + (xy 144.218363 54.39607) (xy 144.437397 54.39607) (xy 144.652224 54.353338) (xy 144.854586 54.269517) (xy 145.036707 54.147828) + (xy 145.191588 53.992947) (xy 145.313277 53.810826) (xy 145.397098 53.608464) (xy 145.43983 53.393637) (xy 145.43983 53.174603) + (xy 145.397098 52.959776) (xy 145.313277 52.757414) (xy 145.191588 52.575293) (xy 145.036707 52.420412) (xy 144.854586 52.298723) + (xy 144.652224 52.214902) (xy 144.437397 52.17217) (xy 144.218363 52.17217) (xy 144.003536 52.214902) (xy 143.801174 52.298723) + (xy 143.619053 52.420412) (xy 143.464172 52.575293) (xy 143.342483 52.757414) (xy 143.258662 52.959776) (xy 143.21593 53.174603) + (xy 141.93971 53.174603) (xy 141.896978 52.959776) (xy 141.813157 52.757414) (xy 141.691468 52.575293) (xy 141.536587 52.420412) + (xy 141.354466 52.298723) (xy 141.152104 52.214902) (xy 140.937277 52.17217) (xy 140.718243 52.17217) (xy 140.503416 52.214902) + (xy 140.301054 52.298723) (xy 140.118933 52.420412) (xy 139.964052 52.575293) (xy 139.842363 52.757414) (xy 139.758542 52.959776) + (xy 139.71581 53.174603) (xy 138.43959 53.174603) (xy 138.396858 52.959776) (xy 138.313037 52.757414) (xy 138.191348 52.575293) + (xy 138.036467 52.420412) (xy 137.854346 52.298723) (xy 137.651984 52.214902) (xy 137.437157 52.17217) (xy 137.218123 52.17217) + (xy 137.003296 52.214902) (xy 136.800934 52.298723) (xy 136.618813 52.420412) (xy 136.463932 52.575293) (xy 136.342243 52.757414) + (xy 136.258422 52.959776) (xy 136.21569 53.174603) (xy 135.33825 53.174603) (xy 135.295518 52.959776) (xy 135.211697 52.757414) + (xy 135.090008 52.575293) (xy 134.935127 52.420412) (xy 134.753006 52.298723) (xy 134.550644 52.214902) (xy 134.335817 52.17217) + (xy 134.116783 52.17217) (xy 133.901956 52.214902) (xy 133.699594 52.298723) (xy 133.517473 52.420412) (xy 133.362592 52.575293) + (xy 133.240903 52.757414) (xy 133.157082 52.959776) (xy 133.11435 53.174603) (xy 132.33851 53.174603) (xy 132.295778 52.959776) + (xy 132.211957 52.757414) (xy 132.090268 52.575293) (xy 131.935387 52.420412) (xy 131.753266 52.298723) (xy 131.550904 52.214902) + (xy 131.336077 52.17217) (xy 131.117043 52.17217) (xy 130.902216 52.214902) (xy 130.699854 52.298723) (xy 130.517733 52.420412) + (xy 130.362852 52.575293) (xy 130.241163 52.757414) (xy 130.157342 52.959776) (xy 130.11461 53.174603) (xy 129.33877 53.174603) + (xy 129.296038 52.959776) (xy 129.212217 52.757414) (xy 129.090528 52.575293) (xy 128.935647 52.420412) (xy 128.753526 52.298723) + (xy 128.551164 52.214902) (xy 128.336337 52.17217) (xy 128.117303 52.17217) (xy 127.902476 52.214902) (xy 127.700114 52.298723) + (xy 127.517993 52.420412) (xy 127.363112 52.575293) (xy 127.241423 52.757414) (xy 127.157602 52.959776) (xy 127.11487 53.174603) + (xy 126.33903 53.174603) (xy 126.296298 52.959776) (xy 126.212477 52.757414) (xy 126.090788 52.575293) (xy 125.935907 52.420412) + (xy 125.753786 52.298723) (xy 125.551424 52.214902) (xy 125.336597 52.17217) (xy 125.117563 52.17217) (xy 124.902736 52.214902) + (xy 124.700374 52.298723) (xy 124.518253 52.420412) (xy 124.363372 52.575293) (xy 124.241683 52.757414) (xy 124.157862 52.959776) + (xy 124.11513 53.174603) (xy 123.33929 53.174603) (xy 123.296558 52.959776) (xy 123.212737 52.757414) (xy 123.091048 52.575293) + (xy 122.936167 52.420412) (xy 122.754046 52.298723) (xy 122.551684 52.214902) (xy 122.336857 52.17217) (xy 122.117823 52.17217) + (xy 121.902996 52.214902) (xy 121.700634 52.298723) (xy 121.518513 52.420412) (xy 121.363632 52.575293) (xy 121.241943 52.757414) + (xy 121.158122 52.959776) (xy 121.11539 53.174603) (xy 120.33955 53.174603) (xy 120.296818 52.959776) (xy 120.212997 52.757414) + (xy 120.091308 52.575293) (xy 119.936427 52.420412) (xy 119.754306 52.298723) (xy 119.551944 52.214902) (xy 119.337117 52.17217) + (xy 119.118083 52.17217) (xy 118.903256 52.214902) (xy 118.700894 52.298723) (xy 118.518773 52.420412) (xy 118.363892 52.575293) + (xy 118.242203 52.757414) (xy 118.158382 52.959776) (xy 118.11565 53.174603) (xy 117.33981 53.174603) (xy 117.297078 52.959776) + (xy 117.213257 52.757414) (xy 117.091568 52.575293) (xy 116.936687 52.420412) (xy 116.754566 52.298723) (xy 116.552204 52.214902) + (xy 116.337377 52.17217) (xy 116.118343 52.17217) (xy 115.903516 52.214902) (xy 115.701154 52.298723) (xy 115.519033 52.420412) + (xy 115.364152 52.575293) (xy 115.242463 52.757414) (xy 115.158642 52.959776) (xy 115.11591 53.174603) (xy 114.34007 53.174603) + (xy 114.297338 52.959776) (xy 114.213517 52.757414) (xy 114.091828 52.575293) (xy 113.936947 52.420412) (xy 113.754826 52.298723) + (xy 113.552464 52.214902) (xy 113.337637 52.17217) (xy 113.118603 52.17217) (xy 112.903776 52.214902) (xy 112.701414 52.298723) + (xy 112.519293 52.420412) (xy 112.364412 52.575293) (xy 112.242723 52.757414) (xy 112.158902 52.959776) (xy 112.11617 53.174603) + (xy 111.23619 53.174603) (xy 111.193458 52.959776) (xy 111.109637 52.757414) (xy 110.987948 52.575293) (xy 110.833067 52.420412) + (xy 110.650946 52.298723) (xy 110.448584 52.214902) (xy 110.233757 52.17217) (xy 110.014723 52.17217) (xy 109.799896 52.214902) + (xy 109.597534 52.298723) (xy 109.415413 52.420412) (xy 109.260532 52.575293) (xy 109.138843 52.757414) (xy 109.055022 52.959776) + (xy 109.01229 53.174603) (xy 107.73607 53.174603) (xy 107.693338 52.959776) (xy 107.609517 52.757414) (xy 107.487828 52.575293) + (xy 107.332947 52.420412) (xy 107.150826 52.298723) (xy 106.948464 52.214902) (xy 106.733637 52.17217) (xy 106.514603 52.17217) + (xy 106.299776 52.214902) (xy 106.097414 52.298723) (xy 105.915293 52.420412) (xy 105.760412 52.575293) (xy 105.638723 52.757414) + (xy 105.554902 52.959776) (xy 105.51217 53.174603) (xy 101.53593 53.174603) (xy 101.493198 52.959776) (xy 101.409377 52.757414) + (xy 101.287688 52.575293) (xy 101.132807 52.420412) (xy 100.950686 52.298723) (xy 100.748324 52.214902) (xy 100.533497 52.17217) + (xy 100.314463 52.17217) (xy 100.099636 52.214902) (xy 99.897274 52.298723) (xy 99.715153 52.420412) (xy 99.560272 52.575293) + (xy 99.438583 52.757414) (xy 99.354762 52.959776) (xy 99.31203 53.174603) (xy 98.43459 53.174603) (xy 98.391858 52.959776) + (xy 98.308037 52.757414) (xy 98.186348 52.575293) (xy 98.031467 52.420412) (xy 97.849346 52.298723) (xy 97.646984 52.214902) + (xy 97.432157 52.17217) (xy 97.213123 52.17217) (xy 96.998296 52.214902) (xy 96.795934 52.298723) (xy 96.613813 52.420412) + (xy 96.458932 52.575293) (xy 96.337243 52.757414) (xy 96.253422 52.959776) (xy 96.21069 53.174603) (xy 95.43485 53.174603) + (xy 95.392118 52.959776) (xy 95.308297 52.757414) (xy 95.186608 52.575293) (xy 95.031727 52.420412) (xy 94.849606 52.298723) + (xy 94.647244 52.214902) (xy 94.432417 52.17217) (xy 94.213383 52.17217) (xy 93.998556 52.214902) (xy 93.796194 52.298723) + (xy 93.614073 52.420412) (xy 93.459192 52.575293) (xy 93.337503 52.757414) (xy 93.253682 52.959776) (xy 93.21095 53.174603) + (xy 92.43511 53.174603) (xy 92.392378 52.959776) (xy 92.308557 52.757414) (xy 92.186868 52.575293) (xy 92.031987 52.420412) + (xy 91.849866 52.298723) (xy 91.647504 52.214902) (xy 91.432677 52.17217) (xy 91.213643 52.17217) (xy 90.998816 52.214902) + (xy 90.796454 52.298723) (xy 90.614333 52.420412) (xy 90.459452 52.575293) (xy 90.337763 52.757414) (xy 90.253942 52.959776) + (xy 90.21121 53.174603) (xy 89.43537 53.174603) (xy 89.392638 52.959776) (xy 89.308817 52.757414) (xy 89.187128 52.575293) + (xy 89.032247 52.420412) (xy 88.850126 52.298723) (xy 88.647764 52.214902) (xy 88.432937 52.17217) (xy 88.213903 52.17217) + (xy 87.999076 52.214902) (xy 87.796714 52.298723) (xy 87.614593 52.420412) (xy 87.459712 52.575293) (xy 87.338023 52.757414) + (xy 87.254202 52.959776) (xy 87.21147 53.174603) (xy 86.43563 53.174603) (xy 86.392898 52.959776) (xy 86.309077 52.757414) + (xy 86.187388 52.575293) (xy 86.032507 52.420412) (xy 85.850386 52.298723) (xy 85.648024 52.214902) (xy 85.433197 52.17217) + (xy 85.214163 52.17217) (xy 84.999336 52.214902) (xy 84.796974 52.298723) (xy 84.614853 52.420412) (xy 84.459972 52.575293) + (xy 84.338283 52.757414) (xy 84.254462 52.959776) (xy 84.21173 53.174603) (xy 83.43589 53.174603) (xy 83.393158 52.959776) + (xy 83.309337 52.757414) (xy 83.187648 52.575293) (xy 83.032767 52.420412) (xy 82.850646 52.298723) (xy 82.648284 52.214902) + (xy 82.433457 52.17217) (xy 82.214423 52.17217) (xy 81.999596 52.214902) (xy 81.797234 52.298723) (xy 81.615113 52.420412) + (xy 81.460232 52.575293) (xy 81.338543 52.757414) (xy 81.254722 52.959776) (xy 81.21199 53.174603) (xy 80.43615 53.174603) + (xy 80.393418 52.959776) (xy 80.309597 52.757414) (xy 80.187908 52.575293) (xy 80.033027 52.420412) (xy 79.850906 52.298723) + (xy 79.648544 52.214902) (xy 79.433717 52.17217) (xy 79.214683 52.17217) (xy 78.999856 52.214902) (xy 78.797494 52.298723) + (xy 78.615373 52.420412) (xy 78.460492 52.575293) (xy 78.338803 52.757414) (xy 78.254982 52.959776) (xy 78.21225 53.174603) + (xy 77.43641 53.174603) (xy 77.393678 52.959776) (xy 77.309857 52.757414) (xy 77.188168 52.575293) (xy 77.033287 52.420412) + (xy 76.851166 52.298723) (xy 76.648804 52.214902) (xy 76.433977 52.17217) (xy 76.214943 52.17217) (xy 76.000116 52.214902) + (xy 75.797754 52.298723) (xy 75.615633 52.420412) (xy 75.460752 52.575293) (xy 75.339063 52.757414) (xy 75.255242 52.959776) + (xy 75.21251 53.174603) (xy 74.33507 53.174603) (xy 74.292338 52.959776) (xy 74.208517 52.757414) (xy 74.086828 52.575293) + (xy 73.931947 52.420412) (xy 73.749826 52.298723) (xy 73.547464 52.214902) (xy 73.332637 52.17217) (xy 73.113603 52.17217) + (xy 72.898776 52.214902) (xy 72.696414 52.298723) (xy 72.514293 52.420412) (xy 72.359412 52.575293) (xy 72.237723 52.757414) + (xy 72.153902 52.959776) (xy 72.11117 53.174603) (xy 70.83749 53.174603) (xy 70.794758 52.959776) (xy 70.710937 52.757414) + (xy 70.589248 52.575293) (xy 70.434367 52.420412) (xy 70.252246 52.298723) (xy 70.049884 52.214902) (xy 69.835057 52.17217) + (xy 69.616023 52.17217) (xy 69.401196 52.214902) (xy 69.198834 52.298723) (xy 69.016713 52.420412) (xy 68.861832 52.575293) + (xy 68.740143 52.757414) (xy 68.656322 52.959776) (xy 68.61359 53.174603) (xy 53.87385 53.174603) (xy 53.87385 47.376345) + (xy 62.56147 47.376345) (xy 62.56147 47.792375) (xy 62.642633 48.200411) (xy 62.801841 48.584772) (xy 63.032975 48.930688) + (xy 63.327152 49.224865) (xy 63.673068 49.455999) (xy 64.057429 49.615207) (xy 64.465465 49.69637) (xy 64.881495 49.69637) + (xy 65.289531 49.615207) (xy 65.673892 49.455999) (xy 66.019808 49.224865) (xy 66.313985 48.930688) (xy 66.545119 48.584772) + (xy 66.704327 48.200411) (xy 66.78549 47.792375) (xy 66.78549 47.376345) (xy 101.41585 47.376345) (xy 101.41585 47.792375) + (xy 101.497013 48.200411) (xy 101.656221 48.584772) (xy 101.887355 48.930688) (xy 102.181532 49.224865) (xy 102.527448 49.455999) + (xy 102.911809 49.615207) (xy 103.319845 49.69637) (xy 103.735875 49.69637) (xy 104.143911 49.615207) (xy 104.528272 49.455999) + (xy 104.874188 49.224865) (xy 105.168365 48.930688) (xy 105.399499 48.584772) (xy 105.558707 48.200411) (xy 105.63987 47.792375) + (xy 105.63987 47.376345) (xy 147.26539 47.376345) (xy 147.26539 47.792375) (xy 147.346553 48.200411) (xy 147.505761 48.584772) + (xy 147.736895 48.930688) (xy 148.031072 49.224865) (xy 148.376988 49.455999) (xy 148.761349 49.615207) (xy 149.169385 49.69637) + (xy 149.585415 49.69637) (xy 149.993451 49.615207) (xy 150.377812 49.455999) (xy 150.723728 49.224865) (xy 151.017905 48.930688) + (xy 151.249039 48.584772) (xy 151.408247 48.200411) (xy 151.48941 47.792375) (xy 151.48941 47.376345) (xy 151.408247 46.968309) + (xy 151.249039 46.583948) (xy 151.017905 46.238032) (xy 150.723728 45.943855) (xy 150.377812 45.712721) (xy 149.993451 45.553513) + (xy 149.585415 45.47235) (xy 149.169385 45.47235) (xy 148.761349 45.553513) (xy 148.376988 45.712721) (xy 148.031072 45.943855) + (xy 147.736895 46.238032) (xy 147.505761 46.583948) (xy 147.346553 46.968309) (xy 147.26539 47.376345) (xy 105.63987 47.376345) + (xy 105.558707 46.968309) (xy 105.399499 46.583948) (xy 105.168365 46.238032) (xy 104.874188 45.943855) (xy 104.528272 45.712721) + (xy 104.143911 45.553513) (xy 103.735875 45.47235) (xy 103.319845 45.47235) (xy 102.911809 45.553513) (xy 102.527448 45.712721) + (xy 102.181532 45.943855) (xy 101.887355 46.238032) (xy 101.656221 46.583948) (xy 101.497013 46.968309) (xy 101.41585 47.376345) + (xy 66.78549 47.376345) (xy 66.704327 46.968309) (xy 66.545119 46.583948) (xy 66.313985 46.238032) (xy 66.019808 45.943855) + (xy 65.673892 45.712721) (xy 65.289531 45.553513) (xy 64.881495 45.47235) (xy 64.465465 45.47235) (xy 64.057429 45.553513) + (xy 63.673068 45.712721) (xy 63.327152 45.943855) (xy 63.032975 46.238032) (xy 62.801841 46.583948) (xy 62.642633 46.968309) + (xy 62.56147 47.376345) (xy 53.87385 47.376345) (xy 53.87385 40.87385) (xy 153.126151 40.87385) ) ) ) diff --git a/hardware/breakout_48_pin_174917/174917.pro b/hardware/breakout_48_pin_174917/174917.pro index 5e665700d4..6c2af18e27 100644 --- a/hardware/breakout_48_pin_174917/174917.pro +++ b/hardware/breakout_48_pin_174917/174917.pro @@ -1,4 +1,4 @@ -update=2/11/2020 9:50:42 PM +update=21/03/2020 17:12:10 version=1 last_client=kicad [cvpcb] @@ -43,6 +43,7 @@ MinMicroViaDiameter=0.508 MinMicroViaDrill=0.127 MinHoleToHole=0.25 TrackWidth1=0.2032 +TrackWidth2=0.503 ViaDiameter1=0.889 ViaDrill1=0.635 dPairWidth1=0.2032 diff --git a/hardware/breakout_48_pin_174917/174917.sch b/hardware/breakout_48_pin_174917/174917.sch index 2f0274c8c7..1f6d32e4bc 100644 --- a/hardware/breakout_48_pin_174917/174917.sch +++ b/hardware/breakout_48_pin_174917/174917.sch @@ -1,5 +1,5 @@ EESchema Schematic File Version 4 -EELAYER 30 0 +EELAYER 29 0 EELAYER END $Descr A 11000 8500 encoding utf-8 @@ -16,56 +16,56 @@ $EndDescr $Comp L power:GND #PWR01 U 1 1 5223134E -P 2900 6050 -F 0 "#PWR01" H 2900 6050 30 0001 C CNN -F 1 "GND" H 2900 5980 30 0001 C CNN -F 2 "" H 2900 6050 60 0001 C CNN -F 3 "" H 2900 6050 60 0001 C CNN - 1 2900 6050 +P 1085 4715 +F 0 "#PWR01" H 1085 4715 30 0001 C CNN +F 1 "GND" H 1085 4645 30 0001 C CNN +F 2 "" H 1085 4715 60 0001 C CNN +F 3 "" H 1085 4715 60 0001 C CNN + 1 1085 4715 1 0 0 -1 $EndComp $Comp L Connector_Generic:Conn_01x01 P39 U 1 1 52231348 -P 2700 5850 -F 0 "P39" H 2780 5850 40 0000 L CNN -F 1 "CONN_1" H 2700 5905 30 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 2700 6005 30 0001 C CNN -F 3 "" H 2700 5850 60 0001 C CNN - 1 2700 5850 +P 885 4515 +F 0 "P39" H 965 4515 40 0000 L CNN +F 1 "CONN_1" H 885 4570 30 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 885 4670 30 0001 C CNN +F 3 "" H 885 4515 60 0001 C CNN + 1 885 4515 -1 0 0 1 $EndComp $Comp L Connector_Generic:Conn_01x01 P38 U 1 1 52231347 -P 2700 5750 -F 0 "P38" H 2780 5750 40 0000 L CNN -F 1 "CONN_1" H 2700 5805 30 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 2700 5905 30 0001 C CNN -F 3 "" H 2700 5750 60 0001 C CNN - 1 2700 5750 +P 885 4415 +F 0 "P38" H 965 4415 40 0000 L CNN +F 1 "CONN_1" H 885 4470 30 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 885 4570 30 0001 C CNN +F 3 "" H 885 4415 60 0001 C CNN + 1 885 4415 -1 0 0 1 $EndComp $Comp L Connector_Generic:Conn_01x01 P40 U 1 1 52231346 -P 2700 5950 -F 0 "P40" H 2780 5950 40 0000 L CNN -F 1 "CONN_1" H 2700 6005 30 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 2700 6105 30 0001 C CNN -F 3 "" H 2700 5950 60 0001 C CNN - 1 2700 5950 +P 885 4615 +F 0 "P40" H 965 4615 40 0000 L CNN +F 1 "CONN_1" H 885 4670 30 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 885 4770 30 0001 C CNN +F 3 "" H 885 4615 60 0001 C CNN + 1 885 4615 -1 0 0 1 $EndComp $Comp L Connector_Generic:Conn_01x01 P41 U 1 1 52231345 -P 2700 6050 -F 0 "P41" H 2780 6050 40 0000 L CNN -F 1 "CONN_1" H 2700 6105 30 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 2700 6205 30 0001 C CNN -F 3 "" H 2700 6050 60 0001 C CNN - 1 2700 6050 +P 885 4715 +F 0 "P41" H 965 4715 40 0000 L CNN +F 1 "CONN_1" H 885 4770 30 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 885 4870 30 0001 C CNN +F 3 "" H 885 4715 60 0001 C CNN + 1 885 4715 -1 0 0 1 $EndComp $Comp @@ -335,56 +335,56 @@ $EndComp $Comp L Connector_Generic:Conn_01x08 P32 U 1 1 52230BEA -P 5950 1950 -F 0 "P32" H 6125 1950 60 0000 C CNN -F 1 "CONN_8" V 6000 1950 60 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 6100 1950 60 0001 C CNN -F 3 "" H 5950 1950 60 0001 C CNN - 1 5950 1950 +P 2495 5195 +F 0 "P32" H 2670 5195 60 0000 C CNN +F 1 "CONN_8" V 2545 5195 60 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 2645 5195 60 0001 C CNN +F 3 "" H 2495 5195 60 0001 C CNN + 1 2495 5195 -1 0 0 -1 $EndComp $Comp L Connector_Generic:Conn_01x08 P33 U 1 1 52230BE9 -P 5950 2750 -F 0 "P33" H 6125 2750 60 0000 C CNN -F 1 "CONN_8" V 6000 2750 60 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 6100 2750 60 0001 C CNN -F 3 "" H 5950 2750 60 0001 C CNN - 1 5950 2750 +P 2900 6005 +F 0 "P33" H 3075 6005 60 0000 C CNN +F 1 "CONN_8" V 2950 6005 60 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 3050 6005 60 0001 C CNN +F 3 "" H 2900 6005 60 0001 C CNN + 1 2900 6005 -1 0 0 -1 $EndComp $Comp L Connector_Generic:Conn_01x08 P36 U 1 1 52230BE6 -P 5950 3550 -F 0 "P36" H 6125 3550 60 0000 C CNN -F 1 "CONN_8" V 6000 3550 60 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 6100 3550 60 0001 C CNN -F 3 "" H 5950 3550 60 0001 C CNN - 1 5950 3550 +P 2900 6805 +F 0 "P36" H 3075 6805 60 0000 C CNN +F 1 "CONN_8" V 2950 6805 60 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 3050 6805 60 0001 C CNN +F 3 "" H 2900 6805 60 0001 C CNN + 1 2900 6805 -1 0 0 -1 $EndComp $Comp L Connector_Generic:Conn_01x08 P37 U 1 1 52230BE5 -P 5950 4350 -F 0 "P37" H 6125 4350 60 0000 C CNN -F 1 "CONN_8" V 6000 4350 60 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 6100 4350 60 0001 C CNN -F 3 "" H 5950 4350 60 0001 C CNN - 1 5950 4350 +P 2900 7605 +F 0 "P37" H 3075 7605 60 0000 C CNN +F 1 "CONN_8" V 2950 7605 60 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 3050 7605 60 0001 C CNN +F 3 "" H 2900 7605 60 0001 C CNN + 1 2900 7605 -1 0 0 -1 $EndComp $Comp L 174917:174917 P25 U 2 1 52230AB7 -P 7000 4000 -F 0 "P25" H 7000 3900 50 0000 C CNN -F 1 "174917" H 7000 4100 50 0000 C CNN -F 2 "connector:174917" H 7000 3650 50 0001 C CNN -F 3 "DOCUMENTATION" H 7000 3750 50 0001 C CNN - 2 7000 4000 +P 3950 7355 +F 0 "P25" H 3950 7255 50 0000 C CNN +F 1 "174917" H 3950 7455 50 0000 C CNN +F 2 "connector:174917" H 3950 7005 50 0001 C CNN +F 3 "DOCUMENTATION" H 3950 7105 50 0001 C CNN + 2 3950 7355 1 0 0 -1 $EndComp $Comp @@ -401,45 +401,45 @@ $EndComp $Comp L Connector_Generic:Conn_01x08 P31 U 1 1 522309BF -P 5450 4350 -F 0 "P31" H 5600 4350 60 0000 C CNN -F 1 "CONN_8" V 5500 4350 60 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 5600 4350 60 0001 C CNN -F 3 "" H 5450 4350 60 0001 C CNN - 1 5450 4350 +P 2400 7605 +F 0 "P31" H 2550 7605 60 0000 C CNN +F 1 "CONN_8" V 2450 7605 60 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 2550 7605 60 0001 C CNN +F 3 "" H 2400 7605 60 0001 C CNN + 1 2400 7605 -1 0 0 -1 $EndComp $Comp L Connector_Generic:Conn_01x08 P30 U 1 1 522309BE -P 5450 3550 -F 0 "P30" H 5625 3550 60 0000 C CNN -F 1 "CONN_8" V 5500 3550 60 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 5600 3550 60 0001 C CNN -F 3 "" H 5450 3550 60 0001 C CNN - 1 5450 3550 +P 2400 6805 +F 0 "P30" H 2575 6805 60 0000 C CNN +F 1 "CONN_8" V 2450 6805 60 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 2550 6805 60 0001 C CNN +F 3 "" H 2400 6805 60 0001 C CNN + 1 2400 6805 -1 0 0 -1 $EndComp $Comp L Connector_Generic:Conn_01x08 P27 U 1 1 522309A0 -P 5450 2750 -F 0 "P27" H 5650 2750 60 0000 C CNN -F 1 "CONN_8" V 5500 2750 60 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 5600 2750 60 0001 C CNN -F 3 "" H 5450 2750 60 0001 C CNN - 1 5450 2750 +P 2400 6005 +F 0 "P27" H 2600 6005 60 0000 C CNN +F 1 "CONN_8" V 2450 6005 60 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 2550 6005 60 0001 C CNN +F 3 "" H 2400 6005 60 0001 C CNN + 1 2400 6005 -1 0 0 -1 $EndComp $Comp L Connector_Generic:Conn_01x08 P26 U 1 1 52230991 -P 5450 1950 -F 0 "P26" H 5650 1950 60 0000 C CNN -F 1 "CONN_8" V 5500 1950 60 0001 C CNN -F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 5600 1950 60 0001 C CNN -F 3 "" H 5450 1950 60 0001 C CNN - 1 5450 1950 +P 1995 5195 +F 0 "P26" H 2195 5195 60 0000 C CNN +F 1 "CONN_8" V 2045 5195 60 0001 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" V 2145 5195 60 0001 C CNN +F 3 "" H 1995 5195 60 0001 C CNN + 1 1995 5195 -1 0 0 -1 $EndComp Wire Wire Line @@ -449,69 +449,57 @@ Wire Wire Line Wire Wire Line 2600 3200 3200 3200 Wire Wire Line - 5650 4650 6150 4650 + 2600 7905 3100 7905 Wire Wire Line - 5650 4450 6150 4450 + 2600 7705 3100 7705 Wire Wire Line - 5650 4250 6150 4250 + 2600 7505 3100 7505 Wire Wire Line - 5650 4050 6150 4050 + 2600 7305 3100 7305 Wire Wire Line - 5650 3850 6150 3850 + 2600 7105 3100 7105 Wire Wire Line - 5650 3650 6150 3650 + 2600 6905 3100 6905 Wire Wire Line - 5650 3450 6150 3450 + 2600 6705 3100 6705 Wire Wire Line - 5650 3250 6150 3250 + 2600 6505 3100 6505 Wire Wire Line - 5650 3050 6150 3050 + 2600 6305 3100 6305 Wire Wire Line - 5650 2850 6150 2850 + 2600 6105 3100 6105 Wire Wire Line - 5650 2650 6150 2650 + 2600 5905 3100 5905 Wire Wire Line - 5650 2450 6150 2450 + 2195 5295 2695 5295 Wire Wire Line - 5650 2250 6150 2250 + 2195 5095 2695 5095 Wire Wire Line - 5650 2050 6150 2050 + 2195 5195 2695 5195 Wire Wire Line - 5650 1850 6150 1850 + 2600 5805 3100 5805 Wire Wire Line - 5650 1650 6150 1650 + 2600 6005 3100 6005 Wire Wire Line - 5650 1750 6150 1750 + 2600 6205 3100 6205 Wire Wire Line - 5650 1950 6150 1950 + 2600 6405 3100 6405 Wire Wire Line - 5650 2150 6150 2150 + 2600 6605 3100 6605 Wire Wire Line - 5650 2350 6150 2350 + 2600 6805 3100 6805 Wire Wire Line - 5650 2550 6150 2550 + 2600 7005 3100 7005 Wire Wire Line - 5650 2750 6150 2750 + 2600 7205 3100 7205 Wire Wire Line - 5650 2950 6150 2950 + 2600 7405 3100 7405 Wire Wire Line - 5650 3150 6150 3150 + 2600 7605 3100 7605 Wire Wire Line - 5650 3350 6150 3350 + 2600 7805 3100 7805 Wire Wire Line - 5650 3550 6150 3550 -Wire Wire Line - 5650 3750 6150 3750 -Wire Wire Line - 5650 3950 6150 3950 -Wire Wire Line - 5650 4150 6150 4150 -Wire Wire Line - 5650 4350 6150 4350 -Wire Wire Line - 5650 4550 6150 4550 -Wire Wire Line - 5650 4750 6150 4750 + 2600 8005 3100 8005 Wire Wire Line 2600 3300 3200 3300 Wire Wire Line @@ -539,103 +527,76 @@ Wire Wire Line Wire Wire Line 2600 4700 3200 4700 Wire Wire Line - 2900 5750 2900 5850 -Connection ~ 6150 4050 + 1085 4415 1085 4515 +Connection ~ 3100 7305 Wire Wire Line - 6150 4050 6250 4050 -Connection ~ 6150 4150 + 3100 7305 3200 7305 +Connection ~ 3100 7405 Wire Wire Line - 6150 4150 6250 4150 -Connection ~ 6150 4250 + 3100 7405 3200 7405 +Connection ~ 3100 7505 Wire Wire Line - 6150 4250 6250 4250 -Connection ~ 6150 4350 + 3100 7505 3200 7505 +Connection ~ 3100 7605 Wire Wire Line - 6150 4350 6250 4350 -Connection ~ 6150 4450 + 3100 7605 3200 7605 +Connection ~ 3100 7705 Wire Wire Line - 6150 4450 6250 4450 -Connection ~ 6150 4550 + 3100 7705 3200 7705 +Connection ~ 3100 7805 Wire Wire Line - 6150 4550 6250 4550 -Connection ~ 6150 4650 + 3100 7805 3200 7805 +Connection ~ 3100 7905 Wire Wire Line - 6150 4650 6250 4650 -Connection ~ 6150 4750 + 3100 7905 3200 7905 +Connection ~ 3100 8005 Wire Wire Line - 6150 4750 6250 4750 -Connection ~ 6150 1650 + 3100 8005 3200 8005 +Connection ~ 3100 5805 Wire Wire Line - 6150 1650 6250 1650 -Connection ~ 6150 1750 + 3100 5805 3200 5805 +Connection ~ 3100 5905 Wire Wire Line - 6150 1750 6250 1750 -Connection ~ 6150 1850 + 3100 5905 3200 5905 +Connection ~ 3100 6005 Wire Wire Line - 6150 1850 6250 1850 -Connection ~ 6150 1950 + 3100 6005 3200 6005 +Connection ~ 3100 6105 Wire Wire Line - 6150 1950 6250 1950 -Connection ~ 6150 2050 + 3100 6105 3200 6105 +Connection ~ 3100 6205 Wire Wire Line - 6150 2050 6250 2050 -Connection ~ 6150 2150 + 3100 6205 3200 6205 +Connection ~ 3100 6305 Wire Wire Line - 6150 2150 6250 2150 -Connection ~ 6150 2250 + 3100 6305 3200 6305 +Connection ~ 3100 6405 Wire Wire Line - 6150 2250 6250 2250 -Connection ~ 6150 2350 + 3100 6405 3200 6405 +Connection ~ 3100 6505 Wire Wire Line - 6150 2350 6250 2350 -Connection ~ 6150 2450 + 3100 6505 3200 6505 +Connection ~ 3100 6605 Wire Wire Line - 6150 2450 6250 2450 -Connection ~ 6150 2550 + 3100 6605 3200 6605 +Connection ~ 3100 6705 Wire Wire Line - 6150 2550 6250 2550 -Connection ~ 6150 2650 + 3100 6705 3200 6705 +Connection ~ 3100 6805 Wire Wire Line - 6150 2650 6250 2650 -Connection ~ 6150 2750 + 3100 6805 3200 6805 +Connection ~ 3100 6905 Wire Wire Line - 6150 2750 6250 2750 -Connection ~ 6150 2850 + 3100 6905 3200 6905 +Connection ~ 3100 7005 Wire Wire Line - 6150 2850 6250 2850 -Connection ~ 6150 2950 + 3100 7005 3200 7005 +Connection ~ 3100 7105 Wire Wire Line - 6150 2950 6250 2950 -Connection ~ 6150 3050 + 3100 7105 3200 7105 +Connection ~ 3100 7205 Wire Wire Line - 6150 3050 6250 3050 -Connection ~ 6150 3150 -Wire Wire Line - 6150 3150 6250 3150 -Connection ~ 6150 3250 -Wire Wire Line - 6150 3250 6250 3250 -Connection ~ 6150 3350 -Wire Wire Line - 6150 3350 6250 3350 -Connection ~ 6150 3450 -Wire Wire Line - 6150 3450 6250 3450 -Connection ~ 6150 3550 -Wire Wire Line - 6150 3550 6250 3550 -Connection ~ 6150 3650 -Wire Wire Line - 6150 3650 6250 3650 -Connection ~ 6150 3750 -Wire Wire Line - 6150 3750 6250 3750 -Connection ~ 6150 3850 -Wire Wire Line - 6150 3850 6250 3850 -Connection ~ 6150 3950 -Wire Wire Line - 6150 3950 6250 3950 + 3100 7205 3200 7205 Connection ~ 3200 4500 Connection ~ 3200 4400 Connection ~ 3200 4300 @@ -645,12 +606,76 @@ Connection ~ 3200 3900 Connection ~ 3200 3500 Connection ~ 3200 3600 Connection ~ 3200 4100 -Connection ~ 2900 5850 +Connection ~ 1085 4515 Wire Wire Line - 2900 5850 2900 5950 -Connection ~ 2900 5950 + 1085 4515 1085 4615 +Connection ~ 1085 4615 Wire Wire Line - 2900 5950 2900 6050 -Connection ~ 2900 6050 -Connection ~ 2900 5750 + 1085 4615 1085 4715 +Connection ~ 1085 4715 +Wire Wire Line + 2195 4895 2695 4895 +Wire Wire Line + 2695 5395 2195 5395 +Wire Wire Line + 2195 5495 2695 5495 +Wire Wire Line + 2695 5595 2195 5595 +Wire Wire Line + 2695 4895 2780 4895 +Wire Wire Line + 2780 4895 2780 4800 +Wire Wire Line + 2780 4800 3200 4800 +Connection ~ 2695 4895 +Wire Wire Line + 3195 4900 2825 4900 +Wire Wire Line + 2825 4900 2825 4995 +Wire Wire Line + 2195 4995 2695 4995 +Connection ~ 2695 4995 +Wire Wire Line + 2695 4995 2825 4995 +Wire Wire Line + 3200 5000 2880 5000 +Wire Wire Line + 2880 5000 2880 5095 +Wire Wire Line + 2880 5095 2695 5095 +Connection ~ 2695 5095 +Wire Wire Line + 3200 5100 2965 5100 +Wire Wire Line + 2965 5100 2965 5195 +Wire Wire Line + 2965 5195 2695 5195 +Connection ~ 2695 5195 +Wire Wire Line + 3200 5200 3015 5200 +Wire Wire Line + 3015 5200 3015 5295 +Wire Wire Line + 3015 5295 2695 5295 +Connection ~ 2695 5295 +Wire Wire Line + 3200 5300 3200 5395 +Wire Wire Line + 3200 5395 2695 5395 +Connection ~ 2695 5395 +Wire Wire Line + 2600 5705 3100 5705 +Connection ~ 3100 5705 +Wire Wire Line + 3100 5705 3200 5705 +Wire Wire Line + 3200 5605 2695 5605 +Wire Wire Line + 2695 5605 2695 5595 +Connection ~ 2695 5595 +Wire Wire Line + 2695 5495 3200 5495 +Wire Wire Line + 3200 5495 3200 5505 +Connection ~ 2695 5495 $EndSCHEMATC diff --git a/hardware/breakout_48_pin_174917/export/V0.1/V0.1.zip b/hardware/breakout_48_pin_174917/export/V0.1/V0.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..6430f3ec6b628ef57e4577333b55d19da771231e GIT binary patch literal 118980 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 z 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 Date: Sat, 21 Mar 2020 19:41:14 -0400 Subject: [PATCH 168/171] motronic 55 --- .../gerbers/motronic-wire-adapter-0.1.zip | Bin 0 -> 51750 bytes .../motronic-wire-adapter.kicad_pcb | 2470 +++++++++++++++++ .../breakout_55_pin/motronic-wire-adapter.pro | 90 + 3 files changed, 2560 insertions(+) create mode 100644 hardware/breakout_55_pin/gerbers/motronic-wire-adapter-0.1.zip create mode 100644 hardware/breakout_55_pin/motronic-wire-adapter.kicad_pcb create mode 100644 hardware/breakout_55_pin/motronic-wire-adapter.pro diff --git a/hardware/breakout_55_pin/gerbers/motronic-wire-adapter-0.1.zip b/hardware/breakout_55_pin/gerbers/motronic-wire-adapter-0.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..3678ed616fe196c2469cbb5c72f30f0257b4e49d GIT binary patch literal 51750 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 QdBX2JF%gk)^Kt6`02rMFn*aa+ literal 0 HcmV?d00001 diff --git a/hardware/breakout_55_pin/motronic-wire-adapter.kicad_pcb b/hardware/breakout_55_pin/motronic-wire-adapter.kicad_pcb new file mode 100644 index 0000000000..baa7e42318 --- /dev/null +++ b/hardware/breakout_55_pin/motronic-wire-adapter.kicad_pcb @@ -0,0 +1,2470 @@ +(kicad_pcb (version 20171130) (host pcbnew 5.1.5-52549c5~84~ubuntu18.04.1) + + (general + (thickness 1.6) + (drawings 156) + (tracks 258) + (zones 0) + (modules 10) + (nets 57) + ) + + (page A3) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + ) + + (setup + (last_trace_width 1.5) + (user_trace_width 0.3) + (user_trace_width 0.5) + (user_trace_width 0.6) + (user_trace_width 0.7) + (user_trace_width 0.8) + (user_trace_width 0.9) + (user_trace_width 1) + (user_trace_width 1.5) + (user_trace_width 2) + (trace_clearance 0.3) + (zone_clearance 0.5) + (zone_45_only no) + (trace_min 0.254) + (via_size 0.889) + (via_drill 0.635) + (via_min_size 0.889) + (via_min_drill 0.508) + (uvia_size 0.508) + (uvia_drill 0.127) + (uvias_allowed no) + (uvia_min_size 0.508) + (uvia_min_drill 0.127) + (edge_width 0.1) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 4.064 4.064) + (pad_drill 3.048) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements 7FFFFFFF) + (pcbplotparams + (layerselection 0x010fc_80000001) + (usegerberextensions true) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (excludeedgelayer true) + (linewidth 0.150000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory "963063-15_55_pin_connector_gerbers")) + ) + + (net 0 "") + (net 1 GND) + (net 2 N-000001) + (net 3 N-0000010) + (net 4 N-0000011) + (net 5 N-0000012) + (net 6 N-0000013) + (net 7 N-0000014) + (net 8 N-0000015) + (net 9 N-0000016) + (net 10 N-0000017) + (net 11 N-0000018) + (net 12 N-0000019) + (net 13 N-000002) + (net 14 N-0000020) + (net 15 N-0000021) + (net 16 N-0000022) + (net 17 N-0000023) + (net 18 N-0000024) + (net 19 N-0000025) + (net 20 N-0000026) + (net 21 N-0000027) + (net 22 N-0000028) + (net 23 N-0000029) + (net 24 N-000003) + (net 25 N-0000030) + (net 26 N-0000031) + (net 27 N-0000032) + (net 28 N-0000033) + (net 29 N-0000034) + (net 30 N-0000035) + (net 31 N-0000036) + (net 32 N-0000037) + (net 33 N-0000038) + (net 34 N-0000039) + (net 35 N-000004) + (net 36 N-0000040) + (net 37 N-0000041) + (net 38 N-0000042) + (net 39 N-0000043) + (net 40 N-0000044) + (net 41 N-0000046) + (net 42 N-0000047) + (net 43 N-0000048) + (net 44 N-0000049) + (net 45 N-000005) + (net 46 N-0000050) + (net 47 N-0000051) + (net 48 N-0000052) + (net 49 N-0000053) + (net 50 N-0000054) + (net 51 N-0000055) + (net 52 N-0000056) + (net 53 N-000006) + (net 54 N-000007) + (net 55 N-000008) + (net 56 N-000009) + + (net_class Default "Это класс цепей по умолчанию." + (clearance 0.3) + (trace_width 0.3) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + (add_net GND) + (add_net N-000001) + (add_net N-0000010) + (add_net N-0000011) + (add_net N-0000012) + (add_net N-0000013) + (add_net N-0000014) + (add_net N-0000015) + (add_net N-0000016) + (add_net N-0000017) + (add_net N-0000018) + (add_net N-0000019) + (add_net N-000002) + (add_net N-0000020) + (add_net N-0000021) + (add_net N-0000022) + (add_net N-0000023) + (add_net N-0000024) + (add_net N-0000025) + (add_net N-0000026) + (add_net N-0000027) + (add_net N-0000028) + (add_net N-0000029) + (add_net N-000003) + (add_net N-0000030) + (add_net N-0000031) + (add_net N-0000032) + (add_net N-0000033) + (add_net N-0000034) + (add_net N-0000035) + (add_net N-0000036) + (add_net N-0000037) + (add_net N-0000038) + (add_net N-0000039) + (add_net N-000004) + (add_net N-0000040) + (add_net N-0000041) + (add_net N-0000042) + (add_net N-0000043) + (add_net N-0000044) + (add_net N-0000046) + (add_net N-0000047) + (add_net N-0000048) + (add_net N-0000049) + (add_net N-000005) + (add_net N-0000050) + (add_net N-0000051) + (add_net N-0000052) + (add_net N-0000053) + (add_net N-0000054) + (add_net N-0000055) + (add_net N-0000056) + (add_net N-000006) + (add_net N-000007) + (add_net N-000008) + (add_net N-000009) + ) + + (module rusEFI_Modules:55pin_china_bosch_motronic (layer F.Cu) (tedit 5E763381) (tstamp 54212F31) + (at 220 168.5 180) + (path /542111B3) + (fp_text reference P1 (at 0 27.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MOTRONIC (at 0 2.25) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 52 4.5) (end 49.5 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 66.5 4.5) (end 74.5 4.5) (layer F.SilkS) (width 0.3)) + (fp_line (start -75.5 4.5) (end -83 4.5) (layer F.SilkS) (width 0.3)) + (fp_line (start -71 0) (end -75.5 4.5) (layer F.SilkS) (width 0.3)) + (fp_line (start 62 0) (end 66.5 4.5) (layer F.SilkS) (width 0.3)) + (fp_line (start -71 0) (end 62 0) (layer F.SilkS) (width 0.3)) + (fp_line (start -83 4.5) (end -83 3) (layer F.SilkS) (width 0.12)) + (fp_line (start -81.5 4.5) (end -83 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 74.5 4.5) (end 74.5 3) (layer F.SilkS) (width 0.12)) + (fp_line (start 73 4.5) (end 74.5 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 57 4.5) (end 63 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 54 7.5) (end 57 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 54 9.5) (end 54 7.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 52 9.5) (end 54 9.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 52 4.5) (end 52 9.5) (layer F.SilkS) (width 0.12)) + (fp_line (start -65 4.5) (end -71.5 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start -62.5 7) (end -65 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start -62.5 9.5) (end -62.5 7) (layer F.SilkS) (width 0.12)) + (fp_line (start -59 9.5) (end -62.5 9.5) (layer F.SilkS) (width 0.12)) + (fp_line (start -59 7) (end -59 9.5) (layer F.SilkS) (width 0.12)) + (fp_line (start -60.5 7) (end -59 7) (layer F.SilkS) (width 0.12)) + (fp_line (start -60.5 4.5) (end -60.5 7) (layer F.SilkS) (width 0.12)) + (fp_line (start -81.5 10.5) (end -81.5 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start -71.5 10.5) (end -71.5 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 63 10.5) (end 63 4.5) (layer F.SilkS) (width 0.12)) + (fp_line (start 73 10.5) (end 73 4.5) (layer F.SilkS) (width 0.12)) + (fp_arc (start 68 10.5) (end 63 10.5) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_arc (start -76.5 10.5) (end -81.5 10.5) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 49.5 5) (end 49.5 4) (layer F.SilkS) (width 0.12)) + (fp_line (start 51.5 5) (end 49.5 5) (layer F.SilkS) (width 0.12)) + (fp_line (start 51.5 7) (end 51.5 5) (layer F.SilkS) (width 0.12)) + (fp_line (start 49.5 7) (end 51.5 7) (layer F.SilkS) (width 0.12)) + (fp_line (start -60.5 6) (end -58.5 6) (layer F.SilkS) (width 0.12)) + (fp_line (start -60.5 4) (end -60.5 6) (layer F.SilkS) (width 0.12)) + (fp_line (start -60.5 4) (end 49.5 4) (layer F.SilkS) (width 0.12)) + (fp_line (start -58.5 9) (end -58.5 6) (layer F.SilkS) (width 0.12)) + (fp_line (start -49.5 9) (end -58.5 9) (layer F.SilkS) (width 0.12)) + (fp_line (start -43.5 15) (end -49.5 9) (layer F.SilkS) (width 0.12)) + (fp_line (start 49.5 15.5) (end 49.5 7) (layer F.SilkS) (width 0.12)) + (fp_line (start 44.5 15) (end 44.5 15.5) (layer F.SilkS) (width 0.12)) + (fp_arc (start 47 15.5) (end 44.5 15.5) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 44.5 15) (end -43.5 15) (layer F.SilkS) (width 0.12)) + (fp_text user 55 (at 42.5 15.5) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 50 (at 17.5 15.5) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 45 (at -7.5 15.5) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 40 (at -32.5 15.5) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 38 (at -42.5 15.5) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 25 (at -17.5 10) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 20 (at -42.5 10) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 37 (at 42.5 10) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 19 (at 45 6) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 35 (at 32.5 10) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 30 (at 7.5 10) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 15 (at 25 6) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 10 (at 0 6) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 5 (at -25 6) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user 1 (at -45 6) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad "" np_thru_hole circle (at 68 10.5 180) (size 7 7) (drill 3.5) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -76.5 10.5 180) (size 7 7) (drill 3.5) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -53 7 180) (size 2 2) (drill 2) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 47 15.5 180) (size 2 2) (drill 2) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 55 8.5 180) (size 4.5 4.5) (drill 4.5) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -63 8.5 180) (size 4.5 4.5) (drill 4.5) (layers *.Cu *.Mask)) + (pad 1 thru_hole roundrect (at -45 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.25) + (net 13 N-000002)) + (pad 20 thru_hole circle (at -42.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 15 N-0000021)) + (pad 2 thru_hole circle (at -40 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 24 N-000003)) + (pad 3 thru_hole circle (at -35 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 35 N-000004)) + (pad 4 thru_hole circle (at -30 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 45 N-000005)) + (pad 5 thru_hole circle (at -25 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 53 N-000006)) + (pad 6 thru_hole circle (at -20 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 54 N-000007)) + (pad 7 thru_hole circle (at -15 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 55 N-000008)) + (pad 8 thru_hole circle (at -10 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 56 N-000009)) + (pad 9 thru_hole circle (at -5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 3 N-0000010)) + (pad 10 thru_hole circle (at 0 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 4 N-0000011)) + (pad 11 thru_hole circle (at 5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 2 N-000001)) + (pad 12 thru_hole circle (at 10 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 6 N-0000013)) + (pad 13 thru_hole circle (at 15 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 7 N-0000014)) + (pad 14 thru_hole circle (at 20 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 8 N-0000015)) + (pad 15 thru_hole circle (at 25 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 9 N-0000016)) + (pad 16 thru_hole circle (at 30 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 10 N-0000017)) + (pad 17 thru_hole circle (at 35 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 11 N-0000018)) + (pad 18 thru_hole circle (at 40 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 12 N-0000019)) + (pad 19 thru_hole circle (at 45 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 14 N-0000020)) + (pad 21 thru_hole circle (at -37.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 16 N-0000022)) + (pad 22 thru_hole circle (at -32.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 29 N-0000034)) + (pad 23 thru_hole circle (at -27.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 42 N-0000047)) + (pad 24 thru_hole circle (at -22.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 43 N-0000048)) + (pad 25 thru_hole circle (at -17.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 44 N-0000049)) + (pad 26 thru_hole circle (at -12.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 46 N-0000050)) + (pad 27 thru_hole circle (at -7.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 47 N-0000051)) + (pad 28 thru_hole circle (at -2.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 48 N-0000052)) + (pad 29 thru_hole circle (at 2.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 49 N-0000053)) + (pad 30 thru_hole circle (at 7.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 50 N-0000054)) + (pad 31 thru_hole circle (at 12.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 51 N-0000055)) + (pad 32 thru_hole circle (at 17.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 52 N-0000056)) + (pad 33 thru_hole circle (at 22.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 41 N-0000046)) + (pad 34 thru_hole circle (at 27.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 18 N-0000024)) + (pad 35 thru_hole circle (at 32.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 19 N-0000025)) + (pad 36 thru_hole circle (at 37.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 20 N-0000026)) + (pad 37 thru_hole circle (at 42.5 8 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 21 N-0000027)) + (pad 38 thru_hole circle (at -42.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 22 N-0000028)) + (pad 39 thru_hole circle (at -37.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 23 N-0000029)) + (pad 40 thru_hole circle (at -32.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 25 N-0000030)) + (pad 41 thru_hole circle (at -27.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 26 N-0000031)) + (pad 42 thru_hole circle (at -22.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 27 N-0000032)) + (pad 43 thru_hole circle (at -17.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 28 N-0000033)) + (pad 44 thru_hole circle (at -12.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 17 N-0000023)) + (pad 45 thru_hole circle (at -7.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 30 N-0000035)) + (pad 46 thru_hole circle (at -2.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 31 N-0000036)) + (pad 47 thru_hole circle (at 2.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 32 N-0000037)) + (pad 48 thru_hole circle (at 7.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 33 N-0000038)) + (pad 49 thru_hole circle (at 12.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 34 N-0000039)) + (pad 50 thru_hole circle (at 17.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 36 N-0000040)) + (pad 51 thru_hole circle (at 22.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 37 N-0000041)) + (pad 52 thru_hole circle (at 27.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 38 N-0000042)) + (pad 53 thru_hole circle (at 32.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 39 N-0000043)) + (pad 54 thru_hole circle (at 37.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 40 N-0000044)) + (pad 55 thru_hole circle (at 42.5 13.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 5 N-0000012)) + ) + + (module CON19X5 (layer F.Cu) (tedit 5421128E) (tstamp 5E7645A1) + (at 220 145 180) + (path /542111C2) + (fp_text reference P2 (at 0 7.5 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_19 (at 0 -7.5 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -22.5 -5) (end -22.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -22.5 5) (end -17.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.5 5) (end -17.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -17.5 -5) (end -12.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.5 -5) (end -12.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -12.5 5) (end -7.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.5 5) (end -7.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -7.5 -5) (end -2.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.5 -5) (end -2.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.5 5) (end 2.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.5 5) (end 2.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.5 -5) (end 7.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.5 -5) (end 7.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 7.5 5) (end 12.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.5 5) (end 12.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 12.5 -5) (end 17.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.5 -5) (end 17.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 17.5 5) (end 22.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.5 5) (end 22.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 22.5 -5) (end 27.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.5 -5) (end 27.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 27.5 5) (end 32.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 32.5 5) (end 32.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 32.5 -5) (end 37.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 37.5 -5) (end 37.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 37.5 5) (end 42.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 42.5 5) (end 42.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -27.5 5) (end -27.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -32.5 -5) (end -32.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -37.5 5) (end -37.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -42.5 -5) (end -42.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -47.5 -5) (end -47.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -47.5 5) (end 47.5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 47.5 5) (end 47.5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 47.5 -5) (end -47.5 -5) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -45 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 13 N-000002)) + (pad 2 thru_hole circle (at -40 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 24 N-000003)) + (pad 3 thru_hole circle (at -35 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 35 N-000004)) + (pad 4 thru_hole circle (at -30 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 45 N-000005)) + (pad 5 thru_hole circle (at -25 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 53 N-000006)) + (pad 6 thru_hole circle (at -20 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 54 N-000007)) + (pad 7 thru_hole circle (at -15 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 55 N-000008)) + (pad 8 thru_hole circle (at -10 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 56 N-000009)) + (pad 9 thru_hole circle (at -5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 3 N-0000010)) + (pad 10 thru_hole circle (at 0 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 4 N-0000011)) + (pad 11 thru_hole circle (at 5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 2 N-000001)) + (pad 12 thru_hole circle (at 10 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 6 N-0000013)) + (pad 13 thru_hole circle (at 15 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 7 N-0000014)) + (pad 14 thru_hole circle (at 20 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 8 N-0000015)) + (pad 15 thru_hole circle (at 25 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 9 N-0000016)) + (pad 16 thru_hole circle (at 30 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 10 N-0000017)) + (pad 17 thru_hole circle (at 35 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 11 N-0000018)) + (pad 18 thru_hole circle (at 40 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 12 N-0000019)) + (pad 19 thru_hole circle (at 45 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 14 N-0000020)) + (pad 1 thru_hole circle (at -45 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 13 N-000002)) + (pad 2 thru_hole circle (at -40 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 24 N-000003)) + (pad 3 thru_hole circle (at -35 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 35 N-000004)) + (pad 4 thru_hole circle (at -30 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 45 N-000005)) + (pad 5 thru_hole circle (at -25 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 53 N-000006)) + (pad 6 thru_hole circle (at -20 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 54 N-000007)) + (pad 7 thru_hole circle (at -15 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 55 N-000008)) + (pad 8 thru_hole circle (at -10 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 56 N-000009)) + (pad 9 thru_hole circle (at -5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 3 N-0000010)) + (pad 10 thru_hole circle (at 0 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 4 N-0000011)) + (pad 11 thru_hole circle (at 5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 2 N-000001)) + (pad 12 thru_hole circle (at 10 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 6 N-0000013)) + (pad 13 thru_hole circle (at 15 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 7 N-0000014)) + (pad 14 thru_hole circle (at 20 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 8 N-0000015)) + (pad 15 thru_hole circle (at 25 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 9 N-0000016)) + (pad 16 thru_hole circle (at 30 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 10 N-0000017)) + (pad 17 thru_hole circle (at 35 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 11 N-0000018)) + (pad 18 thru_hole circle (at 40 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 12 N-0000019)) + (pad 19 thru_hole circle (at 45 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 14 N-0000020)) + ) + + (module CON18X5 (layer F.Cu) (tedit 5421131E) (tstamp 54212E8B) + (at 220 135 180) + (path /54211270) + (fp_text reference P3 (at 0 7.5 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_18 (at 0 -7.5 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -45 -5) (end 45 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -45 5) (end 45 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -20 -5) (end -20 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -20 5) (end -15 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -15 5) (end -15 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -15 -5) (end -10 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -10 -5) (end -10 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -10 5) (end -5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -5 5) (end -5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -5 -5) (end 0 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -5) (end 0 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 5) (end 5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 5 5) (end 5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 5 -5) (end 10 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 10 -5) (end 10 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 10 5) (end 15 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 15 5) (end 15 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 15 -5) (end 20 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 20 -5) (end 20 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 20 5) (end 25 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 25 5) (end 25 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 25 -5) (end 30 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 30 -5) (end 30 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 30 5) (end 35 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 35 5) (end 35 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 35 -5) (end 40 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 40 -5) (end 40 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 40 5) (end 45 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 45 5) (end 45 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -25 5) (end -25 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -30 -5) (end -30 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -35 5) (end -35 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -40 -5) (end -40 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -45 -5) (end -45 5) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -42.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 15 N-0000021)) + (pad 2 thru_hole circle (at -37.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 16 N-0000022)) + (pad 3 thru_hole circle (at -32.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 29 N-0000034)) + (pad 4 thru_hole circle (at -27.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 42 N-0000047)) + (pad 5 thru_hole circle (at -22.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 43 N-0000048)) + (pad 6 thru_hole circle (at -17.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 44 N-0000049)) + (pad 7 thru_hole circle (at -12.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 46 N-0000050)) + (pad 8 thru_hole circle (at -7.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 47 N-0000051)) + (pad 9 thru_hole circle (at -2.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 48 N-0000052)) + (pad 10 thru_hole circle (at 2.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 49 N-0000053)) + (pad 11 thru_hole circle (at 7.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 50 N-0000054)) + (pad 12 thru_hole circle (at 12.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 51 N-0000055)) + (pad 13 thru_hole circle (at 17.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 52 N-0000056)) + (pad 14 thru_hole circle (at 22.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 41 N-0000046)) + (pad 15 thru_hole circle (at 27.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 18 N-0000024)) + (pad 16 thru_hole circle (at 32.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 19 N-0000025)) + (pad 17 thru_hole circle (at 37.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 20 N-0000026)) + (pad 18 thru_hole circle (at 42.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 21 N-0000027)) + (pad 1 thru_hole circle (at -42.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 15 N-0000021)) + (pad 2 thru_hole circle (at -37.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 16 N-0000022)) + (pad 3 thru_hole circle (at -32.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 29 N-0000034)) + (pad 4 thru_hole circle (at -27.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 42 N-0000047)) + (pad 5 thru_hole circle (at -22.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 43 N-0000048)) + (pad 6 thru_hole circle (at -17.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 44 N-0000049)) + (pad 7 thru_hole circle (at -12.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 46 N-0000050)) + (pad 8 thru_hole circle (at -7.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 47 N-0000051)) + (pad 9 thru_hole circle (at -2.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 48 N-0000052)) + (pad 10 thru_hole circle (at 2.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 49 N-0000053)) + (pad 11 thru_hole circle (at 7.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 50 N-0000054)) + (pad 12 thru_hole circle (at 12.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 51 N-0000055)) + (pad 13 thru_hole circle (at 17.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 52 N-0000056)) + (pad 14 thru_hole circle (at 22.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 41 N-0000046)) + (pad 15 thru_hole circle (at 27.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 18 N-0000024)) + (pad 16 thru_hole circle (at 32.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 19 N-0000025)) + (pad 17 thru_hole circle (at 37.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 20 N-0000026)) + (pad 18 thru_hole circle (at 42.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 21 N-0000027)) + ) + + (module CON18X5 (layer F.Cu) (tedit 5421131E) (tstamp 54212ED5) + (at 220 125 180) + (path /5421127F) + (fp_text reference P4 (at 0 7.5 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_18 (at 0 -7.5 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -45 -5) (end 45 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -45 5) (end 45 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -20 -5) (end -20 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -20 5) (end -15 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -15 5) (end -15 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -15 -5) (end -10 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -10 -5) (end -10 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -10 5) (end -5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -5 5) (end -5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -5 -5) (end 0 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 -5) (end 0 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 0 5) (end 5 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 5 5) (end 5 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 5 -5) (end 10 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 10 -5) (end 10 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 10 5) (end 15 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 15 5) (end 15 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 15 -5) (end 20 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 20 -5) (end 20 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 20 5) (end 25 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 25 5) (end 25 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 25 -5) (end 30 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 30 -5) (end 30 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 30 5) (end 35 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 35 5) (end 35 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 35 -5) (end 40 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start 40 -5) (end 40 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 40 5) (end 45 5) (layer F.SilkS) (width 0.15)) + (fp_line (start 45 5) (end 45 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -25 5) (end -25 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -30 -5) (end -30 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -35 5) (end -35 -5) (layer F.SilkS) (width 0.15)) + (fp_line (start -40 -5) (end -40 5) (layer F.SilkS) (width 0.15)) + (fp_line (start -45 -5) (end -45 5) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -42.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 22 N-0000028)) + (pad 2 thru_hole circle (at -37.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 23 N-0000029)) + (pad 3 thru_hole circle (at -32.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 25 N-0000030)) + (pad 4 thru_hole circle (at -27.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 26 N-0000031)) + (pad 5 thru_hole circle (at -22.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 27 N-0000032)) + (pad 6 thru_hole circle (at -17.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 28 N-0000033)) + (pad 7 thru_hole circle (at -12.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 17 N-0000023)) + (pad 8 thru_hole circle (at -7.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 30 N-0000035)) + (pad 9 thru_hole circle (at -2.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 31 N-0000036)) + (pad 10 thru_hole circle (at 2.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 32 N-0000037)) + (pad 11 thru_hole circle (at 7.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 33 N-0000038)) + (pad 12 thru_hole circle (at 12.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 34 N-0000039)) + (pad 13 thru_hole circle (at 17.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 36 N-0000040)) + (pad 14 thru_hole circle (at 22.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 37 N-0000041)) + (pad 15 thru_hole circle (at 27.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 38 N-0000042)) + (pad 16 thru_hole circle (at 32.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 39 N-0000043)) + (pad 17 thru_hole circle (at 37.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 40 N-0000044)) + (pad 18 thru_hole circle (at 42.5 2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 5 N-0000012)) + (pad 1 thru_hole circle (at -42.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 22 N-0000028)) + (pad 2 thru_hole circle (at -37.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 23 N-0000029)) + (pad 3 thru_hole circle (at -32.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 25 N-0000030)) + (pad 4 thru_hole circle (at -27.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 26 N-0000031)) + (pad 5 thru_hole circle (at -22.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 27 N-0000032)) + (pad 6 thru_hole circle (at -17.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 28 N-0000033)) + (pad 7 thru_hole circle (at -12.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 17 N-0000023)) + (pad 8 thru_hole circle (at -7.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 30 N-0000035)) + (pad 9 thru_hole circle (at -2.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 31 N-0000036)) + (pad 10 thru_hole circle (at 2.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 32 N-0000037)) + (pad 11 thru_hole circle (at 7.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 33 N-0000038)) + (pad 12 thru_hole circle (at 12.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 34 N-0000039)) + (pad 13 thru_hole circle (at 17.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 36 N-0000040)) + (pad 14 thru_hole circle (at 22.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 37 N-0000041)) + (pad 15 thru_hole circle (at 27.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 38 N-0000042)) + (pad 16 thru_hole circle (at 32.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 39 N-0000043)) + (pad 17 thru_hole circle (at 37.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 40 N-0000044)) + (pad 18 thru_hole circle (at 42.5 -2.5 180) (size 2.5 2.5) (drill 1) (layers *.Cu *.Mask F.SilkS) + (net 5 N-0000012)) + ) + + (module 1pin (layer F.Cu) (tedit 200000) (tstamp 5E763D3E) + (at 296.75 124) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path 1pin) + (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + ) + + (module 1pin (layer F.Cu) (tedit 200000) (tstamp 5E763D4D) + (at 296.75 149) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path 1pin) + (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + ) + + (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54214764) + (at 151.75 149) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path 1pin) + (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + ) + + (module 1pin (layer F.Cu) (tedit 200000) (tstamp 5E763DB0) + (at 151.75 124) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path 1pin) + (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS)) + ) + + (module PIN_ARRAY_1 (layer F.Cu) (tedit 542125D8) (tstamp 5421477F) + (at 157.5 135) + (descr "1 pin") + (tags "CONN DEV") + (path /5421258F) + (fp_text reference P5 (at 0 -1.905) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.1524))) + ) + (fp_text value CONN_1 (at 0 -1.905) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.1524))) + ) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.1524)) + (fp_line (start -1.27 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.1524)) + (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.1524)) + (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.1524)) + (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 GND)) + (model pin_array\pin_1.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIN_ARRAY_1 (layer F.Cu) (tedit 4E4E744E) (tstamp 5E765208) + (at 282.5 135) + (descr "1 pin") + (tags "CONN DEV") + (path /54212643) + (fp_text reference P6 (at 0 -1.905) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.1524))) + ) + (fp_text value CONN_1 (at 0 -1.905) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.1524))) + ) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.1524)) + (fp_line (start -1.27 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.1524)) + (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.1524)) + (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.1524)) + (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 1 GND)) + (model pin_array\pin_1.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_text 45 (at 227.5 125 180) (layer B.SilkS) (tstamp 5E765C47) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 44 (at 232.5 125 180) (layer B.SilkS) (tstamp 5E765C46) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 50 (at 202.5 125 180) (layer B.SilkS) (tstamp 5E765C45) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 51 (at 197.5 125 180) (layer B.SilkS) (tstamp 5E765C44) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 48 (at 212.5 125 180) (layer B.SilkS) (tstamp 5E765C43) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 41 (at 247.5 125 180) (layer B.SilkS) (tstamp 5E765C42) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 39 (at 257.5 125 180) (layer B.SilkS) (tstamp 5E765C41) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 54 (at 182.5 125 180) (layer B.SilkS) (tstamp 5E765C40) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 52 (at 192.5 125 180) (layer B.SilkS) (tstamp 5E765C3F) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 46 (at 222.5 125 180) (layer B.SilkS) (tstamp 5E765C3E) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 49 (at 207.5 125 180) (layer B.SilkS) (tstamp 5E765C3D) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 53 (at 187.5 125 180) (layer B.SilkS) (tstamp 5E765C3C) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 47 (at 217.5 125 180) (layer B.SilkS) (tstamp 5E765C3B) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 43 (at 237.5 125 180) (layer B.SilkS) (tstamp 5E765C3A) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 42 (at 242.5 125 180) (layer B.SilkS) (tstamp 5E765C39) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 40 (at 252.5 125 180) (layer B.SilkS) (tstamp 5E765C38) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 30 (at 212.5 135 180) (layer B.SilkS) (tstamp 5E765C07) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 33 (at 197.5 135 180) (layer B.SilkS) (tstamp 5E765C06) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 36 (at 182.5 135 180) (layer B.SilkS) (tstamp 5E765C05) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 21 (at 257.5 135 180) (layer B.SilkS) (tstamp 5E765C04) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 26 (at 232.5 135 180) (layer B.SilkS) (tstamp 5E765C03) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 28 (at 222.5 135 180) (layer B.SilkS) (tstamp 5E765C02) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 24 (at 242.5 135 180) (layer B.SilkS) (tstamp 5E765C01) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 22 (at 252.5 135 180) (layer B.SilkS) (tstamp 5E765C00) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 31 (at 207.5 135 180) (layer B.SilkS) (tstamp 5E765BFF) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 34 (at 192.5 135 180) (layer B.SilkS) (tstamp 5E765BFE) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 35 (at 187.5 135 180) (layer B.SilkS) (tstamp 5E765BFD) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 27 (at 227.5 135 180) (layer B.SilkS) (tstamp 5E765BFC) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 23 (at 247.5 135 180) (layer B.SilkS) (tstamp 5E765BFB) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 25 (at 237.5 135 180) (layer B.SilkS) (tstamp 5E765BFA) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 32 (at 202.5 135 180) (layer B.SilkS) (tstamp 5E765BF9) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 29 (at 217.5 135 180) (layer B.SilkS) (tstamp 5E765BF8) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 11 (at 215 145 180) (layer B.SilkS) (tstamp 5E765A72) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 16 (at 190 145 180) (layer B.SilkS) (tstamp 5E765A71) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 7 (at 235 145 180) (layer B.SilkS) (tstamp 5E765A70) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 18 (at 180 145 180) (layer B.SilkS) (tstamp 5E765A6F) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 5 (at 245 145 180) (layer B.SilkS) (tstamp 5E765A6E) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 14 (at 200 145 180) (layer B.SilkS) (tstamp 5E765A6D) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 13 (at 205 145 180) (layer B.SilkS) (tstamp 5E765A6C) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 17 (at 185 145 180) (layer B.SilkS) (tstamp 5E765A6B) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 10 (at 220 145 180) (layer B.SilkS) (tstamp 5E765A6A) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 6 (at 240 145 180) (layer B.SilkS) (tstamp 5E765A69) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 15 (at 195 145 180) (layer B.SilkS) (tstamp 5E765A68) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 3 (at 255 145 180) (layer B.SilkS) (tstamp 5E765A67) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 4 (at 250 145 180) (layer B.SilkS) (tstamp 5E765A66) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 9 (at 225 145 180) (layer B.SilkS) (tstamp 5E765A65) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 8 (at 230 145 180) (layer B.SilkS) (tstamp 5E765A64) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 2 (at 260 145 180) (layer B.SilkS) (tstamp 5E765A63) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 8 (at 230 145 180) (layer B.SilkS) (tstamp 5E765A62) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 12 (at 210 145 180) (layer B.SilkS) (tstamp 5E765A61) + (effects (font (size 1.5 2) (thickness 0.3)) (justify mirror)) + ) + (gr_text 11 (at 215 145 180) (layer F.SilkS) (tstamp 5E765A72) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 16 (at 190 145 180) (layer F.SilkS) (tstamp 5E765A71) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 7 (at 235 145 180) (layer F.SilkS) (tstamp 5E765A70) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 18 (at 180 145 180) (layer F.SilkS) (tstamp 5E765A6F) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 5 (at 245 145 180) (layer F.SilkS) (tstamp 5E765A6E) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 14 (at 200 145 180) (layer F.SilkS) (tstamp 5E765A6D) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 13 (at 205 145 180) (layer F.SilkS) (tstamp 5E765A6C) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 17 (at 185 145 180) (layer F.SilkS) (tstamp 5E765A6B) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 10 (at 220 145 180) (layer F.SilkS) (tstamp 5E765A6A) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 6 (at 240 145 180) (layer F.SilkS) (tstamp 5E765A69) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 15 (at 195 145 180) (layer F.SilkS) (tstamp 5E765A68) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 3 (at 255 145 180) (layer F.SilkS) (tstamp 5E765A67) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 4 (at 250 145 180) (layer F.SilkS) (tstamp 5E765A66) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 9 (at 225 145 180) (layer F.SilkS) (tstamp 5E765A65) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 8 (at 230 145 180) (layer F.SilkS) (tstamp 5E765A64) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 2 (at 260 145 180) (layer F.SilkS) (tstamp 5E765A63) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 8 (at 230 145 180) (layer F.SilkS) (tstamp 5E765A62) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 12 (at 210 145 180) (layer F.SilkS) (tstamp 5E765A61) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text GND (at 157.5 131 180) (layer F.SilkS) + (effects (font (size 3 3) (thickness 0.3))) + ) + (gr_text 54 (at 182.5 125 180) (layer F.SilkS) (tstamp 5E765A1D) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 53 (at 187.5 125 180) (layer F.SilkS) (tstamp 5E765A1B) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 52 (at 192.5 125 180) (layer F.SilkS) (tstamp 5E765A19) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 51 (at 197.5 125 180) (layer F.SilkS) (tstamp 5E765A17) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 50 (at 202.5 125 180) (layer F.SilkS) (tstamp 5E765A15) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 49 (at 207.5 125 180) (layer F.SilkS) (tstamp 5E765A13) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 48 (at 212.5 125 180) (layer F.SilkS) (tstamp 5E765A11) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 47 (at 217.5 125 180) (layer F.SilkS) (tstamp 5E765A0F) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 46 (at 222.5 125 180) (layer F.SilkS) (tstamp 5E765A0D) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 45 (at 227.5 125 180) (layer F.SilkS) (tstamp 5E765A0B) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 44 (at 232.5 125 180) (layer F.SilkS) (tstamp 5E765A09) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 43 (at 237.5 125 180) (layer F.SilkS) (tstamp 5E765A07) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 42 (at 242.5 125 180) (layer F.SilkS) (tstamp 5E765A05) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 41 (at 247.5 125 180) (layer F.SilkS) (tstamp 5E765A03) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 40 (at 252.5 125 180) (layer F.SilkS) (tstamp 5E765A01) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 39 (at 257.5 125 180) (layer F.SilkS) (tstamp 5E7659FC) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 36 (at 182.5 135 180) (layer F.SilkS) (tstamp 5E7659D8) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 35 (at 187.5 135 180) (layer F.SilkS) (tstamp 5E7659D6) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 34 (at 192.5 135 180) (layer F.SilkS) (tstamp 5E7659D4) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 33 (at 197.5 135 180) (layer F.SilkS) (tstamp 5E7659D2) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 32 (at 202.5 135 180) (layer F.SilkS) (tstamp 5E7659D0) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 31 (at 207.5 135 180) (layer F.SilkS) (tstamp 5E7659CE) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 30 (at 212.5 135 180) (layer F.SilkS) (tstamp 5E7659CC) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 29 (at 217.5 135 180) (layer F.SilkS) (tstamp 5E7659CA) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 28 (at 222.5 135 180) (layer F.SilkS) (tstamp 5E7659C8) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 27 (at 227.5 135 180) (layer F.SilkS) (tstamp 5E7659C6) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 26 (at 232.5 135 180) (layer F.SilkS) (tstamp 5E7659C4) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 25 (at 237.5 135 180) (layer F.SilkS) (tstamp 5E7659C2) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 24 (at 242.5 135 180) (layer F.SilkS) (tstamp 5E7659C0) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 23 (at 247.5 135 180) (layer F.SilkS) (tstamp 5E7659BE) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 22 (at 252.5 135 180) (layer F.SilkS) (tstamp 5E7659BC) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 21 (at 257.5 135 180) (layer F.SilkS) (tstamp 5E7659B7) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 18 (at 180 145 180) (layer F.SilkS) (tstamp 5E76598F) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 17 (at 185 145 180) (layer F.SilkS) (tstamp 5E76598D) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 16 (at 190 145 180) (layer F.SilkS) (tstamp 5E76598B) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 15 (at 195 145 180) (layer F.SilkS) (tstamp 5E765989) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 14 (at 200 145 180) (layer F.SilkS) (tstamp 5E765987) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 13 (at 205 145 180) (layer F.SilkS) (tstamp 5E765985) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 12 (at 210 145 180) (layer F.SilkS) (tstamp 5E765983) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 11 (at 215 145 180) (layer F.SilkS) (tstamp 5E765981) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 10 (at 220 145 180) (layer F.SilkS) (tstamp 5E76597F) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 9 (at 225 145 180) (layer F.SilkS) (tstamp 5E76597D) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 8 (at 230 145 180) (layer F.SilkS) (tstamp 5E76597B) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 7 (at 235 145 180) (layer F.SilkS) (tstamp 5E765979) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 6 (at 240 145 180) (layer F.SilkS) (tstamp 5E765977) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 5 (at 245 145 180) (layer F.SilkS) (tstamp 5E765975) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 4 (at 250 145 180) (layer F.SilkS) (tstamp 5E765973) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 3 (at 255 145 180) (layer F.SilkS) (tstamp 5E765971) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text 8 (at 230 145 180) (layer F.SilkS) (tstamp 5E764502) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_line (start 295.5 164) (end 303 164) (layer Edge.Cuts) (width 0.1) (tstamp 5E763D2C)) + (gr_line (start 291 168.5) (end 295.5 164) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 153.5 164) (end 145.5 164) (layer Edge.Cuts) (width 0.1) (tstamp 5E763D2B)) + (gr_line (start 158 168.5) (end 153.5 164) (layer Edge.Cuts) (width 0.1)) + (gr_text 2 (at 260 145 180) (layer F.SilkS) (tstamp 5E764644) + (effects (font (size 1.5 2) (thickness 0.3))) + ) + (gr_text "rusEfi 55 pin\nMOTRONIC 0.1" (at 283 140.5 180) (layer F.SilkS) + (effects (font (size 2 2) (thickness 0.3))) + ) + (gr_text "rusEfi 55 pin\nMOTRONIC 0.1" (at 282.448 140 180) (layer B.SilkS) + (effects (font (size 2 2) (thickness 0.3)) (justify mirror)) + ) + (gr_line (start 265 120) (end 265 130) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 175 120) (end 265 120) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 175 130) (end 175 120) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 175 130) (end 175 140) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 265 130) (end 175 130) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 265 140) (end 265 130) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 172.5 140) (end 267.5 140) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 172.5 150) (end 172.5 140) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 267.5 150) (end 172.5 150) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 267.5 140) (end 267.5 150) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_text GND (at 282.5 131.5 180) (layer B.SilkS) + (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) + ) + (gr_text GND (at 157.5 131.5 180) (layer B.SilkS) + (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) + ) + (gr_text GND (at 282.5 131 180) (layer F.SilkS) + (effects (font (size 3 3) (thickness 0.3))) + ) + (gr_text 1 (at 270 145 180) (layer B.SilkS) + (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) + ) + (gr_text "20\n" (at 268 135 180) (layer B.SilkS) (tstamp 5E76521B) + (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) + ) + (gr_text "38\n" (at 268 125 180) (layer B.SilkS) + (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) + ) + (gr_text "19\n" (at 169.5 145 180) (layer B.SilkS) + (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) + ) + (gr_text 37 (at 172 135 180) (layer B.SilkS) + (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) + ) + (gr_text 55 (at 172 125 180) (layer B.SilkS) + (effects (font (size 3 3) (thickness 0.3)) (justify mirror)) + ) + (gr_text "19\n" (at 169.5 145 180) (layer F.SilkS) + (effects (font (size 3 3) (thickness 0.3))) + ) + (gr_text 37 (at 172 135 180) (layer F.SilkS) + (effects (font (size 3 3) (thickness 0.3))) + ) + (gr_text 55 (at 172 125 180) (layer F.SilkS) + (effects (font (size 3 3) (thickness 0.3))) + ) + (gr_text "38\n" (at 268 125 180) (layer F.SilkS) (tstamp 5E765A42) + (effects (font (size 3 3) (thickness 0.3))) + ) + (gr_text "20\n" (at 268 135 180) (layer F.SilkS) + (effects (font (size 3 3) (thickness 0.3))) + ) + (gr_text 1 (at 269 145 180) (layer F.SilkS) (tstamp 5E765A58) + (effects (font (size 3 3) (thickness 0.3))) + ) + (gr_line (start 303 164) (end 303 120) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 158 168.5) (end 291 168.5) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 145.5 120) (end 145.5 164) (angle 90) (layer Edge.Cuts) (width 0.1)) + (dimension 48.5 (width 0.3) (layer Eco2.User) + (gr_text "48,49876 mm" (at 128.9 144.25 270) (layer Eco2.User) + (effects (font (size 1.5 1.5) (thickness 0.3))) + ) + (feature1 (pts (xy 158 168.5) (xy 130.413579 168.5))) + (feature2 (pts (xy 158 120) (xy 130.413579 120))) + (crossbar (pts (xy 131 120) (xy 131 168.5))) + (arrow1a (pts (xy 131 168.5) (xy 130.413579 167.373496))) + (arrow1b (pts (xy 131 168.5) (xy 131.586421 167.373496))) + (arrow2a (pts (xy 131 120) (xy 130.413579 121.126504))) + (arrow2b (pts (xy 131 120) (xy 131.586421 121.126504))) + ) + (dimension 157.5 (width 0.3) (layer Eco2.User) + (gr_text "157,50032 mm" (at 224.25 107.900001) (layer Eco2.User) + (effects (font (size 1.5 1.5) (thickness 0.3))) + ) + (feature1 (pts (xy 303 120) (xy 303 109.41358))) + (feature2 (pts (xy 145.5 120) (xy 145.5 109.41358))) + (crossbar (pts (xy 145.5 110.000001) (xy 303 110.000001))) + (arrow1a (pts (xy 303 110.000001) (xy 301.873496 110.586422))) + (arrow1b (pts (xy 303 110.000001) (xy 301.873496 109.41358))) + (arrow2a (pts (xy 145.5 110.000001) (xy 146.626504 110.586422))) + (arrow2b (pts (xy 145.5 110.000001) (xy 146.626504 109.41358))) + ) + (gr_line (start 145.5 120) (end 303 120) (angle 90) (layer Edge.Cuts) (width 0.1)) + + (segment (start 215 160) (end 215 147.5) (width 1.5) (layer F.Cu) (net 2)) + (segment (start 215 147.5) (end 215 142.5) (width 1.5) (layer F.Cu) (net 2) (tstamp 542135E2)) + (segment (start 225 160) (end 225 147.5) (width 1.5) (layer F.Cu) (net 3)) + (segment (start 225 147.5) (end 225 142.5) (width 1.5) (layer F.Cu) (net 3) (tstamp 542135E8)) + (segment (start 220 160) (end 220 147.5) (width 1.5) (layer F.Cu) (net 4)) + (segment (start 220 147.5) (end 220 142.5) (width 1.5) (layer F.Cu) (net 4) (tstamp 542135E5)) + (segment (start 177.5 152.5) (end 177.5 141) (width 1.5) (layer F.Cu) (net 5)) + (segment (start 175 130) (end 177.5 127.5) (width 1.5) (layer F.Cu) (net 5) (tstamp 542135C6)) + (segment (start 175 138.5) (end 175 130) (width 1.5) (layer F.Cu) (net 5) (tstamp 542135C5)) + (segment (start 177.5 141) (end 175 138.5) (width 1.5) (layer F.Cu) (net 5) (tstamp 542135C4)) + (segment (start 177.5 127.5) (end 177.5 122.5) (width 1.5) (layer F.Cu) (net 5) (tstamp 542135C7)) + (segment (start 177.5 152.5) (end 177.5 155) (width 1.5) (layer F.Cu) (net 5)) + (segment (start 210 160) (end 210 147.5) (width 1.5) (layer F.Cu) (net 6)) + (segment (start 210 147.5) (end 210 142.5) (width 1.5) (layer F.Cu) (net 6) (tstamp 542135DF)) + (segment (start 205 160) (end 205 147.5) (width 1.5) (layer F.Cu) (net 7)) + (segment (start 205 147.5) (end 205 142.5) (width 1.5) (layer F.Cu) (net 7) (tstamp 542135DC)) + (segment (start 200 160) (end 200 147.5) (width 1.5) (layer F.Cu) (net 8)) + (segment (start 200 147.5) (end 200 142.5) (width 1.5) (layer F.Cu) (net 8) (tstamp 542135D9)) + (segment (start 195 160) (end 195 147.5) (width 1.5) (layer F.Cu) (net 9)) + (segment (start 195 147.5) (end 195 142.5) (width 1.5) (layer F.Cu) (net 9) (tstamp 542135D6)) + (segment (start 190 160) (end 190 147.5) (width 1.5) (layer F.Cu) (net 10)) + (segment (start 190 147.5) (end 190 142.5) (width 1.5) (layer F.Cu) (net 10) (tstamp 542135D3)) + (segment (start 185 160) (end 185 147.5) (width 1.5) (layer F.Cu) (net 11)) + (segment (start 185 147.5) (end 185 142.5) (width 1.5) (layer F.Cu) (net 11) (tstamp 542135D0)) + (segment (start 180 160) (end 180 147.5) (width 1.5) (layer F.Cu) (net 12)) + (segment (start 180 147.5) (end 180 142.5) (width 1.5) (layer F.Cu) (net 12) (tstamp 542135CD)) + (segment (start 265 160) (end 265 147.5) (width 1.5) (layer F.Cu) (net 13)) + (segment (start 265 147.5) (end 265 142.5) (width 1.5) (layer F.Cu) (net 13) (tstamp 54213600)) + (segment (start 175 147.5) (end 175 142.5) (width 1.5) (layer F.Cu) (net 14) (tstamp 542135CA)) + (segment (start 175.69999 153.766008) (end 175 154.465998) (width 1.5) (layer F.Cu) (net 14)) + (segment (start 175 154.465998) (end 175 160.5) (width 1.5) (layer F.Cu) (net 14)) + (segment (start 175 147.5) (end 175 151.5) (width 1.5) (layer F.Cu) (net 14)) + (segment (start 175.69999 152.19999) (end 175.69999 153.766008) (width 1.5) (layer F.Cu) (net 14)) + (segment (start 175 151.5) (end 175.69999 152.19999) (width 1.5) (layer F.Cu) (net 14)) + (segment (start 262.5 137.5) (end 262.5 132.5) (width 1.5) (layer B.Cu) (net 15)) + (segment (start 262.5 159) (end 262.5 160.5) (width 1.5) (layer B.Cu) (net 15)) + (segment (start 265 156.5) (end 262.5 159) (width 1.5) (layer B.Cu) (net 15)) + (segment (start 262.5 137.5) (end 262.5 149.5) (width 1.5) (layer B.Cu) (net 15)) + (segment (start 265 152) (end 265 156.5) (width 1.5) (layer B.Cu) (net 15)) + (segment (start 262.5 149.5) (end 265 152) (width 1.5) (layer B.Cu) (net 15)) + (segment (start 257.5 137.5) (end 257.5 132.5) (width 1.5) (layer B.Cu) (net 16)) + (segment (start 257.5 137.5) (end 257.5 149.5) (width 1.5) (layer B.Cu) (net 16)) + (segment (start 257.5 149.5) (end 260 152) (width 1.5) (layer B.Cu) (net 16)) + (segment (start 260 152) (end 260 156) (width 1.5) (layer B.Cu) (net 16)) + (segment (start 257.5 158.5) (end 257.5 160.5) (width 1.5) (layer B.Cu) (net 16)) + (segment (start 260 156) (end 257.5 158.5) (width 1.5) (layer B.Cu) (net 16)) + (segment (start 232.5 122.5) (end 232.5 127.5) (width 1.5) (layer F.Cu) (net 17)) + (segment (start 232.5 152.5) (end 232.5 141) (width 1.5) (layer F.Cu) (net 17)) + (segment (start 230 130) (end 232.5 127.5) (width 1.5) (layer F.Cu) (net 17) (tstamp 54213583)) + (segment (start 230 138.5) (end 230 130) (width 1.5) (layer F.Cu) (net 17) (tstamp 54213582)) + (segment (start 232.5 141) (end 230 138.5) (width 1.5) (layer F.Cu) (net 17) (tstamp 54213581)) + (segment (start 232.5 152.5) (end 232.5 155) (width 1.5) (layer F.Cu) (net 17)) + (segment (start 192.5 137.5) (end 192.5 132.5) (width 1.5) (layer B.Cu) (net 18)) + (segment (start 192.5 137.5) (end 192.5 150) (width 1.5) (layer B.Cu) (net 18)) + (segment (start 192.5 150) (end 195 152.5) (width 1.5) (layer B.Cu) (net 18)) + (segment (start 195 152.5) (end 195 156) (width 1.5) (layer B.Cu) (net 18)) + (segment (start 192.5 158.5) (end 192.5 160.5) (width 1.5) (layer B.Cu) (net 18)) + (segment (start 195 156) (end 192.5 158.5) (width 1.5) (layer B.Cu) (net 18)) + (segment (start 187.5 137.5) (end 187.5 132.5) (width 1.5) (layer B.Cu) (net 19)) + (segment (start 187.5 158.5) (end 187.5 160.5) (width 1.5) (layer B.Cu) (net 19)) + (segment (start 190 156) (end 187.5 158.5) (width 1.5) (layer B.Cu) (net 19)) + (segment (start 190 152.5) (end 190 156) (width 1.5) (layer B.Cu) (net 19)) + (segment (start 187.5 137.5) (end 187.5 150) (width 1.5) (layer B.Cu) (net 19)) + (segment (start 187.5 150) (end 190 152.5) (width 1.5) (layer B.Cu) (net 19)) + (segment (start 182.5 137.5) (end 182.5 132.5) (width 1.5) (layer B.Cu) (net 20)) + (segment (start 182.5 158.5) (end 182.5 160.5) (width 1.5) (layer B.Cu) (net 20)) + (segment (start 185 156) (end 182.5 158.5) (width 1.5) (layer B.Cu) (net 20)) + (segment (start 185 152.5) (end 185 156) (width 1.5) (layer B.Cu) (net 20)) + (segment (start 182.5 137.5) (end 182.5 150) (width 1.5) (layer B.Cu) (net 20)) + (segment (start 182.5 150) (end 185 152.5) (width 1.5) (layer B.Cu) (net 20)) + (segment (start 177.5 137.5) (end 177.5 132.5) (width 1.5) (layer B.Cu) (net 21) (tstamp 54213676)) + (segment (start 177.5 158.5) (end 177.5 160.5) (width 1.5) (layer B.Cu) (net 21)) + (segment (start 180 152.5) (end 180 156) (width 1.5) (layer B.Cu) (net 21)) + (segment (start 177.5 137.5) (end 177.5 150) (width 1.5) (layer B.Cu) (net 21)) + (segment (start 180 156) (end 177.5 158.5) (width 1.5) (layer B.Cu) (net 21)) + (segment (start 177.5 150) (end 180 152.5) (width 1.5) (layer B.Cu) (net 21)) + (segment (start 262.5 122.5) (end 262.5 127.5) (width 1.5) (layer F.Cu) (net 22)) + (segment (start 262.5 141) (end 262.5 152.5) (width 1.5) (layer F.Cu) (net 22)) + (segment (start 260 138.5) (end 262.5 141) (width 1.5) (layer F.Cu) (net 22)) + (segment (start 262.5 127.5) (end 260 130) (width 1.5) (layer F.Cu) (net 22)) + (segment (start 262.5 152.5) (end 262.5 155) (width 1.5) (layer F.Cu) (net 22)) + (segment (start 260 130) (end 260 138.5) (width 1.5) (layer F.Cu) (net 22)) + (segment (start 257.5 152.5) (end 257.5 141) (width 1.5) (layer F.Cu) (net 23)) + (segment (start 255 130) (end 257.5 127.5) (width 1.5) (layer F.Cu) (net 23) (tstamp 54213564)) + (segment (start 255 138.5) (end 255 130) (width 1.5) (layer F.Cu) (net 23) (tstamp 54213563)) + (segment (start 257.5 141) (end 255 138.5) (width 1.5) (layer F.Cu) (net 23) (tstamp 54213562)) + (segment (start 257.5 127.5) (end 257.5 122.5) (width 1.5) (layer F.Cu) (net 23) (tstamp 54213565)) + (segment (start 257.5 152.5) (end 257.5 155) (width 1.5) (layer F.Cu) (net 23)) + (segment (start 260 160) (end 260 147.5) (width 1.5) (layer F.Cu) (net 24)) + (segment (start 260 147.5) (end 260 142.5) (width 1.5) (layer F.Cu) (net 24) (tstamp 542135FD)) + (segment (start 252.5 152.5) (end 252.5 141) (width 1.5) (layer F.Cu) (net 25)) + (segment (start 250 130) (end 252.5 127.5) (width 1.5) (layer F.Cu) (net 25) (tstamp 5421356A)) + (segment (start 250 138.5) (end 250 130) (width 1.5) (layer F.Cu) (net 25) (tstamp 54213569)) + (segment (start 252.5 141) (end 250 138.5) (width 1.5) (layer F.Cu) (net 25) (tstamp 54213568)) + (segment (start 252.5 127.5) (end 252.5 122.5) (width 1.5) (layer F.Cu) (net 25) (tstamp 5421356B)) + (segment (start 252.5 152.5) (end 252.5 155) (width 1.5) (layer F.Cu) (net 25)) + (segment (start 247.5 127.5) (end 247.5 122.5) (width 1.5) (layer F.Cu) (net 26) (tstamp 54213572)) + (segment (start 247.5 152.5) (end 247.5 155) (width 1.5) (layer F.Cu) (net 26)) + (segment (start 247.5 141) (end 247.5 152.5) (width 1.5) (layer F.Cu) (net 26)) + (segment (start 245 138.5) (end 247.5 141) (width 1.5) (layer F.Cu) (net 26)) + (segment (start 247.5 127.5) (end 245 130) (width 1.5) (layer F.Cu) (net 26)) + (segment (start 245 130) (end 245 138.5) (width 1.5) (layer F.Cu) (net 26)) + (segment (start 242.5 152.5) (end 242.5 141) (width 1.5) (layer F.Cu) (net 27)) + (segment (start 240 130) (end 242.5 127.5) (width 1.5) (layer F.Cu) (net 27) (tstamp 54213577)) + (segment (start 240 138.5) (end 240 130) (width 1.5) (layer F.Cu) (net 27) (tstamp 54213576)) + (segment (start 242.5 141) (end 240 138.5) (width 1.5) (layer F.Cu) (net 27) (tstamp 54213575)) + (segment (start 242.5 127.5) (end 242.5 122.5) (width 1.5) (layer F.Cu) (net 27) (tstamp 54213578)) + (segment (start 242.5 152.5) (end 242.5 155) (width 1.5) (layer F.Cu) (net 27)) + (segment (start 237.5 152.5) (end 237.5 141) (width 1.5) (layer F.Cu) (net 28)) + (segment (start 235 130) (end 237.5 127.5) (width 1.5) (layer F.Cu) (net 28) (tstamp 5421357D)) + (segment (start 235 138.5) (end 235 130) (width 1.5) (layer F.Cu) (net 28) (tstamp 5421357C)) + (segment (start 237.5 141) (end 235 138.5) (width 1.5) (layer F.Cu) (net 28) (tstamp 5421357B)) + (segment (start 237.5 127.5) (end 237.5 122.5) (width 1.5) (layer F.Cu) (net 28) (tstamp 5421357E)) + (segment (start 237.5 152.5) (end 237.5 155) (width 1.5) (layer F.Cu) (net 28)) + (segment (start 252.5 137.5) (end 252.5 132.5) (width 1.5) (layer B.Cu) (net 29)) + (segment (start 252.5 137.5) (end 252.5 149.5) (width 1.5) (layer B.Cu) (net 29)) + (segment (start 252.5 149.5) (end 255 152) (width 1.5) (layer B.Cu) (net 29)) + (segment (start 255 152) (end 255 156) (width 1.5) (layer B.Cu) (net 29)) + (segment (start 252.5 158.5) (end 252.5 160.5) (width 1.5) (layer B.Cu) (net 29)) + (segment (start 255 156) (end 252.5 158.5) (width 1.5) (layer B.Cu) (net 29)) + (segment (start 227.5 152.5) (end 227.5 141) (width 1.5) (layer F.Cu) (net 30)) + (segment (start 225 130) (end 227.5 127.5) (width 1.5) (layer F.Cu) (net 30) (tstamp 5421358A)) + (segment (start 225 138.5) (end 225 130) (width 1.5) (layer F.Cu) (net 30) (tstamp 54213589)) + (segment (start 227.5 141) (end 225 138.5) (width 1.5) (layer F.Cu) (net 30) (tstamp 54213588)) + (segment (start 227.5 127.5) (end 227.5 122.5) (width 1.5) (layer F.Cu) (net 30) (tstamp 5421358B)) + (segment (start 227.5 152.5) (end 227.5 155) (width 1.5) (layer F.Cu) (net 30)) + (segment (start 222.5 152.5) (end 222.5 141) (width 1.5) (layer F.Cu) (net 31)) + (segment (start 220 130) (end 222.5 127.5) (width 1.5) (layer F.Cu) (net 31) (tstamp 54213590)) + (segment (start 220 138.5) (end 220 130) (width 1.5) (layer F.Cu) (net 31) (tstamp 5421358F)) + (segment (start 222.5 141) (end 220 138.5) (width 1.5) (layer F.Cu) (net 31) (tstamp 5421358E)) + (segment (start 222.5 127.5) (end 222.5 122.5) (width 1.5) (layer F.Cu) (net 31) (tstamp 54213591)) + (segment (start 222.5 152.5) (end 222.5 155) (width 1.5) (layer F.Cu) (net 31)) + (segment (start 217.5 152.5) (end 217.5 141) (width 1.5) (layer F.Cu) (net 32)) + (segment (start 215 130) (end 217.5 127.5) (width 1.5) (layer F.Cu) (net 32) (tstamp 54213596)) + (segment (start 215 138.5) (end 215 130) (width 1.5) (layer F.Cu) (net 32) (tstamp 54213595)) + (segment (start 217.5 141) (end 215 138.5) (width 1.5) (layer F.Cu) (net 32) (tstamp 54213594)) + (segment (start 217.5 127.5) (end 217.5 122.5) (width 1.5) (layer F.Cu) (net 32) (tstamp 54213597)) + (segment (start 217.5 152.5) (end 217.5 155) (width 1.5) (layer F.Cu) (net 32)) + (segment (start 212.5 152.5) (end 212.5 141) (width 1.5) (layer F.Cu) (net 33)) + (segment (start 210 130) (end 212.5 127.5) (width 1.5) (layer F.Cu) (net 33) (tstamp 5421359C)) + (segment (start 210 138.5) (end 210 130) (width 1.5) (layer F.Cu) (net 33) (tstamp 5421359B)) + (segment (start 212.5 141) (end 210 138.5) (width 1.5) (layer F.Cu) (net 33) (tstamp 5421359A)) + (segment (start 212.5 127.5) (end 212.5 122.5) (width 1.5) (layer F.Cu) (net 33) (tstamp 5421359D)) + (segment (start 212.5 152.5) (end 212.5 155) (width 1.5) (layer F.Cu) (net 33)) + (segment (start 207.5 152.5) (end 207.5 141) (width 1.5) (layer F.Cu) (net 34)) + (segment (start 205 130) (end 207.5 127.5) (width 1.5) (layer F.Cu) (net 34) (tstamp 542135A2)) + (segment (start 205 138.5) (end 205 130) (width 1.5) (layer F.Cu) (net 34) (tstamp 542135A1)) + (segment (start 207.5 141) (end 205 138.5) (width 1.5) (layer F.Cu) (net 34) (tstamp 542135A0)) + (segment (start 207.5 127.5) (end 207.5 122.5) (width 1.5) (layer F.Cu) (net 34) (tstamp 542135A3)) + (segment (start 207.5 152.5) (end 207.5 155) (width 1.5) (layer F.Cu) (net 34)) + (segment (start 255 160) (end 255 147.5) (width 1.5) (layer F.Cu) (net 35)) + (segment (start 255 147.5) (end 255 142.5) (width 1.5) (layer F.Cu) (net 35) (tstamp 542135FA)) + (segment (start 202.5 152.5) (end 202.5 141) (width 1.5) (layer F.Cu) (net 36)) + (segment (start 200 130) (end 202.5 127.5) (width 1.5) (layer F.Cu) (net 36) (tstamp 542135A8)) + (segment (start 200 138.5) (end 200 130) (width 1.5) (layer F.Cu) (net 36) (tstamp 542135A7)) + (segment (start 202.5 141) (end 200 138.5) (width 1.5) (layer F.Cu) (net 36) (tstamp 542135A6)) + (segment (start 202.5 127.5) (end 202.5 122.5) (width 1.5) (layer F.Cu) (net 36) (tstamp 542135A9)) + (segment (start 202.5 152.5) (end 202.5 155) (width 1.5) (layer F.Cu) (net 36)) + (segment (start 197.5 152.5) (end 197.5 141) (width 1.5) (layer F.Cu) (net 37)) + (segment (start 195 130) (end 197.5 127.5) (width 1.5) (layer F.Cu) (net 37) (tstamp 542135AE)) + (segment (start 195 138.5) (end 195 130) (width 1.5) (layer F.Cu) (net 37) (tstamp 542135AD)) + (segment (start 197.5 141) (end 195 138.5) (width 1.5) (layer F.Cu) (net 37) (tstamp 542135AC)) + (segment (start 197.5 127.5) (end 197.5 122.5) (width 1.5) (layer F.Cu) (net 37) (tstamp 542135AF)) + (segment (start 197.5 152.5) (end 197.5 155) (width 1.5) (layer F.Cu) (net 37)) + (segment (start 192.5 127.5) (end 192.5 122.5) (width 1.5) (layer F.Cu) (net 38) (tstamp 542135B5)) + (segment (start 192.5 153.5) (end 192.5 155) (width 1.5) (layer F.Cu) (net 38)) + (segment (start 192.5 141) (end 192.5 153.5) (width 1.5) (layer F.Cu) (net 38)) + (segment (start 190 138.5) (end 192.5 141) (width 1.5) (layer F.Cu) (net 38)) + (segment (start 192.5 127.5) (end 190 130) (width 1.5) (layer F.Cu) (net 38)) + (segment (start 190 130) (end 190 138.5) (width 1.5) (layer F.Cu) (net 38)) + (segment (start 187.5 152.5) (end 187.5 141) (width 1.5) (layer F.Cu) (net 39)) + (segment (start 185 130) (end 187.5 127.5) (width 1.5) (layer F.Cu) (net 39) (tstamp 542135BA)) + (segment (start 185 138.5) (end 185 130) (width 1.5) (layer F.Cu) (net 39) (tstamp 542135B9)) + (segment (start 187.5 141) (end 185 138.5) (width 1.5) (layer F.Cu) (net 39) (tstamp 542135B8)) + (segment (start 187.5 127.5) (end 187.5 122.5) (width 1.5) (layer F.Cu) (net 39) (tstamp 542135BB)) + (segment (start 187.5 152.5) (end 187.5 155) (width 1.5) (layer F.Cu) (net 39)) + (segment (start 182.5 152.5) (end 182.5 141) (width 1.5) (layer F.Cu) (net 40)) + (segment (start 180 130) (end 182.5 127.5) (width 1.5) (layer F.Cu) (net 40) (tstamp 542135C0)) + (segment (start 180 138.5) (end 180 130) (width 1.5) (layer F.Cu) (net 40) (tstamp 542135BF)) + (segment (start 182.5 141) (end 180 138.5) (width 1.5) (layer F.Cu) (net 40) (tstamp 542135BE)) + (segment (start 182.5 127.5) (end 182.5 122.5) (width 1.5) (layer F.Cu) (net 40) (tstamp 542135C1)) + (segment (start 182.5 152.5) (end 182.5 155) (width 1.5) (layer F.Cu) (net 40)) + (segment (start 197.5 137.5) (end 197.5 132.5) (width 1.5) (layer B.Cu) (net 41) (tstamp 5421365C)) + (segment (start 197.5 137.5) (end 197.5 150) (width 1.5) (layer B.Cu) (net 41)) + (segment (start 197.5 150) (end 200 152.5) (width 1.5) (layer B.Cu) (net 41)) + (segment (start 200 152.5) (end 200 156) (width 1.5) (layer B.Cu) (net 41)) + (segment (start 197.5 158.5) (end 197.5 160.5) (width 1.5) (layer B.Cu) (net 41)) + (segment (start 200 156) (end 197.5 158.5) (width 1.5) (layer B.Cu) (net 41)) + (segment (start 247.5 137.5) (end 247.5 132.5) (width 1.5) (layer B.Cu) (net 42)) + (segment (start 247.5 137.5) (end 247.5 149.5) (width 1.5) (layer B.Cu) (net 42)) + (segment (start 247.5 149.5) (end 250 152) (width 1.5) (layer B.Cu) (net 42)) + (segment (start 250 152) (end 250 156) (width 1.5) (layer B.Cu) (net 42)) + (segment (start 247.5 158.5) (end 247.5 160.5) (width 1.5) (layer B.Cu) (net 42)) + (segment (start 250 156) (end 247.5 158.5) (width 1.5) (layer B.Cu) (net 42)) + (segment (start 242.5 137.5) (end 242.5 132.5) (width 1.5) (layer B.Cu) (net 43)) + (segment (start 242.5 137.5) (end 242.5 149.5) (width 1.5) (layer B.Cu) (net 43)) + (segment (start 242.5 149.5) (end 245 152) (width 1.5) (layer B.Cu) (net 43)) + (segment (start 245 152) (end 245 156) (width 1.5) (layer B.Cu) (net 43)) + (segment (start 242.5 158.5) (end 242.5 160.5) (width 1.5) (layer B.Cu) (net 43)) + (segment (start 245 156) (end 242.5 158.5) (width 1.5) (layer B.Cu) (net 43)) + (segment (start 237.5 132.5) (end 237.5 137.5) (width 1.5) (layer B.Cu) (net 44)) + (segment (start 237.5 137.5) (end 237.5 149.5) (width 1.5) (layer B.Cu) (net 44)) + (segment (start 237.5 149.5) (end 240 152) (width 1.5) (layer B.Cu) (net 44)) + (segment (start 240 152) (end 240 156) (width 1.5) (layer B.Cu) (net 44)) + (segment (start 237.5 158.5) (end 237.5 160.5) (width 1.5) (layer B.Cu) (net 44)) + (segment (start 240 156) (end 237.5 158.5) (width 1.5) (layer B.Cu) (net 44)) + (segment (start 250 160) (end 250 147.5) (width 1.5) (layer F.Cu) (net 45)) + (segment (start 250 147.5) (end 250 142.5) (width 1.5) (layer F.Cu) (net 45) (tstamp 542135F7)) + (segment (start 232.5 137.5) (end 232.5 132.5) (width 1.5) (layer B.Cu) (net 46)) + (segment (start 232.5 158.5) (end 232.5 160.5) (width 1.5) (layer B.Cu) (net 46)) + (segment (start 235 156) (end 232.5 158.5) (width 1.5) (layer B.Cu) (net 46)) + (segment (start 235 152) (end 235 156) (width 1.5) (layer B.Cu) (net 46)) + (segment (start 232.5 137.5) (end 232.5 149.5) (width 1.5) (layer B.Cu) (net 46)) + (segment (start 232.5 149.5) (end 235 152) (width 1.5) (layer B.Cu) (net 46)) + (segment (start 227.5 132.5) (end 227.5 137.5) (width 1.5) (layer B.Cu) (net 47)) + (segment (start 227.5 158.5) (end 227.5 160.5) (width 1.5) (layer B.Cu) (net 47)) + (segment (start 230 156) (end 227.5 158.5) (width 1.5) (layer B.Cu) (net 47)) + (segment (start 230 152.5) (end 230 156) (width 1.5) (layer B.Cu) (net 47)) + (segment (start 227.5 137.5) (end 227.5 150) (width 1.5) (layer B.Cu) (net 47)) + (segment (start 227.5 150) (end 230 152.5) (width 1.5) (layer B.Cu) (net 47)) + (segment (start 222.5 137.5) (end 222.5 132.5) (width 1.5) (layer B.Cu) (net 48)) + (segment (start 222.5 137.5) (end 222.5 150) (width 1.5) (layer B.Cu) (net 48)) + (segment (start 222.5 150) (end 225 152.5) (width 1.5) (layer B.Cu) (net 48)) + (segment (start 225 152.5) (end 225 156) (width 1.5) (layer B.Cu) (net 48)) + (segment (start 222.5 158.5) (end 222.5 160.5) (width 1.5) (layer B.Cu) (net 48)) + (segment (start 225 156) (end 222.5 158.5) (width 1.5) (layer B.Cu) (net 48)) + (segment (start 217.5 137.5) (end 217.5 132.5) (width 1.5) (layer B.Cu) (net 49) (tstamp 54213643)) + (segment (start 217.5 158.5) (end 217.5 160.5) (width 1.5) (layer B.Cu) (net 49)) + (segment (start 220 156) (end 217.5 158.5) (width 1.5) (layer B.Cu) (net 49)) + (segment (start 220 152.5) (end 220 156) (width 1.5) (layer B.Cu) (net 49)) + (segment (start 217.5 137.5) (end 217.5 150) (width 1.5) (layer B.Cu) (net 49)) + (segment (start 217.5 150) (end 220 152.5) (width 1.5) (layer B.Cu) (net 49)) + (segment (start 212.5 137.5) (end 212.5 132.5) (width 1.5) (layer B.Cu) (net 50)) + (segment (start 212.5 137.5) (end 212.5 150) (width 1.5) (layer B.Cu) (net 50)) + (segment (start 212.5 150) (end 215 152.5) (width 1.5) (layer B.Cu) (net 50)) + (segment (start 215 152.5) (end 215 156) (width 1.5) (layer B.Cu) (net 50)) + (segment (start 212.5 158.5) (end 212.5 160.5) (width 1.5) (layer B.Cu) (net 50)) + (segment (start 215 156) (end 212.5 158.5) (width 1.5) (layer B.Cu) (net 50)) + (segment (start 207.5 137.5) (end 207.5 132.5) (width 1.5) (layer B.Cu) (net 51)) + (segment (start 207.5 137.5) (end 207.5 150) (width 1.5) (layer B.Cu) (net 51)) + (segment (start 207.5 150) (end 210 152.5) (width 1.5) (layer B.Cu) (net 51)) + (segment (start 210 152.5) (end 210 156) (width 1.5) (layer B.Cu) (net 51)) + (segment (start 207.5 158.5) (end 207.5 160.5) (width 1.5) (layer B.Cu) (net 51)) + (segment (start 210 156) (end 207.5 158.5) (width 1.5) (layer B.Cu) (net 51)) + (segment (start 202.5 137.5) (end 202.5 132.5) (width 1.5) (layer B.Cu) (net 52)) + (segment (start 202.5 137.5) (end 202.5 150) (width 1.5) (layer B.Cu) (net 52)) + (segment (start 202.5 150) (end 205 152.5) (width 1.5) (layer B.Cu) (net 52)) + (segment (start 205 152.5) (end 205 156) (width 1.5) (layer B.Cu) (net 52)) + (segment (start 202.5 158.5) (end 202.5 160.5) (width 1.5) (layer B.Cu) (net 52)) + (segment (start 205 156) (end 202.5 158.5) (width 1.5) (layer B.Cu) (net 52)) + (segment (start 245 160) (end 245 147.5) (width 1.5) (layer F.Cu) (net 53)) + (segment (start 245 147.5) (end 245 142.5) (width 1.5) (layer F.Cu) (net 53) (tstamp 542135F4)) + (segment (start 240 160) (end 240 147.5) (width 1.5) (layer F.Cu) (net 54)) + (segment (start 240 147.5) (end 240 142.5) (width 1.5) (layer F.Cu) (net 54) (tstamp 542135F1)) + (segment (start 235 160) (end 235 147.5) (width 1.5) (layer F.Cu) (net 55)) + (segment (start 235 147.5) (end 235 142.5) (width 1.5) (layer F.Cu) (net 55) (tstamp 542135EE)) + (segment (start 230 160) (end 230 147.5) (width 1.5) (layer F.Cu) (net 56)) + (segment (start 230 147.5) (end 230 142.5) (width 1.5) (layer F.Cu) (net 56) (tstamp 542135EB)) + + (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 5E76478C) (hatch edge 0.508) + (connect_pads (clearance 0.5)) + (min_thickness 0.3) + (fill yes (arc_segments 16) (thermal_gap 0.254) (thermal_bridge_width 0.9)) + (polygon + (pts + (xy 303 168.5) (xy 145.5 168.5) (xy 145.5 120) (xy 303 120) + ) + ) + (filled_polygon + (pts + (xy 176.600013 120.816242) (xy 176.288821 121.024174) (xy 176.024174 121.288821) (xy 175.816242 121.600013) (xy 175.673016 121.945791) + (xy 175.6 122.312866) (xy 175.6 122.687134) (xy 175.673016 123.054209) (xy 175.816242 123.399987) (xy 176.024174 123.711179) + (xy 176.100001 123.787006) (xy 176.1 126.212995) (xy 176.024174 126.288821) (xy 175.816242 126.600013) (xy 175.673016 126.945791) + (xy 175.6 127.312866) (xy 175.6 127.420101) (xy 174.058682 128.96142) (xy 174.005262 129.005261) (xy 173.961421 129.058681) + (xy 173.961418 129.058684) (xy 173.906752 129.125295) (xy 173.830311 129.218438) (xy 173.772292 129.326984) (xy 173.700311 129.461651) + (xy 173.620257 129.725553) (xy 173.593227 130) (xy 173.600001 130.068779) (xy 173.6 138.431231) (xy 173.593227 138.5) + (xy 173.6 138.568769) (xy 173.6 138.568776) (xy 173.620257 138.774447) (xy 173.70031 139.038348) (xy 173.83031 139.281561) + (xy 174.005261 139.494738) (xy 174.058682 139.53858) (xy 175.120102 140.6) (xy 174.812866 140.6) (xy 174.445791 140.673016) + (xy 174.100013 140.816242) (xy 173.788821 141.024174) (xy 173.524174 141.288821) (xy 173.316242 141.600013) (xy 173.173016 141.945791) + (xy 173.1 142.312866) (xy 173.1 142.687134) (xy 173.173016 143.054209) (xy 173.316242 143.399987) (xy 173.524174 143.711179) + (xy 173.600001 143.787006) (xy 173.6 146.212995) (xy 173.524174 146.288821) (xy 173.316242 146.600013) (xy 173.173016 146.945791) + (xy 173.1 147.312866) (xy 173.1 147.687134) (xy 173.173016 148.054209) (xy 173.316242 148.399987) (xy 173.524174 148.711179) + (xy 173.6 148.787005) (xy 173.600001 151.431221) (xy 173.597033 151.461352) (xy 173.481287 151.413408) (xy 173.162511 151.35) + (xy 172.837489 151.35) (xy 172.518713 151.413408) (xy 172.218432 151.537789) (xy 171.948186 151.718361) (xy 171.718361 151.948186) + (xy 171.537789 152.218432) (xy 171.413408 152.518713) (xy 171.35 152.837489) (xy 171.35 153.162511) (xy 171.413408 153.481287) + (xy 171.537789 153.781568) (xy 171.718361 154.051814) (xy 171.948186 154.281639) (xy 172.218432 154.462211) (xy 172.518713 154.586592) + (xy 172.837489 154.65) (xy 173.162511 154.65) (xy 173.481287 154.586592) (xy 173.6 154.537419) (xy 173.600001 159.625325) + (xy 173.537789 159.718432) (xy 173.413408 160.018713) (xy 173.35 160.337489) (xy 173.35 160.662511) (xy 173.413408 160.981287) + (xy 173.537789 161.281568) (xy 173.718361 161.551814) (xy 173.948186 161.781639) (xy 174.218432 161.962211) (xy 174.518713 162.086592) + (xy 174.837489 162.15) (xy 175.162511 162.15) (xy 175.481287 162.086592) (xy 175.781568 161.962211) (xy 176.051814 161.781639) + (xy 176.25 161.583453) (xy 176.448186 161.781639) (xy 176.718432 161.962211) (xy 177.018713 162.086592) (xy 177.337489 162.15) + (xy 177.662511 162.15) (xy 177.981287 162.086592) (xy 178.281568 161.962211) (xy 178.551814 161.781639) (xy 178.75 161.583453) + (xy 178.948186 161.781639) (xy 179.218432 161.962211) (xy 179.518713 162.086592) (xy 179.837489 162.15) (xy 180.162511 162.15) + (xy 180.481287 162.086592) (xy 180.781568 161.962211) (xy 181.051814 161.781639) (xy 181.25 161.583453) (xy 181.448186 161.781639) + (xy 181.718432 161.962211) (xy 182.018713 162.086592) (xy 182.337489 162.15) (xy 182.662511 162.15) (xy 182.981287 162.086592) + (xy 183.281568 161.962211) (xy 183.551814 161.781639) (xy 183.75 161.583453) (xy 183.948186 161.781639) (xy 184.218432 161.962211) + (xy 184.518713 162.086592) (xy 184.837489 162.15) (xy 185.162511 162.15) (xy 185.481287 162.086592) (xy 185.781568 161.962211) + (xy 186.051814 161.781639) (xy 186.25 161.583453) (xy 186.448186 161.781639) (xy 186.718432 161.962211) (xy 187.018713 162.086592) + (xy 187.337489 162.15) (xy 187.662511 162.15) (xy 187.981287 162.086592) (xy 188.281568 161.962211) (xy 188.551814 161.781639) + (xy 188.75 161.583453) (xy 188.948186 161.781639) (xy 189.218432 161.962211) (xy 189.518713 162.086592) (xy 189.837489 162.15) + (xy 190.162511 162.15) (xy 190.481287 162.086592) (xy 190.781568 161.962211) (xy 191.051814 161.781639) (xy 191.25 161.583453) + (xy 191.448186 161.781639) (xy 191.718432 161.962211) (xy 192.018713 162.086592) (xy 192.337489 162.15) (xy 192.662511 162.15) + (xy 192.981287 162.086592) (xy 193.281568 161.962211) (xy 193.551814 161.781639) (xy 193.75 161.583453) (xy 193.948186 161.781639) + (xy 194.218432 161.962211) (xy 194.518713 162.086592) (xy 194.837489 162.15) (xy 195.162511 162.15) (xy 195.481287 162.086592) + (xy 195.781568 161.962211) (xy 196.051814 161.781639) (xy 196.25 161.583453) (xy 196.448186 161.781639) (xy 196.718432 161.962211) + (xy 197.018713 162.086592) (xy 197.337489 162.15) (xy 197.662511 162.15) (xy 197.981287 162.086592) (xy 198.281568 161.962211) + (xy 198.551814 161.781639) (xy 198.75 161.583453) (xy 198.948186 161.781639) (xy 199.218432 161.962211) (xy 199.518713 162.086592) + (xy 199.837489 162.15) (xy 200.162511 162.15) (xy 200.481287 162.086592) (xy 200.781568 161.962211) (xy 201.051814 161.781639) + (xy 201.25 161.583453) (xy 201.448186 161.781639) (xy 201.718432 161.962211) (xy 202.018713 162.086592) (xy 202.337489 162.15) + (xy 202.662511 162.15) (xy 202.981287 162.086592) (xy 203.281568 161.962211) (xy 203.551814 161.781639) (xy 203.75 161.583453) + (xy 203.948186 161.781639) (xy 204.218432 161.962211) (xy 204.518713 162.086592) (xy 204.837489 162.15) (xy 205.162511 162.15) + (xy 205.481287 162.086592) (xy 205.781568 161.962211) (xy 206.051814 161.781639) (xy 206.25 161.583453) (xy 206.448186 161.781639) + (xy 206.718432 161.962211) (xy 207.018713 162.086592) (xy 207.337489 162.15) (xy 207.662511 162.15) (xy 207.981287 162.086592) + (xy 208.281568 161.962211) (xy 208.551814 161.781639) (xy 208.75 161.583453) (xy 208.948186 161.781639) (xy 209.218432 161.962211) + (xy 209.518713 162.086592) (xy 209.837489 162.15) (xy 210.162511 162.15) (xy 210.481287 162.086592) (xy 210.781568 161.962211) + (xy 211.051814 161.781639) (xy 211.25 161.583453) (xy 211.448186 161.781639) (xy 211.718432 161.962211) (xy 212.018713 162.086592) + (xy 212.337489 162.15) (xy 212.662511 162.15) (xy 212.981287 162.086592) (xy 213.281568 161.962211) (xy 213.551814 161.781639) + (xy 213.75 161.583453) (xy 213.948186 161.781639) (xy 214.218432 161.962211) (xy 214.518713 162.086592) (xy 214.837489 162.15) + (xy 215.162511 162.15) (xy 215.481287 162.086592) (xy 215.781568 161.962211) (xy 216.051814 161.781639) (xy 216.25 161.583453) + (xy 216.448186 161.781639) (xy 216.718432 161.962211) (xy 217.018713 162.086592) (xy 217.337489 162.15) (xy 217.662511 162.15) + (xy 217.981287 162.086592) (xy 218.281568 161.962211) (xy 218.551814 161.781639) (xy 218.75 161.583453) (xy 218.948186 161.781639) + (xy 219.218432 161.962211) (xy 219.518713 162.086592) (xy 219.837489 162.15) (xy 220.162511 162.15) (xy 220.481287 162.086592) + (xy 220.781568 161.962211) (xy 221.051814 161.781639) (xy 221.25 161.583453) (xy 221.448186 161.781639) (xy 221.718432 161.962211) + (xy 222.018713 162.086592) (xy 222.337489 162.15) (xy 222.662511 162.15) (xy 222.981287 162.086592) (xy 223.281568 161.962211) + (xy 223.551814 161.781639) (xy 223.75 161.583453) (xy 223.948186 161.781639) (xy 224.218432 161.962211) (xy 224.518713 162.086592) + (xy 224.837489 162.15) (xy 225.162511 162.15) (xy 225.481287 162.086592) (xy 225.781568 161.962211) (xy 226.051814 161.781639) + (xy 226.25 161.583453) (xy 226.448186 161.781639) (xy 226.718432 161.962211) (xy 227.018713 162.086592) (xy 227.337489 162.15) + (xy 227.662511 162.15) (xy 227.981287 162.086592) (xy 228.281568 161.962211) (xy 228.551814 161.781639) (xy 228.75 161.583453) + (xy 228.948186 161.781639) (xy 229.218432 161.962211) (xy 229.518713 162.086592) (xy 229.837489 162.15) (xy 230.162511 162.15) + (xy 230.481287 162.086592) (xy 230.781568 161.962211) (xy 231.051814 161.781639) (xy 231.25 161.583453) (xy 231.448186 161.781639) + (xy 231.718432 161.962211) (xy 232.018713 162.086592) (xy 232.337489 162.15) (xy 232.662511 162.15) (xy 232.981287 162.086592) + (xy 233.281568 161.962211) (xy 233.551814 161.781639) (xy 233.75 161.583453) (xy 233.948186 161.781639) (xy 234.218432 161.962211) + (xy 234.518713 162.086592) (xy 234.837489 162.15) (xy 235.162511 162.15) (xy 235.481287 162.086592) (xy 235.781568 161.962211) + (xy 236.051814 161.781639) (xy 236.25 161.583453) (xy 236.448186 161.781639) (xy 236.718432 161.962211) (xy 237.018713 162.086592) + (xy 237.337489 162.15) (xy 237.662511 162.15) (xy 237.981287 162.086592) (xy 238.281568 161.962211) (xy 238.551814 161.781639) + (xy 238.75 161.583453) (xy 238.948186 161.781639) (xy 239.218432 161.962211) (xy 239.518713 162.086592) (xy 239.837489 162.15) + (xy 240.162511 162.15) (xy 240.481287 162.086592) (xy 240.781568 161.962211) (xy 241.051814 161.781639) (xy 241.25 161.583453) + (xy 241.448186 161.781639) (xy 241.718432 161.962211) (xy 242.018713 162.086592) (xy 242.337489 162.15) (xy 242.662511 162.15) + (xy 242.981287 162.086592) (xy 243.281568 161.962211) (xy 243.551814 161.781639) (xy 243.75 161.583453) (xy 243.948186 161.781639) + (xy 244.218432 161.962211) (xy 244.518713 162.086592) (xy 244.837489 162.15) (xy 245.162511 162.15) (xy 245.481287 162.086592) + (xy 245.781568 161.962211) (xy 246.051814 161.781639) (xy 246.25 161.583453) (xy 246.448186 161.781639) (xy 246.718432 161.962211) + (xy 247.018713 162.086592) (xy 247.337489 162.15) (xy 247.662511 162.15) (xy 247.981287 162.086592) (xy 248.281568 161.962211) + (xy 248.551814 161.781639) (xy 248.75 161.583453) (xy 248.948186 161.781639) (xy 249.218432 161.962211) (xy 249.518713 162.086592) + (xy 249.837489 162.15) (xy 250.162511 162.15) (xy 250.481287 162.086592) (xy 250.781568 161.962211) (xy 251.051814 161.781639) + (xy 251.25 161.583453) (xy 251.448186 161.781639) (xy 251.718432 161.962211) (xy 252.018713 162.086592) (xy 252.337489 162.15) + (xy 252.662511 162.15) (xy 252.981287 162.086592) (xy 253.281568 161.962211) (xy 253.551814 161.781639) (xy 253.75 161.583453) + (xy 253.948186 161.781639) (xy 254.218432 161.962211) (xy 254.518713 162.086592) (xy 254.837489 162.15) (xy 255.162511 162.15) + (xy 255.481287 162.086592) (xy 255.781568 161.962211) (xy 256.051814 161.781639) (xy 256.25 161.583453) (xy 256.448186 161.781639) + (xy 256.718432 161.962211) (xy 257.018713 162.086592) (xy 257.337489 162.15) (xy 257.662511 162.15) (xy 257.981287 162.086592) + (xy 258.281568 161.962211) (xy 258.551814 161.781639) (xy 258.75 161.583453) (xy 258.948186 161.781639) (xy 259.218432 161.962211) + (xy 259.518713 162.086592) (xy 259.837489 162.15) (xy 260.162511 162.15) (xy 260.481287 162.086592) (xy 260.781568 161.962211) + (xy 261.051814 161.781639) (xy 261.25 161.583453) (xy 261.448186 161.781639) (xy 261.718432 161.962211) (xy 262.018713 162.086592) + (xy 262.337489 162.15) (xy 262.662511 162.15) (xy 262.981287 162.086592) (xy 263.281568 161.962211) (xy 263.551814 161.781639) + (xy 263.609531 161.723922) (xy 263.684603 161.815397) (xy 263.859347 161.958805) (xy 264.058711 162.065367) (xy 264.275033 162.130988) + (xy 264.5 162.153145) (xy 265.5 162.153145) (xy 265.724967 162.130988) (xy 265.941289 162.065367) (xy 266.140653 161.958805) + (xy 266.315397 161.815397) (xy 266.458805 161.640653) (xy 266.565367 161.441289) (xy 266.596854 161.337489) (xy 271.35 161.337489) + (xy 271.35 161.662511) (xy 271.413408 161.981287) (xy 271.537789 162.281568) (xy 271.718361 162.551814) (xy 271.948186 162.781639) + (xy 272.218432 162.962211) (xy 272.518713 163.086592) (xy 272.837489 163.15) (xy 273.162511 163.15) (xy 273.481287 163.086592) + (xy 273.781568 162.962211) (xy 274.051814 162.781639) (xy 274.281639 162.551814) (xy 274.462211 162.281568) (xy 274.586592 161.981287) + (xy 274.65 161.662511) (xy 274.65 161.337489) (xy 274.586592 161.018713) (xy 274.462211 160.718432) (xy 274.281639 160.448186) + (xy 274.051814 160.218361) (xy 273.781568 160.037789) (xy 273.481287 159.913408) (xy 273.162511 159.85) (xy 272.837489 159.85) + (xy 272.518713 159.913408) (xy 272.218432 160.037789) (xy 271.948186 160.218361) (xy 271.718361 160.448186) (xy 271.537789 160.718432) + (xy 271.413408 161.018713) (xy 271.35 161.337489) (xy 266.596854 161.337489) (xy 266.630988 161.224967) (xy 266.653145 161) + (xy 266.653145 160) (xy 266.630988 159.775033) (xy 266.612588 159.714375) (xy 280.1 159.714375) (xy 280.1 160.285625) + (xy 280.211445 160.845899) (xy 280.430053 161.373665) (xy 280.747423 161.848642) (xy 281.151358 162.252577) (xy 281.626335 162.569947) + (xy 282.154101 162.788555) (xy 282.714375 162.9) (xy 283.285625 162.9) (xy 283.845899 162.788555) (xy 284.373665 162.569947) + (xy 284.848642 162.252577) (xy 285.252577 161.848642) (xy 285.569947 161.373665) (xy 285.788555 160.845899) (xy 285.9 160.285625) + (xy 285.9 159.714375) (xy 285.788555 159.154101) (xy 285.569947 158.626335) (xy 285.252577 158.151358) (xy 284.848642 157.747423) + (xy 284.61493 157.591261) (xy 292.35 157.591261) (xy 292.35 158.408739) (xy 292.509482 159.21051) (xy 292.822318 159.965762) + (xy 293.276485 160.645471) (xy 293.854529 161.223515) (xy 294.534238 161.677682) (xy 295.28949 161.990518) (xy 296.091261 162.15) + (xy 296.908739 162.15) (xy 297.71051 161.990518) (xy 298.465762 161.677682) (xy 299.145471 161.223515) (xy 299.723515 160.645471) + (xy 300.177682 159.965762) (xy 300.490518 159.21051) (xy 300.65 158.408739) (xy 300.65 157.591261) (xy 300.490518 156.78949) + (xy 300.177682 156.034238) (xy 299.723515 155.354529) (xy 299.145471 154.776485) (xy 298.465762 154.322318) (xy 297.71051 154.009482) + (xy 296.908739 153.85) (xy 296.091261 153.85) (xy 295.28949 154.009482) (xy 294.534238 154.322318) (xy 293.854529 154.776485) + (xy 293.276485 155.354529) (xy 292.822318 156.034238) (xy 292.509482 156.78949) (xy 292.35 157.591261) (xy 284.61493 157.591261) + (xy 284.373665 157.430053) (xy 283.845899 157.211445) (xy 283.285625 157.1) (xy 282.714375 157.1) (xy 282.154101 157.211445) + (xy 281.626335 157.430053) (xy 281.151358 157.747423) (xy 280.747423 158.151358) (xy 280.430053 158.626335) (xy 280.211445 159.154101) + (xy 280.1 159.714375) (xy 266.612588 159.714375) (xy 266.565367 159.558711) (xy 266.458805 159.359347) (xy 266.4 159.287693) + (xy 266.4 148.787005) (xy 266.451159 148.735846) (xy 294.068 148.735846) (xy 294.068 149.264154) (xy 294.171068 149.782311) + (xy 294.373242 150.270403) (xy 294.666755 150.709675) (xy 295.040325 151.083245) (xy 295.479597 151.376758) (xy 295.967689 151.578932) + (xy 296.485846 151.682) (xy 297.014154 151.682) (xy 297.532311 151.578932) (xy 298.020403 151.376758) (xy 298.459675 151.083245) + (xy 298.833245 150.709675) (xy 299.126758 150.270403) (xy 299.328932 149.782311) (xy 299.432 149.264154) (xy 299.432 148.735846) + (xy 299.328932 148.217689) (xy 299.126758 147.729597) (xy 298.833245 147.290325) (xy 298.459675 146.916755) (xy 298.020403 146.623242) + (xy 297.532311 146.421068) (xy 297.014154 146.318) (xy 296.485846 146.318) (xy 295.967689 146.421068) (xy 295.479597 146.623242) + (xy 295.040325 146.916755) (xy 294.666755 147.290325) (xy 294.373242 147.729597) (xy 294.171068 148.217689) (xy 294.068 148.735846) + (xy 266.451159 148.735846) (xy 266.475826 148.711179) (xy 266.683758 148.399987) (xy 266.826984 148.054209) (xy 266.9 147.687134) + (xy 266.9 147.312866) (xy 266.826984 146.945791) (xy 266.683758 146.600013) (xy 266.475826 146.288821) (xy 266.4 146.212995) + (xy 266.4 143.787005) (xy 266.475826 143.711179) (xy 266.683758 143.399987) (xy 266.826984 143.054209) (xy 266.9 142.687134) + (xy 266.9 142.312866) (xy 266.826984 141.945791) (xy 266.683758 141.600013) (xy 266.475826 141.288821) (xy 266.211179 141.024174) + (xy 265.899987 140.816242) (xy 265.554209 140.673016) (xy 265.187134 140.6) (xy 264.812866 140.6) (xy 264.445791 140.673016) + (xy 264.100013 140.816242) (xy 263.901724 140.948735) (xy 263.9 140.931231) (xy 263.9 140.931223) (xy 263.879743 140.725552) + (xy 263.79969 140.461651) (xy 263.66969 140.218438) (xy 263.608907 140.144374) (xy 263.538582 140.058683) (xy 263.538576 140.058677) + (xy 263.494738 140.005261) (xy 263.441324 139.961425) (xy 262.847917 139.368018) (xy 263.054209 139.326984) (xy 263.399987 139.183758) + (xy 263.711179 138.975826) (xy 263.975826 138.711179) (xy 264.183758 138.399987) (xy 264.326984 138.054209) (xy 264.4 137.687134) + (xy 264.4 137.312866) (xy 264.326984 136.945791) (xy 264.183758 136.600013) (xy 263.975826 136.288821) (xy 263.711179 136.024174) + (xy 263.399987 135.816242) (xy 263.269036 135.762) (xy 281.332045 135.762) (xy 281.339845 135.841198) (xy 281.362946 135.917352) + (xy 281.400461 135.987537) (xy 281.450946 136.049054) (xy 281.512463 136.099539) (xy 281.582648 136.137054) (xy 281.658802 136.160155) + (xy 281.738 136.167955) (xy 282.099 136.166) (xy 282.2 136.065) (xy 282.2 135.3) (xy 282.8 135.3) + (xy 282.8 136.065) (xy 282.901 136.166) (xy 283.262 136.167955) (xy 283.341198 136.160155) (xy 283.417352 136.137054) + (xy 283.487537 136.099539) (xy 283.549054 136.049054) (xy 283.599539 135.987537) (xy 283.637054 135.917352) (xy 283.660155 135.841198) + (xy 283.667955 135.762) (xy 283.666 135.401) (xy 283.565 135.3) (xy 282.8 135.3) (xy 282.2 135.3) + (xy 281.435 135.3) (xy 281.334 135.401) (xy 281.332045 135.762) (xy 263.269036 135.762) (xy 263.054209 135.673016) + (xy 262.687134 135.6) (xy 262.312866 135.6) (xy 261.945791 135.673016) (xy 261.600013 135.816242) (xy 261.4 135.949887) + (xy 261.4 134.050113) (xy 261.600013 134.183758) (xy 261.945791 134.326984) (xy 262.312866 134.4) (xy 262.687134 134.4) + (xy 263.054209 134.326984) (xy 263.269035 134.238) (xy 281.332045 134.238) (xy 281.334 134.599) (xy 281.435 134.7) + (xy 282.2 134.7) (xy 282.2 133.935) (xy 282.8 133.935) (xy 282.8 134.7) (xy 283.565 134.7) + (xy 283.666 134.599) (xy 283.667955 134.238) (xy 283.660155 134.158802) (xy 283.637054 134.082648) (xy 283.599539 134.012463) + (xy 283.549054 133.950946) (xy 283.487537 133.900461) (xy 283.417352 133.862946) (xy 283.341198 133.839845) (xy 283.262 133.832045) + (xy 282.901 133.834) (xy 282.8 133.935) (xy 282.2 133.935) (xy 282.099 133.834) (xy 281.738 133.832045) + (xy 281.658802 133.839845) (xy 281.582648 133.862946) (xy 281.512463 133.900461) (xy 281.450946 133.950946) (xy 281.400461 134.012463) + (xy 281.362946 134.082648) (xy 281.339845 134.158802) (xy 281.332045 134.238) (xy 263.269035 134.238) (xy 263.399987 134.183758) + (xy 263.711179 133.975826) (xy 263.975826 133.711179) (xy 264.183758 133.399987) (xy 264.326984 133.054209) (xy 264.4 132.687134) + (xy 264.4 132.312866) (xy 264.326984 131.945791) (xy 264.183758 131.600013) (xy 263.975826 131.288821) (xy 263.711179 131.024174) + (xy 263.399987 130.816242) (xy 263.054209 130.673016) (xy 262.687134 130.6) (xy 262.312866 130.6) (xy 261.945791 130.673016) + (xy 261.600013 130.816242) (xy 261.4 130.949887) (xy 261.4 130.579898) (xy 262.579899 129.4) (xy 262.687134 129.4) + (xy 263.054209 129.326984) (xy 263.399987 129.183758) (xy 263.711179 128.975826) (xy 263.975826 128.711179) (xy 264.183758 128.399987) + (xy 264.326984 128.054209) (xy 264.4 127.687134) (xy 264.4 127.312866) (xy 264.326984 126.945791) (xy 264.183758 126.600013) + (xy 263.975826 126.288821) (xy 263.9 126.212995) (xy 263.9 123.787005) (xy 263.951159 123.735846) (xy 294.068 123.735846) + (xy 294.068 124.264154) (xy 294.171068 124.782311) (xy 294.373242 125.270403) (xy 294.666755 125.709675) (xy 295.040325 126.083245) + (xy 295.479597 126.376758) (xy 295.967689 126.578932) (xy 296.485846 126.682) (xy 297.014154 126.682) (xy 297.532311 126.578932) + (xy 298.020403 126.376758) (xy 298.459675 126.083245) (xy 298.833245 125.709675) (xy 299.126758 125.270403) (xy 299.328932 124.782311) + (xy 299.432 124.264154) (xy 299.432 123.735846) (xy 299.328932 123.217689) (xy 299.126758 122.729597) (xy 298.833245 122.290325) + (xy 298.459675 121.916755) (xy 298.020403 121.623242) (xy 297.532311 121.421068) (xy 297.014154 121.318) (xy 296.485846 121.318) + (xy 295.967689 121.421068) (xy 295.479597 121.623242) (xy 295.040325 121.916755) (xy 294.666755 122.290325) (xy 294.373242 122.729597) + (xy 294.171068 123.217689) (xy 294.068 123.735846) (xy 263.951159 123.735846) (xy 263.975826 123.711179) (xy 264.183758 123.399987) + (xy 264.326984 123.054209) (xy 264.4 122.687134) (xy 264.4 122.312866) (xy 264.326984 121.945791) (xy 264.183758 121.600013) + (xy 263.975826 121.288821) (xy 263.711179 121.024174) (xy 263.399987 120.816242) (xy 263.119354 120.7) (xy 302.300001 120.7) + (xy 302.3 163.3) (xy 295.534386 163.3) (xy 295.499999 163.296613) (xy 295.465612 163.3) (xy 295.46561 163.3) + (xy 295.362776 163.310128) (xy 295.230825 163.350155) (xy 295.109218 163.415155) (xy 295.029342 163.480708) (xy 295.00263 163.50263) + (xy 294.980709 163.529341) (xy 290.710051 167.8) (xy 158.28995 167.8) (xy 154.019296 163.529347) (xy 153.99737 163.50263) + (xy 153.890781 163.415155) (xy 153.769175 163.350155) (xy 153.637224 163.310128) (xy 153.53439 163.3) (xy 153.534387 163.3) + (xy 153.5 163.296613) (xy 153.465613 163.3) (xy 146.2 163.3) (xy 146.2 157.591261) (xy 147.85 157.591261) + (xy 147.85 158.408739) (xy 148.009482 159.21051) (xy 148.322318 159.965762) (xy 148.776485 160.645471) (xy 149.354529 161.223515) + (xy 150.034238 161.677682) (xy 150.78949 161.990518) (xy 151.591261 162.15) (xy 152.408739 162.15) (xy 153.21051 161.990518) + (xy 153.965762 161.677682) (xy 154.645471 161.223515) (xy 155.223515 160.645471) (xy 155.677682 159.965762) (xy 155.78181 159.714375) + (xy 162.1 159.714375) (xy 162.1 160.285625) (xy 162.211445 160.845899) (xy 162.430053 161.373665) (xy 162.747423 161.848642) + (xy 163.151358 162.252577) (xy 163.626335 162.569947) (xy 164.154101 162.788555) (xy 164.714375 162.9) (xy 165.285625 162.9) + (xy 165.845899 162.788555) (xy 166.373665 162.569947) (xy 166.848642 162.252577) (xy 167.252577 161.848642) (xy 167.569947 161.373665) + (xy 167.788555 160.845899) (xy 167.9 160.285625) (xy 167.9 159.714375) (xy 167.788555 159.154101) (xy 167.569947 158.626335) + (xy 167.252577 158.151358) (xy 166.848642 157.747423) (xy 166.373665 157.430053) (xy 165.845899 157.211445) (xy 165.285625 157.1) + (xy 164.714375 157.1) (xy 164.154101 157.211445) (xy 163.626335 157.430053) (xy 163.151358 157.747423) (xy 162.747423 158.151358) + (xy 162.430053 158.626335) (xy 162.211445 159.154101) (xy 162.1 159.714375) (xy 155.78181 159.714375) (xy 155.990518 159.21051) + (xy 156.15 158.408739) (xy 156.15 157.591261) (xy 155.990518 156.78949) (xy 155.677682 156.034238) (xy 155.223515 155.354529) + (xy 154.645471 154.776485) (xy 153.965762 154.322318) (xy 153.21051 154.009482) (xy 152.408739 153.85) (xy 151.591261 153.85) + (xy 150.78949 154.009482) (xy 150.034238 154.322318) (xy 149.354529 154.776485) (xy 148.776485 155.354529) (xy 148.322318 156.034238) + (xy 148.009482 156.78949) (xy 147.85 157.591261) (xy 146.2 157.591261) (xy 146.2 148.735846) (xy 149.068 148.735846) + (xy 149.068 149.264154) (xy 149.171068 149.782311) (xy 149.373242 150.270403) (xy 149.666755 150.709675) (xy 150.040325 151.083245) + (xy 150.479597 151.376758) (xy 150.967689 151.578932) (xy 151.485846 151.682) (xy 152.014154 151.682) (xy 152.532311 151.578932) + (xy 153.020403 151.376758) (xy 153.459675 151.083245) (xy 153.833245 150.709675) (xy 154.126758 150.270403) (xy 154.328932 149.782311) + (xy 154.432 149.264154) (xy 154.432 148.735846) (xy 154.328932 148.217689) (xy 154.126758 147.729597) (xy 153.833245 147.290325) + (xy 153.459675 146.916755) (xy 153.020403 146.623242) (xy 152.532311 146.421068) (xy 152.014154 146.318) (xy 151.485846 146.318) + (xy 150.967689 146.421068) (xy 150.479597 146.623242) (xy 150.040325 146.916755) (xy 149.666755 147.290325) (xy 149.373242 147.729597) + (xy 149.171068 148.217689) (xy 149.068 148.735846) (xy 146.2 148.735846) (xy 146.2 135.762) (xy 156.332045 135.762) + (xy 156.339845 135.841198) (xy 156.362946 135.917352) (xy 156.400461 135.987537) (xy 156.450946 136.049054) (xy 156.512463 136.099539) + (xy 156.582648 136.137054) (xy 156.658802 136.160155) (xy 156.738 136.167955) (xy 157.099 136.166) (xy 157.2 136.065) + (xy 157.2 135.3) (xy 157.8 135.3) (xy 157.8 136.065) (xy 157.901 136.166) (xy 158.262 136.167955) + (xy 158.341198 136.160155) (xy 158.417352 136.137054) (xy 158.487537 136.099539) (xy 158.549054 136.049054) (xy 158.599539 135.987537) + (xy 158.637054 135.917352) (xy 158.660155 135.841198) (xy 158.667955 135.762) (xy 158.666 135.401) (xy 158.565 135.3) + (xy 157.8 135.3) (xy 157.2 135.3) (xy 156.435 135.3) (xy 156.334 135.401) (xy 156.332045 135.762) + (xy 146.2 135.762) (xy 146.2 134.238) (xy 156.332045 134.238) (xy 156.334 134.599) (xy 156.435 134.7) + (xy 157.2 134.7) (xy 157.2 133.935) (xy 157.8 133.935) (xy 157.8 134.7) (xy 158.565 134.7) + (xy 158.666 134.599) (xy 158.667955 134.238) (xy 158.660155 134.158802) (xy 158.637054 134.082648) (xy 158.599539 134.012463) + (xy 158.549054 133.950946) (xy 158.487537 133.900461) (xy 158.417352 133.862946) (xy 158.341198 133.839845) (xy 158.262 133.832045) + (xy 157.901 133.834) (xy 157.8 133.935) (xy 157.2 133.935) (xy 157.099 133.834) (xy 156.738 133.832045) + (xy 156.658802 133.839845) (xy 156.582648 133.862946) (xy 156.512463 133.900461) (xy 156.450946 133.950946) (xy 156.400461 134.012463) + (xy 156.362946 134.082648) (xy 156.339845 134.158802) (xy 156.332045 134.238) (xy 146.2 134.238) (xy 146.2 123.735846) + (xy 149.068 123.735846) (xy 149.068 124.264154) (xy 149.171068 124.782311) (xy 149.373242 125.270403) (xy 149.666755 125.709675) + (xy 150.040325 126.083245) (xy 150.479597 126.376758) (xy 150.967689 126.578932) (xy 151.485846 126.682) (xy 152.014154 126.682) + (xy 152.532311 126.578932) (xy 153.020403 126.376758) (xy 153.459675 126.083245) (xy 153.833245 125.709675) (xy 154.126758 125.270403) + (xy 154.328932 124.782311) (xy 154.432 124.264154) (xy 154.432 123.735846) (xy 154.328932 123.217689) (xy 154.126758 122.729597) + (xy 153.833245 122.290325) (xy 153.459675 121.916755) (xy 153.020403 121.623242) (xy 152.532311 121.421068) (xy 152.014154 121.318) + (xy 151.485846 121.318) (xy 150.967689 121.421068) (xy 150.479597 121.623242) (xy 150.040325 121.916755) (xy 149.666755 122.290325) + (xy 149.373242 122.729597) (xy 149.171068 123.217689) (xy 149.068 123.735846) (xy 146.2 123.735846) (xy 146.2 120.7) + (xy 176.880646 120.7) + ) + ) + ) + (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 5E764789) (hatch edge 0.508) + (connect_pads (clearance 0.5)) + (min_thickness 0.3) + (fill yes (arc_segments 16) (thermal_gap 0.254) (thermal_bridge_width 0.9)) + (polygon + (pts + (xy 303 168.5) (xy 145.5 168.5) (xy 145.5 120) (xy 303 120) + ) + ) + (filled_polygon + (pts + (xy 176.600013 120.816242) (xy 176.288821 121.024174) (xy 176.024174 121.288821) (xy 175.816242 121.600013) (xy 175.673016 121.945791) + (xy 175.6 122.312866) (xy 175.6 122.687134) (xy 175.673016 123.054209) (xy 175.816242 123.399987) (xy 176.024174 123.711179) + (xy 176.288821 123.975826) (xy 176.600013 124.183758) (xy 176.945791 124.326984) (xy 177.312866 124.4) (xy 177.687134 124.4) + (xy 178.054209 124.326984) (xy 178.399987 124.183758) (xy 178.711179 123.975826) (xy 178.975826 123.711179) (xy 179.183758 123.399987) + (xy 179.326984 123.054209) (xy 179.4 122.687134) (xy 179.4 122.312866) (xy 179.326984 121.945791) (xy 179.183758 121.600013) + (xy 178.975826 121.288821) (xy 178.711179 121.024174) (xy 178.399987 120.816242) (xy 178.119354 120.7) (xy 181.880646 120.7) + (xy 181.600013 120.816242) (xy 181.288821 121.024174) (xy 181.024174 121.288821) (xy 180.816242 121.600013) (xy 180.673016 121.945791) + (xy 180.6 122.312866) (xy 180.6 122.687134) (xy 180.673016 123.054209) (xy 180.816242 123.399987) (xy 181.024174 123.711179) + (xy 181.288821 123.975826) (xy 181.600013 124.183758) (xy 181.945791 124.326984) (xy 182.312866 124.4) (xy 182.687134 124.4) + (xy 183.054209 124.326984) (xy 183.399987 124.183758) (xy 183.711179 123.975826) (xy 183.975826 123.711179) (xy 184.183758 123.399987) + (xy 184.326984 123.054209) (xy 184.4 122.687134) (xy 184.4 122.312866) (xy 184.326984 121.945791) (xy 184.183758 121.600013) + (xy 183.975826 121.288821) (xy 183.711179 121.024174) (xy 183.399987 120.816242) (xy 183.119354 120.7) (xy 186.880646 120.7) + (xy 186.600013 120.816242) (xy 186.288821 121.024174) (xy 186.024174 121.288821) (xy 185.816242 121.600013) (xy 185.673016 121.945791) + (xy 185.6 122.312866) (xy 185.6 122.687134) (xy 185.673016 123.054209) (xy 185.816242 123.399987) (xy 186.024174 123.711179) + (xy 186.288821 123.975826) (xy 186.600013 124.183758) (xy 186.945791 124.326984) (xy 187.312866 124.4) (xy 187.687134 124.4) + (xy 188.054209 124.326984) (xy 188.399987 124.183758) (xy 188.711179 123.975826) (xy 188.975826 123.711179) (xy 189.183758 123.399987) + (xy 189.326984 123.054209) (xy 189.4 122.687134) (xy 189.4 122.312866) (xy 189.326984 121.945791) (xy 189.183758 121.600013) + (xy 188.975826 121.288821) (xy 188.711179 121.024174) (xy 188.399987 120.816242) (xy 188.119354 120.7) (xy 191.880646 120.7) + (xy 191.600013 120.816242) (xy 191.288821 121.024174) (xy 191.024174 121.288821) (xy 190.816242 121.600013) (xy 190.673016 121.945791) + (xy 190.6 122.312866) (xy 190.6 122.687134) (xy 190.673016 123.054209) (xy 190.816242 123.399987) (xy 191.024174 123.711179) + (xy 191.288821 123.975826) (xy 191.600013 124.183758) (xy 191.945791 124.326984) (xy 192.312866 124.4) (xy 192.687134 124.4) + (xy 193.054209 124.326984) (xy 193.399987 124.183758) (xy 193.711179 123.975826) (xy 193.975826 123.711179) (xy 194.183758 123.399987) + (xy 194.326984 123.054209) (xy 194.4 122.687134) (xy 194.4 122.312866) (xy 194.326984 121.945791) (xy 194.183758 121.600013) + (xy 193.975826 121.288821) (xy 193.711179 121.024174) (xy 193.399987 120.816242) (xy 193.119354 120.7) (xy 196.880646 120.7) + (xy 196.600013 120.816242) (xy 196.288821 121.024174) (xy 196.024174 121.288821) (xy 195.816242 121.600013) (xy 195.673016 121.945791) + (xy 195.6 122.312866) (xy 195.6 122.687134) (xy 195.673016 123.054209) (xy 195.816242 123.399987) (xy 196.024174 123.711179) + (xy 196.288821 123.975826) (xy 196.600013 124.183758) (xy 196.945791 124.326984) (xy 197.312866 124.4) (xy 197.687134 124.4) + (xy 198.054209 124.326984) (xy 198.399987 124.183758) (xy 198.711179 123.975826) (xy 198.975826 123.711179) (xy 199.183758 123.399987) + (xy 199.326984 123.054209) (xy 199.4 122.687134) (xy 199.4 122.312866) (xy 199.326984 121.945791) (xy 199.183758 121.600013) + (xy 198.975826 121.288821) (xy 198.711179 121.024174) (xy 198.399987 120.816242) (xy 198.119354 120.7) (xy 201.880646 120.7) + (xy 201.600013 120.816242) (xy 201.288821 121.024174) (xy 201.024174 121.288821) (xy 200.816242 121.600013) (xy 200.673016 121.945791) + (xy 200.6 122.312866) (xy 200.6 122.687134) (xy 200.673016 123.054209) (xy 200.816242 123.399987) (xy 201.024174 123.711179) + (xy 201.288821 123.975826) (xy 201.600013 124.183758) (xy 201.945791 124.326984) (xy 202.312866 124.4) (xy 202.687134 124.4) + (xy 203.054209 124.326984) (xy 203.399987 124.183758) (xy 203.711179 123.975826) (xy 203.975826 123.711179) (xy 204.183758 123.399987) + (xy 204.326984 123.054209) (xy 204.4 122.687134) (xy 204.4 122.312866) (xy 204.326984 121.945791) (xy 204.183758 121.600013) + (xy 203.975826 121.288821) (xy 203.711179 121.024174) (xy 203.399987 120.816242) (xy 203.119354 120.7) (xy 206.880646 120.7) + (xy 206.600013 120.816242) (xy 206.288821 121.024174) (xy 206.024174 121.288821) (xy 205.816242 121.600013) (xy 205.673016 121.945791) + (xy 205.6 122.312866) (xy 205.6 122.687134) (xy 205.673016 123.054209) (xy 205.816242 123.399987) (xy 206.024174 123.711179) + (xy 206.288821 123.975826) (xy 206.600013 124.183758) (xy 206.945791 124.326984) (xy 207.312866 124.4) (xy 207.687134 124.4) + (xy 208.054209 124.326984) (xy 208.399987 124.183758) (xy 208.711179 123.975826) (xy 208.975826 123.711179) (xy 209.183758 123.399987) + (xy 209.326984 123.054209) (xy 209.4 122.687134) (xy 209.4 122.312866) (xy 209.326984 121.945791) (xy 209.183758 121.600013) + (xy 208.975826 121.288821) (xy 208.711179 121.024174) (xy 208.399987 120.816242) (xy 208.119354 120.7) (xy 211.880646 120.7) + (xy 211.600013 120.816242) (xy 211.288821 121.024174) (xy 211.024174 121.288821) (xy 210.816242 121.600013) (xy 210.673016 121.945791) + (xy 210.6 122.312866) (xy 210.6 122.687134) (xy 210.673016 123.054209) (xy 210.816242 123.399987) (xy 211.024174 123.711179) + (xy 211.288821 123.975826) (xy 211.600013 124.183758) (xy 211.945791 124.326984) (xy 212.312866 124.4) (xy 212.687134 124.4) + (xy 213.054209 124.326984) (xy 213.399987 124.183758) (xy 213.711179 123.975826) (xy 213.975826 123.711179) (xy 214.183758 123.399987) + (xy 214.326984 123.054209) (xy 214.4 122.687134) (xy 214.4 122.312866) (xy 214.326984 121.945791) (xy 214.183758 121.600013) + (xy 213.975826 121.288821) (xy 213.711179 121.024174) (xy 213.399987 120.816242) (xy 213.119354 120.7) (xy 216.880646 120.7) + (xy 216.600013 120.816242) (xy 216.288821 121.024174) (xy 216.024174 121.288821) (xy 215.816242 121.600013) (xy 215.673016 121.945791) + (xy 215.6 122.312866) (xy 215.6 122.687134) (xy 215.673016 123.054209) (xy 215.816242 123.399987) (xy 216.024174 123.711179) + (xy 216.288821 123.975826) (xy 216.600013 124.183758) (xy 216.945791 124.326984) (xy 217.312866 124.4) (xy 217.687134 124.4) + (xy 218.054209 124.326984) (xy 218.399987 124.183758) (xy 218.711179 123.975826) (xy 218.975826 123.711179) (xy 219.183758 123.399987) + (xy 219.326984 123.054209) (xy 219.4 122.687134) (xy 219.4 122.312866) (xy 219.326984 121.945791) (xy 219.183758 121.600013) + (xy 218.975826 121.288821) (xy 218.711179 121.024174) (xy 218.399987 120.816242) (xy 218.119354 120.7) (xy 221.880646 120.7) + (xy 221.600013 120.816242) (xy 221.288821 121.024174) (xy 221.024174 121.288821) (xy 220.816242 121.600013) (xy 220.673016 121.945791) + (xy 220.6 122.312866) (xy 220.6 122.687134) (xy 220.673016 123.054209) (xy 220.816242 123.399987) (xy 221.024174 123.711179) + (xy 221.288821 123.975826) (xy 221.600013 124.183758) (xy 221.945791 124.326984) (xy 222.312866 124.4) (xy 222.687134 124.4) + (xy 223.054209 124.326984) (xy 223.399987 124.183758) (xy 223.711179 123.975826) (xy 223.975826 123.711179) (xy 224.183758 123.399987) + (xy 224.326984 123.054209) (xy 224.4 122.687134) (xy 224.4 122.312866) (xy 224.326984 121.945791) (xy 224.183758 121.600013) + (xy 223.975826 121.288821) (xy 223.711179 121.024174) (xy 223.399987 120.816242) (xy 223.119354 120.7) (xy 226.880646 120.7) + (xy 226.600013 120.816242) (xy 226.288821 121.024174) (xy 226.024174 121.288821) (xy 225.816242 121.600013) (xy 225.673016 121.945791) + (xy 225.6 122.312866) (xy 225.6 122.687134) (xy 225.673016 123.054209) (xy 225.816242 123.399987) (xy 226.024174 123.711179) + (xy 226.288821 123.975826) (xy 226.600013 124.183758) (xy 226.945791 124.326984) (xy 227.312866 124.4) (xy 227.687134 124.4) + (xy 228.054209 124.326984) (xy 228.399987 124.183758) (xy 228.711179 123.975826) (xy 228.975826 123.711179) (xy 229.183758 123.399987) + (xy 229.326984 123.054209) (xy 229.4 122.687134) (xy 229.4 122.312866) (xy 229.326984 121.945791) (xy 229.183758 121.600013) + (xy 228.975826 121.288821) (xy 228.711179 121.024174) (xy 228.399987 120.816242) (xy 228.119354 120.7) (xy 231.880646 120.7) + (xy 231.600013 120.816242) (xy 231.288821 121.024174) (xy 231.024174 121.288821) (xy 230.816242 121.600013) (xy 230.673016 121.945791) + (xy 230.6 122.312866) (xy 230.6 122.687134) (xy 230.673016 123.054209) (xy 230.816242 123.399987) (xy 231.024174 123.711179) + (xy 231.288821 123.975826) (xy 231.600013 124.183758) (xy 231.945791 124.326984) (xy 232.312866 124.4) (xy 232.687134 124.4) + (xy 233.054209 124.326984) (xy 233.399987 124.183758) (xy 233.711179 123.975826) (xy 233.975826 123.711179) (xy 234.183758 123.399987) + (xy 234.326984 123.054209) (xy 234.4 122.687134) (xy 234.4 122.312866) (xy 234.326984 121.945791) (xy 234.183758 121.600013) + (xy 233.975826 121.288821) (xy 233.711179 121.024174) (xy 233.399987 120.816242) (xy 233.119354 120.7) (xy 236.880646 120.7) + (xy 236.600013 120.816242) (xy 236.288821 121.024174) (xy 236.024174 121.288821) (xy 235.816242 121.600013) (xy 235.673016 121.945791) + (xy 235.6 122.312866) (xy 235.6 122.687134) (xy 235.673016 123.054209) (xy 235.816242 123.399987) (xy 236.024174 123.711179) + (xy 236.288821 123.975826) (xy 236.600013 124.183758) (xy 236.945791 124.326984) (xy 237.312866 124.4) (xy 237.687134 124.4) + (xy 238.054209 124.326984) (xy 238.399987 124.183758) (xy 238.711179 123.975826) (xy 238.975826 123.711179) (xy 239.183758 123.399987) + (xy 239.326984 123.054209) (xy 239.4 122.687134) (xy 239.4 122.312866) (xy 239.326984 121.945791) (xy 239.183758 121.600013) + (xy 238.975826 121.288821) (xy 238.711179 121.024174) (xy 238.399987 120.816242) (xy 238.119354 120.7) (xy 241.880646 120.7) + (xy 241.600013 120.816242) (xy 241.288821 121.024174) (xy 241.024174 121.288821) (xy 240.816242 121.600013) (xy 240.673016 121.945791) + (xy 240.6 122.312866) (xy 240.6 122.687134) (xy 240.673016 123.054209) (xy 240.816242 123.399987) (xy 241.024174 123.711179) + (xy 241.288821 123.975826) (xy 241.600013 124.183758) (xy 241.945791 124.326984) (xy 242.312866 124.4) (xy 242.687134 124.4) + (xy 243.054209 124.326984) (xy 243.399987 124.183758) (xy 243.711179 123.975826) (xy 243.975826 123.711179) (xy 244.183758 123.399987) + (xy 244.326984 123.054209) (xy 244.4 122.687134) (xy 244.4 122.312866) (xy 244.326984 121.945791) (xy 244.183758 121.600013) + (xy 243.975826 121.288821) (xy 243.711179 121.024174) (xy 243.399987 120.816242) (xy 243.119354 120.7) (xy 246.880646 120.7) + (xy 246.600013 120.816242) (xy 246.288821 121.024174) (xy 246.024174 121.288821) (xy 245.816242 121.600013) (xy 245.673016 121.945791) + (xy 245.6 122.312866) (xy 245.6 122.687134) (xy 245.673016 123.054209) (xy 245.816242 123.399987) (xy 246.024174 123.711179) + (xy 246.288821 123.975826) (xy 246.600013 124.183758) (xy 246.945791 124.326984) (xy 247.312866 124.4) (xy 247.687134 124.4) + (xy 248.054209 124.326984) (xy 248.399987 124.183758) (xy 248.711179 123.975826) (xy 248.975826 123.711179) (xy 249.183758 123.399987) + (xy 249.326984 123.054209) (xy 249.4 122.687134) (xy 249.4 122.312866) (xy 249.326984 121.945791) (xy 249.183758 121.600013) + (xy 248.975826 121.288821) (xy 248.711179 121.024174) (xy 248.399987 120.816242) (xy 248.119354 120.7) (xy 251.880646 120.7) + (xy 251.600013 120.816242) (xy 251.288821 121.024174) (xy 251.024174 121.288821) (xy 250.816242 121.600013) (xy 250.673016 121.945791) + (xy 250.6 122.312866) (xy 250.6 122.687134) (xy 250.673016 123.054209) (xy 250.816242 123.399987) (xy 251.024174 123.711179) + (xy 251.288821 123.975826) (xy 251.600013 124.183758) (xy 251.945791 124.326984) (xy 252.312866 124.4) (xy 252.687134 124.4) + (xy 253.054209 124.326984) (xy 253.399987 124.183758) (xy 253.711179 123.975826) (xy 253.975826 123.711179) (xy 254.183758 123.399987) + (xy 254.326984 123.054209) (xy 254.4 122.687134) (xy 254.4 122.312866) (xy 254.326984 121.945791) (xy 254.183758 121.600013) + (xy 253.975826 121.288821) (xy 253.711179 121.024174) (xy 253.399987 120.816242) (xy 253.119354 120.7) (xy 256.880646 120.7) + (xy 256.600013 120.816242) (xy 256.288821 121.024174) (xy 256.024174 121.288821) (xy 255.816242 121.600013) (xy 255.673016 121.945791) + (xy 255.6 122.312866) (xy 255.6 122.687134) (xy 255.673016 123.054209) (xy 255.816242 123.399987) (xy 256.024174 123.711179) + (xy 256.288821 123.975826) (xy 256.600013 124.183758) (xy 256.945791 124.326984) (xy 257.312866 124.4) (xy 257.687134 124.4) + (xy 258.054209 124.326984) (xy 258.399987 124.183758) (xy 258.711179 123.975826) (xy 258.975826 123.711179) (xy 259.183758 123.399987) + (xy 259.326984 123.054209) (xy 259.4 122.687134) (xy 259.4 122.312866) (xy 259.326984 121.945791) (xy 259.183758 121.600013) + (xy 258.975826 121.288821) (xy 258.711179 121.024174) (xy 258.399987 120.816242) (xy 258.119354 120.7) (xy 261.880646 120.7) + (xy 261.600013 120.816242) (xy 261.288821 121.024174) (xy 261.024174 121.288821) (xy 260.816242 121.600013) (xy 260.673016 121.945791) + (xy 260.6 122.312866) (xy 260.6 122.687134) (xy 260.673016 123.054209) (xy 260.816242 123.399987) (xy 261.024174 123.711179) + (xy 261.288821 123.975826) (xy 261.600013 124.183758) (xy 261.945791 124.326984) (xy 262.312866 124.4) (xy 262.687134 124.4) + (xy 263.054209 124.326984) (xy 263.399987 124.183758) (xy 263.711179 123.975826) (xy 263.951159 123.735846) (xy 294.068 123.735846) + (xy 294.068 124.264154) (xy 294.171068 124.782311) (xy 294.373242 125.270403) (xy 294.666755 125.709675) (xy 295.040325 126.083245) + (xy 295.479597 126.376758) (xy 295.967689 126.578932) (xy 296.485846 126.682) (xy 297.014154 126.682) (xy 297.532311 126.578932) + (xy 298.020403 126.376758) (xy 298.459675 126.083245) (xy 298.833245 125.709675) (xy 299.126758 125.270403) (xy 299.328932 124.782311) + (xy 299.432 124.264154) (xy 299.432 123.735846) (xy 299.328932 123.217689) (xy 299.126758 122.729597) (xy 298.833245 122.290325) + (xy 298.459675 121.916755) (xy 298.020403 121.623242) (xy 297.532311 121.421068) (xy 297.014154 121.318) (xy 296.485846 121.318) + (xy 295.967689 121.421068) (xy 295.479597 121.623242) (xy 295.040325 121.916755) (xy 294.666755 122.290325) (xy 294.373242 122.729597) + (xy 294.171068 123.217689) (xy 294.068 123.735846) (xy 263.951159 123.735846) (xy 263.975826 123.711179) (xy 264.183758 123.399987) + (xy 264.326984 123.054209) (xy 264.4 122.687134) (xy 264.4 122.312866) (xy 264.326984 121.945791) (xy 264.183758 121.600013) + (xy 263.975826 121.288821) (xy 263.711179 121.024174) (xy 263.399987 120.816242) (xy 263.119354 120.7) (xy 302.300001 120.7) + (xy 302.3 163.3) (xy 295.534386 163.3) (xy 295.499999 163.296613) (xy 295.465612 163.3) (xy 295.46561 163.3) + (xy 295.362776 163.310128) (xy 295.230825 163.350155) (xy 295.109218 163.415155) (xy 295.029342 163.480708) (xy 295.00263 163.50263) + (xy 294.980709 163.529341) (xy 290.710051 167.8) (xy 158.28995 167.8) (xy 154.019296 163.529347) (xy 153.99737 163.50263) + (xy 153.890781 163.415155) (xy 153.769175 163.350155) (xy 153.637224 163.310128) (xy 153.53439 163.3) (xy 153.534387 163.3) + (xy 153.5 163.296613) (xy 153.465613 163.3) (xy 146.2 163.3) (xy 146.2 157.591261) (xy 147.85 157.591261) + (xy 147.85 158.408739) (xy 148.009482 159.21051) (xy 148.322318 159.965762) (xy 148.776485 160.645471) (xy 149.354529 161.223515) + (xy 150.034238 161.677682) (xy 150.78949 161.990518) (xy 151.591261 162.15) (xy 152.408739 162.15) (xy 153.21051 161.990518) + (xy 153.965762 161.677682) (xy 154.645471 161.223515) (xy 155.223515 160.645471) (xy 155.677682 159.965762) (xy 155.78181 159.714375) + (xy 162.1 159.714375) (xy 162.1 160.285625) (xy 162.211445 160.845899) (xy 162.430053 161.373665) (xy 162.747423 161.848642) + (xy 163.151358 162.252577) (xy 163.626335 162.569947) (xy 164.154101 162.788555) (xy 164.714375 162.9) (xy 165.285625 162.9) + (xy 165.845899 162.788555) (xy 166.373665 162.569947) (xy 166.848642 162.252577) (xy 167.252577 161.848642) (xy 167.569947 161.373665) + (xy 167.788555 160.845899) (xy 167.9 160.285625) (xy 167.9 159.714375) (xy 167.788555 159.154101) (xy 167.569947 158.626335) + (xy 167.252577 158.151358) (xy 166.848642 157.747423) (xy 166.373665 157.430053) (xy 165.845899 157.211445) (xy 165.285625 157.1) + (xy 164.714375 157.1) (xy 164.154101 157.211445) (xy 163.626335 157.430053) (xy 163.151358 157.747423) (xy 162.747423 158.151358) + (xy 162.430053 158.626335) (xy 162.211445 159.154101) (xy 162.1 159.714375) (xy 155.78181 159.714375) (xy 155.990518 159.21051) + (xy 156.15 158.408739) (xy 156.15 157.591261) (xy 155.990518 156.78949) (xy 155.677682 156.034238) (xy 155.223515 155.354529) + (xy 154.645471 154.776485) (xy 153.965762 154.322318) (xy 153.21051 154.009482) (xy 152.408739 153.85) (xy 151.591261 153.85) + (xy 150.78949 154.009482) (xy 150.034238 154.322318) (xy 149.354529 154.776485) (xy 148.776485 155.354529) (xy 148.322318 156.034238) + (xy 148.009482 156.78949) (xy 147.85 157.591261) (xy 146.2 157.591261) (xy 146.2 152.837489) (xy 171.35 152.837489) + (xy 171.35 153.162511) (xy 171.413408 153.481287) (xy 171.537789 153.781568) (xy 171.718361 154.051814) (xy 171.948186 154.281639) + (xy 172.218432 154.462211) (xy 172.518713 154.586592) (xy 172.837489 154.65) (xy 173.162511 154.65) (xy 173.481287 154.586592) + (xy 173.781568 154.462211) (xy 174.051814 154.281639) (xy 174.281639 154.051814) (xy 174.462211 153.781568) (xy 174.586592 153.481287) + (xy 174.65 153.162511) (xy 174.65 152.837489) (xy 174.586592 152.518713) (xy 174.462211 152.218432) (xy 174.281639 151.948186) + (xy 174.051814 151.718361) (xy 173.781568 151.537789) (xy 173.481287 151.413408) (xy 173.162511 151.35) (xy 172.837489 151.35) + (xy 172.518713 151.413408) (xy 172.218432 151.537789) (xy 171.948186 151.718361) (xy 171.718361 151.948186) (xy 171.537789 152.218432) + (xy 171.413408 152.518713) (xy 171.35 152.837489) (xy 146.2 152.837489) (xy 146.2 148.735846) (xy 149.068 148.735846) + (xy 149.068 149.264154) (xy 149.171068 149.782311) (xy 149.373242 150.270403) (xy 149.666755 150.709675) (xy 150.040325 151.083245) + (xy 150.479597 151.376758) (xy 150.967689 151.578932) (xy 151.485846 151.682) (xy 152.014154 151.682) (xy 152.532311 151.578932) + (xy 153.020403 151.376758) (xy 153.459675 151.083245) (xy 153.833245 150.709675) (xy 154.126758 150.270403) (xy 154.328932 149.782311) + (xy 154.432 149.264154) (xy 154.432 148.735846) (xy 154.328932 148.217689) (xy 154.126758 147.729597) (xy 153.833245 147.290325) + (xy 153.459675 146.916755) (xy 153.020403 146.623242) (xy 152.532311 146.421068) (xy 152.014154 146.318) (xy 151.485846 146.318) + (xy 150.967689 146.421068) (xy 150.479597 146.623242) (xy 150.040325 146.916755) (xy 149.666755 147.290325) (xy 149.373242 147.729597) + (xy 149.171068 148.217689) (xy 149.068 148.735846) (xy 146.2 148.735846) (xy 146.2 142.312866) (xy 173.1 142.312866) + (xy 173.1 142.687134) (xy 173.173016 143.054209) (xy 173.316242 143.399987) (xy 173.524174 143.711179) (xy 173.788821 143.975826) + (xy 174.100013 144.183758) (xy 174.445791 144.326984) (xy 174.812866 144.4) (xy 175.187134 144.4) (xy 175.554209 144.326984) + (xy 175.899987 144.183758) (xy 176.100001 144.050113) (xy 176.100001 145.949887) (xy 175.899987 145.816242) (xy 175.554209 145.673016) + (xy 175.187134 145.6) (xy 174.812866 145.6) (xy 174.445791 145.673016) (xy 174.100013 145.816242) (xy 173.788821 146.024174) + (xy 173.524174 146.288821) (xy 173.316242 146.600013) (xy 173.173016 146.945791) (xy 173.1 147.312866) (xy 173.1 147.687134) + (xy 173.173016 148.054209) (xy 173.316242 148.399987) (xy 173.524174 148.711179) (xy 173.788821 148.975826) (xy 174.100013 149.183758) + (xy 174.445791 149.326984) (xy 174.812866 149.4) (xy 175.187134 149.4) (xy 175.554209 149.326984) (xy 175.899987 149.183758) + (xy 176.100001 149.050113) (xy 176.100001 149.931221) (xy 176.093227 150) (xy 176.120257 150.274447) (xy 176.187082 150.494739) + (xy 176.200311 150.538349) (xy 176.330311 150.781562) (xy 176.370318 150.83031) (xy 176.461418 150.941316) (xy 176.461421 150.941319) + (xy 176.505262 150.994739) (xy 176.558682 151.03858) (xy 178.6 153.079899) (xy 178.6 153.766547) (xy 178.551814 153.718361) + (xy 178.281568 153.537789) (xy 177.981287 153.413408) (xy 177.662511 153.35) (xy 177.337489 153.35) (xy 177.018713 153.413408) + (xy 176.718432 153.537789) (xy 176.448186 153.718361) (xy 176.218361 153.948186) (xy 176.037789 154.218432) (xy 175.913408 154.518713) + (xy 175.85 154.837489) (xy 175.85 155.162511) (xy 175.913408 155.481287) (xy 176.037789 155.781568) (xy 176.218361 156.051814) + (xy 176.448186 156.281639) (xy 176.718432 156.462211) (xy 177.018713 156.586592) (xy 177.337489 156.65) (xy 177.370102 156.65) + (xy 176.558682 157.46142) (xy 176.505261 157.505262) (xy 176.33031 157.718439) (xy 176.20031 157.961652) (xy 176.120257 158.225553) + (xy 176.1 158.431224) (xy 176.1 158.431231) (xy 176.093227 158.5) (xy 176.1 158.56877) (xy 176.1 159.266547) + (xy 176.051814 159.218361) (xy 175.781568 159.037789) (xy 175.481287 158.913408) (xy 175.162511 158.85) (xy 174.837489 158.85) + (xy 174.518713 158.913408) (xy 174.218432 159.037789) (xy 173.948186 159.218361) (xy 173.718361 159.448186) (xy 173.537789 159.718432) + (xy 173.413408 160.018713) (xy 173.35 160.337489) (xy 173.35 160.662511) (xy 173.413408 160.981287) (xy 173.537789 161.281568) + (xy 173.718361 161.551814) (xy 173.948186 161.781639) (xy 174.218432 161.962211) (xy 174.518713 162.086592) (xy 174.837489 162.15) + (xy 175.162511 162.15) (xy 175.481287 162.086592) (xy 175.781568 161.962211) (xy 176.051814 161.781639) (xy 176.25 161.583453) + (xy 176.448186 161.781639) (xy 176.718432 161.962211) (xy 177.018713 162.086592) (xy 177.337489 162.15) (xy 177.662511 162.15) + (xy 177.981287 162.086592) (xy 178.281568 161.962211) (xy 178.551814 161.781639) (xy 178.75 161.583453) (xy 178.948186 161.781639) + (xy 179.218432 161.962211) (xy 179.518713 162.086592) (xy 179.837489 162.15) (xy 180.162511 162.15) (xy 180.481287 162.086592) + (xy 180.781568 161.962211) (xy 181.051814 161.781639) (xy 181.25 161.583453) (xy 181.448186 161.781639) (xy 181.718432 161.962211) + (xy 182.018713 162.086592) (xy 182.337489 162.15) (xy 182.662511 162.15) (xy 182.981287 162.086592) (xy 183.281568 161.962211) + (xy 183.551814 161.781639) (xy 183.75 161.583453) (xy 183.948186 161.781639) (xy 184.218432 161.962211) (xy 184.518713 162.086592) + (xy 184.837489 162.15) (xy 185.162511 162.15) (xy 185.481287 162.086592) (xy 185.781568 161.962211) (xy 186.051814 161.781639) + (xy 186.25 161.583453) (xy 186.448186 161.781639) (xy 186.718432 161.962211) (xy 187.018713 162.086592) (xy 187.337489 162.15) + (xy 187.662511 162.15) (xy 187.981287 162.086592) (xy 188.281568 161.962211) (xy 188.551814 161.781639) (xy 188.75 161.583453) + (xy 188.948186 161.781639) (xy 189.218432 161.962211) (xy 189.518713 162.086592) (xy 189.837489 162.15) (xy 190.162511 162.15) + (xy 190.481287 162.086592) (xy 190.781568 161.962211) (xy 191.051814 161.781639) (xy 191.25 161.583453) (xy 191.448186 161.781639) + (xy 191.718432 161.962211) (xy 192.018713 162.086592) (xy 192.337489 162.15) (xy 192.662511 162.15) (xy 192.981287 162.086592) + (xy 193.281568 161.962211) (xy 193.551814 161.781639) (xy 193.75 161.583453) (xy 193.948186 161.781639) (xy 194.218432 161.962211) + (xy 194.518713 162.086592) (xy 194.837489 162.15) (xy 195.162511 162.15) (xy 195.481287 162.086592) (xy 195.781568 161.962211) + (xy 196.051814 161.781639) (xy 196.25 161.583453) (xy 196.448186 161.781639) (xy 196.718432 161.962211) (xy 197.018713 162.086592) + (xy 197.337489 162.15) (xy 197.662511 162.15) (xy 197.981287 162.086592) (xy 198.281568 161.962211) (xy 198.551814 161.781639) + (xy 198.75 161.583453) (xy 198.948186 161.781639) (xy 199.218432 161.962211) (xy 199.518713 162.086592) (xy 199.837489 162.15) + (xy 200.162511 162.15) (xy 200.481287 162.086592) (xy 200.781568 161.962211) (xy 201.051814 161.781639) (xy 201.25 161.583453) + (xy 201.448186 161.781639) (xy 201.718432 161.962211) (xy 202.018713 162.086592) (xy 202.337489 162.15) (xy 202.662511 162.15) + (xy 202.981287 162.086592) (xy 203.281568 161.962211) (xy 203.551814 161.781639) (xy 203.75 161.583453) (xy 203.948186 161.781639) + (xy 204.218432 161.962211) (xy 204.518713 162.086592) (xy 204.837489 162.15) (xy 205.162511 162.15) (xy 205.481287 162.086592) + (xy 205.781568 161.962211) (xy 206.051814 161.781639) (xy 206.25 161.583453) (xy 206.448186 161.781639) (xy 206.718432 161.962211) + (xy 207.018713 162.086592) (xy 207.337489 162.15) (xy 207.662511 162.15) (xy 207.981287 162.086592) (xy 208.281568 161.962211) + (xy 208.551814 161.781639) (xy 208.75 161.583453) (xy 208.948186 161.781639) (xy 209.218432 161.962211) (xy 209.518713 162.086592) + (xy 209.837489 162.15) (xy 210.162511 162.15) (xy 210.481287 162.086592) (xy 210.781568 161.962211) (xy 211.051814 161.781639) + (xy 211.25 161.583453) (xy 211.448186 161.781639) (xy 211.718432 161.962211) (xy 212.018713 162.086592) (xy 212.337489 162.15) + (xy 212.662511 162.15) (xy 212.981287 162.086592) (xy 213.281568 161.962211) (xy 213.551814 161.781639) (xy 213.75 161.583453) + (xy 213.948186 161.781639) (xy 214.218432 161.962211) (xy 214.518713 162.086592) (xy 214.837489 162.15) (xy 215.162511 162.15) + (xy 215.481287 162.086592) (xy 215.781568 161.962211) (xy 216.051814 161.781639) (xy 216.25 161.583453) (xy 216.448186 161.781639) + (xy 216.718432 161.962211) (xy 217.018713 162.086592) (xy 217.337489 162.15) (xy 217.662511 162.15) (xy 217.981287 162.086592) + (xy 218.281568 161.962211) (xy 218.551814 161.781639) (xy 218.75 161.583453) (xy 218.948186 161.781639) (xy 219.218432 161.962211) + (xy 219.518713 162.086592) (xy 219.837489 162.15) (xy 220.162511 162.15) (xy 220.481287 162.086592) (xy 220.781568 161.962211) + (xy 221.051814 161.781639) (xy 221.25 161.583453) (xy 221.448186 161.781639) (xy 221.718432 161.962211) (xy 222.018713 162.086592) + (xy 222.337489 162.15) (xy 222.662511 162.15) (xy 222.981287 162.086592) (xy 223.281568 161.962211) (xy 223.551814 161.781639) + (xy 223.75 161.583453) (xy 223.948186 161.781639) (xy 224.218432 161.962211) (xy 224.518713 162.086592) (xy 224.837489 162.15) + (xy 225.162511 162.15) (xy 225.481287 162.086592) (xy 225.781568 161.962211) (xy 226.051814 161.781639) (xy 226.25 161.583453) + (xy 226.448186 161.781639) (xy 226.718432 161.962211) (xy 227.018713 162.086592) (xy 227.337489 162.15) (xy 227.662511 162.15) + (xy 227.981287 162.086592) (xy 228.281568 161.962211) (xy 228.551814 161.781639) (xy 228.75 161.583453) (xy 228.948186 161.781639) + (xy 229.218432 161.962211) (xy 229.518713 162.086592) (xy 229.837489 162.15) (xy 230.162511 162.15) (xy 230.481287 162.086592) + (xy 230.781568 161.962211) (xy 231.051814 161.781639) (xy 231.25 161.583453) (xy 231.448186 161.781639) (xy 231.718432 161.962211) + (xy 232.018713 162.086592) (xy 232.337489 162.15) (xy 232.662511 162.15) (xy 232.981287 162.086592) (xy 233.281568 161.962211) + (xy 233.551814 161.781639) (xy 233.75 161.583453) (xy 233.948186 161.781639) (xy 234.218432 161.962211) (xy 234.518713 162.086592) + (xy 234.837489 162.15) (xy 235.162511 162.15) (xy 235.481287 162.086592) (xy 235.781568 161.962211) (xy 236.051814 161.781639) + (xy 236.25 161.583453) (xy 236.448186 161.781639) (xy 236.718432 161.962211) (xy 237.018713 162.086592) (xy 237.337489 162.15) + (xy 237.662511 162.15) (xy 237.981287 162.086592) (xy 238.281568 161.962211) (xy 238.551814 161.781639) (xy 238.75 161.583453) + (xy 238.948186 161.781639) (xy 239.218432 161.962211) (xy 239.518713 162.086592) (xy 239.837489 162.15) (xy 240.162511 162.15) + (xy 240.481287 162.086592) (xy 240.781568 161.962211) (xy 241.051814 161.781639) (xy 241.25 161.583453) (xy 241.448186 161.781639) + (xy 241.718432 161.962211) (xy 242.018713 162.086592) (xy 242.337489 162.15) (xy 242.662511 162.15) (xy 242.981287 162.086592) + (xy 243.281568 161.962211) (xy 243.551814 161.781639) (xy 243.75 161.583453) (xy 243.948186 161.781639) (xy 244.218432 161.962211) + (xy 244.518713 162.086592) (xy 244.837489 162.15) (xy 245.162511 162.15) (xy 245.481287 162.086592) (xy 245.781568 161.962211) + (xy 246.051814 161.781639) (xy 246.25 161.583453) (xy 246.448186 161.781639) (xy 246.718432 161.962211) (xy 247.018713 162.086592) + (xy 247.337489 162.15) (xy 247.662511 162.15) (xy 247.981287 162.086592) (xy 248.281568 161.962211) (xy 248.551814 161.781639) + (xy 248.75 161.583453) (xy 248.948186 161.781639) (xy 249.218432 161.962211) (xy 249.518713 162.086592) (xy 249.837489 162.15) + (xy 250.162511 162.15) (xy 250.481287 162.086592) (xy 250.781568 161.962211) (xy 251.051814 161.781639) (xy 251.25 161.583453) + (xy 251.448186 161.781639) (xy 251.718432 161.962211) (xy 252.018713 162.086592) (xy 252.337489 162.15) (xy 252.662511 162.15) + (xy 252.981287 162.086592) (xy 253.281568 161.962211) (xy 253.551814 161.781639) (xy 253.75 161.583453) (xy 253.948186 161.781639) + (xy 254.218432 161.962211) (xy 254.518713 162.086592) (xy 254.837489 162.15) (xy 255.162511 162.15) (xy 255.481287 162.086592) + (xy 255.781568 161.962211) (xy 256.051814 161.781639) (xy 256.25 161.583453) (xy 256.448186 161.781639) (xy 256.718432 161.962211) + (xy 257.018713 162.086592) (xy 257.337489 162.15) (xy 257.662511 162.15) (xy 257.981287 162.086592) (xy 258.281568 161.962211) + (xy 258.551814 161.781639) (xy 258.75 161.583453) (xy 258.948186 161.781639) (xy 259.218432 161.962211) (xy 259.518713 162.086592) + (xy 259.837489 162.15) (xy 260.162511 162.15) (xy 260.481287 162.086592) (xy 260.781568 161.962211) (xy 261.051814 161.781639) + (xy 261.25 161.583453) (xy 261.448186 161.781639) (xy 261.718432 161.962211) (xy 262.018713 162.086592) (xy 262.337489 162.15) + (xy 262.662511 162.15) (xy 262.981287 162.086592) (xy 263.281568 161.962211) (xy 263.551814 161.781639) (xy 263.609531 161.723922) + (xy 263.684603 161.815397) (xy 263.859347 161.958805) (xy 264.058711 162.065367) (xy 264.275033 162.130988) (xy 264.5 162.153145) + (xy 265.5 162.153145) (xy 265.724967 162.130988) (xy 265.941289 162.065367) (xy 266.140653 161.958805) (xy 266.315397 161.815397) + (xy 266.458805 161.640653) (xy 266.565367 161.441289) (xy 266.596854 161.337489) (xy 271.35 161.337489) (xy 271.35 161.662511) + (xy 271.413408 161.981287) (xy 271.537789 162.281568) (xy 271.718361 162.551814) (xy 271.948186 162.781639) (xy 272.218432 162.962211) + (xy 272.518713 163.086592) (xy 272.837489 163.15) (xy 273.162511 163.15) (xy 273.481287 163.086592) (xy 273.781568 162.962211) + (xy 274.051814 162.781639) (xy 274.281639 162.551814) (xy 274.462211 162.281568) (xy 274.586592 161.981287) (xy 274.65 161.662511) + (xy 274.65 161.337489) (xy 274.586592 161.018713) (xy 274.462211 160.718432) (xy 274.281639 160.448186) (xy 274.051814 160.218361) + (xy 273.781568 160.037789) (xy 273.481287 159.913408) (xy 273.162511 159.85) (xy 272.837489 159.85) (xy 272.518713 159.913408) + (xy 272.218432 160.037789) (xy 271.948186 160.218361) (xy 271.718361 160.448186) (xy 271.537789 160.718432) (xy 271.413408 161.018713) + (xy 271.35 161.337489) (xy 266.596854 161.337489) (xy 266.630988 161.224967) (xy 266.653145 161) (xy 266.653145 160) + (xy 266.630988 159.775033) (xy 266.612588 159.714375) (xy 280.1 159.714375) (xy 280.1 160.285625) (xy 280.211445 160.845899) + (xy 280.430053 161.373665) (xy 280.747423 161.848642) (xy 281.151358 162.252577) (xy 281.626335 162.569947) (xy 282.154101 162.788555) + (xy 282.714375 162.9) (xy 283.285625 162.9) (xy 283.845899 162.788555) (xy 284.373665 162.569947) (xy 284.848642 162.252577) + (xy 285.252577 161.848642) (xy 285.569947 161.373665) (xy 285.788555 160.845899) (xy 285.9 160.285625) (xy 285.9 159.714375) + (xy 285.788555 159.154101) (xy 285.569947 158.626335) (xy 285.252577 158.151358) (xy 284.848642 157.747423) (xy 284.61493 157.591261) + (xy 292.35 157.591261) (xy 292.35 158.408739) (xy 292.509482 159.21051) (xy 292.822318 159.965762) (xy 293.276485 160.645471) + (xy 293.854529 161.223515) (xy 294.534238 161.677682) (xy 295.28949 161.990518) (xy 296.091261 162.15) (xy 296.908739 162.15) + (xy 297.71051 161.990518) (xy 298.465762 161.677682) (xy 299.145471 161.223515) (xy 299.723515 160.645471) (xy 300.177682 159.965762) + (xy 300.490518 159.21051) (xy 300.65 158.408739) (xy 300.65 157.591261) (xy 300.490518 156.78949) (xy 300.177682 156.034238) + (xy 299.723515 155.354529) (xy 299.145471 154.776485) (xy 298.465762 154.322318) (xy 297.71051 154.009482) (xy 296.908739 153.85) + (xy 296.091261 153.85) (xy 295.28949 154.009482) (xy 294.534238 154.322318) (xy 293.854529 154.776485) (xy 293.276485 155.354529) + (xy 292.822318 156.034238) (xy 292.509482 156.78949) (xy 292.35 157.591261) (xy 284.61493 157.591261) (xy 284.373665 157.430053) + (xy 283.845899 157.211445) (xy 283.285625 157.1) (xy 282.714375 157.1) (xy 282.154101 157.211445) (xy 281.626335 157.430053) + (xy 281.151358 157.747423) (xy 280.747423 158.151358) (xy 280.430053 158.626335) (xy 280.211445 159.154101) (xy 280.1 159.714375) + (xy 266.612588 159.714375) (xy 266.565367 159.558711) (xy 266.458805 159.359347) (xy 266.315397 159.184603) (xy 266.140653 159.041195) + (xy 265.941289 158.934633) (xy 265.724967 158.869012) (xy 265.5 158.846855) (xy 264.633043 158.846855) (xy 265.941319 157.53858) + (xy 265.994739 157.494739) (xy 266.066931 157.406774) (xy 266.129683 157.33031) (xy 266.16969 157.281562) (xy 266.29969 157.038349) + (xy 266.379743 156.774448) (xy 266.4 156.568777) (xy 266.4 156.568769) (xy 266.406773 156.5) (xy 266.4 156.431231) + (xy 266.4 152.068769) (xy 266.406773 152) (xy 266.4 151.931231) (xy 266.4 151.931223) (xy 266.379743 151.725552) + (xy 266.29969 151.461651) (xy 266.16969 151.218438) (xy 266.089114 151.120257) (xy 266.038582 151.058683) (xy 266.038576 151.058677) + (xy 265.994738 151.005261) (xy 265.941324 150.961425) (xy 264.208659 149.228761) (xy 264.445791 149.326984) (xy 264.812866 149.4) + (xy 265.187134 149.4) (xy 265.554209 149.326984) (xy 265.899987 149.183758) (xy 266.211179 148.975826) (xy 266.451159 148.735846) + (xy 294.068 148.735846) (xy 294.068 149.264154) (xy 294.171068 149.782311) (xy 294.373242 150.270403) (xy 294.666755 150.709675) + (xy 295.040325 151.083245) (xy 295.479597 151.376758) (xy 295.967689 151.578932) (xy 296.485846 151.682) (xy 297.014154 151.682) + (xy 297.532311 151.578932) (xy 298.020403 151.376758) (xy 298.459675 151.083245) (xy 298.833245 150.709675) (xy 299.126758 150.270403) + (xy 299.328932 149.782311) (xy 299.432 149.264154) (xy 299.432 148.735846) (xy 299.328932 148.217689) (xy 299.126758 147.729597) + (xy 298.833245 147.290325) (xy 298.459675 146.916755) (xy 298.020403 146.623242) (xy 297.532311 146.421068) (xy 297.014154 146.318) + (xy 296.485846 146.318) (xy 295.967689 146.421068) (xy 295.479597 146.623242) (xy 295.040325 146.916755) (xy 294.666755 147.290325) + (xy 294.373242 147.729597) (xy 294.171068 148.217689) (xy 294.068 148.735846) (xy 266.451159 148.735846) (xy 266.475826 148.711179) + (xy 266.683758 148.399987) (xy 266.826984 148.054209) (xy 266.9 147.687134) (xy 266.9 147.312866) (xy 266.826984 146.945791) + (xy 266.683758 146.600013) (xy 266.475826 146.288821) (xy 266.211179 146.024174) (xy 265.899987 145.816242) (xy 265.554209 145.673016) + (xy 265.187134 145.6) (xy 264.812866 145.6) (xy 264.445791 145.673016) (xy 264.100013 145.816242) (xy 263.9 145.949887) + (xy 263.9 144.050113) (xy 264.100013 144.183758) (xy 264.445791 144.326984) (xy 264.812866 144.4) (xy 265.187134 144.4) + (xy 265.554209 144.326984) (xy 265.899987 144.183758) (xy 266.211179 143.975826) (xy 266.475826 143.711179) (xy 266.683758 143.399987) + (xy 266.826984 143.054209) (xy 266.9 142.687134) (xy 266.9 142.312866) (xy 266.826984 141.945791) (xy 266.683758 141.600013) + (xy 266.475826 141.288821) (xy 266.211179 141.024174) (xy 265.899987 140.816242) (xy 265.554209 140.673016) (xy 265.187134 140.6) + (xy 264.812866 140.6) (xy 264.445791 140.673016) (xy 264.100013 140.816242) (xy 263.9 140.949887) (xy 263.9 138.787005) + (xy 263.975826 138.711179) (xy 264.183758 138.399987) (xy 264.326984 138.054209) (xy 264.4 137.687134) (xy 264.4 137.312866) + (xy 264.326984 136.945791) (xy 264.183758 136.600013) (xy 263.975826 136.288821) (xy 263.9 136.212995) (xy 263.9 135.762) + (xy 281.332045 135.762) (xy 281.339845 135.841198) (xy 281.362946 135.917352) (xy 281.400461 135.987537) (xy 281.450946 136.049054) + (xy 281.512463 136.099539) (xy 281.582648 136.137054) (xy 281.658802 136.160155) (xy 281.738 136.167955) (xy 282.099 136.166) + (xy 282.2 136.065) (xy 282.2 135.3) (xy 282.8 135.3) (xy 282.8 136.065) (xy 282.901 136.166) + (xy 283.262 136.167955) (xy 283.341198 136.160155) (xy 283.417352 136.137054) (xy 283.487537 136.099539) (xy 283.549054 136.049054) + (xy 283.599539 135.987537) (xy 283.637054 135.917352) (xy 283.660155 135.841198) (xy 283.667955 135.762) (xy 283.666 135.401) + (xy 283.565 135.3) (xy 282.8 135.3) (xy 282.2 135.3) (xy 281.435 135.3) (xy 281.334 135.401) + (xy 281.332045 135.762) (xy 263.9 135.762) (xy 263.9 134.238) (xy 281.332045 134.238) (xy 281.334 134.599) + (xy 281.435 134.7) (xy 282.2 134.7) (xy 282.2 133.935) (xy 282.8 133.935) (xy 282.8 134.7) + (xy 283.565 134.7) (xy 283.666 134.599) (xy 283.667955 134.238) (xy 283.660155 134.158802) (xy 283.637054 134.082648) + (xy 283.599539 134.012463) (xy 283.549054 133.950946) (xy 283.487537 133.900461) (xy 283.417352 133.862946) (xy 283.341198 133.839845) + (xy 283.262 133.832045) (xy 282.901 133.834) (xy 282.8 133.935) (xy 282.2 133.935) (xy 282.099 133.834) + (xy 281.738 133.832045) (xy 281.658802 133.839845) (xy 281.582648 133.862946) (xy 281.512463 133.900461) (xy 281.450946 133.950946) + (xy 281.400461 134.012463) (xy 281.362946 134.082648) (xy 281.339845 134.158802) (xy 281.332045 134.238) (xy 263.9 134.238) + (xy 263.9 133.787005) (xy 263.975826 133.711179) (xy 264.183758 133.399987) (xy 264.326984 133.054209) (xy 264.4 132.687134) + (xy 264.4 132.312866) (xy 264.326984 131.945791) (xy 264.183758 131.600013) (xy 263.975826 131.288821) (xy 263.711179 131.024174) + (xy 263.399987 130.816242) (xy 263.054209 130.673016) (xy 262.687134 130.6) (xy 262.312866 130.6) (xy 261.945791 130.673016) + (xy 261.600013 130.816242) (xy 261.288821 131.024174) (xy 261.024174 131.288821) (xy 260.816242 131.600013) (xy 260.673016 131.945791) + (xy 260.6 132.312866) (xy 260.6 132.687134) (xy 260.673016 133.054209) (xy 260.816242 133.399987) (xy 261.024174 133.711179) + (xy 261.100001 133.787006) (xy 261.1 136.212995) (xy 261.024174 136.288821) (xy 260.816242 136.600013) (xy 260.673016 136.945791) + (xy 260.6 137.312866) (xy 260.6 137.687134) (xy 260.673016 138.054209) (xy 260.816242 138.399987) (xy 261.024174 138.711179) + (xy 261.1 138.787005) (xy 261.1 140.949887) (xy 260.899987 140.816242) (xy 260.554209 140.673016) (xy 260.187134 140.6) + (xy 259.812866 140.6) (xy 259.445791 140.673016) (xy 259.100013 140.816242) (xy 258.9 140.949887) (xy 258.9 138.787005) + (xy 258.975826 138.711179) (xy 259.183758 138.399987) (xy 259.326984 138.054209) (xy 259.4 137.687134) (xy 259.4 137.312866) + (xy 259.326984 136.945791) (xy 259.183758 136.600013) (xy 258.975826 136.288821) (xy 258.9 136.212995) (xy 258.9 133.787005) + (xy 258.975826 133.711179) (xy 259.183758 133.399987) (xy 259.326984 133.054209) (xy 259.4 132.687134) (xy 259.4 132.312866) + (xy 259.326984 131.945791) (xy 259.183758 131.600013) (xy 258.975826 131.288821) (xy 258.711179 131.024174) (xy 258.399987 130.816242) + (xy 258.054209 130.673016) (xy 257.687134 130.6) (xy 257.312866 130.6) (xy 256.945791 130.673016) (xy 256.600013 130.816242) + (xy 256.288821 131.024174) (xy 256.024174 131.288821) (xy 255.816242 131.600013) (xy 255.673016 131.945791) (xy 255.6 132.312866) + (xy 255.6 132.687134) (xy 255.673016 133.054209) (xy 255.816242 133.399987) (xy 256.024174 133.711179) (xy 256.100001 133.787006) + (xy 256.1 136.212995) (xy 256.024174 136.288821) (xy 255.816242 136.600013) (xy 255.673016 136.945791) (xy 255.6 137.312866) + (xy 255.6 137.687134) (xy 255.673016 138.054209) (xy 255.816242 138.399987) (xy 256.024174 138.711179) (xy 256.1 138.787005) + (xy 256.1 140.949887) (xy 255.899987 140.816242) (xy 255.554209 140.673016) (xy 255.187134 140.6) (xy 254.812866 140.6) + (xy 254.445791 140.673016) (xy 254.100013 140.816242) (xy 253.9 140.949887) (xy 253.9 138.787005) (xy 253.975826 138.711179) + (xy 254.183758 138.399987) (xy 254.326984 138.054209) (xy 254.4 137.687134) (xy 254.4 137.312866) (xy 254.326984 136.945791) + (xy 254.183758 136.600013) (xy 253.975826 136.288821) (xy 253.9 136.212995) (xy 253.9 133.787005) (xy 253.975826 133.711179) + (xy 254.183758 133.399987) (xy 254.326984 133.054209) (xy 254.4 132.687134) (xy 254.4 132.312866) (xy 254.326984 131.945791) + (xy 254.183758 131.600013) (xy 253.975826 131.288821) (xy 253.711179 131.024174) (xy 253.399987 130.816242) (xy 253.054209 130.673016) + (xy 252.687134 130.6) (xy 252.312866 130.6) (xy 251.945791 130.673016) (xy 251.600013 130.816242) (xy 251.288821 131.024174) + (xy 251.024174 131.288821) (xy 250.816242 131.600013) (xy 250.673016 131.945791) (xy 250.6 132.312866) (xy 250.6 132.687134) + (xy 250.673016 133.054209) (xy 250.816242 133.399987) (xy 251.024174 133.711179) (xy 251.100001 133.787006) (xy 251.1 136.212995) + (xy 251.024174 136.288821) (xy 250.816242 136.600013) (xy 250.673016 136.945791) (xy 250.6 137.312866) (xy 250.6 137.687134) + (xy 250.673016 138.054209) (xy 250.816242 138.399987) (xy 251.024174 138.711179) (xy 251.1 138.787005) (xy 251.1 140.949887) + (xy 250.899987 140.816242) (xy 250.554209 140.673016) (xy 250.187134 140.6) (xy 249.812866 140.6) (xy 249.445791 140.673016) + (xy 249.100013 140.816242) (xy 248.9 140.949887) (xy 248.9 138.787005) (xy 248.975826 138.711179) (xy 249.183758 138.399987) + (xy 249.326984 138.054209) (xy 249.4 137.687134) (xy 249.4 137.312866) (xy 249.326984 136.945791) (xy 249.183758 136.600013) + (xy 248.975826 136.288821) (xy 248.9 136.212995) (xy 248.9 133.787005) (xy 248.975826 133.711179) (xy 249.183758 133.399987) + (xy 249.326984 133.054209) (xy 249.4 132.687134) (xy 249.4 132.312866) (xy 249.326984 131.945791) (xy 249.183758 131.600013) + (xy 248.975826 131.288821) (xy 248.711179 131.024174) (xy 248.399987 130.816242) (xy 248.054209 130.673016) (xy 247.687134 130.6) + (xy 247.312866 130.6) (xy 246.945791 130.673016) (xy 246.600013 130.816242) (xy 246.288821 131.024174) (xy 246.024174 131.288821) + (xy 245.816242 131.600013) (xy 245.673016 131.945791) (xy 245.6 132.312866) (xy 245.6 132.687134) (xy 245.673016 133.054209) + (xy 245.816242 133.399987) (xy 246.024174 133.711179) (xy 246.100001 133.787006) (xy 246.1 136.212995) (xy 246.024174 136.288821) + (xy 245.816242 136.600013) (xy 245.673016 136.945791) (xy 245.6 137.312866) (xy 245.6 137.687134) (xy 245.673016 138.054209) + (xy 245.816242 138.399987) (xy 246.024174 138.711179) (xy 246.1 138.787005) (xy 246.1 140.949887) (xy 245.899987 140.816242) + (xy 245.554209 140.673016) (xy 245.187134 140.6) (xy 244.812866 140.6) (xy 244.445791 140.673016) (xy 244.100013 140.816242) + (xy 243.9 140.949887) (xy 243.9 138.787005) (xy 243.975826 138.711179) (xy 244.183758 138.399987) (xy 244.326984 138.054209) + (xy 244.4 137.687134) (xy 244.4 137.312866) (xy 244.326984 136.945791) (xy 244.183758 136.600013) (xy 243.975826 136.288821) + (xy 243.9 136.212995) (xy 243.9 133.787005) (xy 243.975826 133.711179) (xy 244.183758 133.399987) (xy 244.326984 133.054209) + (xy 244.4 132.687134) (xy 244.4 132.312866) (xy 244.326984 131.945791) (xy 244.183758 131.600013) (xy 243.975826 131.288821) + (xy 243.711179 131.024174) (xy 243.399987 130.816242) (xy 243.054209 130.673016) (xy 242.687134 130.6) (xy 242.312866 130.6) + (xy 241.945791 130.673016) (xy 241.600013 130.816242) (xy 241.288821 131.024174) (xy 241.024174 131.288821) (xy 240.816242 131.600013) + (xy 240.673016 131.945791) (xy 240.6 132.312866) (xy 240.6 132.687134) (xy 240.673016 133.054209) (xy 240.816242 133.399987) + (xy 241.024174 133.711179) (xy 241.100001 133.787006) (xy 241.1 136.212995) (xy 241.024174 136.288821) (xy 240.816242 136.600013) + (xy 240.673016 136.945791) (xy 240.6 137.312866) (xy 240.6 137.687134) (xy 240.673016 138.054209) (xy 240.816242 138.399987) + (xy 241.024174 138.711179) (xy 241.1 138.787005) (xy 241.1 140.949887) (xy 240.899987 140.816242) (xy 240.554209 140.673016) + (xy 240.187134 140.6) (xy 239.812866 140.6) (xy 239.445791 140.673016) (xy 239.100013 140.816242) (xy 238.9 140.949887) + (xy 238.9 138.787005) (xy 238.975826 138.711179) (xy 239.183758 138.399987) (xy 239.326984 138.054209) (xy 239.4 137.687134) + (xy 239.4 137.312866) (xy 239.326984 136.945791) (xy 239.183758 136.600013) (xy 238.975826 136.288821) (xy 238.9 136.212995) + (xy 238.9 133.787005) (xy 238.975826 133.711179) (xy 239.183758 133.399987) (xy 239.326984 133.054209) (xy 239.4 132.687134) + (xy 239.4 132.312866) (xy 239.326984 131.945791) (xy 239.183758 131.600013) (xy 238.975826 131.288821) (xy 238.711179 131.024174) + (xy 238.399987 130.816242) (xy 238.054209 130.673016) (xy 237.687134 130.6) (xy 237.312866 130.6) (xy 236.945791 130.673016) + (xy 236.600013 130.816242) (xy 236.288821 131.024174) (xy 236.024174 131.288821) (xy 235.816242 131.600013) (xy 235.673016 131.945791) + (xy 235.6 132.312866) (xy 235.6 132.687134) (xy 235.673016 133.054209) (xy 235.816242 133.399987) (xy 236.024174 133.711179) + (xy 236.1 133.787005) (xy 236.100001 136.212994) (xy 236.024174 136.288821) (xy 235.816242 136.600013) (xy 235.673016 136.945791) + (xy 235.6 137.312866) (xy 235.6 137.687134) (xy 235.673016 138.054209) (xy 235.816242 138.399987) (xy 236.024174 138.711179) + (xy 236.1 138.787005) (xy 236.1 140.949887) (xy 235.899987 140.816242) (xy 235.554209 140.673016) (xy 235.187134 140.6) + (xy 234.812866 140.6) (xy 234.445791 140.673016) (xy 234.100013 140.816242) (xy 233.9 140.949887) (xy 233.9 138.787005) + (xy 233.975826 138.711179) (xy 234.183758 138.399987) (xy 234.326984 138.054209) (xy 234.4 137.687134) (xy 234.4 137.312866) + (xy 234.326984 136.945791) (xy 234.183758 136.600013) (xy 233.975826 136.288821) (xy 233.9 136.212995) (xy 233.9 133.787005) + (xy 233.975826 133.711179) (xy 234.183758 133.399987) (xy 234.326984 133.054209) (xy 234.4 132.687134) (xy 234.4 132.312866) + (xy 234.326984 131.945791) (xy 234.183758 131.600013) (xy 233.975826 131.288821) (xy 233.711179 131.024174) (xy 233.399987 130.816242) + (xy 233.054209 130.673016) (xy 232.687134 130.6) (xy 232.312866 130.6) (xy 231.945791 130.673016) (xy 231.600013 130.816242) + (xy 231.288821 131.024174) (xy 231.024174 131.288821) (xy 230.816242 131.600013) (xy 230.673016 131.945791) (xy 230.6 132.312866) + (xy 230.6 132.687134) (xy 230.673016 133.054209) (xy 230.816242 133.399987) (xy 231.024174 133.711179) (xy 231.100001 133.787006) + (xy 231.1 136.212995) (xy 231.024174 136.288821) (xy 230.816242 136.600013) (xy 230.673016 136.945791) (xy 230.6 137.312866) + (xy 230.6 137.687134) (xy 230.673016 138.054209) (xy 230.816242 138.399987) (xy 231.024174 138.711179) (xy 231.1 138.787005) + (xy 231.1 140.949887) (xy 230.899987 140.816242) (xy 230.554209 140.673016) (xy 230.187134 140.6) (xy 229.812866 140.6) + (xy 229.445791 140.673016) (xy 229.100013 140.816242) (xy 228.9 140.949887) (xy 228.9 138.787005) (xy 228.975826 138.711179) + (xy 229.183758 138.399987) (xy 229.326984 138.054209) (xy 229.4 137.687134) (xy 229.4 137.312866) (xy 229.326984 136.945791) + (xy 229.183758 136.600013) (xy 228.975826 136.288821) (xy 228.9 136.212995) (xy 228.9 133.787005) (xy 228.975826 133.711179) + (xy 229.183758 133.399987) (xy 229.326984 133.054209) (xy 229.4 132.687134) (xy 229.4 132.312866) (xy 229.326984 131.945791) + (xy 229.183758 131.600013) (xy 228.975826 131.288821) (xy 228.711179 131.024174) (xy 228.399987 130.816242) (xy 228.054209 130.673016) + (xy 227.687134 130.6) (xy 227.312866 130.6) (xy 226.945791 130.673016) (xy 226.600013 130.816242) (xy 226.288821 131.024174) + (xy 226.024174 131.288821) (xy 225.816242 131.600013) (xy 225.673016 131.945791) (xy 225.6 132.312866) (xy 225.6 132.687134) + (xy 225.673016 133.054209) (xy 225.816242 133.399987) (xy 226.024174 133.711179) (xy 226.1 133.787005) (xy 226.100001 136.212994) + (xy 226.024174 136.288821) (xy 225.816242 136.600013) (xy 225.673016 136.945791) (xy 225.6 137.312866) (xy 225.6 137.687134) + (xy 225.673016 138.054209) (xy 225.816242 138.399987) (xy 226.024174 138.711179) (xy 226.1 138.787005) (xy 226.1 140.949887) + (xy 225.899987 140.816242) (xy 225.554209 140.673016) (xy 225.187134 140.6) (xy 224.812866 140.6) (xy 224.445791 140.673016) + (xy 224.100013 140.816242) (xy 223.9 140.949887) (xy 223.9 138.787005) (xy 223.975826 138.711179) (xy 224.183758 138.399987) + (xy 224.326984 138.054209) (xy 224.4 137.687134) (xy 224.4 137.312866) (xy 224.326984 136.945791) (xy 224.183758 136.600013) + (xy 223.975826 136.288821) (xy 223.9 136.212995) (xy 223.9 133.787005) (xy 223.975826 133.711179) (xy 224.183758 133.399987) + (xy 224.326984 133.054209) (xy 224.4 132.687134) (xy 224.4 132.312866) (xy 224.326984 131.945791) (xy 224.183758 131.600013) + (xy 223.975826 131.288821) (xy 223.711179 131.024174) (xy 223.399987 130.816242) (xy 223.054209 130.673016) (xy 222.687134 130.6) + (xy 222.312866 130.6) (xy 221.945791 130.673016) (xy 221.600013 130.816242) (xy 221.288821 131.024174) (xy 221.024174 131.288821) + (xy 220.816242 131.600013) (xy 220.673016 131.945791) (xy 220.6 132.312866) (xy 220.6 132.687134) (xy 220.673016 133.054209) + (xy 220.816242 133.399987) (xy 221.024174 133.711179) (xy 221.100001 133.787006) (xy 221.1 136.212995) (xy 221.024174 136.288821) + (xy 220.816242 136.600013) (xy 220.673016 136.945791) (xy 220.6 137.312866) (xy 220.6 137.687134) (xy 220.673016 138.054209) + (xy 220.816242 138.399987) (xy 221.024174 138.711179) (xy 221.1 138.787005) (xy 221.1 140.949887) (xy 220.899987 140.816242) + (xy 220.554209 140.673016) (xy 220.187134 140.6) (xy 219.812866 140.6) (xy 219.445791 140.673016) (xy 219.100013 140.816242) + (xy 218.9 140.949887) (xy 218.9 138.787005) (xy 218.975826 138.711179) (xy 219.183758 138.399987) (xy 219.326984 138.054209) + (xy 219.4 137.687134) (xy 219.4 137.312866) (xy 219.326984 136.945791) (xy 219.183758 136.600013) (xy 218.975826 136.288821) + (xy 218.9 136.212995) (xy 218.9 133.787005) (xy 218.975826 133.711179) (xy 219.183758 133.399987) (xy 219.326984 133.054209) + (xy 219.4 132.687134) (xy 219.4 132.312866) (xy 219.326984 131.945791) (xy 219.183758 131.600013) (xy 218.975826 131.288821) + (xy 218.711179 131.024174) (xy 218.399987 130.816242) (xy 218.054209 130.673016) (xy 217.687134 130.6) (xy 217.312866 130.6) + (xy 216.945791 130.673016) (xy 216.600013 130.816242) (xy 216.288821 131.024174) (xy 216.024174 131.288821) (xy 215.816242 131.600013) + (xy 215.673016 131.945791) (xy 215.6 132.312866) (xy 215.6 132.687134) (xy 215.673016 133.054209) (xy 215.816242 133.399987) + (xy 216.024174 133.711179) (xy 216.100001 133.787006) (xy 216.1 136.212995) (xy 216.024174 136.288821) (xy 215.816242 136.600013) + (xy 215.673016 136.945791) (xy 215.6 137.312866) (xy 215.6 137.687134) (xy 215.673016 138.054209) (xy 215.816242 138.399987) + (xy 216.024174 138.711179) (xy 216.1 138.787005) (xy 216.1 140.949887) (xy 215.899987 140.816242) (xy 215.554209 140.673016) + (xy 215.187134 140.6) (xy 214.812866 140.6) (xy 214.445791 140.673016) (xy 214.100013 140.816242) (xy 213.9 140.949887) + (xy 213.9 138.787005) (xy 213.975826 138.711179) (xy 214.183758 138.399987) (xy 214.326984 138.054209) (xy 214.4 137.687134) + (xy 214.4 137.312866) (xy 214.326984 136.945791) (xy 214.183758 136.600013) (xy 213.975826 136.288821) (xy 213.9 136.212995) + (xy 213.9 133.787005) (xy 213.975826 133.711179) (xy 214.183758 133.399987) (xy 214.326984 133.054209) (xy 214.4 132.687134) + (xy 214.4 132.312866) (xy 214.326984 131.945791) (xy 214.183758 131.600013) (xy 213.975826 131.288821) (xy 213.711179 131.024174) + (xy 213.399987 130.816242) (xy 213.054209 130.673016) (xy 212.687134 130.6) (xy 212.312866 130.6) (xy 211.945791 130.673016) + (xy 211.600013 130.816242) (xy 211.288821 131.024174) (xy 211.024174 131.288821) (xy 210.816242 131.600013) (xy 210.673016 131.945791) + (xy 210.6 132.312866) (xy 210.6 132.687134) (xy 210.673016 133.054209) (xy 210.816242 133.399987) (xy 211.024174 133.711179) + (xy 211.100001 133.787006) (xy 211.1 136.212995) (xy 211.024174 136.288821) (xy 210.816242 136.600013) (xy 210.673016 136.945791) + (xy 210.6 137.312866) (xy 210.6 137.687134) (xy 210.673016 138.054209) (xy 210.816242 138.399987) (xy 211.024174 138.711179) + (xy 211.1 138.787005) (xy 211.1 140.949887) (xy 210.899987 140.816242) (xy 210.554209 140.673016) (xy 210.187134 140.6) + (xy 209.812866 140.6) (xy 209.445791 140.673016) (xy 209.100013 140.816242) (xy 208.9 140.949887) (xy 208.9 138.787005) + (xy 208.975826 138.711179) (xy 209.183758 138.399987) (xy 209.326984 138.054209) (xy 209.4 137.687134) (xy 209.4 137.312866) + (xy 209.326984 136.945791) (xy 209.183758 136.600013) (xy 208.975826 136.288821) (xy 208.9 136.212995) (xy 208.9 133.787005) + (xy 208.975826 133.711179) (xy 209.183758 133.399987) (xy 209.326984 133.054209) (xy 209.4 132.687134) (xy 209.4 132.312866) + (xy 209.326984 131.945791) (xy 209.183758 131.600013) (xy 208.975826 131.288821) (xy 208.711179 131.024174) (xy 208.399987 130.816242) + (xy 208.054209 130.673016) (xy 207.687134 130.6) (xy 207.312866 130.6) (xy 206.945791 130.673016) (xy 206.600013 130.816242) + (xy 206.288821 131.024174) (xy 206.024174 131.288821) (xy 205.816242 131.600013) (xy 205.673016 131.945791) (xy 205.6 132.312866) + (xy 205.6 132.687134) (xy 205.673016 133.054209) (xy 205.816242 133.399987) (xy 206.024174 133.711179) (xy 206.100001 133.787006) + (xy 206.1 136.212995) (xy 206.024174 136.288821) (xy 205.816242 136.600013) (xy 205.673016 136.945791) (xy 205.6 137.312866) + (xy 205.6 137.687134) (xy 205.673016 138.054209) (xy 205.816242 138.399987) (xy 206.024174 138.711179) (xy 206.1 138.787005) + (xy 206.1 140.949887) (xy 205.899987 140.816242) (xy 205.554209 140.673016) (xy 205.187134 140.6) (xy 204.812866 140.6) + (xy 204.445791 140.673016) (xy 204.100013 140.816242) (xy 203.9 140.949887) (xy 203.9 138.787005) (xy 203.975826 138.711179) + (xy 204.183758 138.399987) (xy 204.326984 138.054209) (xy 204.4 137.687134) (xy 204.4 137.312866) (xy 204.326984 136.945791) + (xy 204.183758 136.600013) (xy 203.975826 136.288821) (xy 203.9 136.212995) (xy 203.9 133.787005) (xy 203.975826 133.711179) + (xy 204.183758 133.399987) (xy 204.326984 133.054209) (xy 204.4 132.687134) (xy 204.4 132.312866) (xy 204.326984 131.945791) + (xy 204.183758 131.600013) (xy 203.975826 131.288821) (xy 203.711179 131.024174) (xy 203.399987 130.816242) (xy 203.054209 130.673016) + (xy 202.687134 130.6) (xy 202.312866 130.6) (xy 201.945791 130.673016) (xy 201.600013 130.816242) (xy 201.288821 131.024174) + (xy 201.024174 131.288821) (xy 200.816242 131.600013) (xy 200.673016 131.945791) (xy 200.6 132.312866) (xy 200.6 132.687134) + (xy 200.673016 133.054209) (xy 200.816242 133.399987) (xy 201.024174 133.711179) (xy 201.100001 133.787006) (xy 201.1 136.212995) + (xy 201.024174 136.288821) (xy 200.816242 136.600013) (xy 200.673016 136.945791) (xy 200.6 137.312866) (xy 200.6 137.687134) + (xy 200.673016 138.054209) (xy 200.816242 138.399987) (xy 201.024174 138.711179) (xy 201.1 138.787005) (xy 201.1 140.949887) + (xy 200.899987 140.816242) (xy 200.554209 140.673016) (xy 200.187134 140.6) (xy 199.812866 140.6) (xy 199.445791 140.673016) + (xy 199.100013 140.816242) (xy 198.9 140.949887) (xy 198.9 138.787005) (xy 198.975826 138.711179) (xy 199.183758 138.399987) + (xy 199.326984 138.054209) (xy 199.4 137.687134) (xy 199.4 137.312866) (xy 199.326984 136.945791) (xy 199.183758 136.600013) + (xy 198.975826 136.288821) (xy 198.9 136.212995) (xy 198.9 133.787005) (xy 198.975826 133.711179) (xy 199.183758 133.399987) + (xy 199.326984 133.054209) (xy 199.4 132.687134) (xy 199.4 132.312866) (xy 199.326984 131.945791) (xy 199.183758 131.600013) + (xy 198.975826 131.288821) (xy 198.711179 131.024174) (xy 198.399987 130.816242) (xy 198.054209 130.673016) (xy 197.687134 130.6) + (xy 197.312866 130.6) (xy 196.945791 130.673016) (xy 196.600013 130.816242) (xy 196.288821 131.024174) (xy 196.024174 131.288821) + (xy 195.816242 131.600013) (xy 195.673016 131.945791) (xy 195.6 132.312866) (xy 195.6 132.687134) (xy 195.673016 133.054209) + (xy 195.816242 133.399987) (xy 196.024174 133.711179) (xy 196.100001 133.787006) (xy 196.1 136.212995) (xy 196.024174 136.288821) + (xy 195.816242 136.600013) (xy 195.673016 136.945791) (xy 195.6 137.312866) (xy 195.6 137.687134) (xy 195.673016 138.054209) + (xy 195.816242 138.399987) (xy 196.024174 138.711179) (xy 196.1 138.787005) (xy 196.1 140.949887) (xy 195.899987 140.816242) + (xy 195.554209 140.673016) (xy 195.187134 140.6) (xy 194.812866 140.6) (xy 194.445791 140.673016) (xy 194.100013 140.816242) + (xy 193.9 140.949887) (xy 193.9 138.787005) (xy 193.975826 138.711179) (xy 194.183758 138.399987) (xy 194.326984 138.054209) + (xy 194.4 137.687134) (xy 194.4 137.312866) (xy 194.326984 136.945791) (xy 194.183758 136.600013) (xy 193.975826 136.288821) + (xy 193.9 136.212995) (xy 193.9 133.787005) (xy 193.975826 133.711179) (xy 194.183758 133.399987) (xy 194.326984 133.054209) + (xy 194.4 132.687134) (xy 194.4 132.312866) (xy 194.326984 131.945791) (xy 194.183758 131.600013) (xy 193.975826 131.288821) + (xy 193.711179 131.024174) (xy 193.399987 130.816242) (xy 193.054209 130.673016) (xy 192.687134 130.6) (xy 192.312866 130.6) + (xy 191.945791 130.673016) (xy 191.600013 130.816242) (xy 191.288821 131.024174) (xy 191.024174 131.288821) (xy 190.816242 131.600013) + (xy 190.673016 131.945791) (xy 190.6 132.312866) (xy 190.6 132.687134) (xy 190.673016 133.054209) (xy 190.816242 133.399987) + (xy 191.024174 133.711179) (xy 191.100001 133.787006) (xy 191.1 136.212995) (xy 191.024174 136.288821) (xy 190.816242 136.600013) + (xy 190.673016 136.945791) (xy 190.6 137.312866) (xy 190.6 137.687134) (xy 190.673016 138.054209) (xy 190.816242 138.399987) + (xy 191.024174 138.711179) (xy 191.1 138.787005) (xy 191.1 140.949887) (xy 190.899987 140.816242) (xy 190.554209 140.673016) + (xy 190.187134 140.6) (xy 189.812866 140.6) (xy 189.445791 140.673016) (xy 189.100013 140.816242) (xy 188.9 140.949887) + (xy 188.9 138.787005) (xy 188.975826 138.711179) (xy 189.183758 138.399987) (xy 189.326984 138.054209) (xy 189.4 137.687134) + (xy 189.4 137.312866) (xy 189.326984 136.945791) (xy 189.183758 136.600013) (xy 188.975826 136.288821) (xy 188.9 136.212995) + (xy 188.9 133.787005) (xy 188.975826 133.711179) (xy 189.183758 133.399987) (xy 189.326984 133.054209) (xy 189.4 132.687134) + (xy 189.4 132.312866) (xy 189.326984 131.945791) (xy 189.183758 131.600013) (xy 188.975826 131.288821) (xy 188.711179 131.024174) + (xy 188.399987 130.816242) (xy 188.054209 130.673016) (xy 187.687134 130.6) (xy 187.312866 130.6) (xy 186.945791 130.673016) + (xy 186.600013 130.816242) (xy 186.288821 131.024174) (xy 186.024174 131.288821) (xy 185.816242 131.600013) (xy 185.673016 131.945791) + (xy 185.6 132.312866) (xy 185.6 132.687134) (xy 185.673016 133.054209) (xy 185.816242 133.399987) (xy 186.024174 133.711179) + (xy 186.100001 133.787006) (xy 186.1 136.212995) (xy 186.024174 136.288821) (xy 185.816242 136.600013) (xy 185.673016 136.945791) + (xy 185.6 137.312866) (xy 185.6 137.687134) (xy 185.673016 138.054209) (xy 185.816242 138.399987) (xy 186.024174 138.711179) + (xy 186.1 138.787005) (xy 186.1 140.949887) (xy 185.899987 140.816242) (xy 185.554209 140.673016) (xy 185.187134 140.6) + (xy 184.812866 140.6) (xy 184.445791 140.673016) (xy 184.100013 140.816242) (xy 183.9 140.949887) (xy 183.9 138.787005) + (xy 183.975826 138.711179) (xy 184.183758 138.399987) (xy 184.326984 138.054209) (xy 184.4 137.687134) (xy 184.4 137.312866) + (xy 184.326984 136.945791) (xy 184.183758 136.600013) (xy 183.975826 136.288821) (xy 183.9 136.212995) (xy 183.9 133.787005) + (xy 183.975826 133.711179) (xy 184.183758 133.399987) (xy 184.326984 133.054209) (xy 184.4 132.687134) (xy 184.4 132.312866) + (xy 184.326984 131.945791) (xy 184.183758 131.600013) (xy 183.975826 131.288821) (xy 183.711179 131.024174) (xy 183.399987 130.816242) + (xy 183.054209 130.673016) (xy 182.687134 130.6) (xy 182.312866 130.6) (xy 181.945791 130.673016) (xy 181.600013 130.816242) + (xy 181.288821 131.024174) (xy 181.024174 131.288821) (xy 180.816242 131.600013) (xy 180.673016 131.945791) (xy 180.6 132.312866) + (xy 180.6 132.687134) (xy 180.673016 133.054209) (xy 180.816242 133.399987) (xy 181.024174 133.711179) (xy 181.100001 133.787006) + (xy 181.1 136.212995) (xy 181.024174 136.288821) (xy 180.816242 136.600013) (xy 180.673016 136.945791) (xy 180.6 137.312866) + (xy 180.6 137.687134) (xy 180.673016 138.054209) (xy 180.816242 138.399987) (xy 181.024174 138.711179) (xy 181.1 138.787005) + (xy 181.1 140.949887) (xy 180.899987 140.816242) (xy 180.554209 140.673016) (xy 180.187134 140.6) (xy 179.812866 140.6) + (xy 179.445791 140.673016) (xy 179.100013 140.816242) (xy 178.9 140.949887) (xy 178.9 138.787005) (xy 178.975826 138.711179) + (xy 179.183758 138.399987) (xy 179.326984 138.054209) (xy 179.4 137.687134) (xy 179.4 137.312866) (xy 179.326984 136.945791) + (xy 179.183758 136.600013) (xy 178.975826 136.288821) (xy 178.9 136.212995) (xy 178.9 133.787005) (xy 178.975826 133.711179) + (xy 179.183758 133.399987) (xy 179.326984 133.054209) (xy 179.4 132.687134) (xy 179.4 132.312866) (xy 179.326984 131.945791) + (xy 179.183758 131.600013) (xy 178.975826 131.288821) (xy 178.711179 131.024174) (xy 178.399987 130.816242) (xy 178.054209 130.673016) + (xy 177.687134 130.6) (xy 177.312866 130.6) (xy 176.945791 130.673016) (xy 176.600013 130.816242) (xy 176.288821 131.024174) + (xy 176.024174 131.288821) (xy 175.816242 131.600013) (xy 175.673016 131.945791) (xy 175.6 132.312866) (xy 175.6 132.687134) + (xy 175.673016 133.054209) (xy 175.816242 133.399987) (xy 176.024174 133.711179) (xy 176.100001 133.787006) (xy 176.1 136.212995) + (xy 176.024174 136.288821) (xy 175.816242 136.600013) (xy 175.673016 136.945791) (xy 175.6 137.312866) (xy 175.6 137.687134) + (xy 175.673016 138.054209) (xy 175.816242 138.399987) (xy 176.024174 138.711179) (xy 176.1 138.787005) (xy 176.1 140.949887) + (xy 175.899987 140.816242) (xy 175.554209 140.673016) (xy 175.187134 140.6) (xy 174.812866 140.6) (xy 174.445791 140.673016) + (xy 174.100013 140.816242) (xy 173.788821 141.024174) (xy 173.524174 141.288821) (xy 173.316242 141.600013) (xy 173.173016 141.945791) + (xy 173.1 142.312866) (xy 146.2 142.312866) (xy 146.2 135.762) (xy 156.332045 135.762) (xy 156.339845 135.841198) + (xy 156.362946 135.917352) (xy 156.400461 135.987537) (xy 156.450946 136.049054) (xy 156.512463 136.099539) (xy 156.582648 136.137054) + (xy 156.658802 136.160155) (xy 156.738 136.167955) (xy 157.099 136.166) (xy 157.2 136.065) (xy 157.2 135.3) + (xy 157.8 135.3) (xy 157.8 136.065) (xy 157.901 136.166) (xy 158.262 136.167955) (xy 158.341198 136.160155) + (xy 158.417352 136.137054) (xy 158.487537 136.099539) (xy 158.549054 136.049054) (xy 158.599539 135.987537) (xy 158.637054 135.917352) + (xy 158.660155 135.841198) (xy 158.667955 135.762) (xy 158.666 135.401) (xy 158.565 135.3) (xy 157.8 135.3) + (xy 157.2 135.3) (xy 156.435 135.3) (xy 156.334 135.401) (xy 156.332045 135.762) (xy 146.2 135.762) + (xy 146.2 134.238) (xy 156.332045 134.238) (xy 156.334 134.599) (xy 156.435 134.7) (xy 157.2 134.7) + (xy 157.2 133.935) (xy 157.8 133.935) (xy 157.8 134.7) (xy 158.565 134.7) (xy 158.666 134.599) + (xy 158.667955 134.238) (xy 158.660155 134.158802) (xy 158.637054 134.082648) (xy 158.599539 134.012463) (xy 158.549054 133.950946) + (xy 158.487537 133.900461) (xy 158.417352 133.862946) (xy 158.341198 133.839845) (xy 158.262 133.832045) (xy 157.901 133.834) + (xy 157.8 133.935) (xy 157.2 133.935) (xy 157.099 133.834) (xy 156.738 133.832045) (xy 156.658802 133.839845) + (xy 156.582648 133.862946) (xy 156.512463 133.900461) (xy 156.450946 133.950946) (xy 156.400461 134.012463) (xy 156.362946 134.082648) + (xy 156.339845 134.158802) (xy 156.332045 134.238) (xy 146.2 134.238) (xy 146.2 127.312866) (xy 175.6 127.312866) + (xy 175.6 127.687134) (xy 175.673016 128.054209) (xy 175.816242 128.399987) (xy 176.024174 128.711179) (xy 176.288821 128.975826) + (xy 176.600013 129.183758) (xy 176.945791 129.326984) (xy 177.312866 129.4) (xy 177.687134 129.4) (xy 178.054209 129.326984) + (xy 178.399987 129.183758) (xy 178.711179 128.975826) (xy 178.975826 128.711179) (xy 179.183758 128.399987) (xy 179.326984 128.054209) + (xy 179.4 127.687134) (xy 179.4 127.312866) (xy 180.6 127.312866) (xy 180.6 127.687134) (xy 180.673016 128.054209) + (xy 180.816242 128.399987) (xy 181.024174 128.711179) (xy 181.288821 128.975826) (xy 181.600013 129.183758) (xy 181.945791 129.326984) + (xy 182.312866 129.4) (xy 182.687134 129.4) (xy 183.054209 129.326984) (xy 183.399987 129.183758) (xy 183.711179 128.975826) + (xy 183.975826 128.711179) (xy 184.183758 128.399987) (xy 184.326984 128.054209) (xy 184.4 127.687134) (xy 184.4 127.312866) + (xy 185.6 127.312866) (xy 185.6 127.687134) (xy 185.673016 128.054209) (xy 185.816242 128.399987) (xy 186.024174 128.711179) + (xy 186.288821 128.975826) (xy 186.600013 129.183758) (xy 186.945791 129.326984) (xy 187.312866 129.4) (xy 187.687134 129.4) + (xy 188.054209 129.326984) (xy 188.399987 129.183758) (xy 188.711179 128.975826) (xy 188.975826 128.711179) (xy 189.183758 128.399987) + (xy 189.326984 128.054209) (xy 189.4 127.687134) (xy 189.4 127.312866) (xy 190.6 127.312866) (xy 190.6 127.687134) + (xy 190.673016 128.054209) (xy 190.816242 128.399987) (xy 191.024174 128.711179) (xy 191.288821 128.975826) (xy 191.600013 129.183758) + (xy 191.945791 129.326984) (xy 192.312866 129.4) (xy 192.687134 129.4) (xy 193.054209 129.326984) (xy 193.399987 129.183758) + (xy 193.711179 128.975826) (xy 193.975826 128.711179) (xy 194.183758 128.399987) (xy 194.326984 128.054209) (xy 194.4 127.687134) + (xy 194.4 127.312866) (xy 195.6 127.312866) (xy 195.6 127.687134) (xy 195.673016 128.054209) (xy 195.816242 128.399987) + (xy 196.024174 128.711179) (xy 196.288821 128.975826) (xy 196.600013 129.183758) (xy 196.945791 129.326984) (xy 197.312866 129.4) + (xy 197.687134 129.4) (xy 198.054209 129.326984) (xy 198.399987 129.183758) (xy 198.711179 128.975826) (xy 198.975826 128.711179) + (xy 199.183758 128.399987) (xy 199.326984 128.054209) (xy 199.4 127.687134) (xy 199.4 127.312866) (xy 200.6 127.312866) + (xy 200.6 127.687134) (xy 200.673016 128.054209) (xy 200.816242 128.399987) (xy 201.024174 128.711179) (xy 201.288821 128.975826) + (xy 201.600013 129.183758) (xy 201.945791 129.326984) (xy 202.312866 129.4) (xy 202.687134 129.4) (xy 203.054209 129.326984) + (xy 203.399987 129.183758) (xy 203.711179 128.975826) (xy 203.975826 128.711179) (xy 204.183758 128.399987) (xy 204.326984 128.054209) + (xy 204.4 127.687134) (xy 204.4 127.312866) (xy 205.6 127.312866) (xy 205.6 127.687134) (xy 205.673016 128.054209) + (xy 205.816242 128.399987) (xy 206.024174 128.711179) (xy 206.288821 128.975826) (xy 206.600013 129.183758) (xy 206.945791 129.326984) + (xy 207.312866 129.4) (xy 207.687134 129.4) (xy 208.054209 129.326984) (xy 208.399987 129.183758) (xy 208.711179 128.975826) + (xy 208.975826 128.711179) (xy 209.183758 128.399987) (xy 209.326984 128.054209) (xy 209.4 127.687134) (xy 209.4 127.312866) + (xy 210.6 127.312866) (xy 210.6 127.687134) (xy 210.673016 128.054209) (xy 210.816242 128.399987) (xy 211.024174 128.711179) + (xy 211.288821 128.975826) (xy 211.600013 129.183758) (xy 211.945791 129.326984) (xy 212.312866 129.4) (xy 212.687134 129.4) + (xy 213.054209 129.326984) (xy 213.399987 129.183758) (xy 213.711179 128.975826) (xy 213.975826 128.711179) (xy 214.183758 128.399987) + (xy 214.326984 128.054209) (xy 214.4 127.687134) (xy 214.4 127.312866) (xy 215.6 127.312866) (xy 215.6 127.687134) + (xy 215.673016 128.054209) (xy 215.816242 128.399987) (xy 216.024174 128.711179) (xy 216.288821 128.975826) (xy 216.600013 129.183758) + (xy 216.945791 129.326984) (xy 217.312866 129.4) (xy 217.687134 129.4) (xy 218.054209 129.326984) (xy 218.399987 129.183758) + (xy 218.711179 128.975826) (xy 218.975826 128.711179) (xy 219.183758 128.399987) (xy 219.326984 128.054209) (xy 219.4 127.687134) + (xy 219.4 127.312866) (xy 220.6 127.312866) (xy 220.6 127.687134) (xy 220.673016 128.054209) (xy 220.816242 128.399987) + (xy 221.024174 128.711179) (xy 221.288821 128.975826) (xy 221.600013 129.183758) (xy 221.945791 129.326984) (xy 222.312866 129.4) + (xy 222.687134 129.4) (xy 223.054209 129.326984) (xy 223.399987 129.183758) (xy 223.711179 128.975826) (xy 223.975826 128.711179) + (xy 224.183758 128.399987) (xy 224.326984 128.054209) (xy 224.4 127.687134) (xy 224.4 127.312866) (xy 225.6 127.312866) + (xy 225.6 127.687134) (xy 225.673016 128.054209) (xy 225.816242 128.399987) (xy 226.024174 128.711179) (xy 226.288821 128.975826) + (xy 226.600013 129.183758) (xy 226.945791 129.326984) (xy 227.312866 129.4) (xy 227.687134 129.4) (xy 228.054209 129.326984) + (xy 228.399987 129.183758) (xy 228.711179 128.975826) (xy 228.975826 128.711179) (xy 229.183758 128.399987) (xy 229.326984 128.054209) + (xy 229.4 127.687134) (xy 229.4 127.312866) (xy 230.6 127.312866) (xy 230.6 127.687134) (xy 230.673016 128.054209) + (xy 230.816242 128.399987) (xy 231.024174 128.711179) (xy 231.288821 128.975826) (xy 231.600013 129.183758) (xy 231.945791 129.326984) + (xy 232.312866 129.4) (xy 232.687134 129.4) (xy 233.054209 129.326984) (xy 233.399987 129.183758) (xy 233.711179 128.975826) + (xy 233.975826 128.711179) (xy 234.183758 128.399987) (xy 234.326984 128.054209) (xy 234.4 127.687134) (xy 234.4 127.312866) + (xy 235.6 127.312866) (xy 235.6 127.687134) (xy 235.673016 128.054209) (xy 235.816242 128.399987) (xy 236.024174 128.711179) + (xy 236.288821 128.975826) (xy 236.600013 129.183758) (xy 236.945791 129.326984) (xy 237.312866 129.4) (xy 237.687134 129.4) + (xy 238.054209 129.326984) (xy 238.399987 129.183758) (xy 238.711179 128.975826) (xy 238.975826 128.711179) (xy 239.183758 128.399987) + (xy 239.326984 128.054209) (xy 239.4 127.687134) (xy 239.4 127.312866) (xy 240.6 127.312866) (xy 240.6 127.687134) + (xy 240.673016 128.054209) (xy 240.816242 128.399987) (xy 241.024174 128.711179) (xy 241.288821 128.975826) (xy 241.600013 129.183758) + (xy 241.945791 129.326984) (xy 242.312866 129.4) (xy 242.687134 129.4) (xy 243.054209 129.326984) (xy 243.399987 129.183758) + (xy 243.711179 128.975826) (xy 243.975826 128.711179) (xy 244.183758 128.399987) (xy 244.326984 128.054209) (xy 244.4 127.687134) + (xy 244.4 127.312866) (xy 245.6 127.312866) (xy 245.6 127.687134) (xy 245.673016 128.054209) (xy 245.816242 128.399987) + (xy 246.024174 128.711179) (xy 246.288821 128.975826) (xy 246.600013 129.183758) (xy 246.945791 129.326984) (xy 247.312866 129.4) + (xy 247.687134 129.4) (xy 248.054209 129.326984) (xy 248.399987 129.183758) (xy 248.711179 128.975826) (xy 248.975826 128.711179) + (xy 249.183758 128.399987) (xy 249.326984 128.054209) (xy 249.4 127.687134) (xy 249.4 127.312866) (xy 250.6 127.312866) + (xy 250.6 127.687134) (xy 250.673016 128.054209) (xy 250.816242 128.399987) (xy 251.024174 128.711179) (xy 251.288821 128.975826) + (xy 251.600013 129.183758) (xy 251.945791 129.326984) (xy 252.312866 129.4) (xy 252.687134 129.4) (xy 253.054209 129.326984) + (xy 253.399987 129.183758) (xy 253.711179 128.975826) (xy 253.975826 128.711179) (xy 254.183758 128.399987) (xy 254.326984 128.054209) + (xy 254.4 127.687134) (xy 254.4 127.312866) (xy 255.6 127.312866) (xy 255.6 127.687134) (xy 255.673016 128.054209) + (xy 255.816242 128.399987) (xy 256.024174 128.711179) (xy 256.288821 128.975826) (xy 256.600013 129.183758) (xy 256.945791 129.326984) + (xy 257.312866 129.4) (xy 257.687134 129.4) (xy 258.054209 129.326984) (xy 258.399987 129.183758) (xy 258.711179 128.975826) + (xy 258.975826 128.711179) (xy 259.183758 128.399987) (xy 259.326984 128.054209) (xy 259.4 127.687134) (xy 259.4 127.312866) + (xy 260.6 127.312866) (xy 260.6 127.687134) (xy 260.673016 128.054209) (xy 260.816242 128.399987) (xy 261.024174 128.711179) + (xy 261.288821 128.975826) (xy 261.600013 129.183758) (xy 261.945791 129.326984) (xy 262.312866 129.4) (xy 262.687134 129.4) + (xy 263.054209 129.326984) (xy 263.399987 129.183758) (xy 263.711179 128.975826) (xy 263.975826 128.711179) (xy 264.183758 128.399987) + (xy 264.326984 128.054209) (xy 264.4 127.687134) (xy 264.4 127.312866) (xy 264.326984 126.945791) (xy 264.183758 126.600013) + (xy 263.975826 126.288821) (xy 263.711179 126.024174) (xy 263.399987 125.816242) (xy 263.054209 125.673016) (xy 262.687134 125.6) + (xy 262.312866 125.6) (xy 261.945791 125.673016) (xy 261.600013 125.816242) (xy 261.288821 126.024174) (xy 261.024174 126.288821) + (xy 260.816242 126.600013) (xy 260.673016 126.945791) (xy 260.6 127.312866) (xy 259.4 127.312866) (xy 259.326984 126.945791) + (xy 259.183758 126.600013) (xy 258.975826 126.288821) (xy 258.711179 126.024174) (xy 258.399987 125.816242) (xy 258.054209 125.673016) + (xy 257.687134 125.6) (xy 257.312866 125.6) (xy 256.945791 125.673016) (xy 256.600013 125.816242) (xy 256.288821 126.024174) + (xy 256.024174 126.288821) (xy 255.816242 126.600013) (xy 255.673016 126.945791) (xy 255.6 127.312866) (xy 254.4 127.312866) + (xy 254.326984 126.945791) (xy 254.183758 126.600013) (xy 253.975826 126.288821) (xy 253.711179 126.024174) (xy 253.399987 125.816242) + (xy 253.054209 125.673016) (xy 252.687134 125.6) (xy 252.312866 125.6) (xy 251.945791 125.673016) (xy 251.600013 125.816242) + (xy 251.288821 126.024174) (xy 251.024174 126.288821) (xy 250.816242 126.600013) (xy 250.673016 126.945791) (xy 250.6 127.312866) + (xy 249.4 127.312866) (xy 249.326984 126.945791) (xy 249.183758 126.600013) (xy 248.975826 126.288821) (xy 248.711179 126.024174) + (xy 248.399987 125.816242) (xy 248.054209 125.673016) (xy 247.687134 125.6) (xy 247.312866 125.6) (xy 246.945791 125.673016) + (xy 246.600013 125.816242) (xy 246.288821 126.024174) (xy 246.024174 126.288821) (xy 245.816242 126.600013) (xy 245.673016 126.945791) + (xy 245.6 127.312866) (xy 244.4 127.312866) (xy 244.326984 126.945791) (xy 244.183758 126.600013) (xy 243.975826 126.288821) + (xy 243.711179 126.024174) (xy 243.399987 125.816242) (xy 243.054209 125.673016) (xy 242.687134 125.6) (xy 242.312866 125.6) + (xy 241.945791 125.673016) (xy 241.600013 125.816242) (xy 241.288821 126.024174) (xy 241.024174 126.288821) (xy 240.816242 126.600013) + (xy 240.673016 126.945791) (xy 240.6 127.312866) (xy 239.4 127.312866) (xy 239.326984 126.945791) (xy 239.183758 126.600013) + (xy 238.975826 126.288821) (xy 238.711179 126.024174) (xy 238.399987 125.816242) (xy 238.054209 125.673016) (xy 237.687134 125.6) + (xy 237.312866 125.6) (xy 236.945791 125.673016) (xy 236.600013 125.816242) (xy 236.288821 126.024174) (xy 236.024174 126.288821) + (xy 235.816242 126.600013) (xy 235.673016 126.945791) (xy 235.6 127.312866) (xy 234.4 127.312866) (xy 234.326984 126.945791) + (xy 234.183758 126.600013) (xy 233.975826 126.288821) (xy 233.711179 126.024174) (xy 233.399987 125.816242) (xy 233.054209 125.673016) + (xy 232.687134 125.6) (xy 232.312866 125.6) (xy 231.945791 125.673016) (xy 231.600013 125.816242) (xy 231.288821 126.024174) + (xy 231.024174 126.288821) (xy 230.816242 126.600013) (xy 230.673016 126.945791) (xy 230.6 127.312866) (xy 229.4 127.312866) + (xy 229.326984 126.945791) (xy 229.183758 126.600013) (xy 228.975826 126.288821) (xy 228.711179 126.024174) (xy 228.399987 125.816242) + (xy 228.054209 125.673016) (xy 227.687134 125.6) (xy 227.312866 125.6) (xy 226.945791 125.673016) (xy 226.600013 125.816242) + (xy 226.288821 126.024174) (xy 226.024174 126.288821) (xy 225.816242 126.600013) (xy 225.673016 126.945791) (xy 225.6 127.312866) + (xy 224.4 127.312866) (xy 224.326984 126.945791) (xy 224.183758 126.600013) (xy 223.975826 126.288821) (xy 223.711179 126.024174) + (xy 223.399987 125.816242) (xy 223.054209 125.673016) (xy 222.687134 125.6) (xy 222.312866 125.6) (xy 221.945791 125.673016) + (xy 221.600013 125.816242) (xy 221.288821 126.024174) (xy 221.024174 126.288821) (xy 220.816242 126.600013) (xy 220.673016 126.945791) + (xy 220.6 127.312866) (xy 219.4 127.312866) (xy 219.326984 126.945791) (xy 219.183758 126.600013) (xy 218.975826 126.288821) + (xy 218.711179 126.024174) (xy 218.399987 125.816242) (xy 218.054209 125.673016) (xy 217.687134 125.6) (xy 217.312866 125.6) + (xy 216.945791 125.673016) (xy 216.600013 125.816242) (xy 216.288821 126.024174) (xy 216.024174 126.288821) (xy 215.816242 126.600013) + (xy 215.673016 126.945791) (xy 215.6 127.312866) (xy 214.4 127.312866) (xy 214.326984 126.945791) (xy 214.183758 126.600013) + (xy 213.975826 126.288821) (xy 213.711179 126.024174) (xy 213.399987 125.816242) (xy 213.054209 125.673016) (xy 212.687134 125.6) + (xy 212.312866 125.6) (xy 211.945791 125.673016) (xy 211.600013 125.816242) (xy 211.288821 126.024174) (xy 211.024174 126.288821) + (xy 210.816242 126.600013) (xy 210.673016 126.945791) (xy 210.6 127.312866) (xy 209.4 127.312866) (xy 209.326984 126.945791) + (xy 209.183758 126.600013) (xy 208.975826 126.288821) (xy 208.711179 126.024174) (xy 208.399987 125.816242) (xy 208.054209 125.673016) + (xy 207.687134 125.6) (xy 207.312866 125.6) (xy 206.945791 125.673016) (xy 206.600013 125.816242) (xy 206.288821 126.024174) + (xy 206.024174 126.288821) (xy 205.816242 126.600013) (xy 205.673016 126.945791) (xy 205.6 127.312866) (xy 204.4 127.312866) + (xy 204.326984 126.945791) (xy 204.183758 126.600013) (xy 203.975826 126.288821) (xy 203.711179 126.024174) (xy 203.399987 125.816242) + (xy 203.054209 125.673016) (xy 202.687134 125.6) (xy 202.312866 125.6) (xy 201.945791 125.673016) (xy 201.600013 125.816242) + (xy 201.288821 126.024174) (xy 201.024174 126.288821) (xy 200.816242 126.600013) (xy 200.673016 126.945791) (xy 200.6 127.312866) + (xy 199.4 127.312866) (xy 199.326984 126.945791) (xy 199.183758 126.600013) (xy 198.975826 126.288821) (xy 198.711179 126.024174) + (xy 198.399987 125.816242) (xy 198.054209 125.673016) (xy 197.687134 125.6) (xy 197.312866 125.6) (xy 196.945791 125.673016) + (xy 196.600013 125.816242) (xy 196.288821 126.024174) (xy 196.024174 126.288821) (xy 195.816242 126.600013) (xy 195.673016 126.945791) + (xy 195.6 127.312866) (xy 194.4 127.312866) (xy 194.326984 126.945791) (xy 194.183758 126.600013) (xy 193.975826 126.288821) + (xy 193.711179 126.024174) (xy 193.399987 125.816242) (xy 193.054209 125.673016) (xy 192.687134 125.6) (xy 192.312866 125.6) + (xy 191.945791 125.673016) (xy 191.600013 125.816242) (xy 191.288821 126.024174) (xy 191.024174 126.288821) (xy 190.816242 126.600013) + (xy 190.673016 126.945791) (xy 190.6 127.312866) (xy 189.4 127.312866) (xy 189.326984 126.945791) (xy 189.183758 126.600013) + (xy 188.975826 126.288821) (xy 188.711179 126.024174) (xy 188.399987 125.816242) (xy 188.054209 125.673016) (xy 187.687134 125.6) + (xy 187.312866 125.6) (xy 186.945791 125.673016) (xy 186.600013 125.816242) (xy 186.288821 126.024174) (xy 186.024174 126.288821) + (xy 185.816242 126.600013) (xy 185.673016 126.945791) (xy 185.6 127.312866) (xy 184.4 127.312866) (xy 184.326984 126.945791) + (xy 184.183758 126.600013) (xy 183.975826 126.288821) (xy 183.711179 126.024174) (xy 183.399987 125.816242) (xy 183.054209 125.673016) + (xy 182.687134 125.6) (xy 182.312866 125.6) (xy 181.945791 125.673016) (xy 181.600013 125.816242) (xy 181.288821 126.024174) + (xy 181.024174 126.288821) (xy 180.816242 126.600013) (xy 180.673016 126.945791) (xy 180.6 127.312866) (xy 179.4 127.312866) + (xy 179.326984 126.945791) (xy 179.183758 126.600013) (xy 178.975826 126.288821) (xy 178.711179 126.024174) (xy 178.399987 125.816242) + (xy 178.054209 125.673016) (xy 177.687134 125.6) (xy 177.312866 125.6) (xy 176.945791 125.673016) (xy 176.600013 125.816242) + (xy 176.288821 126.024174) (xy 176.024174 126.288821) (xy 175.816242 126.600013) (xy 175.673016 126.945791) (xy 175.6 127.312866) + (xy 146.2 127.312866) (xy 146.2 123.735846) (xy 149.068 123.735846) (xy 149.068 124.264154) (xy 149.171068 124.782311) + (xy 149.373242 125.270403) (xy 149.666755 125.709675) (xy 150.040325 126.083245) (xy 150.479597 126.376758) (xy 150.967689 126.578932) + (xy 151.485846 126.682) (xy 152.014154 126.682) (xy 152.532311 126.578932) (xy 153.020403 126.376758) (xy 153.459675 126.083245) + (xy 153.833245 125.709675) (xy 154.126758 125.270403) (xy 154.328932 124.782311) (xy 154.432 124.264154) (xy 154.432 123.735846) + (xy 154.328932 123.217689) (xy 154.126758 122.729597) (xy 153.833245 122.290325) (xy 153.459675 121.916755) (xy 153.020403 121.623242) + (xy 152.532311 121.421068) (xy 152.014154 121.318) (xy 151.485846 121.318) (xy 150.967689 121.421068) (xy 150.479597 121.623242) + (xy 150.040325 121.916755) (xy 149.666755 122.290325) (xy 149.373242 122.729597) (xy 149.171068 123.217689) (xy 149.068 123.735846) + (xy 146.2 123.735846) (xy 146.2 120.7) (xy 176.880646 120.7) + ) + ) + ) +) diff --git a/hardware/breakout_55_pin/motronic-wire-adapter.pro b/hardware/breakout_55_pin/motronic-wire-adapter.pro new file mode 100644 index 0000000000..ba37591752 --- /dev/null +++ b/hardware/breakout_55_pin/motronic-wire-adapter.pro @@ -0,0 +1,90 @@ +update=23.09.2014 9:57:53 +version=1 +last_client=pcbnew +[cvpcb] +version=1 +NetIExt=net +[cvpcb/libraries] +EquName1=devcms +[general] +version=1 +[eeschema] +version=1 +LibDir= +NetFmtName= +RptD_X=0 +RptD_Y=100 +RptLab=1 +LabSize=60 +[eeschema/libraries] +LibName1=power +LibName2=device +LibName3=transistors +LibName4=conn +LibName5=linear +LibName6=regul +LibName7=74xx +LibName8=cmos4000 +LibName9=adc-dac +LibName10=memory +LibName11=xilinx +LibName12=special +LibName13=microcontrollers +LibName14=dsp +LibName15=microchip +LibName16=analog_switches +LibName17=motorola +LibName18=texas +LibName19=intel +LibName20=audio +LibName21=interface +LibName22=digital-audio +LibName23=philips +LibName24=display +LibName25=cypress +LibName26=siliconi +LibName27=opto +LibName28=atmel +LibName29=contrib +LibName30=valves +LibName31=lib/963063_15 +LibName32=lib/conn_18 +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=1.400000000000 +PadDrillOvalY=1.400000000000 +PadSizeH=2.000000000000 +PadSizeV=2.000000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[pcbnew/libraries] +LibDir= +LibName1=sockets +LibName2=connect +LibName3=discret +LibName4=pin_array +LibName5=divers +LibName6=smd_capacitors +LibName7=smd_resistors +LibName8=smd_crystal&oscillator +LibName9=smd_dil +LibName10=smd_transistors +LibName11=libcms +LibName12=display +LibName13=led +LibName14=dip_sockets +LibName15=pga_sockets +LibName16=valves +LibName17=mod/conn +LibName18=mod/963063-15 From 080d4f38e7b69eafbc4668acb23315c156d8c05d Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 21 Mar 2020 19:47:56 -0400 Subject: [PATCH 169/171] 55 variants --- hardware/963063-15_55_pin_connector/readme.md | 4 +++- hardware/breakout_55_pin/readme.md | 4 ++++ hardware/readme.md | 3 ++- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 hardware/breakout_55_pin/readme.md diff --git a/hardware/963063-15_55_pin_connector/readme.md b/hardware/963063-15_55_pin_connector/readme.md index 67c9c56cbf..4173f52c20 100644 --- a/hardware/963063-15_55_pin_connector/readme.md +++ b/hardware/963063-15_55_pin_connector/readme.md @@ -1,4 +1,4 @@ -55 pin BMW Lada +55 pin Lada by TE ![Connector](963063-2.jpg) @@ -6,6 +6,8 @@ https://rusefi.com/forum/viewtopic.php?f=4&t=616 +See [here](../breakout_55_pin) for a similar Motronic connector + [For sale](https://www.ebay.com/itm/333553816490) diff --git a/hardware/breakout_55_pin/readme.md b/hardware/breakout_55_pin/readme.md new file mode 100644 index 0000000000..a64315d917 --- /dev/null +++ b/hardware/breakout_55_pin/readme.md @@ -0,0 +1,4 @@ + +This version of the 55 pin seems to be used by Bosch on BMW/GM ECUs around 1.5.x + +See [here](../963063-15_55_pin_connector) for another version of connector \ No newline at end of file diff --git a/hardware/readme.md b/hardware/readme.md index 2e09cde7c5..0c2009cc9e 100644 --- a/hardware/readme.md +++ b/hardware/readme.md @@ -16,7 +16,8 @@ todo: move Connectors wiki page content into git * [38 pin](NGC_38_connector) Chrysler NGC connector * [48 pin](breakout_48_pin_174917) Mazda Miata NA6 NOT FINISHED * [52 pin](172319-1_52pin-connector) Mitsubishi Galant VR4 -* [55 pin](963063-15_55_pin_connector) BMW Lada +* [55 pin](963063-15_55_pin_connector) TE Lada +* [55 pin](breakout_55_pin) Motronic 1.5.x BMW/GM * [64 pin](176122-6-connector) Mazda Miata NA NB1, Honda Civic * [72 pin](1123038-2-connector) Mazda Miata NB2 * [121 pin](368255-2-connector) Audi From 985269808e8251f76e66b1cd5a6016cf1b8c3876 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 21 Mar 2020 19:35:27 -0700 Subject: [PATCH 170/171] Pedal rx shim (#1207) * rx pedal over can * guard * guard * don't cast away qualifiers --- firmware/controllers/can/can_rx.cpp | 4 ++++ firmware/controllers/sensors/tps.cpp | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/firmware/controllers/can/can_rx.cpp b/firmware/controllers/can/can_rx.cpp index e290aeab9d..f0e7cb057b 100644 --- a/firmware/controllers/can/can_rx.cpp +++ b/firmware/controllers/can/can_rx.cpp @@ -26,6 +26,7 @@ static void printPacket(const CANRxFrame& rx, Logging* logger) { } volatile float aemXSeriesLambda = 0; +volatile float canPedal = 0; void processCanRxMessage(const CANRxFrame& frame, Logging* logger) { // TODO: if/when we support multiple lambda sensors, sensor N @@ -34,6 +35,9 @@ void processCanRxMessage(const CANRxFrame& frame, Logging* logger) { // AEM x-series lambda sensor reports in 0.0001 lambda per bit uint16_t lambdaInt = SWAP_UINT16(frame.data16[0]); aemXSeriesLambda = 0.0001f * lambdaInt; + } else if (frame.EID == 0x202) { + int16_t pedalScaled = *reinterpret_cast(&frame.data8[0]); + canPedal = pedalScaled * 0.01f; } else { printPacket(frame, logger); obdOnCanPacketRx(frame); diff --git a/firmware/controllers/sensors/tps.cpp b/firmware/controllers/sensors/tps.cpp index 9f1e799a46..5d6f021d80 100644 --- a/firmware/controllers/sensors/tps.cpp +++ b/firmware/controllers/sensors/tps.cpp @@ -213,7 +213,14 @@ bool hasSecondThrottleBody(DECLARE_ENGINE_PARAMETER_SIGNATURE) { return engineConfiguration->tps2_1AdcChannel != EFI_ADC_NONE; } +extern float canPedal; + percent_t getPedalPosition(DECLARE_ENGINE_PARAMETER_SIGNATURE) { +#if EFI_CANBUS_PEDAL + return canPedal; +#endif + + if (mockPedalPosition != MOCK_UNDEFINED) { return mockPedalPosition; } From fdee71611fbfa93b0d2bce63394624eb7c478a30 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 22 Mar 2020 09:42:36 -0400 Subject: [PATCH 171/171] docs --- hardware/breakout_boards.jpg | Bin 0 -> 366375 bytes hardware/readme.md | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 hardware/breakout_boards.jpg diff --git a/hardware/breakout_boards.jpg b/hardware/breakout_boards.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70bd213408e60be4830d3ea6b0488d7c08434a7a GIT binary patch literal 366375 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

Otccfky2f*D)NT2GZssBA}` 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

B!rwXC^Ho#DABT{{W3;ZQ`L`W|UGD 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

8YC#m#`nEs z(TDM^?OB}M`u7#10(q6aT${1=@*bu|0n7WQiJUXa+m&DC~-8wq`s_8;}N_SXL(}&0>C4EaM%4jyE^$&9C4q+H}?we=0Ln zteq-mNQK`fAN}k6RyogtsHpKm3|1~C;w1v#g<1}bvwTua#-S@1itaR8Yhf`4MBee5 z%$SMxz#h!Qbvt@a9~1lza_d-`WC|B0hRv=j+9<3z&6hbgG}2Aki0ZoUs686%D#fL^ zQjAmWJ3`Fd>9)HgAm4p0QW)1V-?A&wu^C+l47Rmz>b)XJZ4wOcMKE!sajt+`mko=6 zEUmgh&bB@Fy)=`=`K_law7ns+#@gaF8VWg$%_=)&PkFft$$>M+GVzn%rIUVRr#dCwMBKGYyhy2T|BA`_{kBK zgKVUOE$VGgG)fB`i?tjbch!Zqj@Iy^R~rT*ao&nO;=ipe z`y%w1xG@ND*BPbFYYNp&kpu4jboh*9?S{i=$bm)84?>l(5jS<4eHse8=w`LKjtbzsk)>tM`;krkMF&BB^&TEEvVjJQIMgzo81wbA9yMmvR#0-Mods`u zTaG@d*~Ao`?bMx7Mt3s>KYd}KiWQ9!G_awFgoKtp&g#J8-&Z!d`Fgu3^1M6BFt6{J zPeYjg(k&|)=(xniK_c$=g%RpA;p8#147U^lgCw#xfN?dLtU&w*O=!m=ly%^02P>Z1 zT9;z7M5j_xO$A6B5iZb-ouw8Zbp%-OuQ1l+ur-U?CV5jF&LQk4!1=H?AM_tCMQsE9UTFK3^(RFnuh|xc2V1gzPSqI1H5{;Q#b}J+TNQHlF-Q+*)ZLD zVeL!pbR6}lf6Ob|sD&Xc4`+6xEgZev+7nHcu*6$ZyXfkAp%SRvOhZp9@d)ZFPlb(kg2@rzV?{9WORv2r4z@ootAlSU)Yr3YwI`*f*<5AN z?x~D2Nws|fKMt=)ngy0G#<1~3jTBM#iqUx7#-!UOYu=5dNMl{{NNgw|b)9|Ji0MUk zeX=ZBsniN7BaQTJ#w(J84J*Z<~!tmgRx4S_>etQ?*cN}pFIzNlN4mla7NV`7J(6HrAC9>wGEj*DP83jTX zb2gfm>ap3U@j10+XI4Dndy2Ks&Wm{0of|i|JF8@%$o!OEin^43Oe}qVVvYs^Hl?!# zzWRd=Jc03Lk7Z5ripU}>A@_}Kaagp$#7Bv>WbIbSGD{rZS60=XKgDs;mg#TDBCQJ z<3>qT#ELh!8ge&Z)Q%_+37=M%jTv83hrR0Fyhl@Eo4hqzAn1KoyQw^f*%Qv5X`@H5 z(={0%1|lEw=CS*zVm8x6hn}<>4bo|DQVUR$QyCBMN4mQSm~hv9Kcqy^6Ww-8+LPPI zC-O&@m2-i9CbpYLoby51>d22_egmo37qeMMgnptWiC8+C5`KsA4{YR9W} z`oc$<9bdv~^sYEkVq@;U{{TN$LH0$dh~Jy~Q%ZD-J{OI=7{Hol|Mzp*|XSTor-Q9X@P8$uig!3E4Mn)Yk75f80R%Cp| z#%%kA32ipYOIZ7sr^<5peQhyMZvj_{kKb9l$;@>(+q`~*f6#8~*Q(uizMXn$^g%$>>1s&W z?dCn}9R(w=b-h5UGcn*Q-H_h~Zq<1G7E`=+J{C>Kbuu>b>NOv-4sO~Gbgdv6ID0_f zg<(eFmWEJ)cO0WrQ1exxVc7~!YLE$1CRX0&!m$BdNs>PD?xQ3b%6|=Fwwj&IT8yi~ zXnIn)jGu9Urr81`J>1*HEiZtf-na15ByGpE2-okWY%rT-_C*LgHmR)5e|VtdNra52 z#7*@1(2a5Hh=+)Y_g0O1Qp8{2G-ANv6AG>0$-S$#KKj!`;X^tVzU;!+p?y7Lh+(PF zRgUe{rwZ9v`@AXRo;y*ub9kmcKVb3w&Excn{{RWS34I_(rlIOMqSaH6s9)d9*{yRI z&#!=^Z=wdTLB{b*ijT>?Q}!}yFq_RY%B-p5x}a!&u~U7oYLC(zXmf8oD(=>eSG&%n zcI>WA1wPvxVvw8U5$5Aq{MNOs2;;t*#?f!K)L-tbM=*I(ytYi-DOyH1O-5QDtrN=id06XxDML!F2XtgN%UgJ*w2XU#rNfp2X;#;)M7X63rIkZo=bduuOR122 zBaKNTXy_x9eUL))qy0=#Ewrlhk;aYu*D3Ptp=GXh$EHKWtW$j`QK>o# zN9k8=Mj?g$9y4GmV)Q4%lexpzPq3dca%Y{qE#ZXW&?Bv*^e4C<&ebNq#KPJN+Y`- z**2)-Y|{&O*zd2a%Uzq%Zmp@ml}M2bPa@?O-%~z2X&gXU2RFI!t6$pN+^x1Z8R*%M zU~gkq^n*Hkt$p?JdDoH;c{($zk|D^I0dOzn{ya2w5SVhE_pBsv$+cu1qt@nxIAm!UF69@f#wA)l*zCUg+F@HH zg597fz99>n-)d>zLwg%43dPNvE89;BXr#q$F&vCS)bB19C%ao98X5*%I_!4{;>39J ztUBRyBxLSmU8cXCdOR^jkpBP%zkM4mvv8q6QYc`=^5I)n#ikO*%2?`rt6?@HZliNw zLt8k&%f^yL#6=s$rb$glhK;t39{D&QDvX`i7ZiTH#>a67C8~8q5=Q4&ppdB}zQHn(--Za7| zDs6nluSqT#r(?5~n$-pxd2VB0XzS0F1_W7}%X(}!9%+s&X`JpRtlPy1q8XdVKqz6P z#D;|Y2LAwk1(7zWH5po%+SlPvijQQO$8nEq?x`^>i#wC4b7CmSBPb6B*09H;<8l#g zmM#<`%!Yh`N#{(mk%o#fnn^d(wgVV(Xgk;8LNc0LKxnbvXesTdBS5r7xUHJ@BjhUI zLw~dB^cwoUJzD(^omq$5H&v8fs2;ERvGsV0A40Gz1SgAB_;|4e%WtHE5f7wF`{Xr< zjuK2`QGTVv;pCOiEAFprC#H0f9DAuvH2IDB?)4Ep8K+C|HWU>=P`m-SsCLA}JiF9H zJ==2Xk)oGotHYfu%oK*;!h}zRj!sKzWqcdP!+y=pB0{7hi*~C~)$^b^P}-?wm*UVnAt@+j~^Cx??V%7 zMpf=V#430(4q|DvTWCIX_;|4c7d);zKv_jGVzWK1eqO2i9}c@!{ayb6x-y@&+~_MT zTlkv2WhX<_54*;$z1G&QDSn12WK>Lb#&1oK8Ol4=T-jR#R_~tj=sIR-Y8n zO1;$seRHB{{^-Bh?Z@popGvUq_1=e3UwL;?q4Zg!a)-dyva$KsX^HBW8I4IL%YMo= zs>7nQAL47)A{hEM2$ffO8q)#5)v6&w*4J9hhbvKujlte}twx!;iWvQ$ywxPwi8feB z^uH2nNpKi~(5D8d^M+NocBD*sDHNNEaIZ$d%x27P?)7}8p_dPl!YzuHwW>JbnIxST zD>2=A(k|N@maIf@lO7?~%G;_m#z-F+Ug`^8!h0b>w}I*gvklGk@?kL}*h$Bg zXM?3-Sh+s&QbUB0;&Bpa(%VYCDDkL8zJ}d>kxR_=Y-5fw{8rYaixD}FMr-b*{_w50 za7DR!Q#N5a147&>FmhnF@)35F^Qc-McwDKd;SFrZ?i69c^oG)Jc}D7I4phcpM@W7v_fx9(fPz}A<&)FFrJVxIF@|G#kp!YS@n~7 zBU@ASYs_Z%k{g6PXu8>QodDrWKcpmP9T>`OSz^TYBkYrI{Rr#;15C7^+E|GM?lUST z;Y{(d$~6zhm)aR^@e5L8A&Hx$a_gURnkC(X@*?7yxbQ= z=m#nWt|++q_3Yq?$lew0u^4Du;b+#fx(AEnjNE-H4qmoN!}N)|eK0(ZY^##jt&DB6 zP%kXIiL9{T)bnOL=I&@l1R8#MOB~&ymjh?FC7g%_lMMRzSCTZCa05$MeptL4QCX)f(c5%;%|0&(?=B`$V5hp2 zWLC?j@^4Tk5e1xf+S-##Ec!Hwdw7}#{{Syg(LZO`*1r$jc0R3#UcK*I_^RaJtbHCs z)f}Nq*zOdrdN{@xT=F$p2+zWb7+W`$dR`9*%*)E)})GjBzT7RS@pF^D-6=N6IyzQ zuP-06X0`swuh_Nw2D_^&{eT)3nN64)9lKasvQOJX_)xwk-_ITD*nHEs#Nxnt3TY%c znEe^Dlk%x^0xRe1}U*rV+^fr01G7Z_c3NkslKTT@Zi0aXeTRAnC7ludi z+-ulkP944%)K+M+Vi))gWtKLK@?q9IYU@KaA0MID=*r*sKQE@cRhLDr{{TU|=yILk zLAtql)~r7I`oZ$8%-%x2t^RsevBp1{>%9>2Ti4bf^sTE_l=+%v`n&w=E@gV+E9)ys z7PucHTfU1o52x|2!J(372hOr$Vo8&e3ck-`e}=QiG7-p{QJTVv#0Kk@Ccsv|L%;1> zb!qDE`#rvcTJZZC_2`U#RjU60+}5u2L;Y3t%ko<9zujukG5-KneORp#2l{J6Zz}Jf zzvwO1zpHtx=B+@jP<*R(Zz8miS9yN^t<~Z5dU~EFwdxw>JnF^RA>+oqh}owBd)8+) zZo8V(?YjQx(^FSJN3T}Cw?3^8;aa(^Nj+Qs)xNKOt#z$Ht7X=;(!15)6`>t{s#UNG zya!gDR;%A$724GL-al#A>=*iD_6>JeXZPN3P-tT{`rueqDNcmLE-T-umzLH-7iOURt=XA5&hfch;R+eFn9^=#5{l-@EPC zZ`~I9BlH`+TXmYZQT2EI5k9^BPyfUKClCPu0s;a80s;d80RaI3000315g{=_QDJd` zkr1J=!SK=H@gV=&00;pA00BQCuFXp5zTz^>quCqFImN*DP{QE6{{S(plZ6tl2Oog+ z{4i=#IrI1wW>FJFrll+98Fwm~&G-Uc%CYFwX)4Xk7_jDR@KoQ#-y4Hd87JY}Qof*? zmx*Sebx}VH{A-Ddr@1%J;-C($RpzC*L(co0LdR0AFh^dZT1CR335mWDi1i2RU_m&T zb1-k1(T~O7h*&(pHHn@g;ZV1y;>spIq2$Z2F&Z^8cT;KNWviJu#I@h*8NT6n?q3y{ z+QikpMZfs~vBb>Hw#3!U)T?2Z=2QOwNZtL*c1mdl`XyH}YnfrDW*9t7G%i(OEtHCL z4B2w1sj++1FS?m+FeYI#&GAq;m(MckolJ3-maXC9S`*3{%2pM`w2NNjfp_Vg%1}MS z3N0!tEX{AqCzxz83~@4gjoxl0`9Uu+fw|<=_+SQZqAbcpYs4HTBV2ANOAh84mSZ;? zsrrN&xQSLKw^{siDGsGysJyc|2;A}csgfaHe+1|7pnSxLAcuH|i@4(~8JICTl$4aZ zh&hMX|n=R|FY zO0^wLW+t8`ElY60>-RX7IF5A-QzXy0<(OmK)E&#}Hb)$i%M42-FaH2xfa+kTlo{?@ zQz-#9%)!%{PfQFll8K8dfWQXFGXjH)sH=&TqvmfDW^)0I?g7eUlI52<#LFvh5e|>S z8WbH%OhkTaUlUd zNMS=#w_$~DWB$(&6$E2UL{&^5i^Q%!nL^6?@Wq6jk zLL{n{F7-4p!2KcbAvYCF$qPW&bLuP5B=h?tAhL#Ya6b~BrFR3Hj&+D*+#Y8yQk_Ix zZWfrh7wQxlDVA{$9KwXkcWmiTHYaG<|aMC<>F;+ky015K;ir-;S)NP zxb9#_xmPv3#MBDO9ZvXV#h01Vpxa-Ep5bM&{m#jQ3^Krh3Y9A+R6hc#d4vkjqHsY1 zUS`xZ;FV~|O0#h-hWyOBK<;>uErMJad?lLjgR~`S%)%#B78MqgT5wE?Vhg|R6zitG zY9gFUE-TES+^&67HeeA~(xozm@dcdLAk}83TK6(X zh{mSzP_u~YH*(xXq^!fC_ZubkxE-aAex*5GkhxwaCH@X#7rLJWu3>^}-2VWdg1#fT zeN9BfDa<2n%CKUkR^vKB`20VqXbH^8xm|8A8-NFvQ!BC<;$mZnl`@^;yi9rmF>5Tw z@LHv=3M!+_t?x*vr^#$%Plqk&guPF<(F|>Oi5#KwJT?s-^8jnb42DU8jhkoOu3Jg)LV@qOJ-&daZyaobuF*L z%*-2PzeVTuq$ zb15Kk8n}f1lZ_^@tjyM6R*IExQOxlxNmS7fl+8>GA2P$t6)Q12 zk5CCv8;o$o#Ae}U4kP$#`Nx=`jjQnwxn;qm4KZ^vLN>?1%MDJ&F14s-sf=Yzvhy-) z@=NHQX;fBKQi+Ww=`{rbP*U-bF^~xEdVfEAG%ud7K`~M9uTMLkK4>lT-!RD z$HY74Rn74dh+CV{k;xg@18_ zKfZ5dBkZc9GyqK*{1|rwskqeVQ%l5Kbt@5|48;e8{2zEy9-)22&gPv>wM=kUh1<_F zr2VB3wj)vUfHf#0$B0~43YN?F5Gif@i2&|3ZU+*F%ekxEKFDL{WoyK>h~smq46d^; zCvzbSuTqzo=@N+X2Q{hjF9#JYsdgWX-hUNR#f(hKH#ZNsH9jMV+EnHyrwnEZcPe6P zQ@PSq@%{@-jsm$xI*Rd_sAaN?&)HuhT8GVQU$z60b;b zJTVlq!Lk4t!FW8zUL%tcp63wOA)=yHO25XX8va50OJLY)1AOr+L@6pJ{{R&L!vb|Q z<$ev(>JCtQE25anxiR3++0BRp>{=2309OI7{{R|42L>1>Eio0rC}8{!Za#ksb1cWW z>k4r*id?hA5q-?L3jQZU$Q^qAO77q+LPcfXr&zXm* zRlRpPm0sW;Vt9_~7)BQ;we#E%+)cpCiwY%D_CPBLI8qm)6f-L2ViteNWovY4b=2ra zbkVvVApo`?*u_qjR9dkfCh_?ancT05%4vY`Mk`Xy%!#s%MxQ^D-!J1F-Bc)^ASWDJ ze^DDhH&ju^VWGc+@`O>L!&d z8U0EUpcWkB3GpcTlpK7aS19;%8*@>vlMbdH=9z=cZ78uAh0RJV(=x<~MEaIS^A!}6 zf-=RKw=LYTz(aDVmU9HDb*V+Tj)cq+4&d*IuOStAekb}tK&jw{82!$MVhz*@tj3c{ zn8i~#ns+JXtRE2A4Q9vx01>ue{*5Pa(QCwHvz=55dctfiB{`Q_mu*Z? zAZqag!WUV#n~edv;Y71|jWfhRV1@9?AUpLt>LbAn>pd~@?CFlDa}FjLNw%OTFGN&j z2aUuI^jj2!a4HI37%B9~y>k-N`5|P<_aiAh2isXi7jww%ln*l#=Tx;75>~+3)R^ypf*O_ zSqH&dfn12|eQD;m^qXM(QF6JJp5j*#opUza(G%`i(K=;+FeyaZH>^Smex)&4s+Fl| zV=cr#3Z)SV-X-%bNq>v#S@$dT7^^=VOA)_wHR=X2_b;8oRGAt2f1!0WoBgD@Zw##W%7e; ztQCY%=c&OE8LBo9GPa3#QSe1Tjt9+3#1fkF2}<~e5UT1PXIlB4jI;u^nN;RcxHz~j zWlQRRE^MjanA=aPUbIH{-T<~0VJ#yW>BVnqMs@zj#d!H`N+*Xx zy}O^%tWq~H8VB4hz0AO2Gs_9b;`c3yOm(O>tix;W6+e%{uKdStAY0}q6)M8_ZhpCm zO>+@m*@_>LUDbMnf~5fH()|@K6N2Z23sJB_m&@+BiN(gr8nRu~_?M4=$<#2yUPzSI znbfXgW|^pq9_nc($c_1r%+#SSrK7odm-7nyf|pHmE)cI%pT$(H&v7S)H8!cWO;4o5 zQ$5aR+MG;s@iK=ghAv`n@Bk#KR}F@8I34H0lr+-t8I@ixr$ z-Ok+Z8Y86BsCh*l8I?L8sBmKDXv6Lw{LFknz40i@)Y|=iQ7S2^Z%1yWUX}VaGn^e5 zi)ONPORow+J_K`GhXxqJL)0@s^I%en9L63M7RqrF1bdZ@%x^QPjZT)K?wH__Dw-93;}c3?I0~5)Lyj*Ix5mIz z>E>`x=wrc*K>LyYrk>@=65~1EH8XLr9gh^GyRzRac&MPkRrXb#pHhXGAn2A^d50t! zB6T=r{j)KI;ZfYVljbp!BxLa#aZ{fY9_Iwq_JPdQMW*8d{Kl-jpw{4Lad#ZCGs%=S zDz_7eZQR5I<`+{BaaFEifNEPk_bj`V+zDBj7jVulBPh%!KTxj7WkYa{s8X6`5fGK) zZ;6vHijFrHDXdJ^e-t$iE9Nmknn9t5Ifv3#E+x?yx}sIz;18)ThGQUF!9gj*1}M*P zQ7Yp`<_VEgF@v}8z5@{ z_D|f{KvLD|nu@cvcYOo7~Dw2|fC~kP7D=n(Ryc3py@zK`o)? zGa}C<@u9%OP^WzBbU1f-w?o#OKW_zknH+(>mTqGR#G92E~Q9XnX#qxjbZ(I;x;$O`fBQQ`vG)980rGOgAz9V=)aV`5G7E##) zwe|P|NLbDB1ezuU3g%rm@iB>BClxJ=DY~1)Q37EpR}8@ua@!^oiJ}zD+|m$&<{?>} zC#*y|)Fqh~J0P2tD&l4g7FOX`zrb^Nf;L5BHYUB)0whpOCKGdaIFw;>hv=1~5gNGY znZ=tn0dqNn#N*-!ZljK7Px%a`2f0PYk8>$@fMf7A6x9_1%Tw66QqG2z6a5ilL_$HgHLb?moT<*eB2FHmIu`HZ3<#`BXDWNtBFEk-UR){ zGx4HX9P9qG?v?)lS!SO3{{XC3{g3-aGTzcY+81k%Wfz_{%sv+>R-@lI-$ct6OgqcW z1I5KR4lz$yh;S##aF)l$BQGDeap(0ErrxI6eMC5wa?a))O#V%7RdXpKu(Ase-{QmG zIx`H^NMZrnQ05IcIq?cJImEki#QCXbaMBE)MP)Tlqr1CKqo+L%&X7@$GjSJo|!pcE#`hV%Fb+JB%+cAu6+0?`Q+M1?X~I zr{qx4&ARtJ)E>d8L6FCR?iwZ#GB~#7lDhl0kN5X4S{T}QDAg#H!{c z=2ZEKb#j6COz5RzS65A%ydH`7O)MW#yrGRuvVe0bBtu{4(B)&3wz*vtVi)UFnSbRj z4yQ7)ME-olhtcL(JVP zh0vLbx6k99ai4CK8WtFO4~D#oQ?9wF1qV6Czr9UpCLgZW? zhW`Mmvspt|$q#!VT!An)RDMc|n^yRz{y`$@Dms43f^2hLa5JX(>76qTQ~K?CB4$<` zIm7idVq_VwPse|V^JC=HWkn|vpMxK8i0+YwVb4>UTa}4XAViMl(40+8T=V#(-Dbd? zRnDGDS1%o0!+Ki)Iez~D3VHGK0&6t0fH9iei>0}BN2rwZ7zqE6?Np%MO^(*EP zOwc(ImkL(6yv%?2d<)YANCpUdK_=lW>dU|T774mpc=!P@stYvsL5m4;wTThyi@+^% z(+O6Aj7t85>ng}g)YX0;`!KA*;K?X$v>oE%0Wq)4G$U0;8I``4;N2GXQU(E}j6c#oje8y`q17^tsB>1Vv`?#U(iwZSW)m~*kF_As2%dyEE z?F+|Do)r~eh;q9SEl5$!DAz3uIX~o6LA?ebf*B5k45HRQrGMn%uF}QgEya3GUg0Rr z566FssaGm!mH6DK{r(^9z;iDlCD!u!L_+!QD%nT0Pnc=;zH$A;AB8-*fz8;XKRzWmloh8ooTu+TpxzaRSQJTcc!H(~5?kNN|oQ zGbyPM^1xrn%#$(nEre4v;qxpEtzP49RasDt2jgQk@hMmetTkU3gcW|+Y%v1Nyg;I` z&;Ygl#3AJzhy9-D2r~m2jw3L_$nhLP6Bhpf7#y<^kNAMa_b())6oYT#tTM-;ej!pS8{DR<&WPcLuZebdGIHEIo?XR+aP!mz zu6H}Mpo*`Un514;+|@i$y-afD#4MuSaGkXRa1(U`aF#(iV)6N7ZMX5MdmMC6q`H>` zS~gCev&rMAG?MMZ<(-qQ{?vQ;D=8uI_b)VE<6pUzh(a}tATy(b!xt--4Z+pc{{Z2s zp<1J4A7qj4jLWK7L*Db(Wc(TJ8)yiz%X--J*eMtg}IxeHU>{{Y%KM(_q#`bxkVdg2vk z2BP|f{KSP)r7HN8A<u*_j5*ci5q513ed{{T4rC{&;A+UPhXlMIi0bC|8V zGk0-Hg1~14)iUt-hO)zS3gRU8?lSe{*D{Tzjb%e%A6%074Xk=bsHLQ_A>{lq_**)} zONAXl3>%g4GG+XJE1$sLYcK}sl(l2TtEd@G$DXE%m%qglj%F>3UZR*25{a3Xhz&tL zWiJwgliV_dD0h#<5*U>L$uG>&wT}}1?RyqSU*?<)eg|v4M20Kb`FSk;m+k=L`C5F(672Pn;rU%fr_Mg*X*Zu2Ay?0kU*X0xr=f=!X*kAy&UjnY4JPbw6|Vpo&Y% z#WO%4K<+2XT)iYr%%Z8X=v%?@7~<+4#OrPQ&&?{Khq6-i}Nz&oL_h03Y@xu55qu=KJmi^DuWW67b4|!!Jm49!OAIhlZw+ z+UCrI}^A%%=uo{KW4Zd7f%6ZgU+^QxzAe*tvpg+1<<+;$aRw%Ze`~ zD9#B`)x|7=1wgi3aB%?IIwrRY*`LPFW)j*$D}ua16af57mzYbbx%-Nkm2hp;TTP{y zdY0DeC`58~V8%loA#Rrq$HmO}Zc!I9!d<_q;BguA+;hj_1n~gGN2-_{74S10#vF$+ z3h~Pbi{u-XO-640q5*+zB9yyPYYILlmJIfBG~OcnA*9|s3i!y-q;v>|nhiHZjtq^r!lSjM}q20>xyJA$9C7MdJ@hTlRxnqI#7AVxT z0Hi=$zn^OZv3Voz;^g1BQLC}}OAs3i8&8SKFOkpshMZ~nnCXcTa#m~v^B>`{G@8c% z8K$#*z*=gSr+9)0?GNAn5fQ0ah;l_rcj|-+RInG}ImN_mo(P$SF)#ehs$~Z=OgX_1 zwl3ndm*TvWoThKX)>$h_xVP>R!x&X%jv+G4m|_a2?he_U%Z+5_9TBRO3xwH9x|v@S zTO*jW1g%VrPdNR{%|jC_inXsZ)OQlIa>ChV^#s(=ihRM(abV2870FhaDkr?E&;(WG!Qc#rvsu9nqOh9Jt}dXt4hPrf&SE+?i|$V_!|mKcwzAW^=v==j{)7mi>M2kgaL?yQ^g@@#h}!y!SsHvk$Zt>@ zsjI8XA+r@sU@^cFy}p+})h9@u|^*;RR)eVyz-nTlqOq5?__e^ZS; z9Y6Yj7n!0sd6%aFD&?)4%Tl;k8WHNHDaSIF8J5YHcymYlsFkBq(vQO|GvD?`DdD^S z05D;#hfquN8$Rdl;(aDeaXhe3+}0*lWE1k)Ao}da6SrLuIYHX4QodX?KT$f5k_-}9 z^%5KLDv4(j)J^VoCTjKBA+-I^!ve_brh;FG2Vm+zNzbg%i91T~vkf{Z=xMr6TcfJTj zRlGu<0cbzRn77+me_kVITp0X^`IH7)m8w51ZD%u3jlC|&FdPCVJuUR4yt8uu0IH&> z=R$7;;s+w6Zeu`k_uK7?zd{tbiXF|scN;~Tf|;Y=@dx27+~OJZeX=Y5OI; zWJJfDoEV~5HoG{Er!eLtosc1+L5Ic1<=9evmMjNTZ266vB|;%@1KPk6R_Kilx?&EPue-vPYxtD@ZaTTcDBc$wShCfSudy-waTPdAc!b$7Hj#QBP%{nHDddi*F%dyE z4iXT=b4$N$qeVjX>W=))f$HDo3wit)r5nyknfQodnkW8=yw<;RsD0sFcH*U`;U9w$ z0jP@YW=n+5?rj;HhUXcJWOW5G#BrH?u-XE#HqJdojHV-_xZS1Kq{RymL|kR06@}h* z&Tpiw1rWsQ3~Dprjv*Mcn61Oq-1mZ`HYPfb0u~od58|q=#0T6ZFuh52C)q8FDtVXr zQmKCNqirRtGO%V?r2Cl20DFY_M#Mz(w{b4ZP}#*wF3ENZ%jm2stm}dL;u2tJ_{GA; zBbAlu5Sqd^LGzIbTTz;u_-;ECzy++OCoA21>JTr8rdE$Lpua4o6|_AzRKH}$Thl2t zi%2Y`b+YyU0F#DdRQwKpXH!x71g)Djg*QRF7|zSTV1K`Jxg}g4C8rYAn^58M^#xR@ z46Rwb-nsjel4d3CEZXFvQmPP5{KUJtu@16ljme71kx+x6;^#F4c|U1{aSNW<52oR7 z580EYN|4dCjV7E_IW|U5ZAD<+OlCRNaEbmO+|5)#1+}GtTI8N}&LM9{sYuTSLne%G zt3g-lJ<{NxQr`Fa<|^8D-`p;8D9k;Wsl#0~{&HH=`k0E8TLy(q%J7A>Wq3psz_j93 z%=0NwSWktYrH;xe@QZxza8KzOUyVnLU(|eSL7;1fkqmu(cEy8r0K2v68 zGsT|vSKK^lOl+{K&CR8I=kU&jOZ*BMfecmZQ&9)tEy|(p0?SMlD#02`<_8Q!E}?@k z!^;3M5Q_0CpDW> z&JSNK5{|8Yp;FR{#`nxsc8}n|8KQO7iq9rfw)wv*P}!d)GLvx%8P_m?=ZNIyWiWoy zuc&7nGUPqQ+<>aDuyqUpZzuVf*LUEYr^LbrQ97@#bu3a z^)A+@hXng2?i=Spd7M_F0ezsgffvb1<}=l2B8utVzcOm%PWqT;?R@C1yK<`BP|aZAzego}=1m9f<7-hIJ2fh<#eh)Z-EHOU!bU z)+$!IYPg`7hJqFV@&W1t0sjC6oJ84kDj$h_GC7FDPZ4weHxPUn)l83ag0aACxFNS* zLFm)tQ)S{0)W>d4SmZTxCg3yw0GynhHcaF=GzU>O=Tgupwm^2;AS%wMC-9WEu8TXzSuR*~bWf)Jve^Zx*1^gBgZ)Eo^oAJZrg z{4xWw1(wycQuzig*#mJDbrtjFOt zD7PUWMRbkt1gratcE;M5);|g|wTW7r*_k)8+K%go++?j*z{o<$lnH_Oq!_%qCeQJ= z!Hx{eElR2g_Fg7V<8>dIl*tgfVPx44>K+_3Dbz`3Cjm)MZWG83nvA?*NqGxhW;C7Y zcI^6y^(t*@Cj(H_?pOYy4e{w%_1tbtL)<1aH|VsL&FBTsqE zOKav}l*s#q#XDMeI25Uq&-vmiIk&c&NYbrGEauzK)bK~e`0Flw^9Lp;&1$7iFj{LW&?V9fw9Lh>yEecgVOq76V zt1Y~}O27r`r8W8`<26;E%vg2IDm}i9IJun|`0VBMMxW|JNAdx=s>>^)Nm4K+wK{On zFbCT&Fe)FoERmru*nF-sv1$ozLf^AH2w%v540geW4(Vh8VVqS9UxAj;q>TzF{Ypu| zD#79RH8C=xxoe2$R%kecv=SN1hV$-cHsn(O0CJ+#w?0`^tjoFP9{CC%YsAl~h6B~h zF26(vblz8&=4}$F`78UJAL6=L!pEJD+`S%lQBTxFH;Lte7r|e|887iunWAws$r;o! z%poDEd)!P>yvsU(Q1poU>Q@FOQs3ir!CjLsm2?ncWU~#0K4VSr%mvh5>>*#&Z{lqh z`igUy?gzSi$lBbkljMmHxK&5`K?OAPL+%vwFoxyhGV$Q^FFvHX>JtW~k{1c_Q{aN_ z!wYBSGD85AL1-|zukq4VHD58QO_i#=$|20SY%oA8AnTN_qrLJVY`Cg>qnk~TJSV^0 z%Wz6)o<=fKnjm@%O&zg$H~80#n-2{=!X@izJ@Wzb+P8?Dpya2fI(W2`nI-B;QI|~j4+VGqbZ`V9$;3QJx*Dg3{@?yU)9V?TJ->~&=B-+!Ik7?*I8Zd z)DjnJF>5bA2)kkn4THP7X1q=QAV$^3P?wlz)kR5{wteEIE?WgCex<#swa5UTsB}CRLP`ibPB6`hEDw%g2#jua!3`muRU273EvzKR@mk-qs+Tvv5MOl2) z)X9btwyT+Dvl+t$?MD&IDPd_q_}r=iDG9>3OHTAts-=rV0N5FoKj|{muDiko-hf z4srfwD*A%{l*CrJ0_Do6#+5v|*!Cq^6MBLC>hq>JGEdK!TSr_bJGLlDty1=Xw z!^kg@f2bpD=_P)a{-cWJ+l8%_dCYZcg4vpOT|i+0&}@}a#-TW^Qq|hG`++3OqQbTF z3n{AjT^~eVLB%OXxsI%;4@}?OMTPAE5OWmzGQJ6RX~|{MaVZDoE0(~vD7W4he3QZD zqi>nk5~K})i+!pd;zDt8n`U{rl)TJ(jDHRd)h>g$R-!XS%Zj?0g}Ify)NjV6mxwNp znQ+AB5T$nz{{Yxym}|)#zcUe;j_HG&m0fN;qx&OURg5@!c0Y-*mkmx!$@N3K3&;Mm1HOerwJ%Tay6T{jRk?CxH{w=1s`nfyvUu4Umt zV;?PJ<~0TP2vPDB%kKos2g8^Zuf+k*$PxHS{6IpHA7Z=L?3cJE8-Cc7Hrv!NJ?XP4 zmM4RL332MNfc~%?aAyGdDqe)}Z0=2eyhVC+sHX+~pomZr$6x1(h}@(WpZ8IwA?7IH zJ|>V@5BTOSMpn=1xEO7CpWbsh1z$tSF^5N4cj5}cyO`P+ENfSD=;ZjB!t@%y1hWkl z&|b8E*`5MTfUg>En4nNtgE@NRv6 zFRe|&U_uvV)F5KMAUUqfV+(lxP|tK!sewrh2gojpx!D2 z(diPn^6pXNxM!JL<{yoczY{=OzfmE2W+@QKrF{_@EswZ8kUxIo7h+6<`~Ys^(~D2D zhxaV+=4GhrgZMo|-R~iLdx#!87?sQ*%NkcwjW0kZ1?HB2Ovse7*Ke8KUw27y1?_2z z6$>}C=)FYS8uP?{rH>v@*(>|12oIWyCbwv;C#|NDF6EuP3h@5pD_6uYuOq>P*PqZX z118}zt>wi{q@!1wylo1_vUVZ=041rqp03~V9HmcKctZxJX$+!sCC%SLkXnJ0mB-9c zUgM=P#y@JG+*Rig2PHaxamiO(+LT_mOcZjt%c$Zw)pLTTN1_gtzo?rOEM#wHn`2tc zw{(DD`DI~D)NIo-D!fN-;ZD&5LixaICMq{@5u{@i=!8(q?4OT8M z#CHPGnonsSpk{7(%Fmbx+ZS&|zXBq4*j{}>_Qu#B?*w>8!hLv{qfU(f0KoGY6JY-6 z13s|rIm8SYE$g@nVy1B6hCBwzRdE3B66#d1xoOz0qlE&ukAYd4?iKllNBHsf<0#vF zfcyvCH8NbL*j(nOR`-5koT*I6a~$YD=bvosdBbOkLm4@%#Xj686gq=OZu)@jKpmWa zxtkThrJnfsi{^E?2x%xqPtb>zk)8OZC~zZkqB*~2h5jcW7zI0qzue6!?ayjEfS8Ww zMW8)H`vi~F0E8T%G)m;CLeE$UW(n{M`DYj1FX{~XGyFkH>zIkTkNlb@6*eC9S%o~Z z)Uo`#`HBwsmlmFOxbl^oO9_`BSnunhqt<3W0flni(wNb@ zH(d`Cm|3wOpC_2rv<;jn%{qu|jX6}8_PWsYGQ#?=90 zxna#ly7i^D{mU2r8!|_2Oeh4+Dyl{?N5&@ zh$L!#z@d(Z>>n2`=mgQBuWZWA0SjBe0Y)Yq3`-AH7nG9fJ&f9o#udQ3Ablmg%W9K_ z45VgvP`+{V_znVZA@?qAt;eV0u$c7JrQTwdf-FMUh~9~u7-cHGMvh|qrGX2AiVVuA zTbQlD=`1(*GG(7+p$tpwJdOH+x0!5lLnpab3R|Nw+~x(#iVVpUXb&;PEt1f3gN4(t z+69Kefbp2}Dn15bP@e++t~|x=m;|x_Od5fR07h*VjKXV0!!;uS@ewdB@c#hLAqW{7 zVy?@Jq_Q>t0LTuhz4UvF?W)Tj^+;rsU9SWi8!32vz{-GGd!B=l)V9d-cL`8q#JeWQ zF5TO3e@PCCN(>W{+9ikuJ1xJa3O0O5*x^#yTsub5avjER)NXi%Y;9B+z2TcvMDN@% zx(0jy0O=nRKbTCSVqh%3jKgI;V20e7yTk-oFD?f8kA_-)d@CE2D=TRbDLcF?f7=SU z)=FGp(mXQ3icFgGUMB@a0I-fMe{dWjSThq}3K6b13tSQ@22csVan4mMLi^{@972W_ z9g}2i{i7atiK!BkR#oeQ>}6-n?=klVDRCvm+&&}H!E zEwo!7E~QA7g50d3-{XIeLR~@j>MjXwm|%<;h8CfsjgLPc#I0I720Je95v`x;{>-tK zbFPn0=T55~!Z5A7&!$yvNaXj~GGZICed2XCjw9kLUs1BC$OVUcQRRru=@-ugs)Yu7OAKvm=h+M5tdaJ4WO7nBz2HcnZuR2UeYD{{UfzTG@lHkBMhM?rd81_;fZD zpYA8c)SF202RIu%I)LMVmC^0-0uo;ZIgS1S1Skh-Y&kE8YukG#Q(JGpZ*fFP2V$x< zQv}=Hvb_Eu)EjoBTip~Y_4|PUm4O~J0tQlh6!Qqzwhp>>R^beg07G?1GY0Kq7Awap$^ zgZ|7#j<10Yga)DB-&l;Xvo~BToasYWh#AGt! zGs}fn&aKerN_&Ofzv_wGdqQb^RiykN^j+0T-KVKyDET z2DM%7Yw8NsiAn%b;^TDY2tZifL2LcS1MmPQ?2m()O@0F9M3fxBNA3Y?Rw@^Bh*j!; zaU9A$&8jY2_?B>~+M}$&;xI5pYY3y6Kamaw1Zs0gy_ zP>U-H-AkQ6;g)|%Z{`!x@`A4UlsRw9GOR=G7{7v4cTUERaS9n@WVd>Xspw7He#(#l zr;8GE-l5+uUx!gDWfs8Q11cv(>TIo9g0E*eT{TRvF%iJYbp)iL>2B%A6TO&p1pXOw zcEHlz{^1`5W&Q#oO!A$xRy$s&MWUVsPtqDq68q2Y9^HsW-I_5Mz_IEU9eaItqL-hT zuKO$lR)h3)xC4P^lF+H9*=(8HJ1JbtlEeU6Y_VF6x>O@-qdc<#w^~(OIM$8+plQSr2>GP>7~f0W7tJl@)%#Nob%z2I0Ab#;~qp&R^h7!m>aW}c7I!gdb?252& zlVvw!8oW=R!I;69m;~In8=OqAZqt$EmsE<(n!mwAc%7PtS1rV(J-{Ei;5t^Lb=6GW zdulqNIh%q%2wvJ`Ah9yb?LihXZ}es%Msa?YdWCLPZv}wM_5-55AB4JnhEBhFM(C6E0zhA??{0_#*-`vx3A`uZTOsb#z-wO=N# zW!A#}5dywu8al2EKAV3#mH`XJ=bvT4ayHJK8T(kr#BI%J_e(#u!X<4uN>@wLh>`elt&AOs;)U;@dtA) ztRFKPt4q`Fa~(UjBI~2v<(ci|di4+&5VVFU>th@9NI3rh+%x#8X?g-$**Pq_8CXo* zZy;{UgKuBq)GGxRwbZz3Y6W?}GJ>lhdtI`oJ60c2wlQQ4E>|rvGfq_k%MY1>ooI-c zJdc^g8@fA*by?doV@dLnB|3`U4v+QB3;x6HtP-{#^v)WCzmm8Q1mKKF6F_Va0>Ad5 z7SvDL*Za&C10r;bPSuKO{Y|^k8nc3CzSIpcUj8)*NgAO40PJpt?jgOoW@a78@-63 z62i$1h1J~R2JQOO{UzzKgZY*tp^N~0GRwheH4GW0?Zm?gWrLcg*Uu2?v)vP5b@^a! zsu6@32O7%3EDDzjukJT=-pQAOIni6I2^PTUYs9N$l~K1#zHMV~Lc2FOVxP>iJ6;O7 zz89%>`-5dv?KcM|GZK%%qrhb-V66~w8k%^6QtJH8qxzj?x`Kq_ZMk@^W?5arRj;TS z1|>_T3CWwELT1PDcsr%!2@3r?0_r?TF=952u(y*@$n{UxrxLS>dwG%U~AH(B#2Z$;bYnp3+)!xB8cU zLxJQwJVSic$H!DH%Sx6j<2#lqo*Gd?zJ!GXoS2!d|Wlv&M1_90p_95tg!*hIbZ6ZSGit{ z$3CY4=#5^LKefu0dhU{M{{V%_Fl1`605&%DPwkXC3orbp2&QOubiO_#3JHq@IhfTR zfA5&Npi4GlDz_$sF^63u@F`N&?WiyPk}4bGB)I#6n!gB-IMd$Z+f}SjZ-Frf_1Ju( z{{ZKh;!69i;aWknP;GBE4i#3w=)58R1)Z?H^+GRK04#}+N9zDtLeYzG18NK=EvlCo3q>F-8uy>3BGfj|y(D$+niUo|THGEv+-e7pFm?R!G8*-_;yI%n_ zoO(qKW!J=`VJ?jj%&Bn1TXPkcuW@_4MOzg$GUjDwE;_{1e}Q^#4k{6F$qPZJP%^2K zz^@Sk9mMf4hOU`P+~09)#0;a8_ZzA7O4^rjc$avCiGPPoxX|dA_4rFG&BAH4Sliw? zjb1wsoI=;QFwm|eUJnuU1h~DbY5=i#Bb$#Yr-@sXUCk{9a=>&;uxLMPB`WNjp*($tQ7&RQ92mv$OQaY)9F;Abv(F{}0A+0ewM^f`H#HJdSq-9S$lDWu zo>IOUyb8nBPvwJh-VUjTnqfp1{G3!uBCZ2*@57c*+NbFnhk?1`;@1;@%siau?=|cSix$T zSZ!X^zdA7#-*#jkA^_=sPx~w|Y=gnqn8gXMJd?P+NmiVed`omyEvXLM{$d5m1N?Gj zljBt1)HBo~8xI6*R;vF1mL*3u4t=DmJYrqWn4E{7+)7~ zsiHn`GgtF-f}lF_@dDgO%3JG*nA8G>4(i*$2w~tyO{||%`Y>1ns}Ut<5A||))#afgwy-iUpt}uIKs0x*pk{c-Yrk@ixW|V07mUWme+{97k5hZxH{K|@k0MPdr zYTR+SZK(nDQ_E62HldiRP^07*A10 zysDboKRmMIk8b%t25d^oWN0(kaQ+20e99@t$xt(O7YyMVF>M{6a9xX@V>NXceHdIm z=9}Chj_YOFFFC2v;D^BRA1XMwZut^^>D2zGI0Yq>uPk3*#S60dH5U)3A;~;*ha8Dx zs>gDHs?dYKBzOC2eY&6p5!phm=D=m`mkQesUlS|IVPbx!E8bAHA>qdA_{^+J#62C& zgXLyFCTz#r9-+ZWjO#F};UVDfkNF+MQu$ZoLR~c*&@TSFil>1Gf8f<9(w07_ zX5Dl>M;DM39k&_QxoSWptXe#JghDh3_N_x4RapGpPu^I>GtlC^tHBZ#g6&Vmgwb4& zlKx{drTgAcfl?^d;YJ}F3sb*dqzFZq3t$nc-Y&S1I@>;lstZ1nD6ADaBCn--&@ZjHq4u(W;nX7)TUh7m5nhNz z#yu=>(w~3SdCsqPfQ-%7RazUJ_~J5(p@h`4SkiqV{{V#LnkPJi!6+uXHSI3El-|D` zMkf}5g2lfuLW_0&Mxe|_f~VZ>f}}Gd0@e;{phNx9YIH<6KGNjia0yv9iqFM5mzlv- z@%>ww$6-tOMq9`)IKDGHXG|}Nwq93Bx-JlPIs7Y7b4;mzP8t6IF;)<%(%vf8CJ;q> zX#K8vE+?iI8I|T!yPinlxl4(GE6JQQrP8DC$=tn$DlExPJu-}b9)txYp)QmnwSan8 z5hs|vlbcogoHs;(%|oA%DBaPBcV#LOSg#xs^*d|`e&9UEN%UYm{Yv9fPg$R~h{{m? zp=4-+uI;|=9r@g|rU5z8k86U0M9RAYRaiv(h8`vwm_l~cSbtNVV&glUOlN{QMmxm4 zu2WNZ)M1AZ7cBB-YpKjJCPuR^p0eZT64sbeD$y5OQx=ytFA&OxrB~vJw>1q-L6$+N zZfa=MKBmrXsd!VX1U>ih1vX2=5aS8A#35zPy`JClEz4!b$X2xXhzYZU2iR^kG6?3n zexZpywYTN|DqgskZ2JRoAo6EaTlXsC%IbWGYGS_9l}}G^`l0k4R`#Ig9Gkz)#NC0` z2P1KJ_4ilyCH{_-J_N6@hDp?wOy5$*vcPo-cFTC{@Ok8xd@~gRfzuuUyuk3NKb>43}TYo*)zfkyVE%5lv;$T2||0eww$Cis~&GZJx*eq*ZqG&8)^ zSQff}BwP6r{ICHUgc*gnzjYZ*bxuq59%xu!)C(h>1*PA(_d>&8xrlM9eFGXtqG6Mj znnV)cU|*L|5hCTQ{{ZBLT(ZqaseU7ntMa(<7=#=Kk{4oat@)JL77Qcde^6qqZRGfk z%V74Y{{X2-OGe9Au~=VYqdqU0x0tmZLN!oJhJkufer`GddOjgNef|lLMv1XEQ3zU} zs9{idY09dvx#2wH1!O{{X472cd-OSH3P}9WO}d>Q*xfL7z!uH-gS44dPt)6R*I#tBc&S0bN7A#fJ>I z2Z{9c6x~9f`8K8FQrebXOlDh{AkoyJo46X5I5j_MLscovv1CoqWz9<^tTO}-4f&Tj z+{lEGOVbwpg?pV=z9JN=?Gv?e>0ffy%ZGWg9ipr-XD}&}?tcWoQJeEt2hno8rW(cG zBG^A;5u?m3&ZZD^QrK_$jmkBX3l*+6rV2_Nc4hSS@oC!mfuy_s_NAmEj<|%4KC+ZP z%9kj9F-+z=@e#q?b36fw#(m0j1)tcBq+Zp$nVELQS{{i<&HIzY;kmg) zaM>6brvuQbWT?K$9&rx`fNkzBd%{itFo?KesY5P(n4sW{$sBxoNb|-?)_y`y&<=i2EPy_fF_>KPnVFm=kLTTYN#!5oV;exTBISwFh zv=>|La;LcIG4#1h9rv_9@h{0it0zCvDIeK#AbR7TzwtGhyE4<>Cjti=UObqkH=Cq? zWrNb|!uxLTnODhEEp(oJP0$(2hEOg5flBY~3uHY105TiZoM8U|ETjZqc&9|HbXW8nNR6LSM8LcYgQQb5^7=nX)c_H%8w9tfJk z!{ih&%;22m&Q%Hyg1h=^S}4~oMQN+8LnvI^N z)af!~h^jEN%y7v8ahZ##(Hb#1wqd$sOiVn>mBgvJr{oA~{{T?FVM%mz3N}xB!^BO9 z#zp=Y`-_`l_AybddLGsOVPh*{5&0vQ1G$C7O2de7?uO;cpgAQtCDh(3Rc>I$E*9+o zZxg9;SSOYvzC6sa_TLi{@%?%W0?SYo9vTqkC;C1ks0WQg2zg;)N|+YiyO{_92SES`!d}! zLkjaa`+={MxUh%#MYd^4>(uF|i(y_O*ZpUrUMY0aytndFLkjBaHsQ z;T0w9@O9vwzNLEq0PJT$$q}ey6@IlDYsOC{&np%}&V{$fdeo{LhBMWY+YT~5DyHb? zx5E8O2m%Vy-czErG8NT~n!0KL#TMnr-i(t1HV_r#%q4;>pj}dPG!03Y7y64t(Oba( z07?PWAKnl5E!4Zi7pjjLP#hS6R)5=-{R<>nYPvO2`Wt-IbgNl}Q4Jfz8GXy{5Lc@; z2yl|Y5y$W8mB%)Hz@FY0)*Q^tfdF<@lNK10xbm4I=zG=bFqq74Er}Oyovw*uA2d*Y zOBtu=6%YtA7BG%YQuW#vT+mSI**5C{9~Ec&nDN-i#d&m{1c9WTM16ft&*$(NjxX>K ztjt`b#Mb5-@l;xPb>L5W*<#cLSX^eL=M4k`A zs5Pm2o0^L-RVsI=M9XY^U0mmUU7x1m+oE5WO+Z&gsIRW)J$^jPd_{aq?=whICfbPD z{0*3ye9tA#>KPe5M)5i$n@MEJ0=^YL+5Z4wA(x-oW%Erw_*Bea`S|F3GOirY<-ub` zgI0A0YGk(X@e|OrlJ5}wus+FH$v;3KNAeQ(E)bbiUm@U4;Kdz7m$|09%SvkWR7!H!@c{{RE|Mkt&A0HQ_(z-fPJT>k)bGfzXrz)9K{$i#AMs^YD` z_EEXDix0)rzauNlf5h_-?iYa0M5Tf1?1fvo5BoQLvpA>9clw0Y?kSJdVBP-MB@yBr zm3uxRX6ET$;L7*|{mwkr9$SIs6_9k%xLx00#UM6Ew8sJIwNmwe5tQl{&oOZA(&?3e zh&SAyjv-8{oK~@GqE?7$pU$C93v%nVd0S`UAxZF7>X>8jW zk1D>mlA$a)vNrwkkBM6IErmGFEuvb|1lt0itHP--8IOQPnPnIx{- z9k32Y-hCbs!%&StL&-GG+W3IY-CQf_fN0#}Rl0^)z#@7for8@>s8w%oXt33vn>aK; z#Y5KaGtJ!3xXxX76XlFkICe)5cmAyA7hGgwse1^q=9dmuZ0en7>4AqDI>(kQ9H1!} zh~!~K!`;L9u$NinhytdCcmQxN%$V#>@73~U4%KV>Y>SA>lk%Js>L2j25AaLr0#>lo zHcz#2@`%g#o7*U^#^hOp*{NI)A4ETiB?TCQsTADRtp5O&Di*IT+_NVv2fu7vmVtSN z4|#^Nhyy;?F{p#Q7hYXdcRs>=klbHyz?WLL9LzS_U-=^l3two9f;9{6%8@ zPmDrUiT5!n8-n%bcPkbj%C9# zza4)wX;#M)@rW32anS;}hiQl@nB9ArL?drfkkVcwmdQU*%2Kkz4rWEh?ED#OSDz6& znNyfGea)JT3YGY*w+Lr*n&m9S6|)WeQKRQ|`jn;10khN2gfsbjD-iP{{WJ~P?UG+@{8M662C%Zsi8@n`B|SK8c$S9 zEt0$Z%ad#ODvk9}l9N8A&WAwW0z1aL)tQ0PkC1=383ft%sAM@b!gt~cL^&UAz|V#S zm9-I%cPzI1+wDntK|8ZNoPT7T%ZRsHlb|>`(ULR*Em_9|^i>zNM)xLoqa-%%O>T97VZ|cLiZCpvv+1e&GVA66z^*dnH9sBL|U~1uo%;^IDag zjJi6CX-Ber>XO4qr!_CxP_zAHz5`FpAy1ONt&V||qa!S_>}7ExhSuSTeY5#OEpwN+ ze3_rUgZ1f`?8L7nID=f(r|J=JnL50r!g@cRR%K2DDC8PUj3G7@9QOGB;~mB-TAq{Kh#R^O4eKEa8pxCMZ7k)o~{#| z@$qTqGi=-H;!rMs3Yy#E0;+Hy1WpTldPXd~tpi2g<1`W5Xk~INnD=Z0B7r}tux1u% z%+$YZ8m?$G>B%W@m1GXNpR8y6B9`n8R(OsmMc%6J&ZpQX_8^V?SJPa}ctJ~dr0WMc zd9n^UbNzA^8avX}?zx4oWAx|yj|!^}VY)Mx=OZ0GH2Ik~2R*OR!Jf!mvmv-_FcSA{ zeB%EAsbH4A{Db?B&VTF?s;ZsLjYO4=)n^lM$!a)U(qV%5PY$K^l+FJDJMkE;mIb=4 z{Q!W=4(gfLyu}n0E zp|OPY5=_2%@S+*jMEPuS14x#fwF+anLXZK+BOcZ$lwIonV`Lz!H#5o@3ti0KXqHnn zmBiG{%Qee6mO_^o#Hn{0aVj5F(SmzNrfO`|G2&Im&;w5AwppRMmlF_x8Jbmy2J!f> z!H0+?&xkpfG=t)HuZZa4Us#8MnO#eIlc@a~imv|vbF)&7L56gMAF0mTC+4lniI;_s z%%RhWnDpi$r~ofDE#g3^lREV=f{C)+OAAnDVbF5RS~YK%CcQ^V#jOsWAX@?YfJb2_ z6+Bp+srz>?)3P|>Dy!gTFa9SodsJM5*bl{iJR{E(;(uX{!4DtMYBOYp(#7;fzk(Jx z5XG*l{IBXCvQw$`xYq`x{{ZZrok;2W>9V{}P=2lSIZAt!5Ue|%IgSZ;iJObBGyX)~(*dE(RZ`v=dNnyYnj$*S zb0C(*5x)~Le8rFMRH<0}-KEsDP=;unUPvq6SIvD&wAO&13xioc?Z>miT$M>wn8afN0Da!VBXe@(G(a(y#uw2R6A{{L2HjQ zfvBO*S-huXQS<8fZ+Oh3Q%AlO(Q~`1@`+HQ%IZ}D2Col+H-Ils9MRO=3wF}lFMzJ4 zmRx{YX2?J{#9(h;`peZebp z{iq3#h^W^veIqEu9IF$tl}m7UII#0G%xA&e59MXwnQI(HN*W&gBo_sBi%uVC;5Lg$ zzNU&#@OWeRpDT56z;MO;9G%AlU18X*vs#PBf1YDjZu<4qxMmJw5c{lR>g$?&<;7LyM!^NyePOA*YlK&S&k`Vrw@2&}|Ez^9KH zt5QC6QnR7g%(9IfmL(+1Xv{6mr8@CE{0%UkaWxA2f%E22%3;*FtN#EHZdSJ5<;H=~ zw+i(ULfAz3DqskhipTK;JJbazi~1FQm_u!B@D=Sx2g{&1x{R&Gh69s1$Tb2^>tT|KMzl?!hstLZ}px;($tUlx4&e)^f ztyh@tz9ZR+twxQPdxB=z60f%xs*JUEh3S?n70qIdIS3yxrv1o)f%Od4lDKK}71uM8 zX_nreD?@o8XQ);fhE_t1p@03^shtTkVTq1-52WY-@OxTZ37dQ`jK7wSacKen&= z9kZ~qX4*2o2+7*1rDc;IBXmXSeKPshZ?SZ^SMrLMg}H4P>Qxwb*^I~9UkU<(vX#5R z3Rxz|xwPgUCm)8h6afCCbDSByHQ-^EODe|%^H|V9&K@JP3=reT5HmK7U|$DNhV{YP z27^>h@gkd9X)i}Cq&T3n?jXBOu@o=KY_EY+WSkM0eL`MGr zGl+Ery<2Rk;WqUakBuyFe6JXS?K*(Am>)+o-vkO{;(3fEc3I5LoL`XuqkR)MOXdsi ztRXVBb#MX^R0nJ+9jmUhAbVYtTkU`|OU6Nrv*;;z?Hm)@v_7J8D~m^eodRofAl{j> zgc`Ven?Hs7g(g`@yb72>#vrzQLFQZ^F|Oxk0Xu@0#C`{)EzF`+p{@P|SamNG^qYp} zo~3=lI74}ws5o-oAyTUWKcg?;0NQwC2R7k(jonPH_6Fjd!Vcyc4YGA1@=`PCIhqjE zw+AVpF5?HM618P5UojZPO|LT(oXW|UNkXNWKap>b{lyonA%0$>gwK}h=lt?mSC4Ui`GO)x3*(M&5yUtRgLqv zXUw_cRtmrh?%^y9u`AtT8xZgYyRG2tv;vpO`Acs7@z0%&2DA5yASo^vroX z!Sq~rnu=2wWJ-nms-P~_X31AI2QwfAY>VreV-bt^V{m}yH12uhH_F_q3=~zL)C}16 z1tzB93W9y5s}x=;0S1YpMWW6xzsK<~O@TAmkL+N#@8UmtR#)af10g|`Z3C-zoWnEJ z9X4QVJCmkwZm@k36tND@GcJp|&o4x3HFwHh8B`G4)9xjKsOd6ZY@{)!d`5}A<x0%9=2cYDF!FrBNxXuM`EmM`i~!^tHG1`J7*{{G-GRkvsnKC*;iY$L%TH# z4ORXE*r{d|Y!0o2WW2YT->8jRERW#rsAjnNLyeCPiFBls2M zAGRam(mzDU{eif~<#T+iHC>+(0k8?vUP)y{wgy&WdSSVep(R8ExmesWxpp{?l^Wh- zBrOEiEFlSi$~!kKANb+D;HfPVATUDVCDIpq?nW7ML`+HnR)p zElfaR{z4`g@q>e3GUvh(zkj&LEVOOox0t;K1GR)6;8{no{-O485EiwDG;nQd{wEQt zg$Z2$0PvO+0Xc0!6-m5+_*MMEYm{&?YG6I#+|3gRsULT@I=L_zbK+VmW6zoM zvV?FKolG1v-jH?NO!X`nZ{1Jxl%vzE{_e=g#y7u=%!%w=E55MFD)r*8k3^s_uF2XJ z!C<^~o8ILyHev&8Douoo^%w(y*moFK3T7EZ4%B|7$5g5{m<`)?GTP5H1RX*O1a|PD zE+dX>6Qxhs%yIP)97|W2#}QOfa{geu`htAR`;DtnuO*fri~MeFCDgkjV-VU9%OAuL zJcAyT#i;_@`$AOQKBF@H!mO;@^woamnZ(Lq=2z-AZ&OLW3LRCq?kbV|^TR=J^vtWD zlzv`VKe%G%RFcMzWVa=T+T68voYxSXk7^eNGZGOjI(&b~NjoWvxV=|^E%_o1o((Y9 z%)(ouYv}kKF&IHPkFXnYEH0aDow0%@9%JySkARkMnOrI&aewU>4X`~oqvA4LrFZ`T zWm?WN&>zgSWo(K{DdJI;=^Ln01yxSi45TT*L+ym(TXj(rqRXG3Ql3L>HVrCjKDZ4$ z%F9Lm2LAw-e+I)d1|#OcFQ5F6EjYYonRp20^7@Oig7(vg%`sNOtI@ut-+a9S51(<^ zWI3KGh%uplyT!pJyip$nd=bCkPt*j(C#Nsu#?Qno{gX&DhhkFU;->K8zFB{AN(@U@ zw94<|XE!TVXK`auJ(Kkl^3N;a9lmid%qRlevZWYYrC7SRJ_yC>ZW?mxG44t=8OQ)( zP`K3AC*XzY+6ZI?=;M6MfU`D!g|(!98uZR^$MY9z0kvIwV_7II4w<G;Rrv?x6pC(D|^}h0FrTOl~(cR za-EHH7pSf{n;>2w_$qzkW-wWnTD3MxtY$ne2WT&ug(fa-^9K=gUy8hHFQ{V@nh~i} zhZ3u4**6RyjeN@=&Ci%_GL^kELe9uAsX$xNaCnm+VwF3M^lLTXl@`Y?=Ik7$-oRg%3v+ODWN70 zpVR!qfOvG0Erg%oJ>xNU~me9N4T~yiGZH?P7(R zf(MXhLyqoQg^%1ZAI)W7y@j3tZ3PQyeR|wSQCVbqTJaAooF_E`Yxf$r?VK-k%eY|$ zy~?UC6)D21-lZr6Qw85*cm-rY->a!+%qF51c;;jn2m)pKT->9QAC-B0LAJ5ar}r>j z+fNVw0A^L0V9MdXB2=8&hECXq@zrVL^@>#rcUghxtF$Z2dzW*S@K5e>#(%cr+zlE7 z|SQ7XJVXxN6pn z0>E(cz)5JrInNFty`1nZX6Ji`-CK`LLvOit1ssUse6>-LFM)U>*1UHN_q5BCK+57+ zTqae$CV!Z%B%HNg<^1I<^ZiFfH)ssKQ$_vDMBSm#f1ij8lMTYDwp+fXf!{-ENDcWL8$yqJi$(CDZzmJP6WJPGS*a1u2pv& zLR|ALHyg}x2BC&%oh;A;#SU&JGSL7?&}jT-Utehmo^AkD4dw_&AtzP-}9)WSvN^l@^&KNu$P3l)UHBAsXVX;=dtj(?7AaVZyvnUmsFMre^ zRMtO{Ke@`d$EZdaJuab`)x&WbaD}j(H%LFZk?eno&Pf;}*GXS3>Cz)=QKc4t8BYvZ z#J=MV1gBuWH^Gt*GOkuaUrR=VzA;X4Yh?*~$rAdHr4ugrK zw8wI?x01*7LvD1B@Tq93++c5+Kpgt`;CPN7_FXX;y3DBjMwpROpMjYMC9KuUm#u&f`(=5I(O7@xIELxt zoc{pXM$Gq~zE{1`#H)1^Rw!5#b!p_hONhA# zD1o#KxbBWE;w)9ex((F4mUU4mpHb>VHOBQ7(U@87R){G)S3XlKP!d5B2S*KtI4bY&Cp_9YH)uT*G!13);-ye8mYz7<8-pYO;mb164TL4`IBIrE zEr2Tv`lupUqe2jxTB7Cc-0#4ql{74_YCTCnf*AIl!x5{$DA7Yg_>$KhPUrweudz-g z4|2#BCy*8XrV(mv%}qSPH<^=^e(2Ve>`@$-6m*E*qElq7YF?P08CZ!52|>KT4DFQM z3cP*__TdO1Vj7o^$8(8Si-%I@9ZaaXRpLQAR@fNR2WIa>+n$V+l6*}}teW?!CZ`5v7SKco!XC7E9n6*|b5dp6Fv=cbV4e=|mjid1sRJBWL z;hgsrIc3~1BHrWG`IK<^UHerje1bol zpK&l2hH-`VCzxKdCwvET@QHS!yO!o#&**L-b_(;B5;`@e-9;$-GFsy99+OLw+xqTS z=?l(Zf~AEj(@)obxFpy_)seUn{{Y_;Cp;@pS1B+ekf!JYh#(g6XFA*>;su~I7c_yv z!{L%2)pRj!1>0GN{-R(l7`-n+f2itCES`PMA5k76kU+$*ca&zPbfJTW>~FT==55O- zvje5idd;sNSeBtWz`dt2{{RPdUDqj^g#n7i+NYU{=(GTBHv@}>oS`moMcd;rYm6@k z40sD8RdSuYOmS&bfEEg!sh|GCcI*CglQ8O`bWtCS6Mt$uPth=&wg&MqqD^cwobD_L zErZk$+1p%TWFHBj$`nSErYjYjZ6 z4HR0`cZ*eB%3`J#+y$!|{0`&}zZP*7R*=UqTY{jKMDoO^?sThXmS({{bUK^&@h-$M zDxM;^BIxDJKIWnvjiomVnB2+K%=~T43nr#e%&f+D4=6&w90T_R+MKVhh_9ne zej{z7YIMBy;$(bqVgpHa@2J}DHOLwZE&+T>tEbE27Ym`(4ZPX?jAh|$f2I#f)X+W& zg~z$XW5RbXi2c@8AEGJVD--cDD>9}Ycp9VIhCD-}#>zZFBY1TeEDmA6!>&0Kwp}5I z!E)SF0?0RJqzrO5ab@DYc?|czfJ~Dn6^cdM%>=E*kQf+u5ng>Ie0e|WY_>Kr`s0~$5bdT3Q&PEm zz`5s!3vzb5%t-HZm}0>)qn_PLc+OD{vY+E)0IfJRkEllrsl7I=T+A_BIkcI#C+n}6 zyZLy<97iDHmQ)R8GR7>My3auSoh z6(44+I+)clH2I2aBRX99OVN_b0ocO=B;cp2Bm0VEFPtJ_R$}dLqSecYNc7at8iO%t z0MvP# zl?)!{OhqchdH(?Pn#E1a>IkrEUJ0qTYvyhExP@PZ3MM&Ia?qpd6A->F>$RVev`CsK{l!6bTF*k#7%g@AY;LrRM zsg=3ujA7a27rxAMBebUeiEQQeBCaoCu;K+P6x=p>gUik*>_f(-fE@`b zP^;B9QvkP>ebvgFENxr$7g}or;xeGQ7*CVju7IM}oRL^iS!GQKRk|Yo=brN|MHpIh~GhK7$(C-HVD|oqN}-F>N}>=mFCY zKd?h-CyRW(;xh?BLiS^hBSCDF2)6$KP$)j;lf-Fo^pU1tU^kyEM>H%cTpu+R%M(yE z@r=7Z33UNiOWZ|{Ln(%YrUibyKl=*;lM<3DC0_f2LCJvia`do(rP;j97x;vp~Ib1=t&*PjG+*WB5k(pJ$V_#CxUTKNyW$ zyLUh2VTh7zFgW9X6P_;7#1e;u$~G|1v@z6%azNZI#5J@VI!^Xr;x9il26r;n=A4(} zU8F(+HwA-C>D;O8CA>kxw-w4fO6G^Jz_{)nr-}1lio`e9;Cr%P0)H6kKc1Bv86Oih zz9wE^P#zVP`;=#6=*88|BcH{aM85g3V*SK}*sJcQp%~QgUO9!I`SiZni9eiM=kYZ> z%)f(D=`V^)J+T$^bB@O7_dC?x1GlM@6+)rW{H4OqLt&uXF}0wPtHDvLo-9T!9QS^7j~Qw#}jo z(6_c`+4nAxwPRmcU_a=7Bf7c&0LqmtdJoz%Avg>DptlF^{YIhKA^ZqWo(1Nl{k^}M z8#O=4a}hTXeu(}U;D4y+qeec6+eFE#{1Hr0Rju>zkDV3*{*dJ(Pr1rt4z#6`$M}di zdIJ9d;szZRMHO5fXpj35)c*i1ztTGPzKgZ=O8`>3hf2;1Mwpd&KG^8_n#{{&Is`X!h{AUJWv#AGPl@Pr|aA7KKjUYG7I?1_6iL`r$m)cFKk zvi1GMAqFD2dUi+Km2sBQwltXNdtoHgS=0;1W>}sOu_X4)qsH)RK238=1HSLA92oh-bv@9I%Ez+w-yT64_oL@}!M4*hKsioh@R5)6uu zR}M+xs{ONl)IV|NZ+#{)7WXdsnlk*(ybPo_Fu8!3BLhwKx^_xb6xL{GD_oI z7x+1qnku^2rdjL9iM;*Ivre_`Mv zxtiAnr?VR-4V=Gk{Y06hRaR)epkd;>nCb@rn4y0TT*X`_k}YHQ!P?I7TUkhM)==Z9 zqM|cL{{RemN3ZV)_CL&jFk7dVeUL$Ar1$N_vV7Rb>I9_!0J|*j(Gt4KuZc~GJ*`Xo zWm^l)qJyL&XrMgHdu(6~xv|KO?%17nJ3w|3veH-XEo(HY@?yT|S{|HD%q1PWx~Sj_ z%3<>rqZxMHe1P5F<=Ey)Q%{&%mNLP-FBg;_)aNF3{t<58w><%a%4ibXCwWZ;&m-mm zeiU2{#YDiLKCn>{?1mwJR>FT(Qdn3sv`Q|(s^}G{+Uj=Ng9l33+&yzK&bDeIt85pB zA=Y@|cK1$b`A77qM>c;~3qIJ+nU4J35BJ13dXI=^P~!(o%wT}>^D$TM04a&(JoPM3 z65a}^uWZJc>H_i9pf5d32(--XaS*kV19?8#T$L_H(7ee^9m+W!L9Ql6PLAX18u9qJ zC#gZI#2<)f)Vh}qR1anJRX!$4c8%Y{35&vp@!kIbq@WoFj5$=LUM^KjneaensjMax z0q|?)UQsm%UE+igy|e2Pwa~yT;Wm^);93yG?I}^W&BSK8JRHDOF9X@GqEWOM z@fsPo)q`uoRPTOQ#MSoI7MMb_>kyxw6$s$)A9F!x@Uk1Y(L}C1VXf9h6`H(w+AM8lPw5}n1I%i1ns zmbiwIR2q~DR3bPzf~+)?!5!K+i-~2MS1fbM7Bc;5ivIwz>(N8oLLAi>Zzjbguqo*`Y>_w7?Xu z5%@&;I0lwsa*EQ~ME5L2@@fG5g}Q>+)aZpG0+^xZ zAVs!kJn+n2On3M;a>Tw8&Tdp}sdse%t;RN}zqBc;xCPW71iWq?kmGWz z9&?lr#5D7}A@3w)qhJ+Cy-rbZRa`(0!MFThn90?vU|g(M;Or02<4;-P_uOc}ULfK3 z1U@&aXhw7B`jpLDtq+1-`S%9`bVNn5^Kh9SC-pz(Cog48A>Lk3OrLU-TPqM-9=X`j zMB6Xd;`b93#KwiV@zUSH3=Jr!U6Cp^g!C1^)cv-Z!jCZkRW}YVnzYC43V*^+EG&Jo zC5_fA%Q?^Q{{R!X_E+sEDHw|dXWSXYcMDfXvj^(nAgWDA%oLd!s26mhH_cpEo~V$p zw}5(G%2U$l)xbpbbO5HsNw9cAJdl9aYnQ2DTT#f+ArG#6dgfoG>kO}pj>y1Qk^ZID zhN{-T>I7Whxj~E!E}&NWL58zY`-mh~c{LP*V&Q$<5AsaaUSd8BsUKX*#Os62O3H^* zZ<%m~RHUMY7&9wi34+ZhkZQry&KpN?AhR`RycmNkeJ z)@2W}N6|5p*mH@@13t(jY6jLpfy7%=yPSrlCx7PSMx@@QW4vW(cUM;t5jYF-CeV3z zT+UgC!QIB2OEQ75xqRZWm28T z#2T(!l>vuCe7^^u!AM0z6&3n!pO_v)tbWk`rH%p3JC0H~srehP&C;h3_6LRzJwk5F z;5<#w;djjq`i2O^7it@hSx1>qdFl_YW&w{M=8IkQZT!T_{{Y~DF&|zL#`w4a@w3tb4U3&7hY+ikf_%U685aUM1z4bT16Ssw zndP-ZEq%aNCgu91wnT19IEL#y5PC|9*imZp?Taq{NTBww9DNMHGsoRCDY{Nk*D4a( zW+I{u0>)XIM@56fFF7NPXN+6`qAH%{Yc)KI@|l9_6(MHmsA-k2tj;P`p{iJ>~k)AMrsbOQ#t*SnXEfSi||}6Ztkj3 zQw9U&?q$;$&RO;N7Cxp#0)u=t%x@$kzWB}RYdp&y;cLaqeSQt+xX|sI{5k3wTs#*6T*jDAS#MI&#Gn+qxEI_GPt>P-mJqib z5PCNjXHvts28Xk;au0I+IGi60AXl^J8SCO)c`9dIwc=sTTg>^RDj{}r z(p}xfDFehJHV539RYxy|pxJyysJtuGAa}12)Nzh@gL~!yaqjwoEvPjsU9aL{YD+4t z!w_WJIva(pnBB}^f*DaudO3}`T95Ptn9e}(CJvzg0K`NQeWOpPm`p`*4*A1#6i%b_ zw8S@Ux7EyX^S))J)aL9YETY=D2c{1zP0X`r>9hSsQP`ZRRHhyV-0Q?wzM;GRNMx5l zPLuBy2Lr5lZdbXPY`-@Ig3KCkFXm)_Sws!1C=@&hR6^CnbVgY}LaXw4jaV0pJu{Lp zX_79xt;y5j}dAi;ZR^P+A@I za}5(XcUS35&jnD`z*)>P9=eLIddVLzFm;bHUnb@DFKD`muH%x6>tqWj2K-17YDLAF zr*Rl50Hns_z+QkYKsA^-69hxlqZulrHvvuBDh_I+hK4thECKF74CGI7&F|;?3ZGre+f-tmf!q^TCL3AnS(3hW>i`| zz=H^)HUJ*pXLn1>TA^O)To>7EN>jk+N^T*jhshhwu1adclaB3E_;Fu z#C)w>Mg3MiA#0#!B)5wf^3MIjgG22sP-=V!b6fVx63U`K^8jXf9E2RXa~P!DbEyG@ z6$4)9WA-T>=4KBtewbM2Juz5W&qU2E8XlGl%@^Z+V&%IEjn8$&8`K(?aTaWJbr{jC zwXflDYf;UXR{oHcRSm&q z6ITI6hnaoV#q}u;YAm^8=~jI1UDiJ)D@WAxMyPeL-$g-dC-p!2f~V12mOrMoL`oe7 zBAO?ulKM)r4Cl<*sBG|}pZ!=%uDhA=Kz_a@d%>YFlsC~00kJvuO^>b&pAflILW+Y< zko2-f_ZPLYm&i&Wq|n=1+Bmh#ZoI+gvQBrRqCHHKdove4Ey^vUmxwD9IWt=e{z+*o zln&jpt`0Cq#p))&YBXP$}zXt)o!o%1g*uGw?pn99th9L2V1vtz<~s1FE114 z*ucCln7(NbWKRHIpt$C1Q=_|sdm`oa9YCv_?Q<9@lq+LKUmyL&!CA?~X#W8CiJorf zgs}@S!T4@_GR6)R$8-V;02;w>X9Yw9i)o-Yv zANV)s13&CAIM)-d1FBt1EVqN%0h(Hfv(FNm{vnc_oJ9%>I*ew)ktY@t=}T>>nh*IY z6>LOwZFqGAdOt{NachT?VdRc6#B;t(GL+H0!N2r!ALlX7kKA)1ulR$Ba|lxr)05{6|1v^kFKk z2MhjTc)T)i%85)Me~Rq!F+Qz-0%4;e&#Q$d0Gf5*%y!5>m(h%>14q3F_=@#xtgk=Z zILb1p`{EkQQAj(!;s$jfm05rCTp~GDP2a?^hb#@$6mH?tqt&UXr@#Tx%)<@HW^?xu z6{YXxDYMS1w`{nBthLR%F)D~Msq8>vT`z&;DAXgfcg% zM=TN$Ys>Vt4yd(T>MpaS9#!a-up9ajy!}j|JqBaUI#=!mLjzPYq`l%=?vF7Wcpa`3 zHHe!}VZ?FwOUdMMFq1NkJC#^f+&vViD-bE@3G9XpL~E8e`;0^Qb|x9o4O~JwuU8u_ z&v`P_Mu#w`l}hE*Rkd}UK471BZZFJig`%FwH$zaNC2(vnk$p!xW4t$Ub~;CM7e5+XO)KEU1K{>6TOuoOc4ZD(W629O3r|GR59y z2m?8KnX!ae+~+dKv6gz6HCUbuDD${}s(XmEXYOeX7+}_A+`qs^$y+8d;tWMEcn!pF z?3YyUSpCNl_Z?+H=avNULG>6E_;C*TA%XbU{z38)Xn67S372Tz)to>|i~UT4FrTb$ zl{b7ucWQKRFs}QO{d05ri|FcDC>&cy#JY*9*T~{yB}G-f zNM8q3nR>W5fwm6re9xw@-~L24_4|P!0|Sk}_7LY|$77-~0lN|WznI|~?1~v}@`qkv zV?&MdQ!mUh{C%nh%LfJnnE9Zq`XU%l^J4>RgKzYRy~66?jHmygj6h*)=tm@UZ$+SX!=h$s0bI+h9O2@_{2P_HrbwYDHZmo8eWfcYvR z^p`HjwwMV1nfFVXBsUvW8E$#-l8e>q=)IfWHuQ6E+0J~&uqH<0i6Iz9hPqa#& z5s1g3Ep2lsMGp{OT4x8Dn=!_1jd9clZPZrf51!>t!V(I-o@LYD;AcER5~nij@eIXh zuMl?2xUrbjr6?dXu4C+t%%GdN9_C#l?E6bJha4x<8e41Jy9N*DSZ4=N1gmc4=Af|Z z%;)0gTozeh#p34P=U{6=g=6w(X1@T#Tkcx09A*!kCtT5mP6>#X(Q&uM4IVlN6LiHs zQL9wME@~pb#29Cr>3^sV5w-O1)IK4B?jL}Lp$Z>Z65-+z;4fo{i2}??%bouKGtF40 zia=0(8;G}#nTla#R>Z4g*E@%uFlyGELzeGAbzQ}PJgK+lE@dJHsCdQo8Au%$z)veH z9MgdaP5de;)fhFK`D1qW{eS5QT#ofTiwINfuiUWgvyk z`4<;_(NQa{(Ezm4T8fO=tcn`LO+mu_#HXIwfO)4l8ERF1s{udV%r8viU+00A;6y)` zKIO+_9pY}Xx{S|te*!85xztD)?eV+U^HTu#?7%4hc$4)g=^X zw~htM7~}=p40656Uot$_#;}S72_>l41gH+`r-3_5CM7Xjg~V1{h*eZeDym*9Q)`$t zWKhH51aVBXDTvQQ+yV`lnbE{?Z*Y6uw~_Y~9mm*)`bC_K$5$@>y+A9du`Aq7UL2EA zS&3@qT{B{HO-f+#`U}XT)Qp=I>CgzlbCX!)YCh@ zexNFn6dU3djNm;4GxoyQx9JzIuuBY71?jxbP@rh`sf|01 z{{VX~T(2=M>s?e@32we4{{XdQsXRm!9P*? zoI^@CG7?`CYRH#(cZ4Q$F?op9L}{{Z*SU^lyy=HAa*6wX4wow3%(n{If#khUe@BV9#zkU>2e{ID zacXl-5P+YT14u70DyCD6UN8PZoeEz=dwL}UHImPQ7%id1QraF*+9efhf9y($o-n0Lb=5WX`7h)m0%vm)RAV19bBmV<$%>ZFcTfUs1z2g%IWE=P2U6 zAO~Ig{^ij!#FY-wMNvgxH45~`bj79GBG6l*_?JI~AvfHt z`HoXIb1MMi0ut7u4kCA`QvU$tIK(j2BD71paSEm^j}GF>h+|O* z)H{bnrRRvN1qA0(!HrD3V~CE`H;7*Kil|UPs6m`CHQYZeH{ZB!R6vcYuaWvqz}1uP zCWL&OgKGAK@N`RTJfVEdZ#Y&vi*7D!ltk0!1J1e!$bS-ra^_%a@YwzctG9v$z0`bg z7=~QHIGD_y<9S1_S-F>3{v^~a;6G2s3sFJs{g?SBBq6Vs2|&;`x-p z@D+!yCDtRX%rML}hpC=en*3GGr0~q(Ye7f0Vq~o%R2=$p>%elsR1)fcB*D^Bbr6PC zs1J)PXG?!f7;(!fUoyO%f8Y9;87J-xwy3tHKY|kFvr%FT)%3l{HwZbP19~EXecFRj zfII&Hk3ki3@zL@!CoW(z(GlUnH+3E`#B7i&*!PRyE=+Ze{0^H{_eB2j^^SGCk zEymmj^x|M^sU7>`Hr+)l4A%#PxPDzGW6}h$&l2~hRn$K5T?jZJ-{!z?mDHx`!QawF z;vL^ymgaFmMLq@0wvfUz6fSv7M2x>X;w4q5Vd^6l7vhK|3i;n%d_x(cQE6ejJRok> z&Jwc5!vf$ROeG&O%eXCJU%F#Y2{$aB3R9B@i>H<&>bhWfgRV`Ii%0bRMNe zXK0)nhQq$A;TWkyUB1|r?<}EJ6)AN7;((k*&HCN?d(^_EtVIZ!VBQX;iz;fd)tHUJ z2DdNXAa^^9$+llf=NWJkt`xajUa_C<38t3J^2E4SmgP4V z5T+O>E2`;b;sIsEEzC{s`mF-0(h%Vt!?tm8sbgkd<#w*(2XLfT-lbcbj|Sjd=cz>8 z8d}@tRm!W@CEygn2*djh&7lOBge28=Uqe)v2@YpJiHBo%FP6y z3%aVm+$KmGsEO(jlCCfB&CDg^N0s=gV`mdKP@^-AwUgszUL}d*98e515?Uj zw*pkscM$QbBM;hQ=aM;{RJc1#V>eUV1~{pysmxKL?N$Ts*mp9Lraoibz)j3N&B3R+ zvTSU|+AAw%f^wQa)y1*nfZ}r?x_7C?8n6fKAqw5VYt~sOv$$I7-mzZX`eC7`}Ie_sr zgkXs%t(jQZ3*7chx{B?e8U!5Mptrmc$|l|C$(xu9!z{A6b!_i-!5xt18h0l05Mtk+VwK7Jw`9_7t4pkC%^elZ(pd1L);gnQwK>JX)1Frp6? zF3_kO!?Ry=Irv6Rc|AeUnMO!_K*iJVPlW6QMNYGym|D(dGK$(Sf51d&Q7~Ahtu~Eu z1b|uFV~Io(-GFZ5u`97?^9QZdDNB)A#k_hzV1`CMewFN_&zMuVtLB+x2Y|{?mYGi9 zP}ruLYEY}z<{6q}35*|UdAg~&YP8Kt@0h6%I2PrNyI@~&(~i z2w{)7U;e|X95MF`{{SS%Qj4wmnK65TTAQ+KZVM_Rcehpe$PE?Fv^rgJUb zxrK3t8EjS_;K$kWk$d`!;%X|XwjyJWY(&OS7F|qgmU|=D1~k30)ckXlvE7k=NSQsa z?jw@U8=t$HO?s*QL0Sj+D2mvg59or~ublq?xSt1AeLvK)r)+Su`pKy!!aV__`EKUn0 zx29oM-_AwiH0F4y&u!1xBm$sW<)CzS!Yl5@7x6-I#z8aJc2##%9vb^T3e;Xf89iB) z0G*F;ZSED-!oz&PO+HR#3ZaQ!hFk-EUp-!G7Em5TsY(+IRpj>*=kTA(V@3iX41}%V zXWVy3Sihn+F!~1hoo*C;S(qLw4Wh5nj%%tgi_J}#gtYuNr6={Ozh3^b^|_P_R4 zzut#=VvU-D@oyZ;)>bTU)u@%AQ{{X3< zLBLP$W2e>bp)tGGJbV8DVtJc6@R&nZf`3TCG_;?~_=HRWaMk*Q7;Tk9u-V!j)0HyXt=Ok=9&z zpQ4KfvPvGe2{5!Y9}opd-J$R^0AVubH!Tx{F)rrdnFDalxT%KjJGd-kq7gAq5YA$| za;gs>5oIF)36E6Q@q3LHp(_I34`;Imr<}0-O|jaQg7sDN$J8S2-a*Zu63v~kE;j}4 zXKE_9YV@@dp3VON1NwxR1rjTxVlQ_%~&Khg=VC9vSt%zTzMmny_Re+5sQjS!D{Wrb_BdX&PH zgnz5zcS=cvEkg}snw3^AKrJkn`}AX=jE^1@|aqBCjt| zNGJy!tPjdn4UM#4{FaA=pOnq50%JWeJ}Oj6qA9H0pt})Uc&uXjjrw^(h$3#Jocc<_@LWt_~rBWF5=J%Xe~#Tr8P} zDux&a0_dVF-xJ}Do}~nHo2YI0uY_<_*k|dEMViMiSSKnSHoQh)n5#?e@hk>T3zEO&CBUSXb7rY~^U;nqklZ<{+{mREC69G#Mb z_ty}p_XW|^uMre^m!M0WQW)LzI99x90&d*hKJ$~r2YDC8FRl~d#Mo~a5WD6ye2MIpJSO?=H zO3QT=jLbLsL1Tc*P|6s;Ai*0!taP_jfRS>=H(&b^Pc4hUc8`kJUfPB*Pi(y}W6z=O z3+Ktm_Dai}yjY?Z-fAA|#TYLUL~4O8xlP5RQEIQ$cYTJUzs$lJ^8Rf@ANC&Gw)uQZ zapG`onVu?vgc$w81t!3HC9MM6_v$$t2PG)1{D*aa`3Z%T+T+ADatoOdq2OHnNI6)$ zzi=5D$p=uCfS%()(Gq<_Jl~0c)S9j%j7@2xTkVFL^Azn`25jytoWFr$d5Mk0^9mR) z-T0afK-l8q&T$+&vSp4_b6U(U7F(AsqE^t3iExY!OuL2*4+Y9^GbRmjncS6YGg;V( z6DE3;-k<{kcEIhaY2@NwHHeZ7?1YxFF)_0*Q3x!uQ5nOa)N#3AxpR0UUw?w)1iHAs zgHQksfEVT+5(Y6i*^iO$%n5#4F=-ooXnf-}weE9tV>Uus`sE ze4MLU&-W@>j;ON{_@Ei@wPA4yp&AP-SGa5xO?<{JlFEU2cq-qxLhRYt10Sfu+7>+= z?U@1;2%TcG$5%W6x5R2Qh^y3ljAz{(vY!}=wtdPclqyy&lF5QNVAe4;ZfKt$=4z*C zeBx5Iz&CwG0w7|3I%73+DTU_W3+|vXHh_oHYu6fHW~t#A<}o;HuRaI6oZR>2p64 z!+MTY_=4pxS2)yauvD~oqSj!z492ayhIopy(KQo9zHxKtiXx74D0d6^LFko_!7mc6 zkKEgF6U1;Q8BS9M;C5fky$no@%%LNk@%Vsq%ts8pbzDbz%O5DMgE`a{U88>Xl7 zZw$L;CD3A(@Jwhr@PUukpE)Wso`8k&#~$MYnukm2Tjzzub+_ennQ-2rn+RGojeW%7 zIhleIH#C#Y2BX}Qid%1ga8@=@hKH_rT8X@&M>thr>$J2 z3}qVxYpGEN_ZgV-^9y$hjl!jP5fA&~5QgRn{H9}?@;s=^UxzS+)Z2+hQOM<$G z7#3_xX1e$*xTxQ#H}N@1@xks`;EzbK!PE52S;T=2#h7J_;xM5IuD%iI%eXEw`)@F8 zJ4%fPTtMS8irgge6TIdeznC%K*)p2mf7~k=c*3SdG|0ub9@A z0xoyjSIz$Tl}bG2EmEx4h5ML-xCFS}KSTYJ+yUQdNZH=@TlUk*E{$nasCA) zzzt;J^>@oRDV0lj8dbgl54)6B3`QWfJ;x)9g!A~GpLoBhzd6+sut>ZPyO<7h z#X6YG&zkDqb$3qWDb+*{F-1MMnw z%+8vU+ghSlP$=qW@u_e5K$e={s2*YJtDDuMwmTLyFl#|8&k({g!);_rxJ32ze#qab z@|6zPg&_`eGO9AgLwv42AdKEp6XG8+6PaF6z=6%4j7lZVWgpQ*P$;-so*tzj+#R9B z<-#e?1}P6ZHx?@#eh$>az~)?~+*V1~$Q>H;;39(KFBLWX?KEhA}HM`Iu$=S)=f@!vgS2fo*DhkzIbF0}3iVf%<{_dD~U% ziKuPrKZjFuFd%C1mIa7KQQ(yq{^?VBdYI>Nb2)^l!ff0at!cFY{u<7qqbRG?B2Aw6 zsKe4Bu7F0}A8%5k0J@a>IF1O{gXRgDLND@z>SCexO)ak9$RPkFMZf7vBM6J?K&5Vf zq9s7dYp?B#x2!+z;l=2)cYkERJ}057pUs+U6}%W9Fy-mZdc-t|kqKl+2ftd1Lwvbi z{{T?*!8}~W*lOQ~Ay5moGJOa9AQI5wK`^UTTWD@`P5jQq$VFK-)K*sHrb6^Al#M|K2;N9DP+jI&wKC8C&Z{`0>IRYfe;mp_A=jvOYFF1R&j{3B zCs0aCSj>%Oo_xoXmNi-2Za9wT$to8r=4e^Q{3c77B}b?)4&V#BFYvfH<`3hEZY9J7 zs&3)BrBX-BAM=AB{--b}DTW=jDOdF_U@)}Y*ibbu?q!M|BONTroaK76G6o(Z`F@hW zxk{#6otO&S^2&_M13!tjKPm$CTZ0TiyDNUH5PIQovWvNdzw>|h@ptMOlqcpD2w>KM zzKp=Yw1;wb8phd{Avd;$wvX;q-&;6zl8^c0#I@drAB)dY>iR$BZW>Lr=Ub^q{uoR~ z1zkwYLai;@$DBav;R<0+rdS26Rl7!UhdKWMNtmo)<{G5=23U!wxzhOhi%2!jaN=F& zsL5?Y3i+19-R5EN$jzKZz`EkukE^L#1m-r&>I!XT%$_XpaXAoBFU-cnB2f($JjRsZ zWc8?v$pd&_`7v}DyWHoSbQxyHC8dMc{EiE`FTarim`Sj+!2y3_ChD4%I%93$9)aR^RtB6$=VXl1Bh;DGt33Uc#0jO{mzYGdDq!LT|g}13j zmmGf$1|e-s2bOcA$j-zOnOI!_sE&+BWGcB$#4tjv{-86&TccBr=2+V}rK>ZN23$-_ zl<_W_V%T*A-X=p+X2KkgT*Gc+NkvF+sdU*DlStfL_?RNm4{5+p2~e+E>@fK%%l9{_ zsD2eO6D4x1AVG2RN4U{}i{tTpaT|?tj7EjJXBRG1L5d?*;t*W(4y_cc_CQ>KD~K-p zmHZmNdW&92!I#Pqm9+Hy1}8QhVJz4REpwRLnL~*DHCZVGlz&9jsKDg9@qdnB%Tu|$ zCh|SAB5dv)qGx>Aj^ZEr1LcX_f-1QV>3{5F1liLByB)ttK-{U(=`Aa^{xmQ34pPyu z{Cbx3vil+Wok7cVz2E94w*ize{-#xh!@mcwFb`z1M>fJ^2~@vQP-6J%b#2OH`YajZ zzlh6_i1^&P?E=C~tl3Z*<&^EE;#V13N{^JVjDDeBvk-E-%%H9qtI1&-CwAEZALiz| zO&|fuuQ3v<(-RmxPHR@fez@4pVYjp9S*^o6m^O*mmrX5hGMv5#A*wPM0pb zM~kux+V2q*7R6sL`vDE(3=*w&;P)36E?YkXcj_c!qJ!dTJ7M^L5QRYhZ}l&#SL#19eN?kiPXc-2dA#cP>b zy}(aU-!%#wmBc}gAx+Kq3Y(OIpZJUdIPMasCS~$Qi-^w&jH~Mt_{DtG2&g=u2)2VNeWwH+Y1j z_Ys`wgl$pvN)YvpJ)@N`%}p`RAyv^77|{&jN(Tlr5w2wTH7bfV6f+hfwfPeG+){rK zuOwCIUl4eyY_504<|;=52qjCg!bX{bp8!gJ;nKqsu&S1m{yV zXQ((~gSk@=Y{>T~X2 zh0MLmZFbWU8D^=2;Fp7jU`G0Y8FXN97xql;$z7V^k>Dmu^EJ%Bxy(NnlL*fT55!Bi zH#Zi`wrC)&b&uUj-&j0qS>c1{R0~HBiN=7}ox&dkWCj|TZyRPqIcAH*Ji)o&#t}4H z<%Gfn7B5(j8mE|Z_Yj4Y+nDq_o;xGpK}EVqVSBjI9Ieh7lWrAOS)Qi3=WwI(4r zjkPZ2;-xIP!a*G|V7WxIbIF(qup-vr%2mchRObj#drhg)%zcuXT)bjg<_~3^jYWEy zEW{jbQr8*W$8c6R9iYrS+@=~O7Rx+|W|1Ar7`u%c$KXSss8GwsAx3T~po+N6(5M+6 zr7op?%&InR%o|mA1FJb@Q^1X1b5n4(klCYegK=aoW_-d`N)Hg=xJ8KW{VZS|v$W6y z@!WT>iE(rIG$KdbW{JuAl?~unVT_D0_g+LU2LU*Fhc-f=nWps04R@v_>RLt)J6#{z zrfa{#i;g*m;6iZ@7``Rjsa6vAaKYj(lDjqlwDl~B!po=Jw~>_jg>2wg#71bweC}eZ zS}S^~rl+8P*!`wDpSgLLTUeI*6O*OXWKUv@!pmdoDkJ3@yg~CXFBN2-oNhXi8A{A# zrfqQJC1UhTkS95PQ35pE1L235fuE>QK~YMCyf8)v89$PypZOau4Sx}R#1HJH+~xDG z)z?sho~j9gi+9Duh`t@TvzP^WH;R=bBOz5OE9|T?l{?u?ZQ&O)ANf7Xa7XY~0i%gz zSyVu{AUw>NAB55_M#e8h3MOn>D;M;GJBVMHE-q@ILmVm!bu8l%cKt!>3Y4btF(8b@ zJ)zPE7Z*6(IbM2{rDp_GrNlw;%-6&~K=0`&x|lNa#Pf%Ux8hQKrWKY7a}vCgq1UsC zZ1Cb6KkTvMbGVZK038~e?JOE6O7FY6n@liA@h>r*vmO_We=|JyVZV;%7Lu>apEEz1 zS@b&p0PI?~E%A@s<|byMUo|p8*DwR*h90FZS8K!+=xHOmm(Sei<5J2-xPbEjzqzzv zb2uel;AS6^m5yePWzEXT`0gJ`dAN`vtm~|-;{e@9+0|qEZOcI#7Dep-NPlxSToWnm z3Tg0;V}ZXWySpz8w_pUR8*{6?dl}g zI)*3r6TV=a0g_bFv?!a~ZY>F+yPPhK{Y*w053yq`3OEU29go9s#_ysV=WEI}6^OnK zkVtDFr}Zc_menzAKNLtS7@jj-%k$n-Ao6&gBOQRZu7ioQ?L~7@LBIO4zS!AlLrS5W zCS{wZr5TR#EpfyOoJ(B)0M95Hh@>xEOJg897~Dx<~5|vtBM%=Oq#^aZXueXc!0wqzM}Ld zoZ?ViUya8g5OiOHCCQlZc_j+?m$#!c4<2J@uIJejUEHpqz^}!Qo`aTR6J8hj{-A4p zgU8GzW>=Wi&;Vs+kZ#!ilQFRiRWmA8! z75JD6Bl`jVrIs9&(FVbgHU7+FBVJMF8u$gadis9&oxTK&L=C&BW<)f7Lw z%keHuuvQ-VfD?CcsXHMfNNw1Hohh|<7d9jZRh=4`{%a^au42dG2bC!Rsf6S8Fv0Y} zp+1M)%8ONDamaW|`aKcesbxhBi_E5(m`Bt{5YD14TOJ6SHnfYfCANh{m~&$=Gi#Nt zwLnURV-dT-6!8UfnQ3N=sNL!uQC!B=hy^W|O2%PRJB-I~;Ep4Hp=lfWOhH%TWXj?$ zNODsxp_|(uh>3}oQ#@A$zM(47t<13k@%w`2Vax@DvkqVtiB|jNQfa`Rt$-36G#f*Hsv#RdTMQn9d-Xq8Cqp zQMFf>$^29cMvJcI{vfT#mvX4?VCth8)iZYU2|U9dxs`__)Oj*oDK7{8WrU#q=Be{P zN|k$IxMAvC^9s3j>L&?SdWN+V<(g+Qt${w0j%8+Md_d{Rt%m07YaNj1cd39}9L#ok zmu@1w&)2C`F)-x{s-NlHb=HT%txUv5gTW)hTavKtcU2axi7O>&#LghY+z8aAKhZ%0^%#nULx(jqX+&+O9FMLKN-_i-}vmr4)(lNBR5S%l#qqgjWQj94o+a=%&^$6O^ zPG06NR4$@8xF!r{haRE_7>eAxrsBe^2qE{(!P^_$SebT=3nbr}p9uN5Wsd@0?3V&0 zR3PeEULZgfM&)ibfwp2WxItW?26s6F<^dO*#0zrxg=ECf{{T=IsGcVLMK#3ae=sW( zpbxm!@yb%{nO=)ohq=A;FSyMRXSikVbu~YnSywf=#Ia@)QR~e!D(9A6{sj-zHku}) zSnUTHs7yr zacNj1)O)xM6O~MKY6R$tP5{f&`kZA6zprwfiZydDUPQnp_?0BvzOERXm2)ZiSjQ5f z7ApILA9A{tyA5*D!scAJF`Fev@Ko0@X6A=AEl#1drSUDK4b&dc=E?}u{kV@Zh-OfF zOIZEEIs1wOwt%Q>#&!o8or_h`4&^hDy1_Lh9yC{trIgN`-C*~l!sRiQt^*4L=7aO z;#o~c1MX2wsXP(NVw#uWvorP!{5Xs-K*zDe4kIUVGpxY|;*%Hr3OnOzpJ+$gL?gxd&R!qv*4ij@oVXeG0kizv00QD+;0`L)R? zTfT4UrX{88R|wdOSCq_;s`#ScTFk1E#kcxK*42_3vIrUXe z>RAX6pnteKwzZeZm?|4HxyR8{=%@x|Miqg_T0J`$~A!b|FzyZ7@d9V0xDn z3f077uOF9~#S4;gObLpWh!~Wa;LJn&fwWr2;OJ5_b8)t}5rO7JGflt|=207W01u9) z3|&ouoo^7sbClfd#~yB8Rf$J2M6xVhw;Oc~BbH`Cyt6rj&E{=0F#CrBSVe6^cv&5e z;Z&ehsOqDV4dZaq^nq0_Q1STZ#D1Z;=2fNQUHX8>5!NwQ!mFHd9ojXl`A>6Ebq1$8 zl@_-QXSt?YH^0M}+uTTf&xu!6s9V2TC`Nf+qg^ZhNme~-Z>f~+6F86V1|XO>D=`%v zv*M4LMEL542@S1}h&9aK)Hn~9QjPN&{{UAU(R4BTB&_CfF<=e1e9T})D*eq_folFa zi{{$UzrEB-wp-S^fstLC`lZ2mk8p6^K7~utD{gsWvTJ$&0FfF6TzZPiT}I@N|flXT~h_AmEPNa;X#178j^IH00}y}S{2V9wbBuAhGY0GRqC4J)wfXM~!>*1!s! zw9Miya{8i)oT;w&FtQj9<^7*~F}}%VLhmBQ-3AD{$&8jo<2cMvb7921vYM3dUxZY3 za;7EOs06T0W)XOzBQUg0_#;)cOx{o{{v}Tg`Io6*CsD=(3v;PeDWYjar@|{Ub38LC zhG|O|NV8FKD$Bd6Loh1&n|PYR@u{$XQC-0po=JD6B?`=NVsIv%&2x#SrPFftmgNk^ zyvlY!*$#b1obDq$%Qjfc)SI43gWe}fE@lH&45_bUBP zCG&BWR^W+NweDMWh=6Wh4J<+~g(*4aYoNYj9+IcTrGQ*InVei_!F;ZzzCaND1G!F! zX|VjTp+Z7(;A2;g8JZrkxS?G+yx-hBcR*S(v6%Lr<5d<^gO(!7&p}XiDz7+;T7?}; z6HtN*#0eg_73dJY;PT?4J}&d^vHircm8ZZyXUcO> z?!7p$$|X=G{B#W1@9V2{?S?1CIHhDm<6ftEe&JdfErmy5&HBI#mAOm_fx z4o)EUg=nV+{{YwkWXmY9(=V|d;JHOIp#ZDPz>FGj!A~5#y~I{oh7>SO@eF;+fD;m} zTtc@4sBaJnvv$JLoI{a`n;5d8V_262P4@v;F&DXFnu@JY2Ib07UBK=q%2d0RTz)PR z)W+b+VF8=?jab}5t+6(wIWWb<4wB=zXWXwh1WTi-{upCq#RoGDO%^(ZZH!u)T&vb4 zVk-^nf1T}&X8!;$KZY2ZgedN;rpAM$6c#bv|o1P!{i}|UDi67LZH_F0NlD#s=(kv6LC*#nCdni1mjRW&LZ;@ zP9|O2Xi%$wcW5%qm5qWhN?fv^&S48G=*tz!1DC^q4zv6)Lac`n4f%TyxbiHy{uWVe=-&7{VI`DHZyq9j zOC*!#CHr*({J~~*p@e&HP#XJ-tjeNR`GIDpEeoF_CVvKwX5fsjJ_Z?hj&wxvJ>mf2 zxZ_{BbkFddn}+4%Fjo@psF@d*VcezkOq@Ycn`aORNyK?Ll*Gd3_qboE1GZlihUKGw zxxGMpC)pdYI}@flx{nE&lbL%s@faAYMMElcv+;T&6Ua7L=ADgLDl9ILOm3qluLxGW70KHeCKTwtkzw0#cSuBKM=#e|{5 zE@l0~%zo~ASSEDlAZ&Li_NpX$|hO)xKY9Pd+##!P7t|Eg5h}G^ZXwqTtxu$ad8)hXm zMdJ*jPLi=2P?woPT8s;h5ng6Ip#W1ck>@%l*@eBtxM$p@#z^8{#r`q)bj#l{W?m<$ z+#E~S;DPymqTntn9=@fnRnB;UY2p^~Q{Gq9TaR&+En|jb1-1k#1tz6t<#8&~ULIy= z6N$`qWX``DWel>U5tD242Qvc|i_y7axTu>i@E^kK1jOb13x$GNcRXIXu{Hh52AoGd zAqkIurNg0S%hc4!ELr9ta*;%~K^Nwv(&d0~Z~Uc@)F+0af|*Mn>Xcha%>yr~^AW=P zoI@P#(7nTKKXooNvmB_b>WbHl<4?J|bu$R=Hl5UJoyL}K`DKs_Bhjgw)HWp(0L!wf zC=C&}DXOrooJ`v#xK4&38kdfuP@F?LTucqX3wJ)Sd9*b?r>rrU{o$^oXE9!;OyUaX zGKb8~lvx%zF$yyPW;yb9Os)boM-vY*0o28I%(~RE0Z196aC2O-(u;*2Ih3}YaSX8( z!LfBRYcN-gN96dIlc?j|R{Nf1u^WZEvMIf!HMx20gNWvJINaI*X1z`ks5^D$2Cq=e zxwc*bHWD`i@d6_7b?y$Z z>Q}7ID88j<`<3?2Wmyj?Rot)sz|Z$9h>-;I10k_ugvo1ggI*!-0}RIkI^sVpZHU0< z{L~k&KPloKgudAz#ab{lT;;jr6S&m6jL+RUy>>=VdktK=7)_=SKyKa#D+HA>s*ReO z@k_kl)LaF~>NPG+!tvwGq&L_@n67&t2WaJ&(Uzf~Ji>WbafzPbtPdZ*!G<^q$rKZL zVf#!8#mv%TQwk~}K9RwD?kYFAXyppJie=3Cozp^i%5id;#vIJI8VnZx>zxrS2{W(vLz<1|70 zk8H4p312HHC{J0HL};F3ZgDQMkEyutv^S9fu}9pnrIRxt0mUvMrBuhY4m z@O;ax?hZ{`Jb!U=AaMJMert%fVE4@MW`yhm%tD~8;U{+JVAKBqULp-ul6;V1b<4>w zpAx%AlRtc!IF*^qzNO-POeHd|S%A=*U%{zlSfVmeL||Qhhew&5 zlaqY?9pVEtnSZiTr?mt5oW!ZB{8i>w`-EdFL^Q2^;?or{HId{6!pl+QNc}$n3Vfkl zHy%MAVD0KtU^A7TzxfTd%=Hb_YQ`<}e^U@ioGB5GT!OzdG{qOl_ZU=oF>k42gjGk( zvz#>(eh8V%C>>5AHq=8`2E9emGg6nFOpL%aRIvwJm@t$I=40LfYEh|9Qll}Ze2rl%usg)yzzOI*O;dGjvdS~1Z#q!pE9Z$EsCaQjlpv(aT-<2CL>X( zE~PKTzGr6>!+z(WinXai3L3cn(>8Z5N?PRy&*6Th%bo7U^)eT6{$jA?gQ2*fH>jNi zU7?-FsLjn)*o6f=LL>r}k8E#BUT_9YIlbE(6o?U!2^ol`iHPH3Cv@P^2m2;j3%R#Ph8y;y0_@%x~`C zhwOC=?f^OWyuUGQt{deu{?)qkmN?m%>hwUMs`AZ6nTz~nI?Q%kSQj#?jts`Vz)hgV z?SN`1;-#Tn%TtWem@^Dwj)R^GcAm+%jR;NEl2ec>IJ9bE4Sfv5$=pe z!rnNCLvseHgE5N+W2%b0lQQCClcr<9_GlFf~AqdjloPU)X`GJ@<&q$*D(WB`9$l0Jun_IF+moXh9?nN zL&6)*pyi+-@8FX2=J9jXddxsOuQ_Oklw@?{&6va1X&*CABR=q6tHQ@bAstg0sOv{7DN+C7d zS;pW-T)mw~WU&neeIO8$u@6bM3$`J?V_CN4R`DwRN~nezqQuaSV(Q_myv&QAq|z9g z4U&(EozEz=@Jl`*)Eao|U6_T{%QZ0OYRsZPr&B1zxm_wQbX>!522=xhVmj7ihJNPJq7gi1{{RWMtDzwmI)Ixw z*L=ePVXMDn3C3tAtbcL%uGSf4!VU;>;tj&)^i&<{cx5!T4X8EdJqFdzf|iF)<1jv!YW! z5}z|QELhY}OtG^v?M$;U>WG6p66tqPM>57G=Z2+r%(IE}GP|mn;Dg*ts+l)YTEQ%K zoCM*vAYnaR&nM#!Beo~-zH9I|fQDUF7wG9s_L|f!@%N(qv;$6 z6C_`KMba>6ofs!+7%X7J+(EmaD~a%tMhm%y8|a)jkb-f3>-d;iJs7=A9)?a7VLoC0 z=3@T<(s3PsQxp#iNf%1FyFf$^5k?Qcff&vy?2ap+H85TLgek+Pna5u>0B$i(!aj)M zQJ1K%nZ-aD8o2ghj$yv%tK7svwjk61ti_4;$DsR^$(=~ls_SjD4#hw!mb8FOJ&2VO z=C%5TZw|zJ<8|KS(owfIJJhzHz3xyoQvKL7^em8czJbP}Yni%f=YRF;%CFWHIY3WcbuZv4B zZ`>|(US*qZc^USa8jYoua8L#2UpG)n?KF_VKpykUj^)&GX-dOq}i)_Z+N6|9| zoA8}d2;nl07)SGOm@>i@h-0KJs($cif@(#ykuN%pg5lE|7sPUZH5|7HK%#GCGjK#y zO9+%5Jxm~gt0lZM7hi(qTMV|(C@C)u=2mel4MN;zZla^cqeXd`Ttr@G8q}kvUP*Iy zT(Blc^8*=~JB;mKPp=9DDys*!yS0A)!XERw}P;t4x5En4Y`TPMd zGXDS#oW+RUSM?aP1-sO6<~hvY5X!!y^AK)T-f;>WGMZvgGMFWGEM@MX?5I_Mwbent zMKKPnpD}y(jA~{0g7X7REiP$>aXb|iaRDi^S%fmw+f;ai;^pJE;gnUZuoNpW%JDoO zscb^gOf=2osBC5Xs++jqKA<)(Gj|#<)?p8&DJVQ6kV36~uy&qdZM<9`M764lHaeVk zKs7Ai6Cj4kWstG?gGpg<3_w2ym=>w~k7+O%_Jycm%vwA_U;7)!FMoq2pBW{zln)mu z-YO!R)H&3lDzuI;m(ecT>Rh-XT4F0zEp<@z!QSPaiAEeoKhkr!W=yvX_?-KeV>Z?yR?!S4S!^XDDhl3Z8B)Hb*{OAnk1-T8K;{jy?i3+SlE8fVmX$Jd zs0diLb1>>967e~OuZSF~H6ym!mhOJ?`Q{mYLlLKP%)G!lgE0YXGn@>iF&hUHCJSa} zMXpt*rwmsB^35?b6$_6A62-*HRT5Dy^8{mYX57S8T}>)1Jxd#ihD5wXK{>b=1>vYo z+^RUZU9#$~0lUW#!oP`mlHw4iF*A*78{9<&&uKuQo8tqkqox)6IF+W;xcs4;F;P(S z2jLpxR_kqZ3M?KbV(>YbvrjW`J;Zp-Lg1&EsP14THr(OdQ^r!OpTPo)Wn;{;+~)TS z0PZduAhWo+`zBn$x@eYVig|(wQjS}hE~kWRxoAwgn@;x$T8{7;gZNVg*Pds~2{%4T zN{z){31qh#i-%DPfmJ!w8NOrjj|eQui9ssKc;F0h_?sfY&m^mdEkg;Ub15*y&gS8v zDZ|VQcQIohsEGvQ9Bs_atB$T}EaB8_;fqZr^$P6VxSM%|2PtuF-X)Wb)CJFRCX6wA zmz+wsFg~W*fjHc-s)1w~xupBTs+cn_imgGrCnlwsiGqF3PZFHVi-cm_N>>B|ik7-g zb}yNBjX~Q9OLq+8f>>%evxt5beqaqbiFuext67DS8u@^)q^epWL@K2hZpoInEt9E( z+cB%{fsFf!WAv6qOIug*28+zmIhc{|;LwYR-*U`CAZp9hqsHcFoBVSH!Ry-K-?8)gn>ZAPxK1#=vI zk;78jma)%?=>X?*Myfb7iC-`Rv!61Z&P_$ku2>PyqU}=OX_DD&=ZbM!mSCAC@4~9% zcq#;;Y`Z#vnN`MT2EqJXSC`^%8<~rb@t$ennoJtZFeJvIiDk?sUZKg%Yl2^77&(Rf zv7@LoB{LeA6{(fxu3+;WrKd5KF-B$OFU07aOK?OZ%2cA>CYJ*D3!Hq6XT269B7$IMQ*cMxiM zi=@0j)wyD-uAt*N;$)&$oKNpZkMaKi|Jncy0|5X600RI301!j;kJY-{pKtD}C3*b{ zKX1L?@AT5^=eF;^vS2!qe80)|{>w|Y{=L$rId@IDx8MD;`)%`Y)Q#tTufS)X{C}5g ze_p%U=l=ljxBmcX{@-u0-`^(R&duF^x83dj{{U~cc{lU@qyGS3_SStpzU^)I*WYyc zukTA_1IXpQ&;ZPygSYd5!>!p#E-VEGqd~cw#d)E@!&t7ZTI{C0KL|4Kl}dx{<)-<+ugp_ z=|BGf>%QB6<^KS52brU?f8w0ye?RsBDlRRFFJET){{XZP?Y5~^_x}Lzw32_c{(ofm zKmP#TC;nf5zP5k9{{Zd(0NTlP=TPTC#8H~FJpTaQbvls4H%Rw8>nsLv55H}^?`^jG zZ@>F*@BU46pZl}juO`2LHk<9f`~Lvs{{U>x!E&ANvedINZT|qA{)WubcG!%z4zy zEa|o&=k}Hn_LF_KoB6l*%Rm1BfBXLcS^of)E!yd(wbRYF^Hu)!tqyeSNlhcCt(M^ZmcuwDWCm{mt$E{{VKio6k4VsKw(Q zc>8}OzU-o^HDzAbu3~f!?^Wl-_LN)g43gjgi9q^t{s98JFWn7K`^n9>lYhVd z?eBbDD&Gomx?48$YyOIqp;M-tll0O4I@!wf=JtcH~a0@Q8mx=P^RBtg}#OE zfs-_!eRtpL;-9(xI6HL*mg@y^GYvhzY~Phx(uXH_QQ3sfpfY~{0PnW@{r>N&Z%lCLqzr*Qn((e2m%wK5BPru4+KQ{jWf4aZz zxC?tc?7QS^OcQEJ+94*INq^ST&%gfwf6Y^Pfd(UjZO1`q>d%=HBLO)ZS{TBGR+@58 zzqak?(rve2%W46n=hy4(7=(a1zq-$U(KPNF%S~gCw*Zd>J)64JI<5dx%E@VZPMVa* z4Rkzn{{Yg4Z?d25`8s^_;?1?b-MrP1lJymWJvSZqrT*0rU;9?$ZtxjSFWrW6L=x5s z9Olrh{Mi>28`gG)J-$W|en*-KZ|(WMmhC)gCii6`)=5F7={IB~0KK@FQaMwgFx&a? zQvRqk#=*{)LAqq~`PDadRb^@1>a(V2Sg)f=rnXI3FRt<+B${y9ET%}uxUUA*fU+hq zK0D(eXg+r6G_;jg7b$J8>?-yKO!k)JGn)I`+QmD{A2xbMO?%3dDZbsFSkM`Xv3pIN z3lME}qQt++b;x2k4Vl58e|BH|;oDr@pg;-dzrKFt#OM20giDYF0^TH)-%0OeufcMo zgn%%7XfHHq&Nnvtp&~$l8wcSJ#rNCrFXY|CfB07-DYS36ki*yH@iq!?<^AK0{;nM}Kt+BGAo7K2TV$D8>^lP0bA z1xc#V(fK0A@wO2l45gSpIDjV7ZKQxq$B0{!iS=4Bi1p!W4cFXA-}tf!c@BbWNPngX zB10C+XP{`IA07I~{u=mUVGCs#=at6ZI-#~NjpYAjb)I+n49>zw+RBHu7mV(pI@(TY@Tp&5NT%R?qpigUkj-R>Ru)QU*srP2`$Qc<6lzz}@B0mbwk-sbX|XSo zzKkqC>R&DT?keY0RL`H9E8PD8!iyfuO4CT_cZWy>TaQsRh07t%f6}Cjd6)dsJ>fh}_C)0V!a@?*cd}r%kQsDM}`d>!eZ=0F* zKo|1GI^j)Tvrrd;2BiM(FB zW@tq<^PJ$X>$SHgT=QG5TLCm5{yVFUcans0qLhOB=}#8R=&%8IeM)e@QMXkV%v*A! z&_11l@2SaF+-a`S<%IKVb(Kp(cUvqfKUuyyC^i$M8kQ@6(5RCO2BbI)APxVWqt9hi zT{KZ;YFfCSS3E+r;c}6|1B>9fg3d0Z1BB_$zwxv(T8{Amrw4z%x?X*d?u%!XM>tZI z!Vpda@82<_l|FgsD?AT!nyAI|pUM5Qt?r(+-(ilQ-jd4|zEU2B;i}mpSUg_wJy)A3 zeEArHOmb#rcyH2Xv*6|S2axve8Im$<2-M}tfgMWTu3kQ`vD@j}%I+*R135hJH-2!? z<*>}yIdpv=8fQyQ{h|^hUL3SRCgIaI(zl_=kAtt}LSxiOG=pYUH2BPpxU0|DW8?Do z&Xz5$WaO#We<8Wq79$H2JB@5AMP6;ixh9frW)BYi8+dPWoqdDCF9IzU*<(UyCwD$S zP1o3ryE|pX&-`@9W51{M#*WIpp-vu;)XJILQng)F(9)L94`s`ZaDsnORz0qajFai% z{4lVR8#3S6&R=7h<2p+RO`bAMH?FA6oVRlQ|o`F-7xYz*XJeP!%m$}^xB%GW=1OCLwgH_Z~ylC8DvfZI2h9%tPxw zaTXnH-FtWkSid+)WFbl9{*rm2i9;K!eb2bcLtIZ(f9g4SU+3@N9n-p|qrY-@H$G;= z8;hCCO-2(r-$T_m(e-fRBQe`i-}gKk2RN-i0A6>7NjH#9RwzP9(U0bVt$t}QVczb7Opw$62V`Q&dAojV{qa-_M%be)HJ+8g7 zU$PeVayvHdPu_na#Hp883CSw)phAs($F0wa$GEaTfH{fPAS8xB;Wd3=X^6>}tzG(h z$!U6m=zPQW3g$2SBRzah3nD&^c&dM~9IdwdVg?#1OUWRREX6Tcs3z3o&J4?Ge3R3= zD_^;vCu`y|a{Nlpa9HHlwP>l0+z5M^t6?Z|oe9OgS@A@>IiZ8MIShExP4hR&r{XED-01X$ zTcoQx@N)!StDag%_&U3F-+b*ZyULOIqgmG8&v&>!;T`($(rNxk0zol!D_YcJWmn^u z;odkFh_bx=K1-gFru>UWV0^d*=}IR401$FuS;Ny(V$NsRx9+P5o3C{>H26B2sOu9n z*r>)+%R$(nd8_UJ3%mV@ACQf?trHwoVc*0=ShkX{!}G##5)+a4q6C+FY9C$%HDfgF zcKGOENR{pKTzJ@&X`A!n~1it{d2%{V-(LB%S?Hc3vR|Y-^2QH@$;p;Gp`DcLJ#<_@psBAZx5Kq{&Qhf z>xi*bNILPszv#uBP;8o~AwT}Ohih34PAytU-kr}n&j#LKe-WLNLv#||KH|vV?^>b| zxOct&5i$Z;^<~Qb(Co>0Ep)Xfz+2XamcllZS};_&jXo%tojXNRem1usb^LxP{}W>7 zNyIU1(Nuk6`RfhMbrpjy$^Q-+e(Gv9KYDHj_3tHAV$3P%Yc1%=mL>A+wEKTP^w<6> z9d&uCVo1p%U%MVED?Max^YSgsCBh(dYguIv&Ow{wYHGxF>574L&Fsd$pHK~l5ZWv5 za?o3Gaa++uK87&N8JSyIFt)R(`nJjaoR@e<+aA{N2k_I6*`5K}O@fl^H&xLGo6TCE z%OHLk_1i2=H&7Dk$rsNVZUn~-J{85ezqkFHYI?k75!rnA%`*ETMBo1i?TSF$mWNu+ z_Xhl$ewIeMJY^g^vde(C9b1>Qt9pd#E`G zzer~@U*9XfjW~8dujW+uv?a$rxfS((y{PlIEwsX}Y#gH-|IjKXI3^~-oeQj-^eBT8 z`SrmVgi!T<8C-RO3G23OA8DDBG)l^?kPk3b-eoRh{JGr0pswFqz!Q1jc6f9DwL?U5 zpy+4zUykK@2MFTi64bg!%;9{fGTHZ|$;RW~Z{wat$wk>q&^(TGDcdk#q$~V6wf=1G zuJZad9g*H3%9hrY6lrn32(p4aBt}awx|)Dz4%SU0VRnNnj-5a09E95U^?&h?i>Y`9 ziYgtRaBC%MKdVk}VZ|4D)a8BiC;C&_6F>Z%WCekb>K!Lo6~Seg!ajeQZIjs*{KG4; zSC#VpuxiK@R)LSQ_R=sAk~F(}j(OK;}cb+3K1{ckPAlXBk$Xb;ys$-}^BA zpP@H{Qj5sx@TE$@2hUJZ)W-UqVW@5zG@tuYz9^bnWiR-J|6N=4MUE6`r38wH3xnPU1Ih+$QdeHr*cTQe=W?QOlMFzDRn zlOLu2LaKE%rKIo|)6Z|v*PQ+nT;Ks~OyW8}PNT9*pDSkQ_^(?Gt^X*x_R7OPV$l(P z>fen41L9xC!|mMVoZa(rw7J#6X7NuRN(@j}!alc7-5_hn^^|P}g=<*}%I81M!_clE zpC1gx4C;#M(Wvm6!z)P6tydtzGg<7fGb@vI{oS}p&y;7;AL!q^en0I|%<3Jfd`Ty` z|BcPf4~=my^mh_X>@==K-#-r}ZgF38?=HD*EAObhke%-PH1XP}!d`x}-`eOsfYH0R z1)SH#`Ek}Uw2KZu&Sy-Dd{nP5eHy;jp&}UG5Ah|8>+4Yti1+;U{h@CTTBch<;fU`y zs&0+gYh)=QG=0S463KPnN%ExoJ66f{ObH zQ4+m{@%PO2cgTE1dz(zCv!^%a@&6T#Y`!*{W3=X#P-xOsC_=mI{qGWrIrIqFmO~=_ z!>x`v0RJ+6c44A(1l_|}Dh425a+$JaTt(lj>&{@=xqoN$p;Wev=3`&)y~EJJ56PdK zZjt@>K&=f0?U( zEL3=VTu73xFTYR#+u1VKLCO1&Gtk}e`H0RAWqI4Qz{P=i1V}QEdVQBdsPqSl$4Lb( zDa9pY-J%IsogRfJdc|b)th)b>NcEsXnxklw%K&hNq&A&IBAaC?m^4_-0M+ZGS*{L4G@_UK}d~EZ&p!v_{ z8nOxfm5OrYF6&N1+J1T^Bo5H+&s_f)i464O2ER8-L!1yC?-)zY|+X-l%MGE{aR`z@_GFrt8xrnDVI) z%IJ2F?zy&n3_1@j`jpUy28E8rrQL5m_3XaM^x?*ilXKI8Ym+rxf7QaE6c*|nd-6pm z&Aimy}@UiNqVPwz*woa74oWTwB=--l=F(9CNmf zOg>_MH);1qt`E|qbT}9F&vPz~qDd9;5<($y0am8YgEwHW6y z{kV3dNe;%IM&zO9&fDRKV_G!1c=pz%i^uKf<5KUwJR=`8BYclw2Z(7-=i5>+uOzfN zSZ(n~O{sM^`}c6TD@zv#YkUX%-2Ms8E#D#n-qv$By7Y6t>w#e1=E@&Hr~Bd6mWaNG z>Y^8it;yNDf=_&l2Yma7qH!%_-H&ehry#ubA3AG0UYYlG%6^xjfge{9CSRvq9>DT^ z8*U>KQY98*#9+)|DIr&kPgxWINkKSyy;RRg;X}-2?-~MSqY`bra}UbhPXjNs#-W00zc4fX-#aYoI%<%w8LQn6u@v(_gMheCCpM4#bAYe=zcB5gQm(CbJ zRE+A3b>zu+Q(xMhX}c_aN9ZRn_@6<*o$E9-G}Ok;|6erpbksLAfa@HhiXwWC6`TX( zb#p#8_DvnFJvyc~d6;OZpMyEf@n#VR`(s(zj^(Fl_3p)d<*I#06{wV6AV1Hvh@Q5J>WWgJrgc_Fn zFk#?2VUnHFh&hhevG#QQX#uKuttqOrY@JOv<2k%ubZpJ_b*;&{mpWWzs^Wk0es%bX z|Mzpv%hT@W;jGQ*M0tU*-It&qD9bjT^yGUl27ytm z;9QchX|Nf78shp=pd%PRz5dXvgTIoA^3vEbUaqq5f?d(vTkT_#n{ z5_(&R`@1v0MZuAlAuDs7DAPVJ%zQx?%^cm8byfAxu0~DDGFdl1DaM4s#}C0c!R1k{ zI=&@A(g|4Z2*03nhAqHOPX#A>>@~YYN9Tu!po}{kPYx>1Y~kLCyF(k^n@U7*5{>Ld z@*+&Md7d7mi@ZS{wX@(7pL`p^CS?*9hXO*!>s(SX&#c-Uo!#as=@MDp zkF_@Of@Rd%u`3#9;H2`B_2t`@fiYS!U zjXmqmNU0zvlTf#3*2IN=ZWr_5XEKYOMmcbLRvfchC9(8tI=A7gMQ(XATWR0cwHoA| zseXat)z2x}!a-|uRh3ZAQYD@KGN3R3nA>K0koLqS+h_HHJ&0c_K>ZYSx$Ov0Ue#ls zl3Yl)PxNg}m-_?wPrxV;we=IuqE5SN*|96D^x}Bun?9CZPOc7ulE-$g;No9Qozq4P z{uqexDQ^NY{F_-Z0SX|=LHRUSm56I9iR?m0q&4NsW+X8SsvW+zA89+Zo!8Cgu>!Kv zg;Fh2fM{qq%WU|&j+%ncf;Dcy}iAK48Z8P zt|r;k?aPoXpV-N*9)9K}DtQ_vRH#|D0K78(XWE*TI-^1sq>6yUKyB9Bd;tTH!wymwLn}zzd{Dh&ryt478nYCB13a`ql!{aBU>OTp< z{gyOM;PsgvVV}`a6L$8Xhuu+W4;Ut$|JLnP=QvsgZ3`i8259uzvad*aeB>Sey4E9E z(tk(YzG{Ih0_+r_L`q{pK9xV0LDfIO#d2g58!Uj>KY;r>W5qg0eN}y`W{EyjKPK_> zBi1r?9fyx?q1j_|DUKqegjbDOH-sOZ1Rx!IoiS@5%DcoxhSq=HYu5GmhN2z&+I-6DHj?ktjx_h+g8h|+j5sN3P zKF-;`>BB)rHNLQK6TB=@!pPgz&o-|-GlJ4=59nC;^SQ9$2bIo;(}ZmF$)lP%mb>1Q z{_d0QSjkX4Ca@O?xTveEt<9C`v?}*#Y8DrF#$+NzrT4(E9Eelh! z-;+_j8~ z_;E8s20MBQ`@(#5)tK9jp`ktTd6z!4mcGD6)_RZJ@`D!PcCO4(rC@TY^UT0z(UCb! z2Us><6gg~xE7ARVp&ezU)!Fyg3`GKvC)nc*{5b3PdvepQ%-F+>LA<9{-q?sqXo10) z+|t;)x+i$?T!V;NrD67?vcsS2>goqleD}yHZ!O}9`G;d-&hj!eu5JwaA@*p0K zBiX2371*#;>x6+X;$yz2RO_bP9|=#OUt?(7epKa}*dD}|KiHZT0m{A?m-fM^W}5ASN8=Hmp{f44!$+CD zK5)IW$0D^BTm9fIig;CvgZ>lEOwPl`;DbRAvr4}W=YRPC0*7Oa%rAg{07Z}FR5^kv zb1nQEw`B{FKaIzyr~(Pbv==K52;k{|=l!mc!##SaTalrBi$F?^@QWSqcT6N#Reqx{;yb~* z)gMiX#sC?-U*cD~p0|-|sPUXX0EJ$yFEP$Uf44I7tP-HqD3G-A2M~@B&JEi=2kZd* zmTPLlk(HA*xBW@9S}S*d3eQgs-LN_$jRtRRTwv7Cyb`>pQSiSKR{jC zb(rdElf<`#b@;l~iFMRl12zTpE8C-fu1RxuMUzbsm&{&ypVWV;?9_k_MW~{$3FAsoSq=^Yooxxv2KEULYAy1BHLz*&0J^wM8mBBpFsTOpk7ghr^bJ5*l(KwXr993=fj z912T>L%FhjS8im#6Hw-Jvn$^)XaR2g|GiR_DXWx9(aV)$53wxuDJOe5=?qw zxPMezR9}pf3mA{4^mplPH;@yYm>0=eaCTtfe<(IBDpx<{^HH zFI##xwckex`~E)A_V16vT?W-*c0ExUvHMHPBZ8!JnlSLEJFwu{gF+d<-F?C`l|kha zCb(lwgi#UW89LcYpJXp z%ByUN%)T4>?Y@s$2KYL{LRk%-@9m}A{}9Iac^l*I0~h%5mJY??C4ol~m-g^p?5xgM)>TkFOJ00VItD zh9^SM@P~brvdhjfq0Q=w_XB6iFv~7`x;+jENTC$&-G2a19J_9E2uzNhCi0?ie~Qv2D{*k1r-B4tb{0gbT|J8D--n+w^doU5 zkEtE~Fg5BXhik6f^sluQ3Ad$aL>mXL9M_k-0}*bWmQVbl$`ioiw+^+-svkgAU-c77 zS#x9ckIoBSRC~eUNnq^7!+4O-_ydvi~)%wNC=8ZW!; zmXpWGe?2STD2A$(fagtUJqR9;8Sd1Q3f^5&53}FO`-vOS`}g% z%nf1qF_G)YTfAq*?-d=HlSH5Dpz1P4|HBnRwFW(oiT00`1|I9tkd zvU4fg-EAs>_^h+j|+G=%;nT`f-5meu<8mwY?-~p1qZ0VK za6Hc!cIh_mc7b=y9GtyanG4kDCJlSr36oH-^argQd+28TJt5Y_wmax5-eL3%-uQw2 znkzvP&*yTMbYSRtaFDZqLi&LZdx4^%a$uU12ULd+{=I#$D_1M(4akzYI}^)RQvttcyoVk>eoT93Jvbo2%1Y zsbzGkjNjmGKezAh4XhQ-(1tayLspHxSSF=bAG7!Vh!1~(M}M+UiP{X?T-62jHJKBG zcafh0LTsVYb_8q$KUV^8Vc7EC0t!uchs#5$*Sm~=Kn$Pw2k^;l`!?K>UZ2U|ElZj> zOu@EflPSZ4#=~2^uccENpI-S0W|fn`q?~)DkAPRXVfl$AybPSorrZ+N>*Gmd8g47 z{QUY}aPjZ#Aw9f`Cg}BK`$sJPkqmEu)_K$i((7={NYpTv8krAmog9q(G|MR4M$~d3 zvmE@)`#-~}5;C&$>923eedjcU!Ll)4t`XrHT9tf!zb*&jK+;O9;leNSC24H%-rIeN znAVz7Go(KC0{??jvGY|8=q=mbpot)4e+2Ab26{~E{tuGsc#TMF5Ro9Mwri4noDSI>&4fl`APC|_< z`aF;;f3VZrcF{bYCOX4DG~%x7*(R7%9?+#Y>H zIVNvy@g75+a}^Uv>1dbPNvHPS=O(^3n&nFk$MtV%*VU*6mgZTpmWWUfg`;rvZ0z|} z<(SO7Z{3cRsLubQOe35QrQ%FikM;ytoE7IPSz)dtgt(n#Lko6FJM{oq2J@#+LQML$ zh3$m;!F44Nox0RG+QHkEf$Iq9)UjwD(1->Eb8C_>JGR@zAF=9A2vl2^n|j6_#}&<@gm}+rsr>3448b zg+Bl(AJX+#*d*7IuOFp~+khUWgAF-E^uKJvlJT1bo&8K^hcJ#_h+)Z|6S1*z)4v=Q z7iN)vw!j*lmb?xB2}fxO`V~c7E7TgpzfTf|A(uo`{t1;{fs8J|Pl4FsuHg14w10qj z6PB-NvW_0LrIV!gC#?P1S>}iQVj7k`FDtdB>;v@GtHT1J8z{{Zw0-Nrs$TU=0H7u*a_vf{#6FiJ8ER5pIq z+tKq2($p&bxN_sholVA@Uvq7&W7y?RXWDt%Mz6S-@f0lgYjB-a7al zPxaLY(uXN&T=HE@;vaCsoxne#2&+9cqrjvu&lvY*~@)@Jp&7y>~3{ zJ!%EP)K^ARjK#Zm01wbLZaGUH_os+!E&v-_whsBN9-O=D&Fmye9QD@E=&S#4{N#l^ zgZ74KVr|I#I&a41Y=;k;0e)BYRJz`MGJD5uD_nj`Zu|X=wK&RjE^bO-Vmuj*cVZSUZZfQ9bbm|sC{~#t98v^w<$VJr--Wt_akeb z_uUz?a{k;^2eo{dVqp+19$C7gUB@)=uh)xL(@|V_=ai0cTHLNm`t|3Jgj1XL{nA-K z5ltbil!O<%L!352;(5gv#S$LRko_iQH&%4Bw+Cz=9g5y=FtaAakA%lZDiHF*I;CV^ zJrP(7Y#HS9Q&43Jbqf2jll|=WF0EyoQMN~S@<8*~P1?Y8`d$1jp@uE8!}eLYQi5v z2zHp)0hK17Emkn_wZNO2`Xkn`}ei^ zeo+^=$cP#f9#PVCPH8Ea4x*CdDpeaYD6_~^!M@BTL>s&^1-CwSq~#|j7nn} zBvNEFeLJFn&_4he98i?@jE-cCoBs(hWG?)U9szb}Yhu>J&%MtaXMDqsJ9z)iO_|on8CES#6tsywO zbW}w3IS0v-y)Gi1X`yG6^*5ApY-GsXpHwbqre^ewxsUUun-@O(S;crbGG)30$jSCn98bLAH5UW_n zbv_2Yri=oggwT){GO~%XOO$n77Yvsa&0J}R1e~1uyE;t0f%d_bg+~(c1h$$6L9ngUtvzMIj~kcxSX3~-21%o9Yn<(2ii2LQX~Z#U^G zwp?-fJBme*7Uu4pM~|k!9|*t^1_NN1*I|YyU^_tAf&{Up>-Er&6U|Q9Y*-~HI5;-< zM}15@r>e9$HSKq<$=`ahzuQ~~i}JswS9)s#b1X@vfU6Bwc=00fxy2KIQT4oBmJA{i z#26^Wb2+n3-Hrkao($nqNKW-B&FrD(MA)_*`u{m6H zEZBO|N zvyZbWJL9^ySAsEa3>3e-tzqi8+W){ImD?7h<-Jj4)Qf{8DH4=Imrf_NEkb&2?^4DX z{{l6I>MZ8<@eyHI&49X*+J79KX$WCDX)RIF{XXZ41Sh)Ze&a>qO^Zstsc2&BuqCQ$ zM!WUB@IaUN79pWOq7m$Wy$1B|`Bl!M%C9^?Gv6M@o_Ry0D+!Mu#^z2gm(|p_xh5~Y z9~l}{ya){qg>djG5iit&-PLrexS-i0ez7PM!K(yPI>(d5%Hcl%n)EZvv*MaBIk?#f z#D~uEY6f%s0tLe{n&><8)!>kN)Fb}m;TPRjN(4ZN>BFbrN<7oK1EhBO zhIl$f(KmO+{rw*w3bKE0FT{_yR^=58$m-jdJB{tRFbyviF)L=k{w_H7EphRfkPE{s zO=h8W(5LOJjT8KI`Led@U#?p zda0#;(9bF$XzYnm|k6FDuvYdDt(_-mOFXeUpX$84cD>P-NiCVr7(s_FCIEIKA zz2N!K^WLfk*zxX!Yx8l^G%&ZvC9j++lUNnxM~HCGV~_ucs00o3}6#n zoPNRt)(AP1sQ{x#IJ&^I-Qt0T-Th=&1%i~lM;oqxC^S;eqL$Auoc~0i33pG;m*fhR z$%BdT%U5G z%gUP1Vk&O1yZIe+ctpXi=**p%(owLBwr4sCvr7f;jx%?O$d;<5lqDcKoYX*4Kk0p= z_kFW5XC7FbTqGCJ!9HBb93nPsLAeYQ5>6jlMvoHwnW4UiHT24!WOT+5r+s1*_u%mu z_;#q>yVyfb03Lfte^99bFJ(mb^YiA5TaHj@8rKqd$6lC~#clNrbQd5bQ!`sm_IjK{ zT&Is%B3`wB`$<2^0gjPPV{J)h&lLR`J6R=QXtu_sb`>MFu=M&E^aZ>ywT&I|e11-Z zW>Z%3RL4k`!r%qQ=jYp0t?CcV1^9q|H^kWLGX(J#f>xWtx+=6qNwfbpyUrM<{JFVW z#n{76lt|8c9qMt&awcP!g2$8#r<%3q$BHqX(Ee3V*c2MZ8z3>~szEnLkl{gXjmo5K z@!H*)1)ishzi?3|iH%9g9ItuA8N(gr`{+`s)=hyvg^W@{SG@Km4wv+?ddb2ZXst%k z0ha!)#E8Q((TPWp*Ecp<>eIv8CWLBDxu$oXt+=wLS*g96&^Bn4QrNY6%v@zh_fU!Iozul z>v}c^zOB}=eJLoATVh$MxC3n4lLIe*xVjc7*)zCcHHjO%^?hT1wcVkXU0B0BVaF|! z5uqW(V>Jp=?tZ29I_slX2w6n#NA^qI+n|*2BH&grlgAgPUg)-fus%WFU;V^>Gia_p z@mZabhd8jH>uBO4CRu5?DdsYZrh%BhVeW)V?bf7aX>8O>UgpwKI_%XJp8knr^r7$c z*_5VhZ*qUh7?UNTgSJL#gKS8NO&BtumSKa!Z3Vot{aVMOp$^^=mqJfQe!9Bg`{*|8(I30|9I5}+Bnr$88|OqTp7bE zqjUBqjaHE=DNk$bu@7l-+LzK&Ut?JfV60t06x@HYC?}YaTuu+tg~Tn;JB3xoiQL(u=C{Qjm@#`#yug&9PHCCgM-t&aWXz`6 zcUiCNYf2JATGyTBJ}E=$MYyndji-hLM&cD1b(g|5R_~H*@r61PC49^it*N=kePv1C zFX98_9wMWnY4Vrz#rAlU>-DH$ukBk%o+aVVVB;k;jfKU^HE>qCUTmjFx<>zCH(Stg zeR8t`o?>`n?INS45H%-O54}kASai>2_NrKvwp!GxjxG*dLc&m= z$w->;ex9^P7M&(cTxYAwez|Kc#e5Fn2LI_9-gvXIkeQTAl~0tKR5aJTcwu@`@K7ZL z1_TBo$l`EAN@rdu<7QSvm_Pp-64sy41c&6ohcl4P*%xg|pkvN)`a_O2pNf$z zPJL4fj@()AmI@53)NxiJygGpsU}zOsXF-48;Ctn)r8vNZnvV_KNMr^lt4EX z>ijx;G=yYp%?~fc3$&&<=jV)u=SFRR>46;yqNq)arP7{$&bzOQob{Fpwr?yrkc~AJ zT0(n(S&X8s;|@t_R%MN<_KG`PFGF%&c;HS_kcjS36_d2F3pQKE#eDQoP4`O_ky}_UwEfvIoO+no%?*cNr zPqK|lXv~1!k4?EW74M7;d z)~SnCM(>GP#5hdy!(M%EV_Y2i-S>1UVVm_tDQW!2LPV=F%cq_j*LG53>57FeCc6d; zuXNFpBbrsQ0i@ndtzO89hGz*%t>u^ZSetl7VSmz19fHq;xMivPtaAj|3Zr<(`~uV3 z4aIn--jR=tb5UF4M0g5=XAx{`8|eEg1X&|-?`dtX40>9DDAY{Dd(qw#M{4+*O?Vz}Wq1S$k&5|3V{edWo#ywE z5UyNF%qHjmGFcSL(y3ef+e7J>j?D=pN@3c5Rk%xt5fA;U06UpXE94`DJao%;QJ)@f zfW>cEL47s8NiB$mrgSMUz~Rz}+H}zl?RXWX`D`}dZj}h(6$bQ>`n+4#;Q=br&k9b)20}Bw|xYVGnsZ(&&<*gOel4p7Ul^OD$-Bck7Ni-59oIxDO1=Nk&gNX4_7He@Ui$Irs#msWE8u_xVPkciSBuPddO$swQ*w72tJTJjn}!*z1PIJ;Gw#M z`Tg|#j^m6sv5VBavp{UcACo^OXboLkbljWW9RWg0g|@51&RV!_)4Tj(Vg|s$|Eln| zvbos%$Id<&6pcjnjD)&dX@u--p;rJa^S!-ZMb9=9L2Dl&>`{pcSpNvH)`w;plqi0dP}50YFva$fp{g&X0pV~zA_cGl2C1chC8Ms4?M`YpyBtR z_Q7C`_-9umUgd@8J)smcGob^UJnKD6wBU-R=*W(kpizZn(vZ*l(odR@g)C1-Jm~`b zN#dHlILU1@^BN_yyh9q%lfhd$391_8YsrtCL6xNGXuINOgTK?hSQ!}baX>JOi<|Q|;^VmnHNpfDJY@OTPur+}jrAhC?_C~83$!p;`TWP$C zLRPHmgT_SNz!E1dwLDCSpS662R<+n*w2r;fy*sh_Ue#xpic@|U$-0@D*U6Ktno>5) z&w!sSW&g5d9Glx@#p$2Zf`%2&n?(j9#X@`UHABkcQYE~^*o!>vea&b?x!1x*KEG4= z75wXg#cv4uW7YC@u$l?H@-PS9q_?v7SmYR#*q+B}Cfw8s;mlDSH8_+kOIHa`!YHSI z7lh@%6el)X6fx}P-klwu(FC>_f`8LSe0yFRV^XGuDZrawggmL#3DA&U`hNx+2pTcZ zh|aloYeYg$8Ix-@x-czTK=npDD*dvlvo=BJg!A|mF%q9P!wWZq{*%u*lRp}~CR>o@ z3$|w~y>k&^70mZfXjbdep^NC!EK!sWtpbzSi?%=rm6*y|=Xi-UUuw2qB|~gt>&w5= zsm4~p3lw(wWtCxDKhYB7^vEUcY4Fp(UiL>DmpnLIqrU;bVeX$W3UuX$_@GfR*RvU) zO{-AUo+`;F#J`dI^->qV)O?c{nwJW1t;3}GRzNBB%Xz?Ojca@kK21Wd)2vHju@B=p*I-VSTibu|gfA-1|DFri96p#Boui7XuR&V- z2QhGfl{DcQDbA~)-jWBvXIk2(X?xbl1?b9b98le%9y?}FH<8Av5L#yQut|8*-K+}N zYo3S_T{y@g_$+&p(wrN=ZmTQoNIdI|a|X4qUrU)SbYCXQFY@5DPV90teOc<4Qhx31 zT`z)$bW2UR)$_dPL3>nLewo#7v((pjLoqnNYQ8f~WUKz*a z1|%`UZfh#<_ecp?bmU@`sANXe+rhT3GGdrUIa*vdBh#mD25B6>=~U7=Y%dd^p|P44 zlaFDk845L|whF}R_kD%x)IRdk0!B`LJewrX{&(PYuqXmD$pr@;af#L5@LW)GLNh+2 zmK@Y&{E>3&jEw|Ycf}XXF9!0f^Ndyi3+Fr?Zs$BkOY!)&9)%pz8$#TaC;7X)Y1mB# zgxB6tCw-^o=`X_{dF13_*1rD%8$sm0;K+gztK1Uob$df#<~FTP54=nVY{o`b3`y6K zFqg>3%LY+we#S%_!sVnp{B4gJ-zgF20vOCYc<04NEiK+Oqy@+aq*407nCUD$&K*dx zho>f?wlxo_G#5p9Zb5yp(%ljOF23P^boV_szF1R{dB8o9jZf(TpT1NJ zMX|X6KvE72eHllyV5H3IRb~pr6Tgny%%P+BH54#}t+OTI+c;t=d{{Xz* zTcz3ne%QS`{p!Klu)#bd{X)f;Rt?B@K!NSkELYqtb|e}7NWDOYHiA#=P;!_V<%>F; zPLglb7RvYgyn*EYF*+5H3?shc0jm^F&^W)U+n}b8(+^?qY`J%L?{egR*vA3C^rmOP z9G(d?<_9II9l-$Z%N4(|n8*j*xj3V%KFO4IfzvXrr&2s2jNB1y0e_xXQEL2X6CVReKi*6t43+;X|90NHI@Pu(9 z*kD)=L`(2!*>`4bxth>NwZlgbUVU^U; zS&{@&MW_0K2Sm39lTSb#59cfZWCU49NZ4_1u9$asDy-bW$cKBrA-)GPBIuVgw& zSk<}?;F=!uXdtAGp7K)Omasnq6rEb2E;?$VgvUNgeeOCh7mICi z;#I6yU>)`m)W|nr4=-nge&_85$jI@c7jvmH{_gn5oAW(e{Dk_EP9XGbm;B8digW0?*~%VtU2);um&*UJARl1bitAKlVtjnB$RGgb%F8( z3{c^^lkdD|*%gnI4xz!GatY`ccyNI66`t=b@ZFx*`Q+AAHcRd5I1>+$BNlE%tjW)* z@rmZoPo@6=s4)~Ge^&Pge^zHw2HA%`)}z~V(@* z{IbQX8K-6{%5@ttkbW{CCs9v(vK`if?(Sx`B_|B*iPvTbH`}BAn7k4-dnjZdxkJ`F zi)ML)!sqe%d&noUl<$A6WfG9 z44uxW>A}Pgu7BcsapPV~4)_u3@$H$@$V1p$PBJk2yu@>asXM04@r9?SMfL@u0JeH_ zshh|f0334rq64M|$!a|bE<+{u!1J^&o_J#;ul6+9L8$IN0-oC1+p+vzu0fVvo!XUPPT`*<`;$zy?ilCHJcD4)18fc8o4H{h3F)7xld1O2hzT6>62ol! z;L{so&tL05bV^~|+k1Z?hpwb(Os>!t2UJVrW)?HZ({-|A(TqLP=<;orlGZfr=phOt zreB_?V)eW;r@sey~sh+`;=L@78CdUBSFq14{-R~IPL?YH)hi@0+ zFy7{H%3#d47~#9u0LyPs^=sLZ-Ij*k2<-@UZvtiSw(1rqekD%%kE6hBo6~5ANXL4z zS8bO<`w6n-BrKEH91JV)< zOg*3QkWBlJRy`1t`!dpUT}y}AM)urBbJ9HaLA@eI1KiNsDL%4x^F2(m{+sOKkn)?mquywZE z4VGRq`x5>LGTOhSuS5EjdjK}({jqZv4Sbs97unWucOKX&>wSU4%gyss(m?P%Ew%i$ zyOrLq{{Ufkw$t`O_Qi&Jw1;w+)wJ$yAUj^^{;W_$q={LUn6dqxt>5y_Ed{R2`-~XG zfT^M7wUU6c18p+$f4;OkGDo*^&m6BJ(n*8Ysh&OG?k!X6i$iUTH*Gny+9@*!z-0S(5E$e05#G5!us=Oa$ZI>zj-;S+wKPp8;S{oPV`lfxpv zspqu6s#JS_SJGKJlW%XX;5O?b!(QhXNj6F9?S61pGwr#yg_z?8xd(Cp(pW}%wfQaU zF6~N(c)jBu?LS*KV|_EIK@R;lyFhb0+1vG#6Qy_S2JO+h(DgF!O9_LnuhqOyS;HL` zr!-P{mGUw4Ea>iX%q%SINx_%h4-i;gr7Wu`VEuahzNR6b>5q}LiQ5Gb>i1wjE$)5Y zR$S&mEGwu!38oSs2hZTozk+8uVG3_}KLZcy!VHLuT%)m%VngIZAwIJP zzyesg1HzVU868Ui*xpbS{X(N6dmc%$5PCPJ3&BQc7~3j!_V&Y%Qef$~7g=pIwRTC4 zTb;mgf$kO`^?I^GMibbv)^+V4jssjJ9>E38ScJ8pw0>eDAHP>FQ6brbf83Y@-QA%^5rO z3-0i>h29cfA`zhl>RIed?2D<_Ny)Y(ybu-{eOa!7$w~V@@T1haLkV8N9@`lR&Ic#- zmwV$MvYG7aF&byMZ&2>(xpsT7dtie%f^?qYHU>Yd85G^iVyE`|XNcQN&|hG%y}J0t z%YXEU_n)ZpK;26SuSQBAtFZ19z!_*it{Fz(g*FB{nPGoaV0&goh;VfmZJCE2tSuj6 z=cQMO58dVvoX((jlj9rNiR`&Ad>uo#sAC|0;2PFv_e$^A z)$Hgqa%t2>)6!^G%bvGlLDCv;1wAB3vQyV|MX4Jsvc#Qd9DR~xyF1wgZce6Bf^`N! zdY1bx-tQ=x#IP~Ou{1JTao0@PQto&*S~JX@CASm1j9Bcx@1|;L zF4A@`sP{l>U`1pR}AqlZJO{TS`#r-Xy)G~=wly`b=ab_)0M18gTxRuXZI zkHBPy!1B`Ry0GIpY;0taJe2P~Lk`Eh`Q%m~Wf!sn2a+s(gwYQBi%1MxCLPMK+52Gb z-Llhx;O(>8@BTz~Q$3-K$rO8%`_=ILvW#?o%-ojMw^I7<><`<{6S%j+u@@F;vi|@f zk?iIK>w&F=wqYL1H((GSBn<2A``b^fcJ4rM73%OU;9ws3>Su#>$Zq#j%;{k+_$=T5 z0D1Z^b`RAvafJJ^r%xd=Vx3=axRP5U??$6C5LZVf8$N_p2m$fMEnOZP5oo zjofEaj++TAEWDY2S9ArbY;dUecqVbV!2AopC*CJ+iSiuyvteDa z+(7l*VyDsYHen}aqa4XyaCyM&d%$G2f#^;?$reEqPCat|>;dWsE?rU7I696j5fJ;I zI1Hal1{pUWFvc9c$FZ$-YmdG(Zw*{2o_f7T=v^aeY(d=EFr8$@qxjuJi8MLY2NxH$ z24S6PF%8Sm$q1aB>e%p-#Mh`;#G0#JWSwTh8x-%pFtz~W-<%ze6rvr`%??k>Np&IoUU}w4<*=gcsguYw3B%pzPQsk^(hWm zhj;_S+a4bz&utF)h&j$ML6Cj?6Jc*qkdW={h`Hb%$reGJGSX#d);oxm%iAa3N3q6O zv6H4VOY>!tKA#W1p#VbY#x3>8z!UX6H!)!a*U8rnEwtfIi(knS#UfoE;A}s7vR;X7 zfG^8sclC&a`6u=L-MiC~^xwG_`&C1F0}tx`V68Sav{y@RR|OzLIFEU9hkxFDFWO5$teNvlLj@PY<;4 z#IUjkS;GzNI9Fiw;U;m>i!XMP^$%0jk}?{F+i@T+p?~o@{JhwUI_)se+al+%vJS6f z+oK!5CT+;zd3O0HPULkaGU>dvS3@&<9>U|vn84EeWrfpSF`)TmakHx+%!NI&pL6I; z)ri6p4%vUGu(G=e{kyTo8Zc+WGrO{WOT4E400=YrA3g<@vJboZO83OW%6G8r{Wv@YoUjB-Nf}~_rpOYI+S{y4@@bo)b#FuqjTA?827M!NJnX; zb3W&tnLYP??IYJA^g6I}koE3*zVbkw$5Ckjwd zSlw|LChT>Qow1PH@UvQl?t5Owmy167L@4S)o+sl_x@f{L$d5QZ;daEeFVZsVUGhBc z#fWy>Pk@ihKZSB%hqkFK$UDK4oT+Ycu#p5ch&rK|dt*lTOAX8Y&A3ZA9o@TS?%1s! z-4a4t@Y!U@VefYh5*O_DGELj+_BvV9vIYMD8Nac$XcyItZqmWp&U;q8JQV8px%R+K z>x>Mq+-CPL<(W2P()HACz)g?0wchvAJG-a1)%&>ex1b>Z0JPbi;OZNH>!7oCeoR&- zcMv0GIXxF2SUB_0^Z4lFSx&K zIzCLw#8Y&21(kuzS>HOxvSjPHWO>1f@*BsFJ#QIm zp$$pz>|}=TxnK_4v^Hdm{mxr#wzj^m(>4 zQdj~=@B>ZRcu4U;!d!PHZs3&q- zb$;Lk?3d_s{{R+E@oMX{Z$AWNi!-7O{W_Di)cu%4820FT&$tEmXLW$ElU)H7?0*Yh z$5I#+F$5HwsQ`BpX=L^_Y1#*q7|tQu+ZY+$i2-9|1%!>U$_Hh#6g}HVu{{Y-?Mwkr@mizHoL?IDmFGV=$2^<{6~x{sqIF9(0~Vmki-a*5sOBe;LXspOCu zXh9yrMMRM903FUC5Mu|?bb0$1=zww(s>oMxO-I&6nLc35GG0-T^<+xpdF!P3`i6>m z@dzWyhj^`}DN(@9qq?buROz!W`U@;|9TyCR;KYJxGGD-MB{+5X8mvQ22n-EPvw6t#Qh7IZm-?R`tPpT>D6@r{j~ zVLiIx^3;e}H;zVU#d!8KZDknA`z7nS-Ig;}9R1@y?Re9YC49Phe{DRD&@4F^du@~Q z*WJ)DB-1@vf3wfnpen!AQD%=*$oH@j+JE;9AK`2OyqxSvZa^Q&DR%CE%3G^jF;<4j zX?4Zmy0l`~n9PHT0Cn6amIVDvqQK!Ruym3;i8)}KzpG!-b)sGN{{XbNq;}`4TEfxegn=ypAqT}lZ4nlqemf*aJhO*oGwFrzlyaVtKAtJ zou%!)=L^E;!eZUIb{_a`eB-$`IeuTTFz4z{-sj(z#;r43gUmJMxNs2@&@o{Vw2lFPn;PmtOe+eyg%2JAnCk+iQegZ)|?VewGdC z9-Y|hWH`Kuqy+ee!IO_5!VR@1!IFFdwlZXSz>he3j{bSy@CU(c($vOv!^H6U@?5*T z(%wF$-+=a0w+IHgHq>=}RxOD(tJ8_^(~hz zgFk~w$5Pj1B4NuAATR_u2U!yi;)64&N7~-(!q!61KCi{O7JXd_Q47 z=C_~ErGvC>EWuiIO|l=h`-d+^zB9CrI*$6p1twc~7yBOy33kM4|(I?Q}; zZoRyoIsfiP|!TOz?d@h;o4mS^W>Q2r(6>_OyD!(25_6f_s7xkedRZjOyTR0$AlYuW^au%W~0Zy@gW|a{{ZgTG8ARk<&Vge9w*hi zvwYhC{f)m?H`QwfNHvA?g0ZIZ2gfS@rypqwY`4@$k-Kvh^C9*k&2A77sg5t&u3>z&KVC)jX3_YV1YM$PIo53@hh%V*vs`@#72c>8xA zG@t8?A)g1{cj5k|{?EN^j9Q@j5P$oz{{X`x$hLb0xb+GOht$^W`nSoi$s;WGS4PxK z5!>(eU^eL6eTa-Nvdj#V+&_~2w(KCYd$i5ALGDqeFGIUC!I^54gAV9Pe(w0Z$n5PN z*>dsDY!JpzQs03LAI43CAkX4Wvyju_jtQLoG|k9143l{#+1^2%9`HdjjXlYy)vHqM zV2qHk6+Qry?nmi;=LRR-Y<*7`WcFPF53#?x9CbKTwiz+cl5Fz(#@@-F4^r5*zw$|1 z-_scX0GMoPf&HC-@g8&Z3nB7#ioPiv3!j8X+J4z4zxX5Il$$NNs~{PBawjZm#F>_` zmOI-(#fWu3+Y>wsyA#KFSLw^fZ(<#s073AcgA&q9eIKhcxpwX>4g+A%i`Q}7nLcre zhb7;FWwtFxz;b)!HploEELi0^OHfF5JH}7GGU)O54)7lx;Og1rxr+k!{1j-?1Mv>> zIlyM|_7Ot=0D05yNhV%+1hAG|_#l@26Yu0r<>K!jHXPOQD-O@AR)iGheZbL;b&tc%l`lnxB=NhUZ4_9C*9=oOQQ54LY_k= z7+XDqS%kP-!>d_l1a6k3VLyOvs55|XP^G&*bDeMmoCVV%^#S+s*jED}Fdw z*x3hh?(xGr*vY2lgFJssl8HQwhrX}r9lZP0A>sq{SQ_drzBVcU0NFd+U>WKi)~aGO05<{_;3p1vcpeZj6mYlOR6e*o>LUjfOyOR;WS z>SXW5yBm0b=?1<0D z?PljGyy8$52=@HW{mL-xQ}Kl2f!9YHu> zTMaxmVVeR{`y_8&#>F6RZHzyp2wWt#Ge%5~nz`BB zGY=)>Jp7;f2mWROg{vbc(&@*353oLq>I!i^&1Q3X52Gk5J2BEM29Y3hV`)u+VosD2 zs(nMs8G%m0VTB+y^>lVET`l!lbV|=#cEyVxY*-s@Yh|o@S*$n@n};FZ9d`oRha}J7 z9G7`^<#HXjtm9?KbAa!`cpQg*FT8tpU)tUB(a*1st`k3m^Ml?8E!Txx4sQvm)M6XG zJule_kS5`L_@>E_dIaJ3_;cF8hamuBi-e12K`xY>DtuDAi(vino6{{U~!aj8F9 z^<$zC?ir%=Cu=&eBE9;MhpR~&pH@V~{JS+i5PjWPlO0}&%NYbFO2@KZf-k6nUBd*} z*<+Zp&}g`6WJJxlB}gFe1P zF8=@rvF9TO!7_+!aImn%CcPuGeM2!4>^N-SCkf}*8qa?5-pTo6WO}+w7}~I%`kwhE zW82?txpA65Ol#O0M9V9|dK1*tbb+zLdalbvj_p`lcF5F0KPd$nm@>UE4wRSH*5@!j#9()7ugvdVmWEuRUmaRv{wRqzP6q$PdamZgA5kK9C zGm<9s#9wy=nt|2fZyy4}UHB(2lH|K~a_Ya!MdkKP_--(Rx1n58;8E0Xa z8tjF#5daeo44C^!WO5^x^4*J_!aH{w7DRsMN}O1dAe0`W$U)Z!pTHiNbmOTqOy}EN zC3flO!G5?LvBvk3=L4Lsf6>1DKC;cWcp%T@4YTUk#8;y3+=xM!wz~tCG6mCN;l-)3ySOnOJ>S(O3{sxjH+W1k zJWITf3p>A(h(p<6F?V;fok}sZQ4Mf=z-$dHjj+*VIvWZ1wWU{Ycrzn{FU7#&RdZ_CS3vdDb`Xe6fvd)sACf zn8)5iVq~zpd-y(C!{;a2;R9TgI8Glf#3t*v`nw`HKubG?S+1MRqBUv;%CLj6Z-ZpW z8N;WAxsBUBnL|HfIsM-53j{gjt20Of;P;PQVSROO@Hq~gj!VBMq8<5kWv>UkXMDCC z`H%5DA34sqj}Usi!c6zz8z)jGv(ts62LK&B265J)4v=R@0K?{sOTMM25$|w!IG(MS zPyAbFkcqHil4rqlhD_j_#C@cjCUQ0#tTX6#-6e``639N@2PN3Uv7VrqFZ<2=mFbky z3+2&zg|pB%qFGxH8gsJnCcO)0yBuTKjt_Vohh*9Fl-m*KCCd`uEpHrY<)H}w004D% zMxNf-Nn`vWC+G1$1Z0S5X~xau_R+=wVZv;&?f|qTDfZo!_r_*<$4BrdQRM0-8(1`# zsDg_-wU4FTK6H6qhg0MNb_(p7C5HrepVD7$3$fYOaP=I0CDe_c`7SbXmm%?&)=zR1 z+uCmy&u3>Fw`-l=1Q};gO!TsNWt$(|bB7B)@#Oa@=MZJ6?cN4E_?_@O;Wo%KJIrw*@L(;^&Z210sUV{UEt9&TsGL# zfsAchK$GD&?`;0KJmHYbA+TgYl3qR|rp>tE{a7A+%k}X%duj}qA>Wd1s575=%)EaI zHrK)8GnUQ0lXyj!Mr^G1`db$3!gyWUgQ>~vo5pwZ&ND=9*Sph%4x zBaOC;BfM%%>P(GTvV8c_?OjQhJ%f1qa36P$Iy1)a-yVtOPpB~R+$GavqFuncXPlDn zAXg)a4)+GZ`~jU7oEyIl`1V-X{D||1MiL78MaK&!cWNU z?S{d2zp5!!sHa`S zj63i?LT3lE=M3K9&Qm{))S1X^n94hS6}gEo^u5XA6V^B8x-5s=+9!+t(Yg-co05K! z^`K!G{NW)U@Oa&V8rf(kfVw^b_rW)SZI`M0p%_7*G7P*&?%DpQs7Hg@`>o{i(p~d} z{IRno>yD4%+ev@u(`U{{O^vbKd)1jf^SL0@2Mb#^7<>vdFw&(P8N;>i(aF&IAx= zIo9wWzyz5G#WwHX3%A{C;PsyX-UD3tdE7hjd*oR72b0_x{9bUI2H6J5p8>q<+?eF6 zG7RhhVFq%2J_(la9sV=h25`(|+cUU!O|#?~B$@F|w+0^*>=`5(!(0P643qDS`-6CD z41<0n-Vz=NzzlT}xh8zcd*nc0q=2>QNpOzLD1&b35 zNtIzRE8L%!Ha0MKliN1JOSt%MLuqNw9`lmrw&%dfGvfT5%dFrz&w_qgVP%gva37X1 z78Y4&C%^Oov&QwG#l2_9H-X%_4*b`CBfJLiO!zKxZt^)U@-AD}%fALpkEhLcJ^ny! z8Nl=SfPL~@czpg4-}(XE8S(KZ`~c6GNuM|W!~h}@0RRF60RaI40RaI40RR910RRyY zAu%99Fi}8ZaZr)}+5iXv0s#R(5L6GF!Pu9BlIk7&7w3h(#^b0sShxP6zsPGM;c6LK zY`ck2V&GV{;{O0nqVEqOJ0BLfTg?;aiYE+PEyK^mYsFlmQG~6K?&WU%-a}Dt2i(2D zZ!dCN$Xp7--Ug!Ip`-k(cmzWK0El0iI}+j8mja{D*e+J8B|)gSi_}}lUxDrpc^ipX zdxLQ*4aKOpk*M!HM6bo$tkdW~{uKMK%J+*UlG(VS*w!hwK89N@ zhvTdjmHv6R7US%H5GpnEFZ`Ck{>HO!f^P7?%$)I3f@%zF!5;ntseh?%C1EQAQEw-L zSLPavaBKD)#qPZ=VSWH7#ESs1(prM|1M~D+m-wwq-NnDg^Sm{>xJC1!9Pv7XJVxzxAm;iLFSKQ4G@-;w^bWxFlB)S1&L{ z7NXB0jW9&O)VMeK1;jiB;N&0dd-??COMY$2-{`mKYFqvQ#ld~nugSQT{-z^xy}%Sl z9f@?ny9k9j1Q_cHw_~^uu`e1EtB-}di3cFwM}HBlt-$*hyaVsz7b^>9c@jY$fACV^ zSG0*ybt~{6?0@I_t2D&YrQLwgOH3}&7U~*qS;=aJt;+cp5qmhorsBM*Q4#Whi&!}? z7RzDG-9)ih7E27@hW^WCz80Xcyb*I)4al2KkZk_|;j?hOS&Ed!yqb%D?;5}=i0!aV zkf5W$KTssIWgozs2j_seYdV((;RfJ^%AW~YTl6)5 zg8o5F+656NhyMT(F9Eof2j~9)8?#%8vkJsqq@>iR_A}Z1LM3m5P;Mo}rdj!;6}J_T z=YgqsWicY_7gg*fV2ge@z~8Wr?2p0*;r`|Ydh7~|Qm=6<0TcfKfpLf(hK%2m($P$@ z2rgI1C6O?oH7nBN`zIj5zXyN_n}C!bg1;rdaIDj@bp(fhDzEknf0bl%Q00DqxT$t* z+)^D>UE>_VNN@qBaG0vz3vkHq(pTUGH4foE8jF9rU*cMY zP$dQyqqu{!UQ5~-rt-fa*XTbYR&Vw?VAai#D;2weanxI!hT@vQ)<&Y=pl>4ORIDD# z@V&*TH#qlu{{Z2Vj4kHqgLtTwmH7hYR&1|zD*pgbT}v1Mqrqw)+;<|IWhEt_x!9M5 zO|fi>Cl!&Xw%{*ODsh(3DnaNlD5&lnnyKg1t#OQ?`4 z-~wt^ZHFZmtUUh!7~H*9AIuH@Dfc6{gHdk>JPk|yn2E?20daOYlpYVoGPt$Nql0WiUUoi~{n1X{196wLUWM*vg`_2@Fb< znrd77h>q~`3@hX!Um(*R@&$LwpFA?E47(kZcjo1}qF3k~y50a-RYuibw?FO)q2w2l zKA_))2yF)Cve-Y|F6Fo@?r4bv`!fgcG8a73^(NP^lZ9W9q zs2bme+D2c&YseRqd~t!OH#owgEyJE`S*=`4oM1*G)EoZ*B3?Mg#0#B8s5j{B?j?F# zs7mzx__B;qDDu2U?5lAoqEiDeSvQOd zhmy^b^-QC z?A=6I`kH~UF8vq&IwcZ}Q6Kp#R(gWmLkD11Ks<`%rc*5~?abD&b}kPgUwp2j>&n-K z`Rpz{1zQAa1$h4esDtE7!k=Qo!Uf?gsIQZ;2yRufRpBCBM^HtvLsF{;!&w3aN1jII zYVks#UO0(SQbDri15&B190X~LsO+deJO%nofmsWIQ7$EZOJ2^fpJ3EB#i+OWCHR8< z1nwG{;wlW%l?y*{% zCh)t>{_DfON}>t&1gTYmzbo`>v1Pt5#lMo%7U15n3cyrdnfy>3mAaIH0=y(2VNI~n z*s3}VvZw)ah@iL-ZL%Wo?7w8=F3bzWSgXQKF&9L&SAn<*QEqL?r+u7d+KRFSjbJ3H zk!}lIVARo2!OsDH1ymZB65?tt!?BA{J*CP-uP&H&I4%b8m;NNY62B67zrwCnMssDr z^XoPD33w%8D#&$YL@B9cX{52a$i|w6@Q(al>Ker`Y;ty9t|O=mUx8ZS1(AG#Hta?^ zfC#qSG{RX8H-&42l?J>8AY3g2FMob0ir7&5K`sZ@mMSDXd=E2 z&MI*NFR`*Vs#RmjjwRf`kgOb)63Webanv@}8zBDxCdM0sQ8hRB1Gu(crLx&>2}ED# z;MI9D?;~=Ekx>qKt?m=%3W%@4F1dheQ5Wzf5I5{D7HSQHvj91j`IERBgMKW0CBV3p z%UY(rh_0#ttN>d%kbOofcUY}ounSjW>oN5>Y(EPxsA*SP!R(QNELEXbm<5uMg zfM84|z?vF?cm-o=PncB2s6JJYU$>a-s7Ic}xM>oyH5cq#iDU}>iq+)&0v(E|obCZC zDqPt_tBSc*11B=tpdFzW_&UKE)SH!sI)TIiQoSKamzAsr@CXczM1iaM9TUEWy#}L!xW%{^DcFBe;u<#qAK5M34;bS4i|QYsph^Din(A!t6zRfo(AXaVyB)2Jq_#V#-z< zH31pc9RyMZM7dZ{!V(qc8%=o<$d!YbyTIIFR67<8dOY@(D*^t4o$$+It0i28_65Y8 zM%0$ab&6#^XzDt|XZ=cRa+0DAMF>-G3H+T=Lvo1ka>%S`_6F6;Hh|qtHcCw}`AQ(I zK#Ba6%7FUPe`DVqhRExYFsE*5Wf)bI!+nEPPR(VJ*C5N5WvAKy0H`r* z0hBldNm8X$Ww0d@h=xkR=enBYqYwS`hsYX@V~Iq2>Y>>8H-7lQR3DL+qgLX=x=rOz z_(vv;rNQbIP(frGz(ccjEk(Q!aNG#*0JxQeiCB3Q8fC>?1)v7b#h}HqrJrTgBiMoR z0b(06Hbtp-sFjhNfo=s`8q?7H#qOsNUBJ|LgSRSfbhriE8uc}& zH!h)bxuQy)VxI^N#?m6R?4+_(*h)6dqYz1HWND&yBFo5JvRozZ3My4#ud={Mx3~vP zE~6IR@LBH3xAOff$sjNKk>Owo!yLN!ePIK$U~IY?m(b@@{SLRI)$v zH}~)>6XX_i9i@NFHmn4cv2-|oyclC)KcmWE4qOdxY8Ap*MxRT zy)lVSPLK_zz#(lx-4RhO%G7xdL>t1<+!m~zfNupGB97u$rO9U|jlfny%f^HjDvN{n z5d21^xEsmbJit~KrQW4LsQ1EFI{XH_FTmfYpSkoOm^a9^&5P|b!tCiYvMpmx!L~y- z!`};j7y#6=Sf`T4hI0`#R4$Z(u_$~}T(N=|5lc5MEseD_*$Hk7Y>1IzaVsN%sBR@< z>J9`U+$v|twFcnPDGWTqqL}XoVES8?_XeQe6YfVPsJDQ*RhPJV>?;(3_XAMg4#&PL z@JN-5yq&_PQ4oL-+3tx*(%UScQHRN>MQx6E7y042PFS%nKWGp_4XWG_OUSLcVxX)> z>%vN(_8J2|iKBgr+))i|jm<{JX&r@>!e~pporNYGTkb?nF1WK1BcMoE)w)uyI17i30V|G zn}jHEmlFK)k!;eCZa6OWkhs4iMay2mvggnxY`DBqP{VO6!FLacwF{RGH3#Hcg;+E( zrzPFKxQTGo8;)yNg1*M!Q#gTs3f2AqHxi|8@Jo)cat+}=`*Glv60-gS@+IYOCgN9s zzhS9)s`592N@A{wYYY35ANL7|Wd3oWiy?BEQlft_#VEGp098fuCCbGx8^YKnV%-q# z2-$}cbg4?A?MvJtxG<=dc%{JExSz-Zue&g+0?3Hhu2azoHAS)@)G#sJ5$(ro!d4RSX}ESo=@y=_D+5>^?raZ3P}!1Sa1Po3 z02+)MhT)?QrBq?5b90O?^$_f=0&y0l{eyFilO1K}wV@WJ+zY|ehAsJs!QW?M*ZIvO z7%cJ{%2pEc3-G@nvT3D-ML4>T*l&0RVIoxG2$0llwlk<}xS@k z3-I$VJPqJ$A#%S;t;M_%Z}VuT5Aq!RluC-Dh?dSMfaF=WAx!1V-GTMEg=$makT<9c z5mYwVkx}lTNkc&`jHVrngNb*j=*l}Ofr_|Nxl))Z@=7rx{>_Skvli+iO*DvhUAU+I z<*|R5E5g(*k!}jgB@&5IKafAMmr>*~L~(NOz!egvsu8c5dE@v>MBboBCU0MbJ}=nc z;C-Qu&;0xWcq3H2ETE1VKj1h^m3oiWDo^l;65`%N8)XK_&>z`jsbV@)D^d$qUf^n5 z+4hRp3yh0U+9~8Pe?Lx|g0}{y#lcF0Ah|8s0;BmVolT5A%cwUFL|#RxHRLQ>$lu`a zBc4HVDlu>IIr$y@FIAqyN4~(Re3fj)FfmPDD<%<$G~{DJJ4{eH9Ep3xt(uG!BB5Dw zqg<50fZ(Xy>Rza)W40t_#^p9LkT7y@MpJNLMwqh{z_(FnaZFF-tzm0;sVPxyylUL5 zE((I+F6C4STe(=NSzzQ!$=I8ez^SHJ;+F#negvqu8}POHlF##;mVY|{wV z8f=?!D@;n4Esay556syp5UP%=1Dn<4Hq;6#cZ-X7U3OUWBbP~{CB(oU9YMcUuWyyg z>Mg|c{DeP#G6sfODedk8*qTb0*i8W`3|oP6irlfssWx)nCB-vC3sGX+OVmpYYA;d? zOlXB{F_h`#y06!@q^WzYHaKd6bD*3-EXRsb7fTbuUfCDqp9#LZK8O+LVt> zE4DbNT$^KpYgjO`N{jrK;)s}9AXUO_l$De_Vj&V+f;I9}IW+_s{1db6ma10ekOmEx zEk?x=3m7+OmAPJ{@hz3XDANsJlSquSh0Lo7{mK<7jrSi;j#co?IhWp{a0^lH5gRnJ{zWzaR51y5;^BaPVl8rN8Fmub?B@Hf8ZR! zrIMXsVBe+}FX|jM3U4b$rK;Sf1{A1$GgZ1aTQ6IePSL$$PlB0^mTam8=`=H4@+kD%lekGmOQ>H40(*N|;Sb!OvsAOXXiI2zFKEE^W+7 za;uej7}Oj80N}eFu3GN{Ui!icVifeX3Ebu;m4()@>~07w@|ZkFaF29yH-S#!ixwG6 ziBM}7xR-!bROH*Zvn*i4QQGniK;7Yfl@GY%0%BYbLsF8NTJo0;`g@hAH~NaThgzRl z8r-?aYyL97P{KV*D~OWMNpL^0$yEZ#2pyYC!>hP8t-#_~Flc3-8B)h0?{Q|*1z{eH ztPN@$&2J#EFhgc2b zy;f-Z8u^a0+^USW9o*N37)Vq_%bZ+$tQ?K}mL-Y*01*EGxDV{IS^BO1qw@n&-AZR1 zWiKglFtruJQmTks9;b%rJ7lS>k3}t zTD${Dw%i5eMDLKS8toRtWbNxG(HrRM*Ifsib8aiEoBn6x4Mri%?+d19PUMDx+edUU&!c zRw^ZAZ@@s7LvpLz+zw?o61_aZNTv-k?m8mdfxuj(@o4H@Lv6sYYF=;8R?c`!lzvN< z5~W0_H3t19M528np@y{o0BnY{yNbZMRk^Kzv7tn#nLxy9JIY}$cDX5r3fvB%s!b7n z(H7S&-0tQIYXUdmTbzRi;%J@txo9zO7cTI$;d_h;MhLephnKNDrOHI{*z1zm;DI>6 zUu7Uv>Mtl{H7_X@?iYSSzrc460}PwN2KZ|3=7nL@ z8p!4<*cIjMONZulg!_$?jnC#5mYnx!>j~!n0AN%DFD-nQOEGbOkY%5VES5sLx!GTV zHz`zl4P#PYq5x_QK*MifqFu8W;u@kIgr-$^NmoCV93w48nx9{M63qVqsYsP5$8k?( zK!7l}UV*5tptDeH1W89JhR`Bv2li4|k<5>pn#X+~_G&anbvG@`i0y^X=^o;f6vT04 z>H&!zK2`EqmW{#I7NfWq9TKADU5MiY^8&zJA}Pp(q8Kp+KG6rUKa8$h!qC>2IFXr5}gv6OsDby z*FY%0tCs=@xnvvsMz8Es8mV<3>Y_jr%DH#ROiGlwFcsMExl?$(cuSl{+}p4Ppe;_q zX!-$Zh$Od^{$W!t_ZFooWap9D)HFnzgK%hzaB5w}sJqE-59}PNgT5}jJ@)g+%3{X= zffgd6jv%vA(uj8o9glMM8tkN}&l@l+32`!R1%BL5w-b!`PQMd+mxECVqFP_%6a);| z7!0>AHcF6`H|Z;Ld_{z^BHhZ#Qm?LVC{q)61z?i!_ZHS%+!0Z2*P^y6qO5A+QVOu- zOOD!sJA{R$eS`hN@6j*A-*p{x3rt(fxZ!%5k#7sYq*Q8J>4+SIT$YNy66TopElXjJ zpv!&M@5t}qHG?aLS33NdW=j~un2N>gxj=GF8K@&PkR6q96*0((aVsoJhRL!g5n3c+ zq9SR+SDQnyFgnG&@;3=lk*q3ajDjV?D;1Jl3dZF`P*p!Cz83R(sFwof%yR|2nWF`D z2Itx>;Fr7rXUr{NHx{y&f>saQ4gMF4#S+PXh3Z`klp+5BecPEvtk5jU^d(kkqHie|#t6M+@TO>TJ_HDqK~lMgBucWJ*~rnrE1A}(1B4JFdMNKWCdxxUB;}8fQ z)LV?AuolXt7#zchwdJu`d4O*f$JAQ(Tfv2?(gnb;POvo|30u@Jg!{5{tQ^CrH+XhRfmlWgm4|6^peo2K z?4t`VY=h*vUkG6y#$00R5mkWxPHt2d&4-2lOJXcdX35+u2QMsIhVqvJu$SO+CE%6l zY90dOI);V*XLS&k)W2_HWr$Qfn@j@bp%t+y)HQ~Yyi10#pK=!is3M4n)0Dpe;1(-z z?h?tpG6t|q$S(kiQnleLJV&@(Thv$z!2IyHg}kj{YaqDFAX_Squ3fNdb|(BbTzv-O zT&5H5RrU)m8p5I_%3xIFv-0c3;VKW2M^Vi%(>6i83EUUS%q-b5kLnG?sKlN_bhgwHFRf!A5w98F_)1zc;+~2;#7} z4_!>*29{wkqza0%kch-=jM%ATEJhIAwacth%!{DKKtpq$hv_;YFE9l}tUAEO8_F)= zEVo_)qXM+Woxy6@4dGgX%C~W;xoIr!4d&(G)LeuVegkptDx;Jz1DG9p2Xf^x^HErB zh-6V7L7e3-B}?5!uSLHLe~HMofZvPqn1gv5VBd<~7N(h@H2sO(0w{q|<`$yrTv2SO zV_Pg*u{`pZEut%oL%GZ50`b;%R9LtQ*e_lLXo?}WU~@Q)6%~-$1#1kW*cIth2H@fj z_Xh^Nm%8wk4f{HeCsl&jHxj%oz)qmt3akd_SbLFpC_%g|)PKe?Zv&}$J1#gq1Cp^`Y0l+MO^b->&t4YMgX|=Nop|}+6L1Qkm4JJiJkt$! zHHN-Kwh=@_C_up$MzKt$X<;RE>x-YyOPLr`xO3YROwsD$=f6^{fX3~J~j zN^vT0*w%k0;fW1JK?8G;Z^}bu%ZYSlE5US#Y9nNJz}`X7lr4lvDi))=#}eligt!#} ziE@$1mEyNjux@r5mVOE4SyS!80_2q#j1bc)FWS_&H#;^*_?8sP+dp;`VLwMDuuA1qOun-C$6Q*W2iVmW^<9# zsFaM37&|CnSAylf)s35ACIF9NFWUU_ygHho+#yj#rft}oxHYmYxoox!w67%?g<+;I z$TfpbL8;%=wUYkj-UhI2vl+4YJ=YN zti8_?{YFs=M%)JR&jwzu4MHWruR(DxI+i^3ue1LEJ#sIExRnCpRCC069l@+L)Nc*o zPO#er8B30!ry&b|6)-Eo6V0&anlO+tWV1V)o5=qFWtgmqQH7=CyY+F)y-M9CfYhXh zZigYm$xLykAk>W-jKWQNvVRn(W-N{hlzfX^kJodP{{Yh!E<4n=0j|K^ULIht4vkHl zh^#%N>LxWGWqq2ICs_J#>~d>Tf+1idXt&wCxJsyYD4T+e+=yIHH zac|Jqg{%hR+#18&56{3KeGNpS0WK{=@e3M=v?2=={Kuden=i>nynWgHuKYrXkW6v_UTqxT&^S@+HG;IEipp63T|q)(9{uxVMJAg|OCb&j`GM zU5Rkk3sU0L83zdzx4r8*@gj;R>+161i1$wHKU$DUwsokHF z$81XF6r_q;>H|Xt?pbvOaWh)ftes)mMAe>4MKa|L{s~`# zeS?3G*f-$7xa$WRWruKE{0tD0cR!JZ8bG!Ejazb;5{VYv?~B$Ts;F*qEy}$>`Gw>G zbrQ7VwSH}oD@d&%mY6#_i&3WIvf|X)2H~;=M6E?^3WD%FEn?~g`ugJHG_c^!kC{KNf^%5rabbR45clUu_n8M zG+}H;rK?foRl!4;L4Xl&kr)TrSw-Qv@>>&Lf-JEu7cRRt++~eQSQ2V(D7q@`Eh1|b zotunAgm(rBI+j8FjUxTm)m@YJ`Sq)9t6|Y7O>n{NSd(h4VAlw#i^C9!KEct7=#Dp9wAZY_8P9$FU$qyB}dNl3Ri@;OskQoV)4 zHF}#{rodD}Hw(Dbg5_4?AtYU6lB8IQ4IZ9KTZY#uUTwVJ7|}QOI$+-XElNk2S#>Of zapYTreid1(mHCTN^@1cjg{euuW36Cvdls@4gL;6T5P8*mU*xtA_Fm4#nOEX@p@ETsJL)en5K&Tm)0(>jk3%F5uBN zCm286FLKh>1W)8}BmV#=XVMH2Y6&|0M!hR8sc)XDi6;ASqhiB#_^ZV zqrXY8@Wrv{)Ek-$U|P5W%q>8;*@Hjul8(*FBHjX{u0-g~{G4tK9CB6*!BWWY3+xpu6)QJV?%i0-oqN4jMxx$1DF*#mvR4e49|3UY6$yUeRD0oFEtcqEZ!JCU z2Oa{+qGO2Ngcne3k8nY@qAKUbigO{>2XM6)a^jc^fm!ZWR}XON4pyZg-Z+&l2DLcI zRz_)osc~){%3N730(Jm+QRH9T2rFuIa{fA?jtc`A6AX&^W1g7#k7NxJA zLBj?#g4DKlRm!aDqbY|Xh7PJU>vpu+zEkzuko0>)f93SbeA-A9ojB`{M_>|4oSXZ(3yM*Xcp zw+m3-Dg{eUm>JjR6&L5bOG`oxOXMNoZwtWtg3NiJe2HLv#W2fhKoHVC8jBVDJSC8Y zM%66_$d%-fR3D#+)V*9A@|Oazemr1wpuT2Qq>ohT>O| z6veD2zIa1wVwdIeM`+H|k57y#gx{g5R|2xN>Bxkv5p|KMh;PBBJb}1&2DcI|HG#?2 z4&qd;^4t&aB=CfieiJwqkV8AC(-)ACQ3x^_H0@UJ^#N62~<3RH9Z!^d(dw$Pm;^E*8tCnO8sY1Aq?Z z>9kXB9C&NwvcJ$+w~?ve@zPYLMy2XfQy4>-;-J((FYwlPA3^CZI`&&YELx$smEz(J zMbx+C#PU_jdoKLk3y&hy8H{D^#ktPp>= zT-C}Y5wDp#Cgsich0bmbw!@JcVkkiwbqUlr9WbH13uk3BbNGU_=Gknv9g5fbrNFEv zL3lr~T&-7tUIAVRw-?O`Tg~}* zKfxC8wJ9Bfp$AdBxDS0TL$PpnTd@}v!Peo}v997O7Zn@Ekwq#YD21Y+FBHZTLlgTB zrTB&Y$=LTc%Y0Y!+TW}B7Q7yNbq4({{$}7*3x=X9VTd<}zu{ukXl`;l6prFlq~QfF zC&*)815j|VeI?3bKYR{(bVa`eNK1~`QA|GKm^ThaD;AF6RJ352DP>^+bEtMTMYy+K zL8!OsiCG))wFctU8_Lw|ONpsy6&L(tQOMM$Mx`YsbaI@6^8jE-v{KhTdY7NJpw<`VhL=DRsqo~Ve z>I>}bG|Q-S1HZ@@0>5;){=sp`);@R&_M=QGB|6U-0lCeWiS}YaNp7Vc=Br{>7K?;i z7Qn?`{4HQL9pNrguzT)V4--gP-XxTOW~@iyTT78>y6twn{*9 zYx#~P-_&z%7s_}GoMJ_*B6MfM1w>0Q1vLd8FL+Cp7U2BOzWWlV(gKQca`V7cdxfxX z4}>+Tq9q!34+7llz_=Um9nPTCw6<&S;*}m?KKe_RmEztj`~y+R&n`?F&cUd+3`AQY z0brUS)OUm(m5@bjT8n-br9TUHnzNVy+y#h7fvEZeQEF`dF6BFinQ5;HaXv(;P%9e6 zxR(N<6LBopkwg_iMo-yS;A&G0wqGEBVioM)ViJ$V=Y{@wzs8>^SCIbuYL*x)!mp7x z5Trj?zt0O&-^t%#oFgh(E?X_~!v5z`#me_`$z)hR*tzS&sNl7`=(R++4&8ARZ`qlL$UUA zDVR}aO~a85%@NrjP5tppD!pq7De+7^U-=N3c>egS6)7n>hnNb& z*X%^7Yr((p3s^hC>)6z*+)BV(e;NRdifZR}~7u*J-eM?^DFWO!ex`|$|@L!(8 zjIZai)a!@2Xx0{@ztC?Bg{b1b=kJO`(A0K8PP`BI4}VR~%4IU2#@Tm))V5oil=-^A z#r{iWzV3Vw4R$+@iEOf2ERUPsb=(fe#dxw=EW=Xkz~$^K5@)r`a7Xq;NA$|f@0Yx-os zc7jQWMAiTbi_eTohJ^dY3NIXCA{q}E9*3NvqQ49yV*F$%MPBlj8-^hX=O525QPRu1 z&Ld(D^)qpH&pFxA-S>%6x4f;&cN|)LJ2}ZsUfd~m^?+luI8+t7%XkCJ)xo$GbnhD! zo4^Ns_wkfF2N8N_oB>uv`^GsN!7(MFJoS=69_CdfCvX1%b6FBP_mF@;ZgCV5r+6hq zy>*t>z9t*WuUQ6{Zs#~V9BCb7qoLB~*n50owX?>i4uXFe!;bKTSU2wwkbCbLZL(RT z4K}P@_kz$1=ZpcI9x}oe&TzC^I4UaZpBTeVOaNY6_m06(^_<4(wbmw1&i&;S5#@q9 zDy~q|j`1+!G|Y9@!oiM6M#blxx@%lqkVu<#hT%tl85J%kL80U_g6YX}5^=~(?i7D) zBthdt9Rk-m-Ew4WeVGU}2gdLyr2eyi3iHky1uw4|N{@xXy$GblXgrTt4g=ZoiAkfh z>B5yG#_ma2cnlW7z~cs$y78L@AoDrIjJTGC?)_W|!uZM&Jg+>s=;%6dP}_b^aN-^L za2W*(u%R|QoM9sJJeZ9QoZ4U3D53(WY0rcwzB7>aEsWaLY|^-BDYoMLX5FrY0_IAg)4%%jZ>qj%#RuD$Vy(V&s<3rl@G;F=NqeB-vnYv1cwjud=kU@r^017*#Lg6qZ^74BuTPw|j+FE<>84sq>=8pUodE=lo$tr<3FM$bNT zW`Ou(6<%Kb;0tVPzIjZ5I{J5%Fppybam?|Emt313^JBGli8~tg&R9YZSXK@q z3{ZG?lwjesH(os9x<~hb3a{f8djY3ecDfFAGs67fC=T{GQ1aWXA*XT|tPnXSnT(RV z#u%7RF`EG5HJojs(VBsv&tRuHpe>{EhWCWlNIcIt>8Ypx?$)f%3V)kETqc>FWlH zEa=EkI`R6*k1fpT1wSkz(V>WhmBBd0gsIOMKngwH7bzrRH;&jf!~Xihz-)B5G;;EF zn}IxxdZd>S(IvaYj?2p&;7;)Ci}8vLJ3JXB+IhgqQRgWZyh90XWW!kye>lT*yj;;{ z#J;iEg>Fp=*6|@kQ&H~F$593 zK^tBf-dU_7O;3z&h&!A_z}-dCTqx=gJ!a6piURF<%>gA|<;Y}1W4pZ4HTJl4)bKswvX<@5hK=LSB;ZaViU85Y zI>MVP<;e(3{AED-w3vt@;2OA~+94AHVmHmk5IcMsz@dSW1@hz~BU|R-P>+KrZq~o= zyw-v*DU2_HW$OtJSDXxjyS7ZU*tT)3OME{WL^TeuK|>DmmxWwnBL{_Yn(Wgofg{#L zjYsO@AXO`ictRZajOhOW+!P%I(zz8Ij=bZFAnz{Bg$kXyL4THBz~3wa)lA#34skd* z)p6hj_`!|Y@VOI89y-JWvA;RU=*wuWZ#P3k?-7%p5YDcn$$`D`#F(MG6NJZ70<(-& zINuP$?x760DiNjpVa-C*#c~Z;n7%CRmjlT6aXZ`O&ITS=HmEw|&Hw>dpNwF?0i!Jt z6u8TvAb8Dm)5EL}1UWl%MV}$!;1wcjbo<3M5nl?EILZ!M zeC0@lIm!yw?zCYxe#`*|4cELHbaD@P5mXO@AR(!{kOjpW1nlvUorkPTwhhx+;YKVg z5zYveAki|D-MZ+_-3f!IpqI`76*tT00EXS8tVSA-cm~kk7Z533XOwwdhkNOnrHvka z;91VHf#vHFf@siNgg7okILhI(uN;2>C$?-GUpIMTQd~E!nkH|9AU52Ms1lUJs34E5 zcV0;c2|)uv>nMi4E;!2WycpPz%A%XKtVxQrUDv#&Q=U1%c9)*;(H%EWjAl~X-r~45>4rCO&Jk1iV4|NJ zWC91{7=A#Q-WGR&Y?R{?pO?dm?#!JyH^wXEJ70M1EgtYHaP#9K9SVP()DGVn3kb&C zUTr+)&FGgFK%HEL2A$j%R@=gWN2f+aZBw@m4krT$sDaWP;6i+k0j@dE5IpI`F5KKk zbVn7e1ASpgp!{NyP4j|c?)cU$?K8)C>87pCsuFjEF(T^XI2wD(2t~yR^?;6ENxT3A zJ!d1a!RG{YIOa&vE^OaOwDy2?xovNjV zDl6nBUYiDMG%rV-Tcfw122D_hd9~p>?;rpjIH}ZW@Z!;p>l3r&9px{eanSF*iIF$? z22d8w#~>Ki31Sb=Sm{w-FeRn$jxoE<+{F}Bd}M;KUS~MDqIq!xy|`11R*tT&AZo9V z8De-hh&5knln&24VH#APJI1y7{AQ9PX1l~vkA!fY?B$K6f&yTjk#P+}eB60uL^FjS z9Jo@_HC@km!RETioxH<&Xba+FrlVb&z*Ke_MKlQ){$dx={<4FwE_liSXy4zAzCaGK z3aCeE$i*A8>mYN=hd&w5N1Q-ZNxTCk=IbImU(Pborx#9iAe)m818d$P#~W}QxNx|E zHLcv|0JNUZCTtM5r=gWyZ9rcUluRil&`IwL-T)sKVja}f)!RH-K z>(^M56i@FKsCdT>1=`_LL+c5vt?MJT<8u@ZZe3v_A+9Gm8ddahibLC*bYZ6ol)?57 zA%UQji1Uwoas~ZjCP1usTb9$$831=Vxkoy!4iBWq5KYG7k=st8*WL|6MdP>ik4h`Q z80b{!bY!B#txR=8&T6v#@q%R-@b`&CI%;~wfdHL%oxmI>H+50Nfm62<8eVzCmFVH? z1dh3UV%pI2kRwk{38+`Rq+sojoH|I41J*CsRD9%xyW({-h#JZivgz}S6UGRp00nEW zIj;G7z*RgFDjO`Bhi3x7)xEEqxrUVIBX>y9Xc*(R> zT-+}EaotA1tF4b8e98Vk5Y1FgT4Waexn1*fHkD-#5ksOO9s0IDn~84APC>0|MB-Frgx=g*F+;!OHEmZp%Z0lWjC5MP^uvm; zM>qh7ncg5bQ-zo~F0JDR@{D!k2MSllID0Nc)`iVEdi%)a7ItK@AAy~!B>HCI7@ZE> zlm#%S565`OuW#!IN9nme6}~YY2JxGCJDd2+I)i(`B(BTeT15?)tZE~t#&9!_ILn~P zVzcPPI_ON@2z_GO8uyD`0B*a*s3lIkWLi}7<1EE6X7T*u9a8m(F5@&~!8DxUG~oR2 zEh_}PWO+FVr~a746tE6*p#<%9l&yddoP#Dij}2nJXdX|Z;78bJ6k#w4d4xy$z;-q@@q$6M{9qDY_c8Sa7az zC#anJ#gr~{f(LFC=vN9M%PuS>{Ny@t-1CT2Cb-^Gwrld^kvFJ2&4G`+ z5*sPcI>&5Ru?$_C*whpdaJO?KpE z33|bCy@wb(1rBn6$nNE6E(>`%@#_SGmGOW9yrTUa;$Wu$@7^d>FM8H!-kj400uz6Y z_{M-oV}3pT;Il(^9Jr9BG@Thym4h_E($=xfTy>NmPjtc4G9Mo zV7i=Ofu#6xQGolHt7inqQ%&|_o-WJY@fHU8L%c$gSDvsvQS*^}%lW`f&lef6kB5v* zr1U&sjQ0D%?OXB2YySXzhZ}3hS)s@s%)ZU5@rRl7ykH4SY{ou3Vh{;203`&5SpWy0 zII4t8N!CC+^k%@E_{uxij7_*1yN3f|g`lK^*^dxt@L-OQs^J9*2zbW8M{e#~0=8=) zHtRN|J(vx-9xx>@Qw&@eN?|@!zH)tb*06&jquvBlfEWM+k(%pXak|@N54Q}7*m)kz z1~l=(6Zypf*Ypr(QCa&}=d>PhrKqYsBLvF8*#L_-+{> z0PhS#u6xP2kTw_^gGce5NV+jLQJG*gREe7|WLb;?Q(ABaqaI8W?hxJ_1ll+<5KWJH zxxJhouqK5*Gkvk*_nd_Xhadx5_0BEmfbH^T_vBQ{+S`=*_`&yLiQ(g%;{0@+D1})b zOd8&|%*D_&x_6KV22t62$SjAfLhcTa8NdRFy_kl93pa==k;t+F9P7LYpo`8LV@1Il zgz94L$C-`ojZ+rV?6&}u;q%r!(Xy|sqKF+=c{Lpy$2-R8 zw&_aRpXtz2%snZUZWi=e)SQwXQH2dnQ=W1~@uFT?%4~>KmQn zIOz0cRy6GI4NpxQAHw2QsCTTVjv80_$V8{0xMAdHlY^jZ2T)M;!+`+9w0pu3LDP!_ zHgLHYwJsnA2Tz-e0M~8SBEw6q@sp8T=i>_yhb{=!+mOK<+2cPk0=1v!G>D97`Q4)m4bz-#bbV&l%!wZdN#h6rza~DjawEnBk@7Mi)SAKy@9&%x zVLS{rj+_lv0MyNeSEB@7Q<g?T`wPj#yl}XIkG~C@$U!EM<0`^ zuZ(2M11#WYBdX&_ReKl$n~w*L;3;1Ia$VW{;E6liawWI)XD>q=N`ck@f-J~1Q_H?G z1{J-X;HQrna3y;W;{ZfFxb_(F=O7dZc!XlyS5xxmD3OK>8yU_rfD4z0PA{Bkg(gA} zrkS~gh!eX3TpG7nS7mo|WF-aLkZH4{HKV(ou(OXisfj~~>p4pKaEviwgg!~BgO08^ z<2Cp*V*#FR9Hr6nOd$h?GTIu6GkOYlhmE@PGND^X0Jv(6I433u2pzw?aQF?goC)$g z8FUTza5N7uj0FSa7_iQGrt+L1H@s$1=UA(4cZqHjoHD1`faoi{L^odQMS8>#1;uSB_;LfJUh;<9;KhK)(~tp3_m09JjHw;hQv~(8apyF_I{=xm zD3h}#no1lW0c*nKH(2$H48B0guzn0+h&Y)pdd*IU^ZjG*z-k9^=94IJm4aQBu4mbn zvK!VPW}GNv1Qi*tW5b5AN~9OSCNkJ4w0I57L}NmUKChP$Iw{p&Tt;h$m&e8-8m!Xd z)gC+;pe)_DoP^Vlc?6-Fr`GAsf-2f(sjcQ?p{AYg;1^sidBi+;3M3=dZ=2+Yi+6YlY zWRLN1C9~cB=~t2Sl?g@J^N^~;{{V5I{b8>qIcD;Bdc$^)b5zDg*@&NEtN;xPy_Vwk z)#8FHw2b$FuVN(n%I13kCVnp8`Ic0BqXa&P`oJw-%*g_2JGdaP9UplI2HnG2#nEf$ z3fqIxoW(8C?>(ZdtB7G+*y1zrcbWh~h6wv>WvLs$qUq2E|Ip@cjq(mwO&@Q*3Hp zb971fylDvBrEM==U|YSr9b^Rr*!7k91!9A8w~~(-q8c_P7C`?1c&&9f#S9VA)**@^ z!GgNvZ#?1!F1+`iK)mmBAnI!Cwon*jHT96>4logwcDX?WTnN0KTaM&joCwl+$3#f> z^?(mAc()hh`^t9+F%eREzzQs43J;{l!InGxm9 zRUo&A8VdzpFz^o;Y&;8?tyC+!4ZvOzhQ?u3udLFpJpm^&VmA0=~NXMJ3 zJtDuLVQH#L;0>dc)+jYQ!tJ4p5YoEk&H{blN>8UCf=z1(IXqr1m5+0;sEo_ z`C}So?)kmWe>lhqKs9#AU%Zc&+zoj?CTp^>0vxW!?-!+ZsK=4-E**xk0zg@li?a^X zjdEcK9KFm`t({`QIy6r>*B49@^p9pkM&5@DakSBnd24IeoDfiXoMNb&9`b>(I8)~i zpmbv+qs~JVpIA@65AlhiMcHFnGW-}~AYF?>U1ZoSc^v>!_pBlNFI2V1%a)s>&qOq| zP;?v36x*$0jWfnXw|=n!p&Jpwknz@4S#CqJmzU0H($3+975d0Q<<>xKqua)_g=^~@ zgB0C5dpBPuCSY9Qo)JZdHFjm-q}_wP=Lntfb%+YP@zzp{uZLI*vH))LnjI5)sHA$E z!eV223B$_NQ5lVSfIyH(fHrg8!thF)UY0+s45C#88B8d4xa$}JsTFps+s;yvuUT$$ zc=BaAe6d4|HSwBpu`y^vSb%Q9+m?-md~=9LooKycg_i2#s&eZZRjsZ72JWT>(7T(s zIY69DvwAo%I}S3$9}mV-A~Pr(2M+UPwQ-Isq<_vz0WT8csZcmL#7SyAnR>DO7%aW> zag=yd?-5V~sK4(x17L><^OCsE65Lt?!;{tmtlP&~eJR<3k;8?;sbezEaYtQiMlhGOwrg0zhLaO&Q;R>-6gQ{!^N5N!=LJ1HVt2)U^TyZsagfAU z8M=eD53$Pvm&4Y{#)b$~qax@OQvpy1pNHF&^qN1ibY1q15`1MqPX#X?)? zxZAEaQ$1$N2m+yf;f5H_N7(qz=1>Btiq)K4cts7CCY+jtHgy0Dm~Rw-)Bm z;Nt?rz2Nw?-bpVd4&lefBJr44K;5}tZ8smGI@oe(q1fx$mqd+tBh!oSaiJA~J?3kIN51#O* zC}}<7J^-FD=mj;~6}M;JZ8h_Ac0;Trod(0nfl=pt@rXr5?(v8mSBW{o15Z9Oifnc3 zE6E(=F*-x#m2JKAi6HtIh)J$-_Llg~sxzYuN->KP7mLPr1^C7jYrwe(!(TZJP58cY z$O2t@z!U(u&B_gTh6+;02|xqmBSM4u-gU!-V8-bE;FzSDJ2LR#X%p?hxe4n9R21tC z0hoHRgE@`{VKB27`u>c64=tU936# z#qcehvpRGc8IIsaZOI(2u+_EU#Fd8_dB72-ZBPoR`^A2w2QF5x_<4d;)80^5tth4&TvY?V&12BSn-W8=ka$|IH z=iYSobNIp0(9mYpV|{V&1RLnq2N66DwVi60hk444&N<#7j(YQo7UuS1X~THQrBTxI zo18j9THsJ0lK?cjEh-e+zJmyqDvdI0>f_dr4G1XJ9dU!Rz*q#FQPuH^DgXu<`kG8O z9fswJxu&RTImAIvjxkj_I9xRb>Ls`Vw{o`~$nDw2GI?q@?*&Mg&Q#%7MhX|?yr?^x?dC#(?Zug-du zs^Lvta+w9z$BUf8)62$6ZO~T&=^ATR;|8VE{{S#sAA;psr162GyXB(b)kOzJ762Sw z;t~DKa3Rd11oK&Jdu~=-FAQWOLc;htKuRQUE1$|;PK4Y91^dF3DD|3%H7p%ip zjx6_;@w^@Yonr?zjYGyX^hg1>PVMW)B>+2!;HOS0g4}?ZM%42(ec%bH$m0eB;L{5M z06aT#R0n^COj;*yQ+$`MG0ACb0>ts10KGUTB~POb+j1rXcV2$HXAW0{=N0Dp+z zD8`=u06+Hum1Mv?6Bu;g)(HlI^vlp3oJYOn87jy790aOu5_hg~CYm>5bC*-BuK7eC zoCoZ@aTh{TI=NT@MXfKfZ-=P0)F`@u71wx$JCKIZZ|o;Q=2-hOZv+P(R~ zb#(EAHs72&@XO>w5M8|a%K*Fef(cH0!j*p$8ts##5GOC30kcW>jr4r^Fv&ExfA5^q zU>SMA5McP{HR+~P0v*#8BrABx0v_-4l}5GU?-Yf_=hiVCTgBn3VJW}w3OzjWWA+U9~8u9%$Z-ePDb_PEVVcF%mPd=na~<{>A;3i@}lwuC;Y&O6_Z^$3@;ldw~c<9k<9^*OxNoJ$Xrx;d_FT| zoirvz&^op2G{(c3#lmCD-m+A?Hw>DiV0>lK{bYq=n#Q0lc=wM&(e;#g6J0yT!fT{y z@qmanyqQ5#!g5oigQfj2(K?31yw>|q;|8Ezxz$VJg|m3VwHwHTVEf(*BSGFU zu|oX5^2CQNe|V4|h6bKH^5%io3xL}krtmII{xkE2QtW?>aPmGkFoG)+Gz>aku+ZCA zp^0rC=XpyoY8kLn3o@ko7M|K zuf|rSb%ql1I12|itO3AH6Is|CudLckFCv$2HmS|GgQ z6QhL-fgMUJA5#tRks$FWx%@t{2tEiL1`5_i9SZ2fjh0gnKo?rQU@>PQA0szDmz3~t zesM9e)y)R8ezAxgHdm)tkH?&;jPOWk%G`Mz1@WsxTYx#0yh9Kr3>^+%UC_p_Wa(7i+yHhxu@>%tSePQPrmTL8mUN&MAg=N6`3Kze45*mEN`OgzO zoo3)^G1%!7nT2+qzu#E^i9mM0K#kC4({AK7>W*+=!C8q^s zRFl0^uCjR>n}60^e8l~6iw3LX{;^&K+W!E{DOo-L0DAT@w*LH(B+Fp z%qOr2@sPSrXq{ygge4vOIKYkqMRDs{(jMA>>lH(;B2T;o{{WCNprQPn8)H*#JFow^pHtHN=ikGIzg25K^fQtGCXwl!}0AGGF zBE?@>vrf)&-ge$z@&`5NAV%}AI346p+$aJaW}R`u`Obs$n&d?Bl+iWj1^^DnBi;i| zv&KOMWLz~=S2a}EMgSVu37pw4{$&jn+~*Z`b;|?~F(a(F@q4<~3_vwA%-N;zW3&mz z0yL;;dBZ^O^_G0!7(`n;#>A*|aS$rvIxBG`G?U{uV5NQK0T^uD$2z1XxJWnRn6XNB zPTT=^cucw1zVcTC4sZm(+lNGb<9R&4CJ<^|)U^#{a7n;ogOkQG(tKgFyWT`Rdd*N% ztXT;(!HUr#x6A7tMdzGQCa$gx4UToj0t?Sr2c+|aDGshfTHgB3GnU+Xb?YJnYrlBG zI`}hfmHN$#7mXUh{(|CSne5qq`q{{Y-oz!1>x ztJ-Y(z`G8YwgHx3b>vWc%eqSdd05cpTp}_Jk_>S$n$lrP{aJn>VC#*^`>uLLOkYl2%zr1r1 zCAXYn89V20Ssa_EezI}JSBPVaR8OE{8hDtx&>9z;^_ySh0M0ZDYw%-;5cJ^CJ&#$Z z2=Lnppn5+<%jKg;!>#lP53B z&&DojH_gKIu=&nj=NBcMm#d3J0K{0_5sB{LI?1}@0$mDsGK!nQBJ%gFLes>>V#ctu z7h^o0a3v|fCR1p5?;ValFs7-_1md_>LwM%~w^PP&`B}yan-<3u8?>Q_h-u;k+cW?k*f+@MkPH z=EXrx4|%x+{9=N{<9MtQd%`*+!vZceyTvup=DcL6QR-nOb{%=g=UpxhMR(hXsFTdZ z*~6}w2c(=#+eSVxF- zPs5iQ1_!Rcj3QRMy05f9A(Z3oPvGkj(u*5v^4}kLMgVM7oE_z{iyYEjhVQwvSAoYe zZBCBE)6ZwTZxE(XtSfpAWbS~M2rsywgC;D7S@AD3pO1`v1z+a{OT>l6?r6ZIUrvkR zF)-U4SSQ>W-x&3GFvDHG z_{)H+&d#wSA{^y6Wq0oY!P&P715PzHUp})(Hso8`3Y8p=)&7=kzs3~C&Co7O24gRN%4@A=IK!ntSwU(3h533Q&SggYDQ z%^YpIoaA7zJm(uxyvP3lcsVBrRIm?xU~H4I1T?5hrO-WZ>T%B`pOtViq1xOd+q!dE zyC)bL51ZpAv;ttt8efBQJLa5B00b5eFTA3a>YLi1`-aD8pK~1MRI(C?Q;j(=IgrOm zL=Sbip$IOK^M&EQR}%J-qc{N-AFx~#pR^`@WqD}DC_wV5hysHK^u=X^=e!V+9v*NOp#n@m>==huzl;R~ zXHDl66@))T@ZolcqpQ5${&aub8yq#pd z{&PW1%%oC0+~*Q#9G(=9BQQ{xa7y+c-_~#)#}d&87sdfjo8A)5uj@2zuUSDJM_ppp z9d(Fe57#+IOaL&G1xOw|Kdd}Ik+0i&N-1h@eB?W}MrTt~N*$?|;MDGS_s$@43{%BsGV#705h^d$+7*i&(Vw#Wb=-?Mc=%ff`^P@Ucf;cX zvtfJwvQi3~Fa$+^jOL`*)*4-YZcZG7r_N0XM{k!JV5goiF2`=1?{#BSLD z2~j$=)*m%%v(5o@9x+8J%hnR|Im1r6ePNs9jMnXin>MfTVK*JXP5zf3OA)0ei_yu4 z8dMWqI~GS=T!9XBJz#)5ag2~=>w^3Y7GR1AL_iSIFLllX%w}{5u;X_DQkMiDB_ zzc{7Kx6tm77{Mjq!~=4#Sji8_${m$3Hou&do_U!HLS1^m3~1*HOH`6#5aUp|D8L5f zs`1u0E;^_0C{tb@vqFcB>m}s*cYuL3_v0>%9P#?fGBI(AfE(+KX+&k#SqA;joYW@X zdUB{T^{kRH?XK`{4&LS~$V2ZL3QvrqYIWlX2yO@CtVz9OfmP_i3Ago{8ry?4gpUd1 z6w%|BR>6cJg2AE4jhCur+etZ?A+??00DF&E#|G`_$pMS}V)_%s!ex?z^VUa`I%|Zw z#CRf0*IU2`kug56cp@sYj!s@V`@|hS+CWYKEszs%ZcVV6Wj9KYM^SIxHDz)<2BKz{yEKN#10-I0NIgf}k0iG;nOV+x+Zfb$H(Y05~$ct5v^8_F(wBMrLh@cKUMJQ4Yec z-a7b9v}7#?&n?uRW^I))mZ z?MK6pq`@FsV7_N_9y7vf9gd=22D`{KG$)+3JNV~$auy_>J?9y}w&&KY_;RBQ;3g<) zZ>xZmK*SE7jEbwP)-oGF>%5vd9x#N|`NbgVI`fE9MVcqpcAQ@rK?C8qZ&EyK4FDw@ ztZ1sISU|5>5CeBu0(LD!p-l@mVJj%X<`maDH^y3b;=95?K28dvcnvj}0}moP5&dT2 zE3$MQhm&EAmfEHReoN|Po#BMX-Ip351yYQ@<}=PT%mneX1N}_3cn_R$ zR9v-_+w@$3peZoUyTYM)#JT}Oq<`*CxAH8@J}}GyiNPH^@r3)OcBqFsfqmf_18^g8 zKu91bmu&92E0x}GLJ+ysSaqC6<7IP_@bY8< zEx6N<&sYkdHzSWmt|-!5!^RF|9GU2l=3}s$c=78tU7Dsbrl!wqfH`k&Lr7;XO8)U$ zD^9LF;h@8u;wX|3=Kuk8;`n_d&P2BRXO_L|6x-G(z1$hYomU4Jc+>z46&$9a)>%UP z#u5CCN{Um)SbE)X2DC1-U_0}PT{00d7bxI2_`(DD@)#&1jG~qJz>}Ob-a-R`Qe$+n z#tV!E;9y@6-95=UCN_!z=R)!N#{i1=zeYt6r93!*&6H1W44V0lQN)Q_@El>9x(^2v zt^}0(ag9oYAp`{Noqd}8VG|_Q&hvD<7a02*u2CDw)?2`}TvutkpqYDb3WFI3ei4WO z0dqWK5~0?b;ZlIEzFnAa-i&;JvkU0^%x)v*=)*v{Ce4+aP;HFEBK4?=N}NfK{(06liKJW>3$zrjb~?(QPJa9&zuql z%qUVX9LLgl#mfNN2X3s};|&B-?*PD4;OEvdk?C`Qd>8EZjyta6dXHP%^x~_)ps;{1 zOQ!7mPz$BZGj zqg9$9-4w5f(!EMKRBJoM1%RjIHc9W>Oh+_@bW+&1mA#iCEMQB z_`;2Xe@MgfPiy*R@;0c);AYc6gmHEt6A|kL z1H2gE>Gomv*a5uQ4f`+>QKB*kG%XH;2(@(dajfRh9tOZpG#G)6{9TZH!X4OV?NQ}C z`^JwPT@@BQbDFNsKwBSX@s%1G1D9}G*aySsjCC`(FwhT|JVr_)L2i;CS)-J_2}1PH z+k`GMULJFTH-d{uZv}ZNqZdF~fjAL*au1Wih?U!0%{?_?yhIQu-Z=#3_4vwGY4MsG zuZ-nFJ~#g34XJ5)GIUA??s8yk`^|R*Vy;J$o6YoBG5+(2Q0*tyO2`iwG(!)1$sy;) zRmYd(5P7os%APwnj*ecAvy}J70M}{G09ns73u?ZSeR+XahFThNJzdONAu1t z-lrYr%78IlqkXw&vO8#E*k#aYFyO+x(*k+q8hH}9B$ZC6W}aM49c{)J;{|VS@t=%# zQd_`izMFnBin~YoAR;_HGRzS6GLY#!#*3~@RFQ|k@bZJFrxGU@a~uKXV(%7Unw!Xl zpjG)F_@FGNwuoySTjOD~6Na!3T zEx<@95Jl1+UQ3ounG?ca#gk;ga^`OXm*o=djhLeAgWBHFe|VV`!>~El8Y^FUL>foV zKrY>5onw$z9rWP~-Xde^LbH)J+?vX;yCIE2%qTp*9gO#zZhmumgvLQmykvgISP5~y z7BIWAw7FmDixohb*EZo>1zaRV`7uvpc=C6FuG;Ucs?{3>F3lWf*oXl7{czo7R8)-t zBi8N|m#NE}JJtYqzfKEhKJisM949U+0*{O=l3g$hmjh=LiHfkT8pxyXk5~iKMgmcH zed2GFH74?b6HPG~72x^fh7jF^>jlS9*`o~roPp)>n?UZ$WCd0H4sM+u?;kh;4c9)g zz=_tgLg*b{@-+ZnvOt=fm=aLZGCoW|J~{yDBi1sh;aCNqGn{Jc3>1L}onkIxAEXUD zmiWhH#KI6bZT9)Vgb+bFo!&4}gFx@Bx_Z#L1yt9OF+;ZcF(I2iF(b?C5F|M`$|8&= z*InZf()<`RkGs6p(S6`HgKo1>=;59+&8gw>if|;Hafo7V;}n7R!=Oh-0EACB6wr+{ z;S1N4b7RZbSn!2>xX41)-tr@RUTz`L7k3yDBj4`;=>_w~a0R2lxG`}VXS|4e3zjb9 zZ@eT#MBX+qA9*kkI5n)hN^>+|J2r!>jT(i3b&4-t4oOCTce~b!a!lQ>OQ#q$IzsT@HqZ|oK-J0*qvek1E6wnrs@4+LzUsi27oN> zjPl?{eEBddnw%q@Mf=0hZpoQgm>shNC z(-lPyaUNJ`%_|~`9(T@C@^yx^X6odzu9FHHP2t<^qwfQEvGc#V&L+V{F|d*=xNZ5N z`3&dK)F)yKUIOm~BBMDFPWZnjQJt`j9hw(v z4A5RM?I31pIMJ_;FX9(0pTFCx@Y2ZC!BGngiTv?$|(&gV=z2siCi#t7K zk&O+jj-C`k^KgEvo-K%!*fQ`3tCj`T)Xyr5*Ul-(9?8Z`H@*#e$+ZB1{W4g#t@-zw z3+zT*3KWMuW3-1HWFhKPjMkkzL!5?J=i?ajA3Yh#6zG_?uA8G4LuYS{B}YlVI?9uJ z;~s^)vWEBV#%U!xn#fi?fcV8~1)H2b`SXp;8@_UtsCd8ww|Jma;G4uW(CF(8p|=<% z5)S4slTv3gFm;x@y2TJYH1QN3nowYl-;-SYGs)XcT^1X_keByU5xN#}b5q)O% zn!RJ-JXhXWK4HD#G6z?z4#3{P;}IiXL#!)|4=x-hu3oac67`h1Jn?XXOS};gM-d(d zonWMcfVMZq!MPqby=MwGAROQU9O1V$LbvY-Rt?{*5i8_)!d*P$BscS)DEqPvo0OYV2uO9L*IKgP#xaU`w+m~Gmg)|Gk3fr@noCact&KImL7dSU`J-g0N3_Z>t zys@aXqWRVa;}p;rckQoi4Kkms(;#4>S3t1UW&~VY-0XSXvwHK2 z3So1=O4F0P5#AUuhssXgaY++!s@Y|ai-`<~2!#+X{{ZGrd*n2FxiOM1t!xqJmG3;x zT5eU;UZL+4jDzy_8V=icwqw~>oDp)fp#5NYc^>W-Ap$*N5KRXA#EV9i`^EAbtU%{o z#FmQLuV)F(tm*l@j6@x_|9bVo z{;|%^ARM#{^^x>+Ce(-T0`CI-WDv8%#!_}!qm0n8L@&XVbJ0&aG!_T2$g&5j15Xpo z%_mqQG_VgEV~_x+X3z762!2NxOUuSl(D%Fq96q&zN(WbiT<35g1Gf!0#3TW*o4}U) zqCOuEv8dR)ec%U70O{m8W}|?ArYu4W)b)&yC~rS(EY~=O#q{I^nlu7ib4+REPA7S;U9R%e(_my4Yi1-4*4Kjp==orqp*;Tpcs@6HdpLi15CBgY z2-f}LN~=dU?KJqo#O&d~iQLj(o9N^j=YGHC| z>x_dKY5sW$1E!4WvGiu;IKj}n#Y6$Kcxj~G1Gf8IJ5%6sg$SKjj4;^k*Ep6ob#X!B z{lCUKQX`fes{7Wp)-A-DEI&?jKySTb=<&R#WnCGd95(pIJ7+8F4_9g4ZVkKUnV~;ZWj@`EM7LJ>zsHO%z)^rAPK~PW@L>JH*W53k`IZ-Jrvs*w%by)-z~c!KkJ*o)`0$4GCpi9r zH?hJ1<^GwEt|#Ltc>@{^VA_5$O~T>ol9hZ9I8CX`J1Rp*Qm85iZY7MIiBFhv6WZ?x zj9i36Du_RtAJI988S8#O}%8=2EY@cYr{uI zTed@PN;EzIIrorAL+WO{6bKL(n9TQ)%WTN7{cQ(~T#eRHVd(?+gQ|l(*N4^u&_RLW zPo-xr7b+{}i`WmG(swHK0{bdHGAPw;^M$%nn_VArzO#P3wz6fiT0R;RlHH{r9p?R*HWe+Z9psL;Db}Ci*Lt_Wq>7(fSzRzd0e6> zS11z}D;$mUiPj*3*xFiRr!$j_)Y|u(fYs!{ zRjR=Ar~S$cXbFb6On?@~{{X8h17$<~Tmh^duk4vBB7iUBFM#MVbE>Gt_mnMjvovTg zt}{by<9TtVhP_~&An}YxT>a%L7qVkKHgjBCy7w^VB{hYPj|<}gfUV)daX|HrMQ^MK z@07ymfJT@`;hM$AW5)3f#Z}ktX3|kQILAOJw|Lsm$5?<y;#YuMg8%{dy{7=qAuJI(Nda5%~~8)G@g(1Fo`LB^)L#)Gm*OfaD$ti%=<!L!Y-c0dSc>bVl`vgnA>h1;|PA z^!hCLePTldXgG-6I$sV&O+1(zsp*k)jGl1$5gISNLBgy73D}U;_%Q&@6sotW&t%5_ zL5`^`_G1Dh2Pdh5KMztU28YpDrxgV#f;_4^l)}Gr>p)p~;O&K@664(($!u@mS;+)_ zVtCwqXK4l!`oeI8A0_$zM-{+A@(IRkW5ty48h+orHEEYptI~4izAcTNTjO{UHV+Te zH0$tWNC2DIh$;9m##+SJzxw|G%oU;}vI(+mkks(P2?7!<6srPgclnq_pwZg(eo683 ziz-WC>=Ya6bi)YmXnX}heg-Ar#;NQNv|yEVVIVh$n}b71e1n#t!+7X`{9~S~&iEpJ zF<_)Uo&crwa;M>jZ`FiTogn^koE{(zunX{4HcGzkw7{8wyR@0AJdktcKZgns0~Ko% zv!BKhO_l``ly@5?5=Nd$~sZsfvwxd}7RO$9$NDz*ADpA!lsgY}Y z^Ywvjh!fIc5m=ofI_{0JCOr^9jMDgPQK|ert5^WA~hoHY^2+!|);P5}jILNDI z%DQ39xM9JDP_}l5Ku+qBnU4qt`P#gTtGnQ2MNZ%&MtTR#HTDe%Yn-CmRCZM z;|77H*~${mN0%F#2WOnK*4}40#Jct07&UDt697asc)`v|sm>uG4RhSe((m3eYp!wW zI&b3u zckF(8`pF()splmvX|8hNCe8PTq(Cf~fzaQ)s`IY%*$UUI0-9N(NK(S~*fDl*;)Wzxx zZz}Dv*6$|uo4$lJ{Ku*I$6M~)0{{wbZ>%e;EKNw}laEg};vgL<44nqUdBVw{b(`cH zFP+=~1cW)T6xOs}d(9NezeK9c2d1$K??$N*9! zrd<1fjEO~S(g6X-Oz#xCJVpZ8cB-np;^+ZWv;8oR#UH7JM0e4J{oPhXC{sh@FBrCs zi(Rd`PaSRWr}dB#+~mRn$>tc5D1rH5l5@h0=!%3l`^j4Rf`^i9I<5|4(N!D>9b7#1 zu-TzS+k>Gp#3+}u$%WbCMA|!fSODMCR20CYj}Ba?&UsWu7x=VySpLh}9Tf(iL{bZyb_GCHn)&qAIFJ!OxWxdD+#Hugvy1`=gUXo^2Z8csDB3XI zM(iE-;3#V+Tdxa+(^t+QPR|EfY2JefO#*%7M15-p0e-Ql0=@XwDNV{6*BMZ*!-ER2 zczELy>k^M7qI+-e2Yk@N85FQh^XJwiIYwtsaqB3VK2o**aRFZ5vJVh*VxWkYA1y5P z`^x|Zi#Y*li$I|zBCM{l2(}|)PUaZ22%w+f zb@Azz(zH=N6L}l=g-*nG5cZgJ(MO6TKrv%=cyWIe7((mn{+GrD(qBXmNW1j<#5NVW zl0cr7Snmz{-C9G#ucXK)gVZ!C?~liv58QVnVhEMsTbeE*#mN^;e(rt|={ z>m8;2kxBu8Cve|QAth!Mn*FLLvRa0-N# z4Dn7L7;1gm7zEK5&sdCT?FW(I@ZjShGP?p@V1<3x>MUpnt^1u%#e#8IAQQG?cuzXT zi%J?2`@lMK3WAL~IQNz~)B>*x=smg&TT!lZvLr(2@qj>EM7f|`Vo{L9+MT-VBEfGB zXESXd5i@nDv~`|2B?!2@321D1y&UnI5feuf0kATiWb{wevz!;=dq=0dhg7`rW(MzW zFqAx*Bn8($cxs)jau8m1;}8`t^4c*mp0zoW;(>p$kwH6uSodfL9&%I7)=UkUqR+xNHG9!J182VG@^6))Q-2)*vp%@J%;3Ilus~gE^dRJD)f* zK%O{e(T1cBd}EmbsARJ3ZQ)%D^!#NhC$nO~ATYVFMLP5Z6A;7El4f za4-WD=~os`-f193?HF85hifsbu8djFzsoq$`+tnJOHHk#;LESI-X|V6i)+P2;=QKF z;}u+5t6p`SCK6%5YJ~v3m}t~9e2RlB8>_pF)nNKN)l`4?2egz<1n3){@oUy8g^coO{&7UAtK1IEZ=)I`IYm9cOb4;a zF#_5sr%|kl@rH5&;50$1|eF4IeJy)TcL+yVy5t z*R|m(UhOa+3(qmZt6Chb93F6N4PKlkGcmM+3|e$1xx~mYD4PnQ9x&h=RCz`I@&F`x z#?r2w8koS?d<*{oj9-j~9fanR1E%A<4LjRFN3Wa>D}hr(2UkP&&PXG%=^Smeo?P#P zA7s8J{{R`at+FL8qYg$P1n?0-v=g3#jMb#5?E({{%Hshvet*mLVxZ>>Idf>3x#Z&$TSvnj8bZE0B+-yi1fM9 z=M%g&dR{T88ol8(~tsWNSa&4ODIRQHf&TF1qxKBjyc}fHYcJYWM0QG=d zK3;G@Y&cJ*;a&V;LBj2nb96jIz z6rS;tBn6llw62^G(CfTN*3*LwQd_hR)$xNscOmx?ug~iktWXnPMrwKMFUpUl3+#?~ z6mYWsb75V~Bpw6F`@p5tJG;SN#8KlmpB%r-kHC*PLw=Ok;}q78k?FXI7?{r)%fZ6o z6c2Ws{mU=!E(?Z@;#Tg(Fabb~8F2k`L5T0S`r+WJeljrUPM^jB5a3;4aN5Un3P7Bx zoPg!0gHpjqOVTe&p~uSmBtvFRV$iJ}HRlot4!K+wXlCgS?s%UWsqpt0sw5yP=E#Cc zNB;mTenZYIqPry*4qUI5cD#=tj~Sq$SK=i=u80?m0T5XL@iT8zo9&kim^Z%8aqK+c zhN>G=<#vP`=LVrsy*_@)exEoTy-Tlt_0AieP7i81W!xg`6;>{ye@4GPv!y0+wp~tr2q!1RCep& z$%gDky%i`m?^&a;FeMwRv2|*3hZ2KV?XJpznwoA+gFpu8Pqe>5kkXLdnEnF;d1I$x ztg^&)&sh901tM?Z1vR&L)XwsuCR7QI)($tL0JvvDsA8l!Iy~dB<5Y`hjS1^1g5bd! z*~3lUczmlMrQHntV7%{E;LcL(whpxV!?;WTTExF z>`JCQBBh=e-aawgP$ffn%6ACY;xV#3>4uK#?lXc{hnyq2Pvpy6QYG{--q(wZM*X+D zg*+_M-Y{h+d}7&nyiMk;VY(SoK#z=sXTtl%Xn5inr$^^BF5AP?fop+G=M@II`u_k- zU)g)!5DfvX=Rhgma5!)KV<0j)bB7Q@Jni|xqe^(h+W7ODlP=KX92qGlj7uNDX5oBq z6{rr5a4rH!=N~2JRg>Uc1U8zwaT!w6Tf_^pVfip?MZ;AY#K}8-vMXJ^nQIrjiCw2| zXaNul=DI%^y0D<#f(H7!InA8|mOFLGB`MFw1|6szn1KQhFI*;Y#2d@f5@!tm0Ba;}&U~pe9Q3K;eVj3RvLZL%ulzQLmHO!xIU7Af@K*$n~)r=O1?cxVmY+M|fkVd>LD7 ziQ_F!9%qvJb&05MN(fFjM0883h#F9eya^g|JmY9A4f+NTqbpJ$%ZXJlZanIj&v+sR z*8MC_#6{M{8;Yb@75gK+weFG*dYmrPYQQ!Ck!L#Qf&!m8$oM9zTnTuof)B zYFl;k7;OndTOUU>`Sp~%a3_w(0`5biIEan3_1acSND5doI_x25Sj0CLb{Xc`=J>~} zlcZI|Wr!1*)*vxBT|UXnQ90)cih#DC@zFg`cucI78AgR&AZ?}<#s)C-<8XGDhgs0g z?V=m!g5h>1#5^w>QXSI@1WKXO=G53a%e?CxDM9HbIQ#-UIFuwo#r!x5V02<8s-3qt zFr{Vkf}fKOjSvywhtL-XubBoADfXEc>$<70KpFsnqabHWCBXaJ@aHtQBED?>GDpOa z_!sCmf(kCl<3e6JFD9R?Ng5#PC(2HsN$X-}Xy&EKOD6dtJq?>H{T@kZYzPHyqf zmu8}IU{gmw%d>Wzw3ItS4-WUh9)t)h!F>r1iH>4PP1fKK1IUhi5E>Mp)&$3pG^6-s z02fX>!VovUwVMJJ%jG!phI~}eO0^w<)x&)sDO_Rh1Z;=iT)Ws0bDrQO!G|_ zXzG|MHNdNGvz?fA#aBrKoo`r8r<8bnm}%aY!xyDF%4gC*I#+-L@@CH_@GvwRVA~L! z5~*25TBdq=p{Pwug$YB?I6ifjCOusp3}YtkK)=3!d05bP@7|IAb6@fnhtA)u5K_^I zaQe&7aa;JuK@T+J0Yp9G#4ACrBTX&daTpnJ#BueN9#Url6y{)tmxAKx2d@~Qg&mm{ zu(w{Y~! z77qiHpp912Yh3F)SuRSwVnz|5bC$j1oE#wVbNR!l`%m?j0!oE^X1W*5GK+aP$YUGd%lO7@aSxvYdBJiS0w)yz z07iI|ZE&;;;rYPD>!?3G{20^yu?`!!gH@Ja3GKxPCK#(%z)Bc{TMV~OTlvj_NlhIo z@rC)cf=~OGXKdC=1tYLC7b z1%wzu>2R6B2(!Je#C6`WK+o}m71Y%?myS;LaC978v6N+4^3F12E~%|?RRrL;`5LXO zwqY-~y>AJJ{sgIw0;fj)u~R&vV>zY5_kuhc$%_v2oJNBwnvEaN(&020$`2f1bDt>_It(Z3x!oW*$~~_#_#}* ze7ojt{N%^`>0ES!onfO7yT6m31`qeR1ad-=1q#mc7*t0o3Zc3;t}+Xvy5rze3=4MF z{Tw%1%c?*G2Z@z=L4-S6(e27Lf~{|ahWt3}Z5wT*MZ6QUrz*v7>jZH~XJU1mkhawJ zdwu29t}@$4IGg_f5SKe1I9TvC_G3bTio*sZ3hRJ4+(dW}TA`-4w0R*7E|pdKg%3`! zpvbBR8z|@ia}*GWQf5^g{4qI}F)E&@eQM^~T1{#^<)74zfr$IloVDKsz(wKj zubdPhRaOhDATEl%Osk3h8?h8=tQ}~8?tg&wj=Q4-4mCz&ohZU}yZFkQ{{UsX1IW~y z#@h0Qww8_|+%7cShX@cF0A2aPy;(^PA0X3*Dd32rtvmfP6hH_vhdR31!rf#TZdFh; zQm_r?!J=ny4FtXJLnU_aB{{=Jx=KTVLckUD3M^z>5Z%46P6?Ipen`dTT>x(7x_$n! ztvaS%I3(p?j5@#$CRs9hCq#DNtQ+WTq&(j6#7!3`1v0o7ki7AZo3w; zN_N|chzE!M;g%zL7!eeHGP7>F<24FtFK#?qYs-v4NKc+|u!Lxai3LC2F;ce+HCCI7 z`1PAqxuFBheB>Z3%Of@UWUy9!vr4{>DFP%*Ot%Q<%3#_66fh%6TpJb#Sf!T_c=S*8 zNtpdy(LaGlq)tbX#feRC0IwLiZOON{cWqZatf{FPvC16kA>&d8k1acRb_rHqpk-x-}lK2mRI^gQ&&U z0P(hO{{Ro;ETGps`oV2C%01@&L`XO;{{UGUD3wPmVdF$eaqg&Sk7mv)&sc-aq|n}2Guob!@L2`aeWvp zk_btR$XcQ#=8@LUM+n~?WfgSrUtFt}KVunHNH-w+aXi&aa!mE+)@rCT&KY2R2v285+= ziw5tB?-1?FdOxb;qklB)Q)Sj1*Nm+xL7f8@dB~~mXd!iXVIDRfBK&Jy1gZdc;rEJT zkm%*)X|=ZK!NiL80e8>vnG|*X2yRKQFBrEg*YJSOkWc-SnqUKj{{YYJhW%M+{Fy1> z$$tu9NF)I_16}IkQW*PR+#Dhy2{`eB%9TTm076U>LF;Zv9ejpSo_UukxIFL&^qAlL zL6{9lBo^0E$CG>fxR4+uS-E@DkH7?$9rS|K^Etxe>s%gkL`LGoIHbs32?u6f;PL5! zHGDXA{-dvAdmgaSf*5IYt*V~~fvgLFA9!1zaOt%K)d~b9a*Eo`Jx&izW!Q7?d8xCz zTsYw&e|XJ|^&Ga{8NgP-_{Y8w)x%D}TmCW?hTAyBM{PPV*`eE9Q)9c{MQhBM%ciig zZF|c_LGhE0e3*budce!G<2Vfi=LV84uv56t&N|gPL!3Z_C+{Fzc;^J@+8me-w77Dj zQGDG$7@Cg#<&6(%fg}MFj1g}N(XciPIdzi}wT-5f^9d51~8ur$Cyk(YjhBtw)7nQKc6r4bfoRgAOMGjG7(`C+)7@w2_Rbt8ia(6uNS|QmOTb>! zgN~lu&Al~WE=T@7eG~b_(`I12j9xrq9Q;g5H0V@*OwjykEqV6aN5wd_Nc~;ZJbe4!1_!_{EGKrEICB=wBh@ z8pK%+59J8_%pV|fT-F*_rDn?kQg`9=jnpXH6M^vW>2j`HWVf?+rhu+9*A*j3 zF#JdBI}8Oa$%c&}tcfK6@p+iQc3_}Goh!v$)&czjE270JocEF*5yG7aCc4fzq1VWv z!O(Z!G^Hj@fM4arCRH{0%pVXbY>FfaMixBdAPT8?F@$AWu)G+}z-bAG@ZWN1@@1g(8XkrD${I25GCw!%i%6KrghC|a-doYFVgp{*V7fMY!4i7tD@T)C zy=L`zuej}zy3htf{j%GP18d|qUC>PyY96uCtz=Mg`?3i6auMqA$?pFuK#cG=99*AK= z(whefnotXHK~Ds5Y)=W zYryl2S}1nM!oCLo0Jy;f!d4F^NAOY@a|^O`1{66^us4k;r>E8`lb*9gm&ufp*IUEr z#RFq`92B~EUhppHXgudaf@(7pf)6h)Zi=z>gwnnnlG}WJ=AeY;y?@+$cx|}bgDk=V z@XpNR{DA>F4H>$om*LMOz9x58a+$b~2dB_&(lc?@P3*UC+LRl7OaLeb=*7`A_;Cdu zykdj^^xku4sn9TwG~>oUBM0hR6QIw#pEN*fiA%$<8H@I0_nMA{t8i|^y`w==d=u5c0Nzz5N@J9t_JnWI~=(v zmX7WQx@ot`^rzDJ$^cW(7*H=4t})(z8D$W?(ZALgLiqr z5C^r&rrnr2qHN(Fn=sO*?r3WleHfIH&d|GXj^Ki&Xb1rvB6W_syUHX-on$XNSr=-h zUQzLu<8%=4E3?_G2K0-);6|ywFZ<^oEeLY|0DWR3(`>;_PKdm))h$?B!qSmUAdv76 z=1(mH6CgSl`Ak0{=MnIMVLTj615LTIcn3hW-0Rr+z^&UY zVQ6hRq5y6{k-wF(IrTnSy$C@C**kWjsu#`%Si%V>r;C+Dzf#m3Z@iKU>Dt6^aFO!@t zv!>8Je7Jy!kgTwMVEvKu)s$g4PXmZ@4N{9MZlnNKtqp| zy|cUceLNx4LE?w?klyDXVg2BdH3cREjq z;@Fsw5+u{V^)k9w@rHxDlG!KV1AHFP@rULCjmiyd=LNmzSd>7Z9SYo9+>{lrz~7m1 zaw+jD8e`$g!%7rG1y`T|%h03B1KwA?U1-$?KpGp?+zeH<3~-bpDeorv-2LR?Fgve6 zoB2*K(WJG`TB@6Pz)vygiIY0%_G3f0hJ587wZKF+W56qJaY8=wlOQL?0X8+cL;EnR zy?2*gRKz;c?-s%f#sCA4UNBup1khFwBjM*Zmk(GD(T;{oFue<5tHuWcqtCXH_?QW|!6-8RvxVSz z>B~?h<#Hb5H#@+%nl<+eiu6aInn$tnYXRcVIcSpd=86M3zz0d&*_r@xwR^yVPhpBO zv(3gzZ`&B4tyidV<^P9J7G{{Wa$)|x809rcKA z5V|x!yp9M#X|>pVhnK9a)$q$gO}HMth&LqLWsqQg+ARhuFNCoU{xC<>J% zPt((aSyu;cr_MwGQ;VQH#i`tmmjDgJV$cp7yTQgOW<)iC#UpD?$xL804JAUr(cwp0 z9Ne$41Uk;!T)7p*O9F#vz3Z6qK61D(QPc<}Th<0|jmQ0tE`z_*UIPHT4*nnWk?8b? zdgQ?&L&NI_(t&6Vrv)ZT1Fs0L-bq=Z!UhT+=-qDzgkIGHIHAGZ#43-*a1JnD1S4jR=-_ie-B|I0*7`T(>m89U6f$c?iU68-la#oY>74NICk0qT$Im#MW9C8)D7}*K zV!Ye}Bj5hu>Jy2toa~63O@vr?4RMMBd27b! z<2I#-Ua^pza@=dHT}&4y^q918zv+X8I^Isa;shOci{=HM@aRO)=M^?&SC+b9jKJY_I{o>lY%A3~u9I;Vt)({>&Vse~$#xjW{xGX^A^^HSVIvtOZ*_$I< zG;%UFq%gFF}F*urob7n5)u~g(YUhfmUdnJ_WjJ`Si;5(x7E3EQL z^ko5};kwPbiIgN2;uvBy4xaeV7TsV-$o#T;5PIOn1-_iPaGRlu>9bCUB-#W}Iu^XV zq3~jjxWNJ@2@63Z&M_tmL&2Wf&kM#?5{Qys6UO^IVc?~3x{(zkMxR)hLp&vP*OqMe zPV(}p6TkQT$8)7$Se$|B%?Kj1g}=lZe}`-b(*#S)^Z_Z=Bk9=}qooRS7w3|I(dM_%$*y3{}wUuLXd%DR) zsdVS_ydI`DqXkhHm0jRMi!j82D|RRhzG{({_gMNm^MmcAXJ4EfWGLO{w+m}iHz_*9 zdQ~q@&x9x8>kI@PkmO7g=y---fqU?{MH54U-BJstmNduCg0;C%hQCYWBAe)?$kWBx z`h8}d0LZY;rjWLbG1k^3q2I+d_ISo3T{QU)Jbp3B%U-%D4vuP{oOJ1F&<#6yf9nGh zeQ67*?!NWBrl=o6IlG6SF;l8i>jMQ)h`?7-2gR81#-fQL4@aZMKE(7JPK!BAeRjn# zE$V~=TI&I#Cig^Va^9j6ym5(Z7PXhJuOF-&*02DDgGAqw+)NUnt zp=jJgMc0yRco)>@N)t;>2>98I{{X)=2HsL2;=x1*w1WA$2fT~YKdj*uX^2C6Im#j) zxxkq<`o>RNytCb70ab1?3F>`-)}BTS_jAcJ_V5-qcl4j=%>;(c2;Vv^)Jn!yg+KvX zJn@ToE5s@CW758H1b;PP7~Hd8g=3wNypLmrAje3w5|*&RL32!sUp0ZOXoeJ(Kx7&S zP3##~g{}vQG?hulNMb12beA`ksmtV{J;wkhR%R6F_gl*2fFvrDcnl`b1g4M+n(W?k zF-oBY5}>wkoCu@7&-;#AhS2y)A#6M67T(_6;&fMVxey{Yw8Cl8#`lDtL2n3UlgYj_ z$nTq*bGzOMh#S_fDMA9h7^6PCWI-V7$%rca;HJZDLW+U~w*|AjxzKlz*WY+>Z14;N zwVUG+2bDO;=u&<>VIc&MhAb5hed9#JzFZ`7Wtjw|cH%e}=PYeouCV1RHnRkUA#RrS zlZIx+FQpPYh(gTF3B3e;cgJA4?Zm!pw> zFvwLy2asU-FoCHzU-zsXBnLRRX#W5?%Li{O*NioE9!04*X?83LT#bIOY?F6h=vv@hK69COuvxi{?Bn-PgQy!nLA_^sV>v zk)0Tq5eS4)-Odb{9zWZ`JOz$Fq5d3~Q(kUrTenBfMQ*Ml2CWt3zVlPA3LJq>&AK#Y zn5qf$m9eI607LIaTa|-CoinCQW3Gwk5CS}RH*lMhbAJx}Ykgn5c^C@EsZcD2Bj*jN z7vYdUA-@TlJ+JOGnwQvd&ccV9j?5()>blLGrQ0Gjy{5n3GispsvBc^aE`iDJl)&E) zhI{z!@;M8TwnV~AXBbTbrGw|?n>t?~Hz`h0Sw*>s9~2@`7t%h@c#y}GqU+*IeTSTS zdL@sdDCOlh)=l({Yq0#j?rUlq^k6hy?MSS}#x8B5RwVX-pVcZ3sX zmiUVzTm6DIE0yf+D!hywPfPW)vL@-6lPzH!*#26E;Vs4A6P zl9&0=HG4Gr$AEy^huq7iAD7Tgf^4LlnRpOFM_z6ukc<1kRCAz~ok_i$`pcD2Uh zlKo);q_N0Bx2k^dxynP{TAFuUCJX6h6A@~R;{l?YqMBpLkC&PwqQu`KadI7pSm|XCR|ivb#!8DX z>ni#<#zOUtYrj|{L(zdTa*)Uyr02#3_#vaT4bZQcIL)}EX5QX=6O48y&h8;^)jVR$ z8u8voVHfPlBlE@| zzVI^|9&nL1c2&^faZ(V*Ac3{!Vdx_D-ZqsZqU(&)On`#U1?)jRnDRnS+9Vf;* zvQ!1$&_Tr~gT@j+9A22>)XHF}^pbqPX-$r0<^(?%yrU3qZ~X)L?-U$wD;dni6#>>J z5OecAVey6SpPPu2)Aj6)-|+}1vvTmV&`rsJ(V%p-wfwl zfpAp{=<>~A;Nmp{{p&W~Wp*D}q7q!a7}dX@0fHTzF{6iPm;c@T|0u)!_9Mg1S%8=jAZufL! zn_$*g@0Jiw$a*EJHKw&OUu2T90D{e~qqy8;r__Z;%5vbGZOzvPV^pL^#ZCFgwoEVv z)_}da$jGTD$egyP!yoQ3wKu}U^|k;cf3+C(XCr^&I7|bH?h1fn<&+v52Ybj?eIX1) ztx$I+@mR$(9S$H0n)jzBz!ksFKmi2(;AjeOMl=Hai;-w8^^3Shc_~033hU-Q!CT=c z?=B<6u}A#E7>L}3LajDk!<^ZOi%+3Iww8Kwj}|$XVlaJ)qaJp!J2-4eRn9F18yx*T zWhf^D9oQ<73kLYa(_Xf!U4^x>8Lqj=0HKPLVo~2&*9S~EgaOHaymO&Wy?_P#2b?s4 zB|TG%!WhM@oxQ2qf1t&#a6S({0~Q}q7K$Bc7E6x6nIS7vR&pPlFdW@C2q@749rGUg z?8QRERpcJ+#v7f*~ERA#VL zka#=9Y&qGR0i(-^Cg;WgD6Y4HL=pWk>_iUJoKSZo+mjVvc|r!$oPfKU-WBU}ysldJ zh_(+H(BKBXb7WaL#Ut|j#K0;hoY6z=h8BdlK5!dg=w;%0#S8}b;(OpU|9ePftjviH@6^$vjETPCo*Ex4<%25DTKYa8@C@|PuQG!C2!%Am{Z z7jO+WtuKf_Bj*{t-#)SYv+n?ib=%HSd)e6FVWDRFXTS-KRRj@_I|hu>W2LQLiLL z(H+JU!sdX&tIc#B**oVEEJpR{id=36hEA0SLU9!=$UPCrIu?dCEcbCtO4r<6z2(00JQgrEb;rz(hsIEdh&hYxz^ZK5*X=u7>Iz9I>kq) z7bwUwDQV!|MbgJuPz52z7SspxmZa}o@qmiWA9$hcFT52(SzJ0{IroQU9D{hbL8RM- zQ^xRDvA}N7$5>nAsW3o+Z}#_ularg5!h6jPm%6E_FICb5(J%$ZaQ z52a9;N_vbIo?x-fuw*i1T9+P~VA7hsD?7@%Ec=rbA*OQ?3ft-DdmfEb-eyMYZZO!tF z&fknLqSq0u8VC=4iE-|4;1f`%25uxBOvjcS6QbH(eWnEohERzdGg14LR zIT=9#_ZT(KwC{4j`o-M<=!Hju5>d8UJD)Y$MZN<;l*s@A{uhPD5-j7sSpzd2u&69Z z-m)Sfs$aPdZJleE{L6yojwi;$(X5{GH(`x9vITdY^24p~c(ydM8DU7I_mT>n@DU%X zI52ZoAmR#@-R@(Xp+KQx@D%uYF)k^R)CFgf7pYxg5rLSRMHCJX)*o{iP{b+?7rm{4U1^%OI+}>>g(sNRr9l>IIPT z+K$+V<#8`;W!f>N(0~=T9BcU)s`nMVcw3toT`e8#;f}L?FiV%?IdCBtNGv)(oU*be_)!&S{MLGGw4oT;{PR+nO3A={r@4S&mUpSEB&M*WIft;!y=31J< zeq7liezG8SH^vyd2JUW`A#i~#=hjAO+wUAVwYjn>IXlIAhF^H;c=_iDjgkE2N+$p{ zlu=&pMgYw>kpZWOWfZ9sesQUI>l%8&5kELofQ@Uj7#=bxEz7F!%*hH{)&YF4J~A0{ zcZ}_38-1^4A}xMdzFOTs&Jon}K{k=ND?jECW<0b4bqhvabG)3^V1~D^jH^S!WJ`f+ zaqs7oW)o4xvzyRsm)-$4OVuJp57WIoOf3e znAElKbA;DUw~`w}z$P}08xX=G`t$6WQ#%ahtf5X#y%|zw{+-jVf*p5<2pFL_0Dxxf zgA;mbH|c(GCMZLLOkqXx^^ITNCkCQkjqUoz!iKA6Zh8qiaz6pL3(yY&*UE8xOhs0> zs!Aekdcvbo1_0AVelQrcLOwHi&cUrIX;=_rieTc+T_aPC9&sfB2sbAM3hf5>w<&n( zHPWy?mjKa2@74&V(D5(?p{|_XcP$tVAB@N-0p~UsPfq&6F`(retCuZ@#s<3ZOLIuO zgRss-Z!F1V=ZCy-E)6$?#ZGlxeno`p`&fQYc}?4^JQ!lgZI0LCl>0nlc4T7|c0hL# zc*Q|+3fi!#NUn!dE$Tp^>)B^PamFT4P&1*Lo-`oVRcEHnfcrM|Lm9sQ`g zFvUm5XuJ1{$H13q+(6M!BnB|V=@h4MQVPg@;I^i=5ukThkmT&j*C$-GHh`D(Fq)mS z(~;M)3?xX@LRk13{o+G{h{RIuaO81;uL9ZfCVa$6BpSZgAr!Z*KRI>y;kWT~xk!?H zqjC$aGeAOcUhuR|uKM=?Uk)YK#4skx(d_DGfDmT+{>0ymU9I)MS-AY4I30rqim5vW zGuB*|m{Ou;rYR(bD!TMZ8Z?VUz}hD6kx#{;RjYws ziys9=SrGxC(uUUejvIPAwoQXjnzqIPvJ|$+VZTjMraK5n;}1|EadsRAAX&kWmGX+V z#h5Cj;LVEzEyGP-j3W3Bb4*r-1F?n|k=rqgr&I4PntpI31Dj3L6Grm$&RbaTyj_PO z?|5_+7oE8QNA+`ru--$}!~m1MU~R7<-e`ecxGQSlwk7Rf-X^rSn~fT4TJPRP)rJHa zx5jav@~0ZZhNJ5oDX*O68(d=Qt$b$V;vM2_}c=L+= zRhR+G>j6O3kHW5=E$7Cp3#<6YVA1Ccgd<|}oQ#%uGg#5C99K>-jz)*(G1ha`jW&+8 z&M*oKlfp_ch@5MO3DXEnYhFg0Gr%0*Ik-olH;&?m6~X>-tq^_T^cRPpIJ|fr2f)L+ zZ=Ut*ISv^HRXo&ny_g^{1F6s?2i3?FFuj}OTgLcjSa=xJNGMW*A{*8lh*chSevU43 zeES>G{%%4$92Nx})JW^De@1MO==1D8zhi<3opp>GwV{B+S0@~Ci)#h|dS@eru18qH zf#?y0xWMBefRx?mc)rXE^pGU?2wrhKC^1T>@ZKdCkUuyfvjE%zg8b6-=QVD71Dy<> z35^6G9_wM_ZpdR9Y%+2HYjT0(0RU$e&#c;$fJ{kf`m;!q+uJy~4MGfP8O2W_hNvFC zxq$np&#d0Bl5OgH!f9iv1&zD4Z=u8tU%oFr^+Re1?_H{|>mdXXs`M2|2C-YN zpOmx+5Z5;2D;k|r6jck}jvKiJKOwOq&V~Lk*b8#*3Sz7XeGtJFJOt96=FqC+Fng!b z&w}9XHWKP#!glI4c){xJq63`)NNMQBx&NmAFX2}}WiASB@*J}ZWS`=ee>iBsej^e5G2xZSZK?6L z0*1Op3AFo^#I}TqwM)vazVL+$PX<=^SIb!5g!PmiKcysS31SN~ST3j_9-2~MC67Kf z&%6L>J(v^BK7eaj+ND2e`EaJ*%xlPgWDqTl1J*Ba+$A8rurV$}0l>ICcis{92xW+I zTR1Zr5xfAr03&pP#$K0bfP#Qnl;7Z>)0XHoFkB4F?Az(KA+B^7a_lcX9+&G9?5BXU z^StIRD2X?-BH4rmxmOT$1i>O|-FKXZg8@@gYs)l8T-Pis$0l7C>erJ9Dj~4N#E}`} zD56^(cYy)?U>;81Imc$y&6%+tdoobqv~oarn#WUK5z7mWIRfMY%fo<9cQZmKmO5O^ zbAko;>j}|INMOJUGrSEb`5*HoMP7sZ!-F?lcj&+i77r_3o zpcTCA#bK?VI1v`{9T-Puuj?8oREJgzbc28f+m zFRO5@C(*%-I5n<3fCM9107Fv=D_9%?#>&xgFZwQOfE7`uA6OGQOA|H8KAY{tX9H*m znYV7K&OO9~^cu$ogMp#-{{V3`sfby44BToU4lNuL0D)i`$UnX3%&T zjlz`=Rg2#7J9ilG(AV8@hDjqTLQVXWG)JO8!W=+7w&rL6ARPvbP&P^`fl~6BWG_e$ zv|^)Fer|B#O}$>6Ygwz;PV!$#HA>Rfvl%KRmqNj2AeQ}B!J)#rBCyr49?ts01CC)$T7Y18 zCMDIWD+)W?&md)6p|k}ewhw2lH#0`;s{O7SQc?;5*o_IX-&uIZ$;}E~ms+!UiKv1E z*EyhV+EoG2psu3aVy+D2fP{HE^MNe8x2#iW7)Y;#FhzlWaTg7^RSR=KkWNRe(($_o z1_E{uC}bAeMZD#>VWKWkM}y8NE2G<j?6&e=<5@xUy*lu$L~>Ie)!KHQJ31GQo~kHnUORFb~?d7BQ__K$HopJ zq1QFQ)L!)Wi7nD_KON#e044pjJqAfM%Dcj8MQr)*V1zCA{DD=_8^G%t7N+74X@e7A zTjw+{J102_r#)&Ju^l@zOQ_zB;tg_D?+6CLC*2fx`Nf+M=D(BfqlS1^h&5c~{_;t8 zTl+|!px?%Fqk&O0=@d@?0K9ZtogP;GJLH`2EDXe3z%2UBO5B_%=RYSWvnT*1N9z$0 zUci69oQwd(Xiol(J|=HUmyNj6Hk}{Na(u}~6(QQ)}l%1fq^c9z-a zybDr8rt1f~5VGq53<4ePc4Bb?lG^oy$FB#qtq&gX@uU=@Q(qar#?p9kOo9zbfHuHn zEf4Weqs}1Wz!tAW#TkMkDNU5I=5d4p2NT92+C2qvB1BTt%70nDS44jah~L`{s&I=1 zZ697TnD;nH+u)!3xSnv=WLS-c3905#tkAq{w>hbbB84G;pEFTf*{_jf?noQo+fO=Pn-=rxdA-kq;JQp z-52f3Mcv`V7+)+PfO#+02+|!ca#|$QlpDa4ka9OlDZ7X|(Xg2EkD)!TS`TsOA)S*I z5CD84c-}IxvDL*g4*11wy4FT3y4Ri~ij>zFrd`oaUGnni#sM9Tqo2oq@UmJj7nub$ zD{qWrL};+zI6F~!!D#Kk=_@v4kO}NHgqGFbS{xm?3LC+t+0nhTFRB#ZVb`(2aJ8ym z00Ry95T5kmg}Nsb&h&V9~& zkL(liiZll!$>#tXbIr>Gdn=SEBR&{qUr>XeXVK0p8ybY>s-46!2=!^qah6D^#1<+yurfXzH_VbYkzc7=a*+GDFl`tO=(MP5HoHtx>jjfty-&Yh! z5ZSDCuY7Ba0Ml{~>HGE8atLWR$a-EcS!9?34IQ9XKRD-d4^BjHIt$mvch8(4u_>J2 zhn$TYkC{ZU;2w=_!Dn>p)YIWa_lQ(Q&Q|a6{NO|cR0>I5Krf5uE9knp(^X+R>Cv3; z)jfNFb0vsZAoN(akBS26-?V1CD@TzA#=Zv;kN^;PJB)%>nv$yLHYe3AY}|mnWtliqQ&qn_docLy7Zi9-i*sI?*cw_j+xwZ!TBqcjvG? z?01BjQUgUuZRZ#!;8XRrePh0Ht)YpVEw{V;Wq=rR!Xe^{IAYM0SDaI;3WN{`#@q!B zPNAB4&s(hq!~^ROvtX%G&;|mIvDU0!zW)IC3HZ<_0zjY@3aDUF+OSr2(Z}(R6kG2J zLs8YpvhP5A;0-`tMD@Htfm3Iu3st%m!Z)$1!F8v8Fi1%M02uf+*0+SSx2H}75^CZa zD`fMFb-fVB*nX1sTUi)XA(18%Ts zoF|=P&mnDbB(JBx{$h3Aw-`q0&BFYRJmIMq-aP3tt99cf9G$qxuh(W98cwp12={U+ zt2{Wmbrv0F#T`5uAvyTP$Brfnex`13oYh{q!sq}w!cwPn)UF?alL_|V47n`0Rl$YgZtqtj32%7P8ZQ8vVV4=yU53F6TF8N3M`M~THvrn2L;Sc13XjVp;m@Y9u)rE# zB5Bdp_T;_G0=N1XY}Q^Ax20(%j$^U?cp0gW1_R@Zw;g(yk0yr?q)H;lJ{iB09< z&~E@1s*t3;zc>^I*vG@vbE+P(&9Ybcd&u7;%6vjY?77sV-M#CB@L-_WDWjmi$~m<= zl)sRBQ_+el0UVLWmj(I%0I|t|YA+TAV4-w)aJM>u19h5W^w#%UE#DX=3)HFIdv&G~ z_|hPKK5$Kdp_;u7x!o|tL89jrFH1hLn$>3nQ&?AMJ`02tOpOx35qhr+jz?Krw%eyC zwZqbM4QTehvF&v4B?f-r>K+^bMZhpWeBcXblCXDoERtI z5XJ;3Mh^i2&VwSB&mju}>!uHTmL)+*;^( zE*LNe(DqGLF0M5A;$$)iMKwoQ8MH`}0f0A(n9)VT!6wr9hd4uw(@#`Eva*LBaV*Hx zsL-(jo(wQZs=2p`1L~4EVF>P=;xh6ZPDF>+HK^FxK@jM5<2%KW!ojW6$BZ=mb-4K4 zd}ZPpDIQe@>Zn#+my5a4Q3337Rxj4r{7iWPEH5N~?l`}~xeN$!5HWh}&_L(!98Ntz zkI{0Hw;vMLHS3YpJi)k^2ujZI%0iQT;;6fIjxJkwgKhMfRKt^(xs7&g>&8w_96(cV z>jA(ilAXqPi=(&B5yVHConR!&8*xE7JYpdna=qY4i#M9BL(8nLE4*mv2KmYskBl)~ z9vDh!e;Kjq>~L}r_m${Z65s~Q;Kil~m(FO-oKY4RPV!Kw*4#8v*0CR)-cZsx2b?+0 zx>G7V9BcKKgx7d23xY&T=N^0)cn-K#M~j}zUa(FN-xz4{vj8_oj470%&Fcz;kXm`- z`5<2QwNpUundg7uk()In6J;Qjv6tsJ!L1PKLOss$5s0I~hTZSiMnxe_(s43eDO_gU zgT@GXc@6*%a|1MAoD?wk65}9nyY-qkW!TYz)w9kV3(h7EyW8`Er$gD3Wr}&uaMbL_ zAk<1rNa)Y;`&gL&?@g@~y?tUF4NBibx7+U`A?+8FbbfHlx)j5dJUn5=Cm0#D zb)PTKK9>+9UC5m{Qa1H^z(bL4;&A(6$%Z92qVfxzj+@VBkyi5Dv@!Jv}AQ6l4YtF?Ula47;BbsspV>W$w)j-oY7 z!TOE*VPJWy?0j@*>KK6^W*h`s?9uOU+Lq$@5eY0(l)mP@N>d>#y>_e_yWXl zAjMBn3iL9*Op|ISPrT!(G)bVDaxZ}j{{Wcxc`Emn3ENg}(ld*I28U?;jx`!{Vg61H zC_n`tY)%ZZ@}|=ui5f{?VVLaV1h$E9lk1E={@{vjPYzLBZIJ$J5FsmdvBJC>v(_WC ziXF0q(Wx2oVgoAdhY^N=&fi+bGJu9(F4gSA07ES^Oi~+wKn_)zG{$U7;5R$$#hwHm+DuBb zJ&zzE_;Q78xz?59Vml5E@kapG>Oi_G?nEq|C^0R8ei<;3K;nVWfm4j!e2V9Q{{V;H z5Hflh0*C`v@tZym6gIAcfV7?=fCEl|Qy z@4JN*+BrDNwY~G_J`m)>Rs>ey!U>_^!CwLI1;tLakWGh4f^SV(j)hYOfQMJSrZ&HkDo-PVy5OPC6bX2Bi7FIu_7Bz-Z)xKWyqxb@dhZna zc+K%DYgad*9`OJYd}we4HgsN>Hqd7Z9BPK|hf#RQ971FsurN`exE%%Cr7*>&z%|(J z#&HSn7UX|9pfMd71uRR4Nwdr6HC;%`{TSkLqNMH!FMMU1gvcoXBLNiM)y`g#0Xq;i zF7de&JbrRu4QbaH$XUqvVDRwdZ~gxObH=N?luO+@GO==l{{R@TZ(sWu5pj6YNj4^r z2!~l0vhB}9Q@qjw(4IYE+#~w&sE2AP*fETGzIp+*9>{}vSLPZ2c1-^s9IPVz=xwbXr zZ0C6Gq8L6cz#9B-30*OEbqTy5jiEPyFnp{jV;?`3-uw{xz`~)Y@9zOxjct#Q{KOT* zRf1I#-XjWV4kil#H!<-A3qa<)C+v90{4^a-ZY3=%9*l?;s_$|Frnhq7$=k*eh1~6M zR;ng=1V%a!w+h(3R0d}z*{rYxD1D<2*K%HRNjAb_=^=`B%phE4A0)S%uH2>PoNFXE zf63DbI$DbKOUhuAVEAOeY2$xfV5q1YyJ&;pC3497~{$}VB2FG_e{O=nrOoa z->E-<$AR@lQlRZNw^--3kfPAeiZ&X-N(oUz(#YInmg#kx1zZ}BQwk_y5(I!8-Rn0+ zKvF-G?+2&~Z2_vGXn65~rUG0-$a!1!fZ#SB`b~qcc=Z)^QWGrhFe8h-Fk(_3XPk^f z5VX|2dUBsV3XaHwUR<`uSgA)%Qfx;eYb!@sr1rk1N|_1qTl&E?j~c;uriby4gBrYG zi!ov=c7wd~!Po#>rc6Ou$M5R_pCWV)+4ERsg0x@ z{kceiHtTxUH0Dl;-W@er-a*mhBP~2hm5tWT^@TJ8ojF%#wXRaEC+Z@ zJ(iLG07TPxu|~2uHiSg!*UlG$LH_{2!1M<=t45s}X|j%|j`OMgI6&Fx=OR=AKnNmJ zvd-pCE(!}?4}-&siqtp-@OjE@Vx7PbLB>f@4$!4KV-wa@;$Qu+*fXaLO`CWFoIFVs zKi&#g#A_c4SBr*k>kdXAD8m>ox#8^gVCIqQ^eEY?xrxGIHxyyLs}%Pzy;~wq01a&D zYY3%3M8=fbHxa@JAY}vOWv5ph=-p1e2DJG+G6nBjRIPe7$PnP ze+DsUk$+70W}LoHjGmfg<10?Ie#Z*DQji?7el#`R(Teg2pzs4r;bSVPUso(dSZ~b-`PvMTra3?U|GpeNAaSbUGgDufM6dK?#J~4n3UEl!lO*lqT zDgjZx5HCxCB~F0~fdrpD;}-am1+_XA?*gie%oLT3J#mTTPi~z`ISRFL1dcm@Dhj;g z)LGlsa!2fBpxO^v24I6C7gnl#WNnVF?`MMH%?fskSoq2x^u-5}(UBl}XbGm%0Q+#^ zS{8{;Ndf17Oa&wj;%LMcph*V;2V-l5{{VR@&fG_A!d=g8kLwt;+g@;BLq_vhHGO+G z_lXF}qhTI?98G$3_q-FFj?5Y-BwSz{OD+OlFEK8!g=7Q-uk1H&=VG~(hVRPnwu zw)$rP&lszn{;&&6d}L72X1r&n`}n|3vakc?{xG~A?kt1_Rh{9il=Fbe6lg9IfZK-v zC_Sz@4Lh!B8|RY}(4Jp;qtJY2fYqF2L5SY4ee4>q&a#D3?Z-Hh zUvWBoU8&u}(VjWm>_g4X?Uik-%<69T+$Do1{b0 z=zGN^&>Y+h!E&8{V}2Kmm^*s&jYG$y#z$~oIK_bb6pynWE9GSQdBMnuytTsKHoh<) z0x9v$zF_x(Pz;OB@gBb{cCM+fCAT)(yfER73SwyZ3yDoazV9^1dbL@D$f4cA$ZDk5myQUvxhptLN|r}dEyCUDB{xt;BPFAud_i7hW7-!~RF4NXAD3h~S< z$&YIICTK^jb3xO|>j!g8LvVVbdF1E1JL}bJ?^O z1ml%%I+v41D7qSN)=`%3{2$?QfWcmB(IT{^V+}c7hzBIm1gD$pFC^fMkSk6~FN_lD z%ajEKmb0vOV&mIrv@yLg62PKeI5JVVDJa8D(|g0j&;2B>AQg)PK@Y}QQl5CqlY8Gl zz%xuh?(Z0$Bj+@V(MJo8a1;Z}#xtmN>xKTZ5GgQF5+R_r@b3k{job?x-moOT0lXBB z9gGwo?|8d9*TyK5bF4tRKY7b-I_DHePc~s(I_D^JUiF7C+r}|(S6N6GQw77fjO8Ju z=Nfct-VkVW#!dwWv20QwJYj++>Bb2-Z*C;CelS%U@s@YHyD_^8TkVK&4c;{)+a?GYRt@pzDuPWUHz4?J_c_LxXvieN zJhr#*tOvQLtdai!F`sIVsErVEo+W2I?LJJH4@d-g02F>L$U@~^T_d>&aW|aiq{%^k zq4kKydNDQ7F1OwZXfz&D{{R@{tZ*B9z#t*=;Q&02G>rNuCLZi>OM@K4)w2V9r)VWU z;U6UNfU=2CsSm{G2x24Jh*i_aiG>O?ds-8OC?r?WnmT`YAg#LczZo$RyX|ruL1zKh z{+W)q#EZw{kF48XF#wt#XE@PL25NQjf#{0kedW`BIalcSoN*Kj@A#2-&OP6(ZO1LqFM?otaDBg5Tby8r&v1OGYXE>0*b*y#F!y=! zs6HuhD3{01X;B9Sj`r&`gs4JMaDoW_REQAFftL4Y-`eNu*(heua8|K~tw?!vPM1;jvBu@lE z6k(Do7StcZn{A6z#uBH)=LuWA0HHu$zeI&>7mK`M4NJTVs+LoyNG8Eoz9N>%kj9(* zT%GLw_yKTZKOdG)ys-%deyT+!`>-UH4+ znqbgnICY4iOXmcd^Q?5IwtRp08YaOc$SsaeoHi4jhQJ3#@&&!{_TW7dJj_-|7sfJ{ zq$iB3C2p6DB2ojf%V2w4W{CE@Whn3;SP~%|(~Lq_ZDo+CB}?9NhKx0+Y}4m8DnGLd zvOUad#pExN|U6W5;8PPkrTS%`LzX)aDN#I1Z%VyyBV- zbxdXo@E91OS$n(ooKAVf13+5~z4UrZ=PqtYt>C6T7p>%=I|#28>b`Qj(1!WJA^hb5 zzTY@9!^0DfiLUykz?byosO(&gbfzAtMLGJw0y%-YjTmohCzv~w4O;svw|rbMRMWtF zGi`SHVn{7r^?|Afeg-qb;U=)y=cCIg>Ja?ob$O?(s!|UT^7pSeQ?9#t%(|V2ojP(V z03py7L;dpFEh*E(u{j@D>kw(rA6DKIgm#)yC5-F^I=Nt*q^v0+5pa+F507}bS6Z33 z+xf!$iNimU_&)I`wgM0T041jsnC|EPVyBUCXd3?jxDI5ed4KZ6Y$=dUv)Ug!|(XWj`8g3NT*n-k6Rgyxcl=rx{K0qfHb5C|{VKb%Wo z8nirMBlgnSLvRg$+(ZmX_lcfGpPZuUN17!7jZ%*pd<9AbKZG-R!-6S|wDWw$uY(a_ zXf}>ti-0}Hy@Nk&isE?S3EJ-sV8R5nox)eahoE3ib9+|R?DvDfoSCAHDBsbVC2PoM zklw!K!UR)g&K*{>El_jau7Sn^wvwKRjzYs;^@q^zRh2|&q=Va>M)MYvRRb4KoRl(B z*eifR+#DRPzzVB|oD*Ne3J?27Y1s~Y90^@Z;HTbvQ6oHBAy}QI#mpcZUZq+Js_k+7 zhsRj~@8bh#i8;ccSJYGeU}lWx*j5GCH`h6DRZFdi)%bJHMG^GKsBB0GH>r@`qy$>qToV-^aKq;S$&3>DykOuLOGY!fiEVx4>GT+&5wCpn zmyz2hAoE>%W31pi$lABYCr^f3tzJ&Den$8H_lc=U*Pl3|4LUf$mDT_%Ua&xRU_;Ib zphi2#u@H%oRH*VbgJct+9sdBPNkaI1=MptH)*t|e^@0t6y_hs3ePtRLH-nlJW$(f3 zC=o1eZXy-X!etq1xlE_Ydd72)6C+RJ;qBLqh;m^L+VyY(o_NPnaqAT|uj>(^-z;FR z=T5NEZ&1#1NW@6a@|p}=mcvs;Haq96)fsft$UI;-8xKbdz7pW7^z3$tM)(7+4s)uP zSFiqK?Y&@0wJ*)W9iA`k#RY1=a#T3?zgX1a4lr;v9iP2prBQR!Y76%cIr*gp;Rb!M z!jFO*Mu5al^K=Q??D3MOl#gcvme-fJ0c_;1u&^7LyOmd-aRdr-{Ny<>OXVGo&;4-@ z>}V7f>H8-*KBy#`EgO>a^Mz+}IG)Gc6zSd&=ia=e9bWj82qHozI|yO$DgOGy1IK@M zJdXfuaXKC>i|3Ew-_~lQf~Y(W2cVfe-#ug7&F2egPCa2+o|RtSXU6am$!KavUIz)! zc*Tu*CFpif^PIr$m?3)MTvNladzU&mOqJu1p5sjL^uSF@lhzR)|#w%=sINSxG5zHoq1q;u$hh6H}q z2ccX;4(g={qAuZJWqR<;*cup|;%K5~%7Gs|=Qp~NkBO8Az{eI{mfDhC<40LaE?Zm> zpy5taZt)aV6IdOo-xfSMNzk6`lL^rXF5I_HAV#6`4jpcRIa7Z*28RjlKy1AiewbvV zwME9s5<7Obm=L?J3|oTw$&+0!vMvehEI*u*zj;YO0KjRRYcYGWfPfLy61^*@uB#5)*DIBcSJ5L2xg?wB!DW|N8#i{X`(>F z3|2eBJVl~`umvwLF-Xw<0;nn#8B&K2_{oPgHTX> z${5FCbXB{UvL6ye%|BbuL6U%`cgv6?LRoZS5dbO*tJ>yaGIrerA||MK;}C;2lm^8G z5_8TqaDf1LBo5RzZwJ0d<;%b{@Zf2diWls}#_sOiYoI+~E1_~S>O@~RSPRiXTdxfur4Yzc*Y!nZNWUC^LWEGT(@zN3BHZt$p;4e&0@Up z8*)Gi^MXZ(@sA=eSvfjGyxb#!$*cuOhV#=vBZ?R;cX#HmoSgis70Js1S zo->Rad&&u;+T;)}?g<64riH!X{@AWfrBq7L=H9SG6QH|Z+21)>4`AZq?a^>=@?@0o z7n%P67_=sYczZI6^5Mil#o_NN#IQ*b6HTtM7hw0qgGT#Y{3Q|y8>6>aG|l6Tl!+p5 zQe*xHlm}Oz#zZTuofzVvOK|5ifbS%L^bYY)Hu}R89@}$U*$f{i$mI8s!rvvO;Oad; zc}|2mUPH8#$JPm$iz0x4^TKvFSx9IafcuB?vHmbnx^!o)rVn~D!TDKJB_s}qiK)Lh%uqr;lRk@wU&SlM z2agNQm!{tF z*dNA8$?vk)NhLIfxW|6e{fqQsO`fCvxoOxIUEw zhEsx#!YYg`@R#o-qHZLCD}Yjwo7N_>Wy%~50MK+9UHpa(y@WIYd}6^I6LygYE-?(^ zP;D9dF7gfVNGm$c0r~Bz92o6z>2-v1Ce;vu<~ume(FGKAb}axo zxQPtBVS?F7x=89#{74YQMaR3Bez)yZ|IDyW;7` zZHCmYwKe*|^1FHPVhb*c)UU^kK)j8@2->VF@_~b}WR9+oyd8t}f+1Ueg-6>w;OO0n z2e{QcZ%2$)0a&Ki2{gSpUhlo8fW6lj%_*Glcpi|WhsV3gO*!2&O0EkImc&LBfL)F_ki3{jgGL-VmijwaGi$`RgRw*@WFGvkWDI zPdJ6592f|@-xDNMw;Oa1KFkAUUN0HQDa{-pN;xJ%s8;Uq(6w20f72kLF8InR&kiwl zAFQrsont~+-X9OPd^zs~EKH7APA@p2h|k_KB~1xK+{j8fon<+b-+G$EAbXEwfMeM$ zFk~D(_qA@-&~2^40I(n32=dKg0a$ljVh$Di$S*58!wJgjMlY(Lyp_?G!a#vtS4Jd4 z$xkkA1%OOj1Ssg8ViJ%kxD*=TXxFSeb=#ZQar1}fj$QupJs>>vd}0aHsNy0XfWUP1 zo<4JFS%U<5J~9UbA=5KAo5&gM?2buP5ws3`eC5MFaU@_5^?5)=jp$G4@EwS7XCk4PfG^96=MM9z5j< z?cK^OS1oK{X5eUR=OShxp5vm+*@b5X*pDk_hPQ4oAx~G446#Tt?c4#EYJx)DB}rx> zdP5ixPITXX{_+Nd=Zoto%KdxeDGD9GR#wP^(F;8gGCh;+{kX@(SB@Q`DShuL{903( zj|niKQoyXQMwNNjyN5vZS{%j*c8l|pxdVA$1MHIq*e;=)C&)vrB~3GjM8wo4K@+i@ znac@tp8o*tk{O~@FQVxB%iZx7rBcV{Iwnm#yPbic+#qdu%^=8$5?(}CVDN7iI|HjJ zCXprY3x1iZTmDY{=Q*tC)I;}q&oOGjcv8y_E>t;U5N~+n!C$P~y?Q}Va0|m@#maM| zZqO-3i|Xj%eijJF7o0Hz#QD%P;B<`*H5T0m<06C23!R6aH}IZ96bEb#-)?PR-Yf++ z-nq)a9SQB3bSPI)G-pv{?e!0K1wRbmCM&W`=%%0?0a+$ua81Dk}m z0SIY8ym-Y`6B1Bp)7g?nt3sl9g6VaIPl9R=jZhUS?*vlSWIip+1!$N&%4?pyV-Xxm zm0SL|lOoqP0>R|d8_2^3h5}MfW@!b(%dl(h_{4IOxHxN~b)7)}0PLC$X5HghnKlLa zF?!(N&TS}o-|>oFi^r@=q+a}Gq!-Ve0l*9Ma43FS#tz2xm?DCCFm)x=$&g##ID{6k z0=yQO5!>$%Y}P;xowFcT{2p*oYIAVYUVGj%bnNT(iN$uaj3|PS#s&fK;VY#3#dTMY z2ctDS>(4j^QZG4H&KI81~pUXUFNm#j(NvJD4PeY zvh}hMyBp!b+{eyEZuvlI=C*O%HxbEk6x_hsqz`cs4f3}fKWV7)J4b)cZ14?izySVy zQ-1#d+r=6N>UE4b2R+=_J02f6iU88A!#&P>2NNb5+JlgBi;{hmZ*LWxxr9)%#JIAu9{{VjvIjYnRZv=0jJ!G5Z)3>Pk`dNCjhN^2IoN8oKZ(CoI_AX z{!*EjuvUTgbfg#g-kU%BULPF0ex2xFYB!6I`A#jZoaD$&iu$JkF5+0E*xP z(qHc=@dMiqc?|@0_R0A3j1W{dhY!`ki8&RQUk&4ScujJHy&fKY)D(*AhKx&k^*ZCxLO1rn5j zfd=h8CA+wqehp_u;|&yvie4M=!DL%-rLlk1!obxNG2TsvZ$aKAxNuXUMv2hIjRmVt z;6e>IW<3-wm@6wmQh;_`7uCVq6_no6?|PVZqT-4zDsGp&3pboi!THI((z~Fp^K_&x zwS?sdtd`I{Ns_uj4ox$CsnP`l*DAUV<8>PM!Acqtk*mR*z*-K-o=3;5P!_eI*1XQ3 z-_CT`XuF(oshkKay>hQC#MF0TAQAuv3?}n?60|6LM2`5yww}a-GCQFY!>np_BqK^d zJI%_AXKs{f+r$@)1Mu%|(k8o8_}&Pj_R@Y+^@b#7Dm;KF=yizh%Yh;Vqh7G;py6#_ zpLh|`cf3`Kr8U-X(GK2M6j|g>Au-n?Xx|DH(b7*ik3d|DR0#<$7R?SMuWRiifKqhF zoVISX$>;&*;o-3^@1R@roOgW9nk8Occa{Pwf`KETE9Ec(x&R_*+tug3vTQ>8W8qNo zIJh2UDIo<2t!Kl6D+bU@Lh!`v1&jbFa4G=bc;0M~M2u+t+^(7XzXM)Z zn}>rh)-HNlf**L&P{9o+l3sAENsp*|%i*!<;Kk-|38ZjWMAgdol?uT;9&j{DUT*7(9R`zJ<2cX@`EGC=r&o~IoT0%s=J(QYRikOVj}mhZa9&5C z^OA`*)+X+C*^B}gysD<89x$ZnYd<;C_Lj;!JrR*TpPtu@Z&sv<+b0hd8NIZ z9A>~1DupTIzj#u6gH4mWj{yNXxTtNINgmRZd`vV3ri@ao>b^d4mX07|8b6~Z zWMmIGaFOfzV6?k9I#JI9a;ic@Rrk?#<_ z`2cb`cf${jnXT+MUSH$!mPcuWr9dUaOL?SCTzTPe;QQ7>(9xSaM_R&0a%$p3k96k_ zgc+9Sg8cV{KZiV&L5Fm8yahX0@kb)pYwviwtZ8fyxrELQD)vh?y?r>qCQ6}7YS~v& zE=!%!5JwGER~6>|0E)R@U=y94AQ+MA!ud+;koP060-2r273G{&BH_JI^Oq z;|bd|kwgGpe;7Pq-~ngSus^(?Qp$pbjkkMox767vO{z5u-;C3fBF;!%z0B_eu}oW? zf9?SpML5t=0Pa_L$yy=F;|sN&VkJJ@@K=oAfRhxekUl>wSgwxSL{6Py7%0ye9qR{| z0{;M66t$cIPnw^2+tYgZNLq~q7+S|1DnV}1q|n?vT%JgBOeNe$Y&82IJmBCS*sI2l z@~$*62Tcm3yc==GF;CXkJmae#w~*7S8W8i~^NkAtJQ@P4>GH^oOIUOx{Ne+Z={rWc zSdKz`;FtncYs-oOEf7QTggQY;2!2FtY}>3IuGs>PzSTci6w173vp>HXcTf@fVH~0E z(0}d?%Aj`r{{VSW=%`()2+fh!El-G9r5_au)wr5~yiLv2?OYWEWB_C!*-Y3w3sEe5 zbWZR{i9OlVlWU97%s?#MF1gMbZ_@H2>egItOWqe$h&0i>GKdpWpMQ)wu!{gWWZsVN z#(Ac)14x4+Yu+ku@9`A}bh$y+X<(y7&|L|a7m0;7Eec7^CPn}~)3tStDKo-E@^>G3 z$YR;fDPIn3QaqEqnZWY+Pw9wGIk_520eCJ}6K#r^qKU3d?F2V*>aG@I<7sA>H1ZG6 zx#u^bWV-Nr&9Wt~H-l*j26(|ciQ$eDLwm&-L~T39gpFhrC$4eiB-bV&I!nhRkW_I! zFyKfzxwE|ojm%NCjf`An8F^KIE*VGjoIzil4-@l&2(#xUfa~IC3GZah0@CkYV3_l( z?-yjgK;seFT5*64)OqGOkfsU82hITy)Nzt-ZL2XOFyd-sMs)5Z<9o55*t z)~`h6-{Ae?8gn?_vve2b$n9WuKtn^7_p5^vzQMr)Hgpf(1d})1l&2K9Dc$GujbwVi zvFj9;Q>DM0v;+==Z_Wb(M#{Vn7mjdL7YhSsVEEgAcrLNDh1$F!(Qu2n>@#S9&UTk` zG=Rkm=brlB0tW;eavde#CCMEE_ngR=lHp>fLMwe|3uzve^FOy8RagMG)=_|RWTb@n zRq|tMZX6r}G+szK(~_s+m;f^VyyXm+YHd9ibn(5*kEqIq(p7xix13Zqv+^)RZZZ%R z<`tf>n2c4Kzbs?W7!LO;eU9Mg5ppP zgP^K5w}v2i5CWvo^xiq^6Jk4LMHfoJLM$7Ao=~CkC{j?JUQC!MqPsZ}_uvNh>zAG7 zqm>4zENs9p8+gMu%UTCU!2x__Xm{Z%Xcm{>sxy#G(W9};DKTbAPs;!R*PR{{YNT8in3cl|#Xl z2dQ^~YB#nFB}0qeUhSOk4V&+!;}Vjn>G6yZ(dBbrZ$Iz677=?}glTkc99*@oj(oX& zkLj8K5Xv03YY)T8hmjtx3&PjWMhK0wh3f!EZcQj|_|6wVbH3c5Bd?4rEH2;ooE)JK zIZ`|4jJn;yxeD<6KX|Nz>_kBP7+rNLjg%C77mQ7QsFSA9Zca&N8@DDvzAzQj<7vjf zc}K68BnX=~b&3bpiwz^DJw42M>PwJ=N>5tz&N~au*XhVX3SN4kj{N9wxw3*chH2^~ z_%Jw*ottBoBTzCGev@@#_qygJR9|&LAGF*7f7F z$IBBTDT3`2mjl)S_k&B9r2XYuo3DqF_Fyzv+joShSckR!zAjKL(vt$3(TT#R$C$^bEpBD*|jaKq74<^h8NVm^%?Ji^- zjI3bOIXQCe*Zu-)Q+c``KMJD0t4WjyB9H(Z^Q_%MciG1c1>XUdA@(@AME=GZV*6Lm z);9NYOL}pIJfWdt{4vI7fx<@2(RF^VCl4U73O$Q{FgiN19JR~$G1r(-^~an^&HSkg zUkf|{Aa4$7z9^iVSGDK0{bFtmRd4qVNXL^8ieUsQI8cMdPI0}mh#RM+(^GtPg%&;- z=$-Q)elh%+lL*bWjxQMXB-6|L7b^u)iNO=EoIa~qqKE|CRO5)=rU{u&hl#6Ep8g9=@mYmc*b?!_=Nn1L7*xdhx{_#q8x7kn(6hD zR?H(cyw52xO*n@Ue1x=4G1pnBEO1h;&z_s{OFod10ydp*rxO=_oCt)1`Wh_D#4Yl` z{#(Ngb&WQkP{b&Ov6%D)APPYZY^y>L&CeA3qC$lF?*k)>#Iz_G>G7=cxx6hpLn8#k zOxOo}Tu=hG1EMA%4(aiV7RXNn|9 zB~m$a)0#4q{4_rnK6TX8PY4*g?O?BYM zyrc<~4CNu?oE}?u_#w^$0!6{=bdTO#TScbOy$E%2 zashTU3AIIHF5V3=R5hV7r=y+Y&T%*h1X69s zW5;ePx_OznoCb^rlcT^Z{b8zyYv(xtS8i?!a(d%N>UKG(kFw*o^bR!@)YupZ0X*dx z2bNH9Y!32BceUbVN)mIdkQ?6i9|hghN5)0`l#uTo>h8ai&h;)$nx`uDRfLSE^DmDiISN*|1XoSc{yvA;M$w%)M< zUU@QtJ~eZZ%Mda~K`!4IOG}jAJcI>_8_4p~W~YFtJPTiVckj~05A?!uVoJ1BojR|) zAb8wY$IHHSv;T4ODh9Jax*^nGO;oATsa`2q4^_tLq;5RBy-BjX0p zLh}G(t#akVixp2hr*jTizRPl2*r3jZ=3;Rx;+7kR%FHISA z)BgaENs{0IuS#D|hm+no?r2z`KV7bIR!~InKZ*R{uDM2&d8I1pRp<77V0 zd&EJl`^Kr-b>jusKzZvp4Z@eu8@YH_vc2qLz*ZirX-|=ZgF6g(g&m8_ImCkSG_DZo z*BH?+-x;J0Hwd++=o8S#p0KVg*Ev7|paZPj5&Pv;H5dDB)+*PGTBaadSfMC7eAKNI`I5(x6- zfveAIzs6X_B%`^s&W(e@xM^^Os6nLTUwOXc@B9Fiinc;)+%}^H}^d0R{CDU$V8?YP21P>PG!7-RV!9}X{+ zxJBBw~wxGqR`&(LD^M+ZxJ|**DmlFt-CGObquHA$)W%{ z>wmmZ-9>gM7#zNxKtoA%zZV`G+K~k}Ja_J66OjU-dN>1aA)}D$1Pf$V&Pg#nJ6kLT zS7XbSR5ldSY4xms)DWDDrP=2khJ(3L5|K1NSUeqt*|1D^$0GOwtu;*7)-78$3aF@? zHP@UB1dyM3^@htlqO_Y%r4@U}rkY*9;2v4zgZVNqKG|Vh!%(U1`IJAyReLUVU+^oD(;G3|)9k zU_&mr%CuJ5%asHsOag*UZ~4pOhfj=jY2S~W(XSlmf+BZ-X*kvi z{lyO0?2_tDoTMHxhWVWbigb8B9KY8!(&-+JaKDUQ97B)5ciOn%j65$G^BQqpKJp{M zu|RLyhvYC5aXv)Kh=I!BRdoGiu+Sbm{ahExYzW)5RO=_1Wf)M)t9#0t*f5>E+0P-Y zAFi##DS|g9-f^QGVFh&z9Ri!V54Bh$v6>b;n4y-?+EoH}@vbn?kR;Kds+W3?ye4mp zr`PR@L{G;UK0ce)2d;U;-Pe}z^6Wu&;5EvI9q#$MGKj&#qw&N=A6EF8UBP+Y04vDH z9ws_A{25IU^!d>0~Cz|QcoiiAiA2~^yf zWm9#6R+pYVKPyt@Y$n*@zfoQ0N zQBI7pd_Xuilsj}V(Vm;&JcR0?KVrvIbLR)w*_l;{YriBu^Z^xV_ZHvkiu$N-x#8y`-1W9GP zIrE3I8ygmYl}c!UVPz)v!R0=1-fox$3!u3MEtX)G-sH7Ss8gNq9UNssmt`%101D!F zC#gU#)06)IxxHKoTi}9Gs&%ZHn#2evs>{W=1wYW>wFZ;H`Nc=2%fI#gVrgFDAjkkZ zc8r(2(s~L8PR{bn$#ms}mA4>E2gPtJ&{g$v?27~J@rzMGJ!8g-Zoix=)?5hT;o!#_ zFm#@R$R_9KFC>poxwfjRuQ+Ew>2LRqS3+w`jXjB|PZ)#~s^-7_#wh9<4g@dJFyV#t z!ENL|@8>k~E)%s*1J?JHP)ftG1DDP9k6Y%1hYYW~kUHvEK zwVo*a!;j|`x}xhL3BmJl%cYp%cm3e`de#C>pEzcgYCbafKzHjDfIeREC}Q_<+%$1A zSC#q>XpATC6?p=(c*D#*-~xy|xatkv^MM-<>wd92L!FmB0Cr*E9`5sp9h7m1kT+Z5 z#UNGSae|aHW&xFJ#&SWvZX+tEi;A$x{3{-VyPBZ~?S6`NMFvaBbz+oM05S+%jMi-p5E36Q*M5>lri`wT--s(uZU724H%G=Y@H2Tk%VrdK za(?Ug>j1S~QxeNH1Kw%*8DBV$WxfxcObmwSA+)3n zqfVgCQ(0NMf*|BC0kuao{Q8|KI0)-*o#U`HB$VOO-_}5bM*O6}Lo?!T_fp%p%iaR@ zB12<_pRBszv!yBBRF>$)z*7N=uzJnmZ*59y1|i3HjHVmPsk-omwaH`#7F^(WI6ry7thCqy@3osfF4FW^mqkikx0tT4Q)+cS@wA4X zWwj&KD9#Ote=?0SDU@OWT{9(h4sa^N^h4pC?&f>;s-pxInCHex*!HQ1M-T=EcGXNTe!lp)1(-RYOO|Az0}jav*P6gJ$dsipMtdBnO$LUDyti?P8T z4kfUh`pZqfJm8vB&3VocEgdIVZmV2m67Z>tl-9ez-8?e52h%c@VN;u--{%RT?V!>Y z!GEj>1BK+?2$Q0o6@o^^UPiYUP-}6$g7Y}%28w(g-<+I;9n(2bYNCDOiH{ZT7Q$U* zw4+^kG!A!D-d5WbNyyp>L>t~M;sj4Ae%~Q*1=C2O&1#yv)@=Z*TEuC5pZAK?1Ayxw z!maDPI4O0=$3Yb(2Ndmmz2vP*?@)ifT+7%$UeB!H zl_J=A3Z963shC{ba(BEqM>x;$EY~#WF#yaYZiaIc6UI43OysZzlJS>j1+wN?X5tddi=o zz;Xy9zBKHZ+V)Tg6)CR<3vKETFE{&hR)3up7s`(V&KO@veqwC3DjoD5Emoi-3?mIV z#OLot62-HD*>Ih5)er9kGNov0PyhnF8p9GW76pnL6u-_G9UNoxhmKM~M*#)i@ktrU zeT!)OUz~O1l1v~gqW$49w0o^_7hFM2k~14brH@;|L6gERpAzHYT-8um4{SAx5Wx2~ z4KKe*parxw-th+O7X>*Q!s-x-8VZi!qQH(gJ|NgykJ_{vraC<<-#t8 z-#5#FFWjo`{%}msfy-`iFc095^^UJ25D*>g#W%g;(9m!vSX+eM{{Zf6>j!w(pvRnR z@kQS7BrkY{R(i?1hnE=*$5X6CkmyGsM5uA;oN_T*0A4_;q zFWJT)5jwavQEMEzFjrrAK=XRTVGMYgVDt6XIuJ+39hmAkePFy3KH0sUo6XTB2Pq2! z!J0k;v;Fgc^0e1DSApSkbQ**AlpuH3v9LN~MtFQ<-qIcK07F6)QW_f?zCfF$K3xE6 zLqo1Wr{@~Pk^#HIZuf&1Mrn7+lffSMm1nG~9!Ie~9OEIV_}$An736fQbM)sVVmnaPEG#+>B2340DhIM zRf~~NcY_KYnlEy*u6*j|s^in}KbAJaJ8k;S18JEK#1_3e-UtO17-wEgP#3y0@|+H( z384N5_nJ|hGv{f?m#ey?dg9mC_^uS#@V%{}ym&0!k7V4I+7ve0J&TWmnLwU2){FIu zZ1B!t>;$CumYazLA{(1Q++}d(9gg~SeBj$bkJ@=%xmHags6+ldVrp+^(er=}c9?;d zROVb4ndixZRbUgdoF`-lul|^XS(5t%qPJ^KJz`|qG!v&@u;k(L2$>&(-tC)^79X6BhNS^)N)H`^Nl| zbf!?XqUdo#k|ns&9XLOe=MDT*rRa(5ZYscG6R;)%18x^#JmEUIR9>~k!HX!KK-L_Z zCTOCOzB$eunan%nAF~JSlnjVTcPpV`k6}zER_J(r^DrS=ouo8bqk>=|Wnkzwch0re zJPE!+pW79c+DnZ{8Sf|xm%mvMcyQz>FDaq4>zro<3};T-0fdx?{J4CdmLcI6?-Dn) z7X-_)!>kRVEFp&*PvbV^J7#Gj`7uGkZMbzG!II6s4qQVp(@rvMX5qZ9p#$@W0fG>h zq``KC@Mh>m%DfnCAWgpd#|k&EEB($p?nj=mmA&syA)dV8avk=ViDB}%0xgd?IO>l0 z!m6ylj5aCST-ixeYTzMjPS*AR0L)ndUsOFqH5$$?*p4hI|ogbf|*n-E?Tys{hDIzR3$6l+3yx2z42iEIJOagA>Efd%6= zu@ByNh}OP*2DEd9G$rq&Lr_zOdhZY*hnU=9fagKRE4?sLR~So3`+hT!FDu?DdQCV| zsPplMssk0HR0K2gghHYMc6Uw=linEwC=n`>z;3VaDW|{>%02w&F$a%14V5kShiP3RR4G*tR=Db|k)ivS~8 z8H6Hg74w0obLS&@wDX8Rn)us9LF|0_!-i)CfOh@4!`N_;28Wq>KD)ppGBG?`3(#!x zIMRS>JQ=(n0aeRV4B*n_+`(q^;)6MLaDG>z%Q-cKHXsZ0FdthcaW23sK6`Qd*x)Kh zEGW-71#B#y1#h7Xt@E1uDy4W%iRKud1xS``{{TGMN&wM8umZDuVLUd0Iy!3~bLSm3 zMNkDgO1HiyBY-^NAcnSS-*7OMlt`P=)mN$OL4b_ziuq|NIL%U2(mjUv;>{FpSUzwa z_h|T2_{b=d-3~TCcr?lMk43LLUir>_NPe13aF206=3sFEkcn*#?tK`FN)iA%c3;F} zMnwmt6VG>djcgKyG9Z*OOltslCR+*v5qQ^GPf4}qbGA!SuEZ~taHc8x?*u7Dg80eI zrMgy{vgmcZapa5EYW2PO&C2_fY}oLhUl^*3Afbl>>TY0FjCC^8D$r2a6-5g*LS}@Q zg7B|En(;A;1C8i$pdP?z+RE4tx!x7obkBPf0^Y#qj8L05jk|lsBw{1hB>@bNeBl5X z;?z)^7seE{+pchnuuTj>C3WL8uA|;Hder*w_`_)If&xM`wtVC35^K9y9(cjY88zMO zuZ*KI&=;2SM+;Gjt*-{K^2iJZZe7d9LY!obB4`Cy-tbR!pv8DC7s-PSw-Y*_SW3u^ zP;`e_>yHw^flIdQtN~tHk7an6FiYG5UQKF0oT_vh@q&p$mx|X|6O~)eDmoXF&IxYQ zb1W#Tho2wDLEq)$=O|U1-d6@XUH6&+sn1MYP&qF+CNwye*^TjXi!{}^5Kwk-ST?_` z2fKZ(&LMaLaN+?h;CG5(Kd}lgcuQy!b=;HlTEk%RIYTwonkfG0< zNNCTues;KxL3|7K~9)neSFInM*w6G~Br}LFW=IC+j%4IzDjLWB-5!S$xz<8Jo z$eQTTCm&W$^%T(N^lm7rPv{ETsk&3pFI%D3k!nnrKukS4h zyCcR?FpBM^6MQ1|eC5=jo7+z+`|lQ|G&k^9>l6O5x#U43dmIp_ojjz{pB!a&5{OO* zC4~SkNCkU*9A)qYUrC``d{2x{#tbO(JUFnFKs^33+x~EhYD}J^`OQjvVk!a&#rv2& zju0c~(+AjH2B{ne=N)+|B1NU9x3l9F>$cwL)VB@~;@% z0A~9e-keaQP7p?&$ACYT!J<*~kS&LakUMJV40Sa;owy5*c4M}s))F_jb#rI|-SLtU z>+_2yiOvS1hSp+Gbqjz2L$Kiofu(YQ0ujWNE5hXf1)J9xMI4^_#i<@QfZJC(zyxl% z=N5?Qd*v~Y4ff(~vhy{B3qzxsfb8B*@HbxiJ!0O+J~HU;a2U7`E%A)76&Fq=5*}S* zq9gjMAN1kvs%8+Do_L`gUW~@Ro+=6+~ zQ^wXWDUf?|4Qt9`m>hXBH(*{~u>BOiW^)qLPZuRS?5+m$rd7@v0g30A94V8w25Sbq zE1#_9YpkhhqwAbnUv@`14qDmSFz9Gf{xvMu7Y$^t&X^epH{bi5U&yF)ZGXEmCe%1C zj$WQ|iiC}NWuSC`o99^}(83Z3h+ET+?vfP!UiHHt-fkDHaDe~=#q*5OMjf7gV7-$C zNb`ZOoZW2(G@uR7CT^aSt!yU8_)Jq3@e@g3y)=x^yt=}NbhZx( zm(0o0BNd7A7sSSTQ?rsT+onzvZ~S5C4{ib_Y$jhMV|@}@yd4bjY&>W*pE<@hYoqWT zHH?{?r2UF8YSM_r)EeW9n)_b$7QwC>1m>d@YOJHp)_Y-=_+h$l^t+sxVU1))kWHzj z;_Eog{3t&f6A>BZOF`2iR2uUw3QfYTsZcF<@tan|`Y=naQQihz0NS)KIioK`Az%eR zFBca`(UE_q^4tPwYp(p4-dl^5L7Q9z7U@jb4paisZ7+H^r&x4t*m<^;OX~Z}Itz1; zK*3%<@F>Eza{;n)>%MUyH+-9v04q)Lft{(2fWr-^ z9L$^?8ZUV}I$-5mUo#f%xeh*XU|#CjQ2;FCEht9UhZ@jX-;8&GA7sh^sbAJ5)e29X zZ$&w(fk6UtbJiGgy)cY~sl6_Y*h6t31Cr9?^8nVT7Kh3C#Ux-r97^cnhNZ>EoB^@` zVa1p44wGWM!#!h$Xb7QGN*d=U)2cu@M2+bf94Bc4otY&3Ct!%`7jra=!YDSiCGcbR z(DN}rM->z~r5c!|fibFaEGgjte>tVt?)jad3I$W=42}jNZi0Wz-~w`+J(3(D?1aPR z70Oq$bjkU`;9(9Tzap0@SUxcjwM}aPOb~qIB0!IpQU-J57%)}ORri4hJU4d|MQHJd5{FYYt%IA+YSZ-L9awkP3i3m+n#GMFW`>JAu~2H?8`iV3 zA|6qv(R_Qtgzq`|xy)AiG6J=b#+ydH9!r}1p?LHhnv``7D&WX=E1WlkQy~Zo%U^wB zt9jLb1~+A#$TYDSuA8R+05JV!DP1g|X|K*-D$yujO3ZN9%}FF3Nbq%=GL3}bkT>;{ zOl(o;MZq_fLXFD3TvP!a;~u?X(?Jw^M86cn6rDnN3J(CJKwH0KixIkLx!hsXa07Zc z)HzL7e_&p!AMf&E6;orvJ~I6pLL&kv#w!5_yHRGuk#n};z;7egVBrR$q}WF;K6YP% zYsSFU|y*103fThzzpA(X@87gTYu+x>}2EU!=1qbBVe2O+_=n(6f_YYA9zV9 zHxWXxC=A@=-bAf>CaEIcx8U9k8?-@9THj2%>nRPFFy>l4a^fHywI-b)?AJbVLMG%h zP@(zX#yJV5hpISxxL<-NrBp8NfG`7l+GdlPtCvSmJv?=WGr@sfAxmBy-un<>nC&vD zvsi}C2Ey}<({GOPjv|To%Z0WGLlKey*?dDFL?PSh2zj?O#%oXldBE1^4mvWyDZx4` zbQ|X&=aatR#dKllI3^VuDGofE)4=N=P|>80ss z#t8%BFV-n}oc8yuco_=%6 zK!g)^V(WEMsqOC-6@$RB;o8@E!Ub3om(71!S};7BG?e>+AK2iF$vDOZi-RQ1(Q!f= z68Dp0g1ROw9g^b#YFjjU#2FFG)-_T?5*i2sYXG?LOc5g2nPx8vB3cLQ>g@&~)YM{Xd*s!mar|<8|!k2VYB2ti>*0j)NQ0Qg5^`Spm1Bj+dtllPEZh4K~n z!6blVTEf~zX!~4{Jc~s2vJJ$+(?)ycV)O5ua^oVuivDISWm3*ucCU!L1Ri=lrZs~p z5b)){GM^bhC8T9R^n=Q}#bQE-Na++nCf+VHu)56+8aD9kyi67qyd)F=Z@L=G^VT3 zNkEtAb$gj_vy~W85E`YWgSx#XlSzDhL4}1Ngi<4ELR3R(CLUP@4M^ily50&p&x(y-oP5XS|ByMp4 z*L4Xv(B;TA?bV4I#WXu`q;NKZN1{J2b&*q-g{$elvFkBS@uzX=o#0Ga6l)qQt+^=I z!x2Npx`e-<#$O1ko7cIABN_&!BM3Vn;@m#ZL#Dej=&=jEzp09pDWQ15B>`#?IQKs} z0U8B4S#tTfh4m#;l$z*jV)_Vz4%$P`vM7AG8(MIWAI=*EQvs#o!ClUbLVB|U#w_cbxPbDdpw|cKn?j0=JhM7rc-^>7mxPFaSZOrWBbS|c^P2?J z9w@f!-xx<^SwKk9MW?XCL@lMs0Fu6Sh+F_8#3uen1$e+JSA*vx2_G5)PhDa8wse}q z>OmeI<+dxM*6ucsGX=RmF+w!%onh@LJKG!%`0opIcfE0gTcz{8;uB!r@N#g5_`*y> zaZIQ+b%PEKZxVopafe5-tTs_PUNJ9CUUJMngA}4F>wILa3i76LtJ1%mHY7DNCfk0~KAUQ`uWJ9-L4l(N}RoNSsE{*uT z6-v+e&0tfQ?;xI@Qw`sf^5RN`Pi`edL%sh1y2^Go zXhm8zIJ7p$2kWAJ-GSU8p{X1aj?B-HJ3VoYmejR*d;7pCtru4<5`Hhdo#|{eyUU%Ft8LZL zyF77(>29ui4h*=DoiJ*qb(&i_?EVZu%@cFpJxT{TIv?HuC8-Qy)`4h7-@xE;b{%)b zpEDy)qO5k%Hk_C+OBgn+6cu67FhnZ4RluOH>m7~0j4rkz6QL}A^OervIfy(O*UlJ` zu@q37oHbugIEAF^c%p^o7G$D}gghTP5RI=(m-U*f8$|3Vpgt2ITO=UR1YzXo6w*FH zRt4fF`PaNR5f#b@MAU-k0E}t&_v!u7yH5-z~u)6=L^c{+U*A^dFPB# z1~7yXpjoT<%VlAqdbtk$U|^IMBJ6jF4`0YZ4_Q=DYUs{Ov1tIh0C7a(?QxK!Vsy|^ z-<6MeTi7*9-b;H5}TedPB(OFT8qE61ECAmjvj+afQ- zT|H6$vh|7(Cc;7PZ$`{IeI$>Xm-C-Q69-^CxbmK*Q4QshVpYWC3|Jg|yyoGCMbf?G z`SFC^{{R^w1u#Lag>PQ+y7YNf5-^Z$y<#~%E@9MI2Y}}tbSp&z(c7|Q^CU8P_cJ}8dy%qAnhx}mqAfsjLT7I!@C_4@}4L~U~L-+{R zMlScfR3Stfk7YUem_pQ^6R`7Hw*<8SKtjNpI);T-+t>nSh2;c2${-fC8yYZx{?;EyKY z9pHiHmzjji%jY=?-CS5&d~)Q2;Nz@54xfyVAvw!R@&v(UrWvWlH+}3 z0f?NPX5bL7IEy^F#39Tbn!#Ytcx|8!NxTAuzI=S)+lFiB0pdwREGC@5Zx8IiM}ZI}CJuUQkkSvYsz_uso@C zuz5Bm{5gDtq9frR$CKv{Z#D*;37oohn&>Q>^XnM&-nTttuDio`=N(l$0WvO@XO4r! z>K{0^COwJC^4U1nPz-@tQPA!u*)vuzAbC8PP%Hp;{{WxH3?w`!{{ZNG<40C3=N{bF zz{DWH0Phqa>ENTutYn*FCZGY^zFxhBMGGZ<^GNh>WUv|9IEDjC$FS<&34pV&1H4sX zFBHwdkH~9yqmrYDZLcSi_lXn)G!?~jBP1yjs~vH(8yF*NhSf9WdFLr`5TU|R%`xnY zr2d;tpQl;Nxo(WxE*8Zzf)aeK)MZd?3g~JXg|OY-XdCooq zM}6k`B}jL{{9|mUCeUBZ#TZ6WA2Oc~5xEF@lePduCxav+A{0rd6VlmpODUxYJ)y-ZIY3)wt^~cT(gWiJ3p|1D$ikp|DdQ|$EH>77m zZH@R&@*!qDTo!V-czVQ~0c<@a!ha;ig!-rkvSRA}?8IAhn(6mXgIs9i0P)Nr+ zwf12e)>fex+poL=xr2$(_y_fmd0V4N$7zw+!x_J<0Q{J)s&S|~>k1N_UhoQF8jkQ2Ht<~7QM~Ut#|@8+oDdubcslC7 zu+#u`R&BRU6DA5GOotV4NTCcsj#pedX9B?BfVkRv3{0bI+F(*gxiOOJI(Jpz{7X z%@&<~h(M{hwH_w;g^f>)B7kf89x>^_Xgkd@oxM(csPUa%L2-SFS6A%~=FL;|3@qlsoWQ*UtK#S(RX1aLww?3%{A9$ru zfbpD6TTO5MF?7~%U_PGxxnZ;vWJ%k67?Vaxp~)alzlbjMRveuw(Bp8O`0Ap?VmOlSn+xe7oO_qt7@KhKxQ;ycPfhP)&HpJ~8NRRLco4k3nF3Tu-|c4~Qx+ zq01qdNZ`8%PNq@cQSA6&M%jh-17IE$jucSZG=_-y)+F-k7Rx@ER69--cE_VALuHNYM`z7H5ghuyHyPi8g%9Ei6QijF_h6sm`x-T;_G3Q$D{g?PuJ z6bP5o`7o#iYJl%uVmMQJngpwdzwhTFMj#2?-hB?LeaQzpH0au3J3MBU$wX8t14 zYv(QN26~4$lG}qT2X3mW-j@)sl1p`^TBpE zqdf zl}DIElY<-HKZ)c!-rW=49=MDk5^afiekL}_F3{=ObyXRFHJwo9vH)Os!d`+s5y+e= zuUT}vL0KGU30DAeHBi_ZF9LVyh`XmMNKQ9=9cdd)q$b|eiMD- zRd}KYe2lxf=$)m6RgpR2{b<&0j3P#WImrkd6!T{Gf z6FEHZ0PSLLgAYW8oCV$ZG67$a^OvUKt}!SZ;p-xzu9fFHRURf-QctEtBNtb%tTZ2n z<%Ziv8_k5eANLMimfu)10Ps_er){ZE>-=GI;v28GShcrF_lVj43>Djya764R_k`DL zHeRxEYA-n9c{)rO5t-Zbj+_8>lxsob)UC?LTz}jUlaT)atl2O!v>_@|lo@tG3cU|N# zG7cbs8gx}$zv`;BC{9Cx?^v^<2-yN-~{Xbb+$hCxW zsDK_{`HIAfk4_j@p<^S#6d>=NC()1hZQ%(5h(y<(a0NiOp@TU!!?&zh3GXsNY>BxG zkwe9CZo3d|#!>PRYdC9&ijmQHF(~;=1n|`iau8^5uWVB^WW+ zL>q*)xQe+N1P5ePV5j0fe7F#%7bU#vsYA?&~Tjf*{eWsUOoV7WrQ7U1sCqVa%=Ji5SO z`5}T*(aV80hB_OEPg%NMJd3PWf`!vDY1`I3AbG%QsmpLIG~#5CB~3W6DP7HeG0U*V z<8gQE0_L~g0k3>xyx~D|;zLN?^^yTQ=bYL?`(msGJ8%hY-0LWX2hAt`V6n+LxObl; zSyElPIo>PLbZ@`;h`C;X;|LM=P3JQ%1(W{(dBI8)bJsq&#YIsQ*Iy1@g0BlQ01|oL zBn^)6u(CLc6I`wdZ~&F!dchPc&CnS#4V=a*x(q>(IG-6a*!w=RP!7$>3ti{2PI|_m zFs;|DK<+>*;9Ok`?|Qf=L0hr33j;>~09($QEs_WC1g9-MjAd8sV?7)BeYlwj0@mw| zrowUO0<)r$5RFP*0_ryon*pi!C&nqa7IbhVhueJeVAw&`M!{q1AnPIOJRP~A5+45m z+r@0sY4MdbhN|lV2G`2^$9-RUwO-@j#u*8RQ8c*dA0)%O^@~H-SuRGbQ<#4{#<;hM zo&08#mF2_$n7dLQCi3KNy&jlMb?VZ@x&o`N?|HyA;y=bl?JKSVZ{+JvoDf+u-f-Xz zJIYpbG`Q!ck8NIf#lj6X9#kpTx5qe}zTF<_RX~<$P76e zd~@<<5O9h_-Nya2X2SoJpKTP+--lHQlb6G7IfqpCJvco6H+B;I0nGj2W4wg69& zskWQQ39u4&5WYp8956zQV9-f*S*BNw;fFgy;LeCcxk1)6Ijz)S8l(#Ic*JGsxfs42 zd@^Ma!^WMTyqFjrzko#G3Wdi3^bjkeDa((GccM2Ltrwp-&D~ySRTFP$n#f=l8~*?k z+pIvzc97E&r+P4;fDYQI6r4Aklz=rY&>{M9oCOAvx{eO{%6URwIK<4o1Qd4hqWof* zwo7?<2GxFy*k1JK`@|LM;6Zk1Ru^*E@Qfrn9aft1+pkj&>40qK3`mV?@tY)jz?Vy_ z)=0(#`MT{Vmio!SvnK!`0NpQ@#Z{3&kp>CMWn0ZU5?&6tGwO%c6yKP>@x)@rpBXaJ zT$hHL@w^lU+@ev!v#1_0k|G|lr*LUbu&;u}tagkl{{XWGsR^dqZ;X3u>d?XN>lXP0 z>i2~Wd;}=zaGGH2fVPQv1;mato z<2R1lad{edql_jp@B?lNNe>Qss#wj0c8oSO%rA0lX^uw6tCu1G3DCX-X| z1<0tfJ}?VFvPRsKdHV1V>{`wP6o~m;e>q+vfofLXBh^ zPZm#jt;{Exy9AzEaAm%^@-6}|2K``1@b{NC`W(0!Fq$7YZI6zz&+Hqd zqIocIzEnuUzPL5MzxM*$Vvw>soX$JIG=b)YNK2%kLE{QcZ~)a-J-9(9L16r1-$JD) zu`I#(P5%JH>*oNUv}giQ;M1)0K)(4Pk6fRJA^9;NZBz*Ddokl*r5KW+0o~whh=dkE zM2=Hwk#Kvrz8*dp+J9>xArPj}z|h=!Xxb!NEj(|Giu^{vixL-58m1p8kFhNT-EN(FkqcsY z>;B_b5kD?}-m{8g8e3mK7{WNxr^CiB97P6w;6|&L4dbqJek|%Y`Oa_5(fuY#3mx{3P;tQp{pOl^xF_Qnn`LS<;~^TuLlYf}Gb}-`Y!(cmqhoAjt(0p#z09q$>cC^4?Z3+ghp@&D1IGfjHQ0xyhQ|;g}}X@ z&Q{5IYZJ4MF$X9-8*`9Y%W>PJc$eci#AczI)f#%%X&|QDVQi-o;CPBXnCMX5b7Quo zF&2w>2vel@ zezIacS;yb^DE|NhLoRVB z<^KS+jW?3{e<)vgngQ;#AXKIa19pV9n-B`Sn9{td6H2LfqiYjPi*!aC+i-2 ze37BayZXlDA=5gL@P)DQj~*}Ig8pW6Oc2RQH&_$a6Wo9SbW`DboVd2vA7`9X#1sp7 zKlcWdwbMF5eiw|6b)bx>-PZ1=1n?ApDc-Rdi~f)-8Z)97=YcB1?!^Kdv%gs@vL%>$9V6~bTc>$ zmBCf#1%VCihsx>3M%R3}b`UST(!$>HiT?nnKEq3f8w7Q)tN`TtTp$x}Tu6Z&Y6_=D zQo#7d4eB}!WEXAt&Jq)5AI^KAYbKOCxJ?KZ&~b|>5u&&QL3$^7zOw8tCGdQB!3d~1 zxKkrqn9+3J+}Nwv#zChKc(|Y*aC(Rw?zaeYZc}*C5;$1RDE@L}sMGy0pJUG3{{U|( zY}MPxZUW0lbn!B95{ceSYR+J7$To+k?mzfeOC-~qJ1wqBC(=9HjIXPWta?7cOrnYjp zHo3sz()++w$A#k&P@E>Q{9RT*_`(C!_PQ@YE8EAsNI*a%b834fHNLSg7Y<*?&Nogp zxC_dUIzDnUMpg%=Bk4XD7y*Yh&N$9{aV#fuI2^#E!JXQ<{{WohB|E`Tn(xL|j?nh- z7sqoWGz55NLui3Idi~%J)&qa}t^D8!isTI!yyu235c0kK;;^;g@C^VD6o=)@$B`U% z9j5kT?J$kixoOs>4ulkWHH{Q>mllmdXgHLMLEgExh5`$q+x?T?2ctxXM01Mx7bNIZ+Po;6p7ZyWCN zW$pg}BNc$@7YRh^W{z$Hn}>%sWKxnQogzomv?9O$usYl0fo zw`?pK4#83BP@h?N@6G`Cw|mWxCVJ2l@}#@SWYB5M=}#8$^Wh=3?{MIsj?3Yi_xisfw#FIq>bk33e?sZN%M77a_DqYA5lCphHsd z02kNZKn4e@@&j=YD{vaONxfksWk!C7ovUvc3`(NXR4SH}h*f)S0 zg$i%Z97Rpc0NNE$9vs?7r%#Asgv7cjS_4kEtkcJ(bIH(kdyY2vsIZk!oaKZR%p+yC z=D@USDQU@KT43NzB0(VJf#TGhaF?!dyAcCPvZM!z95B-hAw}CJ_pHn6)(P^NEF;*#yAAHtS$8CoRs6KY0Szoep=G0^k+64Z@99Cr-9c z`;5DEa}Bs6sDXf4XbPTrnLtwQ{{VBi9@C6A4ZI<*yd9~&&kk>t^M^(Otm!>xAqt#g zTAS!N*EttLpiqhfMl(9-k%E^)}57*1CzIW$L~jxv@i70N*8-;5<7(NAz_ z7m}C*Sz$H`Ji>QX3Ociln+kFr8BjvJVLB6La4`DwjEjI%EZg1?1HO)2nBf5e zG@GOjRnBSs7XD3hg$FWQgMf`?H>}|b+PxzAIKV=P^Sl~ZZ^jW0pPZL-*TI*vx9{cX zGT2N7ke{r8Y=;KB2nqSPfLk>!$+^}MJEO)UW=aM)yH+bIzSkCy>=gOBz%}!~M%W(# zjbKJVH~G!jxi-H>BOE|8^Mhq2Sud4`5L{-$Vkk{+PP0Ja#y`XF2Y`*E2c3L4YXqOA z?y!(?K#TCFjIuTjLw{k2!=x>Ku6}T6HI_!kEiFECLr-u|?pd;P77D12_xUnV@fzuM zXVzV;1_eWOPR;l+Ud**EuR0N;xwVJBB_Tg6jewvcjWrz7kyEm=ehdVOVHa;d;{w~R zrEQ^NOLfY-!bpM#01EZHd}AVD*F_dV*Mgfa4eJt-uKxhK&tJ*mRJyx&ydg>zlcbb_ z9aF3|G8BRfvA_fp@R*^fQq}Xkfb7YFux^d4^kAaE zTglWr*$MACDs7pvCz)l!)NH~nH^TGlB2Z&%66d}ZHIJBR;R_Jp{{T2>mu-eFnuuAlkfoNe;5Ik!%0bS z*g*w@GG0|y?4KCsB1G^D{h1Gw?>UKqSBF?O%hRllNH3g_*i;@L^}+YOgA&mf#wE-z zc(jMR#xiclX@iEY=2;#Fj4qG%&90($*@dE`&JRpFVUFNTTKESp5f+J{d}ie%m&R?^ zQ)`BzZa4jNkQT5oSH>;NCzl=Eh0%hkePhYgym5dkf4(w0?)$(*x4VnrU0>4)n?9@z zCNb(8$C%mWIdB0qhGhP4Uib2qnD!u$Kg!e6Sq&Qkc?+kp<>IIPC2} zrf))YBRA&Ot($%P0k3N;F*Gk=owGl9Xf@G<)J_Eh=PGyUJq7~+X&Wj1FgZ8`D(XQ} z5#HQj!p8XgWHz8S8Q@o!${cg7pD?Fj2UgDVkyYm?Qt;`3V+^3cN}_V z#1)bTIaM3ReEngDJsy{xxGOV{vmm5$7$q+q4{W~A*_2q&!w%?xEyKD`=Mpx}vqSuY z=}|LA$k~DAdBs4bG*640vW3T-IV(HB4aLryz6JGz27>N$HQ}ky)u#%l2%r4V_8e^Bz z1n7YEFgHlZHg0NB-^H0xNfH@E3{!>g3m49q1^NzyjA#spp#~80=&0NYn{Z)RAhilL z1C!Q9C#kvQl-|i_T)qcrLu0pd?*^0Art;COu0W5(Je_42Po8jV?e*4EP@7dwcxEf7 zODPTm^l#IiGV;Wu7e!caSV3zql4}4`)Z~TL@5X5mP-sF;(7kVTw>Sgfi*^ z@J`Z^zCe87%}q62PK+x&xl9Bgb*?gHYcU&pX@~shGmkzj(a*t+LQjb`y1D?GJz@&- z6NzW_ic;%eoJN!IVgM4n=E2snt{ASdQigIKG2gwuF+hNOa-eEGGLt%VbC$w7>&J`> zK)h+f0xBH%Fh+oB)?5+8yw(&i6RcBSTn+(EoTv$N;fOHd-Y@DLp_rr>yh82~bq-S& zLSEcgbIu?I*Ow+y>SE57adk|a8d!M6(3*DVNqe;0l}uOjk%K~QZF5e-`BRq=52GS>rgZ}_?v!SMs{@}IG1lx)SsKVnQpI|x4hN%fU#Z7`p zYlBvUgutQrB;HNCLxIL9rPc@&hV93`Rl9h|_EFUm0FvPGzO#M;qO=zIW9`dTWhzHv zh{r?gCtKrel*4xsd}uX7%eZU7jQ-60z2SmK73I!Vg8|!}Ps+3BZCCMvU8z=u3JPqS zIG9N?gootr_`;0`I=b>;u=~Z~62N!?Po5k(pylz1Gw)nswO6>{Q10x<${Xh$tY;zq z`OD;wj9Z~S7tR39dO5s{Hx-EmD)1NhIs3rbt!B-ymLh4k@!5@3`M3d6HWh(dX!H)R zc$6Z=(Y$&WEh(dpTo<8M;qnf?@BqGX+608gL$YAiLiw+hz4UzH#$r*4(D{1K!lnNJ z0{HpB8dZ7mh<2m+517vrC=$+Jcq$14ZXI*~0K8?X z6Lf*BMBHAik4)mYv`s2Ht%M`o{h6{os$*Fan@cpmx483JM^ip?y!@ zYm#Ds>IJ)7z2Jvq7EwwofGP8do(VxgfoRifePXW-T;w?K;LD+{lMoY*bYW=#MO`_) zCh&Ay9HYmF2jdac;vLE3y4YuURcIul19B?WP2=?XIEQF(ePT>S5S$29yH`_3Y-G@x z=jGF+>i#nMutWWG@WJ%dBl3dy<%4A^BjDuMoL7j3)1N=qY@E}RdV44D4i7uF6}v#F zOK^MnP;BRB`gJA5>~^CmR)u}MWZ8-2E6GDZ9Jbt()Oa4%CmviVLnL@{WI`rps(?_F z&A8fg=r}LWIFlqYjyhN#vL-?a91yM4A34SL#v&Ii{QTksElS%RU&b<6U?y)PiWc+6 zC3!r8xgwXu{NiI;CP#4Rj0p^%uA&VBrB|*qOh@rWZ@1?VQWg^02@EN;97ucc9&gq! z-{gFOPxrhevLUPz`9J%b%RtfX-}iybt#zi0kF1X6L+3QSPNo1fA31YQ8;14;m^{mc z^MpA^tT#v5FdpDL!$2=HVToE(?;rq!^_$TNWvBDkkBC`fPhhE#0)F!=|wj2P|C3}&u63@{&H$6$HfOlelKb9wWLXTVL_ATcJz zO@L(ZF{%nFBKVx*EJTP%0I zsHQnChUZy_i^a{jC8I=l@vP7lg_m~-zkFu`S2Ym^am&mTo`3Eh)GvT<_`#DgPesz8 zu7!PK=@)3@>iy?Jny3A_Zjug{SpH#gPxHWs{YiMHfZ+3jC&TK1bMRe;MN|jZcU%ZeYaV02~sgOdNBN}IVMIMrO zvl|31k)r?_oA5fV!}|)_iUdvd&Trj`H0h^2adKo?0M5}Je~Eynolf;E0F+Rc^Bk4Q9hO+7-q+WmXIm=;G#~P_i#zg9+F2N_} z^N#jSJxFxA_HJ{=9o>r8lIS!aw;&|=<&|EqsJd1MqW7m28tR2`3=AjZcqpY6+6D1& zlK{^O9xL2=<16jJ9=C;S(bjTgbZ@Yl;Pdl}E5O-6LJJwZuHA}WU^b5{Ix74N= z0bR`lmah{xfU4WAG4No&1wx@HJB0r56-|f1;|rKG2I%+)-x)GO4k1oTSJqQqswan| z=HLw?nZ~u6zYcDVzEnPqF{lO7cIo`1+vBY~o*N!k9#=S+sCWDup(bxc0 zTu|xff@=h!zOG25^_G!|BE+pz_mbkivxXgDq&OKvbQALBAPcF8NCSk4@1@>Xl}u0t zIp>!kTogF#1SLV|dC7qeI5Asz=UerSRzMrPBLfRd?qi2Xp8hhhnn%-t0Ce{En!`@i zmST$tyuD%>N6XGMZPyOR2B_3=th}oAANR%$)62WoR8&Uq^@J`%&OwS>!!?5NU5^m# z-GQ#=b%2IgNQAnAx z)c5N(r+~yW0Dl?1rhIXQjG{n=*#z;n9x;X>J2pGU!$xfOWKxyoBfrVNn~4~z%mKjd zUpYgtJ$t|{q@Nhlq|mH5I(0UffP~c#+{6V=QVzQp+lpkNJ@XSkIKDBXwuHcaAPt-2 zSr?ryfjFl*fQKvgOqlz@KL+9J98;zX5pLA4t-qWZb2YGwtfsB)tSkUDD@#%XfMbQg`HXlFAik2unCIycLKNnX|5aIkBP z^vlexhYQMh#hK4YhxOs-0*Q8_vVOigNl z`tx;)FF`G#H~{aCaqMefYX@_e`N-}8!6wV1o)=dIcGa5z_?RFD&I5de zq}g9M0Q4w8bo}{_F((wgVLV`Ch(`3m8ojO$pKmc0Y<2N~t!1Xsy&!Zan%* zP$tZ8sg5ovlO2FvxnAA#&S;qM9J}D~We-lVAYJ%(tdXVjUU3m29q$?hM_zH^ zXS0b!>{AeR)3YfXolIaw_T@BuF#~v*lqPoIu9RMVVp^-%7|lx#u<+yO4GPrTkOPf% zoVh4BCidG*j`G*$V^O$HLFnTERD;dt$gflDg-QoDd0YIDkcW z9Uif`dQ*5Hd~@#^AXC3sJ}=zF9$y2-DucnAFEz=(#vP8AB;u3x?*_2 zauTpBkF^x5~ z;0He);mv)z9vkE(j=0Ooy5_(09zZEhx^xaSVk3xnlF=8oPlF_4E7Z^@@LZu08v)Bk zKfhrzQ5*N1=^rjxa1K1>*r)TIE{8#!Uhe#2 zj2>Az8X^X=o|2Ca@G1gzj-cV^7>fs)flW!*Ru2<;%Pc2FCY3u$(IL zWmf>bb(W|cJ0~~-AidxLf%M)5w(m!7AXM~C{Nbgbu(_mI3^mD#0s8P{Q8$fsfG4_; z( z`Tqcy3WZxokDSmZldr6R1`l210kPoC9kGgW>?kJyF4Qsq0CbQ<2ADUpd(GT>UN4Zv z!~-xT5lKz?h^FztWT$r`Q2pS7z;GDC1o&md=aanB6E%BgzFwUUYfcisA`mZNS`o_{ANDwEof1P6^I!SU@HGbMuWp_UA#& zW?TxFlgcw&!D=(TeAI5;qvXKgB$mg;#2g`o)=CHi3b$K5obb6GEJ~p5!XB2^M2YO@ zn~Dz0;ONq>BG!W&C65yx zZv@!fCh312J^ z(syuQ1Gpk=Cf&IKI9^BzXe_>NdZNhi<=22;Sfw|{`7x>oNB}{n6Z!Lm))ki8#e=wB zG8DVUcnL;(nY3(T3grwQ+<_7lc;H07uy5GZI8E`Jxv62`I|ZrS!X)TsZZ3}cRJlI- z>CkAL{{YNuMx@vKr@8l(0H)VC1QEs*b_LCwLT?48&9rt6bb;n4svK16@^#j z${D8zue>BC$Gm!Y_l4cZ7z3`j$b=J

W88x60rWQP{ag!#@}T(AO9=1y*yMMhwH1 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 Z00)BtN1$sSmPv&J<-9Z%+R4^`|JfD4%ohLv literal 0 HcmV?d00001 diff --git a/hardware/readme.md b/hardware/readme.md index 0c2009cc9e..7ecb5d8ff0 100644 --- a/hardware/readme.md +++ b/hardware/readme.md @@ -24,6 +24,9 @@ todo: move Connectors wiki page content into git * [134 pin](Breakout_134pin_7-967288-1) BWM * [154 pin](284617-1-connector) Audi +![img](breakout_boards.jpg) + + # Modules * [stm32 Brain board 48pin](mini48-stm32) * [stm32 Brain board 100pin](brain_board)