Watch
0
0
Fork
You've already forked esp32-c_its-companion
0

Compare commits

..
Author SHA1 Message Date
8f7525a9f3 Remove L67K GNSS support
The driver for the L67K GNSS is really flaky and causes performance issues.
So just remove it to not spread false hope.
2026-08-16 23:16:20 +02:00
49 changed files with 5886 additions and 335601 deletions

3
.gitignore vendored
View file

@ -28,6 +28,3 @@ target/
# Ignore KiCad backups and lock files # Ignore KiCad backups and lock files
hardware/c_its-companion/c_its-companion-backups/ hardware/c_its-companion/c_its-companion-backups/
*.kicad_pro.lck *.kicad_pro.lck
# Ignore FreeCAD backups
*.FCBak

41
Cargo.lock generated
View file

@ -624,21 +624,6 @@ dependencies = [
"heapless 0.9.2", "heapless 0.9.2",
] ]
[[package]]
name = "embassy_gps"
version = "0.1.0"
source = "git+https://github.com/jbeyerstedt/embassy_gps.git?branch=feat%2Frework-gpsfix#75f1a67a69372234330c0c9618a953c415380b99"
dependencies = [
"chrono",
"embassy-futures",
"embassy-time",
"embedded-io-async 0.7.0",
"esp-hal",
"heapless 0.9.2",
"log",
"nmea",
]
[[package]] [[package]]
name = "embedded-can" name = "embedded-can"
version = "0.4.1" version = "0.4.1"
@ -1194,7 +1179,6 @@ dependencies = [
"embassy-futures", "embassy-futures",
"embassy-sync 0.7.2", "embassy-sync 0.7.2",
"embassy-time", "embassy-time",
"embassy_gps",
"embedded-graphics", "embedded-graphics",
"embedded-hal-bus", "embedded-hal-bus",
"embedded-io 0.7.1", "embedded-io 0.7.1",
@ -1216,7 +1200,6 @@ dependencies = [
"prost", "prost",
"prost-build", "prost-build",
"static_cell", "static_cell",
"tinytga",
"trouble-host", "trouble-host",
"ublox", "ublox",
] ]
@ -1783,20 +1766,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d"
[[package]]
name = "nmea"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2086c773d18da556c05ca235596d163c00379027189bafe2209ae40ebd19717c"
dependencies = [
"arrayvec",
"cfg-if",
"chrono",
"heapless 0.8.0",
"nom",
"num-traits",
]
[[package]] [[package]]
name = "nom" name = "nom"
version = "7.1.3" version = "7.1.3"
@ -2530,16 +2499,6 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "tinytga"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "477839bd612acb4d0551915eaf6eef8cc1b3a9dd58e18e9c2b746c78614a25d5"
dependencies = [
"embedded-graphics",
"nom",
]
[[package]] [[package]]
name = "toml_datetime" name = "toml_datetime"
version = "1.1.1+spec-1.1.0" version = "1.1.1+spec-1.1.0"

View file

@ -15,7 +15,7 @@ path = "./src/test.rs"
required-features = ["std", "cam"] required-features = ["std", "cam"]
[features] [features]
default = ["esp", "spat", "gnss_ubx", "screen"] default = ["esp", "spat", "gnss_ubx", "screen", "ble"]
# build for ESP (needed to build test for `host-tuple`) # build for ESP (needed to build test for `host-tuple`)
esp = [ esp = [
@ -40,8 +40,6 @@ std = ["c-its-parser/std", "esp32-cits-core/std"]
# enable u-blox GNSS module # enable u-blox GNSS module
gnss_ubx = ["_gnss", "_uart", "dep:ublox"] gnss_ubx = ["_gnss", "_uart", "dep:ublox"]
# enable L67K GNSS module
gnss_l67k = ["_gnss", "dep:embassy_gps"]
# echo CAM data on serial # echo CAM data on serial
cam = ["c-its-parser/cam"] cam = ["c-its-parser/cam"]
# send CAM autonomously # send CAM autonomously
@ -53,11 +51,11 @@ spat = ["c-its-parser/spatem", "c-its-parser/mapem"]
# enable some debug printing (without enabling debug logging of the ESP RTOS) # enable some debug printing (without enabling debug logging of the ESP RTOS)
spat_debug = [] spat_debug = []
# enable ST7789 based display # enable ST7789 based display
screen = ["dep:mipidsi", "dep:embedded-graphics", "dep:embedded-hal-bus", "dep:profont", "dep:tinytga"] screen = ["dep:mipidsi", "dep:embedded-graphics", "dep:embedded-hal-bus", "dep:profont"]
# enable I/O via UART # enable I/O via UART
uart = ["_uart", "_gnss"] uart = ["_uart", "_gnss"]
# enable I/O via BLE # enable I/O via BLE
ble = ["_gnss"] ble = ["_gnss", "denm"]
# internal feature, that any UART I/O is enabled # internal feature, that any UART I/O is enabled
_uart = [] _uart = []
@ -105,7 +103,6 @@ esp-radio = { version = "0.18.0", optional = true, features = [
trouble-host = { version = "0.6.0", features = ["gatt", "central", "derive", "default-packet-pool"] } trouble-host = { version = "0.6.0", features = ["gatt", "central", "derive", "default-packet-pool"] }
static_cell = "2" static_cell = "2"
embassy_gps = { version = "0.1.0", optional = true, default-features = false, features = ["esp", "log-04"], git = "https://github.com/jbeyerstedt/embassy_gps.git", branch = "feat/rework-gpsfix" }
esp32-cits-core = { version = "0.1.0", default-features = false, git = "https://git.hamburg.ccc.de/jtbx/esp32-cits-core", branch = "main" } esp32-cits-core = { version = "0.1.0", default-features = false, git = "https://git.hamburg.ccc.de/jtbx/esp32-cits-core", branch = "main" }
embedded-hal-bus = { version = "0.3.0", optional = true } embedded-hal-bus = { version = "0.3.0", optional = true }
embedded-graphics = { version = "0.8.2", optional = true } embedded-graphics = { version = "0.8.2", optional = true }
@ -123,7 +120,6 @@ mipidsi = { version = "0.10.0", optional = true }
num-traits = { version = "0.2.19", default-features = false, features = ["libm"] } num-traits = { version = "0.2.19", default-features = false, features = ["libm"] }
profont = { version = "0.7.0", optional = true } profont = { version = "0.7.0", optional = true }
prost = { version = "0.14", default-features = false, features = ["derive"] } prost = { version = "0.14", default-features = false, features = ["derive"] }
tinytga = { version = "0.5.0", optional = true }
ublox = { version = "0.10", optional = true, default-features = false, features = ["alloc", "ubx_proto27"] } ublox = { version = "0.10", optional = true, default-features = false, features = ["alloc", "ubx_proto27"] }
[dev-dependencies] [dev-dependencies]

View file

@ -6,15 +6,14 @@ Displays different C-ITS receive-only use cases for cheap.
The code is currently tailored to: The code is currently tailored to:
- Seeed XIAO ESP32-C5 (8MB PSRAM) - Seeed XIAO ESP32-C5 (8MB PSRAM)
- U-Blox M10Q GNSS (connected on GPIO12 (RX), GPIO11 (TX), and GPIO25 (reset)) - U-Blox M10Q GNSS (connected on GPIO12 (RX), GPIO11 (TX), and GPIO25 (reset))
or Seeed XIAO L67K (connected on GPIO12 (RX), GPIO11 (TX), GPIO1 (wakeup) and GPIO25 (reset)) only available with `gnss_ubx` feature (which is included in `spat` feature)
only available with `gnss_ubx` or `gnss_l67k` feature (which is included in `spat` feature)
- Some ST7789 240*280px screen (connected on GPIO8 (SCL/ SCK), GPIO10 (SDA/ MOSI), GPIO7 (reset), GPIO23 (DC), GPIO24 (CS), GPIO0 (BL)) - Some ST7789 240*280px screen (connected on GPIO8 (SCL/ SCK), GPIO10 (SDA/ MOSI), GPIO7 (reset), GPIO23 (DC), GPIO24 (CS), GPIO0 (BL))
only available with `screen` feature (which is included in `spat` feature) only available with `screen` feature (which is included in `spat` feature)
## Features ## Features
### GNSS ### GNSS
Enable u-blox or L67K GNSS module and in main application logic/ state. Enable u-blox GNSS module and in main application logic/ state.
### SPAT ### SPAT
Takes the current position and heading from the GNSS receiver and displays the signal phases of the upcoming intersection. Takes the current position and heading from the GNSS receiver and displays the signal phases of the upcoming intersection.
@ -57,10 +56,9 @@ Enable UART I/O protocol according to [docs/uart-protocol.md](./docs/uart-protoc
### BLE ### BLE
Enable BLE I/O protocol according to [docs/ble-protocol.md](./docs/ble-protocol.md). Enable BLE I/O protocol according to [docs/ble-protocol.md](./docs/ble-protocol.md).
Enabling `denm` feature or `cam` feature is recommended, otherwise no data will be received. Will enable `denm` feature, but also enabling `cam` is recommended for full functionality.
Note: When changing the set of supported messages on the BLE interface, you may need to turn bluetooth off and on again on your client device. Note: Raw message reception is currently not implemented!
Otherwise the client may not re-scan the service's characteristics and still use the previous set of characteristics.
## Usage ## Usage
@ -98,8 +96,7 @@ Additional features are available through feature flags:
Officially supported feature combinations are: Officially supported feature combinations are:
- `esp,spat,gnss_ubx,screen` (default features, "standalone") - `esp,spat,gnss_ubx,screen` (default features, "standalone")
- `esp,spat,gnss_ubx,screen,ble` ("standalone with BLE") - `esp,spat,gnss_ubx,screen,cam_tx` ("standalone with CAM")
- `esp,spat,gnss_ubx,screen,cam_tx,ble` ("standalone with CAM")
- `esp,spat,gnss_ubx,screen,cam_tx,cam,denm` - `esp,spat,gnss_ubx,screen,cam_tx,cam,denm`
- `esp,uart,cam,denm` ("smartphone companion with UART") - `esp,uart,cam,denm` ("smartphone companion with UART")
- `esp,ble,cam,denm,cam_tx` ("smartphone companion with BLE") - `esp,ble,cam,denm,cam_tx` ("smartphone companion with BLE")
@ -120,33 +117,3 @@ The unit tests in this project are meant to be run on the host:
``` ```
cargo test --target host-tuple --bin test --no-default-features -F std,spat cargo test --target host-tuple --bin test --no-default-features -F std,spat
``` ```
## PCB and Housing
A simple PCB to combine the u-blox SAM-M10Q, a XIAO ESP32-C5 and the screen can be found in [hardware/c_its-companion/](./hardware/c_its-companion/) including finished gerber files.
Additional hardware:
- SMD Pin-Header 8 pos.: Amphenol 10129380-908001BLF
- Snap-in stand-off 8mm: WE 702910000
(You may try to put the display lower with header Samtech TSM-108-04-T-SV and stand-off WE 702917000, but antenna needs to be plugged in before putting the display on then.)
The housing is a FreeCAD model at [hardware/housing/c_its-companion-housing.FCStd](./hardware/housing/c_its-companion-housing.FCStd), but the same folder also contains finished 3mf models that can be loaded into a 3D printer slicer.
Exports are available for:
- 7mm: EREMIT 654060 (6.5x40x60 mm) LiPo battery
- 9mm: Some 9x40x60 mm LiPo battery, e.g. LP803860 (2000 mAh)
The display is expected to be soldered to the pin header directly to save height.
## Tips and Tricks
### Create TGA Assets
Images are loaded as TGA assets, but shall not have an alpha channel.
You can convert them using [ImageMagick](https://imagemagick.org) like this:
```shell
# resize to 25px height, adding a black background to the white symbol and vice versa
magick Sinnbild_Radfahrer_StVO_1992-200px-white.png -resize x25 -background black -alpha background -flatten -alpha off -verbose Sinnbild_Radfahrer_StVO_1992-25px-white.tga
magick Sinnbild_Radfahrer_StVO_1992-200px-black.png -resize x25 -background white -alpha background -flatten -alpha off -verbose Sinnbild_Radfahrer_StVO_1992-25px-black.tga
```

View file

@ -9,7 +9,6 @@ fn main() -> std::io::Result<()> {
println!("cargo:rustc-link-arg=-Tlinkall.x"); println!("cargo:rustc-link-arg=-Tlinkall.x");
} }
// compile protobuf definition to rust code
let descriptor_path = let descriptor_path =
std::path::PathBuf::from(env::var("OUT_DIR").unwrap()).join("proto_descriptor.bin"); std::path::PathBuf::from(env::var("OUT_DIR").unwrap()).join("proto_descriptor.bin");
@ -18,27 +17,6 @@ fn main() -> std::io::Result<()> {
.compile_well_known_types() .compile_well_known_types()
.compile_protos(&["docs/c_its-messages.proto"], &["docs/"])?; .compile_protos(&["docs/c_its-messages.proto"], &["docs/"])?;
// get git revision
println!("cargo:rustc-rerun-if-changed=.git/HEAD");
// length:
// - tag name: 6-8 chars (v0.1.0 to v1.23.42)
// - offset+hash: 0-12 chars (up to 99 commits from tag + 8 char hash)
// - SUM: 6-20
let git_output = std::process::Command::new("git")
.args(["describe", "--tags", "--match", "v*", "--always"])
.output()
.unwrap();
assert!(
git_output.stderr.is_empty(),
"{}",
String::from_utf8(git_output.stderr).unwrap()
);
println!(
"cargo:rustc-env=GIT_REVISION={}",
String::from_utf8(git_output.stdout).unwrap()
);
Ok(()) Ok(())
} }

View file

@ -19,16 +19,12 @@ V2X data is exposed via the service UUID `c0b70000-d4f4-4000-ada8-f99a02ee315c`
UUID | Type | Description UUID | Type | Description
------------------------------------- | --------------- | ----------- ------------------------------------- | --------------- | -----------
c0b70001-d4f4-4001-ada8-f99a02ee315c | `PositionState` | Set position from external source c0b70001-d4f4-4001-ada8-f99a02ee315c | `PositionState` | Set position from external source
c0b70001-d4f4-4002-ada8-f99a02ee315c | `RawNotify` | Raw message notification c0b70001-d4f4-4001-ada8-f99a02ee315c | `RawMsgRx` | Raw CAM message (de-duplicated/ rate-limited)
c0b70001-d4f4-4003-ada8-f99a02ee315c | `RawMsgRx` | Raw CAM message (de-duplicated/ rate-limited) c0b70001-d4f4-4002-ada8-f99a02ee315c | `CamEvent` | Latest received CAM
c0b70001-d4f4-4004-ada8-f99a02ee315c | `CamEvent` | Latest received CAM c0b70001-d4f4-4003-ada8-f99a02ee315c | `RawMsgRx` | Raw DENM message (de-duplicated/ rate-limited)
c0b70001-d4f4-4005-ada8-f99a02ee315c | `RawMsgRx` | Raw DENM message (de-duplicated/ rate-limited) c0b70001-d4f4-4004-ada8-f99a02ee315c | `DenmEvent` | Latest received DENM
c0b70001-d4f4-4006-ada8-f99a02ee315c | `DenmEvent` | Latest received DENM c0b70001-d4f4-4005-ada8-f99a02ee315c | `RawMsgRx` | Raw MAPEM message (de-duplicated/ rate-limited)
c0b70001-d4f4-4007-ada8-f99a02ee315c | `RawMsgRx` | Raw MAPEM message (de-duplicated/ rate-limited) c0b70001-d4f4-4006-ada8-f99a02ee315c | `RawMsgRx` | Raw SPATEM message (de-duplicated/ rate-limited)
c0b70001-d4f4-4008-ada8-f99a02ee315c | `RawMsgRx` | Raw SPATEM message (de-duplicated/ rate-limited)
Since a modern BLE notification can only fit up tp 251 bytes of payload, the raw messages can only be polled.
Please subscribe to `c0b70001-d4f4-4002-ada8-f99a02ee315c` and use the message ID to determine from which service to read the incoming value.
## Message Format ## Message Format
@ -105,20 +101,3 @@ Repetitions of the same message should be dropped by the BLE server.
Consecutive messages with no relevant changes may be dropped by the BLE server while keeping some minimal publishing rate, e.g.: Consecutive messages with no relevant changes may be dropped by the BLE server while keeping some minimal publishing rate, e.g.:
- only publish MAPEMs every 10 seconds (since content doesn't change, but client may be restarted after first MAPEM from an intersection was received) - only publish MAPEMs every 10 seconds (since content doesn't change, but client may be restarted after first MAPEM from an intersection was received)
- drop high-frequency CAMs (only publish "full" CAMs which include the low-frequency container) - drop high-frequency CAMs (only publish "full" CAMs which include the low-frequency container)
Maximum message size (assuming realistic value ranges):
field name | tag size | (max.) data size
--------------------- | -------- | ---------
msg_type | 1 | 1 (VARINT(21))
payload | 1 | 2+1394 (LEN(1394) + payload)
**SUM** | 2 + | 1397 = 1399 byte
### Raw Message Notification
Maximum message size (assuming realistic value ranges):
field name | tag size | (max.) data size
--------------------- | -------- | ---------
msg_type | 1 | 1 (VARINT(21))
**SUM** | 1 + | 1 = 2 byte

View file

@ -71,10 +71,6 @@ message RawMsgTx {
optional uint32 stationType = 6; // for source position vector optional uint32 stationType = 6; // for source position vector
} }
message RawNotify {
required uint32 message_type = 1; // ITS `MessageId` integer value
}
// ------------------------------ // ------------------------------
// Messages // Messages
// ------------------------------ // ------------------------------

View file

@ -3,23 +3,20 @@
set -eu set -eu
mode=${1:-help} mode=${1:-help}
wasm_target="--chrome --headless"
extended=${2:-false} extended=${2:-false}
features_base=( features_base=(
spat,gnss_ubx,screen # "standalone" simple uart,cam,denm
spat,gnss_ubx,screen,ble # "standalone" with BLE ble,cam,denm,cam_tx
spat,gnss_ubx,screen,ble,cam_tx # "standalone" with CAM uart,ble,cam,denm
spat,gnss_ubx,screen,cam_tx,cam,denm spat,gnss_ubx,screen
uart,cam,denm # "smartphone companion with UART" spat,gnss_ubx,screen,cam_tx
ble,cam,denm,cam_tx # "smartphone companion with BLE"
) )
features_more=( features_more=(
uart,ble,cam,denm
spat,gnss_ubx,screen,cam_tx
spat,gnss_ubx,screen,cam,denm spat,gnss_ubx,screen,cam,denm
spat,gnss_ubx,screen,cam_tx,cam,denm spat,gnss_ubx,screen,cam_tx,cam,denm
gnss_ubx,screen,cam_tx,cam,denm
) )
features_test=( features_test=(
spat,cam,denm,uart spat,cam,denm,uart

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{ {
"board": { "board": {
"active_layer": 25, "active_layer": 0,
"active_layer_preset": "", "active_layer_preset": "",
"auto_track_width": true, "auto_track_width": true,
"hidden_netclasses": [], "hidden_netclasses": [],

View file

@ -38,25 +38,6 @@
"zx": -2.1759660739917308e-08, "zx": -2.1759660739917308e-08,
"zy": 0.6427874565124512, "zy": 0.6427874565124512,
"zz": 0.7660446763038635 "zz": 0.7660446763038635
},
{
"name": "ISO-front-sideways",
"ww": 1.0,
"wx": 12.766021728515625,
"wy": 18.745622634887695,
"wz": -19.07516098022461,
"xw": 0.0,
"xx": 0.3144621253013611,
"xy": -0.9000988006591797,
"xz": 0.30155274271965027,
"yw": 0.0,
"yx": 0.9491636157035828,
"yy": 0.29337260127067566,
"yz": -0.11412015557289124,
"zw": 0.0,
"zx": 0.014252186752855778,
"zy": 0.32210931181907654,
"zz": 0.9465939402580261
} }
], ],
"design_settings": { "design_settings": {
@ -311,7 +292,7 @@
"internal_id": "", "internal_id": "",
"mfg": "", "mfg": "",
"mpn": "", "mpn": "",
"sch_revision": "v1.0" "sch_revision": "v0.1"
}, },
"layer_pairs": [], "layer_pairs": [],
"layer_presets": [], "layer_presets": [],
@ -622,7 +603,6 @@
"netlist": "", "netlist": "",
"plot": "", "plot": "",
"specctra_dsn": "", "specctra_dsn": "",
"step": "../housing/c_its-companion-v1.0.step",
"vrml": "" "vrml": ""
}, },
"page_layout_descr_file": "" "page_layout_descr_file": ""
@ -695,24 +675,12 @@
"label": "Datasheet", "label": "Datasheet",
"name": "Datasheet", "name": "Datasheet",
"show": true "show": true
},
{
"group_by": false,
"label": "Description",
"name": "Description",
"show": false
},
{
"group_by": false,
"label": "#",
"name": "${ITEM_NUMBER}",
"show": false
} }
], ],
"filter_string": "", "filter_string": "",
"group_symbols": true, "group_symbols": true,
"include_excluded_from_bom": true, "include_excluded_from_bom": true,
"name": "", "name": "Default Editing",
"sort_asc": true, "sort_asc": true,
"sort_field": "Reference" "sort_field": "Reference"
}, },
@ -757,7 +725,7 @@
"uuid": "9ad468b0-d7e4-4d4a-b652-c4a81a952e30" "uuid": "9ad468b0-d7e4-4d4a-b652-c4a81a952e30"
} }
], ],
"used_designators": "H1-4,C1,#PWR1-11,J1-2,SW1,TP1-5,U1-2,#FLG1-3", "used_designators": "C1,#PWR1-10,J1-2,SW1,TP1,U1-2,#FLG1-3",
"variants": [] "variants": []
}, },
"sheets": [ "sheets": [

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,118 +0,0 @@
(footprint "Mounting_Wuerth_WA-SNSN-2.0mm_H8mm_709653000"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(descr "Mounting Hardware, drill hole 2.0mm, height 8, Wuerth electronics 709653000 (https://www.we-online.com/components/products/datasheet/709653000.pdf)")
(tags "Mounting 2.0mm 709653000")
(property "Reference" "REF**"
(at 0 -3.95 0)
(layer "F.SilkS")
(uuid "276ecaff-3259-4bdb-a318-4e4bcec61921")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "Mounting_Wuerth_WA-SNSN-2.0mm_H8mm_709653000"
(at 0 3.95 0)
(layer "F.Fab")
(uuid "c83307ee-1780-4e7c-ba49-6db91bf6d85c")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "76a81e5b-f76a-4297-b483-e56d634ec233")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "e8a2abe1-8c02-4d58-a78a-5aafa491e78a")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "KiLib_Generator" "mounting_hardware/Wuerth_SMT_spacer"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "7b7b4b98-57da-4b83-8a3a-d56209527a94")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr smd allow_soldermask_bridges)
(duplicate_pad_numbers_are_jumpers no)
(fp_circle
(center 0 0)
(end 1.75 0)
(stroke
(width 0.05)
(type solid)
)
(fill no)
(layer "F.CrtYd")
(uuid "03f6d4cc-b111-4551-92b5-a505d52ec32e")
)
(fp_circle
(center 0 0)
(end 1 0)
(stroke
(width 0.1)
(type solid)
)
(fill no)
(layer "F.Fab")
(uuid "51af9f8e-3050-418a-8fce-682c9308e104")
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "25803184-0736-480c-b1a8-58343859c491")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "" np_thru_hole circle
(at 0 0)
(size 2 2)
(drill 2)
(layers "*.Cu" "*.Mask")
(uuid "3cc834fb-6d81-4fd9-b1d5-2b09965b58a5")
)
(embedded_fonts no)
(model "${KIPRJMOD}/library/Mounting_Wuerth_WA-SNSN-2.0mm_H8mm_709653000.stp"
(offset
(xyz 0 0 4)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz -0 -0 -0)
)
)
)

View file

@ -1,118 +0,0 @@
(footprint "Mounting_Wuerth_WA-SNSR-3.0mm_H8mm_702910000"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(descr "Mounting Hardware, drill hole 3.0mm, height 8, Wuerth electronics 702910000 (https://www.we-online.com/components/products/datasheet/702910000.pdf)")
(tags "Mounting 3.0mm 702910000")
(property "Reference" "REF**"
(at 0 -3.95 0)
(layer "F.SilkS")
(uuid "519123da-9027-4dc9-983e-c1af92c74bca")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "Mounting_Wuerth_WA-SNSR-3.0mm_H8mm_709653000"
(at 0 3.95 0)
(layer "F.Fab")
(uuid "657f373c-6469-4c2a-8d0a-45c1248a0096")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "4824841d-86d1-4c9e-82c6-3320ce9c3bc5")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "0b9c08cb-3ab2-4558-b34e-9ca94d9161ee")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "KiLib_Generator" "mounting_hardware/Wuerth_SMT_spacer"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "87f455aa-fb50-4a44-92ee-bcc8e5cdbb49")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr smd allow_soldermask_bridges)
(duplicate_pad_numbers_are_jumpers no)
(fp_circle
(center 0 0)
(end 2.05 0)
(stroke
(width 0.05)
(type solid)
)
(fill no)
(layer "F.CrtYd")
(uuid "23751fc5-61f6-4371-b602-56236ab6fac9")
)
(fp_circle
(center 0 0)
(end 1.5 0)
(stroke
(width 0.1)
(type solid)
)
(fill no)
(layer "F.Fab")
(uuid "c9ae63b4-7ec4-4016-9343-cf80bfc3df37")
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "b42331e0-1e08-435a-b246-24a914b45f86")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "" np_thru_hole circle
(at 0 0)
(size 3 3)
(drill 3)
(layers "*.Cu" "*.Mask")
(uuid "e8b39436-1604-4ea9-bc81-e168da01c5eb")
)
(embedded_fonts no)
(model "${KIPRJMOD}/library/Mounting_Wuerth_WA-SNSR-3.0mm_H8mm_702910000.stp"
(offset
(xyz 0 0 8)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz -180 -0 -0)
)
)
)

View file

@ -1,881 +0,0 @@
ISO-10303-21;
HEADER;
/* Generated by software containing ST-Developer
* from STEP Tools, Inc. (www.steptools.com)
*/
/* OPTION: strings as raw bytes, not using required /X/ escapes */
FILE_DESCRIPTION(
/* description */ ('Unknown'),
/* implementation_level */ '2;1');
FILE_NAME(
/* name */ '702910000',
/* time_stamp */ '2019-02-18T11:42:06+01:00',
/* author */ ('Unknown'),
/* organization */ ('Unknown'),
/* preprocessor_version */ 'ST-DEVELOPER v16.7',
/* originating_system */ 'DEX',
/* authorisation */ $);
FILE_SCHEMA (('AUTOMOTIVE_DESIGN {1 0 10303 214 3 1 1}'));
ENDSEC;
DATA;
#10=PROPERTY_DEFINITION_REPRESENTATION(#14,#12);
#11=PROPERTY_DEFINITION_REPRESENTATION(#15,#13);
#12=REPRESENTATION('',(#16),#811);
#13=REPRESENTATION('',(#17),#811);
#14=PROPERTY_DEFINITION('pmi validation property','',#816);
#15=PROPERTY_DEFINITION('pmi validation property','',#816);
#16=VALUE_REPRESENTATION_ITEM('number of annotations',COUNT_MEASURE(0.));
#17=VALUE_REPRESENTATION_ITEM('number of views',COUNT_MEASURE(0.));
#18=SHAPE_REPRESENTATION_RELATIONSHIP('','',#439,#19);
#19=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#437),#811);
#20=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#688,#689,#690,#691),(#692,#693,
#694,#695),(#696,#697,#698,#699),(#700,#701,#702,#703),(#704,#705,#706,
#707),(#708,#709,#710,#711),(#712,#713,#714,#715),(#716,#717,#718,#719),
(#720,#721,#722,#723),(#724,#725,#726,#727)),.RULED_SURF.,.F.,.F.,.F.,(4,
2,2,2,4),(4,4),(0.,0.25,0.5,0.75,1.),(0.,1.),.UNSPECIFIED.);
#21=B_SPLINE_SURFACE_WITH_KNOTS('',3,3,((#729,#730,#731,#732),(#733,#734,
#735,#736),(#737,#738,#739,#740),(#741,#742,#743,#744),(#745,#746,#747,
#748),(#749,#750,#751,#752),(#753,#754,#755,#756),(#757,#758,#759,#760),
(#761,#762,#763,#764),(#765,#766,#767,#768)),.RULED_SURF.,.F.,.F.,.F.,(4,
2,2,2,4),(4,4),(0.,0.25,0.5,0.75,1.),(0.,1.),.UNSPECIFIED.);
#22=B_SPLINE_CURVE_WITH_KNOTS('',3,(#630,#631,#632,#633,#634,#635,#636),
.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0.,0.000392245374696745,0.000784490749393491,
0.00117673612409024,0.00156898149878698),.UNSPECIFIED.);
#23=B_SPLINE_CURVE_WITH_KNOTS('',3,(#644,#645,#646,#647,#648,#649,#650),
.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0.,0.000392245374696745,0.000784490749393491,
0.00117673612409024,0.00156898149878698),.UNSPECIFIED.);
#24=B_SPLINE_CURVE_WITH_KNOTS('',3,(#780,#781,#782,#783,#784,#785,#786),
.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0.,0.000396668400197497,0.000793336800394994,
0.00119000520059249,0.00158667360078999),.UNSPECIFIED.);
#25=B_SPLINE_CURVE_WITH_KNOTS('',3,(#791,#792,#793,#794,#795,#796,#797),
.UNSPECIFIED.,.F.,.F.,(4,1,1,1,4),(0.,0.000396668400197497,0.000793336800394994,
0.00119000520059249,0.00158667360078999),.UNSPECIFIED.);
#26=CYLINDRICAL_SURFACE('',#449,2.);
#27=CYLINDRICAL_SURFACE('',#456,1.45);
#28=CYLINDRICAL_SURFACE('',#459,1.45);
#29=CYLINDRICAL_SURFACE('',#469,1.05);
#30=CYLINDRICAL_SURFACE('',#470,0.5);
#31=CYLINDRICAL_SURFACE('',#475,0.5);
#32=LINE('',#593,#72);
#33=LINE('',#595,#73);
#34=LINE('',#599,#74);
#35=LINE('',#601,#75);
#36=LINE('',#603,#76);
#37=LINE('',#605,#77);
#38=LINE('',#607,#78);
#39=LINE('',#609,#79);
#40=LINE('',#611,#80);
#41=LINE('',#613,#81);
#42=LINE('',#615,#82);
#43=LINE('',#617,#83);
#44=LINE('',#619,#84);
#45=LINE('',#622,#85);
#46=LINE('',#626,#86);
#47=LINE('',#628,#87);
#48=LINE('',#638,#88);
#49=LINE('',#642,#89);
#50=LINE('',#654,#90);
#51=LINE('',#656,#91);
#52=LINE('',#660,#92);
#53=LINE('',#662,#93);
#54=LINE('',#667,#94);
#55=LINE('',#671,#95);
#56=LINE('',#673,#96);
#57=LINE('',#675,#97);
#58=LINE('',#677,#98);
#59=LINE('',#681,#99);
#60=LINE('',#683,#100);
#61=LINE('',#685,#101);
#62=LINE('',#772,#102);
#63=LINE('',#774,#103);
#64=LINE('',#778,#104);
#65=LINE('',#788,#105);
#66=LINE('',#789,#106);
#67=LINE('',#799,#107);
#68=LINE('',#801,#108);
#69=LINE('',#802,#109);
#70=LINE('',#806,#110);
#71=LINE('',#808,#111);
#72=VECTOR('',#482,1000.);
#73=VECTOR('',#483,1000.);
#74=VECTOR('',#486,1000.);
#75=VECTOR('',#487,1000.);
#76=VECTOR('',#490,1000.);
#77=VECTOR('',#491,1000.);
#78=VECTOR('',#492,1000.);
#79=VECTOR('',#493,1000.);
#80=VECTOR('',#496,1000.);
#81=VECTOR('',#497,1000.);
#82=VECTOR('',#498,1000.);
#83=VECTOR('',#499,1000.);
#84=VECTOR('',#502,1000.);
#85=VECTOR('',#505,1000.);
#86=VECTOR('',#510,1000.);
#87=VECTOR('',#511,1000.);
#88=VECTOR('',#512,1000.);
#89=VECTOR('',#515,1000.);
#90=VECTOR('',#520,1000.);
#91=VECTOR('',#521,1000.);
#92=VECTOR('',#524,1000.);
#93=VECTOR('',#525,1000.);
#94=VECTOR('',#532,1000.);
#95=VECTOR('',#535,1000.);
#96=VECTOR('',#538,1000.);
#97=VECTOR('',#539,1000.);
#98=VECTOR('',#540,1000.);
#99=VECTOR('',#547,1000.);
#100=VECTOR('',#548,1000.);
#101=VECTOR('',#549,1000.);
#102=VECTOR('',#562,1000.);
#103=VECTOR('',#563,1000.);
#104=VECTOR('',#568,1000.);
#105=VECTOR('',#569,1000.);
#106=VECTOR('',#570,1000.);
#107=VECTOR('',#571,1000.);
#108=VECTOR('',#574,1000.);
#109=VECTOR('',#575,1000.);
#110=VECTOR('',#582,1000.);
#111=VECTOR('',#585,1000.);
#112=ORIENTED_EDGE('',*,*,#228,.F.);
#113=ORIENTED_EDGE('',*,*,#229,.T.);
#114=ORIENTED_EDGE('',*,*,#230,.T.);
#115=ORIENTED_EDGE('',*,*,#231,.T.);
#116=ORIENTED_EDGE('',*,*,#232,.T.);
#117=ORIENTED_EDGE('',*,*,#233,.T.);
#118=ORIENTED_EDGE('',*,*,#234,.F.);
#119=ORIENTED_EDGE('',*,*,#235,.T.);
#120=ORIENTED_EDGE('',*,*,#236,.F.);
#121=ORIENTED_EDGE('',*,*,#237,.T.);
#122=ORIENTED_EDGE('',*,*,#230,.F.);
#123=ORIENTED_EDGE('',*,*,#238,.F.);
#124=ORIENTED_EDGE('',*,*,#232,.F.);
#125=ORIENTED_EDGE('',*,*,#239,.F.);
#126=ORIENTED_EDGE('',*,*,#240,.F.);
#127=ORIENTED_EDGE('',*,*,#241,.F.);
#128=ORIENTED_EDGE('',*,*,#242,.T.);
#129=ORIENTED_EDGE('',*,*,#243,.F.);
#130=ORIENTED_EDGE('',*,*,#244,.T.);
#131=ORIENTED_EDGE('',*,*,#245,.F.);
#132=ORIENTED_EDGE('',*,*,#246,.F.);
#133=ORIENTED_EDGE('',*,*,#228,.T.);
#134=ORIENTED_EDGE('',*,*,#247,.F.);
#135=ORIENTED_EDGE('',*,*,#248,.F.);
#136=ORIENTED_EDGE('',*,*,#249,.F.);
#137=ORIENTED_EDGE('',*,*,#250,.T.);
#138=ORIENTED_EDGE('',*,*,#251,.F.);
#139=ORIENTED_EDGE('',*,*,#252,.F.);
#140=ORIENTED_EDGE('',*,*,#253,.F.);
#141=ORIENTED_EDGE('',*,*,#250,.F.);
#142=ORIENTED_EDGE('',*,*,#254,.T.);
#143=ORIENTED_EDGE('',*,*,#255,.T.);
#144=ORIENTED_EDGE('',*,*,#256,.T.);
#145=ORIENTED_EDGE('',*,*,#257,.T.);
#146=ORIENTED_EDGE('',*,*,#258,.T.);
#147=ORIENTED_EDGE('',*,*,#259,.F.);
#148=ORIENTED_EDGE('',*,*,#253,.T.);
#149=ORIENTED_EDGE('',*,*,#256,.F.);
#150=ORIENTED_EDGE('',*,*,#260,.F.);
#151=ORIENTED_EDGE('',*,*,#261,.T.);
#152=ORIENTED_EDGE('',*,*,#262,.T.);
#153=ORIENTED_EDGE('',*,*,#263,.F.);
#154=ORIENTED_EDGE('',*,*,#257,.F.);
#155=ORIENTED_EDGE('',*,*,#262,.F.);
#156=ORIENTED_EDGE('',*,*,#264,.F.);
#157=ORIENTED_EDGE('',*,*,#265,.F.);
#158=ORIENTED_EDGE('',*,*,#231,.F.);
#159=ORIENTED_EDGE('',*,*,#237,.F.);
#160=ORIENTED_EDGE('',*,*,#266,.T.);
#161=ORIENTED_EDGE('',*,*,#239,.T.);
#162=ORIENTED_EDGE('',*,*,#267,.F.);
#163=ORIENTED_EDGE('',*,*,#268,.T.);
#164=ORIENTED_EDGE('',*,*,#269,.F.);
#165=ORIENTED_EDGE('',*,*,#260,.T.);
#166=ORIENTED_EDGE('',*,*,#255,.F.);
#167=ORIENTED_EDGE('',*,*,#261,.F.);
#168=ORIENTED_EDGE('',*,*,#269,.T.);
#169=ORIENTED_EDGE('',*,*,#270,.T.);
#170=ORIENTED_EDGE('',*,*,#264,.T.);
#171=ORIENTED_EDGE('',*,*,#271,.F.);
#172=ORIENTED_EDGE('',*,*,#235,.F.);
#173=ORIENTED_EDGE('',*,*,#243,.T.);
#174=ORIENTED_EDGE('',*,*,#241,.T.);
#175=ORIENTED_EDGE('',*,*,#265,.T.);
#176=ORIENTED_EDGE('',*,*,#270,.F.);
#177=ORIENTED_EDGE('',*,*,#268,.F.);
#178=ORIENTED_EDGE('',*,*,#272,.T.);
#179=ORIENTED_EDGE('',*,*,#266,.F.);
#180=ORIENTED_EDGE('',*,*,#236,.T.);
#181=ORIENTED_EDGE('',*,*,#271,.T.);
#182=ORIENTED_EDGE('',*,*,#240,.T.);
#183=ORIENTED_EDGE('',*,*,#273,.F.);
#184=ORIENTED_EDGE('',*,*,#272,.F.);
#185=ORIENTED_EDGE('',*,*,#274,.F.);
#186=ORIENTED_EDGE('',*,*,#275,.F.);
#187=ORIENTED_EDGE('',*,*,#245,.T.);
#188=ORIENTED_EDGE('',*,*,#276,.T.);
#189=ORIENTED_EDGE('',*,*,#277,.T.);
#190=ORIENTED_EDGE('',*,*,#278,.T.);
#191=ORIENTED_EDGE('',*,*,#275,.T.);
#192=ORIENTED_EDGE('',*,*,#279,.T.);
#193=ORIENTED_EDGE('',*,*,#280,.T.);
#194=ORIENTED_EDGE('',*,*,#281,.T.);
#195=ORIENTED_EDGE('',*,*,#259,.T.);
#196=ORIENTED_EDGE('',*,*,#248,.T.);
#197=ORIENTED_EDGE('',*,*,#282,.F.);
#198=ORIENTED_EDGE('',*,*,#280,.F.);
#199=ORIENTED_EDGE('',*,*,#283,.T.);
#200=ORIENTED_EDGE('',*,*,#249,.T.);
#201=ORIENTED_EDGE('',*,*,#283,.F.);
#202=ORIENTED_EDGE('',*,*,#279,.F.);
#203=ORIENTED_EDGE('',*,*,#274,.T.);
#204=ORIENTED_EDGE('',*,*,#267,.T.);
#205=ORIENTED_EDGE('',*,*,#254,.F.);
#206=ORIENTED_EDGE('',*,*,#247,.T.);
#207=ORIENTED_EDGE('',*,*,#233,.F.);
#208=ORIENTED_EDGE('',*,*,#238,.T.);
#209=ORIENTED_EDGE('',*,*,#242,.F.);
#210=ORIENTED_EDGE('',*,*,#281,.F.);
#211=ORIENTED_EDGE('',*,*,#282,.T.);
#212=ORIENTED_EDGE('',*,*,#246,.T.);
#213=ORIENTED_EDGE('',*,*,#284,.T.);
#214=ORIENTED_EDGE('',*,*,#276,.F.);
#215=ORIENTED_EDGE('',*,*,#244,.F.);
#216=ORIENTED_EDGE('',*,*,#234,.T.);
#217=ORIENTED_EDGE('',*,*,#229,.F.);
#218=ORIENTED_EDGE('',*,*,#251,.T.);
#219=ORIENTED_EDGE('',*,*,#258,.F.);
#220=ORIENTED_EDGE('',*,*,#263,.T.);
#221=ORIENTED_EDGE('',*,*,#273,.T.);
#222=ORIENTED_EDGE('',*,*,#278,.F.);
#223=ORIENTED_EDGE('',*,*,#285,.F.);
#224=ORIENTED_EDGE('',*,*,#252,.T.);
#225=ORIENTED_EDGE('',*,*,#285,.T.);
#226=ORIENTED_EDGE('',*,*,#277,.F.);
#227=ORIENTED_EDGE('',*,*,#284,.F.);
#228=EDGE_CURVE('',#286,#287,#324,.T.);
#229=EDGE_CURVE('',#286,#288,#32,.T.);
#230=EDGE_CURVE('',#288,#289,#33,.T.);
#231=EDGE_CURVE('',#289,#290,#325,.T.);
#232=EDGE_CURVE('',#290,#291,#34,.T.);
#233=EDGE_CURVE('',#291,#287,#35,.T.);
#234=EDGE_CURVE('',#292,#288,#36,.T.);
#235=EDGE_CURVE('',#292,#293,#37,.T.);
#236=EDGE_CURVE('',#294,#293,#38,.T.);
#237=EDGE_CURVE('',#294,#289,#39,.T.);
#238=EDGE_CURVE('',#291,#295,#40,.T.);
#239=EDGE_CURVE('',#296,#290,#41,.T.);
#240=EDGE_CURVE('',#297,#296,#42,.T.);
#241=EDGE_CURVE('',#295,#297,#43,.T.);
#242=EDGE_CURVE('',#298,#295,#44,.T.);
#243=EDGE_CURVE('',#292,#295,#326,.F.);
#244=EDGE_CURVE('',#292,#299,#45,.T.);
#245=EDGE_CURVE('',#298,#299,#327,.T.);
#246=EDGE_CURVE('',#286,#300,#46,.T.);
#247=EDGE_CURVE('',#301,#287,#47,.F.);
#248=EDGE_CURVE('',#302,#301,#22,.T.);
#249=EDGE_CURVE('',#303,#302,#48,.T.);
#250=EDGE_CURVE('',#303,#304,#328,.T.);
#251=EDGE_CURVE('',#305,#304,#49,.F.);
#252=EDGE_CURVE('',#300,#305,#23,.T.);
#253=EDGE_CURVE('',#306,#306,#329,.T.);
#254=EDGE_CURVE('',#303,#307,#50,.T.);
#255=EDGE_CURVE('',#307,#308,#51,.T.);
#256=EDGE_CURVE('',#308,#309,#330,.T.);
#257=EDGE_CURVE('',#309,#310,#52,.T.);
#258=EDGE_CURVE('',#310,#304,#53,.T.);
#259=EDGE_CURVE('',#311,#311,#331,.T.);
#260=EDGE_CURVE('',#312,#308,#54,.T.);
#261=EDGE_CURVE('',#312,#313,#332,.T.);
#262=EDGE_CURVE('',#313,#309,#55,.T.);
#263=EDGE_CURVE('',#310,#314,#56,.T.);
#264=EDGE_CURVE('',#315,#313,#57,.T.);
#265=EDGE_CURVE('',#314,#315,#58,.T.);
#266=EDGE_CURVE('',#294,#296,#333,.T.);
#267=EDGE_CURVE('',#316,#307,#59,.T.);
#268=EDGE_CURVE('',#316,#317,#60,.T.);
#269=EDGE_CURVE('',#312,#317,#61,.T.);
#270=EDGE_CURVE('',#317,#315,#334,.T.);
#271=EDGE_CURVE('',#293,#297,#335,.T.);
#272=EDGE_CURVE('',#316,#314,#336,.F.);
#273=EDGE_CURVE('',#314,#318,#62,.T.);
#274=EDGE_CURVE('',#319,#316,#63,.T.);
#275=EDGE_CURVE('',#318,#319,#337,.T.);
#276=EDGE_CURVE('',#299,#320,#64,.T.);
#277=EDGE_CURVE('',#320,#321,#24,.T.);
#278=EDGE_CURVE('',#321,#318,#65,.F.);
#279=EDGE_CURVE('',#319,#322,#66,.T.);
#280=EDGE_CURVE('',#322,#323,#25,.T.);
#281=EDGE_CURVE('',#323,#298,#67,.F.);
#282=EDGE_CURVE('',#323,#301,#68,.T.);
#283=EDGE_CURVE('',#322,#302,#69,.T.);
#284=EDGE_CURVE('',#300,#320,#70,.T.);
#285=EDGE_CURVE('',#305,#321,#71,.T.);
#286=VERTEX_POINT('',#591);
#287=VERTEX_POINT('',#592);
#288=VERTEX_POINT('',#594);
#289=VERTEX_POINT('',#596);
#290=VERTEX_POINT('',#598);
#291=VERTEX_POINT('',#600);
#292=VERTEX_POINT('',#604);
#293=VERTEX_POINT('',#606);
#294=VERTEX_POINT('',#608);
#295=VERTEX_POINT('',#612);
#296=VERTEX_POINT('',#614);
#297=VERTEX_POINT('',#616);
#298=VERTEX_POINT('',#620);
#299=VERTEX_POINT('',#623);
#300=VERTEX_POINT('',#627);
#301=VERTEX_POINT('',#629);
#302=VERTEX_POINT('',#637);
#303=VERTEX_POINT('',#639);
#304=VERTEX_POINT('',#641);
#305=VERTEX_POINT('',#643);
#306=VERTEX_POINT('',#652);
#307=VERTEX_POINT('',#655);
#308=VERTEX_POINT('',#657);
#309=VERTEX_POINT('',#659);
#310=VERTEX_POINT('',#661);
#311=VERTEX_POINT('',#665);
#312=VERTEX_POINT('',#668);
#313=VERTEX_POINT('',#670);
#314=VERTEX_POINT('',#674);
#315=VERTEX_POINT('',#676);
#316=VERTEX_POINT('',#682);
#317=VERTEX_POINT('',#684);
#318=VERTEX_POINT('',#773);
#319=VERTEX_POINT('',#775);
#320=VERTEX_POINT('',#779);
#321=VERTEX_POINT('',#787);
#322=VERTEX_POINT('',#790);
#323=VERTEX_POINT('',#798);
#324=CIRCLE('',#442,2.);
#325=CIRCLE('',#443,1.45);
#326=CIRCLE('',#447,1.41666666666667);
#327=CIRCLE('',#448,1.05);
#328=CIRCLE('',#450,2.);
#329=CIRCLE('',#451,2.);
#330=CIRCLE('',#453,1.45);
#331=CIRCLE('',#455,1.05);
#332=CIRCLE('',#457,1.45);
#333=CIRCLE('',#460,1.45);
#334=CIRCLE('',#463,1.65);
#335=CIRCLE('',#464,1.65);
#336=CIRCLE('',#465,1.41666666666667);
#337=CIRCLE('',#468,1.05);
#338=EDGE_LOOP('',(#112,#113,#114,#115,#116,#117));
#339=EDGE_LOOP('',(#118,#119,#120,#121,#122));
#340=EDGE_LOOP('',(#123,#124,#125,#126,#127));
#341=EDGE_LOOP('',(#128,#129,#130,#131));
#342=EDGE_LOOP('',(#132,#133,#134,#135,#136,#137,#138,#139));
#343=EDGE_LOOP('',(#140));
#344=EDGE_LOOP('',(#141,#142,#143,#144,#145,#146));
#345=EDGE_LOOP('',(#147));
#346=EDGE_LOOP('',(#148));
#347=EDGE_LOOP('',(#149,#150,#151,#152));
#348=EDGE_LOOP('',(#153,#154,#155,#156,#157));
#349=EDGE_LOOP('',(#158,#159,#160,#161));
#350=EDGE_LOOP('',(#162,#163,#164,#165,#166));
#351=EDGE_LOOP('',(#167,#168,#169,#170));
#352=EDGE_LOOP('',(#171,#172,#173,#174));
#353=EDGE_LOOP('',(#175,#176,#177,#178));
#354=EDGE_LOOP('',(#179,#180,#181,#182));
#355=EDGE_LOOP('',(#183,#184,#185,#186));
#356=EDGE_LOOP('',(#187,#188,#189,#190,#191,#192,#193,#194));
#357=EDGE_LOOP('',(#195));
#358=EDGE_LOOP('',(#196,#197,#198,#199));
#359=EDGE_LOOP('',(#200,#201,#202,#203,#204,#205));
#360=EDGE_LOOP('',(#206,#207,#208,#209,#210,#211));
#361=EDGE_LOOP('',(#212,#213,#214,#215,#216,#217));
#362=EDGE_LOOP('',(#218,#219,#220,#221,#222,#223));
#363=EDGE_LOOP('',(#224,#225,#226,#227));
#364=FACE_BOUND('',#338,.T.);
#365=FACE_BOUND('',#339,.T.);
#366=FACE_BOUND('',#340,.T.);
#367=FACE_BOUND('',#341,.T.);
#368=FACE_BOUND('',#342,.T.);
#369=FACE_BOUND('',#343,.T.);
#370=FACE_BOUND('',#344,.T.);
#371=FACE_BOUND('',#345,.T.);
#372=FACE_BOUND('',#346,.T.);
#373=FACE_BOUND('',#347,.T.);
#374=FACE_BOUND('',#348,.T.);
#375=FACE_BOUND('',#349,.T.);
#376=FACE_BOUND('',#350,.T.);
#377=FACE_BOUND('',#351,.T.);
#378=FACE_BOUND('',#352,.T.);
#379=FACE_BOUND('',#353,.T.);
#380=FACE_BOUND('',#354,.T.);
#381=FACE_BOUND('',#355,.T.);
#382=FACE_BOUND('',#356,.T.);
#383=FACE_BOUND('',#357,.T.);
#384=FACE_BOUND('',#358,.T.);
#385=FACE_BOUND('',#359,.T.);
#386=FACE_BOUND('',#360,.T.);
#387=FACE_BOUND('',#361,.T.);
#388=FACE_BOUND('',#362,.T.);
#389=FACE_BOUND('',#363,.T.);
#390=PLANE('',#441);
#391=PLANE('',#444);
#392=PLANE('',#445);
#393=PLANE('',#446);
#394=PLANE('',#452);
#395=PLANE('',#454);
#396=PLANE('',#458);
#397=PLANE('',#461);
#398=PLANE('',#462);
#399=PLANE('',#466);
#400=PLANE('',#467);
#401=PLANE('',#471);
#402=PLANE('',#472);
#403=PLANE('',#473);
#404=PLANE('',#474);
#405=ADVANCED_FACE('',(#364),#390,.F.);
#406=ADVANCED_FACE('',(#365),#391,.T.);
#407=ADVANCED_FACE('',(#366),#392,.T.);
#408=ADVANCED_FACE('',(#367),#393,.T.);
#409=ADVANCED_FACE('',(#368,#369),#26,.T.);
#410=ADVANCED_FACE('',(#370),#394,.F.);
#411=ADVANCED_FACE('',(#371,#372),#395,.T.);
#412=ADVANCED_FACE('',(#373),#27,.T.);
#413=ADVANCED_FACE('',(#374),#396,.T.);
#414=ADVANCED_FACE('',(#375),#28,.T.);
#415=ADVANCED_FACE('',(#376),#397,.T.);
#416=ADVANCED_FACE('',(#377),#398,.T.);
#417=ADVANCED_FACE('',(#378),#20,.T.);
#418=ADVANCED_FACE('',(#379),#21,.T.);
#419=ADVANCED_FACE('',(#380),#399,.T.);
#420=ADVANCED_FACE('',(#381),#400,.T.);
#421=ADVANCED_FACE('',(#382,#383),#29,.F.);
#422=ADVANCED_FACE('',(#384),#30,.F.);
#423=ADVANCED_FACE('',(#385),#401,.F.);
#424=ADVANCED_FACE('',(#386),#402,.F.);
#425=ADVANCED_FACE('',(#387),#403,.F.);
#426=ADVANCED_FACE('',(#388),#404,.F.);
#427=ADVANCED_FACE('',(#389),#31,.F.);
#428=CLOSED_SHELL('',(#405,#406,#407,#408,#409,#410,#411,#412,#413,#414,
#415,#416,#417,#418,#419,#420,#421,#422,#423,#424,#425,#426,#427));
#429=STYLED_ITEM('',(#430),#437);
#430=PRESENTATION_STYLE_ASSIGNMENT((#431));
#431=SURFACE_STYLE_USAGE(.BOTH.,#432);
#432=SURFACE_SIDE_STYLE('',(#433));
#433=SURFACE_STYLE_FILL_AREA(#434);
#434=FILL_AREA_STYLE('',(#435));
#435=FILL_AREA_STYLE_COLOUR('',#436);
#436=COLOUR_RGB('',0.645180702209473,0.678915679454803,0.699999988079071);
#437=MANIFOLD_SOLID_BREP('',#428);
#438=SHAPE_DEFINITION_REPRESENTATION(#816,#439);
#439=SHAPE_REPRESENTATION('702910000',(#440),#811);
#440=AXIS2_PLACEMENT_3D('',#588,#476,#477);
#441=AXIS2_PLACEMENT_3D('',#589,#478,#479);
#442=AXIS2_PLACEMENT_3D('',#590,#480,#481);
#443=AXIS2_PLACEMENT_3D('',#597,#484,#485);
#444=AXIS2_PLACEMENT_3D('',#602,#488,#489);
#445=AXIS2_PLACEMENT_3D('',#610,#494,#495);
#446=AXIS2_PLACEMENT_3D('',#618,#500,#501);
#447=AXIS2_PLACEMENT_3D('',#621,#503,#504);
#448=AXIS2_PLACEMENT_3D('',#624,#506,#507);
#449=AXIS2_PLACEMENT_3D('',#625,#508,#509);
#450=AXIS2_PLACEMENT_3D('',#640,#513,#514);
#451=AXIS2_PLACEMENT_3D('',#651,#516,#517);
#452=AXIS2_PLACEMENT_3D('',#653,#518,#519);
#453=AXIS2_PLACEMENT_3D('',#658,#522,#523);
#454=AXIS2_PLACEMENT_3D('',#663,#526,#527);
#455=AXIS2_PLACEMENT_3D('',#664,#528,#529);
#456=AXIS2_PLACEMENT_3D('',#666,#530,#531);
#457=AXIS2_PLACEMENT_3D('',#669,#533,#534);
#458=AXIS2_PLACEMENT_3D('',#672,#536,#537);
#459=AXIS2_PLACEMENT_3D('',#678,#541,#542);
#460=AXIS2_PLACEMENT_3D('',#679,#543,#544);
#461=AXIS2_PLACEMENT_3D('',#680,#545,#546);
#462=AXIS2_PLACEMENT_3D('',#686,#550,#551);
#463=AXIS2_PLACEMENT_3D('',#687,#552,#553);
#464=AXIS2_PLACEMENT_3D('',#728,#554,#555);
#465=AXIS2_PLACEMENT_3D('',#769,#556,#557);
#466=AXIS2_PLACEMENT_3D('',#770,#558,#559);
#467=AXIS2_PLACEMENT_3D('',#771,#560,#561);
#468=AXIS2_PLACEMENT_3D('',#776,#564,#565);
#469=AXIS2_PLACEMENT_3D('',#777,#566,#567);
#470=AXIS2_PLACEMENT_3D('',#800,#572,#573);
#471=AXIS2_PLACEMENT_3D('',#803,#576,#577);
#472=AXIS2_PLACEMENT_3D('',#804,#578,#579);
#473=AXIS2_PLACEMENT_3D('',#805,#580,#581);
#474=AXIS2_PLACEMENT_3D('',#807,#583,#584);
#475=AXIS2_PLACEMENT_3D('',#809,#586,#587);
#476=DIRECTION('',(0.,0.,1.));
#477=DIRECTION('',(1.,0.,0.));
#478=DIRECTION('',(0.,0.,-1.));
#479=DIRECTION('',(-1.,0.,0.));
#480=DIRECTION('',(0.,0.,-1.));
#481=DIRECTION('',(1.,0.,0.));
#482=DIRECTION('',(0.,-1.,0.));
#483=DIRECTION('',(1.,0.,0.));
#484=DIRECTION('',(0.,0.,-1.));
#485=DIRECTION('',(-1.,0.,0.));
#486=DIRECTION('',(-1.,0.,0.));
#487=DIRECTION('',(0.,-1.,0.));
#488=DIRECTION('',(0.,1.,0.));
#489=DIRECTION('',(0.,0.,1.));
#490=DIRECTION('',(0.,0.,-1.));
#491=DIRECTION('',(0.499793860084399,-9.39075625001479E-16,-0.866144386013057));
#492=DIRECTION('',(1.,1.00665644535995E-16,0.));
#493=DIRECTION('',(0.,0.,-1.));
#494=DIRECTION('',(0.,-1.,0.));
#495=DIRECTION('',(0.,0.,-1.));
#496=DIRECTION('',(0.,0.,1.));
#497=DIRECTION('',(0.,0.,-1.));
#498=DIRECTION('',(-1.,-5.03328222679975E-16,0.));
#499=DIRECTION('',(0.499793860084399,5.63445375000888E-16,-0.866144386013057));
#500=DIRECTION('',(0.,0.,1.));
#501=DIRECTION('',(1.,0.,0.));
#502=DIRECTION('',(0.,-1.,0.));
#503=DIRECTION('',(0.,0.,1.));
#504=DIRECTION('',(-1.,0.,0.));
#505=DIRECTION('',(0.,-1.,0.));
#506=DIRECTION('',(0.,0.,1.));
#507=DIRECTION('',(1.,0.,0.));
#508=DIRECTION('',(0.,0.,-1.));
#509=DIRECTION('',(-1.,0.,0.));
#510=DIRECTION('',(0.,0.,-1.));
#511=DIRECTION('',(0.,0.,-1.));
#512=DIRECTION('',(0.,0.,-1.));
#513=DIRECTION('',(0.,0.,-1.));
#514=DIRECTION('',(1.,0.,0.));
#515=DIRECTION('',(0.,0.,-1.));
#516=DIRECTION('',(0.,0.,-1.));
#517=DIRECTION('',(1.,0.,0.));
#518=DIRECTION('',(0.,0.,-1.));
#519=DIRECTION('',(-1.,0.,0.));
#520=DIRECTION('',(0.,1.,0.));
#521=DIRECTION('',(-1.,0.,0.));
#522=DIRECTION('',(0.,0.,-1.));
#523=DIRECTION('',(1.,0.,0.));
#524=DIRECTION('',(1.,0.,0.));
#525=DIRECTION('',(0.,1.,0.));
#526=DIRECTION('',(0.,0.,-1.));
#527=DIRECTION('',(-1.,0.,0.));
#528=DIRECTION('',(0.,0.,-1.));
#529=DIRECTION('',(-1.,0.,0.));
#530=DIRECTION('',(0.,0.,-1.));
#531=DIRECTION('',(-1.,0.,0.));
#532=DIRECTION('',(0.,0.,-1.));
#533=DIRECTION('',(0.,0.,-1.));
#534=DIRECTION('',(1.,0.,0.));
#535=DIRECTION('',(0.,0.,-1.));
#536=DIRECTION('',(0.,1.,0.));
#537=DIRECTION('',(0.,0.,1.));
#538=DIRECTION('',(0.,0.,1.));
#539=DIRECTION('',(1.,1.00665644535995E-16,0.));
#540=DIRECTION('',(-0.499793860084399,-5.63445375000888E-16,-0.866144386013057));
#541=DIRECTION('',(0.,0.,-1.));
#542=DIRECTION('',(-1.,0.,0.));
#543=DIRECTION('',(0.,0.,-1.));
#544=DIRECTION('',(-1.,0.,0.));
#545=DIRECTION('',(0.,-1.,0.));
#546=DIRECTION('',(0.,0.,-1.));
#547=DIRECTION('',(0.,0.,-1.));
#548=DIRECTION('',(-0.499793860084398,-3.75630250000592E-16,-0.866144386013058));
#549=DIRECTION('',(-1.,-5.03328222679975E-16,0.));
#550=DIRECTION('',(0.,0.,-1.));
#551=DIRECTION('',(-1.,0.,0.));
#552=DIRECTION('',(0.,0.,-1.));
#553=DIRECTION('',(1.,0.,0.));
#554=DIRECTION('',(0.,0.,-1.));
#555=DIRECTION('',(-1.,0.,0.));
#556=DIRECTION('',(0.,0.,1.));
#557=DIRECTION('',(1.,0.,0.));
#558=DIRECTION('',(0.,0.,-1.));
#559=DIRECTION('',(-1.,0.,0.));
#560=DIRECTION('',(0.,0.,1.));
#561=DIRECTION('',(1.,0.,0.));
#562=DIRECTION('',(0.,-1.,0.));
#563=DIRECTION('',(0.,-1.,0.));
#564=DIRECTION('',(0.,0.,1.));
#565=DIRECTION('',(1.,0.,0.));
#566=DIRECTION('',(0.,0.,-1.));
#567=DIRECTION('',(-1.,0.,0.));
#568=DIRECTION('',(0.,0.,-1.));
#569=DIRECTION('',(0.,0.,-1.));
#570=DIRECTION('',(0.,0.,-1.));
#571=DIRECTION('',(0.,0.,-1.));
#572=DIRECTION('',(0.,-1.,0.));
#573=DIRECTION('',(0.,0.,-1.));
#574=DIRECTION('',(0.,-1.,0.));
#575=DIRECTION('',(0.,-1.,0.));
#576=DIRECTION('',(-1.,0.,0.));
#577=DIRECTION('',(0.,0.,1.));
#578=DIRECTION('',(1.,0.,0.));
#579=DIRECTION('',(0.,0.,-1.));
#580=DIRECTION('',(1.,0.,0.));
#581=DIRECTION('',(0.,0.,-1.));
#582=DIRECTION('',(0.,-1.,0.));
#583=DIRECTION('',(-1.,0.,0.));
#584=DIRECTION('',(0.,0.,1.));
#585=DIRECTION('',(0.,-1.,0.));
#586=DIRECTION('',(0.,-1.,0.));
#587=DIRECTION('',(0.,0.,-1.));
#588=CARTESIAN_POINT('',(0.,0.,0.));
#589=CARTESIAN_POINT('',(0.,0.,8.));
#590=CARTESIAN_POINT('',(0.,0.,8.));
#591=CARTESIAN_POINT('',(0.499999999999999,1.93649167310371,8.));
#592=CARTESIAN_POINT('',(0.499999999999999,-1.93649167310371,8.));
#593=CARTESIAN_POINT('',(0.499999999999999,0.,8.));
#594=CARTESIAN_POINT('',(0.499999999999999,1.25,8.));
#595=CARTESIAN_POINT('',(-0.734846922834953,1.25,8.));
#596=CARTESIAN_POINT('',(0.734846922834953,1.25,8.));
#597=CARTESIAN_POINT('',(0.,0.,8.));
#598=CARTESIAN_POINT('',(0.734846922834953,-1.25,8.));
#599=CARTESIAN_POINT('',(0.734846922834953,-1.25,8.));
#600=CARTESIAN_POINT('',(0.499999999999999,-1.25,8.));
#601=CARTESIAN_POINT('',(0.499999999999999,0.,8.));
#602=CARTESIAN_POINT('',(-0.734846922834953,1.25,9.7));
#603=CARTESIAN_POINT('',(0.499999999999999,1.25,9.7));
#604=CARTESIAN_POINT('',(0.499999999999999,1.25,10.7));
#605=CARTESIAN_POINT('',(0.5,1.25,10.7));
#606=CARTESIAN_POINT('',(1.0770329614269,1.25,9.7));
#607=CARTESIAN_POINT('',(-1.0770329614269,1.25,9.7));
#608=CARTESIAN_POINT('',(0.734846922834953,1.25,9.7));
#609=CARTESIAN_POINT('',(0.734846922834953,1.25,9.7));
#610=CARTESIAN_POINT('',(0.734846922834953,-1.25,9.7));
#611=CARTESIAN_POINT('',(0.499999999999999,-1.25,9.7));
#612=CARTESIAN_POINT('',(0.499999999999999,-1.25,10.7));
#613=CARTESIAN_POINT('',(0.734846922834953,-1.25,9.7));
#614=CARTESIAN_POINT('',(0.734846922834953,-1.25,9.7));
#615=CARTESIAN_POINT('',(1.0770329614269,-1.25,9.7));
#616=CARTESIAN_POINT('',(1.0770329614269,-1.25,9.7));
#617=CARTESIAN_POINT('',(0.5,-1.25,10.7));
#618=CARTESIAN_POINT('',(-0.166666666666667,0.,10.7));
#619=CARTESIAN_POINT('',(0.499999999999999,2.,10.7));
#620=CARTESIAN_POINT('',(0.499999999999999,-0.92330926563097,10.7));
#621=CARTESIAN_POINT('',(-0.166666666666667,0.,10.7));
#622=CARTESIAN_POINT('',(0.499999999999999,2.,10.7));
#623=CARTESIAN_POINT('',(0.499999999999999,0.92330926563097,10.7));
#624=CARTESIAN_POINT('',(0.,0.,10.7));
#625=CARTESIAN_POINT('',(0.,0.,8.));
#626=CARTESIAN_POINT('',(0.499999999999999,1.93649167310371,8.));
#627=CARTESIAN_POINT('',(0.5,1.93649167310371,7.5));
#628=CARTESIAN_POINT('',(0.499999999999999,-1.93649167310371,8.));
#629=CARTESIAN_POINT('',(0.5,-1.93649167310371,7.5));
#630=CARTESIAN_POINT('',(-0.5,-1.93649167310371,7.5));
#631=CARTESIAN_POINT('',(-0.5,-1.93649167310371,7.36732590992954));
#632=CARTESIAN_POINT('',(-0.391615224949693,-1.96876008086858,7.10921940416794));
#633=CARTESIAN_POINT('',(-0.000700928109579746,-2.01560793470406,6.94545674937007));
#634=CARTESIAN_POINT('',(0.391749546033954,-1.96880788341309,7.10895478596038));
#635=CARTESIAN_POINT('',(0.5,-1.93649167310371,7.36732245034812));
#636=CARTESIAN_POINT('',(0.5,-1.93649167310371,7.5));
#637=CARTESIAN_POINT('',(-0.499999999999999,-1.93649167310371,7.5));
#638=CARTESIAN_POINT('',(-0.499999999999999,-1.93649167310371,8.));
#639=CARTESIAN_POINT('',(-0.499999999999999,-1.93649167310371,8.));
#640=CARTESIAN_POINT('',(0.,0.,8.));
#641=CARTESIAN_POINT('',(-0.499999999999999,1.93649167310371,8.));
#642=CARTESIAN_POINT('',(-0.499999999999999,1.93649167310371,8.));
#643=CARTESIAN_POINT('',(-0.499999999999999,1.93649167310371,7.5));
#644=CARTESIAN_POINT('',(0.5,1.93649167310371,7.5));
#645=CARTESIAN_POINT('',(0.5,1.93649167310371,7.36732590992954));
#646=CARTESIAN_POINT('',(0.391615224949693,1.96876008086858,7.10921940416794));
#647=CARTESIAN_POINT('',(0.000700928109579746,2.01560793470406,6.94545674937007));
#648=CARTESIAN_POINT('',(-0.391749546033954,1.96880788341309,7.10895478596038));
#649=CARTESIAN_POINT('',(-0.5,1.93649167310371,7.36732245034812));
#650=CARTESIAN_POINT('',(-0.5,1.93649167310371,7.5));
#651=CARTESIAN_POINT('',(0.,0.,0.));
#652=CARTESIAN_POINT('',(2.,0.,0.));
#653=CARTESIAN_POINT('',(0.,0.,8.));
#654=CARTESIAN_POINT('',(-0.499999999999999,0.,8.));
#655=CARTESIAN_POINT('',(-0.499999999999999,-1.25,8.));
#656=CARTESIAN_POINT('',(0.734846922834953,-1.25,8.));
#657=CARTESIAN_POINT('',(-0.734846922834953,-1.25,8.));
#658=CARTESIAN_POINT('',(0.,0.,8.));
#659=CARTESIAN_POINT('',(-0.734846922834953,1.25,8.));
#660=CARTESIAN_POINT('',(-0.734846922834953,1.25,8.));
#661=CARTESIAN_POINT('',(-0.499999999999999,1.25,8.));
#662=CARTESIAN_POINT('',(-0.499999999999999,0.,8.));
#663=CARTESIAN_POINT('',(0.,0.,0.));
#664=CARTESIAN_POINT('',(0.,0.,0.));
#665=CARTESIAN_POINT('',(-1.05,0.,0.));
#666=CARTESIAN_POINT('',(0.,0.,9.7));
#667=CARTESIAN_POINT('',(-0.734846922834953,-1.25,9.7));
#668=CARTESIAN_POINT('',(-0.734846922834952,-1.25,9.7));
#669=CARTESIAN_POINT('',(0.,0.,9.7));
#670=CARTESIAN_POINT('',(-0.734846922834953,1.25,9.7));
#671=CARTESIAN_POINT('',(-0.734846922834953,1.25,9.7));
#672=CARTESIAN_POINT('',(-0.734846922834953,1.25,9.7));
#673=CARTESIAN_POINT('',(-0.499999999999999,1.25,9.7));
#674=CARTESIAN_POINT('',(-0.499999999999999,1.25,10.7));
#675=CARTESIAN_POINT('',(-1.0770329614269,1.25,9.7));
#676=CARTESIAN_POINT('',(-1.0770329614269,1.25,9.7));
#677=CARTESIAN_POINT('',(-0.5,1.25,10.7));
#678=CARTESIAN_POINT('',(0.,0.,9.7));
#679=CARTESIAN_POINT('',(0.,0.,9.7));
#680=CARTESIAN_POINT('',(0.734846922834953,-1.25,9.7));
#681=CARTESIAN_POINT('',(-0.499999999999999,-1.25,9.7));
#682=CARTESIAN_POINT('',(-0.499999999999999,-1.25,10.7));
#683=CARTESIAN_POINT('',(-0.5,-1.25,10.7));
#684=CARTESIAN_POINT('',(-1.0770329614269,-1.25,9.7));
#685=CARTESIAN_POINT('',(1.0770329614269,-1.25,9.7));
#686=CARTESIAN_POINT('',(0.,0.,9.7));
#687=CARTESIAN_POINT('',(0.,0.,9.7));
#688=CARTESIAN_POINT('',(0.5,1.25,10.7));
#689=CARTESIAN_POINT('',(0.692344320475634,1.25,10.3666666666667));
#690=CARTESIAN_POINT('',(0.884688640951268,1.25,10.0333333333333));
#691=CARTESIAN_POINT('',(1.0770329614269,1.25,9.7));
#692=CARTESIAN_POINT('',(0.725319250851116,1.12982973287941,10.7));
#693=CARTESIAN_POINT('',(0.902266400715755,1.1184394274587,10.3666666666667));
#694=CARTESIAN_POINT('',(1.07921355058039,1.10704912203799,10.0333333333333));
#695=CARTESIAN_POINT('',(1.25616070044503,1.09565881661728,9.7));
#696=CARTESIAN_POINT('',(0.916816640213016,0.947699549988587,10.7));
#697=CARTESIAN_POINT('',(1.07835606434254,0.932605888726666,10.3666666666667));
#698=CARTESIAN_POINT('',(1.23989548847205,0.917512227464744,10.0333333333333));
#699=CARTESIAN_POINT('',(1.40143491260157,0.902418566202822,9.7));
#700=CARTESIAN_POINT('',(1.17941331597253,0.510038423722738,10.7));
#701=CARTESIAN_POINT('',(1.3190866150766,0.497572908733931,10.3666666666667));
#702=CARTESIAN_POINT('',(1.45875991418068,0.485107393745123,10.0333333333333));
#703=CARTESIAN_POINT('',(1.59843321328476,0.472641878756316,9.7));
#704=CARTESIAN_POINT('',(1.25,0.255198097349998,10.7));
#705=CARTESIAN_POINT('',(1.38333333333333,0.248927921309766,10.3666666666667));
#706=CARTESIAN_POINT('',(1.51666666666667,0.242657745269535,10.0333333333333));
#707=CARTESIAN_POINT('',(1.65,0.236387569229303,9.7));
#708=CARTESIAN_POINT('',(1.25,-0.255198097349998,10.7));
#709=CARTESIAN_POINT('',(1.38333333333333,-0.248927921309767,10.3666666666667));
#710=CARTESIAN_POINT('',(1.51666666666667,-0.242657745269535,10.0333333333333));
#711=CARTESIAN_POINT('',(1.65,-0.236387569229304,9.7));
#712=CARTESIAN_POINT('',(1.17941331597253,-0.510038423722738,10.7));
#713=CARTESIAN_POINT('',(1.3190866150766,-0.497572908733931,10.3666666666667));
#714=CARTESIAN_POINT('',(1.45875991418068,-0.485107393745123,10.0333333333333));
#715=CARTESIAN_POINT('',(1.59843321328476,-0.472641878756316,9.7));
#716=CARTESIAN_POINT('',(0.916816640213016,-0.947699549988587,10.7));
#717=CARTESIAN_POINT('',(1.07835606434254,-0.932605888726666,10.3666666666667));
#718=CARTESIAN_POINT('',(1.23989548847205,-0.917512227464744,10.0333333333333));
#719=CARTESIAN_POINT('',(1.40143491260157,-0.902418566202823,9.7));
#720=CARTESIAN_POINT('',(0.725319250851116,-1.1298297328794,10.7));
#721=CARTESIAN_POINT('',(0.902266400715755,-1.1184394274587,10.3666666666667));
#722=CARTESIAN_POINT('',(1.07921355058039,-1.10704912203799,10.0333333333333));
#723=CARTESIAN_POINT('',(1.25616070044503,-1.09565881661728,9.7));
#724=CARTESIAN_POINT('',(0.5,-1.25,10.7));
#725=CARTESIAN_POINT('',(0.692344320475634,-1.25,10.3666666666667));
#726=CARTESIAN_POINT('',(0.884688640951268,-1.25,10.0333333333333));
#727=CARTESIAN_POINT('',(1.0770329614269,-1.25,9.7));
#728=CARTESIAN_POINT('',(0.,0.,9.7));
#729=CARTESIAN_POINT('',(-0.5,-1.25,10.7));
#730=CARTESIAN_POINT('',(-0.692344320475633,-1.25,10.3666666666667));
#731=CARTESIAN_POINT('',(-0.884688640951267,-1.25,10.0333333333333));
#732=CARTESIAN_POINT('',(-1.0770329614269,-1.25,9.7));
#733=CARTESIAN_POINT('',(-0.725319250851116,-1.12982973287941,10.7));
#734=CARTESIAN_POINT('',(-0.902266400715754,-1.1184394274587,10.3666666666667));
#735=CARTESIAN_POINT('',(-1.07921355058039,-1.10704912203799,10.0333333333333));
#736=CARTESIAN_POINT('',(-1.25616070044503,-1.09565881661728,9.7));
#737=CARTESIAN_POINT('',(-0.916816640213016,-0.947699549988587,10.7));
#738=CARTESIAN_POINT('',(-1.07835606434254,-0.932605888726666,10.3666666666667));
#739=CARTESIAN_POINT('',(-1.23989548847205,-0.917512227464744,10.0333333333333));
#740=CARTESIAN_POINT('',(-1.40143491260157,-0.902418566202823,9.7));
#741=CARTESIAN_POINT('',(-1.17941331597253,-0.510038423722738,10.7));
#742=CARTESIAN_POINT('',(-1.3190866150766,-0.497572908733931,10.3666666666667));
#743=CARTESIAN_POINT('',(-1.45875991418068,-0.485107393745124,10.0333333333333));
#744=CARTESIAN_POINT('',(-1.59843321328476,-0.472641878756317,9.7));
#745=CARTESIAN_POINT('',(-1.25,-0.255198097349998,10.7));
#746=CARTESIAN_POINT('',(-1.38333333333333,-0.248927921309767,10.3666666666667));
#747=CARTESIAN_POINT('',(-1.51666666666667,-0.242657745269535,10.0333333333333));
#748=CARTESIAN_POINT('',(-1.65,-0.236387569229304,9.7));
#749=CARTESIAN_POINT('',(-1.25,0.255198097349998,10.7));
#750=CARTESIAN_POINT('',(-1.38333333333333,0.248927921309767,10.3666666666667));
#751=CARTESIAN_POINT('',(-1.51666666666667,0.242657745269535,10.0333333333333));
#752=CARTESIAN_POINT('',(-1.65,0.236387569229303,9.7));
#753=CARTESIAN_POINT('',(-1.17941331597253,0.510038423722738,10.7));
#754=CARTESIAN_POINT('',(-1.3190866150766,0.497572908733931,10.3666666666667));
#755=CARTESIAN_POINT('',(-1.45875991418068,0.485107393745123,10.0333333333333));
#756=CARTESIAN_POINT('',(-1.59843321328476,0.472641878756316,9.7));
#757=CARTESIAN_POINT('',(-0.916816640213016,0.947699549988587,10.7));
#758=CARTESIAN_POINT('',(-1.07835606434254,0.932605888726666,10.3666666666667));
#759=CARTESIAN_POINT('',(-1.23989548847205,0.917512227464744,10.0333333333333));
#760=CARTESIAN_POINT('',(-1.40143491260157,0.902418566202823,9.7));
#761=CARTESIAN_POINT('',(-0.725319250851116,1.1298297328794,10.7));
#762=CARTESIAN_POINT('',(-0.902266400715755,1.1184394274587,10.3666666666667));
#763=CARTESIAN_POINT('',(-1.07921355058039,1.10704912203799,10.0333333333333));
#764=CARTESIAN_POINT('',(-1.25616070044503,1.09565881661728,9.7));
#765=CARTESIAN_POINT('',(-0.5,1.25,10.7));
#766=CARTESIAN_POINT('',(-0.692344320475634,1.25,10.3666666666667));
#767=CARTESIAN_POINT('',(-0.884688640951268,1.25,10.0333333333333));
#768=CARTESIAN_POINT('',(-1.0770329614269,1.25,9.7));
#769=CARTESIAN_POINT('',(0.166666666666667,0.,10.7));
#770=CARTESIAN_POINT('',(0.,0.,9.7));
#771=CARTESIAN_POINT('',(-0.166666666666667,0.,10.7));
#772=CARTESIAN_POINT('',(-0.499999999999999,2.,10.7));
#773=CARTESIAN_POINT('',(-0.499999999999999,0.92330926563097,10.7));
#774=CARTESIAN_POINT('',(-0.499999999999999,2.,10.7));
#775=CARTESIAN_POINT('',(-0.499999999999999,-0.92330926563097,10.7));
#776=CARTESIAN_POINT('',(0.,0.,10.7));
#777=CARTESIAN_POINT('',(0.,0.,12.1053835479525));
#778=CARTESIAN_POINT('',(0.499999999999999,0.92330926563097,12.1053835479525));
#779=CARTESIAN_POINT('',(0.5,0.92330926563097,7.5));
#780=CARTESIAN_POINT('',(0.5,0.92330926563097,7.5));
#781=CARTESIAN_POINT('',(0.5,0.92330926563097,7.36567916523348));
#782=CARTESIAN_POINT('',(0.39185959136086,0.990558811691349,7.11049974475692));
#783=CARTESIAN_POINT('',(0.00120616049583702,1.07969742410131,6.94480710580172));
#784=CARTESIAN_POINT('',(-0.392294058610171,0.990649962249719,7.11027504431027));
#785=CARTESIAN_POINT('',(-0.5,0.92330926563097,7.36560847719262));
#786=CARTESIAN_POINT('',(-0.5,0.92330926563097,7.5));
#787=CARTESIAN_POINT('',(-0.5,0.92330926563097,7.5));
#788=CARTESIAN_POINT('',(-0.499999999999999,0.92330926563097,12.1053835479525));
#789=CARTESIAN_POINT('',(-0.499999999999999,-0.92330926563097,12.1053835479525));
#790=CARTESIAN_POINT('',(-0.499999999999999,-0.92330926563097,7.5));
#791=CARTESIAN_POINT('',(-0.5,-0.92330926563097,7.5));
#792=CARTESIAN_POINT('',(-0.5,-0.92330926563097,7.36567916523348));
#793=CARTESIAN_POINT('',(-0.39185959136086,-0.990558811691349,7.11049974475692));
#794=CARTESIAN_POINT('',(-0.00120616049583702,-1.07969742410131,6.94480710580172));
#795=CARTESIAN_POINT('',(0.392294058610171,-0.990649962249719,7.11027504431027));
#796=CARTESIAN_POINT('',(0.5,-0.92330926563097,7.36560847719262));
#797=CARTESIAN_POINT('',(0.5,-0.92330926563097,7.5));
#798=CARTESIAN_POINT('',(0.5,-0.92330926563097,7.5));
#799=CARTESIAN_POINT('',(0.499999999999999,-0.92330926563097,12.1053835479525));
#800=CARTESIAN_POINT('',(0.,2.,7.5));
#801=CARTESIAN_POINT('',(0.5,2.,7.5));
#802=CARTESIAN_POINT('',(-0.499999999999999,2.,7.5));
#803=CARTESIAN_POINT('',(-0.499999999999999,2.,10.7));
#804=CARTESIAN_POINT('',(0.499999999999999,2.,7.5));
#805=CARTESIAN_POINT('',(0.499999999999999,2.,7.5));
#806=CARTESIAN_POINT('',(0.5,2.,7.5));
#807=CARTESIAN_POINT('',(-0.499999999999999,2.,10.7));
#808=CARTESIAN_POINT('',(-0.499999999999999,2.,7.5));
#809=CARTESIAN_POINT('',(0.,2.,7.5));
#810=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#429),
#811);
#811=(
GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#812))
GLOBAL_UNIT_ASSIGNED_CONTEXT((#815,#814,#813))
REPRESENTATION_CONTEXT('702910000','TOP_LEVEL_ASSEMBLY_PART')
);
#812=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#815,
'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
#813=(
NAMED_UNIT(*)
SI_UNIT($,.STERADIAN.)
SOLID_ANGLE_UNIT()
);
#814=(
NAMED_UNIT(*)
PLANE_ANGLE_UNIT()
SI_UNIT($,.RADIAN.)
);
#815=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT(.MILLI.,.METRE.)
);
#816=PRODUCT_DEFINITION_SHAPE('','',#817);
#817=PRODUCT_DEFINITION('','',#819,#818);
#818=PRODUCT_DEFINITION_CONTEXT('',#825,'design');
#819=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#821,
.NOT_KNOWN.);
#820=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#821));
#821=PRODUCT('702910000','702910000','702910000',(#823));
#822=PRODUCT_CATEGORY('','');
#823=PRODUCT_CONTEXT('',#825,'mechanical');
#824=APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2010,#825);
#825=APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
ENDSEC;
END-ISO-10303-21;

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,7 @@
(property "Reference" "REF**" (property "Reference" "REF**"
(at 7.312 -21.336 0) (at 7.312 -21.336 0)
(layer "F.SilkS") (layer "F.SilkS")
(uuid "7289cb19-d22c-4d43-99dc-a37a7af09173") (uuid "95a6896c-2eab-4f28-adc5-7fd64550efd1")
(effects (effects
(font (font
(size 0.78232 0.78232) (size 0.78232 0.78232)
@ -18,7 +18,7 @@
(property "Value" "Val**" (property "Value" "Val**"
(at 8.89 -10.795 0) (at 8.89 -10.795 0)
(layer "F.Fab") (layer "F.Fab")
(uuid "bdcd11a5-c8fd-480a-82a6-c8e8bcd29311") (uuid "ead571aa-8f25-4413-9dd8-3ecea3d8b1b5")
(effects (effects
(font (font
(size 0.536448 0.536448) (size 0.536448 0.536448)
@ -31,7 +31,7 @@
(unlocked yes) (unlocked yes)
(layer "F.Fab") (layer "F.Fab")
(hide yes) (hide yes)
(uuid "11c7907a-4c88-4cd1-aade-56cc3ffbce3d") (uuid "e0e614f2-f99b-42a7-87d5-6d40f74c047a")
(effects (effects
(font (font
(size 1.27 1.27) (size 1.27 1.27)
@ -44,7 +44,7 @@
(unlocked yes) (unlocked yes)
(layer "F.Fab") (layer "F.Fab")
(hide yes) (hide yes)
(uuid "d2820fe3-6b02-4bb3-95b7-3d3fff9c7376") (uuid "074d8848-2ba7-4146-8c49-a0cf65e2aa82")
(effects (effects
(font (font
(size 1.27 1.27) (size 1.27 1.27)
@ -61,7 +61,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "2c59f052-4924-49c7-bf3a-da8f762581f4") (uuid "e72c3c07-5bc8-4f5f-97cd-36412308e250")
) )
(fp_line (fp_line
(start 1.905 -0.082) (start 1.905 -0.082)
@ -71,7 +71,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "2ed15d83-c91c-402e-985a-9eaa24c859ff") (uuid "e3e0ab25-f18a-4068-92e8-92a17b4caf05")
) )
(fp_line (fp_line
(start 4.595 -21.037) (start 4.595 -21.037)
@ -81,7 +81,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "287916b7-11ac-4b79-9dc6-349e8ddc4746") (uuid "4838598f-afa6-445e-b237-7544ae7e9968")
) )
(fp_line (fp_line
(start 5.098728 -22.547) (start 5.098728 -22.547)
@ -91,7 +91,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "e3413d28-3aa9-4963-adb2-639c03a3bf14") (uuid "101b5417-f570-447c-b9f6-42639e5eff3c")
) )
(fp_line (fp_line
(start 13.594 -22.047) (start 13.594 -22.047)
@ -101,7 +101,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "433ee433-18b6-4bfa-bf63-4ea6c8cd91d7") (uuid "37ee6532-c85a-4899-82db-921e02cce4af")
) )
(fp_line (fp_line
(start 15.875 -21.037) (start 15.875 -21.037)
@ -111,7 +111,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "d5635a5e-089c-498e-8414-4a3027ae8397") (uuid "f94b2798-d11f-47d7-8f2c-02478417b6f1")
) )
(fp_line (fp_line
(start 17.78 -1.987) (start 17.78 -1.987)
@ -121,7 +121,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "c3641fdd-4cec-4126-bba9-5e292cf8bf86") (uuid "8c3282cc-86c2-4cf3-a698-856916df5f40")
) )
(fp_arc (fp_arc
(start 0 -19.136) (start 0 -19.136)
@ -132,7 +132,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "ebbdac55-718e-4672-9d5f-44b0d386cc11") (uuid "2a1b788b-cdcf-4a49-acac-d187cf344ffc")
) )
(fp_arc (fp_arc
(start 1.905 -0.082) (start 1.905 -0.082)
@ -143,7 +143,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "09e142d3-8be9-454d-a6e8-68cd0807b882") (uuid "677c2a8e-0212-4651-99b4-af42d29d0bd1")
) )
(fp_arc (fp_arc
(start 4.598728 -22.047272) (start 4.598728 -22.047272)
@ -154,7 +154,7 @@
(type default) (type default)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "6f1ff639-b216-41c7-b291-8df9f6813689") (uuid "b38fc005-51b4-4609-b7e3-78320e82da0d")
) )
(fp_arc (fp_arc
(start 13.094 -22.547) (start 13.094 -22.547)
@ -165,7 +165,7 @@
(type default) (type default)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "33b95cff-53a4-40de-b83a-b01ff651b641") (uuid "46a43512-01fe-440e-b1e8-31a50057cbf8")
) )
(fp_arc (fp_arc
(start 15.875 -21.037) (start 15.875 -21.037)
@ -176,7 +176,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "f5c73dca-587b-474c-9506-85b6a5dbb2a1") (uuid "f77dffb2-d331-43db-9018-069e9fa47c57")
) )
(fp_arc (fp_arc
(start 17.78 -1.987) (start 17.78 -1.987)
@ -187,7 +187,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "b2590c3b-521c-4794-96f4-54b9c7f512c3") (uuid "535b0a70-da0d-4557-a5dd-d25a51ee5468")
) )
(fp_circle (fp_circle
(center -0.21 -20.621) (center -0.21 -20.621)
@ -198,7 +198,7 @@
) )
(fill yes) (fill yes)
(layer "F.SilkS") (layer "F.SilkS")
(uuid "031cf5be-dbf5-48e7-b55c-e80db6fba62a") (uuid "c4f8c64e-4c5d-41c1-8b14-aca8fcf77968")
) )
(fp_circle (fp_circle
(center 1.064 -19.904) (center 1.064 -19.904)
@ -209,7 +209,7 @@
) )
(fill yes) (fill yes)
(layer "F.SilkS") (layer "F.SilkS")
(uuid "a2bb00f9-1e52-4961-9e01-c6a3620a78a9") (uuid "163ea809-1cd6-43c9-968e-14c093715603")
) )
(fp_rect (fp_rect
(start 17.8 0) (start 17.8 0)
@ -220,7 +220,7 @@
) )
(fill no) (fill no)
(layer "F.CrtYd") (layer "F.CrtYd")
(uuid "17d61597-c12f-438e-86cd-26bf95579021") (uuid "477d102d-f2d0-4f67-ad93-9f60da51bd76")
) )
(fp_rect (fp_rect
(start 0 -21) (start 0 -21)
@ -231,7 +231,7 @@
) )
(fill no) (fill no)
(layer "F.Fab") (layer "F.Fab")
(uuid "8fe10542-c51f-49ff-8670-cd7b22b70693") (uuid "e7107e2f-485b-49f6-9f5d-2537ab0ef458")
) )
(fp_circle (fp_circle
(center 1.084 -19.9) (center 1.084 -19.9)
@ -242,7 +242,7 @@
) )
(fill yes) (fill yes)
(layer "F.Fab") (layer "F.Fab")
(uuid "63683cfd-14cc-476e-b4f9-7a4daaf029fc") (uuid "089122fe-193e-4cef-a9b8-54d37cb7fa99")
) )
(pad "1" smd roundrect (pad "1" smd roundrect
(at 0.835 -18.12) (at 0.835 -18.12)
@ -251,7 +251,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "2a534393-88c2-4d7e-9b25-ae881057dc57") (uuid "351f5f05-8bc3-4b53-9daf-3207bd71876b")
) )
(pad "1" thru_hole circle (pad "1" thru_hole circle
(at 1.26 -18.14 180) (at 1.26 -18.14 180)
@ -259,7 +259,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "39971d4a-ede8-4d86-8c78-fed36f7ff078") (uuid "6a16c3b2-8d4e-4efe-a84e-dbc418c7fe79")
) )
(pad "2" smd roundrect (pad "2" smd roundrect
(at 0.835 -15.58) (at 0.835 -15.58)
@ -268,7 +268,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "778730c0-f8ef-4bc5-a2d2-49cef3e1a5c8") (uuid "cfdee4aa-d600-484f-9a5c-2062a00bde1d")
) )
(pad "2" thru_hole circle (pad "2" thru_hole circle
(at 1.26 -15.6 180) (at 1.26 -15.6 180)
@ -276,7 +276,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "60d6e6cf-8424-49f9-b534-0d917feddde6") (uuid "69193d02-4e31-4519-a90d-949c3f48e92c")
) )
(pad "3" smd roundrect (pad "3" smd roundrect
(at 0.835 -13.04) (at 0.835 -13.04)
@ -285,7 +285,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "a37ac89a-0dbc-4480-bd79-40a4874856e2") (uuid "52a69e1c-edab-4079-a491-6bcb12907f61")
) )
(pad "3" thru_hole circle (pad "3" thru_hole circle
(at 1.26 -13.06 180) (at 1.26 -13.06 180)
@ -293,7 +293,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "c3cef52b-cf4a-4b20-94d4-9920f06a32c2") (uuid "a3aed707-7e8b-4b1b-ba96-06cfb9154fcb")
) )
(pad "4" smd roundrect (pad "4" smd roundrect
(at 0.835 -10.5) (at 0.835 -10.5)
@ -302,7 +302,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "9dd4400a-d763-40d5-8df2-4f74596ce0f0") (uuid "1e864c46-432c-460c-af69-13a1c9d0fd2f")
) )
(pad "4" thru_hole circle (pad "4" thru_hole circle
(at 1.26 -10.52 180) (at 1.26 -10.52 180)
@ -310,7 +310,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "1cd9d96b-d96c-4261-9b60-abca04794862") (uuid "eee65312-1942-42a1-a13a-2a28a114ec95")
) )
(pad "5" smd roundrect (pad "5" smd roundrect
(at 0.835 -7.96) (at 0.835 -7.96)
@ -319,7 +319,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "2cf548cf-85f3-43d9-8a36-e08c8bec33e8") (uuid "da854e17-c3b3-4a83-9d47-a379e4d7efa5")
) )
(pad "5" thru_hole circle (pad "5" thru_hole circle
(at 1.26 -7.98 180) (at 1.26 -7.98 180)
@ -327,7 +327,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "72d2d8d9-81dd-49eb-8a57-71820c388d53") (uuid "febdd29f-f361-4b8e-b2b5-7502d3e5fdea")
) )
(pad "6" smd roundrect (pad "6" smd roundrect
(at 0.835 -5.42) (at 0.835 -5.42)
@ -336,7 +336,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "ae17a813-7e06-4aa6-a595-bad75efec978") (uuid "3fde7f90-983d-44c1-939e-47d36175373f")
) )
(pad "6" thru_hole circle (pad "6" thru_hole circle
(at 1.26 -5.44 180) (at 1.26 -5.44 180)
@ -344,7 +344,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "f55385dd-12a0-4f5b-8870-e62c32af2fc8") (uuid "323ef0a5-3407-4ac3-b76f-8ac19e044d1e")
) )
(pad "7" smd roundrect (pad "7" smd roundrect
(at 0.835 -2.88) (at 0.835 -2.88)
@ -353,7 +353,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "f0c853cd-127b-497c-92f2-2d32416b2f9f") (uuid "ebfd6bef-ea17-4635-877b-58b57c784dec")
) )
(pad "7" thru_hole circle (pad "7" thru_hole circle
(at 1.26 -2.9 180) (at 1.26 -2.9 180)
@ -361,7 +361,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "528c9bdf-00d3-41c7-8813-c9575c699c56") (uuid "2b179783-65b0-4d7c-850b-74c9fa3a7a64")
) )
(pad "8" thru_hole circle (pad "8" thru_hole circle
(at 16.5 -2.9) (at 16.5 -2.9)
@ -369,7 +369,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "60c9ec27-aec8-4d4f-9230-0276f8ddf68b") (uuid "5cbc8aa6-fdfd-49e6-b018-da1d4ff342aa")
) )
(pad "8" smd roundrect (pad "8" smd roundrect
(at 17 -2.88) (at 17 -2.88)
@ -378,7 +378,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "d00455ea-b0c0-4d93-bbdc-81c12f7ba57b") (uuid "19eb14d0-5713-47b7-86f2-4bccede8ba54")
) )
(pad "9" thru_hole circle (pad "9" thru_hole circle
(at 16.5 -5.44) (at 16.5 -5.44)
@ -386,7 +386,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "5a2b71de-2780-4ac3-bcea-746f0a78c774") (uuid "e7f197b5-1fc8-47f6-9f49-60ffd6fa2335")
) )
(pad "9" smd roundrect (pad "9" smd roundrect
(at 17 -5.42) (at 17 -5.42)
@ -395,7 +395,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "478f6a86-44ce-4970-ad0e-8db6ddbb0561") (uuid "4c3b83bc-a000-4a70-887c-6b775bc40ee1")
) )
(pad "10" thru_hole circle (pad "10" thru_hole circle
(at 16.5 -7.98) (at 16.5 -7.98)
@ -403,7 +403,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "e35916bc-b96f-4e05-8b66-54d3f88ff104") (uuid "4df7fd17-71d5-4f8f-a3f2-68c6537a767f")
) )
(pad "10" smd roundrect (pad "10" smd roundrect
(at 17 -7.96) (at 17 -7.96)
@ -412,7 +412,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "26063f43-e37a-465a-a2f8-883028ddec3c") (uuid "223d5c33-d2a3-4398-8d3f-544bd6345a86")
) )
(pad "11" thru_hole circle (pad "11" thru_hole circle
(at 16.5 -10.52) (at 16.5 -10.52)
@ -420,7 +420,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "8d60d831-b564-4516-acd6-2bde994c6c2e") (uuid "dad67976-a604-485a-bb37-2d67ea771b2c")
) )
(pad "11" smd roundrect (pad "11" smd roundrect
(at 17 -10.5) (at 17 -10.5)
@ -429,7 +429,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "4e0c2682-5a5c-4228-8522-a5078d124180") (uuid "1f04f1d2-ce82-4256-b122-36f63f189efe")
) )
(pad "12" thru_hole circle (pad "12" thru_hole circle
(at 16.5 -13.06) (at 16.5 -13.06)
@ -437,7 +437,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "e907dfc0-cb14-4296-ab05-c29bb1d0d646") (uuid "c55d522b-9f8b-4fa4-afaa-880f3b1c9c5f")
) )
(pad "12" smd roundrect (pad "12" smd roundrect
(at 17 -13.04) (at 17 -13.04)
@ -446,7 +446,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "9ef1ce16-09d6-4ebb-aa7a-02e3ee0930aa") (uuid "31818d88-bbc0-4c22-b4ed-d6884ef71ebb")
) )
(pad "13" thru_hole circle (pad "13" thru_hole circle
(at 16.5 -15.6) (at 16.5 -15.6)
@ -454,7 +454,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "3761df0d-b80c-4c38-a1b7-dc0fa8ecaa2f") (uuid "e46165bc-b289-44b0-b7f6-6759bba3d4b8")
) )
(pad "13" smd roundrect (pad "13" smd roundrect
(at 17 -15.58) (at 17 -15.58)
@ -463,7 +463,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "94236148-baa2-42ed-bc8a-71357064d136") (uuid "3fbf02f8-81da-4fba-bc95-9e47b9abaa05")
) )
(pad "14" thru_hole circle (pad "14" thru_hole circle
(at 16.5 -18.14) (at 16.5 -18.14)
@ -471,7 +471,7 @@
(drill 0.889) (drill 0.889)
(layers "*.Cu" "*.Mask") (layers "*.Cu" "*.Mask")
(remove_unused_layers no) (remove_unused_layers no)
(uuid "b7d37dfd-d04e-4a01-9dc0-7db8666cc822") (uuid "71ca3093-fd4e-46c3-9980-6d986d711719")
) )
(pad "14" smd roundrect (pad "14" smd roundrect
(at 17 -18.12) (at 17 -18.12)
@ -480,55 +480,55 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "a995d04e-b409-4d6d-9828-c5a7c885040e") (uuid "ce7a6ff3-5c3a-4077-bf86-beedc24debb3")
) )
(pad "15" smd circle (pad "15" smd circle
(at 7.6166 -19.1415) (at 7.6166 -19.1415)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "dd0f7577-6290-4e73-96f2-b8d5a22bfae2") (uuid "7273149b-9aea-4a23-9b4e-db1e0d6c76fc")
) )
(pad "16" smd circle (pad "16" smd circle
(at 10.1566 -19.1415) (at 10.1566 -19.1415)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "bc571b1a-844b-4ede-be8b-eb8d95595714") (uuid "0aef11c3-14ad-4cb5-9b05-95a892988ce8")
) )
(pad "17" smd circle (pad "17" smd circle
(at 7.6166 -16.6015) (at 7.6166 -16.6015)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "62293386-e611-4db9-9b83-9e6397ee899d") (uuid "158a5cbb-af86-4fa6-8d58-6831485085c5")
) )
(pad "18" smd circle (pad "18" smd circle
(at 10.1566 -16.6015) (at 10.1566 -16.6015)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "9296da6b-fa4e-41fb-800c-4e427d70791f") (uuid "3b7bcd8a-c97c-46f6-9faa-4e525d03d6e8")
) )
(pad "19" smd circle (pad "19" smd circle
(at 7.6166 -14.0615) (at 7.6166 -14.0615)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "7b2d4612-967f-421e-80a9-9f8cb0e56a4b") (uuid "ad4ba963-211d-4878-a4cb-255a615c14de")
) )
(pad "20" smd circle (pad "20" smd circle
(at 10.1566 -14.0615) (at 10.1566 -14.0615)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "e9502519-37f6-427d-8ac1-c91a57e60e31") (uuid "8c7e088d-0846-4d7d-9143-5ce3fdb0c4fd")
) )
(pad "21" smd circle (pad "21" smd circle
(at 7.6166 -11.5215) (at 7.6166 -11.5215)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "9cc565e8-a330-4288-8a84-30034925498b") (uuid "c6bbe198-c8c7-4b83-a36e-6a6fdeb3b94f")
) )
(pad "22" smd circle (pad "22" smd circle
(at 10.064 -11.5783) (at 10.064 -11.5783)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "0ce47caa-4877-4cc0-806c-5f61820a68bf") (uuid "4f1e574b-3b71-4a23-b765-d779726fd3c6")
) )
(pad "23" smd roundrect (pad "23" smd roundrect
(at 7.3086 -4.9683 270) (at 7.3086 -4.9683 270)
@ -536,7 +536,7 @@
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "05334df1-39c8-400d-b0bb-a6659401fe77") (uuid "08d345bf-1b32-499f-94bb-44332eb5115d")
) )
(pad "24" smd roundrect (pad "24" smd roundrect
(at 9.8486 -4.9683 270) (at 9.8486 -4.9683 270)
@ -544,7 +544,7 @@
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "c828c680-7be4-4eb8-8aaa-0abb935706db") (uuid "8b3ca1bb-eee0-4c3d-8f3b-eefea4a68bbb")
) )
(pad "25" smd roundrect (pad "25" smd roundrect
(at 9.949 -8.412 270) (at 9.949 -8.412 270)
@ -552,18 +552,7 @@
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "1545b883-dc4a-4fcb-99e4-3b7b29ed142b") (uuid "45570478-e499-45ab-bb97-539cabc4e177")
) )
(embedded_fonts no) (embedded_fonts no)
(model "${KIPRJMOD}/library/Seeed Studio XIAO ESP32-C5.step"
(offset
(xyz 15 8.7 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz -90 -0 -90)
)
)
) )

View file

@ -1,12 +1,12 @@
(footprint "XIAO-ESP32-C5-SMD" (footprint "XIAO-ESP32-C5-SMD"
(version 20260206) (version 20241229)
(generator "pcbnew") (generator "pcbnew")
(generator_version "10.0") (generator_version "9.0")
(layer "F.Cu") (layer "F.Cu")
(property "Reference" "REF**" (property "Reference" "REF**"
(at 7.312 -21.336 0) (at 7.312 -21.336 0)
(layer "F.SilkS") (layer "F.SilkS")
(uuid "557c8d74-068c-42d8-b6ab-85ab4ee867fc") (uuid "a9f5f5dd-597c-45dd-b31d-a35c3963eed2")
(effects (effects
(font (font
(size 0.78232 0.78232) (size 0.78232 0.78232)
@ -18,7 +18,7 @@
(property "Value" "Val**" (property "Value" "Val**"
(at 8.89 -10.795 0) (at 8.89 -10.795 0)
(layer "F.Fab") (layer "F.Fab")
(uuid "705e36ff-9a63-4475-ae0c-c8cfa97917f5") (uuid "2d66aca7-e0b3-44df-838e-be285890792c")
(effects (effects
(font (font
(size 0.536448 0.536448) (size 0.536448 0.536448)
@ -31,7 +31,7 @@
(unlocked yes) (unlocked yes)
(layer "F.Fab") (layer "F.Fab")
(hide yes) (hide yes)
(uuid "229b4243-ef3c-470f-a5d9-97b6a42f008c") (uuid "5173b428-b87b-497c-9fd1-0d444c2ced85")
(effects (effects
(font (font
(size 1.27 1.27) (size 1.27 1.27)
@ -44,7 +44,7 @@
(unlocked yes) (unlocked yes)
(layer "F.Fab") (layer "F.Fab")
(hide yes) (hide yes)
(uuid "7a7b1278-d112-4040-a8cd-6d0400594348") (uuid "ea7181c4-fdca-44f1-ad15-d0627f50a68e")
(effects (effects
(font (font
(size 1.27 1.27) (size 1.27 1.27)
@ -52,7 +52,6 @@
) )
) )
) )
(duplicate_pad_numbers_are_jumpers no)
(fp_line (fp_line
(start 0 -1.987) (start 0 -1.987)
(end 0 -19.132) (end 0 -19.132)
@ -61,7 +60,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "a66c2840-6ec7-48db-8e31-5d72c9c553bf") (uuid "df0486b4-d04f-4201-a301-beede6e15862")
) )
(fp_line (fp_line
(start 1.905 -0.082) (start 1.905 -0.082)
@ -71,7 +70,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "d257aabf-9b3d-4476-84c1-ba31617c7235") (uuid "f54abd8d-62ed-4b05-8e37-f29acdadc0f8")
) )
(fp_line (fp_line
(start 4.595 -21.037) (start 4.595 -21.037)
@ -81,7 +80,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "a992b9a7-8dbf-4641-afc9-0ec10e2d7b01") (uuid "fead6daa-b9f4-4bd1-a131-b5d2cd3184de")
) )
(fp_line (fp_line
(start 5.098728 -22.547) (start 5.098728 -22.547)
@ -91,7 +90,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "b0d13c73-b834-468a-ab90-f79b89266984") (uuid "b90ae92d-7c1a-4689-bf64-c3528a3ea3ee")
) )
(fp_line (fp_line
(start 13.594 -22.047) (start 13.594 -22.047)
@ -101,7 +100,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "555b99e7-1219-4a0c-ac7e-db119bda8034") (uuid "b540fbcc-8e06-44d7-95f6-8b142e4c90fb")
) )
(fp_line (fp_line
(start 15.875 -21.037) (start 15.875 -21.037)
@ -111,7 +110,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "a8617b36-ce2c-4e94-9b21-49cec1b78e78") (uuid "2b80542c-5088-4f89-ae32-3400cf894ca1")
) )
(fp_line (fp_line
(start 17.78 -1.987) (start 17.78 -1.987)
@ -121,7 +120,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "7b2fa456-4c5d-47eb-83a9-9899ae4199ed") (uuid "4cd8add0-8a8c-468d-ba6f-b86787c288af")
) )
(fp_arc (fp_arc
(start 0 -19.136) (start 0 -19.136)
@ -132,7 +131,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "e78b67dd-552c-4fc5-ad57-73bbafc2d044") (uuid "4d9bf7a5-4ab4-48bb-b8ac-0a5ce4523642")
) )
(fp_arc (fp_arc
(start 1.905 -0.082) (start 1.905 -0.082)
@ -143,7 +142,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "88429fe1-7b04-471a-9890-a0b8200a074b") (uuid "d09661c8-1ad3-40e9-8323-9dabc8f3f98b")
) )
(fp_arc (fp_arc
(start 4.598728 -22.047272) (start 4.598728 -22.047272)
@ -154,7 +153,7 @@
(type default) (type default)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "c1959345-d081-4a6d-ad04-f511b2bcd3b3") (uuid "7a58f637-14d7-4804-b127-f1d029b5d1e6")
) )
(fp_arc (fp_arc
(start 13.094 -22.547) (start 13.094 -22.547)
@ -165,7 +164,7 @@
(type default) (type default)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "3834fecb-644d-483f-af5e-b4ec4ba35133") (uuid "d0bc8663-987f-4e2e-b464-096a547b822f")
) )
(fp_arc (fp_arc
(start 15.875 -21.037) (start 15.875 -21.037)
@ -176,7 +175,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "5e69b2f4-3544-474a-ae1a-7f149ae7eb69") (uuid "77004ea5-53a4-40ab-b35c-7bdd22107e34")
) )
(fp_arc (fp_arc
(start 17.78 -1.987) (start 17.78 -1.987)
@ -187,7 +186,7 @@
(type solid) (type solid)
) )
(layer "F.SilkS") (layer "F.SilkS")
(uuid "1191396d-a9ec-434e-886a-91600b65a1f3") (uuid "94189dc1-14b5-4f17-b9d3-0163ed99e583")
) )
(fp_circle (fp_circle
(center -0.21 -20.621) (center -0.21 -20.621)
@ -198,7 +197,7 @@
) )
(fill yes) (fill yes)
(layer "F.SilkS") (layer "F.SilkS")
(uuid "78de167e-67f4-421d-a3d7-f90b03c3b76a") (uuid "dc606cc5-10bc-4635-81d1-fa27b1e6b4e2")
) )
(fp_circle (fp_circle
(center 1.064 -19.904) (center 1.064 -19.904)
@ -209,7 +208,7 @@
) )
(fill yes) (fill yes)
(layer "F.SilkS") (layer "F.SilkS")
(uuid "e0ab7501-2085-405d-8904-360e96286f3d") (uuid "2b5e2829-6d01-441f-9983-fc4a273ff483")
) )
(fp_rect (fp_rect
(start 17.8 0) (start 17.8 0)
@ -220,7 +219,7 @@
) )
(fill no) (fill no)
(layer "F.CrtYd") (layer "F.CrtYd")
(uuid "68fac093-a80b-43bd-acdd-9174c2b68a7b") (uuid "e428eb56-00a2-4249-bb91-d2e5823b2899")
) )
(fp_rect (fp_rect
(start 0 -21) (start 0 -21)
@ -231,7 +230,7 @@
) )
(fill no) (fill no)
(layer "F.Fab") (layer "F.Fab")
(uuid "75e1e4bf-5495-4543-8162-6f2146eb31a7") (uuid "2133d927-559d-4615-ab92-732772c02d94")
) )
(fp_circle (fp_circle
(center 1.084 -19.9) (center 1.084 -19.9)
@ -242,7 +241,7 @@
) )
(fill yes) (fill yes)
(layer "F.Fab") (layer "F.Fab")
(uuid "3f79778e-efc6-4d8a-90fc-9b0956d1e6c8") (uuid "50e04a65-8ff2-4d1f-be98-2db48101e90a")
) )
(pad "1" smd roundrect (pad "1" smd roundrect
(at 0.835 -18.12) (at 0.835 -18.12)
@ -251,7 +250,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "a66a81ba-530e-4ed7-85fc-abb706366301") (uuid "c68f6b12-dcf5-46b1-b159-2eef9023b0ac")
) )
(pad "2" smd roundrect (pad "2" smd roundrect
(at 0.835 -15.58) (at 0.835 -15.58)
@ -260,7 +259,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "2e8e6c17-1c83-40e5-886b-8ac9e111d834") (uuid "525b09fc-9099-4274-98c3-45f84d0591ab")
) )
(pad "3" smd roundrect (pad "3" smd roundrect
(at 0.835 -13.04) (at 0.835 -13.04)
@ -269,7 +268,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "4c19fb00-2466-4963-9035-7df313ebbd03") (uuid "99cc76a7-0a78-4868-871b-c214ecac5525")
) )
(pad "4" smd roundrect (pad "4" smd roundrect
(at 0.835 -10.5) (at 0.835 -10.5)
@ -278,7 +277,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "020dc3ce-b079-4716-befc-21c4a0b166e5") (uuid "8038b67b-b3bf-4a3e-b790-40857963c957")
) )
(pad "5" smd roundrect (pad "5" smd roundrect
(at 0.835 -7.96) (at 0.835 -7.96)
@ -287,7 +286,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "94f0b26d-d04c-43cf-8320-ed3ef2490ead") (uuid "84711cb2-d222-464e-bcd5-f76af75cc612")
) )
(pad "6" smd roundrect (pad "6" smd roundrect
(at 0.835 -5.42) (at 0.835 -5.42)
@ -296,7 +295,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "e24700dc-8a05-4c4d-a5b3-15a1c457d46d") (uuid "aabcfc3b-fa72-4e48-95d1-d53474158cc0")
) )
(pad "7" smd roundrect (pad "7" smd roundrect
(at 0.835 -2.88) (at 0.835 -2.88)
@ -305,7 +304,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "62fff5d6-54d1-422b-ad81-95284edc437b") (uuid "3e086061-1f3f-4b1e-9354-920126d40249")
) )
(pad "8" smd roundrect (pad "8" smd roundrect
(at 17 -2.88) (at 17 -2.88)
@ -314,7 +313,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "9e877d45-e3c0-44e0-9458-4922630c6a1a") (uuid "974a7e29-b5d3-475c-b481-2bc14f5b3495")
) )
(pad "9" smd roundrect (pad "9" smd roundrect
(at 17 -5.42) (at 17 -5.42)
@ -323,7 +322,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "1d9612e2-d4b8-4c42-b755-355323253c76") (uuid "a553cc0b-22bc-49aa-9fb7-680c812e8abd")
) )
(pad "10" smd roundrect (pad "10" smd roundrect
(at 17 -7.96) (at 17 -7.96)
@ -332,7 +331,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "5b31b5e5-b0e6-4ab0-8375-70a97ef6477f") (uuid "b650936d-c436-4d93-abb7-7957add5cfb1")
) )
(pad "11" smd roundrect (pad "11" smd roundrect
(at 17 -10.5) (at 17 -10.5)
@ -341,7 +340,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "a7eb43c8-fdae-4b4e-8911-e5139f09839b") (uuid "177728f1-7b02-41a6-9de4-bdaee546f6d9")
) )
(pad "12" smd roundrect (pad "12" smd roundrect
(at 17 -13.04) (at 17 -13.04)
@ -350,7 +349,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "46ec70bc-5b25-41d9-8f94-d64bca50566e") (uuid "eb6539ef-4d84-4ae5-bc4e-237dae21b9ef")
) )
(pad "13" smd roundrect (pad "13" smd roundrect
(at 17 -15.58) (at 17 -15.58)
@ -359,7 +358,7 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "0b2adafc-0e12-42c8-82d3-09e4eaec6f34") (uuid "c8744fbe-93c9-4c54-84bc-435357de679f")
) )
(pad "14" smd roundrect (pad "14" smd roundrect
(at 17 -18.12) (at 17 -18.12)
@ -368,55 +367,55 @@
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(solder_mask_margin 0.0508) (solder_mask_margin 0.0508)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "b80dbfd3-3660-497c-91ee-d31b38368e21") (uuid "fd579d63-bbef-4609-9252-aad3f944a314")
) )
(pad "15" smd circle (pad "15" smd circle
(at 7.6166 -19.1415) (at 7.6166 -19.1415)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "1e713eb0-e2b6-45a1-abce-43bbf4392316") (uuid "ad890579-1e55-4b71-9d59-080a59598896")
) )
(pad "16" smd circle (pad "16" smd circle
(at 10.1566 -19.1415) (at 10.1566 -19.1415)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "0b9de9dc-04ec-439c-b85b-ce655f2f5cd6") (uuid "25d6fdae-01ac-4ca4-8702-55badc8bcbc8")
) )
(pad "17" smd circle (pad "17" smd circle
(at 7.6166 -16.6015) (at 7.6166 -16.6015)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "c845e0bb-80f7-42f3-a5db-d540a8c28762") (uuid "e73ae295-736f-4acf-8ee1-0c120ebcebea")
) )
(pad "18" smd circle (pad "18" smd circle
(at 10.1566 -16.6015) (at 10.1566 -16.6015)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "ac3ee324-2971-4b32-a471-bcb7de28c772") (uuid "7adfba87-f861-42a5-bb73-c3f9fac53180")
) )
(pad "19" smd circle (pad "19" smd circle
(at 7.6166 -14.0615) (at 7.6166 -14.0615)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "ed4179a5-d6cb-4841-818a-3e2c9a5fa81d") (uuid "619dc2a5-519d-48ac-9c78-8c438df2a14d")
) )
(pad "20" smd circle (pad "20" smd circle
(at 10.1566 -14.0615) (at 10.1566 -14.0615)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "032beec7-6d1b-472e-a4a2-afbf49f975b3") (uuid "aa8b72d0-17bf-47d4-94b1-df9199638a29")
) )
(pad "21" smd circle (pad "21" smd circle
(at 7.6166 -11.5215) (at 7.6166 -11.5215)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "25568581-39b7-4dd1-b81f-5b4a630b9650") (uuid "8539b5cc-db2c-4fa4-9ead-b842a1885293")
) )
(pad "22" smd circle (pad "22" smd circle
(at 10.064 -11.5783) (at 10.064 -11.5783)
(size 1.7 1.7) (size 1.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(uuid "23bde525-d47d-40b7-84ea-dcf8234b1a5c") (uuid "313edcfe-ad25-4ea7-b786-d8290dfb479a")
) )
(pad "23" smd roundrect (pad "23" smd roundrect
(at 7.3086 -4.9683 270) (at 7.3086 -4.9683 270)
@ -424,7 +423,7 @@
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "f3d763d5-6561-4c0f-9670-bb6789ac4352") (uuid "144d3c3d-6207-433c-9e61-4f75722af865")
) )
(pad "24" smd roundrect (pad "24" smd roundrect
(at 9.8486 -4.9683 270) (at 9.8486 -4.9683 270)
@ -432,7 +431,7 @@
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "de0f17f7-8fc6-479b-9cb3-df664992a6e4") (uuid "3780a4ef-348c-4241-b04b-2cb4f7127fa2")
) )
(pad "25" smd roundrect (pad "25" smd roundrect
(at 9.949 -8.412 270) (at 9.949 -8.412 270)
@ -440,18 +439,7 @@
(layers "F.Cu" "F.Mask" "F.Paste") (layers "F.Cu" "F.Mask" "F.Paste")
(roundrect_rratio 0.25) (roundrect_rratio 0.25)
(thermal_bridge_angle 45) (thermal_bridge_angle 45)
(uuid "fcf89ab9-e2b7-4fff-9ab3-5d659c4716b9") (uuid "00be3957-5a21-4898-8292-59f5f447623f")
) )
(embedded_fonts no) (embedded_fonts no)
(model "${KIPRJMOD}/library/Seeed Studio XIAO ESP32-C5.step"
(offset
(xyz 15 8.7 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz -90 -0 -90)
)
)
) )

View file

@ -1,330 +0,0 @@
(footprint "apple-ambulance-07mm-silkscreen"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(property "Reference" "G***"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "2b5918f7-603f-4d90-b35f-93f7771c7c5a")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Value" "LOGO"
(at 0.75 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "389520d5-426c-4ad5-96ca-473e9b598336")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "b2d844bc-15e2-445c-a171-507c958fb0ae")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "6069302e-d1cc-475e-9ec2-e8f1b1e0a766")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr board_only exclude_from_pos_files exclude_from_bom)
(duplicate_pad_numbers_are_jumpers no)
(fp_poly
(pts
(xy -3.564006 1.403515) (xy -3.477841 1.418201) (xy -3.477409 1.418311) (xy -3.311575 1.47625) (xy -3.158272 1.561271)
(xy -3.02076 1.67015) (xy -2.902296 1.799665) (xy -2.80614 1.946593) (xy -2.735551 2.107712) (xy -2.716425 2.170804)
(xy -2.698044 2.270948) (xy -2.689557 2.388431) (xy -2.690963 2.510483) (xy -2.702262 2.624336) (xy -2.716425 2.693699)
(xy -2.77566 2.856203) (xy -2.861703 3.007451) (xy -2.970947 3.143618) (xy -3.099784 3.260884) (xy -3.244606 3.355426)
(xy -3.401806 3.423421) (xy -3.406737 3.425031) (xy -3.51052 3.449265) (xy -3.63247 3.463095) (xy -3.760725 3.466236)
(xy -3.883419 3.458403) (xy -3.988688 3.43931) (xy -3.989598 3.439065) (xy -4.154265 3.380019) (xy -4.303264 3.295183)
(xy -4.440832 3.182095) (xy -4.454033 3.169227) (xy -4.572775 3.033788) (xy -4.661492 2.89078) (xy -4.721491 2.737075)
(xy -4.754073 2.569545) (xy -4.761303 2.432252) (xy -4.167311 2.432252) (xy -4.152257 2.536497) (xy -4.110172 2.636271)
(xy -4.045673 2.72544) (xy -3.963374 2.797871) (xy -3.867894 2.84743) (xy -3.850508 2.853192) (xy -3.780827 2.86472)
(xy -3.697271 2.86463) (xy -3.61522 2.853492) (xy -3.576815 2.843039) (xy -3.47951 2.794603) (xy -3.401443 2.725275)
(xy -3.343585 2.640062) (xy -3.30691 2.54397) (xy -3.292389 2.442005) (xy -3.300995 2.339173) (xy -3.333701 2.240482)
(xy -3.391479 2.150936) (xy -3.433973 2.107681) (xy -3.525746 2.046501) (xy -3.630353 2.009563) (xy -3.740415 1.997868)
(xy -3.848554 2.012415) (xy -3.924207 2.041274) (xy -4.006823 2.09932) (xy -4.077345 2.179239) (xy -4.130646 2.272782)
(xy -4.161596 2.371703) (xy -4.167311 2.432252) (xy -4.761303 2.432252) (xy -4.748663 2.252944) (xy -4.70981 2.089807)
(xy -4.643347 1.939497) (xy -4.547876 1.798667) (xy -4.45266 1.693534) (xy -4.31628 1.579375) (xy -4.163124 1.489123)
(xy -3.999316 1.426267) (xy -3.969878 1.418311) (xy -3.883859 1.40358) (xy -3.77933 1.396204) (xy -3.668608 1.396182)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "7752d7a9-942f-4bf8-9357-17306a94d401")
)
(fp_poly
(pts
(xy 5.933658 1.403658) (xy 6.004487 1.406429) (xy 6.059309 1.412056) (xy 6.105957 1.42142) (xy 6.152262 1.435404)
(xy 6.163818 1.439412) (xy 6.330207 1.514264) (xy 6.480315 1.614385) (xy 6.611219 1.736848) (xy 6.719997 1.878726)
(xy 6.803727 2.037089) (xy 6.830589 2.107423) (xy 6.855054 2.205848) (xy 6.870081 2.323058) (xy 6.875185 2.447441)
(xy 6.869883 2.567382) (xy 6.854007 2.669931) (xy 6.813031 2.805683) (xy 6.755203 2.927307) (xy 6.676058 3.042494)
(xy 6.571128 3.158938) (xy 6.56849 3.161579) (xy 6.462413 3.258894) (xy 6.360114 3.332673) (xy 6.252438 3.388308)
(xy 6.13023 3.431194) (xy 6.093984 3.441175) (xy 5.992929 3.459437) (xy 5.874731 3.467883) (xy 5.752404 3.466428)
(xy 5.638967 3.454984) (xy 5.585658 3.444542) (xy 5.42618 3.390141) (xy 5.277218 3.308398) (xy 5.142273 3.202872)
(xy 5.024847 3.077127) (xy 4.928443 2.934723) (xy 4.856563 2.779222) (xy 4.823972 2.669931) (xy 4.807942 2.565727)
(xy 4.802794 2.445638) (xy 4.803359 2.432252) (xy 5.40394 2.432252) (xy 5.418595 2.549248) (xy 5.461436 2.652939)
(xy 5.530774 2.740594) (xy 5.624919 2.809483) (xy 5.643233 2.819114) (xy 5.711573 2.849154) (xy 5.771665 2.864046)
(xy 5.838989 2.867997) (xy 5.907387 2.863892) (xy 5.967479 2.848772) (xy 6.034746 2.819114) (xy 6.128982 2.755368)
(xy 6.201818 2.671708) (xy 6.250892 2.57337) (xy 6.273842 2.465588) (xy 6.268306 2.353598) (xy 6.260436 2.318842)
(xy 6.216702 2.214791) (xy 6.148742 2.126763) (xy 6.06148 2.058537) (xy 5.959841 2.013888) (xy 5.848751 1.996595)
(xy 5.840136 1.996506) (xy 5.726105 2.011219) (xy 5.623684 2.052887) (xy 5.536582 2.117807) (xy 5.468506 2.202275)
(xy 5.423165 2.302586) (xy 5.404265 2.415036) (xy 5.40394 2.432252) (xy 4.803359 2.432252) (xy 4.808046 2.321277)
(xy 4.823213 2.204256) (xy 4.84739 2.107423) (xy 4.915607 1.952101) (xy 5.009378 1.80597) (xy 5.108782 1.692104)
(xy 5.227529 1.588985) (xy 5.353843 1.509207) (xy 5.499074 1.445614) (xy 5.500936 1.444936) (xy 5.551179 1.427688)
(xy 5.595672 1.415871) (xy 5.642442 1.408486) (xy 5.699516 1.404534) (xy 5.774919 1.403016) (xy 5.838989 1.402863)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "499a74da-2188-4a5d-852b-beafe83b1fe5")
)
(fp_poly
(pts
(xy -0.328674 -2.170563) (xy -0.143741 -2.169823) (xy 0.011668 -2.168564) (xy 0.138636 -2.166766)
(xy 0.238244 -2.164409) (xy 0.311574 -2.161471) (xy 0.359707 -2.157932) (xy 0.383725 -2.153772) (xy 0.38529 -2.153105)
(xy 0.422645 -2.126534) (xy 0.447277 -2.101608) (xy 0.451031 -2.095582) (xy 0.454427 -2.08621) (xy 0.457484 -2.071964)
(xy 0.460219 -2.051314) (xy 0.462651 -2.022731) (xy 0.464797 -1.984688) (xy 0.466677 -1.935655) (xy 0.468307 -1.874104)
(xy 0.469706 -1.798505) (xy 0.470893 -1.707331) (xy 0.471885 -1.599052) (xy 0.472699 -1.47214) (xy 0.473356 -1.325065)
(xy 0.473871 -1.1563) (xy 0.474265 -0.964316) (xy 0.474554 -0.747584) (xy 0.474756 -0.504574) (xy 0.474891 -0.233759)
(xy 0.474975 0.06639) (xy 0.475006 0.24164) (xy 0.475359 2.551091) (xy -0.522895 2.551091) (xy -1.521148 2.551091)
(xy -1.521148 0.238895) (xy -1.521148 -0.929276) (xy -1.204242 -0.929276) (xy -1.204144 -0.800708)
(xy -1.203653 -0.699729) (xy -1.202479 -0.622239) (xy -1.20033 -0.564137) (xy -1.196913 -0.521322)
(xy -1.191937 -0.489693) (xy -1.18511 -0.465149) (xy -1.17614 -0.44359) (xy -1.16859 -0.428392) (xy -1.138226 -0.378967)
(xy -1.102126 -0.343806) (xy -1.054637 -0.320693) (xy -0.99011 -0.307409) (xy -0.902891 -0.301738)
(xy -0.844009 -0.301061) (xy -0.665502 -0.301061) (xy -0.665502 -0.91664) (xy -0.665502 -0.924858)
(xy -0.411978 -0.924858) (xy -0.411978 -0.301061) (xy -0.224177 -0.301061) (xy -0.142003 -0.301634)
(xy -0.084445 -0.304053) (xy -0.044441 -0.309369) (xy -0.014926 -0.318635) (xy 0.011163 -0.332902)
(xy 0.017463 -0.337029) (xy 0.047471 -0.358327) (xy 0.071421 -0.380232) (xy 0.089994 -0.406422) (xy 0.103871 -0.440578)
(xy 0.113734 -0.486378) (xy 0.120264 -0.547502) (xy 0.124143 -0.627629) (xy 0.126052 -0.73044) (xy 0.126673 -0.859613)
(xy 0.126713 -0.92695) (xy 0.126519 -1.059785) (xy 0.125793 -1.164803) (xy 0.124321 -1.245877) (xy 0.121887 -1.306878)
(xy 0.118277 -1.351679) (xy 0.113275 -1.384151) (xy 0.106667 -1.408169) (xy 0.099008 -1.426076) (xy 0.072506 -1.466584)
(xy 0.036101 -1.496396) (xy -0.015148 -1.517264) (xy -0.086182 -1.530941) (xy -0.181945 -1.53918)
(xy -0.225795 -1.541247) (xy -0.411978 -1.548656) (xy -0.411978 -0.924858) (xy -0.665502 -0.924858)
(xy -0.665502 -1.532219) (xy -0.830709 -1.541574) (xy -0.935156 -1.54482) (xy -1.013902 -1.540428)
(xy -1.072228 -1.527432) (xy -1.115414 -1.504867) (xy -1.137021 -1.48552) (xy -1.156155 -1.462999)
(xy -1.171293 -1.43833) (xy -1.182897 -1.407684) (xy -1.191429 -1.367229) (xy -1.197354 -1.313136)
(xy -1.201133 -1.241574) (xy -1.203229 -1.148712) (xy -1.204106 -1.030721) (xy -1.204242 -0.929276)
(xy -1.521148 -0.929276) (xy -1.521148 -2.073302) (xy -1.480126 -2.122054) (xy -1.439104 -2.170805)
(xy -0.544212 -2.170805)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "a69ecd92-db58-4467-aaec-668d00b55053")
)
(fp_poly
(pts
(xy 3.420751 -1.819174) (xy 3.530625 -1.817218) (xy 3.620867 -1.813083) (xy 3.695493 -1.806294) (xy 3.758519 -1.796373)
(xy 3.813961 -1.782842) (xy 3.865837 -1.765225) (xy 3.918162 -1.743043) (xy 3.970277 -1.718132) (xy 3.998375 -1.702797)
(xy 4.031507 -1.681607) (xy 4.071624 -1.652945) (xy 4.120678 -1.615192) (xy 4.180618 -1.56673) (xy 4.253398 -1.505941)
(xy 4.340967 -1.431207) (xy 4.445277 -1.340909) (xy 4.56828 -1.23343) (xy 4.711926 -1.107151) (xy 4.790186 -1.038144)
(xy 4.919768 -0.924138) (xy 5.044022 -0.815478) (xy 5.160619 -0.714156) (xy 5.267232 -0.622165) (xy 5.361533 -0.541497)
(xy 5.441194 -0.474144) (xy 5.503887 -0.422099) (xy 5.547285 -0.387355) (xy 5.567732 -0.372633) (xy 5.611519 -0.352992)
(xy 5.683694 -0.328238) (xy 5.78152 -0.299205) (xy 5.902257 -0.266724) (xy 5.983755 -0.246127) (xy 6.222473 -0.185882)
(xy 6.433777 -0.130098) (xy 6.61711 -0.078947) (xy 6.77191 -0.032602) (xy 6.897621 0.008763) (xy 6.993681 0.044977)
(xy 7.059533 0.075867) (xy 7.088757 0.095432) (xy 7.13494 0.150225) (xy 7.179893 0.22986) (xy 7.220276 0.327559)
(xy 7.248471 0.41958) (xy 7.264224 0.480764) (xy 7.270027 0.519999) (xy 7.261344 0.542144) (xy 7.233641 0.552056)
(xy 7.182381 0.554596) (xy 7.122458 0.554585) (xy 6.971928 0.554585) (xy 6.971928 0.793051) (xy 6.97285 0.896717)
(xy 6.975868 0.973298) (xy 6.981353 1.027357) (xy 6.989682 1.063452) (xy 6.995164 1.076452) (xy 7.029512 1.123905)
(xy 7.083427 1.177544) (xy 7.148019 1.229604) (xy 7.2144 1.272325) (xy 7.227268 1.279146) (xy 7.296756 1.314438)
(xy 7.310529 1.195958) (xy 7.319749 1.130238) (xy 7.332202 1.092422) (xy 7.353299 1.078801) (xy 7.388447 1.085664)
(xy 7.439364 1.107583) (xy 7.504623 1.148234) (xy 7.564425 1.203503) (xy 7.608676 1.263315) (xy 7.620613 1.288461)
(xy 7.626097 1.319354) (xy 7.630661 1.378388) (xy 7.634162 1.462022) (xy 7.63646 1.566715) (xy 7.637412 1.688926)
(xy 7.63743 1.70922) (xy 7.63743 2.085373) (xy 7.592536 2.156164) (xy 7.531871 2.225345) (xy 7.444956 2.282166)
(xy 7.330709 2.327133) (xy 7.188049 2.360751) (xy 7.137057 2.36907) (xy 7.083891 2.371223) (xy 7.055748 2.357921)
(xy 7.046248 2.333635) (xy 7.035 2.286292) (xy 7.023872 2.224317) (xy 7.019494 2.194572) (xy 6.985232 2.001184)
(xy 6.937997 1.820923) (xy 6.879292 1.657402) (xy 6.81062 1.514239) (xy 6.733483 1.395048) (xy 6.649383 1.303445)
(xy 6.649027 1.303132) (xy 6.59363 1.257312) (xy 6.539334 1.219827) (xy 6.482323 1.189918) (xy 6.418779 1.166826)
(xy 6.344887 1.149793) (xy 6.256829 1.13806) (xy 6.150788 1.130868) (xy 6.022947 1.127458) (xy 5.86949 1.127071)
(xy 5.767685 1.127929) (xy 5.316095 1.132938) (xy 5.221023 1.179446) (xy 5.110003 1.250785) (xy 5.006329 1.352128)
(xy 4.910503 1.482538) (xy 4.823027 1.641075) (xy 4.744402 1.826802) (xy 4.675133 2.038779) (xy 4.61572 2.276069)
(xy 4.603794 2.332696) (xy 4.588211 2.406507) (xy 4.573939 2.469312) (xy 4.562582 2.514355) (xy 4.555844 2.534723)
(xy 4.538087 2.538555) (xy 4.492067 2.541909) (xy 4.421106 2.544791) (xy 4.32853 2.547206) (xy 4.217661 2.54916)
(xy 4.091824 2.55066) (xy 3.954341 2.551711) (xy 3.808536 2.552319) (xy 3.657734 2.552489) (xy 3.505257 2.552228)
(xy 3.35443 2.551542) (xy 3.208575 2.550436) (xy 3.071017 2.548917) (xy 2.94508 2.54699) (xy 2.834086 2.54466)
(xy 2.74136 2.541935) (xy 2.670225 2.538819) (xy 2.624005 2.535318) (xy 2.606023 2.53144) (xy 2.605941 2.531285)
(xy 2.605066 2.513336) (xy 2.604279 2.465535) (xy 2.603582 2.389719) (xy 2.602979 2.287726) (xy 2.602471 2.161395)
(xy 2.602062 2.012563) (xy 2.601756 1.843069) (xy 2.601554 1.65475) (xy 2.601459 1.449444) (xy 2.601476 1.228989)
(xy 2.601606 0.995223) (xy 2.601852 0.749985) (xy 2.602218 0.495111) (xy 2.602477 0.348596) (xy 2.605615 -1.317759)
(xy 2.955146 -1.317759) (xy 2.955146 -0.763538) (xy 2.955216 -0.616152) (xy 2.955542 -0.497162) (xy 2.956302 -0.403273)
(xy 2.957672 -0.33119) (xy 2.959831 -0.277617) (xy 2.962955 -0.239261) (xy 2.967222 -0.212827) (xy 2.972808 -0.195018)
(xy 2.97989 -0.182542) (xy 2.986837 -0.174092) (xy 3.021094 -0.143478) (xy 3.050218 -0.125897) (xy 3.0722 -0.12321)
(xy 3.122548 -0.120668) (xy 3.197938 -0.118332) (xy 3.295047 -0.116264) (xy 3.410551 -0.114524) (xy 3.541125 -0.113174)
(xy 3.683446 -0.112277) (xy 3.805947 -0.111922) (xy 4.529986 -0.110917) (xy 4.574444 -0.14912) (xy 4.592201 -0.165305)
(xy 4.604601 -0.18197) (xy 4.612777 -0.204937) (xy 4.61786 -0.240027) (xy 4.620984 -0.29306) (xy 4.623282 -0.369858)
(xy 4.624125 -0.404463) (xy 4.625383 -0.487394) (xy 4.62515 -0.56159) (xy 4.623544 -0.619924) (xy 4.620683 -0.655272)
(xy 4.619902 -0.659238) (xy 4.606064 -0.678508) (xy 4.571452 -0.715461) (xy 4.519312 -0.767112) (xy 4.45289 -0.830475)
(xy 4.375435 -0.902563) (xy 4.290192 -0.980391) (xy 4.200409 -1.060972) (xy 4.109333 -1.141321) (xy 4.02021 -1.218451)
(xy 3.936288 -1.289377) (xy 3.919944 -1.302944) (xy 3.875606 -1.336517) (xy 3.830578 -1.362415) (xy 3.780002 -1.381592)
(xy 3.719021 -1.394997) (xy 3.642776 -1.403585) (xy 3.546409 -1.408305) (xy 3.425062 -1.410111) (xy 3.372421 -1.410231)
(xy 3.058641 -1.410231) (xy 3.006894 -1.363995) (xy 2.955146 -1.317759) (xy 2.605615 -1.317759) (xy 2.60655 -1.814286)
(xy 3.126039 -1.818465) (xy 3.287228 -1.819431)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "acbdc647-ec64-4b05-ba49-9ceea1abe1e3")
)
(fp_poly
(pts
(xy -2.050607 -3.469998) (xy -1.628264 -3.469987) (xy -1.235445 -3.469959) (xy -0.871066 -3.469908)
(xy -0.534042 -3.469826) (xy -0.223291 -3.469705) (xy 0.062272 -3.469539) (xy 0.323729 -3.469319)
(xy 0.562166 -3.46904) (xy 0.778665 -3.468693) (xy 0.97431 -3.468271) (xy 1.150184 -3.467767) (xy 1.307373 -3.467173)
(xy 1.446958 -3.466483) (xy 1.570024 -3.465689) (xy 1.677654 -3.464783) (xy 1.770932 -3.463758) (xy 1.850942 -3.462608)
(xy 1.918767 -3.461324) (xy 1.975492 -3.4599) (xy 2.022199 -3.458327) (xy 2.059972 -3.4566) (xy 2.089896 -3.45471)
(xy 2.113053 -3.45265) (xy 2.130528 -3.450413) (xy 2.143403 -3.447991) (xy 2.152763 -3.445378) (xy 2.159692 -3.442566)
(xy 2.165273 -3.439547) (xy 2.166988 -3.438514) (xy 2.211786 -3.402027) (xy 2.249032 -3.357134) (xy 2.250117 -3.355385)
(xy 2.253962 -3.348665) (xy 2.25748 -3.340754) (xy 2.260687 -3.330281) (xy 2.263596 -3.315879) (xy 2.266222 -3.296175)
(xy 2.26858 -3.269801) (xy 2.270684 -3.235386) (xy 2.272549 -3.191561) (xy 2.274189 -3.136955) (xy 2.275619 -3.070198)
(xy 2.276852 -2.98992) (xy 2.277905 -2.894752) (xy 2.27879 -2.783323) (xy 2.279523 -2.654264) (xy 2.280118 -2.506204)
(xy 2.28059 -2.337774) (xy 2.280954 -2.147603) (xy 2.281223 -1.934321) (xy 2.281412 -1.696559) (xy 2.281535 -1.432946)
(xy 2.281609 -1.142113) (xy 2.281645 -0.82269) (xy 2.28166 -0.473306) (xy 2.281662 -0.376326) (xy 2.281722 2.551091)
(xy 1.473612 2.551091) (xy 0.665502 2.551091) (xy 0.665502 0.24812) (xy 0.665511 -0.073073) (xy 0.665504 -0.36413)
(xy 0.665434 -0.626602) (xy 0.665251 -0.862045) (xy 0.664907 -1.072011) (xy 0.664352 -1.258054) (xy 0.663538 -1.421727)
(xy 0.662417 -1.564585) (xy 0.66094 -1.688179) (xy 0.659057 -1.794065) (xy 0.65672 -1.883795) (xy 0.653881 -1.958923)
(xy 0.65049 -2.021002) (xy 0.646499 -2.071587) (xy 0.641859 -2.112229) (xy 0.636521 -2.144484) (xy 0.630437 -2.169904)
(xy 0.623557 -2.190043) (xy 0.615834 -2.206454) (xy 0.607218 -2.220691) (xy 0.59766 -2.234308) (xy 0.587136 -2.248823)
(xy 0.552602 -2.285712) (xy 0.504032 -2.324433) (xy 0.478284 -2.341081) (xy 0.404055 -2.384717) (xy -0.483281 -2.389739)
(xy -0.697834 -2.390716) (xy -0.882319 -2.391027) (xy -1.038352 -2.39065) (xy -1.167548 -2.38956)
(xy -1.271525 -2.387737) (xy -1.351898 -2.385157) (xy -1.410282 -2.381798) (xy -1.448295 -2.377637)
(xy -1.456601 -2.376093) (xy -1.537212 -2.344524) (xy -1.612977 -2.289885) (xy -1.675754 -2.219959)
(xy -1.717402 -2.14253) (xy -1.724275 -2.120148) (xy -1.727031 -2.100692) (xy -1.729533 -2.064505)
(xy -1.731791 -2.010481) (xy -1.733813 -1.93751) (xy -1.735607 -1.844486) (xy -1.737183 -1.730301)
(xy -1.738548 -1.593847) (xy -1.739713 -1.434015) (xy -1.740685 -1.249698) (xy -1.741473 -1.039789)
(xy -1.742087 -0.803179) (xy -1.742534 -0.538761) (xy -1.742824 -0.245426) (xy -1.742965 0.077933)
(xy -1.742982 0.252618) (xy -1.742982 2.551091) (xy -2.025776 2.551091) (xy -2.30857 2.551091) (xy -2.318325 2.380597)
(xy -2.345454 2.170031) (xy -2.401206 1.970426) (xy -2.484079 1.784063) (xy -2.592573 1.613221) (xy -2.725189 1.460182)
(xy -2.880426 1.327227) (xy -3.056784 1.216635) (xy -3.097754 1.195783) (xy -3.289659 1.119032) (xy -3.487713 1.072201)
(xy -3.688713 1.054929) (xy -3.889457 1.066856) (xy -4.086743 1.107622) (xy -4.277367 1.176867) (xy -4.458126 1.274231)
(xy -4.581705 1.36261) (xy -4.73102 1.502051) (xy -4.857182 1.663118) (xy -4.960135 1.84574) (xy -4.960246 1.845976)
(xy -5.019355 1.984478) (xy -5.059821 2.114216) (xy -5.085046 2.248615) (xy -5.097744 2.388371) (xy -5.106958 2.551091)
(xy -6.372194 2.551091) (xy -7.63743 2.551091) (xy -7.63743 2.281721) (xy -7.63743 2.012351) (xy -7.463132 2.012351)
(xy -7.288834 2.012351) (xy -7.288774 -0.645696) (xy -7.288762 -0.985626) (xy -7.288728 -1.295306)
(xy -7.288713 -1.354773) (xy -5.434199 -1.354773) (xy -5.420268 -1.34204) (xy -5.383249 -1.316634)
(xy -5.327668 -1.281435) (xy -5.258046 -1.239324) (xy -5.194463 -1.202122) (xy -4.957292 -1.065317)
(xy -5.049544 -1.010162) (xy -5.109988 -0.974488) (xy -5.183182 -0.931947) (xy -5.254241 -0.891187)
(xy -5.260636 -0.887553) (xy -5.331403 -0.848453) (xy -5.382014 -0.819568) (xy -5.413466 -0.795292)
(xy -5.426756 -0.770018) (xy -5.422882 -0.738139) (xy -5.402841 -0.694049) (xy -5.36763 -0.63214)
(xy -5.320523 -0.550815) (xy -5.277209 -0.474814) (xy -5.23952 -0.40894) (xy -5.210169 -0.357916)
(xy -5.191871 -0.326467) (xy -5.187107 -0.318647) (xy -5.172525 -0.324132) (xy -5.135106 -0.343186)
(xy -5.079367 -0.373372) (xy -5.009822 -0.412254) (xy -4.944873 -0.449371) (xy -4.866901 -0.494066)
(xy -4.798684 -0.532649) (xy -4.744841 -0.562548) (xy -4.709997 -0.581191) (xy -4.69885 -0.586276)
(xy -4.696089 -0.571265) (xy -4.693692 -0.529563) (xy -4.691812 -0.466172) (xy -4.690601 -0.38609)
(xy -4.690206 -0.301061) (xy -4.690206 -0.015846) (xy -4.420836 -0.015846) (xy -4.151466 -0.015846)
(xy -4.151466 -0.301061) (xy -4.150931 -0.392172) (xy -4.149445 -0.471241) (xy -4.147186 -0.533268)
(xy -4.144333 -0.573254) (xy -4.141303 -0.586276) (xy -4.124878 -0.578768) (xy -4.085697 -0.557958)
(xy -4.028433 -0.526412) (xy -3.95776 -0.4867) (xy -3.894178 -0.450473) (xy -3.816412 -0.406572)
(xy -3.748466 -0.369481) (xy -3.694936 -0.341606) (xy -3.660412 -0.32535) (xy -3.649512 -0.322374)
(xy -3.638054 -0.339418) (xy -3.614751 -0.377855) (xy -3.582859 -0.431997) (xy -3.545632 -0.496155)
(xy -3.506328 -0.564639) (xy -3.468202 -0.631761) (xy -3.434509 -0.69183) (xy -3.408505 -0.739159)
(xy -3.393447 -0.768057) (xy -3.391009 -0.774085) (xy -3.404142 -0.784864) (xy -3.440476 -0.808348)
(xy -3.495537 -0.841806) (xy -3.564848 -0.882507) (xy -3.628572 -0.919027) (xy -3.706151 -0.963539)
(xy -3.773122 -1.002933) (xy -3.825012 -1.034498) (xy -3.857348 -1.055523) (xy -3.866134 -1.062977)
(xy -3.853122 -1.073512) (xy -3.81702 -1.096826) (xy -3.76235 -1.130149) (xy -3.693636 -1.170708)
(xy -3.635955 -1.204009) (xy -3.558999 -1.248507) (xy -3.492009 -1.288128) (xy -3.439715 -1.320004)
(xy -3.406845 -1.341266) (xy -3.397839 -1.34843) (xy -3.402874 -1.365321) (xy -3.421137 -1.403665)
(xy -3.449422 -1.457818) (xy -3.484522 -1.522136) (xy -3.523233 -1.590976) (xy -3.562347 -1.658693)
(xy -3.598659 -1.719644) (xy -3.628962 -1.768186) (xy -3.650052 -1.798673) (xy -3.657939 -1.806297)
(xy -3.674411 -1.798786) (xy -3.713638 -1.778012) (xy -3.770924 -1.746549) (xy -3.841574 -1.706967)
(xy -3.903814 -1.671612) (xy -3.98136 -1.6275) (xy -4.048876 -1.589455) (xy -4.101768 -1.560037)
(xy -4.135443 -1.541805) (xy -4.145455 -1.536994) (xy -4.147375 -1.552005) (xy -4.149042 -1.593707)
(xy -4.150349 -1.657099) (xy -4.151192 -1.737181) (xy -4.151466 -1.822209) (xy -4.151466 -2.107424)
(xy -4.420836 -2.107424) (xy -4.690206 -2.107424) (xy -4.690206 -1.822209) (xy -4.690551 -1.731097)
(xy -4.691508 -1.652027) (xy -4.692964 -1.59) (xy -4.694803 -1.550015) (xy -4.696756 -1.536994) (xy -4.711935 -1.544551)
(xy -4.749861 -1.565486) (xy -4.805917 -1.597191) (xy -4.875488 -1.637061) (xy -4.935349 -1.671678)
(xy -5.01254 -1.716117) (xy -5.080173 -1.754363) (xy -5.133525 -1.783799) (xy -5.16787 -1.80181)
(xy -5.178362 -1.806246) (xy -5.189876 -1.793159) (xy -5.213069 -1.757785) (xy -5.244719 -1.705806)
(xy -5.281607 -1.642905) (xy -5.320512 -1.574766) (xy -5.358215 -1.50707) (xy -5.391495 -1.445502)
(xy -5.417131 -1.395742) (xy -5.431904 -1.363475) (xy -5.434199 -1.354773) (xy -7.288713 -1.354773)
(xy -7.288656 -1.576176) (xy -7.28853 -1.829676) (xy -7.288333 -2.057246) (xy -7.288048 -2.260328)
(xy -7.287658 -2.440361) (xy -7.287146 -2.598785) (xy -7.286497 -2.737041) (xy -7.286487 -2.738455)
(xy -6.718403 -2.738455) (xy -6.71632 -2.641971) (xy -6.709211 -2.572017) (xy -6.695784 -2.523654)
(xy -6.674746 -2.491944) (xy -6.649253 -2.47406) (xy -6.619688 -2.467824) (xy -6.561212 -2.463351)
(xy -6.476559 -2.460748) (xy -6.368465 -2.460125) (xy -6.308983 -2.460562) (xy -6.002557 -2.463943)
(xy -5.964348 -2.508401) (xy -5.947373 -2.530542) (xy -5.936323 -2.554353) (xy -5.929941 -2.58697)
(xy -5.92697 -2.635531) (xy -5.926154 -2.707173) (xy -5.926139 -2.72539) (xy -5.926248 -2.741384)
(xy -2.852152 -2.741384) (xy -2.850328 -2.643197) (xy -2.844089 -2.57192) (xy -2.832282 -2.522939)
(xy -2.813758 -2.49164) (xy -2.787365 -2.473412) (xy -2.78504 -2.472445) (xy -2.758036 -2.467741)
(xy -2.705186 -2.463566) (xy -2.632334 -2.460197) (xy -2.545325 -2.457914) (xy -2.461737 -2.457025)
(xy -2.358332 -2.456939) (xy -2.281743 -2.457801) (xy -2.227095 -2.46005) (xy -2.189517 -2.464124)
(xy -2.164138 -2.470463) (xy -2.146085 -2.479505) (xy -2.136908 -2.486275) (xy -2.121283 -2.500851)
(xy -2.110504 -2.51878) (xy -2.103455 -2.546065) (xy -2.099019 -2.588708) (xy -2.096079 -2.65271)
(xy -2.094259 -2.715472) (xy -2.092328 -2.798117) (xy -2.092313 -2.815118) (xy 1.016004 -2.815118)
(xy 1.016254 -2.716803) (xy 1.016665 -2.701463) (xy 1.01907 -2.621878) (xy 1.023691 -2.561649) (xy 1.034474 -2.518086)
(xy 1.055361 -2.488502) (xy 1.090297 -2.470205) (xy 1.143227 -2.460508) (xy 1.218095 -2.456721) (xy 1.318844 -2.456155)
(xy 1.376334 -2.456237) (xy 1.469731 -2.456844) (xy 1.554149 -2.458393) (xy 1.623628 -2.460697) (xy 1.672203 -2.463566)
(xy 1.692119 -2.466173) (xy 1.725411 -2.483238) (xy 1.749128 -2.516422) (xy 1.76445 -2.569625) (xy 1.772561 -2.646751)
(xy 1.774672 -2.738693) (xy 1.774623 -2.817847) (xy 1.771926 -2.87802) (xy 1.762755 -2.921959) (xy 1.743285 -2.952411)
(xy 1.709689 -2.972123) (xy 1.658142 -2.983842) (xy 1.584819 -2.990315) (xy 1.485894 -2.994289) (xy 1.415595 -2.996521)
(xy 1.300563 -2.999321) (xy 1.206299 -2.999682) (xy 1.135932 -2.997659) (xy 1.092592 -2.993311) (xy 1.082512 -2.990509)
(xy 1.053715 -2.970368) (xy 1.033713 -2.937414) (xy 1.021483 -2.88716) (xy 1.016004 -2.815118) (xy -2.092313 -2.815118)
(xy -2.092277 -2.855324) (xy -2.095017 -2.893328) (xy -2.10146 -2.918366) (xy -2.112515 -2.936675)
(xy -2.129096 -2.954492) (xy -2.129191 -2.954587) (xy -2.145736 -2.969934) (xy -2.163352 -2.980864)
(xy -2.187524 -2.988225) (xy -2.223737 -2.992864) (xy -2.277473 -2.995629) (xy -2.354218 -2.997367)
(xy -2.411725 -2.998243) (xy -2.52783 -2.999894) (xy -2.616461 -3.000787) (xy -2.681834 -3.000486)
(xy -2.728164 -2.998557) (xy -2.759668 -2.994567) (xy -2.78056 -2.98808) (xy -2.795057 -2.978662)
(xy -2.807373 -2.965879) (xy -2.81526 -2.956656) (xy -2.831694 -2.934927) (xy -2.842383 -2.910842)
(xy -2.848545 -2.877307) (xy -2.851394 -2.827231) (xy -2.852145 -2.753522) (xy -2.852152 -2.741384)
(xy -5.926248 -2.741384) (xy -5.926667 -2.802648) (xy -5.92909 -2.855359) (xy -5.934666 -2.890659)
(xy -5.944653 -2.915685) (xy -5.960307 -2.937575) (xy -5.964377 -2.942377) (xy -6.002616 -2.986832)
(xy -6.30109 -2.996639) (xy -6.397268 -2.999082) (xy -6.484282 -2.99995) (xy -6.556481 -2.999292)
(xy -6.608213 -2.997158) (xy -6.633616 -2.99368) (xy -6.66858 -2.974935) (xy -6.692807 -2.945891)
(xy -6.70803 -2.901332) (xy -6.715982 -2.836042) (xy -6.718397 -2.744806) (xy -6.718403 -2.738455)
(xy -7.286487 -2.738455) (xy -7.285692 -2.856569) (xy -7.284715 -2.958809) (xy -7.283549 -3.045202)
(xy -7.282179 -3.117188) (xy -7.280586 -3.176207) (xy -7.278754 -3.223699) (xy -7.276666 -3.261106)
(xy -7.274306 -3.289866) (xy -7.271657 -3.311421) (xy -7.268702 -3.32721) (xy -7.265424 -3.338675)
(xy -7.261806 -3.347255) (xy -7.257832 -3.35439) (xy -7.257229 -3.355385) (xy -7.220742 -3.400183)
(xy -7.175849 -3.437429) (xy -7.1741 -3.438514) (xy -7.168725 -3.441602) (xy -7.162357 -3.444481)
(xy -7.153911 -3.447158) (xy -7.142305 -3.449641) (xy -7.126454 -3.451938) (xy -7.105275 -3.454055)
(xy -7.077685 -3.456) (xy -7.042598 -3.45778) (xy -6.998933 -3.459402) (xy -6.945605 -3.460874) (xy -6.88153 -3.462203)
(xy -6.805626 -3.463396) (xy -6.716807 -3.464461) (xy -6.613991 -3.465405) (xy -6.496094 -3.466235)
(xy -6.362033 -3.466958) (xy -6.210722 -3.467583) (xy -6.04108 -3.468115) (xy -5.852022 -3.468563)
(xy -5.642465 -3.468934) (xy -5.411324 -3.469235) (xy -5.157517 -3.469473) (xy -4.879959 -3.469656)
(xy -4.577567 -3.469791) (xy -4.249257 -3.469885) (xy -3.893946 -3.469946) (xy -3.51055 -3.46998)
(xy -3.097985 -3.469996) (xy -2.655168 -3.47) (xy -2.503556 -3.47)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "b464dfb2-d2e3-4a3d-935a-0c4c08170cc6")
)
(embedded_fonts no)
)

View file

@ -1,350 +0,0 @@
(footprint "apple-bicycle-05mm-silkscreen"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(property "Reference" "G***"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "5f9edfeb-afa6-44a5-9971-ad68e214f6b6")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Value" "LOGO"
(at 0.75 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "be1a0545-967a-4e33-8779-26521f4dbdec")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "d6beda4c-1e42-4f1d-b05d-99c01cc85411")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "35d203d7-65f9-41ce-9d7e-c62437ae5955")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr board_only exclude_from_pos_files exclude_from_bom)
(duplicate_pad_numbers_are_jumpers no)
(fp_poly
(pts
(xy -1.551965 -2.479045) (xy -1.442298 -2.478781) (xy -1.381831 -2.478568) (xy -0.82099 -2.4764)
(xy -0.766499 -2.459237) (xy -0.702631 -2.434644) (xy -0.650687 -2.404695) (xy -0.61 -2.36894) (xy -0.586734 -2.338462)
(xy -0.571351 -2.305815) (xy -0.566979 -2.27513) (xy -0.573643 -2.248524) (xy -0.585478 -2.232905)
(xy -0.603357 -2.216335) (xy -0.83718 -2.216295) (xy -0.907675 -2.216156) (xy -0.966339 -2.215678)
(xy -1.014854 -2.214732) (xy -1.054903 -2.213188) (xy -1.088167 -2.210917) (xy -1.116329 -2.20779)
(xy -1.14107 -2.203676) (xy -1.164073 -2.198448) (xy -1.18702 -2.191975) (xy -1.198053 -2.188533)
(xy -1.223677 -2.179377) (xy -1.237393 -2.171822) (xy -1.240594 -2.165075) (xy -1.240379 -2.164386)
(xy -1.237686 -2.156187) (xy -1.231391 -2.136392) (xy -1.221902 -2.106309) (xy -1.20963 -2.067245)
(xy -1.194986 -2.020509) (xy -1.17838 -1.967408) (xy -1.160222 -1.909251) (xy -1.141579 -1.849452)
(xy -1.1211 -1.783741) (xy -1.100781 -1.71858) (xy -1.081197 -1.655811) (xy -1.062921 -1.597275)
(xy -1.04653 -1.544812) (xy -1.032598 -1.500265) (xy -1.0217 -1.465473) (xy -1.016123 -1.447713)
(xy -0.985827 -1.351424) (xy 0.375504 -1.351424) (xy 1.736836 -1.351424) (xy 1.732916 -1.367043)
(xy 1.730216 -1.376861) (xy 1.724199 -1.398154) (xy 1.715298 -1.429413) (xy 1.703943 -1.469128) (xy 1.690567 -1.51579)
(xy 1.675601 -1.567889) (xy 1.659477 -1.623918) (xy 1.656101 -1.635638) (xy 1.583206 -1.888614) (xy 1.495009 -1.890495)
(xy 1.406813 -1.892376) (xy 1.402936 -1.937795) (xy 1.400993 -1.963366) (xy 1.398721 -1.997592) (xy 1.396428 -2.035627)
(xy 1.394754 -2.066183) (xy 1.390449 -2.149153) (xy 1.930087 -2.147269) (xy 2.469725 -2.145385) (xy 2.516143 -2.126802)
(xy 2.588695 -2.09091) (xy 2.655752 -2.044242) (xy 2.715918 -1.988429) (xy 2.767799 -1.9251) (xy 2.809999 -1.855887)
(xy 2.841123 -1.782421) (xy 2.855381 -1.730249) (xy 2.862032 -1.684465) (xy 2.864846 -1.631602) (xy 2.863903 -1.576756)
(xy 2.859282 -1.525021) (xy 2.851558 -1.483402) (xy 2.826133 -1.40872) (xy 2.789833 -1.338315) (xy 2.744074 -1.273724)
(xy 2.690267 -1.216486) (xy 2.629828 -1.168137) (xy 2.564169 -1.130216) (xy 2.505894 -1.107507) (xy 2.479578 -1.100205)
(xy 2.460571 -1.097441) (xy 2.44361 -1.098795) (xy 2.431566 -1.101586) (xy 2.393085 -1.1179) (xy 2.363178 -1.142788)
(xy 2.342708 -1.174082) (xy 2.332536 -1.209614) (xy 2.333525 -1.247217) (xy 2.346538 -1.284723) (xy 2.353816 -1.297009)
(xy 2.365369 -1.311754) (xy 2.380357 -1.324643) (xy 2.401807 -1.337826) (xy 2.432748 -1.353451) (xy 2.434601 -1.354336)
(xy 2.492595 -1.388297) (xy 2.53938 -1.429253) (xy 2.574623 -1.476623) (xy 2.597991 -1.529823) (xy 2.609153 -1.588268)
(xy 2.607777 -1.651377) (xy 2.607038 -1.657183) (xy 2.593091 -1.711526) (xy 2.567474 -1.761351) (xy 2.53169 -1.805153)
(xy 2.487244 -1.841426) (xy 2.435638 -1.868666) (xy 2.379271 -1.8852) (xy 2.363993 -1.886792) (xy 2.33698 -1.888248)
(xy 2.300011 -1.889525) (xy 2.254866 -1.89058) (xy 2.203323 -1.891371) (xy 2.147163 -1.891855) (xy 2.096625 -1.891993)
(xy 1.850376 -1.891993) (xy 1.854637 -1.873411) (xy 1.857095 -1.864283) (xy 1.863007 -1.843122) (xy 1.872102 -1.810881)
(xy 1.884106 -1.768518) (xy 1.898747 -1.716989) (xy 1.915754 -1.657248) (xy 1.934855 -1.590253) (xy 1.955777 -1.516959)
(xy 1.978248 -1.438323) (xy 2.001996 -1.355299) (xy 2.026321 -1.270338) (xy 2.055177 -1.169909) (xy 2.081942 -1.077379)
(xy 2.106451 -0.993299) (xy 2.128537 -0.918223) (xy 2.148034 -0.852704) (xy 2.164777 -0.797294) (xy 2.1786 -0.752546)
(xy 2.189335 -0.719014) (xy 2.196819 -0.69725) (xy 2.200883 -0.687806) (xy 2.201362 -0.687437) (xy 2.273706 -0.702116)
(xy 2.337783 -0.714259) (xy 2.392006 -0.723581) (xy 2.434789 -0.729793) (xy 2.43594 -0.729935) (xy 2.472978 -0.733243)
(xy 2.519949 -0.73555) (xy 2.57331 -0.736855) (xy 2.629516 -0.737158) (xy 2.685023 -0.73646) (xy 2.736289 -0.73476)
(xy 2.779768 -0.732059) (xy 2.800824 -0.729935) (xy 2.948694 -0.705076) (xy 3.091983 -0.667646) (xy 3.230175 -0.617888)
(xy 3.362755 -0.556045) (xy 3.489207 -0.482359) (xy 3.609014 -0.397073) (xy 3.721662 -0.30043) (xy 3.729332 -0.293183)
(xy 3.830054 -0.188162) (xy 3.920721 -0.07448) (xy 4.000775 0.046907) (xy 4.069656 0.175044) (xy 4.126806 0.308974)
(xy 4.171665 0.447743) (xy 4.178965 0.475408) (xy 4.196108 0.547976) (xy 4.208837 0.614925) (xy 4.217663 0.68048)
(xy 4.223095 0.748868) (xy 4.225644 0.824317) (xy 4.225995 0.86491) (xy 4.225429 0.93443) (xy 4.22316 0.994615)
(xy 4.218808 1.04958) (xy 4.211991 1.103438) (xy 4.202328 1.160304) (xy 4.195376 1.195766) (xy 4.160224 1.335099)
(xy 4.112648 1.470037) (xy 4.053239 1.599822) (xy 3.982589 1.723694) (xy 3.901289 1.840894) (xy 3.809931 1.950663)
(xy 3.709106 2.052242) (xy 3.599406 2.144871) (xy 3.481422 2.227792) (xy 3.355747 2.300245) (xy 3.321122 2.317647)
(xy 3.203756 2.36957) (xy 3.084881 2.411233) (xy 2.960944 2.443751) (xy 2.854881 2.464075) (xy 2.810883 2.469535)
(xy 2.756757 2.473524) (xy 2.69569 2.476042) (xy 2.630865 2.477088) (xy 2.56547 2.47666) (xy 2.50269 2.474759)
(xy 2.445709 2.471383) (xy 2.397713 2.466531) (xy 2.381883 2.4642) (xy 2.231865 2.432992) (xy 2.088486 2.390067)
(xy 1.951843 2.335475) (xy 1.822037 2.269265) (xy 1.699164 2.191488) (xy 1.583326 2.102193) (xy 1.486775 2.01362)
(xy 1.385438 1.903759) (xy 1.295637 1.786909) (xy 1.217512 1.663352) (xy 1.151207 1.53337) (xy 1.096866 1.397245)
(xy 1.054629 1.255259) (xy 1.024641 1.107693) (xy 1.023137 1.098031) (xy 1.017196 1.047086) (xy 1.013092 0.986386)
(xy 1.010828 0.919566) (xy 1.01055 0.87309) (xy 1.263636 0.87309) (xy 1.270393 1.005475) (xy 1.290169 1.135844)
(xy 1.322511 1.263253) (xy 1.366967 1.386757) (xy 1.423084 1.505411) (xy 1.490409 1.618272) (xy 1.56849 1.724393)
(xy 1.656873 1.822832) (xy 1.755106 1.912643) (xy 1.766207 1.921723) (xy 1.874983 2.001369) (xy 1.989895 2.069161)
(xy 2.111439 2.125345) (xy 2.240112 2.170169) (xy 2.29841 2.186177) (xy 2.379918 2.203005) (xy 2.469789 2.214852)
(xy 2.563735 2.221483) (xy 2.657466 2.222663) (xy 2.746692 2.218156) (xy 2.79161 2.213259) (xy 2.924232 2.18896)
(xy 3.052276 2.152287) (xy 3.175031 2.103795) (xy 3.291784 2.044036) (xy 3.401823 1.973564) (xy 3.504435 1.892931)
(xy 3.598908 1.80269) (xy 3.68453 1.703395) (xy 3.760588 1.595599) (xy 3.826369 1.479854) (xy 3.875106 1.372073)
(xy 3.918608 1.246096) (xy 3.949085 1.118464) (xy 3.966797 0.990007) (xy 3.972003 0.861559) (xy 3.964962 0.733949)
(xy 3.945933 0.608009) (xy 3.915174 0.484571) (xy 3.872946 0.364466) (xy 3.819507 0.248525) (xy 3.755117 0.13758)
(xy 3.680033 0.032463) (xy 3.594516 -0.065996) (xy 3.498825 -0.156965) (xy 3.393218 -0.239612) (xy 3.367279 -0.257542)
(xy 3.258642 -0.322901) (xy 3.142666 -0.377792) (xy 3.021093 -0.421755) (xy 2.895663 -0.454331) (xy 2.768116 -0.475061)
(xy 2.640194 -0.483486) (xy 2.52404 -0.480003) (xy 2.49193 -0.476924) (xy 2.454985 -0.472454) (xy 2.415657 -0.466998)
(xy 2.376398 -0.460959) (xy 2.339661 -0.454741) (xy 2.307899 -0.448748) (xy 2.283563 -0.443386) (xy 2.269107 -0.439056)
(xy 2.266501 -0.437576) (xy 2.267524 -0.430475) (xy 2.272041 -0.411786) (xy 2.279656 -0.382863) (xy 2.289975 -0.345059)
(xy 2.302606 -0.299729) (xy 2.317153 -0.248227) (xy 2.333222 -0.191908) (xy 2.35042 -0.132127) (xy 2.368351 -0.070236)
(xy 2.386623 -0.007591) (xy 2.404841 0.054454) (xy 2.422611 0.114544) (xy 2.439538 0.171326) (xy 2.455229 0.223446)
(xy 2.46929 0.269548) (xy 2.481326 0.308278) (xy 2.490943 0.338283) (xy 2.497747 0.358208) (xy 2.49919 0.362039)
(xy 2.547855 0.474119) (xy 2.601919 0.576188) (xy 2.660897 0.667509) (xy 2.724305 0.747346) (xy 2.79166 0.814963)
(xy 2.803775 0.825449) (xy 2.840511 0.856512) (xy 2.769989 0.96114) (xy 2.699467 1.065767) (xy 2.672029 1.04698)
(xy 2.62696 1.011877) (xy 2.578645 0.966639) (xy 2.529163 0.913553) (xy 2.480591 0.854906) (xy 2.435008 0.792985)
(xy 2.417502 0.766932) (xy 2.394919 0.729907) (xy 2.369082 0.683564) (xy 2.341634 0.63118) (xy 2.314217 0.576035)
(xy 2.288474 0.521406) (xy 2.266049 0.470571) (xy 2.253286 0.439212) (xy 2.246667 0.420409) (xy 2.23685 0.390063)
(xy 2.224278 0.349646) (xy 2.209391 0.300629) (xy 2.192631 0.244486) (xy 2.174439 0.182687) (xy 2.155257 0.116706)
(xy 2.135525 0.048013) (xy 2.126665 0.016892) (xy 2.107628 -0.050086) (xy 2.08968 -0.113076) (xy 2.073163 -0.170896)
(xy 2.058416 -0.222361) (xy 2.04578 -0.266287) (xy 2.035594 -0.301491) (xy 2.0282 -0.326789) (xy 2.023937 -0.340998)
(xy 2.023017 -0.343718) (xy 2.016648 -0.341811) (xy 2.001269 -0.334614) (xy 1.97965 -0.323462) (xy 1.968342 -0.317356)
(xy 1.854719 -0.247619) (xy 1.749521 -0.167777) (xy 1.653245 -0.078665) (xy 1.566384 0.018879) (xy 1.489436 0.124017)
(xy 1.422895 0.235913) (xy 1.367257 0.353731) (xy 1.323017 0.476632) (xy 1.290671 0.603779) (xy 1.270715 0.734337)
(xy 1.263643 0.867467) (xy 1.263636 0.87309) (xy 1.01055 0.87309) (xy 1.010413 0.850263) (xy 1.011851 0.782111)
(xy 1.015148 0.718746) (xy 1.020311 0.663802) (xy 1.022403 0.648288) (xy 1.048276 0.510902) (xy 1.084697 0.37983)
(xy 1.132677 0.251813) (xy 1.172076 0.165549) (xy 1.243079 0.0354) (xy 1.324662 -0.086415) (xy 1.416558 -0.199623)
(xy 1.518497 -0.303949) (xy 1.630213 -0.39912) (xy 1.751437 -0.484863) (xy 1.881902 -0.560902) (xy 1.883603 -0.561797)
(xy 1.915443 -0.579301) (xy 1.935839 -0.592488) (xy 1.945866 -0.602125) (xy 1.947264 -0.607325) (xy 1.944428 -0.618927)
(xy 1.938623 -0.640729) (xy 1.930537 -0.670298) (xy 1.920855 -0.705201) (xy 1.910264 -0.743006) (xy 1.89945 -0.781278)
(xy 1.889099 -0.817584) (xy 1.879898 -0.849492) (xy 1.872532 -0.874569) (xy 1.867688 -0.89038) (xy 1.86635 -0.894237)
(xy 1.863872 -0.893812) (xy 1.857493 -0.889432) (xy 1.84696 -0.880851) (xy 1.83202 -0.867824) (xy 1.81242 -0.850107)
(xy 1.787907 -0.827455) (xy 1.758228 -0.799621) (xy 1.723132 -0.766362) (xy 1.682364 -0.727432) (xy 1.635672 -0.682587)
(xy 1.582803 -0.631581) (xy 1.523504 -0.574168) (xy 1.457523 -0.510106) (xy 1.384607 -0.439147) (xy 1.304502 -0.361047)
(xy 1.216956 -0.275562) (xy 1.121716 -0.182445) (xy 1.018529 -0.081453) (xy 0.907142 0.027661) (xy 0.787304 0.14514)
(xy 0.658759 0.27123) (xy 0.521257 0.406177) (xy 0.374543 0.550224) (xy 0.281068 0.642028) (xy 0.24793 0.674576)
(xy 0.26873 0.737647) (xy 0.292122 0.829094) (xy 0.302573 0.920667) (xy 0.300542 1.011251) (xy 0.286488 1.099733)
(xy 0.26087 1.184999) (xy 0.224147 1.265934) (xy 0.176779 1.341424) (xy 0.119224 1.410355) (xy 0.051942 1.471613)
(xy -0.024609 1.524083) (xy -0.064193 1.54566) (xy -0.138405 1.576583) (xy -0.219271 1.598874) (xy -0.302332 1.61159)
(xy -0.383126 1.613787) (xy -0.385508 1.613679) (xy -0.446168 1.610779) (xy -0.459039 1.655097) (xy -0.467876 1.685884)
(xy -0.477866 1.721219) (xy -0.485447 1.748403) (xy -0.498986 1.797392) (xy -0.418421 1.797392) (xy -0.337856 1.797392)
(xy -0.337856 1.885235) (xy -0.337856 1.973077) (xy -0.594627 1.973077) (xy -0.851397 1.973077) (xy -0.851397 1.885235)
(xy -0.851397 1.797392) (xy -0.764491 1.797392) (xy -0.677585 1.797392) (xy -0.649162 1.695367) (xy -0.639593 1.66046)
(xy -0.631674 1.630494) (xy -0.625975 1.607711) (xy -0.623063 1.594351) (xy -0.622887 1.591793) (xy -0.629841 1.59055)
(xy -0.648661 1.587706) (xy -0.677819 1.583478) (xy -0.715788 1.578084) (xy -0.761042 1.57174) (xy -0.812054 1.564664)
(xy -0.861533 1.557861) (xy -0.917441 1.550194) (xy -0.96986 1.542982) (xy -1.017093 1.536462) (xy -1.057443 1.530867)
(xy -1.089213 1.526434) (xy -1.110707 1.523397) (xy -1.119556 1.522101) (xy -1.130904 1.520996) (xy -1.138985 1.523636)
(xy -1.14625 1.532457) (xy -1.155151 1.549897) (xy -1.161546 1.563859) (xy -1.181686 1.604506) (xy -1.208177 1.652388)
(xy -1.238976 1.704148) (xy -1.272041 1.756428) (xy -1.305327 1.805872) (xy -1.328361 1.837935) (xy -1.360233 1.877911)
(xy -1.400131 1.923414) (xy -1.445511 1.971893) (xy -1.493827 2.020795) (xy -1.542533 2.06757) (xy -1.589084 2.109665)
(xy -1.630934 2.144529) (xy -1.644912 2.15523) (xy -1.770195 2.240127) (xy -1.900471 2.312521) (xy -2.035543 2.372329)
(xy -2.175217 2.419468) (xy -2.319295 2.453854) (xy -2.371748 2.463024) (xy -2.415333 2.468366) (xy -2.468992 2.472506)
(xy -2.529331 2.47539) (xy -2.592959 2.47697) (xy -2.656484 2.477192) (xy -2.716514 2.476006) (xy -2.769656 2.47336)
(xy -2.809219 2.469635) (xy -2.953542 2.444591) (xy -3.094656 2.406665) (xy -3.231651 2.356296) (xy -3.363613 2.293921)
(xy -3.48963 2.219975) (xy -3.60879 2.134897) (xy -3.720179 2.039123) (xy -3.732485 2.02741) (xy -3.8331 1.921343)
(xy -3.923057 1.807151) (xy -4.002078 1.685359) (xy -4.069887 1.556492) (xy -4.12621 1.421074) (xy -4.170768 1.279631)
(xy -4.203287 1.132688) (xy -4.203441 1.131816) (xy -4.210565 1.081124) (xy -4.216149 1.020754) (xy -4.220071 0.95447)
(xy -4.22221 0.886036) (xy -4.222385 0.836225) (xy -3.96565 0.836225) (xy -3.964796 0.898095) (xy -3.964438 0.91221)
(xy -3.962708 0.965694) (xy -3.960509 1.008971) (xy -3.957522 1.045344) (xy -3.953429 1.07812) (xy -3.947913 1.110604)
(xy -3.94298 1.135195) (xy -3.908255 1.269324) (xy -3.861851 1.396656) (xy -3.803745 1.517233) (xy -3.733915 1.631097)
(xy -3.652339 1.73829) (xy -3.567032 1.830914) (xy -3.466461 1.921634) (xy -3.358533 2.001094) (xy -3.243654 2.069095)
(xy -3.122232 2.125438) (xy -2.994674 2.169924) (xy -2.861386 2.202354) (xy -2.779901 2.215796) (xy -2.7442 2.219059)
(xy -2.698252 2.220832) (xy -2.645231 2.22121) (xy -2.588311 2.220289) (xy -2.530665 2.218164) (xy -2.475468 2.21493)
(xy -2.425894 2.210685) (xy -2.385116 2.205522) (xy -2.373734 2.203558) (xy -2.240804 2.171714) (xy -2.113263 2.127664)
(xy -1.991744 2.071853) (xy -1.87688 2.004727) (xy -1.769305 1.926729) (xy -1.669652 1.838304) (xy -1.578556 1.739897)
(xy -1.496649 1.631953) (xy -1.445945 1.55235) (xy -1.430546 1.525492) (xy -1.418709 1.503253) (xy -1.41159 1.48793)
(xy -1.410347 1.481818) (xy -1.41037 1.48181) (xy -1.417675 1.480682) (xy -1.437432 1.477824) (xy -1.46871 1.473365)
(xy -1.510577 1.467437) (xy -1.562098 1.460172) (xy -1.622343 1.4517) (xy -1.690378 1.442153) (xy -1.765272 1.431661)
(xy -1.846091 1.420356) (xy -1.931904 1.408369) (xy -2.021777 1.39583) (xy -2.047407 1.392258) (xy -2.079472 1.387772)
(xy -1.086308 1.387772) (xy -1.086095 1.389262) (xy -1.078857 1.391067) (xy -1.060324 1.39446) (xy -1.032575 1.399094)
(xy -0.997688 1.404624) (xy -0.957744 1.410703) (xy -0.952148 1.411537) (xy -0.911783 1.417557) (xy -0.876278 1.422898)
(xy -0.847689 1.427247) (xy -0.828072 1.430289) (xy -0.819481 1.431713) (xy -0.819276 1.431765) (xy -0.822574 1.427286)
(xy -0.832836 1.414609) (xy -0.848315 1.395872) (xy -0.861248 1.380381) (xy -0.884997 1.350034) (xy -0.909619 1.315315)
(xy -0.930752 1.282454) (xy -0.935722 1.273957) (xy -0.950194 1.245773) (xy -0.965158 1.212152) (xy -0.979429 1.176318)
(xy -0.991821 1.141493) (xy -1.001149 1.110901) (xy -1.006228 1.087764) (xy -1.006811 1.080659) (xy -1.009425 1.071366)
(xy -1.013568 1.071002) (xy -1.018701 1.080269) (xy -1.020325 1.092513) (xy -1.021939 1.10988) (xy -1.026347 1.137273)
(xy -1.032897 1.171652) (xy -1.04094 1.209973) (xy -1.049822 1.249195) (xy -1.058895 1.286278) (xy -1.067505 1.318179)
(xy -1.071409 1.331157) (xy -1.078994 1.356424) (xy -1.084223 1.376337) (xy -1.086308 1.387772) (xy -2.079472 1.387772)
(xy -2.13927 1.379406) (xy -2.228043 1.366895) (xy -2.312719 1.35487) (xy -2.392286 1.34348) (xy -2.465735 1.332873)
(xy -2.532057 1.323195) (xy -2.590242 1.314594) (xy -2.63928 1.307218) (xy -2.678162 1.301214) (xy -2.705878 1.296729)
(xy -2.721419 1.293912) (xy -2.722981 1.293561) (xy -2.791867 1.270194) (xy -2.854333 1.235926) (xy -2.883156 1.21309)
(xy -2.337875 1.21309) (xy -2.337225 1.216718) (xy -2.329117 1.217722) (xy -2.308732 1.220482) (xy -2.277173 1.224842)
(xy -2.23554 1.23065) (xy -2.184935 1.237748) (xy -2.126461 1.245984) (xy -2.061218 1.255201) (xy -1.990309 1.265245)
(xy -1.914835 1.275962) (xy -1.861586 1.283538) (xy -1.783165 1.294665) (xy -1.708197 1.305229) (xy -1.637828 1.315072)
(xy -1.573208 1.324037) (xy -1.515484 1.331968) (xy -1.465805 1.338706) (xy -1.425318 1.344095) (xy -1.395171 1.347978)
(xy -1.376513 1.350197) (xy -1.371112 1.350672) (xy -1.346879 1.351423) (xy -1.32243 1.272027) (xy -1.295532 1.174241)
(xy -1.276845 1.081439) (xy -1.27343 1.059177) (xy -1.268804 1.027081) (xy -1.311803 1.026928) (xy -1.326247 1.02674)
(xy -1.352876 1.026252) (xy -1.390368 1.025493) (xy -1.437396 1.024492) (xy -1.492637 1.023279) (xy -1.554767 1.021881)
(xy -1.622461 1.020329) (xy -1.694396 1.018652) (xy -1.766986 1.016932) (xy -1.840607 1.015175) (xy -1.910363 1.013515)
(xy -1.975058 1.011979) (xy -2.033492 1.010595) (xy -2.084467 1.009391) (xy -2.126785 1.008397) (xy -2.159248 1.00764)
(xy -2.180656 1.007148) (xy -2.189812 1.006951) (xy -2.189926 1.006949) (xy -2.199435 1.013231) (xy -2.207873 1.030929)
(xy -2.208692 1.033547) (xy -2.21922 1.058379) (xy -2.236732 1.089097) (xy -2.258686 1.122007) (xy -2.282539 1.153409)
(xy -2.305748 1.179608) (xy -2.315519 1.188902) (xy -2.330168 1.203045) (xy -2.337875 1.21309) (xy -2.883156 1.21309)
(xy -2.909604 1.192136) (xy -2.956905 1.1402) (xy -2.995459 1.081498) (xy -3.024492 1.017406) (xy -3.043228 0.949304)
(xy -3.050188 0.88506) (xy -2.918397 0.88506) (xy -2.910627 0.941027) (xy -2.892005 0.995482) (xy -2.862167 1.04687)
(xy -2.820751 1.093636) (xy -2.819391 1.094892) (xy -2.769816 1.131928) (xy -2.714744 1.158025) (xy -2.656366 1.172612)
(xy -2.596875 1.175119) (xy -2.544055 1.166539) (xy -2.484727 1.144092) (xy -2.431035 1.110667) (xy -2.401862 1.085105)
(xy -2.382946 1.06455) (xy -2.366089 1.043351) (xy -2.353155 1.024224) (xy -2.346003 1.009884) (xy -2.345911 1.003437)
(xy -2.35293 1.002761) (xy -2.37193 1.001778) (xy -2.401384 1.000545) (xy -2.439762 0.999117) (xy -2.485537 0.997553)
(xy -2.537181 0.995909) (xy -2.590399 0.994322) (xy -2.646226 0.992644) (xy -2.697652 0.990974) (xy -2.743148 0.98937)
(xy -2.781181 0.987891) (xy -2.810223 0.986597) (xy -2.828741 0.985548) (xy -2.835192 0.984831) (xy -2.831946 0.978982)
(xy -2.821624 0.963376) (xy -2.805062 0.939211) (xy -2.791667 0.919986) (xy -0.854867 0.919986) (xy -0.8542 0.997004)
(xy -0.841729 1.072293) (xy -0.817774 1.144634) (xy -0.782657 1.212805) (xy -0.736698 1.275586) (xy -0.680216 1.331756)
(xy -0.613534 1.380094) (xy -0.599723 1.3883) (xy -0.580088 1.398564) (xy -0.569057 1.401378) (xy -0.564481 1.397659)
(xy -0.561973 1.389316) (xy -0.556194 1.369448) (xy -0.547565 1.33953) (xy -0.536511 1.301036) (xy -0.523455 1.25544)
(xy -0.50882 1.204217) (xy -0.493029 1.148841) (xy -0.490343 1.139409) (xy -0.474142 1.083077) (xy -0.458674 1.030337)
(xy -0.444412 0.982725) (xy -0.431827 0.941776) (xy -0.421394 0.909026) (xy -0.413585 0.886012) (xy -0.408874 0.87427)
(xy -0.408498 0.873628) (xy -0.389378 0.855376) (xy -0.362784 0.843546) (xy -0.334039 0.840211) (xy -0.32542 0.841246)
(xy -0.30418 0.84961) (xy -0.282712 0.864829) (xy -0.279212 0.868146) (xy -0.264222 0.885952) (xy -0.257778 0.903287)
(xy -0.256771 0.918436) (xy -0.258603 0.931132) (xy -0.263821 0.955173) (xy -0.272008 0.988934) (xy -0.282747 1.030791)
(xy -0.295619 1.07912) (xy -0.310208 1.132298) (xy -0.326095 1.1887) (xy -0.327531 1.193727) (xy -0.343263 1.24928)
(xy -0.357563 1.300829) (xy -0.370051 1.346917) (xy -0.380345 1.386087) (xy -0.388061 1.416879) (xy -0.392819 1.437838)
(xy -0.394236 1.447504) (xy -0.394133 1.447897) (xy -0.385416 1.450872) (xy -0.366356 1.451664) (xy -0.339908 1.450504)
(xy -0.309025 1.447623) (xy -0.276662 1.443253) (xy -0.245772 1.437624) (xy -0.2365 1.435553) (xy -0.1628 1.411378)
(xy -0.094287 1.375397) (xy -0.032078 1.328691) (xy 0.022711 1.27234) (xy 0.068964 1.207424) (xy 0.105566 1.135024)
(xy 0.122601 1.087895) (xy 0.133389 1.039121) (xy 0.138817 0.982883) (xy 0.138884 0.924115) (xy 0.133592 0.867754)
(xy 0.122939 0.818736) (xy 0.122593 0.817611) (xy 0.091281 0.73809) (xy 0.049495 0.666657) (xy -0.002186 0.603953)
(xy -0.063183 0.55062) (xy -0.132915 0.507301) (xy -0.174789 0.487973) (xy -0.248651 0.464763) (xy -0.324911 0.454084)
(xy -0.401878 0.455587) (xy -0.477862 0.468922) (xy -0.551173 0.493738) (xy -0.62012 0.529686) (xy -0.683014 0.576417)
(xy -0.705965 0.597918) (xy -0.730915 0.624373) (xy -0.754715 0.652205) (xy -0.774077 0.67744) (xy -0.782844 0.690771)
(xy -0.81951 0.765649) (xy -0.843411 0.842461) (xy -0.854867 0.919986) (xy -2.791667 0.919986) (xy -2.783097 0.907685)
(xy -2.756564 0.869998) (xy -2.7263 0.827347) (xy -2.693141 0.780931) (xy -2.685802 0.770698) (xy -2.668562 0.746661)
(xy -2.349885 0.746661) (xy -2.274663 0.748649) (xy -2.210642 0.750313) (xy -2.140631 0.75208) (xy -2.066099 0.753919)
(xy -1.988517 0.755795) (xy -1.909354 0.757676) (xy -1.830081 0.759527) (xy -1.752168 0.761316) (xy -1.677085 0.763009)
(xy -1.606302 0.764573) (xy -1.541288 0.765974) (xy -1.483514 0.76718) (xy -1.43445 0.768155) (xy -1.395566 0.768868)
(xy -1.368333 0.769285) (xy -1.363249 0.769342) (xy -1.32243 0.769455) (xy -1.293594 0.768797) (xy -1.275226 0.767256)
(xy -1.26581 0.764716) (xy -1.263705 0.761864) (xy -1.265331 0.737451) (xy -1.269282 0.705982) (xy -1.275047 0.669872)
(xy -1.282116 0.631535) (xy -1.289981 0.593386) (xy -1.29813 0.557838) (xy -1.306054 0.527307) (xy -1.313244 0.504206)
(xy -1.319189 0.490949) (xy -1.321362 0.488823) (xy -1.329272 0.488696) (xy -1.349262 0.489335) (xy -1.379924 0.49066)
(xy -1.41985 0.492588) (xy -1.467633 0.495038) (xy -1.521865 0.497929) (xy -1.581138 0.501179) (xy -1.644045 0.504707)
(xy -1.709177 0.508432) (xy -1.775127 0.512271) (xy -1.840488 0.516145) (xy -1.903851 0.51997) (xy -1.963809 0.523666)
(xy -2.018954 0.527151) (xy -2.067878 0.530344) (xy -2.109174 0.533163) (xy -2.141434 0.535527) (xy -2.16325 0.537355)
(xy -2.167306 0.537761) (xy -2.202742 0.541531) (xy -2.276313 0.644096) (xy -2.349885 0.746661) (xy -2.668562 0.746661)
(xy -2.652069 0.723666) (xy -2.620939 0.68021) (xy -2.593262 0.641522) (xy -2.569888 0.608792) (xy -2.551669 0.583213)
(xy -2.539454 0.565974) (xy -2.534094 0.558268) (xy -2.533919 0.557971) (xy -2.540075 0.557778) (xy -2.556502 0.559359)
(xy -2.580138 0.562278) (xy -2.607924 0.566096) (xy -2.636799 0.570375) (xy -2.6637 0.574679) (xy -2.685568 0.578569)
(xy -2.699342 0.581608) (xy -2.699468 0.581644) (xy -2.757484 0.604635) (xy -2.807192 0.637003) (xy -2.848229 0.677193)
(xy -2.880232 0.723649) (xy -2.902836 0.774816) (xy -2.915679 0.829138) (xy -2.918397 0.88506) (xy -3.050188 0.88506)
(xy -3.050891 0.878569) (xy -3.046706 0.80658) (xy -3.032616 0.743314) (xy -3.005297 0.676122) (xy -2.966532 0.613925)
(xy -2.917967 0.558354) (xy -2.861246 0.511041) (xy -2.801079 0.475431) (xy -1.051608 0.475431) (xy -1.051354 0.477193)
(xy -1.046955 0.492878) (xy -1.041365 0.519009) (xy -1.035084 0.552623) (xy -1.028612 0.590757) (xy -1.022452 0.63045)
(xy -1.017102 0.66874) (xy -1.013064 0.702663) (xy -1.012781 0.705409) (xy -1.009206 0.736103) (xy -1.005407 0.761163)
(xy -1.001844 0.777948) (xy -0.999064 0.783825) (xy -0.994021 0.778301) (xy -0.993297 0.773126) (xy -0.990246 0.758128)
(xy -0.981957 0.734268) (xy -0.969726 0.704512) (xy -0.954848 0.671827) (xy -0.938619 0.639181) (xy -0.922336 0.609541)
(xy -0.920515 0.606454) (xy -0.900892 0.576579) (xy -0.876001 0.543036) (xy -0.850223 0.511622) (xy -0.841642 0.50203)
(xy -0.794365 0.450722) (xy -0.84822 0.455025) (xy -0.878738 0.457303) (xy -0.916838 0.459912) (xy -0.956606 0.462458)
(xy -0.978439 0.463768) (xy -1.012642 0.46611) (xy -1.035075 0.46862) (xy -1.047483 0.47162) (xy -1.051608 0.475431)
(xy -2.801079 0.475431) (xy -2.798011 0.473615) (xy -2.736633 0.449658) (xy -2.716551 0.445314) (xy -2.685459 0.440712)
(xy -2.645848 0.436148) (xy -2.60021 0.431918) (xy -2.565042 0.429248) (xy -2.523788 0.426118) (xy -2.487244 0.42281)
(xy -2.457516 0.419558) (xy -2.436711 0.416597) (xy -2.426934 0.414162) (xy -2.426521 0.413818) (xy -2.421954 0.407389)
(xy -2.411964 0.393435) (xy -2.093872 0.393435) (xy -2.089073 0.396961) (xy -2.071104 0.397652) (xy -2.046572 0.3961)
(xy -2.029536 0.394769) (xy -2.000632 0.392679) (xy -1.961479 0.389941) (xy -1.913693 0.386664) (xy -1.858894 0.38296)
(xy -1.798698 0.378938) (xy -1.734726 0.374709) (xy -1.682818 0.371309) (xy -1.619086 0.3671) (xy -1.55958 0.363071)
(xy -1.505639 0.359318) (xy -1.458601 0.35594) (xy -1.419804 0.353034) (xy -1.390587 0.350699) (xy -1.372287 0.349032)
(xy -1.366245 0.348172) (xy -1.367685 0.340947) (xy -1.374712 0.324229) (xy -1.386165 0.300237) (xy -1.400885 0.271188)
(xy -1.417713 0.239301) (xy -1.435487 0.206791) (xy -1.453049 0.175878) (xy -1.469239 0.148779) (xy -1.47673 0.136929)
(xy -1.498232 0.10497) (xy -1.522471 0.070735) (xy -1.545319 0.040007) (xy -1.552813 0.030407) (xy -1.572996 0.006065)
(xy -1.596698 -0.020918) (xy -1.62213 -0.048695) (xy -1.647505 -0.075414) (xy -1.671035 -0.099227)
(xy -1.690933 -0.118285) (xy -1.70541 -0.130736) (xy -1.712463 -0.134766) (xy -1.717375 -0.129412)
(xy -1.729172 -0.114339) (xy -1.746914 -0.090848) (xy -1.769663 -0.060238) (xy -1.79648 -0.023809)
(xy -1.826426 0.017138) (xy -1.858562 0.061302) (xy -1.891949 0.107384) (xy -1.925648 0.154084) (xy -1.95872 0.200101)
(xy -1.990227 0.244134) (xy -2.019229 0.284884) (xy -2.044788 0.32105) (xy -2.065965 0.351333) (xy -2.08182 0.374431)
(xy -2.091415 0.389044) (xy -2.093872 0.393435) (xy -2.411964 0.393435) (xy -2.410175 0.390936) (xy -2.391865 0.365409)
(xy -2.367705 0.331755) (xy -2.338376 0.290922) (xy -2.304557 0.243857) (xy -2.266931 0.191508) (xy -2.226177 0.134823)
(xy -2.182977 0.074749) (xy -2.174103 0.062411) (xy -2.13058 0.001795) (xy -2.089484 -0.055641) (xy -2.051484 -0.10895)
(xy -2.017249 -0.157184) (xy -1.987447 -0.199395) (xy -1.962747 -0.234636) (xy -1.943817 -0.261959)
(xy -1.931326 -0.280417) (xy -1.925944 -0.28906) (xy -1.925779 -0.289534) (xy -1.931673 -0.296373)
(xy -1.947985 -0.30735) (xy -1.972659 -0.321401) (xy -2.00364 -0.337461) (xy -2.032059 -0.351179)
(xy -1.562582 -0.351179) (xy -1.485721 -0.275132) (xy -1.388005 -0.169885) (xy -1.300336 -0.057745)
(xy -1.223615 0.059941) (xy -1.158749 0.181829) (xy -1.121761 0.266706) (xy -1.111669 0.291789) (xy -1.103296 0.312006)
(xy -1.098004 0.324092) (xy -1.097111 0.325831) (xy -1.094186 0.328172) (xy -1.087817 0.329752) (xy -1.076587 0.330538)
(xy -1.05908 0.330495) (xy -1.033881 0.329592) (xy -0.999573 0.327795) (xy -0.954739 0.32507) (xy -0.897963 0.321384)
(xy -0.892591 0.321028) (xy -0.848953 0.318066) (xy -0.810142 0.315293) (xy -0.778082 0.312858) (xy -0.754697 0.31091)
(xy -0.741912 0.309597) (xy -0.740095 0.309226) (xy -0.741903 0.302666) (xy -0.747468 0.284084) (xy -0.756517 0.254357)
(xy -0.768781 0.214361) (xy -0.783987 0.164976) (xy -0.801865 0.107077) (xy -0.822144 0.041544) (xy -0.844552 -0.030748)
(xy -0.868818 -0.10892) (xy -0.894672 -0.192094) (xy -0.921842 -0.279395) (xy -0.935099 -0.321953)
(xy -1.131217 -0.951355) (xy -1.168907 -0.899687) (xy -1.180821 -0.883256) (xy -1.199582 -0.857254)
(xy -1.224169 -0.823102) (xy -1.253565 -0.782216) (xy -1.286748 -0.736017) (xy -1.322699 -0.685923)
(xy -1.360399 -0.633352) (xy -1.38459 -0.599599) (xy -1.562582 -0.351179) (xy -2.032059 -0.351179)
(xy -2.038873 -0.354468) (xy -2.076303 -0.371357) (xy -2.113873 -0.387065) (xy -2.115398 -0.387673)
(xy -2.241754 -0.430732) (xy -2.371531 -0.460982) (xy -2.503633 -0.478354) (xy -2.636964 -0.482776)
(xy -2.770428 -0.474177) (xy -2.902928 -0.452486) (xy -2.949482 -0.441636) (xy -3.074092 -0.40339)
(xy -3.194556 -0.352752) (xy -3.309839 -0.290479) (xy -3.418912 -0.217329) (xy -3.520741 -0.134058)
(xy -3.614295 -0.041426) (xy -3.698542 0.059812) (xy -3.765334 0.157303) (xy -3.816212 0.247591)
(xy -3.861496 0.344623) (xy -3.899528 0.444305) (xy -3.928653 0.542541) (xy -3.938458 0.585408) (xy -3.949088 0.640303)
(xy -3.956823 0.689072) (xy -3.961962 0.735474) (xy -3.964805 0.783272) (xy -3.96565 0.836225) (xy -4.222385 0.836225)
(xy -4.222445 0.819212) (xy -4.220655 0.757763) (xy -4.217062 0.708693) (xy -4.196596 0.572047) (xy -4.163876 0.436204)
(xy -4.119623 0.302886) (xy -4.064558 0.173817) (xy -3.999403 0.050722) (xy -3.924879 -0.064675)
(xy -3.856119 -0.153741) (xy -3.824139 -0.190039) (xy -3.785172 -0.23138) (xy -3.742387 -0.274627)
(xy -3.698952 -0.316641) (xy -3.658036 -0.354284) (xy -3.625193 -0.382478) (xy -3.518293 -0.461693)
(xy -3.40199 -0.532857) (xy -3.278464 -0.594882) (xy -3.149895 -0.64668) (xy -3.018461 -0.687166)
(xy -3.010296 -0.689272) (xy -2.917678 -0.710301) (xy -2.828314 -0.724896) (xy -2.737305 -0.733646)
(xy -2.639752 -0.737144) (xy -2.612201 -0.737265) (xy -2.463018 -0.730628) (xy -2.31779 -0.711184)
(xy -2.176778 -0.679004) (xy -2.040239 -0.634155) (xy -1.908434 -0.576707) (xy -1.805439 -0.521058)
(xy -1.770481 -0.500446) (xy -1.744702 -0.535712) (xy -1.731923 -0.553318) (xy -1.712979 -0.57959)
(xy -1.688687 -0.613386) (xy -1.659862 -0.653564) (xy -1.627319 -0.698981) (xy -1.591873 -0.748496)
(xy -1.554341 -0.800967) (xy -1.515538 -0.855251) (xy -1.476279 -0.910207) (xy -1.437381 -0.964692)
(xy -1.399657 -1.017564) (xy -1.363925 -1.067682) (xy -1.346451 -1.092212) (xy -0.903391 -1.092212)
(xy -0.901761 -1.085561) (xy -0.896363 -1.066849) (xy -0.887453 -1.036912) (xy -0.875289 -0.996591)
(xy -0.860126 -0.946723) (xy -0.842223 -0.888148) (xy -0.821836 -0.821703) (xy -0.799222 -0.748228)
(xy -0.774637 -0.668561) (xy -0.748339 -0.583541) (xy -0.720584 -0.494007) (xy -0.691629 -0.400797)
(xy -0.691122 -0.399165) (xy -0.476377 0.291406) (xy -0.357347 0.29267) (xy -0.238316 0.293934) (xy -0.211376 0.202713)
(xy -0.184436 0.111492) (xy -0.254389 0.109574) (xy -0.324342 0.107656) (xy -0.324342 0.013285) (xy -0.324342 -0.081086)
(xy -0.067572 -0.081086) (xy 0.189199 -0.081086) (xy 0.189199 0.013514) (xy 0.189199 0.108113) (xy 0.0922 0.108113)
(xy -0.0048 0.108113) (xy -0.039564 0.225627) (xy -0.050688 0.263565) (xy -0.060338 0.297114) (xy -0.067902 0.324093)
(xy -0.072765 0.342318) (xy -0.074329 0.349479) (xy -0.068714 0.355636) (xy -0.05428 0.364698) (xy -0.04137 0.371254)
(xy -0.020657 0.382734) (xy 0.005692 0.399811) (xy 0.032975 0.419382) (xy 0.041405 0.425877) (xy 0.063476 0.44278)
(xy 0.081556 0.45577) (xy 0.093076 0.463045) (xy 0.095668 0.463962) (xy 0.100897 0.459188) (xy 0.115259 0.445439)
(xy 0.138248 0.42321) (xy 0.169355 0.392999) (xy 0.208073 0.3553) (xy 0.253896 0.310611) (xy 0.306316 0.259425)
(xy 0.364825 0.20224) (xy 0.428916 0.13955) (xy 0.498082 0.071853) (xy 0.571815 -0.000357) (xy 0.649609 -0.076583)
(xy 0.730955 -0.15633) (xy 0.815347 -0.239102) (xy 0.891889 -0.314206) (xy 1.683663 -1.091275) (xy 0.391374 -1.092981)
(xy 0.260243 -1.093142) (xy 0.132745 -1.093273) (xy 0.009538 -1.093375) (xy -0.108723 -1.093448)
(xy -0.221382 -1.093493) (xy -0.327784 -1.093509) (xy -0.427272 -1.093499) (xy -0.51919 -1.093461)
(xy -0.602884 -1.093397) (xy -0.677697 -1.093306) (xy -0.742972 -1.093189) (xy -0.798056 -1.093046)
(xy -0.84229 -1.092879) (xy -0.875021 -1.092686) (xy -0.895591 -1.092469) (xy -0.903346 -1.092228)
(xy -0.903391 -1.092212) (xy -1.346451 -1.092212) (xy -1.330999 -1.113903) (xy -1.301696 -1.155086)
(xy -1.27683 -1.190088) (xy -1.257217 -1.217767) (xy -1.243674 -1.236981) (xy -1.237014 -1.246589)
(xy -1.236569 -1.247275) (xy -1.235157 -1.25143) (xy -1.23496 -1.258231) (xy -1.236243 -1.26863)
(xy -1.23927 -1.28358) (xy -1.244308 -1.304032) (xy -1.25162 -1.330938) (xy -1.261473 -1.365249)
(xy -1.274131 -1.407918) (xy -1.289859 -1.459897) (xy -1.308923 -1.522136) (xy -1.331588 -1.595588)
(xy -1.351372 -1.659459) (xy -1.37325 -1.729928) (xy -1.393968 -1.796502) (xy -1.413176 -1.858071)
(xy -1.430527 -1.913524) (xy -1.44567 -1.96175) (xy -1.458257 -2.001638) (xy -1.467939 -2.032078)
(xy -1.474368 -2.051959) (xy -1.477194 -2.060169) (xy -1.477273 -2.060316) (xy -1.484271 -2.059402)
(xy -1.500456 -2.054421) (xy -1.522499 -2.04641) (xy -1.525377 -2.045296) (xy -1.599276 -2.020681)
(xy -1.669119 -2.006636) (xy -1.738587 -2.002648) (xy -1.801115 -2.006905) (xy -1.881194 -2.021169)
(xy -1.953319 -2.043625) (xy -2.016632 -2.073779) (xy -2.070278 -2.111134) (xy -2.113399 -2.155195)
(xy -2.145138 -2.205465) (xy -2.145492 -2.206199) (xy -2.155286 -2.228431) (xy -2.161199 -2.24823)
(xy -2.164198 -2.270559) (xy -2.165247 -2.300382) (xy -2.16531 -2.307994) (xy -2.165099 -2.338263)
(xy -2.163518 -2.359024) (xy -2.159759 -2.374275) (xy -2.153017 -2.38801) (xy -2.147348 -2.396968)
(xy -2.12372 -2.422021) (xy -2.089214 -2.443782) (xy -2.046309 -2.461025) (xy -1.997483 -2.472525)
(xy -1.99335 -2.473167) (xy -1.97715 -2.474708) (xy -1.950546 -2.476013) (xy -1.913172 -2.477083)
(xy -1.864663 -2.477924) (xy -1.804653 -2.478537) (xy -1.732777 -2.478926) (xy -1.64867 -2.479094)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "d76f8ff3-0bf0-4f98-b776-87fd70f2a0de")
)
(embedded_fonts no)
)

View file

@ -1,351 +0,0 @@
(footprint "apple-bicycle-10mm-silkscreen"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(property "Reference" "G***"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "8a193dd3-b124-4a53-9aa5-e591a8ea3c82")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Value" "LOGO"
(at 0.75 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "dd6af5f9-6e77-4ce0-9c75-7159e3656f85")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "72b58864-183e-4095-b8e1-d920c0ca69de")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "e4a03b0d-4e57-4dd8-9a56-14a93ebcf376")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr board_only exclude_from_pos_files exclude_from_bom)
(duplicate_pad_numbers_are_jumpers no)
(fp_poly
(pts
(xy -3.104755 -4.959409) (xy -2.885362 -4.958882) (xy -2.764396 -4.958455) (xy -1.642416 -4.954117)
(xy -1.533404 -4.919782) (xy -1.405635 -4.870584) (xy -1.30172 -4.810669) (xy -1.220323 -4.73914)
(xy -1.173779 -4.678168) (xy -1.143006 -4.612856) (xy -1.13426 -4.55147) (xy -1.147591 -4.498244)
(xy -1.171266 -4.466998) (xy -1.207035 -4.433849) (xy -1.674805 -4.43377) (xy -1.815832 -4.433492)
(xy -1.933191 -4.432536) (xy -2.030247 -4.430643) (xy -2.110366 -4.427554) (xy -2.176912 -4.423011)
(xy -2.233251 -4.416754) (xy -2.282747 -4.408526) (xy -2.328765 -4.398066) (xy -2.374671 -4.385116)
(xy -2.396744 -4.37823) (xy -2.448005 -4.359913) (xy -2.475445 -4.3448) (xy -2.481848 -4.331303)
(xy -2.481417 -4.329923) (xy -2.476031 -4.313522) (xy -2.463436 -4.273921) (xy -2.444453 -4.213739)
(xy -2.419903 -4.13559) (xy -2.390607 -4.042093) (xy -2.357386 -3.935863) (xy -2.32106 -3.819517)
(xy -2.283764 -3.699887) (xy -2.242796 -3.56843) (xy -2.202148 -3.438075) (xy -2.162968 -3.312503)
(xy -2.126407 -3.1954) (xy -2.093616 -3.090447) (xy -2.065745 -3.001328) (xy -2.043943 -2.931726)
(xy -2.032785 -2.896196) (xy -1.972179 -2.703567) (xy 0.751209 -2.703567) (xy 3.474597 -2.703567)
(xy 3.466755 -2.734813) (xy 3.461353 -2.754455) (xy 3.449317 -2.797053) (xy 3.431509 -2.859587) (xy 3.408794 -2.939038)
(xy 3.382035 -3.032386) (xy 3.352096 -3.136613) (xy 3.319839 -3.248699) (xy 3.313084 -3.272147) (xy 3.167255 -3.778234)
(xy 2.990815 -3.781997) (xy 2.814375 -3.785759) (xy 2.806619 -3.876621) (xy 2.802732 -3.927777) (xy 2.798187 -3.996247)
(xy 2.793601 -4.072337) (xy 2.790251 -4.133467) (xy 2.781638 -4.299449) (xy 3.861202 -4.29568) (xy 4.940766 -4.291911)
(xy 5.033626 -4.254736) (xy 5.178769 -4.182933) (xy 5.312919 -4.089572) (xy 5.433283 -3.977915) (xy 5.537072 -3.851224)
(xy 5.621495 -3.712762) (xy 5.68376 -3.56579) (xy 5.712282 -3.461419) (xy 5.725587 -3.369827) (xy 5.731218 -3.264073)
(xy 5.729331 -3.154351) (xy 5.720086 -3.050853) (xy 5.704634 -2.967594) (xy 5.65377 -2.818189) (xy 5.581152 -2.677342)
(xy 5.489609 -2.548126) (xy 5.381967 -2.433619) (xy 5.261056 -2.336897) (xy 5.129704 -2.261034) (xy 5.013123 -2.215604)
(xy 4.960476 -2.200996) (xy 4.922451 -2.195466) (xy 4.888522 -2.198176) (xy 4.864427 -2.203758) (xy 4.787445 -2.236396)
(xy 4.727615 -2.286185) (xy 4.686663 -2.348789) (xy 4.666314 -2.419872) (xy 4.668294 -2.495097) (xy 4.694326 -2.57013)
(xy 4.708885 -2.594708) (xy 4.731997 -2.624205) (xy 4.761981 -2.649991) (xy 4.804893 -2.676363) (xy 4.866792 -2.707622)
(xy 4.870498 -2.709392) (xy 4.986518 -2.777332) (xy 5.080112 -2.859267) (xy 5.150616 -2.954032) (xy 5.197365 -3.060459)
(xy 5.219696 -3.177382) (xy 5.216942 -3.303632) (xy 5.215464 -3.315248) (xy 5.187563 -3.423962) (xy 5.136315 -3.523639)
(xy 5.064729 -3.611266) (xy 4.975812 -3.683832) (xy 4.872573 -3.738326) (xy 4.75981 -3.771404) (xy 4.729245 -3.774588)
(xy 4.675205 -3.777501) (xy 4.601247 -3.780055) (xy 4.510933 -3.782167) (xy 4.40782 -3.783749) (xy 4.295469 -3.784717)
(xy 4.194367 -3.784993) (xy 3.701737 -3.784993) (xy 3.710262 -3.747819) (xy 3.71518 -3.729559) (xy 3.727007 -3.687224)
(xy 3.7452 -3.622726) (xy 3.769215 -3.537978) (xy 3.798506 -3.434891) (xy 3.832529 -3.315379) (xy 3.870741 -3.181353)
(xy 3.912596 -3.034726) (xy 3.95755 -2.877411) (xy 4.005059 -2.711319) (xy 4.053722 -2.541353) (xy 4.111449 -2.340442)
(xy 4.164993 -2.155331) (xy 4.214023 -1.987126) (xy 4.258207 -1.836934) (xy 4.297212 -1.705861) (xy 4.330707 -1.595012)
(xy 4.358359 -1.505493) (xy 4.379837 -1.43841) (xy 4.394807 -1.39487) (xy 4.402939 -1.375978) (xy 4.403895 -1.375241)
(xy 4.548622 -1.404605) (xy 4.676811 -1.428899) (xy 4.785286 -1.447547) (xy 4.870875 -1.459974) (xy 4.873177 -1.460259)
(xy 4.947273 -1.466877) (xy 5.04124 -1.471491) (xy 5.14799 -1.474102) (xy 5.260432 -1.474708) (xy 5.371477 -1.473312)
(xy 5.474035 -1.469912) (xy 5.561016 -1.464508) (xy 5.60314 -1.460259) (xy 5.898958 -1.410527) (xy 6.185612 -1.335648)
(xy 6.46207 -1.236105) (xy 6.7273 -1.112386) (xy 6.980271 -0.964975) (xy 7.21995 -0.794358) (xy 7.445305 -0.60102)
(xy 7.46065 -0.586522) (xy 7.662147 -0.376424) (xy 7.843529 -0.148999) (xy 8.003679 0.093839) (xy 8.141479 0.35018)
(xy 8.255809 0.618113) (xy 8.345552 0.895724) (xy 8.360154 0.951069) (xy 8.39445 1.096244) (xy 8.419916 1.230176)
(xy 8.437571 1.361322) (xy 8.448438 1.498136) (xy 8.453538 1.649073) (xy 8.454239 1.730281) (xy 8.453108 1.869358)
(xy 8.448569 1.98976) (xy 8.439862 2.099718) (xy 8.426224 2.207463) (xy 8.406893 2.321226) (xy 8.392985 2.392167)
(xy 8.322663 2.670908) (xy 8.227486 2.940857) (xy 8.108637 3.200496) (xy 7.967299 3.448306) (xy 7.804655 3.682768)
(xy 7.62189 3.902365) (xy 7.420187 4.105576) (xy 7.200728 4.290884) (xy 6.964699 4.45677) (xy 6.713281 4.601715)
(xy 6.644013 4.636527) (xy 6.409217 4.740402) (xy 6.171404 4.823749) (xy 5.923464 4.888802) (xy 5.711282 4.929462)
(xy 5.623263 4.940384) (xy 5.514983 4.948365) (xy 5.392815 4.953402) (xy 5.263132 4.955494) (xy 5.132307 4.954639)
(xy 5.006712 4.950835) (xy 4.89272 4.944081) (xy 4.796704 4.934375) (xy 4.765034 4.929712) (xy 4.464919 4.867279)
(xy 4.178084 4.781406) (xy 3.904726 4.672193) (xy 3.645044 4.539739) (xy 3.399234 4.384143) (xy 3.167495 4.205505)
(xy 2.974341 4.028312) (xy 2.771615 3.808531) (xy 2.591964 3.574768) (xy 2.435673 3.327588) (xy 2.303028 3.067555)
(xy 2.194316 2.795233) (xy 2.109821 2.511185) (xy 2.049829 2.215976) (xy 2.046819 2.196646) (xy 2.034935 2.094728)
(xy 2.026723 1.973296) (xy 2.022196 1.839622) (xy 2.021638 1.746646) (xy 2.527945 1.746646) (xy 2.541463 2.011485)
(xy 2.581025 2.272292) (xy 2.645727 2.527178) (xy 2.734663 2.774251) (xy 2.846927 3.011624) (xy 2.981612 3.237405)
(xy 3.137815 3.449705) (xy 3.314628 3.646634) (xy 3.511146 3.826303) (xy 3.533356 3.84447) (xy 3.750965 4.003804)
(xy 3.98085 4.139423) (xy 4.224002 4.251822) (xy 4.481417 4.341493) (xy 4.598045 4.373518) (xy 4.761103 4.407182)
(xy 4.940894 4.430883) (xy 5.128836 4.444149) (xy 5.316347 4.446509) (xy 5.494847 4.437493) (xy 5.584706 4.427696)
(xy 5.85002 4.379084) (xy 6.106178 4.30572) (xy 6.351753 4.20871) (xy 6.585321 4.08916) (xy 6.805458 3.948178)
(xy 7.010737 3.786869) (xy 7.199733 3.606339) (xy 7.371022 3.407697) (xy 7.523177 3.192047) (xy 7.654775 2.960496)
(xy 7.752275 2.744876) (xy 7.839302 2.492855) (xy 7.900273 2.237523) (xy 7.935707 1.980542) (xy 7.946121 1.723576)
(xy 7.932035 1.468288) (xy 7.893966 1.216341) (xy 7.832433 0.969399) (xy 7.747954 0.729125) (xy 7.641048 0.497182)
(xy 7.512232 0.275234) (xy 7.362026 0.064943) (xy 7.190947 -0.132027) (xy 6.999513 -0.314014) (xy 6.788243 -0.479352)
(xy 6.736351 -0.515221) (xy 6.519019 -0.645974) (xy 6.287006 -0.755784) (xy 6.043795 -0.843734) (xy 5.792867 -0.908904)
(xy 5.537706 -0.950375) (xy 5.281794 -0.96723) (xy 5.049423 -0.960262) (xy 4.985188 -0.954102) (xy 4.911278 -0.94516)
(xy 4.832601 -0.934244) (xy 4.754062 -0.922162) (xy 4.680569 -0.909723) (xy 4.617027 -0.897736) (xy 4.568343 -0.887007)
(xy 4.539423 -0.878347) (xy 4.534209 -0.875384) (xy 4.536256 -0.86118) (xy 4.545291 -0.823792) (xy 4.560525 -0.765929)
(xy 4.581171 -0.690301) (xy 4.606438 -0.599617) (xy 4.63554 -0.496587) (xy 4.667687 -0.383919) (xy 4.702091 -0.264324)
(xy 4.737964 -0.14051) (xy 4.774517 -0.015187) (xy 4.810963 0.108936) (xy 4.846511 0.22915) (xy 4.880375 0.342744)
(xy 4.911766 0.44701) (xy 4.939894 0.539239) (xy 4.963973 0.616721) (xy 4.983212 0.676746) (xy 4.996825 0.716606)
(xy 4.99971 0.72427) (xy 5.097067 0.94849) (xy 5.205223 1.152683) (xy 5.323211 1.335374) (xy 5.450062 1.49509)
(xy 5.584807 1.630359) (xy 5.609043 1.651337) (xy 5.682534 1.71348) (xy 5.541453 1.922791) (xy 5.400372 2.132102)
(xy 5.345482 2.094518) (xy 5.25532 2.024292) (xy 5.158664 1.933792) (xy 5.059672 1.827592) (xy 4.962503 1.710268)
(xy 4.871313 1.586392) (xy 4.836292 1.534273) (xy 4.791113 1.460202) (xy 4.739425 1.367491) (xy 4.684514 1.262696)
(xy 4.629666 1.152377) (xy 4.578168 1.043089) (xy 4.533304 0.941393) (xy 4.507773 0.878658) (xy 4.49453 0.841042)
(xy 4.474892 0.780334) (xy 4.44974 0.699478) (xy 4.419958 0.601419) (xy 4.386429 0.489102) (xy 4.350036 0.365472)
(xy 4.311661 0.233473) (xy 4.272188 0.096051) (xy 4.254463 0.033794) (xy 4.216378 -0.100198) (xy 4.180473 -0.226213)
(xy 4.147429 -0.341883) (xy 4.117928 -0.444839) (xy 4.092649 -0.532715) (xy 4.072273 -0.603142) (xy 4.05748 -0.653752)
(xy 4.048953 -0.682177) (xy 4.047112 -0.687618) (xy 4.034371 -0.683804) (xy 4.003605 -0.669406) (xy 3.960354 -0.647097)
(xy 3.937733 -0.63488) (xy 3.710426 -0.49537) (xy 3.499975 -0.335642) (xy 3.30737 -0.157372) (xy 3.133603 0.037767)
(xy 2.979665 0.2481) (xy 2.846547 0.471953) (xy 2.735242 0.70765) (xy 2.646739 0.953517) (xy 2.58203 1.20788)
(xy 2.542107 1.469064) (xy 2.52796 1.735395) (xy 2.527945 1.746646) (xy 2.021638 1.746646) (xy 2.021364 1.700979)
(xy 2.024241 1.564639) (xy 2.030838 1.437874) (xy 2.041166 1.327957) (xy 2.045351 1.296921) (xy 2.097111 1.022075)
(xy 2.169972 0.759862) (xy 2.265957 0.50376) (xy 2.344776 0.331186) (xy 2.486821 0.070818) (xy 2.650031 -0.172877)
(xy 2.83387 -0.399352) (xy 3.037803 -0.60806) (xy 3.261294 -0.798453) (xy 3.503807 -0.969983) (xy 3.764806 -1.122103)
(xy 3.768208 -1.123892) (xy 3.831907 -1.15891) (xy 3.87271 -1.18529) (xy 3.892769 -1.204571) (xy 3.895566 -1.214974)
(xy 3.889891 -1.238183) (xy 3.878279 -1.281798) (xy 3.862102 -1.340952) (xy 3.842733 -1.410778) (xy 3.821546 -1.486406)
(xy 3.799912 -1.562971) (xy 3.779205 -1.635604) (xy 3.760797 -1.699437) (xy 3.746061 -1.749603) (xy 3.73637 -1.781234)
(xy 3.733695 -1.78895) (xy 3.728738 -1.7881) (xy 3.715976 -1.779337) (xy 3.694904 -1.762171) (xy 3.665015 -1.736111)
(xy 3.625804 -1.700667) (xy 3.576766 -1.65535) (xy 3.517393 -1.599668) (xy 3.447181 -1.533132) (xy 3.365624 -1.455252)
(xy 3.272215 -1.365537) (xy 3.166449 -1.263497) (xy 3.04782 -1.148642) (xy 2.915823 -1.020482) (xy 2.769951 -0.878527)
(xy 2.609698 -0.722286) (xy 2.43456 -0.55127) (xy 2.244029 -0.364987) (xy 2.037601 -0.162949) (xy 1.814769 0.055336)
(xy 1.575027 0.290357) (xy 1.31787 0.542605) (xy 1.042792 0.81257) (xy 0.749287 1.100742) (xy 0.562286 1.284398)
(xy 0.495993 1.349512) (xy 0.537605 1.475687) (xy 0.584401 1.658629) (xy 0.605308 1.841823) (xy 0.601245 2.023041)
(xy 0.573129 2.200052) (xy 0.52188 2.370629) (xy 0.448415 2.532542) (xy 0.353653 2.683563) (xy 0.238513 2.821461)
(xy 0.103912 2.944009) (xy -0.04923 3.048977) (xy -0.128419 3.092144) (xy -0.276882 3.154004) (xy -0.438658 3.198599)
(xy -0.604823 3.224038) (xy -0.766454 3.228434) (xy -0.771221 3.228217) (xy -0.892572 3.222415) (xy -0.91832 3.311074)
(xy -0.935999 3.372666) (xy -0.955986 3.443355) (xy -0.971152 3.497737) (xy -0.998236 3.595742) (xy -0.837064 3.595742)
(xy -0.675892 3.595742) (xy -0.675892 3.771473) (xy -0.675892 3.947205) (xy -1.189569 3.947205) (xy -1.703247 3.947205)
(xy -1.703247 3.771473) (xy -1.703247 3.595742) (xy -1.529388 3.595742) (xy -1.355529 3.595742) (xy -1.298669 3.391637)
(xy -1.279525 3.321804) (xy -1.263684 3.261856) (xy -1.252282 3.216277) (xy -1.246456 3.189551) (xy -1.246104 3.184434)
(xy -1.260017 3.181946) (xy -1.297666 3.176257) (xy -1.355997 3.167799) (xy -1.431956 3.157008) (xy -1.522488 3.144317)
(xy -1.62454 3.13016) (xy -1.723523 3.116551) (xy -1.83537 3.101212) (xy -1.940236 3.086785) (xy -2.034726 3.073741)
(xy -2.115447 3.062549) (xy -2.179005 3.05368) (xy -2.222005 3.047605) (xy -2.239708 3.045012) (xy -2.262408 3.042802)
(xy -2.278574 3.048082) (xy -2.293109 3.06573) (xy -2.310915 3.100619) (xy -2.32371 3.12855) (xy -2.364 3.209867)
(xy -2.416996 3.305656) (xy -2.478611 3.409202) (xy -2.544758 3.51379) (xy -2.611349 3.612705) (xy -2.657429 3.676848)
(xy -2.721189 3.756822) (xy -2.801006 3.847853) (xy -2.89179 3.944835) (xy -2.988448 4.042666) (xy -3.085886 4.136239)
(xy -3.179013 4.220452) (xy -3.262735 4.290199) (xy -3.290699 4.311607) (xy -3.541331 4.481446) (xy -3.801952 4.626273)
(xy -4.072169 4.745921) (xy -4.35159 4.840223) (xy -4.639824 4.909015) (xy -4.744758 4.927358) (xy -4.831952 4.938046)
(xy -4.939297 4.946327) (xy -5.060007 4.952098) (xy -5.187297 4.955258) (xy -5.314381 4.955702) (xy -5.434472 4.953329)
(xy -5.540785 4.948037) (xy -5.619932 4.940585) (xy -5.908654 4.890483) (xy -6.190959 4.814612) (xy -6.465021 4.713847)
(xy -6.729016 4.589062) (xy -6.981117 4.441132) (xy -7.219499 4.27093) (xy -7.442338 4.079332) (xy -7.466955 4.055898)
(xy -7.66824 3.843708) (xy -7.848201 3.615264) (xy -8.006285 3.371615) (xy -8.14194 3.113812) (xy -8.254614 2.842905)
(xy -8.343755 2.559944) (xy -8.408811 2.265978) (xy -8.409118 2.264235) (xy -8.423371 2.162823) (xy -8.434541 2.042051)
(xy -8.442387 1.909449) (xy -8.446666 1.772543) (xy -8.447016 1.672895) (xy -7.933409 1.672895) (xy -7.9317 1.796668)
(xy -7.930985 1.824906) (xy -7.927525 1.931903) (xy -7.923125 2.018478) (xy -7.91715 2.091245) (xy -7.908962 2.156814)
(xy -7.897926 2.221799) (xy -7.888057 2.270994) (xy -7.818589 2.539323) (xy -7.725756 2.794055) (xy -7.609513 3.035274)
(xy -7.469816 3.263063) (xy -7.30662 3.477505) (xy -7.135962 3.662802) (xy -6.934766 3.844291) (xy -6.718852 4.003254)
(xy -6.489034 4.139292) (xy -6.246125 4.252008) (xy -5.990941 4.341003) (xy -5.724294 4.405879) (xy -5.56128 4.432771)
(xy -5.489859 4.4393) (xy -5.397939 4.442847) (xy -5.291869 4.443603) (xy -5.177998 4.44176) (xy -5.062676 4.437508)
(xy -4.952253 4.43104) (xy -4.853078 4.422546) (xy -4.7715 4.412217) (xy -4.74873 4.408289) (xy -4.482801 4.344584)
(xy -4.227651 4.256461) (xy -3.984547 4.14481) (xy -3.754758 4.01052) (xy -3.53955 3.854483) (xy -3.340192 3.677586)
(xy -3.157951 3.48072) (xy -2.994094 3.264775) (xy -2.892658 3.105526) (xy -2.861853 3.051795) (xy -2.838172 3.007307)
(xy -2.82393 2.976652) (xy -2.821443 2.964424) (xy -2.821489 2.964409) (xy -2.836103 2.962153) (xy -2.875629 2.956434)
(xy -2.938202 2.947514) (xy -3.021956 2.935656) (xy -3.125027 2.921122) (xy -3.245549 2.904174) (xy -3.381656 2.885074)
(xy -3.531482 2.864085) (xy -3.693164 2.841469) (xy -3.864835 2.817488) (xy -4.04463 2.792404) (xy -4.095902 2.785256)
(xy -4.160051 2.776282) (xy -2.173194 2.776282) (xy -2.172767 2.779264) (xy -2.158288 2.782875) (xy -2.121212 2.789662)
(xy -2.065698 2.798933) (xy -1.995906 2.809995) (xy -1.915997 2.822157) (xy -1.904802 2.823825) (xy -1.824051 2.835869)
(xy -1.753022 2.846554) (xy -1.695829 2.855253) (xy -1.656583 2.86134) (xy -1.639398 2.864188) (xy -1.638988 2.864293)
(xy -1.645586 2.855332) (xy -1.666114 2.829971) (xy -1.697081 2.792487) (xy -1.722953 2.761497) (xy -1.770464 2.700787)
(xy -1.819721 2.631329) (xy -1.861999 2.565591) (xy -1.871942 2.548591) (xy -1.900893 2.492209) (xy -1.930829 2.42495)
(xy -1.959378 2.353262) (xy -1.984168 2.283593) (xy -2.00283 2.222393) (xy -2.01299 2.176107) (xy -2.014157 2.161892)
(xy -2.019386 2.143303) (xy -2.027674 2.142575) (xy -2.037944 2.161112) (xy -2.041192 2.185607) (xy -2.044421 2.220351)
(xy -2.053239 2.275152) (xy -2.066343 2.343927) (xy -2.082432 2.420589) (xy -2.100202 2.499055) (xy -2.118352 2.57324)
(xy -2.135578 2.637059) (xy -2.143388 2.663022) (xy -2.158561 2.71357) (xy -2.169023 2.753407) (xy -2.173194 2.776282)
(xy -4.160051 2.776282) (xy -4.279677 2.759547) (xy -4.457272 2.734517) (xy -4.626668 2.710461) (xy -4.785844 2.687676)
(xy -4.932782 2.666455) (xy -5.065461 2.647093) (xy -5.181862 2.629887) (xy -5.279965 2.615131) (xy -5.357749 2.60312)
(xy -5.413196 2.594149) (xy -5.444285 2.588513) (xy -5.44741 2.58781) (xy -5.585219 2.541064) (xy -5.710185 2.472511)
(xy -5.767847 2.426826) (xy -4.676994 2.426826) (xy -4.675693 2.434083) (xy -4.659473 2.436092) (xy -4.618693 2.441613)
(xy -4.555557 2.450337) (xy -4.472269 2.461954) (xy -4.371033 2.476155) (xy -4.254053 2.49263) (xy -4.123533 2.51107)
(xy -3.981677 2.531164) (xy -3.830689 2.552603) (xy -3.724162 2.567759) (xy -3.567279 2.590019) (xy -3.417302 2.611153)
(xy -3.276527 2.630844) (xy -3.147252 2.648779) (xy -3.031774 2.664644) (xy -2.932388 2.678124) (xy -2.851393 2.688905)
(xy -2.791084 2.696672) (xy -2.753758 2.701112) (xy -2.742953 2.702062) (xy -2.694475 2.703565) (xy -2.645563 2.54473)
(xy -2.591752 2.349107) (xy -2.554368 2.163454) (xy -2.547537 2.118919) (xy -2.538282 2.054709) (xy -2.624303 2.054403)
(xy -2.653199 2.054027) (xy -2.706472 2.053051) (xy -2.781474 2.051533) (xy -2.875556 2.04953) (xy -2.986068 2.047102)
(xy -3.110361 2.044307) (xy -3.245786 2.041202) (xy -3.389692 2.037846) (xy -3.534912 2.034405) (xy -3.682192 2.030891)
(xy -3.821742 2.027569) (xy -3.951166 2.024496) (xy -4.068065 2.021727) (xy -4.170043 2.01932) (xy -4.254702 2.017331)
(xy -4.319644 2.015816) (xy -4.362472 2.014833) (xy -4.380788 2.014437) (xy -4.381016 2.014434) (xy -4.400039 2.027001)
(xy -4.41692 2.062406) (xy -4.418559 2.067645) (xy -4.43962 2.11732) (xy -4.474653 2.178775) (xy -4.518572 2.244611)
(xy -4.566291 2.307433) (xy -4.612723 2.359843) (xy -4.632269 2.378436) (xy -4.661576 2.406731) (xy -4.676994 2.426826)
(xy -5.767847 2.426826) (xy -5.820756 2.384906) (xy -5.915382 2.281007) (xy -5.992512 2.163571) (xy -6.050593 2.035354)
(xy -6.088074 1.899114) (xy -6.101998 1.770592) (xy -5.838347 1.770592) (xy -5.822802 1.882554) (xy -5.785548 1.991493)
(xy -5.725857 2.094297) (xy -5.643003 2.187854) (xy -5.640282 2.190366) (xy -5.541105 2.264459) (xy -5.430931 2.316667)
(xy -5.314146 2.345848) (xy -5.195131 2.350863) (xy -5.089463 2.333699) (xy -4.970776 2.288793) (xy -4.863362 2.221924)
(xy -4.805002 2.170788) (xy -4.767158 2.129668) (xy -4.733437 2.087258) (xy -4.707561 2.048992) (xy -4.693253 2.020305)
(xy -4.693069 2.007408) (xy -4.707111 2.006057) (xy -4.745122 2.00409) (xy -4.804045 2.001622) (xy -4.880822 1.998766)
(xy -4.972397 1.995637) (xy -5.075712 1.992348) (xy -5.182175 1.989173) (xy -5.293859 1.985817) (xy -5.396739 1.982475)
(xy -5.487754 1.979266) (xy -5.563842 1.976308) (xy -5.62194 1.97372) (xy -5.658986 1.97162) (xy -5.671892 1.970186)
(xy -5.665398 1.958486) (xy -5.644748 1.927265) (xy -5.611616 1.878922) (xy -5.584819 1.840462) (xy -1.710189 1.840462)
(xy -1.708853 1.994538) (xy -1.683904 2.145158) (xy -1.635983 2.289878) (xy -1.56573 2.426256) (xy -1.473786 2.551851)
(xy -1.360794 2.66422) (xy -1.227394 2.760922) (xy -1.199763 2.77734) (xy -1.160484 2.797873) (xy -1.138416 2.803502)
(xy -1.129262 2.796062) (xy -1.124245 2.779371) (xy -1.112683 2.739625) (xy -1.095421 2.679773) (xy -1.073307 2.602764)
(xy -1.047188 2.511548) (xy -1.01791 2.409074) (xy -0.98632 2.298293) (xy -0.980946 2.279425) (xy -0.948536 2.166731)
(xy -0.917592 2.061223) (xy -0.889059 1.965972) (xy -0.863883 1.884053) (xy -0.843012 1.818536) (xy -0.82739 1.772496)
(xy -0.817964 1.749005) (xy -0.817213 1.747721) (xy -0.778962 1.711207) (xy -0.725759 1.68754) (xy -0.668255 1.680869)
(xy -0.651012 1.68294) (xy -0.608522 1.699672) (xy -0.565574 1.730118) (xy -0.558572 1.736754) (xy -0.528583 1.772376)
(xy -0.515693 1.807055) (xy -0.513678 1.83736) (xy -0.517343 1.86276) (xy -0.527782 1.910854) (xy -0.544161 1.978394)
(xy -0.565643 2.06213) (xy -0.591394 2.158815) (xy -0.620579 2.265199) (xy -0.652363 2.378034) (xy -0.655235 2.388089)
(xy -0.686707 2.499224) (xy -0.715316 2.60235) (xy -0.740299 2.694551) (xy -0.760891 2.772911) (xy -0.776328 2.834513)
(xy -0.785847 2.876441) (xy -0.788682 2.895779) (xy -0.788475 2.896564) (xy -0.771037 2.902516) (xy -0.732907 2.9041)
(xy -0.679996 2.901779) (xy -0.618213 2.896016) (xy -0.55347 2.887273) (xy -0.491674 2.876014) (xy -0.473124 2.871869)
(xy -0.325685 2.823507) (xy -0.188624 2.751526) (xy -0.064173 2.658089) (xy 0.045434 2.545357) (xy 0.137966 2.415491)
(xy 0.21119 2.270653) (xy 0.245267 2.17637) (xy 0.26685 2.078796) (xy 0.277708 1.966289) (xy 0.277844 1.848722)
(xy 0.267255 1.735971) (xy 0.245945 1.637908) (xy 0.245252 1.635656) (xy 0.182611 1.476574) (xy 0.099016 1.333669)
(xy -0.004373 1.208227) (xy -0.126398 1.101533) (xy -0.2659 1.014871) (xy -0.34967 0.976206) (xy -0.497434 0.929774)
(xy -0.649995 0.908411) (xy -0.80397 0.911417) (xy -0.955978 0.938093) (xy -1.102639 0.987739) (xy -1.24057 1.059655)
(xy -1.36639 1.15314) (xy -1.412306 1.196153) (xy -1.462219 1.249079) (xy -1.509832 1.304757) (xy -1.548565 1.35524)
(xy -1.566103 1.381909) (xy -1.639455 1.531705) (xy -1.68727 1.68537) (xy -1.710189 1.840462) (xy -5.584819 1.840462)
(xy -5.567674 1.815854) (xy -5.514594 1.740459) (xy -5.45405 1.655135) (xy -5.387715 1.562278) (xy -5.373033 1.541806)
(xy -5.338544 1.493719) (xy -4.70102 1.493719) (xy -4.550537 1.497697) (xy -4.42246 1.501024) (xy -4.2824 1.504561)
(xy -4.133296 1.508239) (xy -3.97809 1.511993) (xy -3.819723 1.515755) (xy -3.661136 1.519459) (xy -3.505268 1.523038)
(xy -3.355062 1.526425) (xy -3.213457 1.529554) (xy -3.083395 1.532357) (xy -2.967817 1.534767) (xy -2.869663 1.536719)
(xy -2.791875 1.538146) (xy -2.737392 1.53898) (xy -2.727222 1.539093) (xy -2.645563 1.539319) (xy -2.587877 1.538004)
(xy -2.55113 1.53492) (xy -2.532294 1.52984) (xy -2.528082 1.524134) (xy -2.531335 1.475294) (xy -2.539239 1.41234)
(xy -2.550772 1.340101) (xy -2.564914 1.263407) (xy -2.580647 1.187088) (xy -2.59695 1.115974) (xy -2.612803 1.054894)
(xy -2.627186 1.008679) (xy -2.63908 0.982159) (xy -2.643426 0.977906) (xy -2.65925 0.977652) (xy -2.699241 0.978931)
(xy -2.760581 0.98158) (xy -2.840455 0.985438) (xy -2.936046 0.990339) (xy -3.044539 0.996123) (xy -3.163117 1.002625)
(xy -3.288963 1.009683) (xy -3.419263 1.017134) (xy -3.551199 1.024816) (xy -3.681954 1.032564) (xy -3.808714 1.040216)
(xy -3.928662 1.04761) (xy -4.038981 1.054582) (xy -4.136856 1.06097) (xy -4.21947 1.06661) (xy -4.284006 1.07134)
(xy -4.32765 1.074997) (xy -4.335765 1.075808) (xy -4.406655 1.083351) (xy -4.553837 1.288535) (xy -4.70102 1.493719)
(xy -5.338544 1.493719) (xy -5.305549 1.447716) (xy -5.243271 1.360782) (xy -5.187902 1.283385) (xy -5.141143 1.217908)
(xy -5.104695 1.166736) (xy -5.080258 1.132249) (xy -5.069536 1.116832) (xy -5.069186 1.11624) (xy -5.081501 1.115853)
(xy -5.114363 1.119017) (xy -5.161649 1.124855) (xy -5.217236 1.132493) (xy -5.275 1.141054) (xy -5.328817 1.149664)
(xy -5.372565 1.157446) (xy -5.400119 1.163525) (xy -5.400373 1.163598) (xy -5.516435 1.209592) (xy -5.615878 1.274346)
(xy -5.697974 1.354747) (xy -5.761996 1.447684) (xy -5.807217 1.550045) (xy -5.832909 1.658718) (xy -5.838347 1.770592)
(xy -6.101998 1.770592) (xy -6.103405 1.757606) (xy -6.095034 1.613589) (xy -6.066846 1.487023) (xy -6.012192 1.352604)
(xy -5.934643 1.228177) (xy -5.837487 1.117006) (xy -5.724013 1.022353) (xy -5.603646 0.951114) (xy -2.103775 0.951114)
(xy -2.103266 0.95464) (xy -2.094466 0.986019) (xy -2.083283 1.038294) (xy -2.070718 1.105539) (xy -2.057772 1.181829)
(xy -2.045447 1.261236) (xy -2.034744 1.337836) (xy -2.026666 1.4057) (xy -2.0261 1.411194) (xy -2.018949 1.472598)
(xy -2.011348 1.522731) (xy -2.004221 1.55631) (xy -1.998659 1.568067) (xy -1.98857 1.557017) (xy -1.987121 1.546663)
(xy -1.981018 1.51666) (xy -1.964436 1.468926) (xy -1.939967 1.409399) (xy -1.910204 1.344012) (xy -1.877738 1.278702)
(xy -1.845161 1.219406) (xy -1.84152 1.213232) (xy -1.802262 1.153466) (xy -1.752468 1.086361) (xy -1.700898 1.023516)
(xy -1.683731 1.004327) (xy -1.589152 0.901683) (xy -1.696891 0.910293) (xy -1.757943 0.914848) (xy -1.834162 0.92007)
(xy -1.91372 0.925163) (xy -1.957397 0.927784) (xy -2.025821 0.932468) (xy -2.0707 0.93749) (xy -2.095522 0.943491)
(xy -2.103775 0.951114) (xy -5.603646 0.951114) (xy -5.597511 0.947483) (xy -5.474721 0.899555) (xy -5.434547 0.890865)
(xy -5.372346 0.881658) (xy -5.293103 0.872528) (xy -5.201803 0.864067) (xy -5.131448 0.858725) (xy -5.048918 0.852464)
(xy -4.975811 0.845846) (xy -4.91634 0.83934) (xy -4.874718 0.833417) (xy -4.855159 0.828544) (xy -4.854333 0.827857)
(xy -4.845196 0.814994) (xy -4.825211 0.78708) (xy -4.188857 0.78708) (xy -4.179257 0.794134) (xy -4.14331 0.795515)
(xy -4.094232 0.79241) (xy -4.060152 0.789748) (xy -4.002329 0.785567) (xy -3.924 0.780089) (xy -3.828403 0.773534)
(xy -3.718775 0.766124) (xy -3.598353 0.758078) (xy -3.470374 0.749617) (xy -3.366532 0.742815) (xy -3.239033 0.734396)
(xy -3.11999 0.726335) (xy -3.012079 0.718828) (xy -2.917977 0.71207) (xy -2.840363 0.706257) (xy -2.781913 0.701585)
(xy -2.745304 0.698249) (xy -2.733217 0.696529) (xy -2.736097 0.682075) (xy -2.750154 0.648631) (xy -2.773067 0.600634)
(xy -2.802515 0.542521) (xy -2.836179 0.478729) (xy -2.871738 0.413692) (xy -2.906871 0.35185) (xy -2.939258 0.297636)
(xy -2.954246 0.273931) (xy -2.99726 0.209996) (xy -3.045752 0.141508) (xy -3.091459 0.080035) (xy -3.106452 0.060829)
(xy -3.146828 0.012134) (xy -3.194244 -0.041847) (xy -3.245122 -0.097415) (xy -3.295885 -0.150868)
(xy -3.342958 -0.198507) (xy -3.382764 -0.236632) (xy -3.411726 -0.261542) (xy -3.425836 -0.269603)
(xy -3.435663 -0.258893) (xy -3.459263 -0.22874) (xy -3.494757 -0.181744) (xy -3.540268 -0.120507)
(xy -3.593916 -0.047631) (xy -3.653823 0.034284) (xy -3.718112 0.122637) (xy -3.784904 0.214826)
(xy -3.85232 0.30825) (xy -3.918482 0.400308) (xy -3.981512 0.488398) (xy -4.039532 0.56992) (xy -4.090664 0.642272)
(xy -4.133028 0.702852) (xy -4.164747 0.749061) (xy -4.183942 0.778296) (xy -4.188857 0.78708) (xy -4.825211 0.78708)
(xy -4.821632 0.782081) (xy -4.785003 0.731013) (xy -4.73667 0.663687) (xy -4.677995 0.581999) (xy -4.61034 0.487844)
(xy -4.535067 0.383118) (xy -4.453538 0.269717) (xy -4.367114 0.149537) (xy -4.349361 0.124855) (xy -4.262293 0.003591)
(xy -4.18008 -0.111312) (xy -4.10406 -0.217958) (xy -4.035571 -0.314452) (xy -3.975951 -0.398897)
(xy -3.926537 -0.469398) (xy -3.888668 -0.524058) (xy -3.86368 -0.560982) (xy -3.852911 -0.578275)
(xy -3.852581 -0.579222) (xy -3.864373 -0.592904) (xy -3.897005 -0.614864) (xy -3.946367 -0.642973)
(xy -4.008346 -0.675102) (xy -4.065197 -0.702544) (xy -3.125995 -0.702544) (xy -2.972231 -0.55041)
(xy -2.776749 -0.339861) (xy -2.601363 -0.115521) (xy -2.447881 0.119915) (xy -2.318114 0.363756)
(xy -2.244118 0.533554) (xy -2.223928 0.583733) (xy -2.207179 0.624178) (xy -2.196592 0.648357) (xy -2.194805 0.651835)
(xy -2.188953 0.656519) (xy -2.176211 0.65968) (xy -2.153746 0.661251) (xy -2.118724 0.661167) (xy -2.068312 0.65936)
(xy -1.999676 0.655764) (xy -1.909985 0.650312) (xy -1.796402 0.642938) (xy -1.785657 0.642227) (xy -1.698357 0.636301)
(xy -1.620714 0.630754) (xy -1.556577 0.625882) (xy -1.509795 0.621985) (xy -1.484217 0.61936) (xy -1.480582 0.618616)
(xy -1.4842 0.605494) (xy -1.495332 0.56832) (xy -1.513436 0.508849) (xy -1.53797 0.428837) (xy -1.56839 0.33004)
(xy -1.604156 0.214212) (xy -1.644724 0.08311) (xy -1.689552 -0.061512) (xy -1.738098 -0.217897)
(xy -1.789819 -0.384291) (xy -1.844174 -0.558938) (xy -1.870695 -0.644078) (xy -2.263035 -1.903216)
(xy -2.338435 -1.799852) (xy -2.362269 -1.766981) (xy -2.399801 -1.714965) (xy -2.448989 -1.646641)
(xy -2.507796 -1.564849) (xy -2.57418 -1.472426) (xy -2.646102 -1.372211) (xy -2.721522 -1.267041)
(xy -2.769915 -1.199516) (xy -3.125995 -0.702544) (xy -4.065197 -0.702544) (xy -4.078831 -0.709125)
(xy -4.15371 -0.742912) (xy -4.22887 -0.774336) (xy -4.231921 -0.775553) (xy -4.484701 -0.861693)
(xy -4.744324 -0.92221) (xy -5.008598 -0.956962) (xy -5.27533 -0.965809) (xy -5.542329 -0.948606)
(xy -5.8074 -0.905214) (xy -5.900532 -0.883506) (xy -6.14982 -0.806995) (xy -6.39081 -0.705692) (xy -6.621439 -0.581113)
(xy -6.839642 -0.434773) (xy -7.043355 -0.268188) (xy -7.230512 -0.082873) (xy -7.399051 0.119656)
(xy -7.53267 0.31469) (xy -7.634455 0.495313) (xy -7.725046 0.68943) (xy -7.801131 0.888847) (xy -7.859397 1.085372)
(xy -7.879012 1.171128) (xy -7.900277 1.280947) (xy -7.915751 1.37851) (xy -7.926032 1.47134) (xy -7.931719 1.56696)
(xy -7.933409 1.672895) (xy -8.447016 1.672895) (xy -8.447136 1.638861) (xy -8.443555 1.51593) (xy -8.436367 1.417763)
(xy -8.395425 1.144399) (xy -8.329968 0.872639) (xy -8.241438 0.605932) (xy -8.131278 0.347727) (xy -8.000934 0.101471)
(xy -7.851846 -0.129385) (xy -7.71429 -0.307564) (xy -7.650312 -0.380178) (xy -7.572358 -0.462883)
(xy -7.486765 -0.5494) (xy -7.399872 -0.633451) (xy -7.318018 -0.708757) (xy -7.252315 -0.76516)
(xy -7.038458 -0.923632) (xy -6.80579 -1.065997) (xy -6.558673 -1.19008) (xy -6.301465 -1.293705)
(xy -6.038527 -1.374698) (xy -6.022193 -1.37891) (xy -5.836908 -1.42098) (xy -5.658133 -1.450177)
(xy -5.476066 -1.467683) (xy -5.280908 -1.47468) (xy -5.225791 -1.474922) (xy -4.927346 -1.461645)
(xy -4.636814 -1.422747) (xy -4.354713 -1.358368) (xy -4.081563 -1.268647) (xy -3.817882 -1.153722)
(xy -3.611838 -1.042394) (xy -3.541904 -1.001159) (xy -3.490331 -1.071708) (xy -3.464766 -1.10693)
(xy -3.42687 -1.159489) (xy -3.378272 -1.227099) (xy -3.320606 -1.307475) (xy -3.255502 -1.398334)
(xy -3.184593 -1.497391) (xy -3.109509 -1.60236) (xy -3.031882 -1.710957) (xy -2.953343 -1.820897)
(xy -2.875525 -1.929897) (xy -2.800059 -2.03567) (xy -2.728575 -2.135933) (xy -2.693618 -2.185005)
(xy -1.807261 -2.185005) (xy -1.804001 -2.1717) (xy -1.793201 -2.134265) (xy -1.775377 -2.074376)
(xy -1.751042 -1.993712) (xy -1.72071 -1.89395) (xy -1.684894 -1.776768) (xy -1.644109 -1.643843)
(xy -1.598868 -1.496854) (xy -1.549685 -1.337478) (xy -1.497075 -1.167393) (xy -1.441551 -0.988277)
(xy -1.383626 -0.801806) (xy -1.382611 -0.798542) (xy -0.953007 0.582967) (xy -0.714882 0.585496)
(xy -0.476758 0.588025) (xy -0.422864 0.405534) (xy -0.36897 0.223043) (xy -0.508913 0.219206) (xy -0.648856 0.21537)
(xy -0.648856 0.026577) (xy -0.648856 -0.162215) (xy -0.135178 -0.162215) (xy 0.378499 -0.162215)
(xy 0.378499 0.027035) (xy 0.378499 0.216284) (xy 0.184449 0.216284) (xy -0.009601 0.216284) (xy -0.079149 0.451375)
(xy -0.101403 0.52727) (xy -0.120708 0.594387) (xy -0.135838 0.648359) (xy -0.145568 0.684818) (xy -0.148696 0.699144)
(xy -0.137464 0.711462) (xy -0.108588 0.72959) (xy -0.082761 0.742705) (xy -0.041324 0.765672) (xy 0.011389 0.799836)
(xy 0.065969 0.838988) (xy 0.082832 0.851981) (xy 0.126988 0.885796) (xy 0.163155 0.911782) (xy 0.186202 0.926336)
(xy 0.191388 0.928172) (xy 0.201848 0.91862) (xy 0.23058 0.891114) (xy 0.27657 0.846646) (xy 0.3388 0.786207)
(xy 0.416258 0.71079) (xy 0.507928 0.621386) (xy 0.612795 0.518988) (xy 0.729844 0.404587) (xy 0.858061 0.279175)
(xy 0.996429 0.143744) (xy 1.143935 -0.000713) (xy 1.299564 -0.153206) (xy 1.462301 -0.312743) (xy 1.63113 -0.47833)
(xy 1.784254 -0.62858) (xy 3.368223 -2.18313) (xy 0.782957 -2.186544) (xy 0.520624 -2.186865) (xy 0.265562 -2.187127)
(xy 0.019082 -2.187331) (xy -0.217503 -2.187477) (xy -0.442881 -2.187567) (xy -0.655741 -2.187601)
(xy -0.85477 -2.18758) (xy -1.038656 -2.187504) (xy -1.206088 -2.187375) (xy -1.355753 -2.187193)
(xy -1.48634 -2.186959) (xy -1.596535 -2.186674) (xy -1.685028 -2.186339) (xy -1.750507 -2.185954)
(xy -1.791659 -2.18552) (xy -1.807172 -2.185038) (xy -1.807261 -2.185005) (xy -2.693618 -2.185005)
(xy -2.662706 -2.2284) (xy -2.604084 -2.310787) (xy -2.554339 -2.380809) (xy -2.515103 -2.436182)
(xy -2.488008 -2.474621) (xy -2.474685 -2.493841) (xy -2.473795 -2.495213) (xy -2.470971 -2.503525)
(xy -2.470576 -2.517131) (xy -2.473142 -2.537936) (xy -2.479199 -2.567844) (xy -2.489277 -2.608758)
(xy -2.503905 -2.662584) (xy -2.523616 -2.731226) (xy -2.548939 -2.816586) (xy -2.580404 -2.92057)
(xy -2.618542 -3.045082) (xy -2.663883 -3.192026) (xy -2.703462 -3.319801) (xy -2.74723 -3.460776)
(xy -2.788677 -3.59396) (xy -2.827104 -3.71713) (xy -2.861814 -3.828066) (xy -2.892108 -3.924544)
(xy -2.917289 -4.004342) (xy -2.936659 -4.065238) (xy -2.94952 -4.105009) (xy -2.955173 -4.121434)
(xy -2.955332 -4.121728) (xy -2.969332 -4.119901) (xy -3.001709 -4.109935) (xy -3.045807 -4.09391)
(xy -3.051566 -4.091681) (xy -3.199402 -4.042438) (xy -3.339126 -4.01434) (xy -3.478099 -4.006362)
(xy -3.603188 -4.014878) (xy -3.763389 -4.043413) (xy -3.907676 -4.088338) (xy -4.034337 -4.148662)
(xy -4.141657 -4.223392) (xy -4.227921 -4.311536) (xy -4.291416 -4.412103) (xy -4.292125 -4.413572)
(xy -4.311719 -4.458048) (xy -4.323548 -4.497656) (xy -4.329546 -4.542326) (xy -4.331646 -4.601989)
(xy -4.331772 -4.617217) (xy -4.33135 -4.67777) (xy -4.328186 -4.719304) (xy -4.320667 -4.749813)
(xy -4.307179 -4.777291) (xy -4.295837 -4.795212) (xy -4.248569 -4.84533) (xy -4.179539 -4.888864)
(xy -4.093706 -4.923361) (xy -3.996027 -4.946367) (xy -3.98776 -4.947651) (xy -3.955352 -4.950734)
(xy -3.90213 -4.953343) (xy -3.827362 -4.955485) (xy -3.730318 -4.957166) (xy -3.610266 -4.958392)
(xy -3.466476 -4.959171) (xy -3.298216 -4.959507)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "0868d6bd-3ab0-4269-afee-424fe0d52dab")
)
(embedded_fonts no)
)

View file

@ -1,269 +0,0 @@
(footprint "apple-trafficlight-04mm-silkscreen"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(property "Reference" "G***"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "1a631dd4-564c-4a45-bbbf-69d23a1fd312")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Value" "LOGO"
(at 0.75 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "ccb90540-f565-4817-8982-09f3cc5d4fa1")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "eba9b9d1-69bc-40db-8b5b-f4def09af8ae")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "ba5491b1-b35b-4178-97bc-edded9dfb49f")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr board_only exclude_from_pos_files exclude_from_bom)
(duplicate_pad_numbers_are_jumpers no)
(fp_poly
(pts
(xy 0.922378 0.944294) (xy 1.128436 0.945307) (xy 1.136221 0.955735) (xy 1.144007 0.966164) (xy 1.024218 1.356924)
(xy 1.001748 1.430055) (xy 0.981459 1.495743) (xy 0.963353 1.55398) (xy 0.947431 1.604758) (xy 0.933698 1.64807)
(xy 0.922154 1.683908) (xy 0.912802 1.712264) (xy 0.905645 1.733132) (xy 0.900686 1.746503) (xy 0.897926 1.752371)
(xy 0.897698 1.752605) (xy 0.892831 1.754364) (xy 0.883195 1.755696) (xy 0.868104 1.756639) (xy 0.846872 1.757228)
(xy 0.818813 1.757499) (xy 0.803643 1.757527) (xy 0.716319 1.757527) (xy 0.716319 1.350404) (xy 0.716319 0.94328)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "8a8b3352-91e2-40fd-9b3b-f4fe7eaf9265")
)
(fp_poly
(pts
(xy -0.724149 0.074371) (xy -0.724149 0.48146) (xy -0.803959 0.48146) (xy -0.831366 0.481393) (xy -0.852036 0.481134)
(xy -0.86706 0.480599) (xy -0.877528 0.479703) (xy -0.884531 0.47836) (xy -0.889161 0.476486) (xy -0.891813 0.47461)
(xy -0.893836 0.471373) (xy -0.897021 0.463973) (xy -0.901464 0.45211) (xy -0.907261 0.435487) (xy -0.914508 0.413803)
(xy -0.923302 0.386759) (xy -0.933738 0.354058) (xy -0.945913 0.315399) (xy -0.959922 0.270483) (xy -0.975862 0.219012)
(xy -0.993829 0.160687) (xy -1.013919 0.095208) (xy -1.017505 0.083497) (xy -1.033755 0.030326) (xy -1.049341 -0.020854)
(xy -1.06411 -0.069532) (xy -1.077908 -0.115196) (xy -1.090585 -0.157337) (xy -1.101986 -0.195441)
(xy -1.11196 -0.228999) (xy -1.120354 -0.257499) (xy -1.127015 -0.28043) (xy -1.131791 -0.297281)
(xy -1.134528 -0.30754) (xy -1.135153 -0.310591) (xy -1.135153 -0.315406) (xy -1.134747 -0.319467)
(xy -1.133319 -0.322838) (xy -1.130255 -0.325583) (xy -1.124941 -0.327767) (xy -1.116764 -0.329453)
(xy -1.10511 -0.330706) (xy -1.089363 -0.331589) (xy -1.068911 -0.332168) (xy -1.04314 -0.332506)
(xy -1.011434 -0.332667) (xy -0.973181 -0.332717) (xy -0.927767 -0.332718) (xy -0.9235 -0.332718)
(xy -0.724149 -0.332718)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "a5eb1233-a39b-467e-a159-04a004e9ca50")
)
(fp_poly
(pts
(xy -0.724149 1.350438) (xy -0.724149 1.757527) (xy -0.805602 1.757527) (xy -0.836065 1.75737) (xy -0.859375 1.756874)
(xy -0.8762 1.756002) (xy -0.887209 1.754716) (xy -0.893071 1.752979) (xy -0.893606 1.752634) (xy -0.895597 1.74832)
(xy -0.899659 1.737115) (xy -0.905605 1.719625) (xy -0.913248 1.696455) (xy -0.922402 1.66821) (xy -0.932879 1.635495)
(xy -0.944492 1.598916) (xy -0.957056 1.559079) (xy -0.970383 1.516588) (xy -0.984285 1.472049) (xy -0.998577 1.426067)
(xy -1.013072 1.379248) (xy -1.027582 1.332196) (xy -1.041921 1.285518) (xy -1.055903 1.239818) (xy -1.069339 1.195701)
(xy -1.082044 1.153774) (xy -1.09383 1.114641) (xy -1.104511 1.078908) (xy -1.113899 1.04718) (xy -1.121809 1.020062)
(xy -1.128053 0.99816) (xy -1.132444 0.982079) (xy -1.134796 0.972424) (xy -1.135153 0.970056) (xy -1.132231 0.959199)
(xy -1.126586 0.951331) (xy -1.124466 0.949535) (xy -1.121848 0.948031) (xy -1.118068 0.946793) (xy -1.11246 0.945794)
(xy -1.104358 0.94501) (xy -1.093098 0.944415) (xy -1.078013 0.943982) (xy -1.058438 0.943685) (xy -1.033709 0.9435)
(xy -1.003158 0.943399) (xy -0.966122 0.943358) (xy -0.921934 0.94335) (xy -0.921084 0.94335) (xy -0.724149 0.94335)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "979ad39e-a13c-46e2-a280-465f40701818")
)
(fp_poly
(pts
(xy -0.724149 -1.209525) (xy -0.724149 -0.802436) (xy -0.805743 -0.802436) (xy -0.833268 -0.80249)
(xy -0.854028 -0.802709) (xy -0.869085 -0.80318) (xy -0.879503 -0.803989) (xy -0.886344 -0.805222)
(xy -0.890671 -0.806965) (xy -0.893548 -0.809303) (xy -0.893791 -0.809567) (xy -0.895798 -0.814217)
(xy -0.899878 -0.825755) (xy -0.905843 -0.843571) (xy -0.913506 -0.867058) (xy -0.92268 -0.895608)
(xy -0.933176 -0.928613) (xy -0.944809 -0.965464) (xy -0.95739 -1.005553) (xy -0.970733 -1.048272)
(xy -0.984649 -1.093013) (xy -0.998952 -1.139168) (xy -1.013455 -1.186129) (xy -1.027969 -1.233287)
(xy -1.042308 -1.280034) (xy -1.056284 -1.325762) (xy -1.06971 -1.369864) (xy -1.082399 -1.41173)
(xy -1.094163 -1.450753) (xy -1.104815 -1.486324) (xy -1.114168 -1.517835) (xy -1.122033 -1.544679)
(xy -1.128225 -1.566247) (xy -1.132556 -1.58193) (xy -1.134838 -1.591121) (xy -1.135153 -1.593139)
(xy -1.132555 -1.603582) (xy -1.127994 -1.610135) (xy -1.125798 -1.611599) (xy -1.122288 -1.612827)
(xy -1.116816 -1.613839) (xy -1.108733 -1.614655) (xy -1.097391 -1.615296) (xy -1.082139 -1.615783)
(xy -1.062331 -1.616135) (xy -1.037316 -1.616374) (xy -1.006447 -1.61652) (xy -0.969074 -1.616593)
(xy -0.924549 -1.616613) (xy -0.922493 -1.616613) (xy -0.724149 -1.616613)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "7ccfab7a-43d7-4bfd-887d-b47f385f8ea8")
)
(fp_poly
(pts
(xy 0.967154 -0.332712) (xy 1.005307 -0.332677) (xy 1.03693 -0.332589) (xy 1.06267 -0.332424) (xy 1.083178 -0.332155)
(xy 1.099102 -0.331758) (xy 1.11109 -0.331209) (xy 1.119792 -0.330483) (xy 1.125857 -0.329555) (xy 1.129934 -0.328399)
(xy 1.132671 -0.326992) (xy 1.134717 -0.325308) (xy 1.13549 -0.32455) (xy 1.141567 -0.314448) (xy 1.141469 -0.307914)
(xy 1.138514 -0.29724) (xy 1.133556 -0.280241) (xy 1.126782 -0.257521) (xy 1.118381 -0.229682) (xy 1.10854 -0.197326)
(xy 1.097446 -0.161056) (xy 1.085288 -0.121473) (xy 1.072253 -0.079182) (xy 1.058529 -0.034783) (xy 1.044304 0.011121)
(xy 1.029765 0.057926) (xy 1.0151 0.105031) (xy 1.000497 0.151833) (xy 0.986144 0.19773) (xy 0.972228 0.24212)
(xy 0.958938 0.284399) (xy 0.94646 0.323966) (xy 0.934983 0.360217) (xy 0.924695 0.392551) (xy 0.915782 0.420366)
(xy 0.908433 0.443057) (xy 0.902836 0.460024) (xy 0.899179 0.470664) (xy 0.897689 0.474346) (xy 0.894994 0.476668)
(xy 0.890989 0.478426) (xy 0.884652 0.479696) (xy 0.874963 0.480557) (xy 0.860899 0.481085) (xy 0.841439 0.481359)
(xy 0.815563 0.481454) (xy 0.803785 0.48146) (xy 0.716319 0.48146) (xy 0.716319 0.074371) (xy 0.716319 -0.332718)
(xy 0.921821 -0.332718)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "1cda6440-0dd3-4a14-bc18-fe7b7a0aeeb7")
)
(fp_poly
(pts
(xy 0.96718 -1.616606) (xy 1.005359 -1.616566) (xy 1.037005 -1.616471) (xy 1.062766 -1.616296) (xy 1.08329 -1.616018)
(xy 1.099225 -1.615614) (xy 1.111218 -1.615059) (xy 1.119918 -1.614329) (xy 1.125972 -1.613401) (xy 1.130028 -1.612252)
(xy 1.132734 -1.610856) (xy 1.134739 -1.609191) (xy 1.135151 -1.608785) (xy 1.140945 -1.601406) (xy 1.143028 -1.596063)
(xy 1.141911 -1.591719) (xy 1.138649 -1.580394) (xy 1.133393 -1.562588) (xy 1.126294 -1.538803) (xy 1.117505 -1.509543)
(xy 1.107176 -1.475308) (xy 1.09546 -1.436601) (xy 1.082508 -1.393923) (xy 1.068472 -1.347777) (xy 1.053503 -1.298665)
(xy 1.037754 -1.247087) (xy 1.025068 -1.20561) (xy 1.002604 -1.132389) (xy 0.982335 -1.06668) (xy 0.96426 -1.008483)
(xy 0.948378 -0.957796) (xy 0.934688 -0.914616) (xy 0.923191 -0.878943) (xy 0.913885 -0.850775) (xy 0.906771 -0.83011)
(xy 0.901847 -0.816946) (xy 0.899113 -0.811281) (xy 0.899079 -0.811243) (xy 0.896253 -0.80839) (xy 0.892934 -0.806231)
(xy 0.888077 -0.804669) (xy 0.880635 -0.803607) (xy 0.869562 -0.80295) (xy 0.853812 -0.8026) (xy 0.832338 -0.802461)
(xy 0.804094 -0.802436) (xy 0.803709 -0.802436) (xy 0.716319 -0.802436) (xy 0.716319 -1.209525) (xy 0.716319 -1.616613)
(xy 0.921821 -1.616613)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "e1c0b9db-64be-41a0-a4c0-c3d3ff72c843")
)
(fp_poly
(pts
(xy 0.044941 -1.985664) (xy 0.069462 -1.983354) (xy 0.088603 -1.979876) (xy 0.089905 -1.979528) (xy 0.123347 -1.967994)
(xy 0.154386 -1.952873) (xy 0.180921 -1.935281) (xy 0.193153 -1.924646) (xy 0.210133 -1.906305) (xy 0.221389 -1.889433)
(xy 0.228168 -1.871932) (xy 0.230327 -1.861938) (xy 0.233114 -1.845601) (xy 0.41698 -1.843644) (xy 0.461315 -1.843183)
(xy 0.498502 -1.842755) (xy 0.529223 -1.842252) (xy 0.554157 -1.841567) (xy 0.573985 -1.840593) (xy 0.589386 -1.839224)
(xy 0.601043 -1.837352) (xy 0.609634 -1.83487) (xy 0.61584 -1.831671) (xy 0.620341 -1.827649) (xy 0.623818 -1.822696)
(xy 0.62695 -1.816704) (xy 0.630147 -1.810115) (xy 0.630756 -1.808845) (xy 0.631332 -1.80742) (xy 0.631877 -1.80563)
(xy 0.632392 -1.803267) (xy 0.632877 -1.800122) (xy 0.633333 -1.795987) (xy 0.633762 -1.790654) (xy 0.634164 -1.783913)
(xy 0.634539 -1.775557) (xy 0.63489 -1.765376) (xy 0.635216 -1.753163) (xy 0.635519 -1.738709) (xy 0.6358 -1.721805)
(xy 0.636058 -1.702243) (xy 0.636296 -1.679814) (xy 0.636514 -1.65431) (xy 0.636713 -1.625522) (xy 0.636894 -1.593242)
(xy 0.637057 -1.557261) (xy 0.637204 -1.517371) (xy 0.637335 -1.473363) (xy 0.637452 -1.425029) (xy 0.637554 -1.37216)
(xy 0.637644 -1.314548) (xy 0.637722 -1.251984) (xy 0.637788 -1.18426) (xy 0.637844 -1.111167) (xy 0.637891 -1.032496)
(xy 0.637929 -0.94804) (xy 0.637959 -0.857589) (xy 0.637982 -0.760935) (xy 0.638 -0.65787) (xy 0.638012 -0.548185)
(xy 0.63802 -0.431672) (xy 0.638025 -0.308122) (xy 0.638027 -0.177326) (xy 0.638027 -0.039077) (xy 0.638027 0.076586)
(xy 0.638025 0.221179) (xy 0.638022 0.358151) (xy 0.638015 0.487709) (xy 0.638004 0.610061) (xy 0.637988 0.725413)
(xy 0.637967 0.833974) (xy 0.63794 0.93595) (xy 0.637906 1.031548) (xy 0.637864 1.120977) (xy 0.637814 1.204443)
(xy 0.637755 1.282154) (xy 0.637686 1.354317) (xy 0.637606 1.42114) (xy 0.637514 1.482829) (xy 0.637411 1.539593)
(xy 0.637294 1.591638) (xy 0.637164 1.639172) (xy 0.63702 1.682402) (xy 0.63686 1.721536) (xy 0.636684 1.756781)
(xy 0.636491 1.788343) (xy 0.636281 1.816432) (xy 0.636053 1.841253) (xy 0.635806 1.863015) (xy 0.635539 1.881924)
(xy 0.635252 1.898188) (xy 0.634943 1.912015) (xy 0.634612 1.923611) (xy 0.634259 1.933184) (xy 0.633882 1.940941)
(xy 0.633481 1.94709) (xy 0.633055 1.951838) (xy 0.632603 1.955393) (xy 0.632124 1.957961) (xy 0.631618 1.95975)
(xy 0.631177 1.960794) (xy 0.623424 1.972258) (xy 0.613903 1.981854) (xy 0.613282 1.982322) (xy 0.602231 1.990429)
(xy 0.002648 1.991274) (xy -0.079699 1.99138) (xy -0.154555 1.991454) (xy -0.22226 1.991492) (xy -0.283151 1.991494)
(xy -0.337567 1.991455) (xy -0.385846 1.991374) (xy -0.428325 1.991248) (xy -0.465345 1.991076) (xy -0.497242 1.990854)
(xy -0.524355 1.99058) (xy -0.547022 1.990251) (xy -0.565582 1.989866) (xy -0.580373 1.989422) (xy -0.591733 1.988916)
(xy -0.600001 1.988346) (xy -0.605514 1.987709) (xy -0.608612 1.987004) (xy -0.608871 1.9869) (xy -0.620806 1.979175)
(xy -0.632376 1.96771) (xy -0.641081 1.955269) (xy -0.644 1.948049) (xy -0.64413 1.943622) (xy -0.644253 1.931608)
(xy -0.64437 1.912247) (xy -0.64448 1.885781) (xy -0.644583 1.852451) (xy -0.644679 1.812497) (xy -0.644768 1.766162)
(xy -0.64485 1.713686) (xy -0.644924 1.65531) (xy -0.644991 1.591275) (xy -0.64505 1.521823) (xy -0.645101 1.447194)
(xy -0.645144 1.36763) (xy -0.645149 1.356493) (xy -0.342395 1.356493) (xy -0.338613 1.404816) (xy -0.327987 1.452639)
(xy -0.310364 1.499218) (xy -0.287676 1.540589) (xy -0.260571 1.576458) (xy -0.227404 1.60966) (xy -0.189817 1.638922)
(xy -0.149452 1.662974) (xy -0.107949 1.680543) (xy -0.106307 1.681087) (xy -0.062233 1.692027) (xy -0.015695 1.697227)
(xy 0.031108 1.69664) (xy 0.075973 1.690219) (xy 0.095278 1.685317) (xy 0.145291 1.666832) (xy 0.190673 1.642225)
(xy 0.231101 1.611764) (xy 0.266257 1.575714) (xy 0.29582 1.534343) (xy 0.311726 1.505054) (xy 0.331187 1.456146)
(xy 0.343068 1.406056) (xy 0.347394 1.355425) (xy 0.344191 1.304891) (xy 0.333485 1.255092) (xy 0.3153 1.206667)
(xy 0.29854 1.174618) (xy 0.283892 1.153162) (xy 0.264494 1.129728) (xy 0.242308 1.10637) (xy 0.219297 1.08514)
(xy 0.197423 1.06809) (xy 0.195373 1.066694) (xy 0.151852 1.041544) (xy 0.106829 1.023723) (xy 0.059346 1.01294)
(xy 0.008444 1.008905) (xy 0.003914 1.008864) (xy -0.045753 1.011607) (xy -0.091574 1.02053) (xy -0.135025 1.036075)
(xy -0.177584 1.058682) (xy -0.190117 1.066719) (xy -0.229951 1.097711) (xy -0.264013 1.133412) (xy -0.292151 1.173077)
(xy -0.314212 1.215961) (xy -0.330041 1.261321) (xy -0.339487 1.308413) (xy -0.342395 1.356493) (xy -0.645149 1.356493)
(xy -0.64518 1.283372) (xy -0.645207 1.19466) (xy -0.645226 1.101736) (xy -0.645237 1.004842) (xy -0.645239 0.904218)
(xy -0.645232 0.800105) (xy -0.645217 0.692744) (xy -0.645193 0.582377) (xy -0.645159 0.469244) (xy -0.645117 0.353587)
(xy -0.645065 0.235647) (xy -0.645004 0.115665) (xy -0.644981 0.074371) (xy -0.341608 0.074371) (xy -0.340189 0.110431)
(xy -0.335846 0.142145) (xy -0.327915 0.172295) (xy -0.315734 0.203665) (xy -0.305695 0.225072) (xy -0.279633 0.269709)
(xy -0.248187 0.308693) (xy -0.211187 0.342196) (xy -0.168465 0.370386) (xy -0.150702 0.379736) (xy -0.117766 0.39451)
(xy -0.087018 0.404747) (xy -0.055739 0.411077) (xy -0.021213 0.414126) (xy 0.000476 0.414633) (xy 0.02525 0.414418)
(xy 0.04513 0.413243) (xy 0.063024 0.4108) (xy 0.081839 0.406781) (xy 0.087302 0.405424) (xy 0.13586 0.389319)
(xy 0.180178 0.36709) (xy 0.219956 0.339377) (xy 0.254897 0.306821) (xy 0.284703 0.270062) (xy 0.309073 0.22974)
(xy 0.327711 0.186495) (xy 0.340318 0.140968) (xy 0.346595 0.093798) (xy 0.346243 0.045626) (xy 0.338964 -0.002908)
(xy 0.32446 -0.051165) (xy 0.312852 -0.078287) (xy 0.287803 -0.122374) (xy 0.257753 -0.160998) (xy 0.223382 -0.194078)
(xy 0.185371 -0.221534) (xy 0.144403 -0.243288) (xy 0.101159 -0.259257) (xy 0.056319 -0.269364) (xy 0.010566 -0.273529)
(xy -0.03542 -0.27167) (xy -0.080956 -0.263709) (xy -0.125363 -0.249566) (xy -0.167957 -0.22916)
(xy -0.208058 -0.202413) (xy -0.244985 -0.169243) (xy -0.265477 -0.146049) (xy -0.295098 -0.103682)
(xy -0.317385 -0.058747) (xy -0.332423 -0.011003) (xy -0.340294 0.03979) (xy -0.341608 0.074371)
(xy -0.644981 0.074371) (xy -0.644977 0.067808) (xy -0.644244 -1.213439) (xy -0.341676 -1.213439)
(xy -0.341397 -1.18726) (xy -0.339986 -1.166001) (xy -0.337162 -1.146796) (xy -0.333467 -1.130059)
(xy -0.317523 -1.081038) (xy -0.295294 -1.036012) (xy -0.267398 -0.995375) (xy -0.234455 -0.959517)
(xy -0.197085 -0.928834) (xy -0.155907 -0.903716) (xy -0.11154 -0.884558) (xy -0.064603 -0.871751)
(xy -0.015717 -0.865689) (xy 0.034501 -0.866764) (xy 0.072668 -0.872491) (xy 0.122622 -0.886631)
(xy 0.16879 -0.907454) (xy 0.210768 -0.934585) (xy 0.248157 -0.967649) (xy 0.280555 -1.006271) (xy 0.307559 -1.050074)
(xy 0.32877 -1.098685) (xy 0.335079 -1.117847) (xy 0.339394 -1.132989) (xy 0.342358 -1.146252) (xy 0.34422 -1.159781)
(xy 0.345229 -1.175721) (xy 0.345631 -1.196214) (xy 0.345683 -1.209525) (xy 0.345454 -1.235208) (xy 0.344578 -1.255147)
(xy 0.34286 -1.271409) (xy 0.340106 -1.286064) (xy 0.337589 -1.296005) (xy 0.320158 -1.345626) (xy 0.296542 -1.390993)
(xy 0.267282 -1.431688) (xy 0.232921 -1.467291) (xy 0.194002 -1.497383) (xy 0.151068 -1.521546) (xy 0.104661 -1.539361)
(xy 0.055324 -1.550409) (xy 0.0036 -1.55427) (xy 0.002997 -1.554271) (xy -0.040014 -1.552231) (xy -0.079076 -1.545607)
(xy -0.117009 -1.53375) (xy -0.150702 -1.51896) (xy -0.195312 -1.493069) (xy -0.234316 -1.461744)
(xy -0.267864 -1.424836) (xy -0.296107 -1.382194) (xy -0.305636 -1.36414) (xy -0.320885 -1.33047)
(xy -0.331432 -1.299674) (xy -0.337949 -1.268935) (xy -0.341112 -1.235435) (xy -0.341676 -1.213439)
(xy -0.644244 -1.213439) (xy -0.643906 -1.803927) (xy -0.635709 -1.814978) (xy -0.626897 -1.824091)
(xy -0.615241 -1.832933) (xy -0.612223 -1.834772) (xy -0.608557 -1.836797) (xy -0.604791 -1.838482)
(xy -0.600215 -1.839859) (xy -0.594115 -1.84096) (xy -0.585779 -1.841816) (xy -0.574493 -1.842459)
(xy -0.559546 -1.842919) (xy -0.540225 -1.843228) (xy -0.515817 -1.843417) (xy -0.485609 -1.843518)
(xy -0.448888 -1.843563) (xy -0.41216 -1.843579) (xy -0.227386 -1.843644) (xy -0.224779 -1.858323)
(xy -0.21641 -1.883775) (xy -0.200999 -1.907962) (xy -0.179309 -1.930235) (xy -0.152102 -1.949945)
(xy -0.12014 -1.966443) (xy -0.084187 -1.979081) (xy -0.082201 -1.979626) (xy -0.063422 -1.983182)
(xy -0.039142 -1.985563) (xy -0.011537 -1.986769) (xy 0.017216 -1.986802)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "a814965a-5fcf-487e-8be3-04dec044943d")
)
(embedded_fonts no)
)

View file

@ -1,269 +0,0 @@
(footprint "apple-trafficlight-10mm-silkscreen"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(property "Reference" "G***"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "4d7586c1-3ff7-479e-83f5-783f9310e42f")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Value" "LOGO"
(at 0.75 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "55cf6da5-cdaa-4d0b-ae8b-12c2f660a258")
(effects
(font
(size 1.5 1.5)
(thickness 0.3)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "8f0b00cf-ae96-4c1a-8dc1-a248afaf6c7e")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "65a5f430-5831-4cb3-932e-eead2085d8e2")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr board_only exclude_from_pos_files exclude_from_bom)
(duplicate_pad_numbers_are_jumpers no)
(fp_poly
(pts
(xy 2.306478 2.361281) (xy 2.821744 2.363814) (xy 2.841211 2.389891) (xy 2.860679 2.415969) (xy 2.561138 3.393094)
(xy 2.504951 3.575966) (xy 2.454217 3.740224) (xy 2.40894 3.88585) (xy 2.369127 4.012824) (xy 2.334785 4.121128)
(xy 2.305919 4.210743) (xy 2.282534 4.281651) (xy 2.264638 4.333832) (xy 2.252236 4.367268) (xy 2.245335 4.38194)
(xy 2.244766 4.382528) (xy 2.232594 4.386924) (xy 2.208498 4.390256) (xy 2.170762 4.392614) (xy 2.117671 4.394087)
(xy 2.047508 4.394765) (xy 2.009574 4.394835) (xy 1.791213 4.394835) (xy 1.791213 3.376791) (xy 1.791213 2.358747)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "25f07b41-e421-4378-8849-a19e8d30b787")
)
(fp_poly
(pts
(xy -1.810791 0.185972) (xy -1.810791 1.20393) (xy -2.010361 1.20393) (xy -2.078895 1.203761) (xy -2.130582 1.203115)
(xy -2.168149 1.201777) (xy -2.194326 1.199535) (xy -2.211838 1.196178) (xy -2.223414 1.191491) (xy -2.230048 1.186801)
(xy -2.235106 1.178706) (xy -2.24307 1.160201) (xy -2.25418 1.130538) (xy -2.268676 1.088969) (xy -2.286799 1.034747)
(xy -2.308788 0.967123) (xy -2.334884 0.88535) (xy -2.365328 0.78868) (xy -2.400359 0.676365) (xy -2.440218 0.547658)
(xy -2.485146 0.40181) (xy -2.535382 0.238075) (xy -2.54435 0.208792) (xy -2.584985 0.075834) (xy -2.623958 -0.052145)
(xy -2.660888 -0.173868) (xy -2.695393 -0.288056) (xy -2.727091 -0.393431) (xy -2.755601 -0.488715)
(xy -2.780542 -0.572629) (xy -2.801531 -0.643895) (xy -2.818188 -0.701236) (xy -2.83013 -0.743372)
(xy -2.836976 -0.769026) (xy -2.838536 -0.776655) (xy -2.838539 -0.788696) (xy -2.837522 -0.798851)
(xy -2.83395 -0.807281) (xy -2.826289 -0.814145) (xy -2.813002 -0.819605) (xy -2.792555 -0.823821)
(xy -2.763411 -0.826954) (xy -2.724037 -0.829164) (xy -2.672895 -0.830611) (xy -2.608451 -0.831456)
(xy -2.529169 -0.83186) (xy -2.433515 -0.831983) (xy -2.319952 -0.831986) (xy -2.309282 -0.831986)
(xy -1.810791 -0.831986)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "245e12da-5b1d-4fc6-b6ba-603a40cfb4f4")
)
(fp_poly
(pts
(xy -1.810791 3.376878) (xy -1.810791 4.394835) (xy -2.014469 4.394835) (xy -2.090645 4.394442) (xy -2.148933 4.393202)
(xy -2.191004 4.39102) (xy -2.218533 4.387804) (xy -2.233192 4.383462) (xy -2.234531 4.3826) (xy -2.23951 4.371812)
(xy -2.249667 4.343793) (xy -2.264535 4.300058) (xy -2.283648 4.242118) (xy -2.306537 4.171489) (xy -2.332735 4.089684)
(xy -2.361776 3.998216) (xy -2.393192 3.8986) (xy -2.426516 3.792348) (xy -2.461281 3.680974) (xy -2.497019 3.565993)
(xy -2.533264 3.448917) (xy -2.569548 3.331261) (xy -2.605405 3.214538) (xy -2.640366 3.100261) (xy -2.673964 2.989945)
(xy -2.705733 2.885103) (xy -2.735205 2.787248) (xy -2.761914 2.697895) (xy -2.785391 2.618556) (xy -2.80517 2.550746)
(xy -2.820783 2.495978) (xy -2.831764 2.455766) (xy -2.837645 2.431624) (xy -2.838536 2.425702) (xy -2.831232 2.398553)
(xy -2.817115 2.378877) (xy -2.811813 2.374387) (xy -2.805268 2.370626) (xy -2.795815 2.36753) (xy -2.781792 2.365034)
(xy -2.761533 2.363073) (xy -2.733375 2.361584) (xy -2.695655 2.360501) (xy -2.646707 2.35976) (xy -2.584868 2.359296)
(xy -2.508474 2.359044) (xy -2.415862 2.35894) (xy -2.305367 2.35892) (xy -2.303242 2.35892) (xy -1.810791 2.35892)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "08b30c1a-7e22-48f3-90a0-e3eb17ece3cd")
)
(fp_poly
(pts
(xy -1.810791 -3.02451) (xy -1.810791 -2.006552) (xy -2.014823 -2.006552) (xy -2.083651 -2.006687)
(xy -2.135562 -2.007236) (xy -2.173213 -2.008414) (xy -2.199264 -2.010437) (xy -2.21637 -2.013519)
(xy -2.227191 -2.017877) (xy -2.234384 -2.023724) (xy -2.234993 -2.024385) (xy -2.240012 -2.036013)
(xy -2.250214 -2.064863) (xy -2.26513 -2.109414) (xy -2.284292 -2.168146) (xy -2.307231 -2.239537)
(xy -2.333479 -2.322068) (xy -2.362567 -2.414217) (xy -2.394028 -2.514463) (xy -2.427392 -2.621286)
(xy -2.462191 -2.733164) (xy -2.497957 -2.848578) (xy -2.534221 -2.966007) (xy -2.570515 -3.083929)
(xy -2.606371 -3.200824) (xy -2.641319 -3.315171) (xy -2.674892 -3.42545) (xy -2.706622 -3.53014)
(xy -2.736039 -3.627719) (xy -2.762675 -3.716667) (xy -2.786062 -3.795464) (xy -2.805731 -3.862589)
(xy -2.821214 -3.916521) (xy -2.832043 -3.955739) (xy -2.837749 -3.978722) (xy -2.838536 -3.983767)
(xy -2.83204 -4.009881) (xy -2.820637 -4.026268) (xy -2.815145 -4.029929) (xy -2.806368 -4.032998)
(xy -2.792685 -4.035528) (xy -2.772473 -4.037569) (xy -2.74411 -4.039173) (xy -2.705973 -4.04039)
(xy -2.65644 -4.041271) (xy -2.593889 -4.041869) (xy -2.516698 -4.042233) (xy -2.423244 -4.042415)
(xy -2.311906 -4.042467) (xy -2.306764 -4.042467) (xy -1.810791 -4.042467)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "408bdd13-f731-4ce9-9907-838242f0a13a")
)
(fp_poly
(pts
(xy 2.418445 -0.831971) (xy 2.51385 -0.831884) (xy 2.592925 -0.831665) (xy 2.657291 -0.83125) (xy 2.708572 -0.830578)
(xy 2.74839 -0.829587) (xy 2.778368 -0.828214) (xy 2.800129 -0.826398) (xy 2.815295 -0.824076) (xy 2.825489 -0.821187)
(xy 2.832333 -0.817668) (xy 2.837451 -0.813458) (xy 2.839383 -0.811561) (xy 2.854578 -0.7863) (xy 2.854332 -0.769962)
(xy 2.846944 -0.74327) (xy 2.834546 -0.700765) (xy 2.817608 -0.643952) (xy 2.7966 -0.574337) (xy 2.771991 -0.493428)
(xy 2.744251 -0.402731) (xy 2.713849 -0.303753) (xy 2.681254 -0.197999) (xy 2.646936 -0.086976) (xy 2.611364 0.027809)
(xy 2.575008 0.144849) (xy 2.538338 0.262639) (xy 2.501823 0.379672) (xy 2.465932 0.494441) (xy 2.431134 0.60544)
(xy 2.3979 0.711163) (xy 2.366699 0.810102) (xy 2.338 0.900752) (xy 2.312272 0.981606) (xy 2.289986 1.051158)
(xy 2.27161 1.1079) (xy 2.257614 1.150328) (xy 2.248468 1.176933) (xy 2.244742 1.186139) (xy 2.238003 1.191946)
(xy 2.227988 1.196342) (xy 2.212143 1.199519) (xy 2.187913 1.201671) (xy 2.152746 1.202992) (xy 2.104086 1.203676)
(xy 2.039379 1.203915) (xy 2.009927 1.20393) (xy 1.791213 1.20393) (xy 1.791213 0.185972) (xy 1.791213 -0.831986)
(xy 2.305086 -0.831986)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "f2e36a9e-dfbe-4e21-a943-34b86a2ae7ee")
)
(fp_poly
(pts
(xy 2.418511 -4.042447) (xy 2.513981 -4.042348) (xy 2.593114 -4.04211) (xy 2.657532 -4.041673) (xy 2.708853 -4.040979)
(xy 2.748699 -4.039967) (xy 2.778689 -4.038579) (xy 2.800443 -4.036755) (xy 2.815582 -4.034435) (xy 2.825724 -4.03156)
(xy 2.832492 -4.02807) (xy 2.837503 -4.023907) (xy 2.838535 -4.022891) (xy 2.853024 -4.00444) (xy 2.858232 -3.99108)
(xy 2.85544 -3.980218) (xy 2.847282 -3.951897) (xy 2.834138 -3.907371) (xy 2.816387 -3.847897) (xy 2.794409 -3.774729)
(xy 2.768581 -3.689123) (xy 2.739284 -3.592332) (xy 2.706897 -3.485614) (xy 2.671799 -3.370221) (xy 2.634368 -3.247411)
(xy 2.594985 -3.118438) (xy 2.563263 -3.014722) (xy 2.507092 -2.831626) (xy 2.456407 -2.667317) (xy 2.411208 -2.52179)
(xy 2.371493 -2.395042) (xy 2.337262 -2.287069) (xy 2.308512 -2.197866) (xy 2.285242 -2.127428) (xy 2.267452 -2.075753)
(xy 2.255139 -2.042835) (xy 2.248303 -2.028671) (xy 2.248219 -2.028575) (xy 2.241152 -2.021441) (xy 2.232853 -2.016042)
(xy 2.220708 -2.012136) (xy 2.202098 -2.009482) (xy 2.174409 -2.007838) (xy 2.135024 -2.006963) (xy 2.081326 -2.006615)
(xy 2.010701 -2.006552) (xy 2.009738 -2.006552) (xy 1.791213 -2.006552) (xy 1.791213 -3.02451) (xy 1.791213 -4.042467)
(xy 2.305086 -4.042467)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "a7666404-9177-4f83-b6ba-638ec149076b")
)
(fp_poly
(pts
(xy 0.112381 -4.965306) (xy 0.173697 -4.959532) (xy 0.221559 -4.950834) (xy 0.224815 -4.949964) (xy 0.30844 -4.921122)
(xy 0.386056 -4.88331) (xy 0.452407 -4.83932) (xy 0.482995 -4.812727) (xy 0.525454 -4.766863) (xy 0.553602 -4.724674)
(xy 0.570552 -4.680911) (xy 0.575951 -4.65592) (xy 0.58292 -4.615068) (xy 1.042693 -4.610174) (xy 1.153555 -4.609023)
(xy 1.246545 -4.607952) (xy 1.323364 -4.606694) (xy 1.385713 -4.604981) (xy 1.435294 -4.602546) (xy 1.473808 -4.599122)
(xy 1.502956 -4.594441) (xy 1.524438 -4.588235) (xy 1.539956 -4.580236) (xy 1.551212 -4.570177) (xy 1.559906 -4.557791)
(xy 1.567739 -4.54281) (xy 1.575734 -4.526333) (xy 1.577255 -4.523158) (xy 1.578696 -4.519594) (xy 1.580059 -4.515118)
(xy 1.581346 -4.509208) (xy 1.582559 -4.501345) (xy 1.5837 -4.491005) (xy 1.584772 -4.477668) (xy 1.585777 -4.460813)
(xy 1.586717 -4.439917) (xy 1.587593 -4.41446) (xy 1.588409 -4.38392) (xy 1.589167 -4.347776) (xy 1.589868 -4.305507)
(xy 1.590515 -4.25659) (xy 1.591109 -4.200505) (xy 1.591654 -4.13673) (xy 1.592151 -4.064744) (xy 1.592603 -3.984025)
(xy 1.593012 -3.894052) (xy 1.593379 -3.794304) (xy 1.593707 -3.684259) (xy 1.593999 -3.563396) (xy 1.594256 -3.431193)
(xy 1.59448 -3.287129) (xy 1.594674 -3.130683) (xy 1.59484 -2.961333) (xy 1.594981 -2.778558) (xy 1.595097 -2.581836)
(xy 1.595192 -2.370646) (xy 1.595268 -2.144467) (xy 1.595326 -1.902777) (xy 1.59537 -1.645055) (xy 1.5954 -1.370779)
(xy 1.59542 -1.079429) (xy 1.595431 -0.770482) (xy 1.595437 -0.443417) (xy 1.595438 -0.097713) (xy 1.595437 0.191509)
(xy 1.595433 0.553077) (xy 1.595424 0.895586) (xy 1.595406 1.219556) (xy 1.595379 1.525506) (xy 1.59534 1.813954)
(xy 1.595288 2.085417) (xy 1.59522 2.340416) (xy 1.595135 2.579468) (xy 1.595031 2.803091) (xy 1.594906 3.011805)
(xy 1.594757 3.206127) (xy 1.594584 3.386577) (xy 1.594384 3.553672) (xy 1.594156 3.707931) (xy 1.593897 3.849873)
(xy 1.593606 3.980016) (xy 1.59328 4.098879) (xy 1.592918 4.206979) (xy 1.592519 4.304836) (xy 1.592079 4.392968)
(xy 1.591598 4.471893) (xy 1.591072 4.542131) (xy 1.590502 4.604198) (xy 1.589884 4.658615) (xy 1.589216 4.705899)
(xy 1.588497 4.746569) (xy 1.587725 4.781143) (xy 1.586899 4.81014) (xy 1.586015 4.834078) (xy 1.585072 4.853476)
(xy 1.584069 4.868852) (xy 1.583004 4.880725) (xy 1.581873 4.889613) (xy 1.580677 4.896035) (xy 1.579412 4.900509)
(xy 1.578308 4.903118) (xy 1.558921 4.931787) (xy 1.535113 4.955781) (xy 1.53356 4.956953) (xy 1.505926 4.977225)
(xy 0.006624 4.979338) (xy -0.199292 4.979603) (xy -0.386477 4.979787) (xy -0.555778 4.979883) (xy -0.708041 4.979886)
(xy -0.844112 4.979789) (xy -0.964836 4.979587) (xy -1.07106 4.979273) (xy -1.163629 4.978841) (xy -1.24339 4.978286)
(xy -1.311189 4.9776) (xy -1.36787 4.976779) (xy -1.414281 4.975816) (xy -1.451267 4.974705) (xy -1.479674 4.97344)
(xy -1.500348 4.972015) (xy -1.514135 4.970424) (xy -1.521881 4.96866) (xy -1.522528 4.9684) (xy -1.552373 4.949082)
(xy -1.581304 4.920413) (xy -1.603071 4.889305) (xy -1.610371 4.871249) (xy -1.610696 4.860179) (xy -1.611004 4.830136)
(xy -1.611296 4.781723) (xy -1.611571 4.715543) (xy -1.611829 4.632198) (xy -1.612069 4.532292) (xy -1.612291 4.416427)
(xy -1.612496 4.285206) (xy -1.612681 4.139232) (xy -1.612848 3.979108) (xy -1.612996 3.805437) (xy -1.613124 3.618822)
(xy -1.613233 3.419866) (xy -1.613245 3.392017) (xy -0.856184 3.392017) (xy -0.846726 3.512853) (xy -0.820155 3.632439)
(xy -0.776088 3.748914) (xy -0.719355 3.852364) (xy -0.651577 3.942058) (xy -0.56864 4.025081) (xy -0.474651 4.098254)
(xy -0.373714 4.158397) (xy -0.269934 4.202331) (xy -0.265829 4.20369) (xy -0.155617 4.231048) (xy -0.039244 4.24405)
(xy 0.077788 4.242581) (xy 0.189978 4.226526) (xy 0.238251 4.214267) (xy 0.363314 4.168044) (xy 0.476793 4.106514)
(xy 0.577887 4.030343) (xy 0.665797 3.940198) (xy 0.739723 3.836745) (xy 0.779497 3.763506) (xy 0.82816 3.641206)
(xy 0.857869 3.515955) (xy 0.868688 3.389347) (xy 0.860678 3.262982) (xy 0.833906 3.138456) (xy 0.788433 3.017366)
(xy 0.746524 2.937225) (xy 0.709895 2.883572) (xy 0.661389 2.824974) (xy 0.605912 2.766565) (xy 0.548371 2.713477)
(xy 0.493673 2.670843) (xy 0.488547 2.667352) (xy 0.37972 2.604464) (xy 0.267136 2.559899) (xy 0.148401 2.532935)
(xy 0.021116 2.522847) (xy 0.009787 2.522745) (xy -0.114408 2.529602) (xy -0.228986 2.551916) (xy -0.33764 2.590787)
(xy -0.444062 2.647317) (xy -0.4754 2.667415) (xy -0.575008 2.744914) (xy -0.660185 2.834186) (xy -0.730546 2.93337)
(xy -0.78571 3.040606) (xy -0.825293 3.154032) (xy -0.848912 3.27179) (xy -0.856184 3.392017) (xy -1.613245 3.392017)
(xy -1.613321 3.209172) (xy -1.61339 2.987342) (xy -1.613437 2.754979) (xy -1.613464 2.512687) (xy -1.613469 2.261068)
(xy -1.613452 2.000725) (xy -1.613414 1.732261) (xy -1.613353 1.456279) (xy -1.61327 1.173382) (xy -1.613164 0.884173)
(xy -1.613035 0.589255) (xy -1.612882 0.28923) (xy -1.612824 0.185972) (xy -0.854216 0.185972) (xy -0.850667 0.276143)
(xy -0.839807 0.355446) (xy -0.819976 0.430839) (xy -0.789517 0.509281) (xy -0.764412 0.562812) (xy -0.699242 0.674428)
(xy -0.620609 0.771913) (xy -0.528089 0.855689) (xy -0.421258 0.926179) (xy -0.376841 0.949561) (xy -0.294483 0.986503)
(xy -0.217594 1.012103) (xy -0.139379 1.027931) (xy -0.053043 1.035555) (xy 0.001191 1.036824) (xy 0.063141 1.036286)
(xy 0.112852 1.033348) (xy 0.157597 1.027239) (xy 0.204645 1.017189) (xy 0.218307 1.013796) (xy 0.33973 0.973523)
(xy 0.450549 0.917937) (xy 0.550019 0.84864) (xy 0.637392 0.767231) (xy 0.711922 0.675312) (xy 0.772863 0.574484)
(xy 0.819469 0.466347) (xy 0.850993 0.352502) (xy 0.866688 0.23455) (xy 0.865808 0.114092) (xy 0.847607 -0.007272)
(xy 0.811338 -0.12794) (xy 0.782311 -0.195762) (xy 0.719675 -0.306006) (xy 0.644532 -0.402587) (xy 0.558585 -0.485306)
(xy 0.463537 -0.553963) (xy 0.361093 -0.608358) (xy 0.252957 -0.648293) (xy 0.140832 -0.673566) (xy 0.026422 -0.683979)
(xy -0.088569 -0.679331) (xy -0.202437 -0.659424) (xy -0.313478 -0.624057) (xy -0.419989 -0.573032)
(xy -0.520265 -0.506147) (xy -0.612604 -0.423205) (xy -0.663846 -0.365206) (xy -0.737914 -0.259265)
(xy -0.793646 -0.1469) (xy -0.831249 -0.027513) (xy -0.850932 0.099499) (xy -0.854216 0.185972) (xy -1.612824 0.185972)
(xy -1.612815 0.169561) (xy -1.610981 -3.034298) (xy -0.854387 -3.034298) (xy -0.853688 -2.968836)
(xy -0.85016 -2.915675) (xy -0.843099 -2.867653) (xy -0.833859 -2.825799) (xy -0.79399 -2.703219)
(xy -0.738404 -2.590629) (xy -0.668648 -2.489011) (xy -0.586273 -2.399347) (xy -0.492826 -2.32262)
(xy -0.389856 -2.259812) (xy -0.278913 -2.211904) (xy -0.161544 -2.17988) (xy -0.039299 -2.164721)
(xy 0.086273 -2.167409) (xy 0.181712 -2.18173) (xy 0.306628 -2.217088) (xy 0.422073 -2.269159) (xy 0.527044 -2.337003)
(xy 0.620537 -2.419682) (xy 0.70155 -2.516258) (xy 0.769077 -2.625792) (xy 0.822116 -2.747346) (xy 0.837893 -2.795263)
(xy 0.848681 -2.833127) (xy 0.856094 -2.866293) (xy 0.860751 -2.900123) (xy 0.863272 -2.93998) (xy 0.864279 -2.991227)
(xy 0.864409 -3.02451) (xy 0.863837 -3.088734) (xy 0.861644 -3.138591) (xy 0.857348 -3.179256) (xy 0.850464 -3.215903)
(xy 0.844169 -3.240761) (xy 0.800582 -3.364842) (xy 0.741527 -3.478287) (xy 0.66836 -3.580047) (xy 0.582439 -3.669074)
(xy 0.485119 -3.744323) (xy 0.377759 -3.804744) (xy 0.261715 -3.849291) (xy 0.138344 -3.876917) (xy 0.009003 -3.886573)
(xy 0.007497 -3.886575) (xy -0.100056 -3.881474) (xy -0.197735 -3.864909) (xy -0.292588 -3.835261)
(xy -0.376841 -3.798278) (xy -0.488392 -3.733534) (xy -0.585923 -3.655204) (xy -0.669813 -3.562913)
(xy -0.740437 -3.456283) (xy -0.764265 -3.411138) (xy -0.802396 -3.326943) (xy -0.828769 -3.249935)
(xy -0.845068 -3.173069) (xy -0.852977 -3.089301) (xy -0.854387 -3.034298) (xy -1.610981 -3.034298)
(xy -1.610136 -4.510859) (xy -1.589639 -4.538493) (xy -1.567604 -4.56128) (xy -1.538457 -4.583392)
(xy -1.530911 -4.58799) (xy -1.521742 -4.593052) (xy -1.512327 -4.597266) (xy -1.500884 -4.600711)
(xy -1.48563 -4.603464) (xy -1.464784 -4.605605) (xy -1.436565 -4.607211) (xy -1.399188 -4.608361)
(xy -1.350874 -4.609134) (xy -1.289838 -4.609607) (xy -1.214301 -4.609861) (xy -1.122479 -4.609972)
(xy -1.030637 -4.610013) (xy -0.568595 -4.610174) (xy -0.562076 -4.64688) (xy -0.541149 -4.710526)
(xy -0.502612 -4.771008) (xy -0.448374 -4.826703) (xy -0.380341 -4.875989) (xy -0.300419 -4.917244)
(xy -0.210516 -4.948846) (xy -0.20555 -4.950209) (xy -0.158591 -4.959101) (xy -0.097876 -4.965054)
(xy -0.028848 -4.96807) (xy 0.043052 -4.968153)
)
(stroke
(width 0)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "27120424-522c-4840-8ba4-fb1c9d5b47b1")
)
(embedded_fonts no)
)

File diff suppressed because it is too large Load diff

View file

@ -1,6 +0,0 @@
#!/bin/sh
## Builds common config for standalone device
## -> enable SPAT/ GLOSA with GNSS and a screen + BLE
cargo run --release -F ble

View file

@ -3,4 +3,4 @@
## Builds common config for standalone device with automatic CAM transmission ## Builds common config for standalone device with automatic CAM transmission
## -> enable SPAT/ GLOSA with GNSS and a screen + CAM transmission ## -> enable SPAT/ GLOSA with GNSS and a screen + CAM transmission
cargo run --release -F cam_tx,ble cargo run --release -F cam_tx

View file

@ -106,7 +106,6 @@ pub struct GlosaSignalInfo {
pub struct SignalGroupData { pub struct SignalGroupData {
pub phase: SignalPhase, pub phase: SignalPhase,
pub maneuver: map::Maneuvers, pub maneuver: map::Maneuvers,
pub usages: Vec<map::UsageType>,
pub timing: Option<TimingData>, pub timing: Option<TimingData>,
} }
@ -119,7 +118,6 @@ pub struct TimingData {
pub max_end_sec: Option<i16>, pub max_end_sec: Option<i16>,
} }
#[cfg(feature = "spat")]
impl TimingData { impl TimingData {
pub fn new(value: &map::SignalGroup, now: chrono::DateTime<chrono::Utc>) -> Option<Self> { pub fn new(value: &map::SignalGroup, now: chrono::DateTime<chrono::Utc>) -> Option<Self> {
let min = value let min = value
@ -384,29 +382,35 @@ impl State {
}), }),
) )
} else { } else {
// get signal groups which are in our approach and have a maneuver // get signal groups which are in our approach
let mut approach_sig_grps = intersection let mut approach_sig_grps = intersection
.signal_groups() .signal_groups()
.iter() .iter()
.filter_map(|i| { .filter(|i| {
if let Some(maneuver) = i.maneuvers() info.signal_groups
&& info .iter()
.signal_groups .find(|sg_id| **sg_id == i.id())
.iter() .is_some()
.find(|sg_id| **sg_id == i.id()) })
.is_some() .collect::<Vec<_>>();
{
let phase = i // sort signal groups by maneuver
approach_sig_grps.sort_by_key(|v| v.maneuvers());
// display signal phases
let sig_grps = approach_sig_grps
.iter()
.filter_map(|sig| {
if let Some(maneuver) = sig.maneuvers() {
let phase = sig
.phase() .phase()
.map(core::convert::Into::into) .map(core::convert::Into::into)
.unwrap_or_default(); .unwrap_or_default();
let timing = TimingData::new(i, self.time.and_utc()); let timing = TimingData::new(sig, self.time.and_utc());
let usages = i.source_lane_usages().to_vec();
Some(SignalGroupData { Some(SignalGroupData {
phase, phase,
maneuver, maneuver,
usages,
timing, timing,
}) })
} else { } else {
@ -415,39 +419,11 @@ impl State {
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
// sort signal groups by maneuver
approach_sig_grps.sort_by_key(|v| v.maneuver);
// // display signal phases
// let sig_grps = approach_sig_grps
// .iter()
// .filter_map(|sig| {
// if let Some(maneuver) = sig.sig_group.maneuvers() {
// let phase = sig
// .sig_group
// .phase()
// .map(core::convert::Into::into)
// .unwrap_or_default();
// let timing =
// TimingData::new(&sig.sig_group, self.time.and_utc());
// Some(SignalGroupData {
// phase,
// maneuver,
// timing,
// usages: sig.lane_types.clone(),
// })
// } else {
// None
// }
// })
// .collect::<Vec<_>>();
( (
None, None,
GlosaOutput::Locked(GlosaSignalInfo { GlosaOutput::Locked(GlosaSignalInfo {
intersection_id: intersection.id(), intersection_id: intersection.id(),
signal_groups: approach_sig_grps, signal_groups: sig_grps,
}), }),
) // keep state, return signal groups ) // keep state, return signal groups
} }

View file

@ -191,35 +191,27 @@ impl Intersection {
fn collect_signal_groups(lanes: &[Lane]) -> Vec<SignalGroup> { fn collect_signal_groups(lanes: &[Lane]) -> Vec<SignalGroup> {
let mut connections = lanes let mut connections = lanes
.iter() .iter()
.flat_map(ConnectionExt::from_lane) .flat_map(|i| i.connections.clone())
.filter(|i| i.conn.signal_group.is_some()) .filter(|i| i.signal_group.is_some())
.collect::<Vec<_>>(); .collect::<Vec<_>>();
connections.sort_by_key(|i| i.conn.signal_group.unwrap_or_default()); connections.sort_by_key(|i| i.signal_group.unwrap_or_default());
let chunks = connections.chunk_by(|a, b| a.conn.signal_group == b.conn.signal_group); let chunks = connections.chunk_by(|a, b| a.signal_group == b.signal_group);
chunks chunks
.map(|chunk| { .map(|chunk| {
let (sig_grp_id, maneuvers, mut target_lanes, mut source_lane_usages) = let (sig_grp_id, maneuvers, mut target_lanes) = chunk.iter().fold(
chunk.iter().fold( (None, Maneuvers::default(), vec![]),
(None, Maneuvers::default(), vec![], vec![]), |(sig_grp_id, maneuvers, mut lanes), i| {
|(sig_grp_id, maneuvers, mut lanes, mut usages), i| { let new_maneuvers = i
let new_maneuvers = i .maneuvers
.conn .map(|v| core::ops::Add::add(maneuvers, v))
.maneuvers .unwrap_or_default();
.map(|v| core::ops::Add::add(maneuvers, v)) lanes.push(i.target_lane_id);
.unwrap_or_default();
lanes.push(i.conn.target_lane_id);
let lane_usages = i.source_lane_usages.clone(); (i.signal_group, new_maneuvers, lanes)
usages.extend_from_slice(&lane_usages); },
);
usages.sort_unstable();
usages.dedup(); // TODO: only do this after all lanes were added?
(i.conn.signal_group, new_maneuvers, lanes, usages)
},
);
// unwrap is fine since we removed all connections without signal group beforehand // unwrap is fine since we removed all connections without signal group beforehand
let id = sig_grp_id.unwrap(); let id = sig_grp_id.unwrap();
@ -234,7 +226,6 @@ impl Intersection {
SignalGroup { SignalGroup {
id, id,
maneuvers, maneuvers,
source_lane_usages,
target_lanes, target_lanes,
phase: None, phase: None,
min_end_time: None, min_end_time: None,
@ -411,28 +402,6 @@ impl From<&etsi_its_dsrc::Connection> for Connection {
} }
} }
#[derive(Debug, Clone)]
#[allow(unused)]
struct ConnectionExt {
source_lane_id: u8,
source_lane_usages: Vec<UsageType>,
conn: Connection,
}
impl ConnectionExt {
fn from_lane(value: &Lane) -> Vec<Self> {
value
.connections
.iter()
.map(|conn| Self {
source_lane_id: value.id,
source_lane_usages: value.usages.clone(),
conn: *conn,
})
.collect()
}
}
/// Different view on a lane connection /// Different view on a lane connection
/// ///
/// Technically this data is redundant with the `Connection` data of a `Lane`, /// Technically this data is redundant with the `Connection` data of a `Lane`,
@ -442,8 +411,7 @@ impl ConnectionExt {
pub struct SignalGroup { pub struct SignalGroup {
id: u8, id: u8,
maneuvers: Option<Maneuvers>, maneuvers: Option<Maneuvers>,
source_lane_usages: Vec<UsageType>, // for easier signal group evaluation target_lanes: Vec<u8>, // mainly for debugging
target_lanes: Vec<u8>, // mainly for debugging
// SPAT data // SPAT data
/// current signal phase /// current signal phase
@ -473,9 +441,6 @@ impl SignalGroup {
pub fn maneuvers(&self) -> Option<Maneuvers> { pub fn maneuvers(&self) -> Option<Maneuvers> {
self.maneuvers self.maneuvers
} }
pub fn source_lane_usages(&self) -> &[UsageType] {
&self.source_lane_usages
}
pub fn phase(&self) -> Option<etsi_its_dsrc::MovementPhaseState> { pub fn phase(&self) -> Option<etsi_its_dsrc::MovementPhaseState> {
self.phase self.phase
} }

View file

@ -6,7 +6,6 @@
use core::cell::RefCell; use core::cell::RefCell;
use critical_section::Mutex; use critical_section::Mutex;
use crossbeam_queue::ArrayQueue;
use esp_backtrace as _; use esp_backtrace as _;
use log::{info, warn}; use log::{info, warn};
use trouble_host::prelude::*; use trouble_host::prelude::*;
@ -17,96 +16,25 @@ pub const CONTROLLER_SLOTS: usize = 20;
const CONNECTIONS_MAX: usize = 1; const CONNECTIONS_MAX: usize = 1;
const L2CAP_CHANNELS_MAX: usize = 1; const L2CAP_CHANNELS_MAX: usize = 1;
pub static CLIENT_CONNECTED: Mutex<RefCell<bool>> = Mutex::new(RefCell::new(false)); pub static TX_DATA: Mutex<RefCell<Option<BleSendable>>> = Mutex::new(RefCell::new(None));
pub static TX_DATA: Mutex<RefCell<Option<ArrayQueue<BleSendable>>>> =
Mutex::new(RefCell::new(None));
pub static RX_DATA: Mutex<RefCell<Option<io::msg::PositionState>>> = Mutex::new(RefCell::new(None)); pub static RX_DATA: Mutex<RefCell<Option<io::msg::PositionState>>> = Mutex::new(RefCell::new(None));
pub enum BleSendable { pub enum BleSendable {
#[cfg(feature = "cam")]
CamRaw(io::msg::RawMsgRx),
#[cfg(feature = "cam")] #[cfg(feature = "cam")]
Cam(io::msg::CamEvent), Cam(io::msg::CamEvent),
#[cfg(feature = "denm")]
DenmRaw(io::msg::RawMsgRx),
#[cfg(feature = "denm")] #[cfg(feature = "denm")]
Denm(io::msg::DenmEvent), Denm(io::msg::DenmEvent),
#[cfg(feature = "spat")]
MapemRaw(io::msg::RawMsgRx),
#[cfg(feature = "spat")]
SpatemRaw(io::msg::RawMsgRx),
}
pub const DIS_SERIAL_MAX_LEN: usize = 17;
pub const DIS_FW_REVISION_MAX_LEN: usize = 20; // git-describe
pub const DIS_SW_REVISION_MAX_LEN: usize = 66; // max length of get_feature_list, joined with comma
pub struct DeviceInfo {
/// WiFi MAC
pub serial_number: [u8; DIS_SERIAL_MAX_LEN],
/// git tag/ revision
pub fw_revision: [u8; DIS_FW_REVISION_MAX_LEN],
/// used for feature flags
pub sw_revision: [u8; DIS_SW_REVISION_MAX_LEN],
}
impl DeviceInfo {
pub fn new(serial_number: &str, fw_revision: &str, sw_revision: &str) -> Self {
Self {
serial_number: string_as_padded_buf(serial_number, DIS_SERIAL_MAX_LEN)
.try_into()
.unwrap(),
fw_revision: string_as_padded_buf(fw_revision, DIS_FW_REVISION_MAX_LEN)
.try_into()
.unwrap(),
sw_revision: string_as_padded_buf(sw_revision, DIS_SW_REVISION_MAX_LEN)
.try_into()
.unwrap(),
}
}
}
pub fn string_as_padded_buf(value: &str, length: usize) -> alloc::vec::Vec<u8> {
let buf = value.as_bytes();
let buf_len = buf.len();
// cut buffer at maximum length or pad with whitespace
if buf_len > length {
buf[..length].to_vec()
} else {
let padding_len = length - buf_len;
let padding = alloc::vec![b' '; padding_len];
[buf, &padding].concat()
}
} }
#[gatt_server] #[gatt_server]
struct Server { struct Server {
c_its_events: CITSEvents, c_its_events: CITSEvents,
device_info_service: DeviceInfoService,
} }
#[gatt_service(uuid = service::DEVICE_INFORMATION)] #[cfg(feature = "cam")]
struct DeviceInfoService { const CAM_EVENT_SIZE: usize = 38;
/// Manufacturer name #[cfg(feature = "denm")]
#[characteristic(uuid = characteristic::MANUFACTURER_NAME_STRING, read, value = "jtbx")] const DENM_EVENT_SIZE: usize = 51;
mfg_name: &'static str,
/// Model number
#[characteristic(uuid = characteristic::MODEL_NUMBER_STRING, read, value = "ESP32-C5 C-ITS Companion")]
model_number: &'static str,
// Serial Number String
#[characteristic(uuid = characteristic::SERIAL_NUMBER_STRING, read, value = [0u8; DIS_SERIAL_MAX_LEN])]
serial_number: [u8; DIS_SERIAL_MAX_LEN],
// Firmware Revision String
#[characteristic(uuid = characteristic::FIRMWARE_REVISION_STRING, read, value = [0u8; DIS_FW_REVISION_MAX_LEN])]
fw_revision: [u8; DIS_FW_REVISION_MAX_LEN],
// Software Revision String
#[characteristic(uuid = characteristic::SOFTWARE_REVISION_STRING, read, value = [0u8; DIS_SW_REVISION_MAX_LEN])]
sw_revision: [u8; DIS_SW_REVISION_MAX_LEN],
}
#[gatt_service(uuid = "c0b70000-d4f4-4000-ada8-f99a02ee315c")] #[gatt_service(uuid = "c0b70000-d4f4-4000-ada8-f99a02ee315c")]
struct CITSEvents { struct CITSEvents {
@ -114,37 +42,15 @@ struct CITSEvents {
#[characteristic(uuid = "c0b70001-d4f4-4001-ada8-f99a02ee315c", write)] #[characteristic(uuid = "c0b70001-d4f4-4001-ada8-f99a02ee315c", write)]
position: [u8; 27], position: [u8; 27],
#[cfg(any(feature = "cam", feature = "denm", feature = "spat"))]
#[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "Raw_Notify", read, value = "Raw Message Notification", type = &'static str)]
#[characteristic(uuid = "c0b70001-d4f4-4002-ada8-f99a02ee315c", read, notify, value = [0u8; io::msg::RawNotify::PROTO_SIZE])]
raw_notify: [u8; io::msg::RawNotify::PROTO_SIZE],
#[cfg(feature = "cam")]
// #[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "CAM", read, value = "RawMsgRx proto msg", type = &'static str)]
#[characteristic(uuid = "c0b70001-d4f4-4003-ada8-f99a02ee315c", read, value = [0u8; io::msg::RawMsgRx::PROTO_SIZE])]
cam_raw: [u8; io::msg::RawMsgRx::PROTO_SIZE],
#[cfg(feature = "cam")] #[cfg(feature = "cam")]
#[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "CAM_Event", read, value = "CamEvent proto msg", type = &'static str)] #[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "CAM_Event", read, value = "CamEvent proto msg", type = &'static str)]
#[characteristic(uuid = "c0b70001-d4f4-4004-ada8-f99a02ee315c", read, notify, value = [0u8; io::msg::CamEvent::PROTO_SIZE])] #[characteristic(uuid = "c0b70001-d4f4-4002-ada8-f99a02ee315c", read, notify, value = [0u8; CAM_EVENT_SIZE])]
cam_event: [u8; io::msg::CamEvent::PROTO_SIZE], cam_event: [u8; CAM_EVENT_SIZE],
#[cfg(feature = "denm")]
// #[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "DENM", read, value = "RawMsgRx proto msg", type = &'static str)]
#[characteristic(uuid = "c0b70001-d4f4-4005-ada8-f99a02ee315c", read, value = [0u8; io::msg::RawMsgRx::PROTO_SIZE])]
denm_raw: [u8; io::msg::RawMsgRx::PROTO_SIZE],
#[cfg(feature = "denm")] #[cfg(feature = "denm")]
#[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "DENM_Event", read, value = "DenmEvent proto msg", type = &'static str)] #[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "DENM_Event", read, value = "DenmEvent proto msg", type = &'static str)]
#[characteristic(uuid = "c0b70001-d4f4-4006-ada8-f99a02ee315c", read, notify, value = [0u8; io::msg::DenmEvent::PROTO_SIZE])] #[characteristic(uuid = "c0b70001-d4f4-4004-ada8-f99a02ee315c", read, notify, value = [0u8; DENM_EVENT_SIZE])]
denm_event: [u8; io::msg::DenmEvent::PROTO_SIZE], denm_event: [u8; DENM_EVENT_SIZE],
#[cfg(feature = "spat")]
// #[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "MAPEM", read, value = "RawMsgRx proto msg", type = &'static str)]
#[characteristic(uuid = "c0b70001-d4f4-4007-ada8-f99a02ee315c", read, value = [0u8; io::msg::RawMsgRx::PROTO_SIZE])]
mapem_raw: [u8; io::msg::RawMsgRx::PROTO_SIZE],
#[cfg(feature = "spat")]
// #[descriptor(uuid = descriptors::MEASUREMENT_DESCRIPTION, name = "SPATEM", read, value = "RawMsgRx proto msg", type = &'static str)]
#[characteristic(uuid = "c0b70001-d4f4-4008-ada8-f99a02ee315c", read, value = [0u8; io::msg::RawMsgRx::PROTO_SIZE])]
spatem_raw: [u8; io::msg::RawMsgRx::PROTO_SIZE],
} }
/// Creates the BLE controller /// Creates the BLE controller
@ -154,10 +60,6 @@ pub fn make_controller(
esp_radio::ble::controller::BleConnector<'static>, esp_radio::ble::controller::BleConnector<'static>,
CONTROLLER_SLOTS, CONTROLLER_SLOTS,
> { > {
critical_section::with(|cs| {
TX_DATA.borrow(cs).replace(Some(ArrayQueue::new(2)));
});
let transport = esp_radio::ble::controller::BleConnector::new( let transport = esp_radio::ble::controller::BleConnector::new(
bt_peripheral, bt_peripheral,
esp_radio::ble::Config::default(), esp_radio::ble::Config::default(),
@ -173,9 +75,6 @@ pub async fn run(
esp_radio::ble::controller::BleConnector<'static>, esp_radio::ble::controller::BleConnector<'static>,
CONTROLLER_SLOTS, CONTROLLER_SLOTS,
>, >,
name: alloc::string::String,
short_name: alloc::string::String,
device_info: DeviceInfo,
) { ) {
let mut resources: HostResources<DefaultPacketPool, CONNECTIONS_MAX, L2CAP_CHANNELS_MAX> = let mut resources: HostResources<DefaultPacketPool, CONNECTIONS_MAX, L2CAP_CHANNELS_MAX> =
HostResources::new(); HostResources::new();
@ -186,52 +85,26 @@ pub async fn run(
.. ..
} = stack.build(); } = stack.build();
info!("BLE name: {name} (short: {short_name})"); info!("Starting advertising and GATT service");
info!(
"Starting advertising and GATT service for {}",
crate::util::get_rx_feature_list().join(",")
);
let server = Server::new_with_config(GapConfig::Peripheral(PeripheralConfig { let server = Server::new_with_config(GapConfig::Peripheral(PeripheralConfig {
name: &name, name: "ESP32 C-ITS",
appearance: &appearance::UNKNOWN, appearance: &appearance::UNKNOWN,
})) }))
.unwrap(); .unwrap();
// set "dynamic" device info data
let _ = server
.device_info_service
.serial_number
.set(&server, &device_info.serial_number);
let _ = server
.device_info_service
.fw_revision
.set(&server, &device_info.fw_revision);
let _ = server
.device_info_service
.sw_revision
.set(&server, &device_info.sw_revision);
// advertise and run update logic
let _ = embassy_futures::join::join(ble_task(runner), async { let _ = embassy_futures::join::join(ble_task(runner), async {
loop { loop {
match advertise(&mut peripheral, &server, &short_name).await { match advertise("ESP32 C-ITS", &mut peripheral, &server).await {
Ok(conn) => { Ok(conn) => {
info!("BLE: New client connected");
// set up tasks when the connection is established to a central, so they don't run when no one is connected. // set up tasks when the connection is established to a central, so they don't run when no one is connected.
let a = gatt_events_task(&server, &conn); let a = gatt_events_task(&server, &conn);
let b = publishing_task(&server, &conn); let b = custom_task(&server, &conn);
// run until any task ends (usually because the connection has been closed),
// run until any task ends (usually because the connection has been closed), then return to advertising state. // then return to advertising state.
embassy_futures::select::select(a, b).await; embassy_futures::select::select(a, b).await;
critical_section::with(|cs| {
let value_ref = CLIENT_CONNECTED.borrow(cs);
let _ = value_ref.replace(false);
});
} }
Err(e) => { Err(e) => {
panic!("BLE ADV: fatal error: {e:?}"); panic!("BLE ADV: fatal error {e:?}");
} }
} }
} }
@ -239,38 +112,17 @@ pub async fn run(
.await; .await;
} }
pub fn update(payload: BleSendable) {
critical_section::with(|cs| {
// only add to queue when someone is connected
if *CLIENT_CONNECTED.borrow(cs).borrow() {
let queue_rc = TX_DATA.borrow(cs).borrow();
// unwrap is fine b/c we stored something in it before
let queue = queue_rc.as_ref().unwrap();
if queue.push(payload).is_err() {
log::error!("BLE TX queue is full");
}
}
});
}
/// Create an advertiser to use to connect to a BLE Central, and wait for it to connect. /// Create an advertiser to use to connect to a BLE Central, and wait for it to connect.
async fn advertise<'values, 'server, C: Controller>( async fn advertise<'values, 'server, C: Controller>(
name: &'values str,
peripheral: &mut Peripheral<'values, C, DefaultPacketPool>, peripheral: &mut Peripheral<'values, C, DefaultPacketPool>,
server: &'server Server<'values>, server: &'server Server<'values>,
// name in advertisement, max. 8 characters
short_name: &'values str,
) -> Result<GattConnection<'values, 'server, DefaultPacketPool>, BleHostError<C::Error>> { ) -> Result<GattConnection<'values, 'server, DefaultPacketPool>, BleHostError<C::Error>> {
let mut advertiser_data = [0; 31]; // 37 bytes payload - 6 byte address let mut advertiser_data = [0; 35];
let service_uuid = Uuid::from(0xc0b7_0000_d4f4_4000_ada8_f99a_02ee_315c_u128)
.as_raw()
.try_into()
.unwrap();
let len = AdStructure::encode_slice( let len = AdStructure::encode_slice(
&[ &[
AdStructure::Flags(LE_GENERAL_DISCOVERABLE | BR_EDR_NOT_SUPPORTED), // 2+ 1 byte AdStructure::Flags(LE_GENERAL_DISCOVERABLE | BR_EDR_NOT_SUPPORTED),
AdStructure::ServiceUuids128(&[service_uuid]), // 2+16 byte = 21 AdStructure::CompleteLocalName(name.as_bytes()),
AdStructure::ShortenedLocalName(short_name.as_bytes()), // 2+ 8 byte = 31
], ],
&mut advertiser_data[..], &mut advertiser_data[..],
)?; )?;
@ -278,11 +130,7 @@ async fn advertise<'values, 'server, C: Controller>(
let advertiser = peripheral let advertiser = peripheral
.advertise( .advertise(
&trouble_host::advertise::AdvertisementParameters { &trouble_host::advertise::AdvertisementParameters {
primary_phy: PhyKind::Le2M, timeout: Some(embassy_time::Duration::from_secs(2)),
secondary_phy: PhyKind::Le2M,
timeout: Some(embassy_time::Duration::from_secs(3)),
interval_min: embassy_time::Duration::from_millis(150),
interval_max: embassy_time::Duration::from_secs(1),
..Default::default() ..Default::default()
}, },
Advertisement::ConnectableScannableUndirected { Advertisement::ConnectableScannableUndirected {
@ -353,142 +201,63 @@ async fn gatt_events_task<P: PacketPool>(
Ok(()) Ok(())
} }
#[allow(clippy::too_many_lines)] /// Example task to use the BLE notifier interface.
async fn publishing_task<P: PacketPool>(server: &Server<'_>, conn: &GattConnection<'_, '_, P>) { /// This task will notify the connected central of a counter value every 2 seconds.
critical_section::with(|cs| { /// It will also read the RSSI value every 2 seconds.
let value_ref = CLIENT_CONNECTED.borrow(cs); /// and will stop when the connection is closed by the central or an error occurs.
let _ = value_ref.replace(true); async fn custom_task<P: PacketPool>(server: &Server<'_>, conn: &GattConnection<'_, '_, P>) {
});
loop { loop {
embassy_time::Timer::after(embassy_time::Duration::from_millis(10)).await; embassy_time::Timer::after(embassy_time::Duration::from_millis(10)).await;
let mut new_data = None; let mut new_data = None;
critical_section::with(|cs| { critical_section::with(|cs| {
let queue_rc = TX_DATA.borrow(cs).borrow(); let tx_data_ref = TX_DATA.borrow(cs);
// unwrap is fine b/c we stored something in it before
let queue = queue_rc.as_ref().unwrap();
if let Some(data) = queue.pop() { if let Some(tx_data) = tx_data_ref.replace(None) {
new_data = Some(data); new_data = Some(tx_data);
} }
}); });
match new_data { match new_data {
#[cfg(feature = "cam")] #[cfg(feature = "cam")]
Some(BleSendable::Cam(cam_event)) => match cam_event.serialize_ble_proto() { Some(BleSendable::Cam(cam_event)) => {
Ok(value) => { let mut buf = cam_event.serialize_ble_proto();
if buf.len() <= CAM_EVENT_SIZE {
// pad with zeros
let pad = alloc::vec![0u8; CAM_EVENT_SIZE - buf.len()];
buf.extend_from_slice(&pad);
// unwrap should be fine since we ensured the vector size before
let value = buf.try_into().unwrap();
if let Err(err) = server.c_its_events.cam_event.notify(conn, &value).await { if let Err(err) = server.c_its_events.cam_event.notify(conn, &value).await {
warn!("BLE: failed notifying connection of new CAM event: {err:?}"); warn!("BLE: failed notifying connection of new CAM event: {err:?}");
} }
} else {
warn!("BLE: CAM event too big with {} bytes", buf.len());
} }
Err(err) => warn!("BLE: CAM event {err}"), }
},
#[cfg(feature = "denm")] #[cfg(feature = "denm")]
Some(BleSendable::Denm(denm_event)) => match denm_event.serialize_ble_proto() { Some(BleSendable::Denm(denm_event)) => {
Ok(value) => { let mut buf = denm_event.serialize_ble_proto();
if buf.len() <= DENM_EVENT_SIZE {
// pad with zeros
let pad = alloc::vec![0u8; DENM_EVENT_SIZE - buf.len()];
buf.extend_from_slice(&pad);
// unwrap should be fine since we ensured the vector size before
let value = buf.try_into().unwrap();
if let Err(err) = server.c_its_events.denm_event.notify(conn, &value).await { if let Err(err) = server.c_its_events.denm_event.notify(conn, &value).await {
warn!("BLE: failed notifying connection of new DENM event: {err:?}"); warn!("BLE: failed notifying connection of new DENM event: {err:?}");
} }
} else {
warn!("BLE: DENM event too big with {} bytes", buf.len());
} }
Err(err) => warn!("BLE: DENM event {err}"), }
},
#[cfg(feature = "cam")]
Some(BleSendable::CamRaw(raw_msg)) => match raw_msg.serialize_ble_proto() {
Ok(value) => {
if let Err(err) = server.c_its_events.cam_raw.set(server, &value) {
warn!("BLE: failed setting new raw CAM value: {err:?}");
}
if let Err(err) = send_raw_notify(
server,
conn,
c_its_parser::standards::extensions::ItsMessageId::Cam,
)
.await
{
warn!("BLE: {err}");
}
}
Err(err) => warn!("BLE: Raw CAM too big: {err}"),
},
#[cfg(feature = "denm")]
Some(BleSendable::DenmRaw(raw_msg)) => match raw_msg.serialize_ble_proto() {
Ok(value) => {
if let Err(err) = server.c_its_events.denm_raw.set(server, &value) {
warn!("BLE: failed setting new raw DENM value: {err:?}");
}
if let Err(err) = send_raw_notify(
server,
conn,
c_its_parser::standards::extensions::ItsMessageId::Denm,
)
.await
{
warn!("BLE: {err}");
}
}
Err(err) => warn!("BLE: Raw DENM {err}"),
},
#[cfg(feature = "spat")]
Some(BleSendable::MapemRaw(raw_msg)) => match raw_msg.serialize_ble_proto() {
Ok(value) => {
if let Err(err) = server.c_its_events.mapem_raw.set(server, &value) {
warn!("BLE: failed setting new raw MAPEM value: {err:?}");
}
if let Err(err) = send_raw_notify(
server,
conn,
c_its_parser::standards::extensions::ItsMessageId::Mapem,
)
.await
{
warn!("BLE: {err}");
}
}
Err(err) => warn!("BLE: Raw MAPEM {err}"),
},
#[cfg(feature = "spat")]
Some(BleSendable::SpatemRaw(raw_msg)) => match raw_msg.serialize_ble_proto() {
Ok(value) => {
if let Err(err) = server.c_its_events.spatem_raw.set(server, &value) {
warn!("BLE: failed setting new raw SPATEM value: {err:?}");
}
if let Err(err) = send_raw_notify(
server,
conn,
c_its_parser::standards::extensions::ItsMessageId::Spatem,
)
.await
{
warn!("BLE: {err}");
}
}
Err(err) => warn!("BLE: Raw SPATEM {err}"),
},
None => {} None => {}
} }
} }
} }
async fn send_raw_notify<P: PacketPool>(
server: &Server<'_>,
conn: &GattConnection<'_, '_, P>,
msg_id: c_its_parser::standards::extensions::ItsMessageId,
) -> Result<(), alloc::string::String> {
let notify_buf = io::msg::RawNotify::from(msg_id)
.serialize_ble_proto()
.expect("BLE: Raw notify too big");
server
.c_its_events
.raw_notify
.notify(conn, &notify_buf)
.await
.map_err(|err| alloc::format!("failed notifying connection of new raw {msg_id:?}: {err:?}"))
}

146
src/io.rs
View file

@ -40,91 +40,20 @@ impl msg::RawMsgRx {
#[cfg(feature = "denm")] #[cfg(feature = "denm")]
impl msg::DenmEvent { impl msg::DenmEvent {
#[cfg(feature = "ble")] #[cfg(feature = "ble")]
pub const PROTO_SIZE: usize = 51; pub fn serialize_ble_proto(&self) -> alloc::vec::Vec<u8> {
#[cfg(feature = "ble")]
pub fn serialize_ble_proto(&self) -> Result<[u8; Self::PROTO_SIZE], alloc::string::String> {
use prost::Message as _; use prost::Message as _;
let mut data = [0u8; Self::PROTO_SIZE]; self.encode_to_vec()
let mut mut_buf = &mut data[..];
if let Err(err) = self.encode(&mut mut_buf) {
Err(alloc::format!("Buffer too small: {err:?}"))
} else {
Ok(data)
}
} }
} }
#[cfg(feature = "cam")] #[cfg(feature = "cam")]
impl msg::CamEvent { impl msg::CamEvent {
#[cfg(feature = "ble")] #[cfg(feature = "ble")]
pub const PROTO_SIZE: usize = 38; pub fn serialize_ble_proto(&self) -> alloc::vec::Vec<u8> {
#[cfg(feature = "ble")]
pub fn serialize_ble_proto(&self) -> Result<[u8; Self::PROTO_SIZE], alloc::string::String> {
use prost::Message as _; use prost::Message as _;
let mut data = [0u8; Self::PROTO_SIZE]; self.encode_to_vec()
let mut mut_buf = &mut data[..];
if let Err(err) = self.encode(&mut mut_buf) {
Err(alloc::format!("Buffer too small: {err:?}"))
} else {
Ok(data)
}
}
}
#[cfg(any(feature = "cam", feature = "denm", feature = "spat"))]
impl msg::RawMsgRx {
#[cfg(feature = "ble")]
pub const PROTO_SIZE: usize = 1400;
#[cfg(feature = "ble")]
pub fn serialize_ble_proto(&self) -> Result<[u8; Self::PROTO_SIZE], alloc::string::String> {
use prost::Message as _;
let mut data = [0u8; Self::PROTO_SIZE];
let mut mut_buf = &mut data[..];
if let Err(err) = self.encode(&mut mut_buf) {
Err(alloc::format!("Buffer too small: {err:?}"))
} else {
Ok(data)
}
}
}
#[cfg(all(
feature = "ble",
any(feature = "cam", feature = "denm", feature = "spat")
))]
impl From<c_its_parser::standards::extensions::ItsMessageId> for msg::RawNotify {
fn from(value: c_its_parser::standards::extensions::ItsMessageId) -> Self {
let message_type = value.as_u8().into();
Self { message_type }
}
}
#[cfg(any(feature = "cam", feature = "denm", feature = "spat"))]
impl msg::RawNotify {
#[cfg(feature = "ble")]
pub const PROTO_SIZE: usize = 2;
#[cfg(feature = "ble")]
pub fn serialize_ble_proto(self) -> Result<[u8; Self::PROTO_SIZE], alloc::string::String> {
use prost::Message as _;
let mut data = [0u8; Self::PROTO_SIZE];
let mut mut_buf = &mut data[..];
if let Err(err) = self.encode(&mut mut_buf) {
Err(alloc::format!("Buffer too small: {err:?}"))
} else {
Ok(data)
}
} }
} }
@ -485,11 +414,11 @@ impl msg::RawMsgTx {
} }
#[cfg(feature = "cam")] #[cfg(feature = "cam")]
impl From<&alloc::boxed::Box<c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::CAM>> impl From<alloc::boxed::Box<c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::CAM>>
for msg::CamEvent for msg::CamEvent
{ {
fn from( fn from(
value: &alloc::boxed::Box<c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::CAM>, value: alloc::boxed::Box<c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::CAM>,
) -> Self { ) -> Self {
use c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions; use c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions;
@ -500,14 +429,12 @@ impl From<&alloc::boxed::Box<c_its_parser::standards::cam_1_4_1::cam_pdu_descrip
.cam_parameters .cam_parameters
.basic_container .basic_container
.reference_position .reference_position
.clone()
.into(); .into();
let vehicle_role = value let vehicle_role = value
.cam .cam
.cam_parameters .cam_parameters
.low_frequency_container .low_frequency_container
.as_ref()
.and_then(|v| match v { .and_then(|v| match v {
cam_pdu_descriptions::LowFrequencyContainer::basicVehicleContainerLowFrequency( cam_pdu_descriptions::LowFrequencyContainer::basicVehicleContainerLowFrequency(
basic_vehicle_container_low_frequency, basic_vehicle_container_low_frequency,
@ -515,7 +442,7 @@ impl From<&alloc::boxed::Box<c_its_parser::standards::cam_1_4_1::cam_pdu_descrip
_ => None, _ => None,
}); });
let vehicle_data = match &value.cam.cam_parameters.high_frequency_container { let vehicle_data = match value.cam.cam_parameters.high_frequency_container {
cam_pdu_descriptions::HighFrequencyContainer::basicVehicleContainerHighFrequency( cam_pdu_descriptions::HighFrequencyContainer::basicVehicleContainerHighFrequency(
basic_vehicle_container_high_frequency, basic_vehicle_container_high_frequency,
) => Some(basic_vehicle_container_high_frequency.into()), ) => Some(basic_vehicle_container_high_frequency.into()),
@ -533,8 +460,8 @@ impl From<&alloc::boxed::Box<c_its_parser::standards::cam_1_4_1::cam_pdu_descrip
} }
#[cfg(feature = "cam")] #[cfg(feature = "cam")]
impl From<&c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::BasicVehicleContainerHighFrequency> for msg::VehicleContainer { impl From<c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::BasicVehicleContainerHighFrequency> for msg::VehicleContainer {
fn from(value: &c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::BasicVehicleContainerHighFrequency) -> Self { fn from(value: c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::BasicVehicleContainerHighFrequency) -> Self {
let heading_deg = if value.heading.heading_value.is_unavailable() { let heading_deg = if value.heading.heading_value.is_unavailable() {
None None
} else { } else {
@ -562,11 +489,11 @@ impl From<&c_its_parser::standards::cam_1_4_1::cam_pdu_descriptions::BasicVehicl
} }
#[cfg(feature = "denm")] #[cfg(feature = "denm")]
impl From<&alloc::boxed::Box<c_its_parser::standards::denm_2_2_1::denm_pdu_description::DENM>> impl From<alloc::boxed::Box<c_its_parser::standards::denm_2_2_1::denm_pdu_description::DENM>>
for msg::DenmEvent for msg::DenmEvent
{ {
fn from( fn from(
value: &alloc::boxed::Box<c_its_parser::standards::denm_2_2_1::denm_pdu_description::DENM>, value: alloc::boxed::Box<c_its_parser::standards::denm_2_2_1::denm_pdu_description::DENM>,
) -> Self { ) -> Self {
let denm_mgmt = &value.denm.management; let denm_mgmt = &value.denm.management;
@ -585,8 +512,7 @@ impl From<&alloc::boxed::Box<c_its_parser::standards::denm_2_2_1::denm_pdu_descr
let event_heading_deg = value let event_heading_deg = value
.denm .denm
.location .location
.as_ref() .and_then(|v| v.event_position_heading)
.and_then(|v| v.event_position_heading.clone())
.map(|v| { .map(|v| {
#[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)]
let conv = v.value.as_deg() as u32; let conv = v.value.as_deg() as u32;
@ -598,7 +524,6 @@ impl From<&alloc::boxed::Box<c_its_parser::standards::denm_2_2_1::denm_pdu_descr
let cc_tuple = value let cc_tuple = value
.denm .denm
.situation .situation
.as_ref()
.map(|v| v.event_type.cc_and_scc.to_u8_tuple()); .map(|v| v.event_type.cc_and_scc.to_u8_tuple());
let cause_code = cc_tuple.map(|v| v.0.into()); let cause_code = cc_tuple.map(|v| v.0.into());
let sub_cause_code = cc_tuple.map(|v| v.1.into()); let sub_cause_code = cc_tuple.map(|v| v.1.into());
@ -667,53 +592,6 @@ impl From<c_its_parser::standards::cdd_2_2_1::etsi_its_cdd::TrafficDirection> fo
} }
} }
#[cfg(any(feature = "cam", feature = "denm", feature = "spat"))]
impl TryFrom<&c_its_parser::ItsMessage<'_>> for msg::RawMsgRx {
type Error = alloc::string::String;
fn try_from(value: &c_its_parser::ItsMessage<'_>) -> Result<Self, Self::Error> {
let msg_id = c_its_parser::standards::extensions::ItsMessageId::from(value);
let payload = match value {
#[cfg(feature = "denm")]
c_its_parser::ItsMessage::DenmV1 {
geonetworking: _,
transport: _,
etsi,
} => etsi.encode_to_uper(),
#[cfg(feature = "denm")]
c_its_parser::ItsMessage::DenmV2 {
geonetworking: _,
transport: _,
etsi,
} => etsi.encode_to_uper(),
#[cfg(any(feature = "cam", feature = "cam_tx"))]
c_its_parser::ItsMessage::Cam {
geonetworking: _,
transport: _,
etsi,
} => etsi.encode_to_uper(),
#[cfg(feature = "spat")]
c_its_parser::ItsMessage::Spatem {
geonetworking: _,
transport: _,
etsi,
} => etsi.encode_to_uper(),
#[cfg(feature = "spat")]
c_its_parser::ItsMessage::Mapem {
geonetworking: _,
transport: _,
etsi,
} => etsi.encode_to_uper(),
}?;
Ok(Self {
msg_type: msg_id.as_u8().into(),
payload,
})
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {

View file

@ -8,16 +8,11 @@
// #![deny(clippy::large_stack_frames)] // #![deny(clippy::large_stack_frames)]
// we can't use UART I/O and GNSS at the same time // we can't use UART I/O and GNSS at the same time
#[cfg(all(feature = "uart", feature = "gnss_ubx", feature = "gnss_l67k"))] #[cfg(all(feature = "uart", feature = "gnss_ubx"))]
compile_error!( compile_error!("feature \"uart\" and feature \"gnss_ubx\" cannot be enabled at the same time");
"feature \"uart\" and features \"gnss_ubx\" or \"gnss_l67k\" cannot be enabled at the same time"
);
// autonomous CAM generation need a time and position source (aka _gnss) // autonomous CAM generation need a time and position source (aka _gnss)
#[cfg(all(feature = "cam_tx", not(feature = "_gnss")))] #[cfg(all(feature = "cam_tx", not(feature = "_gnss")))]
compile_error!("feature \"cam_tx\" needs a time and position source (either GNSS or UART)"); compile_error!("feature \"cam_tx\" needs a time and position source (either GNSS or UART)");
// we can't have both GNSS drivers enabled at the same time
#[cfg(all(feature = "gnss_ubx", feature = "gnss_l67k"))]
compile_error!("feature \"gnss_ubx\" and feature \"gnss_l67k\" cannot be enabled at the same time");
// at least one V2X feature needs to be enabled // at least one V2X feature needs to be enabled
#[cfg(not(any(feature = "spat", feature = "cam", feature = "denm")))] #[cfg(not(any(feature = "spat", feature = "cam", feature = "denm")))]
compile_error!("at least one V2X feature (\"spat\", \"cam\" or \"denm\") needs to be enabled"); compile_error!("at least one V2X feature (\"spat\", \"cam\" or \"denm\") needs to be enabled");
@ -34,8 +29,6 @@ use c_its_parser::standards::extensions::ItsStationType;
use critical_section::Mutex; use critical_section::Mutex;
use crossbeam_queue::ArrayQueue; use crossbeam_queue::ArrayQueue;
use embassy_executor::Spawner; use embassy_executor::Spawner;
#[cfg(feature = "gnss_l67k")]
use embassy_gps::gps::l76k;
use esp_backtrace as _; use esp_backtrace as _;
use esp_hal::clock::CpuClock; use esp_hal::clock::CpuClock;
use esp_hal::timer::timg::TimerGroup; use esp_hal::timer::timg::TimerGroup;
@ -58,7 +51,6 @@ mod io;
mod screen; mod screen;
#[cfg(feature = "gnss_ubx")] #[cfg(feature = "gnss_ubx")]
mod ubx; mod ubx;
mod util;
const WIFI_CHANNEL: radio::Channel = 180; const WIFI_CHANNEL: radio::Channel = 180;
const WIFI_TXPOWER: i8 = 10; // dBm, 2..20 const WIFI_TXPOWER: i8 = 10; // dBm, 2..20
@ -69,9 +61,9 @@ const GN_IS_MOBILE: bool = true;
#[cfg(feature = "cam_tx")] #[cfg(feature = "cam_tx")]
const OWN_STATION_TYPE: ItsStationType = ItsStationType::Cyclist; const OWN_STATION_TYPE: ItsStationType = ItsStationType::Cyclist;
#[cfg(feature = "cam_tx")] #[cfg(feature = "cam_tx")]
const OWN_VEHICLE_WIDTH: u8 = 7; // in 10cm steps! const OWN_VEHICLE_WIDTH: u8 = 5; // in 10cm steps!
#[cfg(feature = "cam_tx")] #[cfg(feature = "cam_tx")]
const OWN_VEHICLE_LENGTH: u16 = 18; // in 10cm steps! const OWN_VEHICLE_LENGTH: u16 = 20; // in 10cm steps!
#[cfg(feature = "_uart")] #[cfg(feature = "_uart")]
const SERIAL_FIFO_SIZE_THLD: u8 = 100; // hardware has max. 128 byte const SERIAL_FIFO_SIZE_THLD: u8 = 100; // hardware has max. 128 byte
@ -220,46 +212,9 @@ async fn main(spawner: Spawner) -> ! {
#[cfg(feature = "ble")] #[cfg(feature = "ble")]
{ {
let controller = ble::make_controller(peripherals.BT); let controller = ble::make_controller(peripherals.BT);
let serial = &mac.as_bytes()[3..6]; spawner.spawn(ble::run(controller).expect("Failed to spawn BLE task"));
let name = alloc::format!(
"C-ITS ESP {:02x}:{:02x}:{:02x}",
serial[0],
serial[1],
serial[2]
);
let short_name = alloc::format!("V2X {:02x}{:02x}", serial[1], serial[2]); // max 8 chars!
let fw_revision = core::env!("GIT_REVISION");
let sw_revision = util::get_feature_list().join(",");
spawner.spawn(
ble::run(
controller,
name,
short_name,
ble::DeviceInfo::new(&mac.to_string(), fw_revision, &sw_revision),
)
.expect("Failed to spawn BLE task"),
);
} }
// Setup GNSS:
// Seeed XIAO L67K:
// RX: D7/ GPIO12
// TX: D6/ GPIO11
// WAKEUP: D0/ GPIO1 -> HIGH for active, LOW for Sleep
// RESET: D2/ GPIO25 -> HIGH for normal, LOW for Reset
#[cfg(feature = "gnss_l67k")]
spawner.spawn(
gnss_l67k_task(
peripherals.GPIO1,
peripherals.GPIO25,
peripherals.UART0,
peripherals.GPIO12,
peripherals.GPIO11,
)
.expect("Failed to spawn GNSS task"),
);
// U-Blox module: // U-Blox module:
// RX: D7/ GPIO12 // RX: D7/ GPIO12
// TX: D6/ GPIO11 // TX: D6/ GPIO11
@ -392,12 +347,14 @@ async fn main(spawner: Spawner) -> ! {
println!("{}", ubx::pretty_print_nav_sat(packet)); println!("{}", ubx::pretty_print_nav_sat(packet));
} }
ublox::proto27::PacketRef::NavPvt(pvt) => { ublox::proto27::PacketRef::NavPvt(pvt) => {
// error can be ignored b/c it's just when no GNSS fix yet match applogic::GnssFix::try_from(pvt) {
if let Ok(pos_state) = applogic::GnssFix::try_from(pvt) { Ok(pos_state) => {
critical_section::with(|cs| { critical_section::with(|cs| {
let gnss_update_ref = GNSS_UPDATE.borrow(cs); let gnss_update_ref = GNSS_UPDATE.borrow(cs);
gnss_update_ref.replace(Some(pos_state)); gnss_update_ref.replace(Some(pos_state));
}); });
}
Err(err) => warn!("{err}"),
} }
// update GNSS HB on screen // update GNSS HB on screen
@ -526,36 +483,16 @@ async fn main(spawner: Spawner) -> ! {
ItsMessage::Mapem { ItsMessage::Mapem {
geonetworking: _, geonetworking: _,
transport: _, transport: _,
ref etsi, etsi,
} => { } => state.handle_mapem(&etsi),
state.handle_mapem(etsi);
// Send data to BLE thread
#[cfg(feature = "ble")]
match io::msg::RawMsgRx::try_from(&msg) {
Ok(data) => {
ble::update(ble::BleSendable::MapemRaw(data));
}
Err(err) => warn!("Failed to create RawMsgRx: {err}"),
}
}
#[cfg(feature = "spat")] #[cfg(feature = "spat")]
ItsMessage::Spatem { ItsMessage::Spatem {
geonetworking: _, geonetworking: _,
transport: _, transport: _,
ref etsi, etsi,
} => { } => {
if state.initialized() { if state.initialized() {
state.handle_spatem(etsi); state.handle_spatem(&etsi);
}
// Send data to BLE thread
#[cfg(feature = "ble")]
match io::msg::RawMsgRx::try_from(&msg) {
Ok(data) => {
ble::update(ble::BleSendable::SpatemRaw(data));
}
Err(err) => warn!("Failed to create RawMsgRx: {err}"),
} }
} }
@ -563,48 +500,33 @@ async fn main(spawner: Spawner) -> ! {
ItsMessage::Cam { ItsMessage::Cam {
geonetworking: _, geonetworking: _,
transport: _, transport: _,
ref etsi, etsi,
} => { } => {
#[cfg(feature = "cam")] #[cfg(feature = "cam")]
applogic::cam::handle_cam(etsi); applogic::cam::handle_cam(&etsi);
// Send data to BLE thread // Send data to BLE thread
#[cfg(all(feature = "ble", feature = "cam"))] #[cfg(all(feature = "ble", feature = "cam"))]
{ critical_section::with(|cs| {
ble::update(ble::BleSendable::Cam(etsi.into())); let ble_update_ref = ble::TX_DATA.borrow(cs);
ble_update_ref.replace(Some(ble::BleSendable::Cam(etsi.into())));
// raw data only when it's a full CAM });
if etsi.cam.cam_parameters.low_frequency_container.is_some() {
match io::msg::RawMsgRx::try_from(&msg) {
Ok(data) => {
ble::update(ble::BleSendable::CamRaw(data));
}
Err(err) => warn!("Failed to create RawMsgRx: {err}"),
}
}
}
} }
#[cfg(feature = "denm")] #[cfg(feature = "denm")]
ItsMessage::DenmV2 { ItsMessage::DenmV2 {
geonetworking: _, geonetworking: _,
transport: _, transport: _,
ref etsi, etsi,
} => { } => {
applogic::denm::handle_denm(etsi); applogic::denm::handle_denm(&etsi);
// Send data to BLE thread // Send data to BLE thread
#[cfg(feature = "ble")] #[cfg(feature = "ble")]
{ critical_section::with(|cs| {
ble::update(ble::BleSendable::Denm(etsi.into())); let ble_update_ref = ble::TX_DATA.borrow(cs);
ble_update_ref.replace(Some(ble::BleSendable::Denm(etsi.into())));
match io::msg::RawMsgRx::try_from(&msg) { });
Ok(data) => {
ble::update(ble::BleSendable::DenmRaw(data));
}
Err(err) => warn!("Failed to create RawMsgRx: {err}"),
}
}
} }
#[cfg(feature = "denm")] #[cfg(feature = "denm")]
ItsMessage::DenmV1 { ItsMessage::DenmV1 {
@ -813,59 +735,6 @@ fn get_its_header<'p>(
} }
} }
#[cfg(feature = "gnss_l67k")]
#[allow(clippy::large_stack_frames, reason = "GNSS driver needs some space")]
#[embassy_executor::task]
async fn gnss_l67k_task(
gps_wakeup: esp_hal::peripherals::GPIO1<'static>,
gps_reset: esp_hal::peripherals::GPIO25<'static>,
uart: esp_hal::peripherals::UART0<'static>,
uart_rx: esp_hal::peripherals::GPIO12<'static>,
uart_tx: esp_hal::peripherals::GPIO11<'static>,
) {
use embassy_gps::gps::GpsFsm;
let mut gps = l76k::esp::L76kFsm::new_sep(
l76k::esp::GpsHw {
reinit: gps_reset,
standby: gps_wakeup,
},
|| {
esp_hal::uart::Uart::new(uart, esp_hal::uart::Config::default().with_baudrate(9600))
.expect("Failed to create UART for GNSS")
.with_rx(uart_rx)
.with_tx(uart_tx)
.into_async()
},
)
.await;
let mut fix_drop_message = false;
loop {
if let Ok(Some(embassy_gps::types::GpsEvent::Fix(fix))) = gps.step().await {
// drop every second message as we always get each fix twice
fix_drop_message = !fix_drop_message;
if fix_drop_message {
// send to main thread
let pos_state = applogic::GnssFix {
time: fix.get_timestamp(),
latitude_deg: fix.latitude_deg,
longitude_deg: fix.longitude_deg,
heading_deg: fix.true_course_deg,
speed_mps: fix.speed_over_ground,
};
critical_section::with(|cs| {
let gnss_update_ref = GNSS_UPDATE.borrow(cs);
gnss_update_ref.replace(Some(pos_state));
});
}
} else {
// FSM will recover automatically from errors and ignore other event types
}
}
}
#[cfg(feature = "gnss_ubx")] #[cfg(feature = "gnss_ubx")]
#[embassy_executor::task] #[embassy_executor::task]
async fn gnss_ubx_config(reset_pin: esp_hal::peripherals::GPIO25<'static>) { async fn gnss_ubx_config(reset_pin: esp_hal::peripherals::GPIO25<'static>) {

View file

@ -3,7 +3,6 @@
use embedded_graphics::prelude::*; use embedded_graphics::prelude::*;
use embedded_graphics::{geometry, mono_font, pixelcolor, primitives, text}; use embedded_graphics::{geometry, mono_font, pixelcolor, primitives, text};
#[cfg(feature = "spat")]
use crate::applogic; use crate::applogic;
pub struct DisplaySize { pub struct DisplaySize {
@ -24,10 +23,6 @@ where
prev_state: ScreenState, prev_state: ScreenState,
hb_state: bool, hb_state: bool,
gnss_hb_state: bool, gnss_hb_state: bool,
// assets
#[cfg(feature = "spat")]
bike_image: tinytga::Tga<'static, pixelcolor::Rgb565>,
} }
#[derive(Debug, Default, PartialEq, Eq)] #[derive(Debug, Default, PartialEq, Eq)]
@ -84,7 +79,6 @@ where
primitives::PrimitiveStyleBuilder::new() primitives::PrimitiveStyleBuilder::new()
.fill_color(pixelcolor::Rgb565::new(10, 50, 0)) .fill_color(pixelcolor::Rgb565::new(10, 50, 0))
.build(); .build();
#[cfg(feature = "spat")]
const BLANK_SIGNAL_STYLE: primitives::PrimitiveStyle<pixelcolor::Rgb565> = const BLANK_SIGNAL_STYLE: primitives::PrimitiveStyle<pixelcolor::Rgb565> =
primitives::PrimitiveStyleBuilder::new() primitives::PrimitiveStyleBuilder::new()
.fill_color(pixelcolor::Rgb565::CSS_GRAY) .fill_color(pixelcolor::Rgb565::CSS_GRAY)
@ -100,19 +94,12 @@ where
const BIG_HEIGHT_THLD: u16 = 172; const BIG_HEIGHT_THLD: u16 = 172;
pub fn new(target: D, display_size: DisplaySize) -> Self { pub fn new(target: D, display_size: DisplaySize) -> Self {
#[cfg(feature = "spat")]
let data = include_bytes!("../graphics/Sinnbild_Radfahrer_StVO_1992-25px-white.tga");
#[cfg(feature = "spat")]
let bike_image = tinytga::Tga::from_slice(data).expect("Failed to parse TGA image");
Self { Self {
target, target,
size: display_size, size: display_size,
prev_state: ScreenState::Uninitialized, prev_state: ScreenState::Uninitialized,
hb_state: false, hb_state: false,
gnss_hb_state: false, gnss_hb_state: false,
#[cfg(feature = "spat")]
bike_image,
} }
} }
@ -120,11 +107,8 @@ where
if self.prev_state != state { if self.prev_state != state {
match &state { match &state {
ScreenState::Uninitialized | ScreenState::Initial => self.draw_slash_screen()?, ScreenState::Uninitialized | ScreenState::Initial => self.draw_slash_screen()?,
#[cfg(feature = "spat")]
ScreenState::GlosaSearching(_glosa_searching) => self.draw_glosa_searching()?, ScreenState::GlosaSearching(_glosa_searching) => self.draw_glosa_searching()?,
#[cfg(feature = "spat")]
ScreenState::GlosaFound(glosa_found) => self.draw_glosa_found(glosa_found)?, ScreenState::GlosaFound(glosa_found) => self.draw_glosa_found(glosa_found)?,
#[cfg(feature = "spat")]
ScreenState::GlosaLocked(glosa_data) => { ScreenState::GlosaLocked(glosa_data) => {
let prev_glosa_data = let prev_glosa_data =
if let ScreenState::GlosaLocked(prev_glosa_data) = &self.prev_state { if let ScreenState::GlosaLocked(prev_glosa_data) = &self.prev_state {
@ -172,7 +156,6 @@ where
} }
// on big screns: uses full screen width and height from 250 to 280 pixels // on big screns: uses full screen width and height from 250 to 280 pixels
#[cfg(feature = "gnss_ubx")]
pub fn update_gnss( pub fn update_gnss(
&mut self, &mut self,
pvt: &ublox::nav_pvt::proto27::NavPvtRef, pvt: &ublox::nav_pvt::proto27::NavPvtRef,
@ -226,28 +209,7 @@ where
Ok(()) Ok(())
} }
/// Clears the screen, but keeps the GNSS status row
fn clear(&mut self) -> Result<(), D::Error> fn clear(&mut self) -> Result<(), D::Error>
where
D: DrawTarget<Color = pixelcolor::Rgb565>,
{
// this only differes from clear_all on big screens
if self.is_big_height() {
#[allow(clippy::cast_sign_loss)]
let max_y = (250 + self.size.offset_top) as u32;
primitives::Rectangle::new(
geometry::Point::new(0, 0),
geometry::Size::new(self.size.width.into(), max_y),
)
.into_styled(Self::BK_STYLE)
.draw(&mut self.target)
} else {
self.clear_all()
}
}
fn clear_all(&mut self) -> Result<(), D::Error>
where where
D: DrawTarget<Color = pixelcolor::Rgb565>, D: DrawTarget<Color = pixelcolor::Rgb565>,
{ {
@ -288,13 +250,13 @@ where
Ok(()) Ok(())
} }
#[cfg(feature = "spat")] #[allow(unused)]
fn draw_glosa_searching(&mut self) -> Result<(), D::Error> { fn draw_glosa_searching(&mut self) -> Result<(), D::Error> {
// clear whole display and draw text // clear whole display and draw text
self.clear()?; self.clear()?;
text::Text::with_alignment( text::Text::with_alignment(
"Searching\nfor upcoming\nintersection...", "Searching...",
geometry::Point::new(i32::from(self.size.width) / 2, 130 + self.size.offset_top), geometry::Point::new(i32::from(self.size.width) / 2, 130 + self.size.offset_top),
Self::DEFAULT_TEXT_STYLE, Self::DEFAULT_TEXT_STYLE,
text::Alignment::Center, text::Alignment::Center,
@ -304,7 +266,7 @@ where
Ok(()) Ok(())
} }
#[cfg(feature = "spat")] #[allow(unused)]
fn draw_glosa_found(&mut self, data: &applogic::GlosaFound) -> Result<(), D::Error> { fn draw_glosa_found(&mut self, data: &applogic::GlosaFound) -> Result<(), D::Error> {
// clear whole display and draw text // clear whole display and draw text
self.clear()?; self.clear()?;
@ -329,8 +291,7 @@ where
// uses full screen width and height // uses full screen width and height
// - from 0 to 105+67 = 172 pixels for small screens // - from 0 to 105+67 = 172 pixels for small screens
// - from 0 to 105+67+20 = 192 pixels for big screens // - from 0 to 105+67+20 = 192 pixels for big screens
#[cfg(feature = "spat")] #[allow(unused)]
#[allow(clippy::too_many_lines)]
fn draw_glosa( fn draw_glosa(
&mut self, &mut self,
data: &applogic::GlosaSignalInfo, data: &applogic::GlosaSignalInfo,
@ -344,9 +305,9 @@ where
&& prev.signal_groups.len() != num_signals && prev.signal_groups.len() != num_signals
{ {
// clear everything if number of signals has changed // clear everything if number of signals has changed
self.clear()?; self.clear();
} else { } else {
// only clear maneuver and timing area otherwise (lane type will clear itself) // only clear maneuver and timing area otherwise
let sig_total_height = 67 + if is_big_height { 20 } else { 0 }; let sig_total_height = 67 + if is_big_height { 20 } else { 0 };
primitives::Rectangle::new( primitives::Rectangle::new(
geometry::Point::new(0, 105 + self.size.offset_top), geometry::Point::new(0, 105 + self.size.offset_top),
@ -394,38 +355,7 @@ where
.into_styled(style) .into_styled(style)
.draw(&mut self.target)?; .draw(&mut self.target)?;
// mark bike lanes which are not a vehicle lane, too // TODO: draw lane type?
let lane_symbol_y_pos = 75;
if sig.usages.contains(&applogic::v2x::map::UsageType::Vehicle) {
// clear area
primitives::Rectangle::new(
geometry::Point::new(
centerline - (45 / 2),
lane_symbol_y_pos + self.size.offset_top,
),
geometry::Size::new(45, 25),
)
.into_styled(Self::BK_STYLE)
.draw(&mut self.target)?;
} else if sig.usages.contains(&applogic::v2x::map::UsageType::Bike) {
// bike symbol (45x25px)
embedded_graphics::image::Image::new(
&self.bike_image,
geometry::Point::new(
centerline - (45 / 2) + 1,
lane_symbol_y_pos + self.size.offset_top,
),
)
.draw(&mut self.target)?;
} else {
text::Text::with_alignment(
"?",
geometry::Point::new(centerline, lane_symbol_y_pos + 24 + self.size.offset_top),
Self::DEFAULT_TEXT_STYLE,
text::Alignment::Center,
)
.draw(&mut self.target)?;
}
// draw maneuver // draw maneuver
text::Text::with_alignment( text::Text::with_alignment(
@ -479,83 +409,43 @@ where
#[allow(unused)] #[allow(unused)]
fn draw_slash_screen(&mut self) -> Result<(), D::Error> { fn draw_slash_screen(&mut self) -> Result<(), D::Error> {
self.clear_all()?; let text_style = mono_font::MonoTextStyle::new(&profont::PROFONT_18_POINT, Self::COLOR_FG);
let centerline = i32::from(self.size.width) / 2; self.clear()?;
if cfg!(feature = "spat") { let sig_width = i32::from(self.size.width) / 3;
let sig_width = i32::from(self.size.width) / 3; let circle_dia = 50;
let circle_dia = 50; let circle_margin = (sig_width - circle_dia) / 2;
let circle_margin = (sig_width - circle_dia) / 2;
for (idx, style) in [Self::RD_STYLE, Self::YE_STYLE, Self::GN_STYLE] for (idx, style) in [Self::RD_STYLE, Self::YE_STYLE, Self::GN_STYLE]
.iter() .iter()
.enumerate() .enumerate()
{ {
#[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)] #[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)]
let offset = (idx as i32) * sig_width; let offset = (idx as i32) * sig_width;
primitives::Circle::new( primitives::Circle::new(
geometry::Point::new(offset + circle_margin, 15 + self.size.offset_top), geometry::Point::new(offset + circle_margin, 15 + self.size.offset_top),
circle_dia.cast_unsigned(), circle_dia.cast_unsigned(),
)
.into_styled(*style)
.draw(&mut self.target)?;
}
// draw welcome text
#[cfg(feature = "spat")]
embedded_graphics::image::Image::new(
&self.bike_image,
geometry::Point::new(centerline - (45 / 2) + 1, 75 + self.size.offset_top),
)
.draw(&mut self.target)?;
text::Text::with_alignment(
"C-ITS Signal Phase\nWaiting for GNSS...",
geometry::Point::new(centerline, 130 + self.size.offset_top),
Self::MID_TEXT_STYLE,
text::Alignment::Center,
)
.draw(&mut self.target)?;
} else {
text::Text::with_alignment(
"C-ITS Companion",
geometry::Point::new(centerline, 130 + self.size.offset_top),
Self::DEFAULT_TEXT_STYLE,
text::Alignment::Center,
) )
.into_styled(*style)
.draw(&mut self.target)?; .draw(&mut self.target)?;
} }
// print enabled features // draw welcome text
let centerline = i32::from(self.size.width) / 2;
text::Text::with_alignment( text::Text::with_alignment(
&alloc::format!( "C-ITS Signal Phase\nWaiting for GNSS...",
"Features:\n{}", geometry::Point::new(centerline, 130 + self.size.offset_top),
crate::util::get_rx_feature_list().join(",") text_style,
),
geometry::Point::new(centerline, 190 + self.size.offset_top),
Self::SMALL_TEXT_STYLE,
text::Alignment::Center, text::Alignment::Center,
) )
.draw(&mut self.target)?; .draw(&mut self.target)?;
let tx_features = crate::util::get_tx_feature_list();
if !tx_features.is_empty() {
text::Text::with_alignment(
&tx_features.join(","),
geometry::Point::new(centerline, 225 + self.size.offset_top),
Self::SMALL_TEXT_STYLE,
text::Alignment::Center,
)
.draw(&mut self.target)?;
}
Ok(()) Ok(())
} }
} }
#[cfg(feature = "spat")]
fn maneuver_to_str(value: applogic::v2x::map::Maneuvers) -> alloc::string::String { fn maneuver_to_str(value: applogic::v2x::map::Maneuvers) -> alloc::string::String {
alloc::format!( alloc::format!(
"{}{}{}", "{}{}{}",

View file

@ -1,71 +0,0 @@
//! Some stuff used at several places
use alloc::vec::Vec;
#[allow(unused)]
pub(crate) fn get_rx_feature_list() -> Vec<&'static str> {
let mut features = alloc::vec![];
if cfg!(feature = "cam") {
features.push("cam");
}
if cfg!(feature = "denm") {
features.push("denm");
}
if cfg!(feature = "spat") {
features.push("map");
features.push("spat");
}
features
}
#[allow(unused)]
pub(crate) fn get_tx_feature_list() -> Vec<&'static str> {
let mut features = alloc::vec![];
if cfg!(feature = "cam_tx") {
features.push("auto-cam");
}
if cfg!(feature = "uart") {
features.push("uart-tx");
}
features
}
#[allow(unused)]
pub(crate) fn get_feature_list() -> Vec<&'static str> {
let mut features = alloc::vec![];
if cfg!(feature = "gnss_ubx") {
features.push("gnss_ubx");
}
if cfg!(feature = "gnss_l67k") {
features.push("gnss_l67k");
}
if cfg!(feature = "cam_tx") {
features.push("cam_tx");
}
if cfg!(feature = "cam") {
features.push("cam");
}
if cfg!(feature = "denm") {
features.push("denm");
}
if cfg!(feature = "spat") {
features.push("spat");
}
if cfg!(feature = "spat_debug") {
features.push("spat_debug");
}
if cfg!(feature = "screen") {
features.push("screen");
}
if cfg!(feature = "uart") {
features.push("uart");
}
if cfg!(feature = "ble") {
features.push("ble");
}
features
}