Compare commits

...

82 Commits

Author SHA1 Message Date
King Kévin 8ea411fd8a doc: added custom EDID programming 2022-08-19 16:45:23 +02:00
King Kévin 18926c4cc9 doc: add firmware link 2022-08-09 10:50:42 +02:00
King Kévin 94a112b154 doc: CEC tester 2022-08-08 19:45:21 +02:00
King Kévin 23511e68e1 doc: add v2 pictures 2022-08-08 19:43:27 +02:00
King Kévin 7358be50e2 doc: fix part position 2022-08-08 19:42:35 +02:00
King Kévin bf869eee8d lib: update repo 2022-08-08 19:42:19 +02:00
King Kévin 46d106d99c doc: update to v2 capabilities 2022-07-13 13:42:55 +02:00
King Kévin d72dba822c doc: add v2 changes 2022-07-13 13:42:19 +02:00
King Kévin 867e6949b7 brd: tune length matching 2022-07-13 10:49:27 +02:00
King Kévin 4e82cef602 brd: fix snake spacing 2022-07-13 10:44:11 +02:00
King Kévin fa94f37ba8 brd: re-fix pad ground keepout 2022-07-13 10:32:08 +02:00
King Kévin 58eacec914 sch: fix HDMI position 2022-07-13 10:25:16 +02:00
King Kévin 3060b0dc05 brd: fix pad ground keepout 2022-07-13 10:12:42 +02:00
King Kévin ce234c7b01 brd: place refdes 2022-07-12 18:35:38 +02:00
King Kévin 034ddca6f0 brd: minor, add sheet title 2022-07-12 18:28:09 +02:00
King Kévin 759e93f5b7 brd: minor, fix drc 2022-07-12 18:25:28 +02:00
King Kévin 84d4db186d brd: fix inner layer via 2022-07-12 18:20:48 +02:00
King Kévin 4f18284b9e sch: fix HDMI position 2022-07-12 18:20:24 +02:00
King Kévin f3c0a314bc sch: add position corrections 2022-07-12 16:32:21 +02:00
King Kévin 66a4f4a6c8 brd: add tab position 2022-07-12 16:12:18 +02:00
King Kévin f0fe042e87 make: make panel fab faster 2022-07-12 15:56:01 +02:00
King Kévin 83f775ae09 brd: fix pin header text 2022-07-12 15:41:29 +02:00
King Kévin 0ed8f07910 brd: minor 5V routing fix 2022-07-12 15:39:34 +02:00
King Kévin ed8c064687 brd: tune inter-diff-pair length 2022-07-12 15:28:20 +02:00
King Kévin 9581f99519 brd: fix QR code rotation 2022-07-12 14:57:25 +02:00
King Kévin b66dfda066 brd: fix outline and text 2022-07-12 14:49:28 +02:00
King Kévin 8768c787f8 brd: route changes 2022-07-12 14:26:10 +02:00
King Kévin ecc0d8434e sch: improve routing 2022-07-12 14:25:54 +02:00
King Kévin 45681e2751 sch: complete BOM 2022-07-12 13:49:42 +02:00
King Kévin 0527253b29 sch: minor fixes 2022-07-12 13:39:32 +02:00
King Kévin aaaa7a9e06 sch: remove unused UART RX 2022-07-12 13:36:33 +02:00
King Kévin 8ca03d7661 sch: add sink DDC pull-up 2022-07-12 13:36:10 +02:00
King Kévin 0230a77cd5 sch: fix source DDC pull-up 2022-07-12 13:24:57 +02:00
King Kévin 7b81cfd1ac sch: rename HPD 2022-07-12 13:21:15 +02:00
King Kévin f5707eb56d sch: rename source/sink 2022-07-12 13:19:21 +02:00
King Kévin 977d2d6cc7 sch: remove unused EEPROM 2022-07-12 13:14:17 +02:00
King Kévin 0f76fd4089 brd: fix via 2022-06-24 18:45:20 +02:00
King Kévin b207b61db9 sch: minor, fix BoM 2022-06-24 18:41:28 +02:00
King Kévin d83cfc5fe3 make: fix default rule 2022-06-24 18:41:06 +02:00
King Kévin 8b9c72f70c sch: complete BoM 2022-06-24 18:36:57 +02:00
King Kévin e72c683999 brd: fix outline thickness 2022-06-24 18:36:37 +02:00
King Kévin cafca73743 doc: update development to makefile 2022-06-24 18:00:49 +02:00
King Kévin cb7aa78b06 brd: add revision 2022-06-24 17:56:51 +02:00
King Kévin bc8a9bfc1d make: remove git id from revision 2022-06-24 17:56:35 +02:00
King Kévin ddfbc49814 brd: remove gnd under pad 2022-06-24 17:54:53 +02:00
King Kévin c19bc12a7a brd: complete first routing 2022-06-24 17:44:48 +02:00
King Kévin d90cd5f8b5 lib: add QR url 2022-06-24 17:44:14 +02:00
King Kévin 2afed4573d sch: improve routability 2022-06-24 17:43:56 +02:00
King Kévin 9f2e004521 sch: complete first routing 2022-06-23 18:27:20 +02:00
King Kévin 15302eeda9 lib: improve hdmi symbol 2022-06-23 18:27:02 +02:00
King Kévin 5422ab7704 lib: add dip switch 2022-06-23 18:26:32 +02:00
King Kévin 156ef34a0e llib: add exported parts 2022-06-23 14:53:47 +02:00
King Kévin e0d9b8377c ignore kicad temp 2022-06-23 14:53:13 +02:00
King Kévin 0c9f27138d lib: add dip switch 2022-06-23 14:52:56 +02:00
King Kévin 9446c621ae switch to KiCAD 2022-06-23 12:51:28 +02:00
King Kévin 71caf5f793 switch to version 2 2022-06-23 12:44:33 +02:00
King Kévin 932f0e07e9 doc: minor, ref slide 2022-06-22 14:46:19 +02:00
King Kévin 9a67bac5f1 doc: add research 2022-06-22 14:44:44 +02:00
King Kévin ece0aa4730 doc: add availability 2022-06-22 14:34:02 +02:00
King Kévin 432de7d2c8 doc: move limitions higher 2022-06-22 14:27:49 +02:00
King Kévin 3d6d42d1d8 doc: mention programmer 2022-06-21 15:17:00 +02:00
King Kévin 7531f02225 doc: improve installation 2022-06-21 11:09:39 +02:00
King Kévin dabf167b5f doc: document ground issue 2022-06-21 11:08:53 +02:00
King Kévin 473587a9e8 doc: improve short description 2022-06-20 15:48:27 +02:00
King Kévin be24d31ddd doc: integrate pictures 2022-06-20 15:38:46 +02:00
King Kévin 588e570e0d doc: add v1 pictures 2022-06-20 15:36:35 +02:00
King Kévin fd9d7780c9 doc: add v0 pictures 2022-06-20 15:36:07 +02:00
King Kévin 38f031e202 lib: update repo 2022-06-20 15:04:07 +02:00
King Kévin 162f540837 doc: add v1 changes 2022-06-20 13:30:26 +02:00
King Kévin b35c3526d2 doc: add EDID copying instructions 2022-06-20 13:25:04 +02:00
King Kévin 9087beec8e doc: update usage for v1 2022-06-20 13:01:44 +02:00
King Kévin ff3fe4f2c4 doc: fix numeros typos 2022-06-20 12:48:58 +02:00
King Kévin 132f2e1317 sch: improve naming 2022-06-20 12:40:32 +02:00
King Kévin daf23c9afe sch/brd: import design from 2022-07-27 2022-06-20 12:38:44 +02:00
King Kévin e59a0f732d lib: add HDMI plug 2022-06-20 12:33:11 +02:00
King Kévin dfc9010874 switch to version 1 2022-06-20 12:15:59 +02:00
King Kévin a23e5228da doc: describe version 2022-06-20 12:07:05 +02:00
King Kévin 43cb77c7b6 doc: minor, add interface information 2022-06-20 12:01:21 +02:00
King Kévin 7d6caee37e doc: document project 2022-06-20 11:57:52 +02:00
King Kévin c9adea88e4 sch/brd: import design from 2021-07-22 2022-06-20 11:57:35 +02:00
King Kévin 122543235d lib: add used parts 2022-06-20 11:03:09 +02:00
King Kévin 3b7e68fd46 set project name 2022-06-20 10:57:19 +02:00
60 changed files with 14217 additions and 3522 deletions

46
.gitignore vendored
View File

@ -1,31 +1,35 @@
# schematic lepton-EDA
*.sch
# board layout pcb-rnd
*.lht
*.lht.*
*.versioned.lht
# KiCAD
*.kicad_prl
*.kicad_pro-bak
*.xml
fp-info-cache
# temporary files
*~
*.versioned.sch
\#*\#
# outputs
*.svg
*.png
*.pdf
*.ps
*.zip
*.brd.*
*.ast
*.g2l
*.g3l
*.gbl
*.gbo
*.gbp
*.gbs
*.gko
*.gtl
*.gto
*.gtp
*.gts
*.xln
*.tdx
\#*\#
*.notes.txt
*.bom.csv
*.cost.csv
*.cpl.csv
*.versioned.*
fabrication
# scripts and utilities
*.json
*.rb
geda/footprints/
# panel files
panel.*
panel

View File

@ -1,10 +1,17 @@
config:
output: coraleda
output: kicad
pattern:
densityLevel: 'N'
lineWidth:
silkscreen: 0.2
polarityMark: none
preferManufacturer: false
preferManufacturer: true
smoothPadCorners: false
library:
- connector/hdmi-001s
- ic/eeprom_ft24c16a-e@l
- resistor/r0603
- capacitor/c0603
- mcu/st_stm8s003x3@p
- mechanical/dip-switch_dsicxxls@dsic07ls
- diode/led0805

View File

@ -0,0 +1,34 @@
v2
==
instead of an edge plug, the monitor connector is also a receptacle.
this prevents the firewall from sticking out of the monitor too much, particularly when installed in tight spaces.
it also allows to place the HDMI firewall inline even if you don't have access to the monitor's HDMI port.
finally it also allows the board to be manufactured more easily.
the programmer is now included in the firewall.
this offers very easy copy of the EDID data.
no need to use complex linux commands or stand-alone separate programmer.
the programmer uses the embedded EEPROM and acts as I²C slave.
a DIP switch allows to selectively block or forward interfaces.
v1
==
this version comes as dongle, which can directly be plugged in the monitor.
the impedance and length of the differential signal pairs are properly taken care of.
a breakable tab replaces the WP switch.
pads are still present to override the disabled WP and 5V.
the shield is not connected to ground, which causes EEPROM read errors with cheap HDMI cables skimping on the ground wire (pin 17).
the workaround is to scratch the solder mask near one of the HDMI receptacle shell tab and solder it.
v0
==
first working version.
based on the design of the original research.
the HDMI connectors are on opposite sides of the board to make the routing easy (the differential signals are straight lines).
the impedance does not seem to by optimal, leading to EMF leakage (reported by the original researchers).

View File

@ -1,19 +1,23 @@
this will describe how to generate the output file form the sources.
this will describe how to generate the output files form the sources.
requirements
============
to be able to generate the outputs you need following software:
to be able to generate the outputs, you need following software:
- rake: the central script taking care of generating the output files (Makefile is too cumbersome to parse files)
- make: takes care of generating the output files
- [QEDA](http://qeda.org/): to generate footprints for the parts
- [Lepton EDA](https://github.com/lepton-eda/lepton-eda): for the schematic capture
- [pcb-rnd](http://repo.hu/projects/pcb-rnd/): for the board layout
the output generation is automatized.
- [KiCad](https://www.kicad.org/): EDA software used for schematic capture and board layout
- [PcbDraw](https://github.com/yaqwsx/PcbDraw): to generate board layout rendering
- [KiKit](https://github.com/yaqwsx/KiKit): to generate fabrications files (Gerber, Excellon)
- [KiAuto](https://github.com/INTI-CMNB/KiAuto): to generate schematic printout (PDF)
- [KiBoM](https://github.com/SchrodingersGat/KiBoM): to generate Bill of Material (CSV)
compiling
=========
to generate schematic, BoM, board render, and fabrication output, run `make`.
library
-------
@ -35,26 +39,23 @@ sudo npm install --global
to generate the parts:
~~~
rake library
make lib
~~~
this will use the parts definition (.yaml files) in the `library` to generate [gEDA gschem](http://wiki.geda-project.org/geda:gaf)/[Lepton EDA](https://github.com/lepton-eda/lepton-eda) symbols (.sym files) in the `geda/symbols` folder, and [coralEDA pcb-rnd](http://repo.hu/projects/pcb-rnd/) footprints (.lht files) in the `coraleda/subc` folder.
only the QEDA parts in subfolders within `library` come from the [QEDA library](https://doc.qeda.org/library/), but the files are included in this project for simplicity and archiving purposes.
all other parts are custom and written for this project.
this will use the parts definition (.yaml files) in the `library` to generate the symbols (.sym files) and footprints used by KiCAD in the `kicad` folder.
schematic
---------
the `.sch` file is the schematic source file.
it has been drawn using [Lepton EDA](https://github.com/lepton-eda/lepton-eda).
the `.kicad_sch` file is the schematic source file.
it has been drawn using the [KiCAD eeschema](https://www.kicad.org/) schematic editor.
it uses standard symbols, and the ones in the `geda/symbols/` folder.
it uses standard symbols, and the ones in the `kicad/` folder.
most symbols are generated by QEDA as described above.
to export as pdf:
~~~
rake print
make print
~~~
BOM
@ -62,21 +63,30 @@ BOM
to export the bill of material (as CSV):
~~~
rake bom
make bom
~~~
board
-----
the `.lht` file is the board layout source file.
it has been drawn using [coralEDA pcb-rnd](http://repo.hu/projects/pcb-rnd/).
the `.kicad_brd` file is the board layout source file.
it has been drawn using the [KiCAD pcbnew](https://docs.kicad.org/6.0/en/pcbnew/pcbnew.html) PCB editor.
it uses the symbols from the `coraleda/subc/` folder.
most symbols are generated by QEDA as described above.
`oshw_logo.lht` is just the Open Source Hardware Logo.
it been generated from https://oshwlogo.cuvoodoo.info/.
it uses the footprints from the `kicad/` folder.
most footprints are generated by QEDA as described above.
to export gerber files for PCB manufacturer (and photo preview + overview document):
~~~
rake fabrication
make fabrication
~~~
versioning
----------
the source schematic and board layout do not include version information.
when generating schematic or board fabrication output, a copy of the source files with date and version information is done as `.versioned.` files.
the date corresponds to the last changes (i.e. commit).
the version is formatted as `v.r`:
- `v` corresponds to the major version information defined in `version`
- `r` corresponds to the total number of changes done to the source files

11
JLCPCB_CORRECTION.csv Normal file
View File

@ -0,0 +1,11 @@
package;x;y;rot
LEDC2012X80N;0;0;-90
UC1608X55N;0;0;-90
CAPC1608X92N;0;0;-90
SOT95P237X112-3N;0;0;180
CONNECTOR_MY-1220-03;0;-1.1;0
CONNECTOR_XKB_U262-24XN-4BV64;0;-1.3;180
CONNECTOR_U231-09XN-4BLRA00;0;-3.0;0
SOP254P976X355-14N;0;0;-90
SOP65P640X120-20N;0;0;-90
CONNECTOR_HDMI-001S;0;1.1;0
1 package x y rot
2 LEDC2012X80N 0 0 -90
3 UC1608X55N 0 0 -90
4 CAPC1608X92N 0 0 -90
5 SOT95P237X112-3N 0 0 180
6 CONNECTOR_MY-1220-03 0 -1.1 0
7 CONNECTOR_XKB_U262-24XN-4BV64 0 -1.3 180
8 CONNECTOR_U231-09XN-4BLRA00 0 -3.0 0
9 SOP254P976X355-14N 0 0 -90
10 SOP65P640X120-20N 0 0 -90
11 CONNECTOR_HDMI-001S 0 1.1 0

71
Makefile Normal file
View File

@ -0,0 +1,71 @@
# project file name (use for schematic and board layout)
NAME ?= hdmi_firewall
# path to qeda
QEDA := qeda
# read project version
VERSION := $(shell cat version)
# current date for stamping output
DATE = $(shell date +%Y-%m-%d)
# revision based on number of changes on schematic or board layout and current git commit
REVISION := $(shell git log --pretty=oneline "${NAME}.kicad_sch" "${NAME}.kicad_pcb" | wc -l)
# generate file with version information
VERSIONED_EXT = kicad_sch kicad_pcb kicad_pro json
define version_rule
%.versioned.$1: %.$1
cp $$< $$@
sed --in-place 's/\$$$$version\$$$$/${VERSION}/g' $$@
sed --in-place 's/\$$$$date\$$$$/${DATE}/g' $$@
sed --in-place 's/\$$$$revision\$$$$/${REVISION}/g' $$@
endef
$(foreach EXT,$(VERSIONED_EXT),$(eval $(call version_rule,$(EXT))))
all: print fabrication
print: ${NAME}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.bom.csv
# generate fabrication files (gerbers/drill/BoM/PnP)
FABRICATION_DIR := fabrication
fabrication: ${NAME}.versioned.kicad_sch ${NAME}.versioned.kicad_pcb
kikit fab jlcpcb --drc --assembly --schematic $^ ${FABRICATION_DIR}
# generate symbols and footprints from parts
lib:
$(QEDA) generate qeda
# generate printable version (PDF) of schematic
%.sch.pdf: %.versioned.kicad_sch %.versioned.kicad_pro
eeschema_do export $< .
mv $*.versioned.pdf $@
# generate render from layout (top side)
%.brd-top.png: %.versioned.kicad_pcb
pcbdraw --silent $< --dpi 600 $@
# generate render from layout (bottom side)
%.brd-bot.png: %.versioned.kicad_pcb
pcbdraw --silent $< --dpi 600 --back $@
# export Bill of Material (as CSV)
%.bom.csv: %.versioned.kicad_sch %.versioned.kicad_pro
eeschema_do bom_xml $< .
kibom $*.versioned.xml $@
# generate panel
PANEL_DIR := panel
panel: panel.kicad_pcb
panel.kicad_pcb: ${NAME}.versioned.kicad_pcb ${NAME}.versioned.kicad_pro ${NAME}.versioned.kicad_sch ${NAME}.versioned.json
kikit panelize -p ${NAME}.versioned.json ${NAME}.versioned.kicad_pcb $@
sed --in-place 's/\"missing_courtyard\": \"warning\"/\"missing_courtyard\": \"ignore\"/g' $(patsubst %.kicad_pcb,%.kicad_pro,$@) # the mouse bites don't have a courtyard
kikit fab jlcpcb --drc --assembly --missingError --schematic ${NAME}.versioned.kicad_sch $@ ${PANEL_DIR}
pcbdraw --silent $@ --dpi 600 panel.brd-top.png
pcbdraw --silent $@ --dpi 600 --back panel.brd-bot.png
clean:
rm -f $(foreach EXT,$(VERSIONED_EXT),${NAME}.versioned.$(EXT))
rm -f ${NAME}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.versioned.xml ${NAME}.bom.csv
rm -f ${NAME}.versioned.kicad_prl ${NAME}.versioned.kicad_pro-bak ${NAME}.versioned.xml ${NAME}.versioned.csv
rm -rf ${FABRICATION_DIR}
rm -f panel.kicad_pcb panel.kicad_pro
rm -rf ${PANEL_DIR}

214
README.md
View File

@ -1,7 +1,219 @@
these are the hardware design files for **insert project name here**.
The HDMI firewall prevents devices from hacking HDMI equipment, and vice-versa.
<img src="picture/front_v2.webp" title="front" height="250"/>
<img src="picture/back_v2.webp" title="back" height="250"/>
purpose
=======
HDMI is mainly used to transfer audio and video, but also offers a number of additional features (e.g. HDCP, CEC, HEC, ARC, MHL).
This increases the attack surface, and since the security of their implement in embedded devices is far from ideal, an attacker could exploit them and inject malicious code.
Now your unsuspicious video equipment is compromised and threatens your IT/network security.
And your monitor could then in turn hack back any other device connected to it.
For example, let's imagine you invite an external guest for a presentation inside your company.
You offer to connect to a smart TV or video-projector so he can show his slides.
This is the perfect opportunity for the guest to hack it.
Now your smart TV can act as a spy in your network.
Or next time an employee connects to the projector, his laptop is hacked back.
And voila, the innocent guest managed to infiltrate your company network, and can exfiltrate confidential information.
The HDMI firewall can block all additional interfaces, and only allow audio and video data transfer.
It is based on the research of Pierre-Michel Ricordel and José Lopes Esteves from ANSSI/SDE/ST/LSF presented at the IT security conference [SSTIC 2021](https://sstic.org/2021/presentation/un_pare_feu_pour_le_hdmi/).
Some security research and vulnerabilities around CEC and EDID are listed in [slide 4](https://www.sstic.org/media/SSTIC2021/SSTIC-actes/un_pare_feu_pour_le_hdmi/SSTIC2021-Slides-un_pare_feu_pour_le_hdmi-lopes-esteves_ricordel.pdf).
usage
=====
First plug the HDMI cable going to the monitor on the HDMI firewall on the port labeled **MONITOR**.
Then plug the HDMI cable going to the device on the HDMI firewall on the port labeled **DEVICE**.
That's it, your equipment (monitor and device) are now protected.
But the firewall should be fine tuned as described below.
The HDMI firewall comes with a generic HD profile, but this might not correspond to the capabilities of your monitor.
The resulting image could be distorted, or completely missing.
Thus, you first have to copy the Extended Display Identification Data (EDID) information of the equipment to protect.
This data includes information such as the supported resolutions.
The HDMI firewall can copy the EDID from the monitor:
1. ensure the firewall is connected to the monitor
1. unplug the device from the firewall
1. toggle the small switch labeled EDID/7 to the ALLOW/ON position
1. ensure the SDA/2 and SCL/3 switches are on the BLOCK/OFF position
1. plug the device to the firewall
1. this will power the firewall, which will copy the monitor EDID onto its internal memory, shown by a short blink of the ERROR LED
1. unplug the device, and switch back the EDID/7 switch to the BLOCK/OFF position so the firewall keeps and uses the copied EDID information
1. when connecting the device back in, you should see the same name as the monitor, with a '|' at the end, indicating you are using the EDID from the firewall
The HDMI firewall allows to select which interfaces are blocked using the switches.
The highest security is provided when blocking all lines by setting the switches to the BLOCK position.
If you still trust your equipment enough and want to use a feature, you can set the corresponding switch to the ALLOW/ON position:
- 5V: some monitors require this line to detect when a device is plugged in, and since currently no other information is transferred over this line, it is rather safe to enable it
- Display Data Channel (DDC): High-bandwidth Digital Content Protection (HDCP) uses this interface. To enable it, switch SDA and SCL on. Warning: since the EDID is also transferred over this interface, the firewall can't provide a write-protected copy of it. Instead the original monitor EDID is used, maybe not write-protected.
- Consumer Electronics Control (CEC): this interface allows to remotely control equipment, such as setting the volume and powering on/off all connected devices and monitors at once
- HDMI Ethernet Channel (HEC), Audio Return Channel (ARC), and Mobile High-Definition Link (MHL): to enable these interfaces, switch UTIL and HPD on to forward the HEAC+ and HEAC- lines
The HDMI firewall can also be used to provide custom EDID, as it sometimes is faulty in the monitor.
For that you need to program the raw binary EDID (with up to 1 extension block) onto the STM8S103 EEPROM using the RST and SWIM lines made available on the back of the board.
limitations
===========
The HDMI firewall use impedance controlled lines: 4-layer impedance controlled board, differential pair routing, intra- and inter-pair length matching.
This should allow and audio any video signal to be transmitted to the monitor.
But I only have 2K equipment I could test it on.
I could not test the firewall against 4K, 8K, or 3D capable monitors.
CEC remote control has been tested.
But I don't have any equipment using HDCP, HEC, ARC, or MHL.
Thus I could also not test these interfaces.
The firewall only supports EDID with up to 1 extension block.
This is the case for all monitors I've seen.
Some high end monitors supporting numerous features might have additional extensions blocks.
Thus the firewall might prevent from using the monitor to its full potential.
You can still use the original EDID from the monitor by setting the SDA/2 and SCL/3 switches to the ALLOW/ON position.
The DDC channel won't be firewalled anymore though.
Feel free to report any success or issues to `hdmi@cuvoodoo.info`.
availability
============
The HDMI firewall is available on [tindie](https://www.tindie.com/products/cuvoodoo/hdmi-firewall/).
The schematic pdf and board gerbers are available as [release](https://git.cuvoodoo.info/kingkevin/board/releases/tag/hdmi_firewall_v2).
firmware
========
The firmware and sources for the HDMI firewall embedded programmer are available [here](https://git.cuvoodoo.info/kingkevin/stm8s/src/branch/hdmi_firewall).
troubleshooting
===============
If the monitor does not detect the device or does not display anything (but should), try to re-enable the 5V forward (as per default) by switching the 5V/1 switch to ALLOW/ON.
If the ERROR LED stays on, it means copying the EDID failed:
- be sure the monitor is connected before you connect the device (which powers the firewall)
- be sure the SDA/2 and SCL/3 switches are set to BLOCK so the firewall can use the DDC interface to read the EDID
- the EDID of the monitor might be corrupted or have an invalid checksum, in which case the firewall will not copy it
- the firewall EEPROM memory has worn out or is defective (it should last 300 thousand copies)
custom EDID
===========
It is possible to write custom EDID on the HDMI firewall, for example because:
- the monitor's original EDID is corrupted
- you want to disable a feature or resolution causing your device to misbehave
- you want to re-enable a feature the monitor actually supports
- the KVM switch does not reflect the HDMI monitor change
- you want to do security research
For that you can use the debugging pins left on the board, and [program](https://git.cuvoodoo.info/kingkevin/stm8s/src/branch/hdmi_firewall/README.md) the raw EDID in the STM8S EEPROM area using an ST-LINK/V2 programmer.
If you switch EDID to the ALLOW position, the HDMI firewall's EEPROM is not write-protected (on devices shipped after 2022-08-19).
This allows to use the HDMI connection to write the EEPROM content using the DDC's I²C bus, and does not required an external programmer.
These instructions are for Linux.
For Windows see the instructions provided in the [original research slides](https://www.sstic.org/media/SSTIC2021/SSTIC-actes/un_pare_feu_pour_le_hdmi/SSTIC2021-Slides-un_pare_feu_pour_le_hdmi-lopes-esteves_ricordel.pdf) (untested).
Install tools to read/write I²C devices:
- for Debian-based distributions
~~~
sudo apt install i2c-tools
~~~
Make the I²C buses user accessible (under /dev/i2c-*):
~~~
sudo modprobe i2c-dev
~~~
Now we have to figure out which I²C bus corresponds to the HDMI port.
First list the available buses:
~~~
sudo i2cdetect -l
~~~
You should see something like this:
~~~
i2c-0 smbus SMBus PIIX4 adapter port 0 at 0b00 SMBus adapter
i2c-1 smbus SMBus PIIX4 adapter port 2 at 0b00 SMBus adapter
i2c-2 smbus SMBus PIIX4 adapter port 1 at 0b20 SMBus adapter
i2c-3 i2c AMDGPU DM i2c hw bus 0 I2C adapter
i2c-4 i2c AMDGPU DM i2c hw bus 1 I2C adapter
i2c-5 i2c AMDGPU DM i2c hw bus 2 I2C adapter
i2c-6 i2c AMDGPU DM i2c hw bus 3 I2C adapter
i2c-7 i2c AMDGPU DM aux hw bus 0 I2C adapter
i2c-8 i2c AMDGPU DM aux hw bus 2 I2C adapter
i2c-9 i2c AMDGPU DM aux hw bus 3 I2C adapter
i2c-10 i2c DPMST I2C adapter
i2c-11 i2c DPMST I2C adapter
~~~
Candidate buses are 3 to 9, used by the GPU (number after i2c- in the first column).
Disconnect everything from the HDMI port, and scan for devices on each I²C bus (replace BUS with the bus number):
~~~
sudo i2cdetect -y BUS
~~~
Since nothing is connected, no device should be detected, and the output should look like this:
~~~
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
~~~
Now connect the HDMI firewall on the device side to your HDMI port and re-scan for devices.
If you see the following result, you found the I²C bus of the HDMI port.
Else continue with the next bus.
~~~
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
~~~
Write your custom EDID data `edid.bin` to the HDMI firewall (replace BUS with corresponding bus number):
~~~
for addr in `seq 0 255`; do echo $addr; sudo i2cset -y BUS 0x50 $addr 0x`xxd -p -l 1 -s $addr edid.bin`; done
~~~
To verify the data has been written correctly, compare original data with the one on the EEPROM:
~~~
# display original dumped data
xxd -g 1 edid.bin
# display data written on EEPROM
sudo i2cdump -y BUS 0x50
~~~
Once writing the EDID to the HDMI firewall memory succeeded:
- re-enable write protection by toggling the EDID switch to the BLOCK position
- re-plug the HDMI firewall for the device to retrieve the newly written EDID
To read and play with EDID under Linux, you can use the tips provided for the previous [HDMI firewall v1](https://git.cuvoodoo.info/kingkevin/board/src/tag/hdmi_firewall_v1/README.md).

181
Rakefile
View File

@ -1,181 +0,0 @@
# encoding: utf-8
# ruby: 2.1.0
=begin
Rakefile to manage hardware projects
uses Lepton EDA for schematic and pcb-rnd for board layouts.
Rakefile instead of Makefile for better text file parsing capabilities.
=end
require 'rake/clean'
require 'csv' # to export BOM and costs
# =================
# project variables
# =================
# common name used for file names
name = "template"
# project version, read from "version" file
raise "define project version in 'version' file" unless File.exist? "version"
version = IO.read("version").split("\n")[0]
# current date for stamping output
date = Time.now.strftime("%Y-%m-%d")
# revision based on number of changes on schematic or board layout and current git commit
changes = `git log --pretty=oneline "#{name}.sch" "#{name}.lht" | wc -l`.chomp.to_i
commit = `git rev-parse --short HEAD`.chomp
revision = "#{changes} (#{commit})"
# path to qeda"
qeda = "qeda"
# ==========
# main tasks
# ==========
desc "main building task"
task :default => [:print, :fabrication, :bom, :pnp]
desc "print schematic and layout (as pdf)"
prints = [ "#{name}.sch.pdf", "#{name}.brd.pdf", "#{name}.brd-top.svg", "#{name}.brd-bottom.svg" ]
task :print => prints
CLEAN.include([ "#{name}.versioned.sch", "#{name}.versioned.lht" ])
CLOBBER.include(prints)
desc "generate fabrication gerbers (as archive)"
gerbers = [ "#{name}.brd.asb", "#{name}.brd.ast", "#{name}.brd.gbl", "#{name}.brd.gbo", "#{name}.brd.gbp", "#{name}.brd.gbs", "#{name}.brd.gko", "#{name}.brd.gtl", "#{name}.brd.gto", "#{name}.brd.gtp", "#{name}.brd.gts", "#{name}.brd.xln", "#{name}.brd.g2l", "#{name}.brd.g3l" ]
fab = [ "#{name}.brd.zip" ]
task :fabrication => fab
CLEAN.include(gerbers)
CLOBBER.include(fab)
desc "generate symbols and footprints from parts"
task :library do
sh "#{qeda} config output geda"
sh "#{qeda} generate ."
sh "#{qeda} config output coraleda"
sh "#{qeda} generate ."
end
desc "export BOMs from schematic"
boms = [ "#{name}.bom.csv" ]
task :bom => boms
CLOBBER.include(boms)
desc "export PnP placement"
pnps = [ "#{name}.cpl.csv" ]
task :pnp => pnps
CLOBBER.include(pnps)
# ===============
# file generation
# ===============
desc "generate schematic with version information all symbols embedded"
rule ".versioned.sch" => ".sch" do |t|
sh "cp #{t.source} #{t.name}"
sh "lepton-embed --embed #{t.name} 2> /dev/null"
sh "sed --in-place 's/\\$version\\$/#{version}/' #{t.name}"
sh "sed --in-place 's/\\$date\\$/#{date}/' #{t.name}"
sh "sed --in-place 's/\\$revision\\$/#{revision}/' #{t.name}"
end
desc "generate board layout with version information"
rule ".versioned.lht" => ".lht" do |t|
sh "cp #{t.source} #{t.name}"
sh "sed --in-place 's/\\$version\\$/#{version}/' #{t.name}"
sh "sed --in-place 's/\\$date\\$/#{date}/' #{t.name}"
sh "sed --in-place 's/\\$revision\\$/#{revision}/' #{t.name}"
end
desc "generate printable version (PDF) of schematic"
rule ".sch.pdf" => ".versioned.sch" do |t|
sh "lepton-cli export --color --paper=iso_a4 --layout=landscape --output=#{t.name} #{t.source} 2> /dev/null"
end
desc "generate printable version (PostScript) of board layout"
rule ".brd.ps" => ".versioned.lht" do |t|
sh "pcb-rnd -x ps --ps-color --media A4 --psfile #{t.name} #{t.source} 2> /dev/null"
end
desc "generate printable version (PDF) of board layout"
rule ".brd.pdf" => ".brd.ps" do |t|
sh "ps2pdf -sPAPERSIZE=a4 -dEPSCrop #{t.source} #{t.name}"
end
desc "generate photo realistic picture from layout (top side)"
rule ".brd-top.svg" => ".versioned.lht" do |t|
sh "pcb-rnd -x svg --photo-mode --outfile #{t.name} #{t.source} 1> /dev/null"
end
desc "generate photo realistic picture from layout (bottom side)"
rule ".brd-bottom.svg" => ".versioned.lht" do |t|
sh "pcb-rnd -x svg --photo-mode --flip --outfile #{t.name} #{t.source} 1> /dev/null"
end
desc "archive gerbers"
rule ".brd.zip" => ".versioned.lht" do |t|
base = File.basename(t.source, ".versioned.lht")
dir = "fabrication"
sh "mkdir #{dir}" unless File.directory?(dir)
sh "pcb-rnd -x cam gerber:JLC_PCB --outfile #{dir}/#{base}.brd #{t.source} 2> /dev/null"
sh "zip --quiet #{t.name} #{dir}/*"
end
desc "generate BOM file from schematic"
rule ".bom.csv" => ".sch" do |t|
attributes = ["device", "value", "description", "footprint", "manufacturer", "mpn", "datasheet", "lcsc", "digikey"]
bom_data = bom2(t.prerequisites[0], attributes)
CSV.open(t.name, "wb") do |csv|
all_attributes = ["refdes","qty"] + attributes
csv << all_attributes
bom_data.each do |line|
csv << all_attributes.collect{|attribute| line[attribute]}
end
end
end
desc "generate pick-and-place file from board"
rule ".cpl.csv" => [".versioned.lht", "mass_prop.sh", "pnp_fab.tab"] do |t|
sh "./mass_prop.sh #{t.prerequisites[0]} pnp_fab.tab" # add fab placement offsets
sh "pcb-rnd -x XY --xyfile #{t.name} --xy-unit mm --format 'JLCPCB' --vendor jlcpcb #{t.prerequisites[0]}" # export XY file in JLCPCB format
end
# ================
# helper functions
# ================
# generate gnetlist bom2 and parse them
# arguments: schematic=schematic to use, attributes=attributes to use for generating bom2
# returns an array of hash. key is the attribute name, value is the attribute value
def bom2(schematic, attributes)
to_return = []
# force attributes to be an array
attributes = case attributes
when String
[attributes]
when Array
attributes
else
[attributes.to_s]
end
# generate bom2
list = `lepton-netlist --backend bom2 --backend-option attribs=#{attributes*','} --quiet --output - #{schematic} 2> /dev/null`
list = list.each_line {|l| '"' + l + '"' + '\n' }
list.gsub!(/^(.+)/, '"\1')
list.gsub!(/(.+)$/, '\1"')
list.gsub!(/(?!http):(?!\/\/)/, '\1":"\2') # protect the values between ':' (such as URLs)
# parse bom2
csv = CSV.parse(list, col_sep: ":", quote_char: '"')
if csv.empty? then
$stderr.puts "no parts found for BOM"
return []
end
csv[1..-1].each do |row|
line = {}
row.each_index do |col|
line[csv[0][col]] = row[col] unless row[col] == "unknown"
end
to_return << line
end
return to_return
end

42
bom.ini Normal file
View File

@ -0,0 +1,42 @@
[BOM_OPTIONS]
ignore_dnf = 0
number_rows = 0
group_connectors = 1
test_regex = 0
merge_blank_fields = 1
output_file_name = %O%V
[IGNORE_COLUMNS]
; Any column heading that appears here will be excluded from the Generated BoM
; Titles are case-insensitive
Part
Part Lib
Footprint
Footprint Lib
Build Quantity
sheetpath
[COLUMN_ORDER]
; Columns will apear in the order they are listed here
; Titles are case-insensitive
References
Value
Quantity Per PCB
Description
Part
Part Lib
Footprint
Footprint Lib
Build Quantity
LCSC
Datasheet
[GROUP_FIELDS]
; List of fields used for sorting individual components into groups
; Components which match (comparing *all* fields) will be grouped together
; Field names are case-insensitive
Part
Part Lib
Value
Footprint
Footprint Lib

View File

@ -1,421 +0,0 @@
# footprint generated from CuVoodoo Land Pattern
# author: King Kévin
# version: 1
# date: 2019-05-13
li:pcb-rnd-subcircuit-v6 {
ha:subc.1 {
uid = any_24_ASCII_characters_
ha:attributes {
footprint = open source hardware logo
}
ha:data {
li:padstack_prototypes {
}
li:objects {
}
li:layers {
ha:top-silkscreen {
lid = 1
ha:type {
top = 1
silk = 1
}
li:objects {
ha:line.2{
clearance = 0
x1 = 0.15mm
y1 = 1.8mm
x2 = 0.75mm
y2 = 1.8mm
thickness = 0.3mm
}
ha:line.3{
clearance = 0
x1 = 1.8mm
y1 = 5.8500000000000005mm
x2 = 1.8mm
y2 = 6.45mm
thickness = 0.3mm
}
ha:line.4{
clearance = 0
x1 = 5.8500000000000005mm
y1 = 1.8mm
x2 = 6.45mm
y2 = 1.8mm
thickness = 0.3mm
}
ha:line.5{
clearance = 0
x1 = 1.8mm
y1 = 0.15mm
x2 = 1.8mm
y2 = 0.75mm
thickness = 0.3mm
}
ha:line.6{
clearance = 0
x1 = 0.15mm
y1 = 2.4mm
x2 = 0.75mm
y2 = 2.4mm
thickness = 0.3mm
}
ha:line.7{
clearance = 0
x1 = 2.4mm
y1 = 5.8500000000000005mm
x2 = 2.4mm
y2 = 6.45mm
thickness = 0.3mm
}
ha:line.8{
clearance = 0
x1 = 5.8500000000000005mm
y1 = 2.4mm
x2 = 6.45mm
y2 = 2.4mm
thickness = 0.3mm
}
ha:line.9{
clearance = 0
x1 = 2.4mm
y1 = 0.15mm
x2 = 2.4mm
y2 = 0.75mm
thickness = 0.3mm
}
ha:line.10{
clearance = 0
x1 = 0.15mm
y1 = 3mm
x2 = 0.75mm
y2 = 3mm
thickness = 0.3mm
}
ha:line.11{
clearance = 0
x1 = 3mm
y1 = 5.8500000000000005mm
x2 = 3mm
y2 = 6.45mm
thickness = 0.3mm
}
ha:line.12{
clearance = 0
x1 = 5.8500000000000005mm
y1 = 3mm
x2 = 6.45mm
y2 = 3mm
thickness = 0.3mm
}
ha:line.13{
clearance = 0
x1 = 3mm
y1 = 0.15mm
x2 = 3mm
y2 = 0.75mm
thickness = 0.3mm
}
ha:line.14{
clearance = 0
x1 = 0.15mm
y1 = 3.5999999999999996mm
x2 = 0.75mm
y2 = 3.5999999999999996mm
thickness = 0.3mm
}
ha:line.15{
clearance = 0
x1 = 3.5999999999999996mm
y1 = 5.8500000000000005mm
x2 = 3.5999999999999996mm
y2 = 6.45mm
thickness = 0.3mm
}
ha:line.16{
clearance = 0
x1 = 5.8500000000000005mm
y1 = 3.5999999999999996mm
x2 = 6.45mm
y2 = 3.5999999999999996mm
thickness = 0.3mm
}
ha:line.17{
clearance = 0
x1 = 3.5999999999999996mm
y1 = 0.15mm
x2 = 3.5999999999999996mm
y2 = 0.75mm
thickness = 0.3mm
}
ha:line.18{
clearance = 0
x1 = 0.15mm
y1 = 4.2mm
x2 = 0.75mm
y2 = 4.2mm
thickness = 0.3mm
}
ha:line.19{
clearance = 0
x1 = 4.2mm
y1 = 5.8500000000000005mm
x2 = 4.2mm
y2 = 6.45mm
thickness = 0.3mm
}
ha:line.20{
clearance = 0
x1 = 5.8500000000000005mm
y1 = 4.2mm
x2 = 6.45mm
y2 = 4.2mm
thickness = 0.3mm
}
ha:line.21{
clearance = 0
x1 = 4.2mm
y1 = 0.15mm
x2 = 4.2mm
y2 = 0.75mm
thickness = 0.3mm
}
ha:line.22{
clearance = 0
x1 = 0.15mm
y1 = 4.8mm
x2 = 0.75mm
y2 = 4.8mm
thickness = 0.3mm
}
ha:line.23{
clearance = 0
x1 = 4.8mm
y1 = 5.8500000000000005mm
x2 = 4.8mm
y2 = 6.45mm
thickness = 0.3mm
}
ha:line.24{
clearance = 0
x1 = 5.8500000000000005mm
y1 = 4.8mm
x2 = 6.45mm
y2 = 4.8mm
thickness = 0.3mm
}
ha:line.25{
clearance = 0
x1 = 4.8mm
y1 = 0.15mm
x2 = 4.8mm
y2 = 0.75mm
thickness = 0.3mm
}
ha:line.26{
clearance = 0
x1 = 1.8mm
y1 = 1.35mm
x2 = 4.8mm
y2 = 1.35mm
thickness = 0.3mm
}
ha:line.27{
clearance = 0
x1 = 5.25mm
y1 = 1.8mm
x2 = 5.25mm
y2 = 4.8mm
thickness = 0.3mm
}
ha:line.28{
clearance = 0
x1 = 4.8mm
y1 = 5.25mm
x2 = 1.8mm
y2 = 5.25mm
thickness = 0.3mm
}
ha:line.29{
clearance = 0
x1 = 1.35mm
y1 = 4.8mm
x2 = 1.35mm
y2 = 1.8mm
thickness = 0.3mm
}
ha:arc.30{
clearance = 0
x = 1.8mm
y = 1.8mm
width = 0.45mm
height = 0.45mm
thickness = 0.3mm
astart = 0
adelta = -90
}
ha:arc.31{
clearance = 0
x = 4.8mm
y = 1.8mm
width = 0.45mm
height = 0.45mm
thickness = 0.3mm
astart = -90
adelta = -90
}
ha:arc.32{
clearance = 0
x = 4.8mm
y = 4.8mm
width = 0.45mm
height = 0.45mm
thickness = 0.3mm
astart = 180
adelta = -90
}
ha:arc.33{
clearance = 0
x = 1.8mm
y = 4.8mm
width = 0.45mm
height = 0.45mm
thickness = 0.3mm
astart = 90
adelta = -90
}
ha:line.34{
clearance = 0
x1 = 1.8mm
y1 = 1.8mm
x2 = 3mm
y2 = 1.8mm
thickness = 0.3mm
}
ha:line.35{
clearance = 0
x1 = 3mm
y1 = 1.8mm
x2 = 3mm
y2 = 3mm
thickness = 0.3mm
}
ha:line.36{
clearance = 0
x1 = 3mm
y1 = 3mm
x2 = 1.8mm
y2 = 3mm
thickness = 0.3mm
}
ha:line.37{
clearance = 0
x1 = 1.8mm
y1 = 3mm
x2 = 1.8mm
y2 = 1.8mm
thickness = 0.3mm
}
ha:line.38{
clearance = 0
x1 = 4.8mm
y1 = 1.8mm
x2 = 3.5999999999999996mm
y2 = 1.8mm
thickness = 0.3mm
}
ha:line.39{
clearance = 0
x1 = 3.5999999999999996mm
y1 = 1.8mm
x2 = 3.5999999999999996mm
y2 = 2.4mm
thickness = 0.3mm
}
ha:line.40{
clearance = 0
x1 = 3.5999999999999996mm
y1 = 2.4mm
x2 = 4.8mm
y2 = 2.4mm
thickness = 0.3mm
}
ha:line.41{
clearance = 0
x1 = 4.8mm
y1 = 2.4mm
x2 = 4.8mm
y2 = 3mm
thickness = 0.3mm
}
ha:line.42{
clearance = 0
x1 = 4.8mm
y1 = 3mm
x2 = 3.5999999999999996mm
y2 = 3mm
thickness = 0.3mm
}
ha:line.43{
clearance = 0
x1 = 1.8mm
y1 = 3.5999999999999996mm
x2 = 1.8mm
y2 = 4.8mm
thickness = 0.3mm
}
ha:line.44{
clearance = 0
x1 = 1.8mm
y1 = 4.199999999999999mm
x2 = 3mm
y2 = 4.199999999999999mm
thickness = 0.3mm
}
ha:line.45{
clearance = 0
x1 = 3mm
y1 = 3.5999999999999996mm
x2 = 3mm
y2 = 4.8mm
thickness = 0.3mm
}
ha:line.46{
clearance = 0
x1 = 3.5999999999999996mm
y1 = 3.5999999999999996mm
x2 = 3.5999999999999996mm
y2 = 4.8mm
thickness = 0.3mm
}
ha:line.47{
clearance = 0
x1 = 3.5999999999999996mm
y1 = 4.8mm
x2 = 4.199999999999999mm
y2 = 4.2mm
thickness = 0.3mm
}
ha:line.48{
clearance = 0
x1 = 4.199999999999999mm
y1 = 4.2mm
x2 = 4.799999999999999mm
y2 = 4.8mm
thickness = 0.3mm
}
ha:line.49{
clearance = 0
x1 = 4.799999999999999mm
y1 = 4.8mm
x2 = 4.799999999999999mm
y2 = 3.5999999999999996mm
thickness = 0.3mm
}
}
}
}
}
}
}

View File

@ -1,39 +0,0 @@
#!/bin/sh
#@@example qr(hello world, 1mm)
#@@purpose Generate QR code on silk
#@@desc Generate the specified QR code as silk lines
#@@params text,pixel_size,level
#@@thumbsize 2
#@@param:text ASCII text to encode
#@@param:pixel_size width and height of each pixel
#@@dim:pixel_size
#@@param:level error correction level
#@@optional:level
#@@enum:level:L low
#@@enum:level:H high
#@@default:L
libdir=""
for n in $PCB_RND_PCBLIB/parametric `dirname $0` /usr/local/share/pcb-rnd/pcblib/parametric /usr/share/pcb-rnd/pcblib/parametric
do
if test -f "$n/common.awk"
then
libdir="$n"
break
fi
done
if test -z "$libdir"
then
echo "pcblib/parametric/common.awk not found." >&2
exit 1
fi
awk -f $libdir/common.awk -f `dirname $0`/qr.awk -v "args=$*" -v gen=`basename $0` -v "genfull=$0"

View File

@ -1,62 +0,0 @@
function flush_line(x1, x2, y, w ,n,yy)
{
x1/=2
x2/=2
for(n = 0; n < 3; n++) {
yy = y*w + w/6 + w/3 * n
element_line(x1*w + w/6, yy, x2*w - w/6, yy, w/3)
}
element_line(x1*w + w/6, y*w + w/6, x1*w + w/6, (y+1)*w - w/6, w/3)
element_line(x2*w - w/6, y*w + w/6, x2*w - w/6, (y+1)*w - w/6, w/3)
}
BEGIN {
help_auto()
set_arg(P, "?pixel_size", "1mm")
proc_args(P, "text,pixel_size,level", "text")
pixel_size = parse_dim(P["pixel_size"])
element_begin("", "QR1", "qr(" P["text"] "," P["pixel_size"] "," P["level"] ")" ,0,0, 0,-mil(50))
print "# text=" P["text"]
cmd = "echo '" P["text"] "' | qrencode -t ASCII"
if (P["level"] != "") {
if (tolower(P["level"]) == "h")
cmd = cmd " -l H"
else if (tolower(P["level"]) == "l")
cmd = cmd " -l L"
}
y = 0;
while((cmd | getline line) > 0) {
line = line "-"
# print line
len = length(line)
start = ""
for(x = 1; x < len; x++) {
if (substr(line, x, 1) == "#") {
if (start == "")
start = x;
}
else {
if (start != "") {
flush_line(start, x, y, pixel_size)
start = ""
}
}
}
if (start != "")
flush_line(start, x, y, pixel_size)
y++;
}
# dimension(+spacing/aspect, -dia, +spacing/aspect, dia, "@" spacing*1.2 ";0", "dia")
element_end()
}

5
fp-lib-table Normal file
View File

@ -0,0 +1,5 @@
(fp_lib_table
(lib (name "qeda")(type "KiCad")(uri "${KIPRJMOD}/kicad/qeda.pretty")(options "")(descr ""))
(lib (name "kikit")(type "KiCad")(uri "${KIPRJMOD}/kicad/kikit.pretty")(options "")(descr ""))
(lib (name "custom")(type "KiCad")(uri "${KIPRJMOD}/kicad/custom.pretty")(options "")(descr ""))
)

2
gafrc
View File

@ -1,2 +0,0 @@
(source-library ".")
(component-library "./geda/symbols/")

View File

@ -1,18 +0,0 @@
v 20210407 2
P 200 0 200 200 1 0 0
{
T 250 50 5 6 0 1 0 0 1
pinnumber=1
T 250 50 5 6 0 0 0 0 1
pinseq=1
T 250 50 5 6 0 1 0 0 1
pinlabel=1
T 250 50 5 6 0 1 0 0 1
pintype=pwr
}
T 200 250 9 8 1 0 0 3 1
1V8
T 300 0 8 8 0 0 0 0 1
net=1V8:1
L 150 100 200 200 3 10 1 0 -1 -1
L 200 200 250 100 3 10 1 0 -1 -1

View File

@ -1,18 +0,0 @@
v 20210407 2
P 200 0 200 200 1 0 0
{
T 250 50 5 6 0 1 0 0 1
pinnumber=1
T 250 50 5 6 0 0 0 0 1
pinseq=1
T 250 50 5 6 0 1 0 0 1
pinlabel=1
T 250 50 5 6 0 1 0 0 1
pintype=pwr
}
T 200 250 9 8 1 0 0 3 1
3V3
T 300 0 8 8 0 0 0 0 1
net=3V3:1
L 150 100 200 200 3 10 1 0 -1 -1
L 200 200 250 100 3 10 1 0 -1 -1

View File

@ -1,18 +0,0 @@
v 20210407 2
P 200 0 200 200 1 0 0
{
T 250 50 5 6 0 1 0 0 1
pinnumber=1
T 250 50 5 6 0 0 0 0 1
pinseq=1
T 250 50 5 6 0 1 0 0 1
pinlabel=1
T 250 50 5 6 0 1 0 0 1
pintype=pwr
}
T 200 250 9 8 1 0 0 3 1
5V
T 300 0 8 8 0 0 0 0 1
net=5V:1
L 150 100 200 200 3 10 1 0 -1 -1
L 200 200 250 100 3 10 1 0 -1 -1

View File

@ -1,17 +0,0 @@
v 20210407 2
P 100 100 100 200 1 0 1
{
T 158 161 5 4 0 1 0 0 1
pinnumber=1
T 158 161 5 4 0 0 0 0 1
pinseq=1
T 158 161 5 4 0 1 0 0 1
pinlabel=1
T 158 161 5 4 0 1 0 0 1
pintype=pwr
}
L 0 100 200 100 3 0 0 0 -1 -1
T 300 50 8 10 0 0 0 0 1
net=GND:1
L 0 100 100 0 3 0 1 0 -1 -1
L 200 100 100 0 3 0 1 0 -1 -1

View File

@ -1,18 +0,0 @@
v 20210626 2
P 200 0 200 200 1 0 0
{
T 250 50 5 6 0 1 0 0 1
pinnumber=1
T 250 50 5 6 0 0 0 0 1
pinseq=1
T 250 50 5 6 0 1 0 0 1
pinlabel=1
T 250 50 5 6 0 1 0 0 1
pintype=pwr
}
T 200 250 9 8 1 0 0 3 1
VCC
T 300 0 8 8 0 0 0 0 1
net=VCC:1
L 150 100 200 200 3 10 1 0 -1 -1
L 200 200 250 100 3 10 1 0 -1 -1

View File

@ -1,18 +0,0 @@
v 20210407 2
P 200 0 200 200 1 0 0
{
T 250 50 5 6 0 1 0 0 1
pinnumber=1
T 250 50 5 6 0 0 0 0 1
pinseq=1
T 250 50 5 6 0 1 0 0 1
pinlabel=1
T 250 50 5 6 0 1 0 0 1
pintype=pwr
}
T 200 250 9 8 1 0 0 3 1
VTRG
T 300 0 8 8 0 0 0 0 1
net=VTRG:1
L 150 100 200 200 3 10 1 0 -1 -1
L 200 200 250 100 3 10 1 0 -1 -1

View File

@ -1,40 +0,0 @@
v 20210626 2
L 3000 900 3000 0 15 0 0 0 -1 -1
B 0 0 6000 1500 15 0 0 0 -1 -1 0 -1 -1 -1 -1 -1
L 0 900 6000 900 15 0 0 0 -1 -1
T 1000 700 9 10 1 1 0 0 1
date=$date$
T 4300 700 9 10 1 1 0 0 1
org=$organisation$
T 4300 400 9 10 1 1 0 0 1
authors=$authors$
T 3000 1200 9 14 1 1 0 4 1
title=TITLE
T 3100 400 15 8 1 0 0 0 1
AUTHORS:
T 3100 100 15 8 1 0 0 0 1
LICENCE:
T 100 100 15 8 1 0 0 0 1
REVISION:
T 100 1100 15 8 1 0 0 0 1
TITLE:
T 100 400 15 8 1 0 0 0 1
VERSION:
T 0 1600 8 10 0 0 0 0 1
graphical=1
T 3100 700 15 8 1 0 0 0 1
ORGANISATION:
T 100 700 15 8 1 0 0 0 1
DATE:
T 1000 400 9 10 1 1 0 0 1
version=$version$
T 1000 100 9 10 1 1 0 0 1
revision=$revision$
T 4300 100 9 10 1 1 0 0 1
licence=$licence$
T 0 1800 8 10 0 0 0 0 1
device=none
T 0 2000 8 10 0 0 0 0 1
footprint=none
T 0 2200 8 10 0 0 0 0 1
refdes=none

8979
hdmi_firewall.kicad_pcb Normal file

File diff suppressed because it is too large Load Diff

532
hdmi_firewall.kicad_pro Normal file
View File

@ -0,0 +1,532 @@
{
"board": {
"design_settings": {
"defaults": {
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.9,
"height": 2.3,
"width": 1.5
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"45_degree_only": false,
"min_clearance": 0.0
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [
"missing_courtyard|47600000|75000000|29b1b4a0-f91c-4150-9909-e799058c1a17|00000000-0000-0000-0000-000000000000",
"missing_courtyard|93050000|75000000|c900d9ed-661e-4ab6-9bb8-a2a410ddbd61|00000000-0000-0000-0000-000000000000",
"silk_over_copper|47800000|58796666|f0146902-4434-4b0f-b356-212cd68fedb2|e33f2640-6147-4605-84c4-295ca3d1c887",
"silk_over_copper|47800000|60906761|f0146902-4434-4b0f-b356-212cd68fedb2|47d2de52-f49e-423a-b420-37362595aee9",
"silk_over_copper|47825000|67400000|f0146902-4434-4b0f-b356-212cd68fedb2|6f3abfe8-c263-4876-98d2-147dbe24736a",
"silk_over_copper|47825000|82600000|f0146902-4434-4b0f-b356-212cd68fedb2|782042ff-c466-40ea-a84b-e728e059b563",
"silk_over_copper|47825000|82600000|f0146902-4434-4b0f-b356-212cd68fedb2|935faa4f-6a7f-4631-a892-1ec9563eb136",
"silk_over_copper|47850000|67400000|f0146902-4434-4b0f-b356-212cd68fedb2|6f3abfe8-c263-4876-98d2-147dbe24736a",
"silk_over_copper|47850000|82600000|f0146902-4434-4b0f-b356-212cd68fedb2|782042ff-c466-40ea-a84b-e728e059b563",
"silk_overlap|52100000|65850000|1fbc8561-7607-4b92-87be-b7668c3929a2|edb5444b-85b1-4659-9175-27370a62658c",
"silk_overlap|54450000|60475000|fd8d0bc5-33ee-4442-a8a5-b2a5c9983c1a|48e9f32c-cdbe-4e08-a674-21d729076b78",
"silk_overlap|54450000|62325000|c97d851f-3ea4-478a-a018-f69e7c125ce3|e59b4462-95cb-4da9-a869-9b9448da895d",
"silk_overlap|54450000|62325000|e59b4462-95cb-4da9-a869-9b9448da895d|c97d851f-3ea4-478a-a018-f69e7c125ce3",
"silk_overlap|66200000|61250000|c625e07b-3c96-4b3d-927b-281bf5eef6ec|2be3ae3e-925a-4090-bb02-3989648c170a",
"silk_overlap|66250000|62350000|2be3ae3e-925a-4090-bb02-3989648c170a|c625e07b-3c96-4b3d-927b-281bf5eef6ec"
],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"copper_edge_clearance": "error",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint_type_mismatch": "error",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "warning",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "error",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zone_has_empty_net": "error",
"zones_intersect": "error"
},
"rules": {
"allow_blind_buried_vias": false,
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.09,
"min_copper_edge_clearance": 0.19999999999999998,
"min_hole_clearance": 0.254,
"min_hole_to_hole": 0.254,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_silk_clearance": 0.0,
"min_through_hole_diameter": 0.19999999999999998,
"min_track_width": 0.09,
"min_via_annular_width": 0.125,
"min_via_diameter": 0.44999999999999996,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"use_height_for_length_calcs": true
},
"track_widths": [
0.0,
0.15,
0.2,
0.3
],
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
},
{
"diameter": 0.45,
"drill": 0.2
},
{
"diameter": 0.6,
"drill": 0.3
}
],
"zones_allow_external_fillets": false,
"zones_use_no_outline": true
},
"layer_presets": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_label_syntax": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "hdmi_firewall.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12.0,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6.0
},
{
"bus_width": 12.0,
"clearance": 0.19,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Thick",
"nets": [
"+5V",
"GND",
"Net-(C1-Pad2)",
"Net-(SW1-Pad14)"
],
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.3,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6.0
},
{
"bus_width": 12.0,
"clearance": 0.15,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Thin",
"nets": [],
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.15,
"via_diameter": 0.5,
"via_drill": 0.2,
"wire_width": 6.0
},
{
"bus_width": 12.0,
"clearance": 0.1778,
"diff_pair_gap": 0.1778,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.19177,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "diff",
"nets": [
"/CK+",
"/CK-",
"/D0+",
"/D0-",
"/D1+",
"/D1-",
"/D2+",
"/D2-",
"/HEAC_D+",
"/HEAC_D-",
"/HEAC_SNK+",
"/HEAC_SNK-"
],
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.19177,
"via_diameter": 0.45,
"via_drill": 0.2,
"wire_width": 6.0
}
],
"meta": {
"version": 2
},
"net_colors": null
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"specctra_dsn": "",
"step": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"drawing": {
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"ngspice": {
"fix_include_paths": true,
"fix_passive_vals": false,
"meta": {
"version": 0
},
"model_mode": 0,
"workbook_filename": ""
},
"page_layout_descr_file": "",
"plot_directory": "",
"spice_adjust_passive_values": false,
"spice_external_command": "spice \"%I\"",
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"43fc3289-82a7-492c-a423-3030e10115dc",
""
]
],
"text_variables": {}
}

2654
hdmi_firewall.kicad_sch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,586 @@
(footprint "qr" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 0)
(fp_text reference "QR*****" (at 0 9.75) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 9e6b350f-4f76-445c-8b14-e5fba0b3c339)
)
(fp_text value "qr" (at 0 -9.75) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp bf1afb24-41a3-4ce2-849b-41193908d732)
)
(fp_rect (start -1.25 -1.75) (end -0.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 008d9bf7-df0b-4f0e-9a3a-62d5e135d9fc))
(fp_rect (start 6.75 -5.25) (end 7.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 00938406-3197-4e78-9bf6-ec17e23fa7f9))
(fp_rect (start 0.25 -4.75) (end 0.75 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 01556b6f-db5c-4dc0-b16e-b8fc83d28094))
(fp_rect (start -1.25 -5.25) (end -0.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 018d1958-5221-4b77-9657-c7d8fac8a9e3))
(fp_rect (start -7.25 7.75) (end -6.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 02510734-50da-4e20-acb8-8016ab1a7e3b))
(fp_rect (start -6.75 7.75) (end -6.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 029b4955-b66d-4133-a388-80926b16133e))
(fp_rect (start 6.75 -1.75) (end 7.25 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 02e38b0a-ed5b-4463-94bf-9ce149b9ebe0))
(fp_rect (start -4.75 -0.25) (end -4.25 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 02ef10c7-adc0-41a6-b708-8d45908af5da))
(fp_rect (start 7.25 5.25) (end 7.75 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 03293cd0-8b40-46c8-9ae9-826fc80eef04))
(fp_rect (start -1.75 -4.25) (end -1.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 03502eb3-0d7d-40aa-8306-3088047130a0))
(fp_rect (start -0.75 0.75) (end -0.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 035ddf16-d9b4-471f-b23d-51008ca26b9d))
(fp_rect (start -7.25 2.25) (end -6.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 03af1ce5-e002-4293-9084-f50df3abcbe1))
(fp_rect (start 2.75 2.25) (end 3.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 03d7d2e9-51cd-43de-9126-65a1d258cc3c))
(fp_rect (start -6.75 -2.25) (end -6.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 04261d17-0901-45e9-a4ea-758c2550555f))
(fp_rect (start -6.75 2.75) (end -6.25 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 058d4ea5-7956-4028-84bd-671a4194265c))
(fp_rect (start 5.75 3.75) (end 6.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 05fbc8f9-3353-4c5e-a205-a59271af6b89))
(fp_rect (start -8.25 3.75) (end -7.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 066c73a1-a722-46cc-8c59-2f329c119b3a))
(fp_rect (start 6.25 6.25) (end 6.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0780f3d3-4f03-4b4c-9106-9850541bbc05))
(fp_rect (start 1.75 6.75) (end 2.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 08391784-b3e9-4414-9904-050300b66ac7))
(fp_rect (start -1.75 2.25) (end -1.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 08c918f7-8fb5-4ad0-ab08-9a9f491a36ba))
(fp_rect (start -5.25 -5.25) (end -4.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 08d9eea2-5847-45b8-a824-37958ec0380e))
(fp_rect (start -8.25 -4.25) (end -7.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0938dc38-2baf-4202-ada7-26e895329da7))
(fp_rect (start 7.75 -5.75) (end 8.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0b747d3e-5fa5-499e-af05-4957ada1603d))
(fp_rect (start -1.75 -0.25) (end -1.25 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0bdb8eb2-1208-443d-bd5d-80f93de32008))
(fp_rect (start 5.75 1.75) (end 6.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0d0f6bb0-c6fb-438b-87c7-53a70f3007f5))
(fp_rect (start -6.25 2.25) (end -5.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0df7b1ab-9fb2-42b6-b3ab-e3e30ff526f8))
(fp_rect (start 3.25 6.75) (end 3.75 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0ed367a8-9d3b-4a3b-8852-6aa44eba4480))
(fp_rect (start 6.25 3.75) (end 6.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0f415d0a-4861-4df6-82d1-d5757a33cd3e))
(fp_rect (start 5.25 1.25) (end 5.75 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 0f802ffe-949c-45e7-997f-da72150665b3))
(fp_rect (start 6.25 1.75) (end 6.75 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1017e9b7-1c96-4b0a-83da-67088d937cf5))
(fp_rect (start -4.75 -4.25) (end -4.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 111400f2-24a9-4c12-b3aa-d2f0601042d5))
(fp_rect (start 6.25 2.25) (end 6.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 11bb9ccc-265d-4091-bc67-2b936c3bbfb0))
(fp_rect (start 1.25 -4.75) (end 1.75 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 11be8715-7049-4601-ab56-81f88ab5e356))
(fp_rect (start -2.25 -0.75) (end -1.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 11f2076c-8d3e-4d5f-ba17-8bfcd34a30dc))
(fp_rect (start -5.25 -4.25) (end -4.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1310b6a0-7aa6-40a4-98e9-1419d49fcbf1))
(fp_rect (start 2.75 0.75) (end 3.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 132301c1-cab9-4592-ba51-e4e4a5fca339))
(fp_rect (start 6.25 -7.25) (end 6.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1347c0b5-22f7-4bbf-9d60-cb2a3270e2cc))
(fp_rect (start 6.75 -3.75) (end 7.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 138d1c7b-3e65-42ee-8299-496eea7b4bd8))
(fp_rect (start 0.25 0.75) (end 0.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 14880cbf-596e-4ff2-b58a-463f638716bf))
(fp_rect (start -0.25 -0.75) (end 0.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 14a4b050-8210-491a-a1b2-8cc4d72298cb))
(fp_rect (start 5.25 5.75) (end 5.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 14b2b7f2-4619-4d3c-9670-4575eccf336a))
(fp_rect (start 5.75 -6.25) (end 6.25 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 14c73277-ce2c-41c8-a77d-062150b40938))
(fp_rect (start -3.75 -5.75) (end -3.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 14ffd0cd-da4e-4694-8b98-0fa87d0daf61))
(fp_rect (start -6.25 6.75) (end -5.75 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 15ebf12b-eb90-45af-a73d-5bcf4cae7ba9))
(fp_rect (start 6.75 -1.25) (end 7.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 15f18e2c-8716-4735-92c1-4bee31d699b1))
(fp_rect (start -7.75 0.75) (end -7.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 165d50f2-5c54-4dd6-977f-bc2cb9520adc))
(fp_rect (start -8.25 -7.75) (end -7.75 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 169d7211-8d5c-4564-a95f-8904faf52384))
(fp_rect (start -5.25 2.75) (end -4.75 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 177e4de7-86f0-4c08-838c-ef52d77c4d19))
(fp_rect (start -8.25 -3.75) (end -7.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 17b08bdc-aca4-4a00-91c0-3b00312992a0))
(fp_rect (start -6.25 1.75) (end -5.75 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 17c0af7a-a819-4966-bb6b-9648cac7ad77))
(fp_rect (start 4.25 -1.25) (end 4.75 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1af7a4c7-94dc-4b16-a9ca-5e10175c9bb4))
(fp_rect (start -3.25 -3.75) (end -2.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1b6d3ba4-7c56-4af8-a492-5bd95715b300))
(fp_rect (start -1.25 -0.75) (end -0.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1b7ab684-3857-4d01-85a3-5f7563e52bf4))
(fp_rect (start -5.25 -2.25) (end -4.75 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1bcf33d0-f9be-4c1a-838d-9e335aeb9966))
(fp_rect (start 4.75 0.75) (end 5.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1bed4bfd-72bf-48c2-b894-058c57ac1dcc))
(fp_rect (start 3.75 -5.25) (end 4.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1c554959-db2d-459c-a889-54845516d0ff))
(fp_rect (start 3.75 -5.75) (end 4.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1ceb171a-ff7a-43ea-a0e9-5b513c0813e1))
(fp_rect (start -4.25 4.25) (end -3.75 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1cf9ef5c-71e6-4bb3-8cba-02da70c6bc64))
(fp_rect (start -5.75 -5.25) (end -5.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1e361ab6-2b75-4698-a40b-19e42cf7434d))
(fp_rect (start 1.25 -1.75) (end 1.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1f0c1b18-0fda-4f84-a744-0debf1b1221d))
(fp_rect (start -8.25 5.75) (end -7.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1f5a0567-4a9c-441a-be38-768cc7b7cdb3))
(fp_rect (start 4.75 -5.75) (end 5.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 1f8470d3-2fe2-4853-a1b0-19b09a8fa732))
(fp_rect (start 5.75 -8.25) (end 6.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 20c217e7-b916-4cc2-85ac-9dc2d0bb1dae))
(fp_rect (start 6.25 -6.25) (end 6.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 20d5dd0e-46b2-40db-98aa-6197af00ca3c))
(fp_rect (start 5.75 -7.25) (end 6.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2112cd90-6b85-481b-a7b7-58e10696e91e))
(fp_rect (start -5.25 -1.25) (end -4.75 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 21e42d35-42cc-423d-9ed0-fb3c8c3363b7))
(fp_rect (start 1.25 2.75) (end 1.75 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2209dcb9-e729-44a2-88e2-5ccc13def596))
(fp_rect (start -3.75 -3.75) (end -3.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2216986d-d734-4750-a2d1-f213d1a260c0))
(fp_rect (start 5.75 3.25) (end 6.25 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 221e0c16-e39a-4b3c-b849-d875252ebb39))
(fp_rect (start 7.75 -6.75) (end 8.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 222f5976-e602-43fd-86a1-b5ca30391bf5))
(fp_rect (start -7.75 -0.75) (end -7.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 22698583-9f09-4b33-9648-2f7fbcf89177))
(fp_rect (start -4.25 4.75) (end -3.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 22f05fb8-73e3-4c3d-810a-cae112e5205c))
(fp_rect (start 4.75 1.25) (end 5.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 241a7c35-28a8-4d76-b832-9af5a7a71b5e))
(fp_rect (start 1.75 -5.75) (end 2.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 24511be0-402a-46d0-8465-67c87fa85782))
(fp_rect (start 2.75 -6.75) (end 3.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2506bd70-32ff-4a58-97df-b7eac111fd85))
(fp_rect (start 4.25 0.25) (end 4.75 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 264145ae-9b08-47b1-a3c2-e34973db43ab))
(fp_rect (start -5.25 -7.25) (end -4.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 26e8b733-4e53-4a85-9f76-9b12f09efe3d))
(fp_rect (start -5.25 5.75) (end -4.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 27094ddc-5b0b-4d51-bc91-052e93536d53))
(fp_rect (start 4.75 -6.75) (end 5.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 27c1d2be-4e2b-4453-8eea-93364c92ffba))
(fp_rect (start 2.25 -6.75) (end 2.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 29096d1b-1332-4e78-9911-102589b9a4ba))
(fp_rect (start 5.25 3.75) (end 5.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2982d0ab-a03e-4749-85db-7873f8c49070))
(fp_rect (start -6.25 0.25) (end -5.75 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2a0566c8-99b0-4db5-b22c-6f31e0194ad3))
(fp_rect (start 2.25 -0.25) (end 2.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2a0f53ba-91ca-4a6c-80dd-860e5294e227))
(fp_rect (start -2.25 -2.75) (end -1.75 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2a4bdfcd-23da-466c-a641-2a6a7b59bba6))
(fp_rect (start 0.75 -1.75) (end 1.25 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2b795e9d-89b8-461e-a9b3-d5c0b38b4d37))
(fp_rect (start -2.75 -2.75) (end -2.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2bcfe39f-472b-47af-a282-496728ae0f7d))
(fp_rect (start -5.25 7.75) (end -4.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2c6b9901-cd8a-48be-b8f2-dce72e9ad4bb))
(fp_rect (start 7.25 -0.25) (end 7.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2dbad0ec-ad07-41f5-896e-85b7cf6d538b))
(fp_rect (start 4.75 -7.25) (end 5.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2df0154a-af6d-4896-87dd-f15f5743011e))
(fp_rect (start -6.25 -8.25) (end -5.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2e6ab65c-494b-4d79-88e6-b23e3a8a65d2))
(fp_rect (start 1.75 -4.75) (end 2.25 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2ec80302-2da3-40ff-b474-290de218fa68))
(fp_rect (start 1.75 -3.75) (end 2.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2ee14f4d-4e42-4dd1-8332-7e1304e5eade))
(fp_rect (start -6.25 3.75) (end -5.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2f18add8-f7ed-4a04-9fb8-ae5e9c1d7014))
(fp_rect (start 5.75 4.75) (end 6.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2f3205de-9db5-44c8-acda-d0153e426434))
(fp_rect (start 1.75 -7.25) (end 2.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 2fc31cee-dc7b-4190-a92f-97e518556aaf))
(fp_rect (start 4.75 3.75) (end 5.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 300340c0-c8c7-4413-ab6e-fb5740bf5664))
(fp_rect (start 3.25 -3.75) (end 3.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3087bcc5-0750-4887-bb27-bea5b09094bc))
(fp_rect (start 2.75 -5.75) (end 3.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 31478265-5f49-43ba-8cee-74ecb351bb43))
(fp_rect (start -7.25 6.75) (end -6.75 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 31b7ed19-462a-49cf-9480-c278cc306810))
(fp_rect (start 4.75 6.25) (end 5.25 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 31f84391-3c0b-46dd-90c2-f11faa8a520f))
(fp_rect (start -1.25 -3.25) (end -0.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 328c24be-d163-4aec-a236-78393f2e54bb))
(fp_rect (start -6.75 3.25) (end -6.25 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3434ab49-e488-46d3-9605-a2fdeab6208d))
(fp_rect (start -3.25 7.75) (end -2.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 357177fe-feb4-49f6-823f-6c20d5fe75b6))
(fp_rect (start -1.75 -2.75) (end -1.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 35b4a5da-15d3-4e3b-b0e6-4d21e026cb7d))
(fp_rect (start 3.75 -1.75) (end 4.25 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 372f4e64-1312-44d1-b652-57a936ab6227))
(fp_rect (start -3.75 2.25) (end -3.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 38086dd8-87f9-4d72-9116-fdece54eb902))
(fp_rect (start -5.75 2.25) (end -5.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 38189b8f-087b-42be-bc88-6f9f93a2632e))
(fp_rect (start -2.75 4.75) (end -2.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 38a6aefd-899c-413f-bc11-50406d4eb787))
(fp_rect (start 1.25 6.25) (end 1.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 38ee5968-a95e-4bbd-b213-83a785b233c0))
(fp_rect (start 1.75 7.75) (end 2.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 38f45f67-7617-4550-8e8e-c3e8cc8d5110))
(fp_rect (start 2.75 -4.25) (end 3.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 38fd943d-541c-4807-9958-156d2c659e87))
(fp_rect (start -3.25 -5.75) (end -2.75 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 39100e97-9d8b-47d0-aae1-249700bfe8c0))
(fp_rect (start -1.25 4.25) (end -0.75 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3a3a302b-4fb6-410d-99e0-716d977c2a71))
(fp_rect (start 4.25 -0.75) (end 4.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3abaa1f3-9fab-41ea-9336-1de06b2a7846))
(fp_rect (start -8.25 -0.75) (end -7.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3b97bb8d-ff99-479c-aa11-a860b3161084))
(fp_rect (start 1.25 -7.75) (end 1.75 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3c2669db-7e9c-4a59-94f0-b77c25e717df))
(fp_rect (start -3.75 -8.25) (end -3.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3d04ba63-a5eb-4851-a130-d1f1dfa7b424))
(fp_rect (start -6.25 -6.25) (end -5.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3e3f18b7-11d7-43d1-9c04-fbb143c13833))
(fp_rect (start 3.25 -1.25) (end 3.75 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3f445c2e-caed-4c90-bea4-fb1f0b34ec28))
(fp_rect (start 0.75 -5.25) (end 1.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3f58726d-ed05-4af8-a181-7517e982ead1))
(fp_rect (start 3.75 3.75) (end 4.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 3f716f92-9629-43b1-b099-b46a59fb1709))
(fp_rect (start 6.25 -3.25) (end 6.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 40719ab3-e87a-457e-b382-93d56f1856bc))
(fp_rect (start 4.25 -3.75) (end 4.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 40942c95-2d18-4545-9fba-f454cca55037))
(fp_rect (start 6.25 5.75) (end 6.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 40f38f28-a996-4f9e-a44d-f1be5ef65ce0))
(fp_rect (start 4.25 -1.75) (end 4.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 41ea8ad6-fd61-40b5-8122-7f374fb3550e))
(fp_rect (start 4.25 2.25) (end 4.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 424c5b64-856c-4ab2-8511-cecdd878484a))
(fp_rect (start 7.25 4.25) (end 7.75 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 427845b8-62f6-47ed-bee3-c85ebcb2a449))
(fp_rect (start 3.75 -0.25) (end 4.25 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 431db9ab-e851-4eb3-9153-92a05f8a6fb7))
(fp_rect (start 1.25 -6.25) (end 1.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 43ec6ca7-2ff1-4250-8ce8-efc0d1398e5e))
(fp_rect (start 0.75 -1.25) (end 1.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 45edf1de-6d1c-46c9-93ba-1779adfe2812))
(fp_rect (start 6.75 2.25) (end 7.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4608e1d9-c3d6-438b-8e69-3452d3419604))
(fp_rect (start 7.75 -7.75) (end 8.25 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 464c294b-1d61-4e30-8c72-d5d85aa9a0bb))
(fp_rect (start 5.25 -4.25) (end 5.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 46d5266a-c779-4c40-a6e1-db23ff1a44ab))
(fp_rect (start -6.75 -6.25) (end -6.25 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4789bd56-3d89-4ccb-9086-58c3a30bae02))
(fp_rect (start 1.25 3.25) (end 1.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4842b9d5-01f0-46b5-8f2a-7b5d685d414f))
(fp_rect (start -6.25 4.75) (end -5.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 48e75e94-9fc3-437b-be79-834f94444c56))
(fp_rect (start -0.25 0.75) (end 0.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4b5df782-6243-4126-b89a-e0065c2e2b91))
(fp_rect (start -4.75 -1.75) (end -4.25 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4ba9be4e-408b-45bf-b78c-6a4eea47985f))
(fp_rect (start -1.75 -8.25) (end -1.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4c166662-8648-4792-a54c-8750a7b387b8))
(fp_rect (start -6.75 -7.25) (end -6.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4cde5d1f-bab2-409c-9c81-2b4b236116d9))
(fp_rect (start -2.75 7.25) (end -2.25 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4cde73b6-d734-49d9-a9ba-d53cddf895ff))
(fp_rect (start -0.75 -4.25) (end -0.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4d667e54-e760-4a8a-a090-680a0bc5aaa4))
(fp_rect (start 7.25 -1.25) (end 7.75 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4e078c7b-e994-4321-8a3f-bcde7f824026))
(fp_rect (start -4.25 -1.75) (end -3.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4eb8d5b6-f731-4d24-be06-aa78f02f92b9))
(fp_rect (start 3.25 6.25) (end 3.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4ef00b21-5885-4e3b-92fc-546611890d19))
(fp_rect (start -0.75 3.75) (end -0.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 4fa4fc1a-f707-40d8-b894-2950ff81d4fc))
(fp_rect (start 4.25 -4.25) (end 4.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5022cbb0-63b1-4830-af5a-94ed41e1e25f))
(fp_rect (start -8.25 0.75) (end -7.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 504c8cec-e651-46cd-b180-44b27efdb21e))
(fp_rect (start 1.75 0.75) (end 2.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5075a09a-6136-4717-914f-d7123e330815))
(fp_rect (start -0.75 -3.75) (end -0.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 51f86caa-cd88-41aa-b238-74d575381e8f))
(fp_rect (start -0.75 4.75) (end -0.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 52311b86-4b5c-4fbf-8447-0d8a9e9ed54a))
(fp_rect (start 0.75 -4.75) (end 1.25 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 53627789-9fc2-49d9-accd-4adfc3b92df0))
(fp_rect (start 2.75 3.75) (end 3.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 537bfdd8-aab4-4565-9419-99180634cfd3))
(fp_rect (start 3.25 -2.25) (end 3.75 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 53d33ae5-d86f-48dc-abe1-9a8fe68fc09e))
(fp_rect (start 6.25 -5.25) (end 6.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 549337b4-c0ac-4335-81db-edbe940398e8))
(fp_rect (start 2.75 7.75) (end 3.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5538e2dc-9708-4fac-b5f4-a376564252dd))
(fp_rect (start -7.25 -5.25) (end -6.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 569c136e-7e55-46e1-9d8b-d448dfbf5b50))
(fp_rect (start -8.25 7.75) (end -7.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 56fac4f0-7f0b-44cf-afec-1df5c9110dd0))
(fp_rect (start -5.25 6.25) (end -4.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5717359b-7cb5-4db6-9055-ce231432fbd9))
(fp_rect (start -4.75 0.75) (end -4.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 581e5534-1b62-4b22-b751-8332e456486a))
(fp_rect (start 2.75 -5.25) (end 3.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 583e26d5-9014-483c-8514-fd10636a43bf))
(fp_rect (start -1.25 -5.75) (end -0.75 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 585b4b72-6963-45ca-92b7-a36e06d857b9))
(fp_rect (start -3.25 5.75) (end -2.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 59048b34-757a-4374-a746-e8990a9b7869))
(fp_rect (start 4.25 -3.25) (end 4.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5a973761-667e-448d-a05b-9ef570956fda))
(fp_rect (start -3.75 -1.25) (end -3.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5ad7d6d8-6d6a-4e83-bf6e-7d09c234ca87))
(fp_rect (start 1.75 5.25) (end 2.25 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5b531049-744a-44e3-a9bb-08cb6b54f2b9))
(fp_rect (start 0.25 -7.25) (end 0.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5ba4cb5f-3237-4306-a1f8-c480ba26f98d))
(fp_rect (start 7.25 -2.75) (end 7.75 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5bcd8175-7f84-42e8-bc8f-9ffa177d364b))
(fp_rect (start -7.25 -0.25) (end -6.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5bd85188-3595-4402-9673-d201ec139bdf))
(fp_rect (start 0.25 3.25) (end 0.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5bf4fbc1-97e6-4c12-a6e9-f5d8b8bf4138))
(fp_rect (start 3.25 3.75) (end 3.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5c30e00e-9339-4065-9934-e4cabfe4347a))
(fp_rect (start -8.25 6.75) (end -7.75 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5c72944b-f75f-462c-8278-56341964777d))
(fp_rect (start -4.75 -0.75) (end -4.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5c7324ad-f160-48eb-9c88-3e90478d5cae))
(fp_rect (start -3.25 -3.25) (end -2.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5cc7488e-903d-4ef1-ab57-8d4896d988ee))
(fp_rect (start 3.75 -4.25) (end 4.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5d4d4883-39ef-43b5-b67d-8da0b1aa0f40))
(fp_rect (start 4.75 -1.25) (end 5.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5d50c417-5126-4eca-96b4-7e60eeaee187))
(fp_rect (start -0.75 1.75) (end -0.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5dade18a-9710-46d8-a87e-d8d327bb80ec))
(fp_rect (start 7.75 -8.25) (end 8.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5ddde671-5b2f-43a4-a7e3-33c15ea02831))
(fp_rect (start -5.25 -6.75) (end -4.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5e3210a3-828a-406d-ac0a-1d8d9cc8b1aa))
(fp_rect (start 4.75 -4.25) (end 5.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5ef87385-7fce-4b26-ab3a-de60e5351105))
(fp_rect (start -3.25 -2.75) (end -2.75 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 5fab284c-a8f6-49ba-a3e9-510887220bdb))
(fp_rect (start 0.75 -3.75) (end 1.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6103233b-b3cb-4106-9367-e6a0e4f877bc))
(fp_rect (start -7.75 -5.25) (end -7.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 61ac6e3c-761a-4f9b-aa3a-d27d072f07da))
(fp_rect (start -1.75 4.25) (end -1.25 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6229c8b5-ee03-4943-929b-9995766cd9e5))
(fp_rect (start 5.75 -4.25) (end 6.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 624b869b-0154-42d4-bbfd-413cb6bffe4c))
(fp_rect (start -2.25 -0.25) (end -1.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6299deea-a17f-411b-8628-d16c3430f5e5))
(fp_rect (start -3.25 -7.75) (end -2.75 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 62cd706d-2f0a-49b3-840c-935f16270208))
(fp_rect (start -2.75 -7.25) (end -2.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6309e3a3-d166-431d-9fc7-230207c7c8a1))
(fp_rect (start 3.75 4.75) (end 4.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 63c65c51-8914-4761-9fe8-e581e43280da))
(fp_rect (start 7.75 -5.25) (end 8.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 641347cc-d6d1-45ce-be47-5b59389ecb51))
(fp_rect (start 0.25 -6.75) (end 0.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 645e0993-11bb-4a94-8312-efc204133ffd))
(fp_rect (start -8.25 -3.25) (end -7.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 64e65a31-c790-4392-891d-14ee415f0f5f))
(fp_rect (start -4.25 -6.75) (end -3.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 658069ae-f13a-42c3-a8c0-127864644339))
(fp_rect (start 1.75 1.75) (end 2.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6753de14-e035-4ad1-a6e8-8e5499f8633c))
(fp_rect (start -3.75 4.25) (end -3.25 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6761c3a8-898f-4e69-ba85-2748645964b8))
(fp_rect (start 0.25 -6.25) (end 0.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6792ad4a-7848-470d-940e-ee3a73ff45a8))
(fp_rect (start 4.25 5.75) (end 4.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 67df5d10-8bab-4052-88a7-7073eaeb725d))
(fp_rect (start -5.75 7.75) (end -5.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 69d8761e-5a33-44ac-b908-7b0307d00839))
(fp_rect (start -0.75 6.75) (end -0.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6a69b367-7f3f-4810-8832-fcf4062331d4))
(fp_rect (start -6.25 -3.75) (end -5.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6abc7a40-1af8-465d-8938-15929b818f51))
(fp_rect (start -2.25 0.75) (end -1.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6ac5f1da-4b9c-49dc-a47a-19efecb207f3))
(fp_rect (start -7.25 6.25) (end -6.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6bd16a1f-2708-4567-9040-3c72a041236d))
(fp_rect (start 3.75 0.25) (end 4.25 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6bf1812d-ad50-4d26-bc44-e22ca96f8951))
(fp_rect (start 2.25 1.25) (end 2.75 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6c069b10-5794-46f6-b7fd-417d447edc39))
(fp_rect (start -1.75 6.25) (end -1.25 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6c6377d6-1b62-41b9-8820-5d644c224adc))
(fp_rect (start 3.25 -0.75) (end 3.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6cbd4c35-0a08-40d6-ace4-e55606c2b542))
(fp_rect (start 2.75 -2.25) (end 3.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6cc46eed-f134-4424-9a79-841d5b7d638d))
(fp_rect (start -0.25 -3.25) (end 0.25 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6d166bb5-9ae1-41cf-875c-a789850910af))
(fp_rect (start -2.75 3.25) (end -2.25 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6d4489f4-ac83-460e-92dc-cbf640d136a6))
(fp_rect (start 2.75 -0.25) (end 3.25 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6da13831-9b78-42e6-869e-5a72f02f8190))
(fp_rect (start 7.75 -6.25) (end 8.25 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6e58d63f-1786-463e-b899-5c7665f9efe3))
(fp_rect (start -8.25 -8.25) (end -7.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6f333460-8c3c-4098-a256-9680723eee5e))
(fp_rect (start -7.25 -0.75) (end -6.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6f5a240a-8a2b-4b60-891e-24e7f9be3a1c))
(fp_rect (start -4.75 -2.75) (end -4.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6f9787f0-4837-497a-b9e4-bd8d3fd29972))
(fp_rect (start 0.75 7.75) (end 1.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 6ff42d61-416e-4386-b13d-97df4e7ed845))
(fp_rect (start -5.25 1.75) (end -4.75 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 70045c0a-b1ae-4767-9206-84a5f06f9113))
(fp_rect (start 6.75 6.25) (end 7.25 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 70dca59c-6bad-4073-a56b-029221dcfbe2))
(fp_rect (start 0.75 0.25) (end 1.25 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 71283231-bfd7-451e-bc03-9cf8c3733b8a))
(fp_rect (start 4.25 3.75) (end 4.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 716c0626-4796-466f-9630-b47fc8ce9d0b))
(fp_rect (start 2.25 -3.75) (end 2.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 72b7aef7-2d76-4cf7-9e15-47f82a2b2892))
(fp_rect (start -0.25 -3.75) (end 0.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 73275965-8070-4cca-939d-dc112b2f0341))
(fp_rect (start -0.75 -3.25) (end -0.25 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 74370960-5199-4098-a545-d2c8c7ea1d7b))
(fp_rect (start -3.75 0.75) (end -3.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 75025b7f-3cde-49cf-a730-309990611ecc))
(fp_rect (start 3.75 -4.75) (end 4.25 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 750391d2-c18b-44f1-98a1-e9871ef52ca5))
(fp_rect (start -4.75 -3.75) (end -4.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7504e80a-8b24-4e8d-8ce1-9f5dd6761105))
(fp_rect (start -7.75 0.25) (end -7.25 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 758efe82-eeb5-435f-ab0d-5dad146a6cc3))
(fp_rect (start -7.25 0.75) (end -6.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 75b90ed2-8ec1-41ad-ac00-669db66fccda))
(fp_rect (start -2.25 1.25) (end -1.75 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 75dd610c-95d7-41b8-a062-4ac8a5af3458))
(fp_rect (start -0.75 1.25) (end -0.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7613a08e-587a-4048-806b-46562fe43449))
(fp_rect (start -7.75 4.75) (end -7.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 76db87d3-9667-4c6b-a276-35bfe3994f9d))
(fp_rect (start -0.25 -8.25) (end 0.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 77e14af0-40f8-4679-8a30-27fdbab3b747))
(fp_rect (start -8.25 1.75) (end -7.75 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 77f76170-3e48-47fa-86eb-15fcbca9d95c))
(fp_rect (start 3.75 1.25) (end 4.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 781bc047-a326-491a-ac49-2e1ff2477d84))
(fp_rect (start 7.25 2.75) (end 7.75 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 781df42c-c737-47b0-8778-582fea5a4e33))
(fp_rect (start 0.75 -8.25) (end 1.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 78a43262-0f16-48b1-bd0c-439ae2075766))
(fp_rect (start -6.75 1.25) (end -6.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 79034721-68d8-4eed-9e4d-d06f7eb70910))
(fp_rect (start -8.25 1.25) (end -7.75 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 792c41e0-149d-4994-996c-58dd3b9f3d89))
(fp_rect (start -4.75 -1.25) (end -4.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 793c4d42-4b31-4058-bc60-1ab93c64e026))
(fp_rect (start 7.75 -4.25) (end 8.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 79e8cdfb-c9f4-499c-be66-305c51b53f84))
(fp_rect (start -4.75 -2.25) (end -4.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7a0cf2c3-d604-455b-ad89-f2866c0ff9ed))
(fp_rect (start 4.25 2.75) (end 4.75 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7abd1b9c-3baf-4294-9e81-877175d8100f))
(fp_rect (start 6.25 -1.25) (end 6.75 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7b2ac6aa-024c-4c1f-b57a-74263014a59f))
(fp_rect (start 5.75 2.75) (end 6.25 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7b3d57fb-2bb5-4d6d-8e85-420fbee4e91a))
(fp_rect (start -7.25 -6.25) (end -6.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7c49f7eb-41fe-4fe1-8f95-acacb61095ec))
(fp_rect (start -0.25 -5.25) (end 0.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7c92f8d1-8c16-4688-b8ab-31ae98339ab5))
(fp_rect (start -3.25 -0.75) (end -2.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7d196a9c-bb02-4ae7-bf2d-5f69a1608a6b))
(fp_rect (start -1.25 -8.25) (end -0.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7d426812-33ea-4551-9451-aa681f6f0198))
(fp_rect (start -5.75 -1.75) (end -5.25 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7d63e89a-e055-4b17-a8dd-592c154ce2c3))
(fp_rect (start 4.75 6.75) (end 5.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7de61f70-cdf1-4162-ae46-7ff0878c51ea))
(fp_rect (start -6.25 -6.75) (end -5.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7e74730a-e9f3-4b45-9615-11cca9c3dd83))
(fp_rect (start -4.25 2.25) (end -3.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7eb9405d-bcc0-4a5c-bcf7-aa1ab27ffb35))
(fp_rect (start -7.75 -8.25) (end -7.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7f58b2f5-e8dd-4bb5-a288-0e2cb241eeac))
(fp_rect (start -6.75 1.75) (end -6.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7f6463a0-0d32-4846-81ac-d87a8cd2ef0b))
(fp_rect (start 4.75 -5.25) (end 5.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7f950b85-41b6-4b99-9551-203930d143dc))
(fp_rect (start 5.75 -2.25) (end 6.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 7f96049e-cfc6-45c1-85ff-8f9ef67d166b))
(fp_rect (start -0.25 1.25) (end 0.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 804adc9b-5695-45ac-a019-61e905dbc46a))
(fp_rect (start 3.75 -2.75) (end 4.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 806efc17-27e5-4fdc-96e8-3b79466cec2e))
(fp_rect (start -2.25 3.25) (end -1.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 808115cf-2c3d-44bb-bf89-156a70f339c6))
(fp_rect (start -1.25 -7.25) (end -0.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 80f72bff-e771-4522-8ce6-146cd9112b50))
(fp_rect (start 4.25 -2.25) (end 4.75 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 812e185d-bf33-4406-ae6e-d3e5844527ed))
(fp_rect (start 3.25 -8.25) (end 3.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 81aaa8c8-b715-437f-9424-3eff60e883d2))
(fp_rect (start -6.25 -0.25) (end -5.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 82a70869-da90-4001-a856-3e2307d74a69))
(fp_rect (start -4.25 -5.25) (end -3.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 82ce5fc9-d8a6-44a7-94b9-8a433125689b))
(fp_rect (start -5.75 -2.75) (end -5.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8301ac5b-acc3-4ef4-b3e9-87fde72337f8))
(fp_rect (start 6.25 4.75) (end 6.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 85fad492-5d83-4d98-bf01-67c80c8f6839))
(fp_rect (start 4.75 5.75) (end 5.25 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 860e52e2-1f53-4b8c-bf23-3b54c7f80e5a))
(fp_rect (start -5.25 0.75) (end -4.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 863d57d8-9a28-4483-861c-688d958c6827))
(fp_rect (start -3.25 4.75) (end -2.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 863f29a1-bd62-4062-84e4-0778d1f3ab2b))
(fp_rect (start 3.75 -1.25) (end 4.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8727edf8-d2cb-4edb-8036-5908d696c09b))
(fp_rect (start 0.25 6.25) (end 0.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 88b4c4fa-3298-4b39-ab60-920f9599e2f2))
(fp_rect (start -5.75 -1.25) (end -5.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 89307f4f-c7d0-4f80-86ac-222e338133a5))
(fp_rect (start -3.25 -5.25) (end -2.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 898a9f03-f050-4c3d-bd1d-fd9a417a17f7))
(fp_rect (start -4.25 -5.75) (end -3.75 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 89d864f5-21a8-4647-897b-a98aa9112171))
(fp_rect (start 5.25 6.25) (end 5.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8a50fb45-e7df-4415-b255-0d63fe6dc608))
(fp_rect (start 0.25 -0.75) (end 0.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8a6698c1-85aa-4c42-a3c2-4becbba76a57))
(fp_rect (start -2.75 -8.25) (end -2.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8bab38b8-5978-4b21-8027-a98b65678911))
(fp_rect (start 1.25 -7.25) (end 1.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8c1c3c38-c240-4cf1-a59b-0b274117a1b0))
(fp_rect (start 5.25 0.75) (end 5.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8c2dafdb-f11d-4763-abba-65e93d398cca))
(fp_rect (start -7.75 1.25) (end -7.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8c7506a4-774d-4d02-a4c6-4a0021f11fe2))
(fp_rect (start 0.25 7.75) (end 0.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8c9a631e-24a2-4bcd-89fd-f68404375864))
(fp_rect (start -8.25 4.75) (end -7.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8cbaa61a-6a27-4b4b-a591-8622cf4c3317))
(fp_rect (start 4.25 3.25) (end 4.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8d342013-1edc-4ed2-936c-f9e00fa42914))
(fp_rect (start -1.25 7.25) (end -0.75 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8da3d032-35e5-411b-a898-d0bbc601b014))
(fp_rect (start -7.75 -2.75) (end -7.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8dc33c61-8d71-44b3-bcb5-7f4f8b5c7713))
(fp_rect (start -4.25 -8.25) (end -3.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8df53e06-873c-48d5-acb2-1da90266a540))
(fp_rect (start 0.75 4.25) (end 1.25 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8e56aaf9-f4d6-419f-8673-f1fb4702a61f))
(fp_rect (start -8.25 2.25) (end -7.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8e7bc127-e634-48c1-a737-344872642300))
(fp_rect (start -1.75 1.75) (end -1.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8ef5fc10-7bb8-4205-80c0-d9b28da284fd))
(fp_rect (start 4.75 -3.25) (end 5.25 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8f962ec2-549f-4e58-bd4b-7011abf36ae3))
(fp_rect (start -2.25 -6.75) (end -1.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8fe10793-e295-41fc-a4e9-f05f3338b2c6))
(fp_rect (start 1.75 -2.75) (end 2.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 8fed0211-77de-4ec1-9b9a-87c1a5a707ae))
(fp_rect (start -8.25 5.25) (end -7.75 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9072ca32-4e7c-47c5-8d48-0f1205ac56ff))
(fp_rect (start -2.75 -1.25) (end -2.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 90ebf125-7efd-4db7-b2dd-78754bd3d4c4))
(fp_rect (start 0.25 3.75) (end 0.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 91586436-e4dc-4481-a9a0-dc784ad73e93))
(fp_rect (start 1.25 2.25) (end 1.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 91904bf6-316a-4901-accf-2b5835ddaf77))
(fp_rect (start -1.25 -0.25) (end -0.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 92177e60-575c-4093-bb56-0bc1b5070e2f))
(fp_rect (start -0.75 5.75) (end -0.25 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 92ef4f66-a67c-4f43-9a6d-54e1590fe91e))
(fp_rect (start -4.25 -4.75) (end -3.75 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 94704d8d-de6f-4668-aa29-14533b0459b3))
(fp_rect (start -3.25 -4.75) (end -2.75 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 94c1bdb6-317a-47d2-9f0f-b2c89b2fc8d1))
(fp_rect (start 1.25 -0.25) (end 1.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 94f8b0ab-db52-47f1-808a-0e3c310de766))
(fp_rect (start -0.25 -6.25) (end 0.25 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 94fed5ed-d811-42f5-850d-157fa8a31c30))
(fp_rect (start -6.25 -2.75) (end -5.75 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 95519427-86d7-4379-81f6-9db8706ef208))
(fp_rect (start 2.25 2.25) (end 2.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 95aa7814-1ef1-444f-8eca-dcd27c90c673))
(fp_rect (start 7.25 6.25) (end 7.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 95d5091c-d096-4a02-8587-022782004379))
(fp_rect (start 0.25 7.25) (end 0.75 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 95d5f5e0-b46a-47cc-92a0-0800b72fc708))
(fp_rect (start -6.25 5.75) (end -5.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 96b90eba-cba0-47a0-8866-70a1ece5ec89))
(fp_rect (start 2.25 -4.75) (end 2.75 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 97406407-cc91-431b-96f4-80f619b7d991))
(fp_rect (start 0.75 1.75) (end 1.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 977bb938-ad3c-453a-abac-a51de1458656))
(fp_rect (start -3.75 -6.75) (end -3.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 978a655d-af9a-4c18-b523-e94c2a5761f6))
(fp_rect (start 0.25 -4.25) (end 0.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9795c370-8a31-415a-aff3-b09762b0762b))
(fp_rect (start -2.25 -4.25) (end -1.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 97ad21c3-7352-4226-bf79-f2b43daa27ce))
(fp_rect (start 3.25 1.25) (end 3.75 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 97cab4ec-cc95-4089-956d-87955109eb27))
(fp_rect (start 1.75 3.75) (end 2.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 981651a7-c01e-46e7-ab38-335502dfb891))
(fp_rect (start -5.25 3.75) (end -4.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9845ca06-30b9-4e4c-a9f1-4ee30b1b2fc4))
(fp_rect (start -1.75 7.25) (end -1.25 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9859e2c7-5641-4a6b-b1e4-337558826c74))
(fp_rect (start -2.75 2.75) (end -2.25 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9906dc8a-84f1-4c20-9232-367e9d08bebc))
(fp_rect (start 2.75 -0.75) (end 3.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 99493975-ea43-4952-b184-25b1d6e356a8))
(fp_rect (start 0.75 2.75) (end 1.25 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9960b11c-67d5-4708-a051-f689e01e581f))
(fp_rect (start -7.75 2.25) (end -7.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 997aa5df-6915-4ea2-97e6-cc7189a5db58))
(fp_rect (start -1.25 0.75) (end -0.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9a9fbbf1-26b1-4817-a2f6-ea67c6982c00))
(fp_rect (start 2.25 7.75) (end 2.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9b760fb4-bff4-4e16-a265-8aba12ef407e))
(fp_rect (start 2.75 5.25) (end 3.25 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9db22f4e-76af-4289-ad92-18f6a1f1b2d3))
(fp_rect (start 1.25 -6.75) (end 1.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9dcf91be-6b06-4988-a5db-ff641f2f0bd3))
(fp_rect (start 0.25 4.25) (end 0.75 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9e0db68b-3504-42cf-ad94-b41264ffd276))
(fp_rect (start -6.25 -7.25) (end -5.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp 9ed0e226-c0be-4b62-885c-0aa2ef066257))
(fp_rect (start 3.25 0.75) (end 3.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a01941a5-0765-4a8b-aa1e-0006048c76cd))
(fp_rect (start -0.75 0.25) (end -0.25 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp a06ddd9a-df75-4c91-9b0e-a67d9e505106))
(fp_rect (start -3.75 5.25) (end -3.25 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp a170f2e0-bf50-45d2-b269-a81a048c3c39))
(fp_rect (start 7.25 2.25) (end 7.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp a38d42dd-41cc-4aee-89e0-32211aa48748))
(fp_rect (start -2.25 2.75) (end -1.75 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a3d0823f-ee44-496b-b255-c4398b1077a6))
(fp_rect (start -7.25 4.75) (end -6.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a4295caa-be53-459c-8dc9-e0121dec7f4e))
(fp_rect (start 5.75 5.25) (end 6.25 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp a438492d-95c7-44d7-8e57-770179b34509))
(fp_rect (start -4.25 -3.75) (end -3.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a43ecf55-b0a6-4f4e-b0ab-e309e3ef03db))
(fp_rect (start -1.25 4.75) (end -0.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a45b374d-2cc1-4fdf-99ee-a7eb0ea5201a))
(fp_rect (start 0.25 1.25) (end 0.75 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp a53214a4-8455-404d-bf78-4bfa0f9a2373))
(fp_rect (start 1.75 -7.75) (end 2.25 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a5e4975f-0105-46be-9259-8828614b67f9))
(fp_rect (start -6.25 7.75) (end -5.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a6eed99b-9bd9-4fbd-9727-f3041df468a8))
(fp_rect (start 6.75 6.75) (end 7.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a6fdd408-1371-4d68-83af-3beede888ffe))
(fp_rect (start 3.25 -4.25) (end 3.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp a74b628a-534d-4cad-b02a-f81f8354013e))
(fp_rect (start 2.75 5.75) (end 3.25 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp a8ec1b19-0d26-426d-85e4-d0b100d663ec))
(fp_rect (start 5.25 -5.25) (end 5.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp a97a012c-6d7b-486a-a0fd-33de3ecf2767))
(fp_rect (start -1.75 2.75) (end -1.25 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp aa3c9971-edda-47e1-8196-10acd23f6cfc))
(fp_rect (start 1.25 7.75) (end 1.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp aa538663-df9c-4511-9c0d-624110e4617b))
(fp_rect (start 7.25 -8.25) (end 7.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp aa6db01e-d267-4afa-a9ea-98293af89fbd))
(fp_rect (start -8.25 -7.25) (end -7.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ac312b44-343d-4d30-839a-5bcbacae5b73))
(fp_rect (start 7.75 5.25) (end 8.25 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ad954e65-aaca-4b80-80c3-ef0e215d2780))
(fp_rect (start 7.25 -3.25) (end 7.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ae63e7e2-15d4-4d29-b1df-c16ee9635820))
(fp_rect (start -5.75 1.75) (end -5.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp aec95684-8999-4838-a7c3-aa4fd568d99a))
(fp_rect (start 1.75 -1.25) (end 2.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp afad10f6-daec-46ea-88b3-a60206ee8f56))
(fp_rect (start 5.25 3.25) (end 5.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b06b0c7e-6c88-4778-bbc6-4e2aea6cc37b))
(fp_rect (start 4.75 4.75) (end 5.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b06b42ba-6ad6-4197-9312-2a8d9e456896))
(fp_rect (start -3.25 0.75) (end -2.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b07b25d4-82b6-4544-bbdb-84cc03df99fd))
(fp_rect (start -0.75 4.25) (end -0.25 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b0b20308-d86a-422c-b970-404adf573ff3))
(fp_rect (start 6.75 -8.25) (end 7.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b0da6e55-e61d-48af-8329-4265b4bb9f07))
(fp_rect (start 5.75 6.25) (end 6.25 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b0e2a9c2-3f67-4f98-b96a-64f778fe2ade))
(fp_rect (start -6.75 -0.75) (end -6.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b118337e-1ece-446c-8051-b5123e324f97))
(fp_rect (start -8.25 -5.25) (end -7.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b1827de5-43ef-48e4-a235-64a1cec9c511))
(fp_rect (start 4.75 -0.25) (end 5.25 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b1a488a5-4666-4b61-8c74-35ca5afcff3c))
(fp_rect (start 3.75 3.25) (end 4.25 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b1ae15e3-ff51-4091-b899-a9d01d49b5c7))
(fp_rect (start 0.75 1.25) (end 1.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b1bdc5e5-7f42-4e4b-9edf-fa883f2e6c1b))
(fp_rect (start 2.25 -4.25) (end 2.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b1e93d61-5b19-4869-aa82-da8ded0f1028))
(fp_rect (start -1.75 -5.75) (end -1.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b2c14216-79e6-42fc-a7fd-7808a9741898))
(fp_rect (start 4.75 3.25) (end 5.25 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b37dbc27-1232-4e87-8ed0-fb2f8ab49d7f))
(fp_rect (start 6.75 0.25) (end 7.25 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b403b4b6-a597-43a4-8220-f1ae7532bff7))
(fp_rect (start -2.25 -1.75) (end -1.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b4454f12-81b7-46df-9674-f9641eb0ce05))
(fp_rect (start -2.75 -6.75) (end -2.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b47629bf-3660-48d1-bf84-96a9c3ac707f))
(fp_rect (start -4.75 1.75) (end -4.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b4a8ce75-e94e-49ea-b091-a246d37c0d1b))
(fp_rect (start 1.75 -4.25) (end 2.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b4defb14-c623-4bd7-9bd6-fe161e8648c5))
(fp_rect (start -6.25 -2.25) (end -5.75 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b593590d-f257-4635-aaa6-7aba911ff060))
(fp_rect (start -1.25 5.75) (end -0.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b5e5e1ad-9b25-44c9-bace-70faad62ffc0))
(fp_rect (start -6.75 -6.75) (end -6.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b5ea7cfc-aca7-44bb-8970-e30ec0e218cc))
(fp_rect (start 2.25 0.75) (end 2.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b6e7c1fa-2098-42a3-96ac-81a49241c233))
(fp_rect (start 0.25 -0.25) (end 0.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b7fa8853-e2ce-433b-8483-dddb91b885d1))
(fp_rect (start -2.75 5.25) (end -2.25 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b8383087-442e-401e-ae46-3c56ee805f14))
(fp_rect (start -2.75 6.75) (end -2.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp b8387439-5e1d-4d28-a6cb-0815fc319fb0))
(fp_rect (start -3.75 1.25) (end -3.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp b8bdf770-e10b-4f82-bd42-1bc212ee3c93))
(fp_rect (start -6.75 5.75) (end -6.25 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bae903dd-3666-47c9-99a1-6b1ef68ff86f))
(fp_rect (start 3.25 -3.25) (end 3.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp bb405eaf-1ce9-4177-aff3-b9879fd189f0))
(fp_rect (start 7.75 1.75) (end 8.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bc3d777f-8399-440c-8e10-00694ab26210))
(fp_rect (start -0.25 5.75) (end 0.25 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bc6167c1-15d2-4a56-8711-4a601d3e38e5))
(fp_rect (start -7.25 -6.75) (end -6.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bcbcad00-018d-4666-81b3-e21ddf36f661))
(fp_rect (start -4.25 -3.25) (end -3.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp bd0e3490-c4f4-4abf-9b6e-57721abcdf6f))
(fp_rect (start -5.75 4.75) (end -5.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bd1aa673-2952-4a97-a9d9-4b5b108a5b0f))
(fp_rect (start -3.25 -6.25) (end -2.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp bd7bf159-fd0e-44d7-bb42-62093fedbbf6))
(fp_rect (start -0.75 -0.75) (end -0.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bda4e16b-9ded-4b60-a2f3-a01e2b06f5cb))
(fp_rect (start -5.75 0.75) (end -5.25 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bdab0f8b-5faa-4138-8a2e-4250f8e5ccf5))
(fp_rect (start -5.75 -2.25) (end -5.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp bdeff5e6-9769-4ccb-96f4-3f500ad06b13))
(fp_rect (start 0.75 6.75) (end 1.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp beae6362-13a5-474b-b517-60766133cc6d))
(fp_rect (start 2.75 -2.75) (end 3.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bebaa194-8754-4cc1-86e0-4175b30cf2a4))
(fp_rect (start -0.25 0.25) (end 0.25 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp bf3850de-1b85-4bfc-a17f-94fc80a7e719))
(fp_rect (start -0.75 -1.25) (end -0.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp bf522abc-e59e-4969-a70a-2b777a902260))
(fp_rect (start 7.25 3.25) (end 7.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp bf5e9b31-07e4-4391-85f6-6bb9676d6e79))
(fp_rect (start 7.25 0.75) (end 7.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bf8fa3f1-7425-449a-96c7-ec965361dd2c))
(fp_rect (start -8.25 -5.75) (end -7.75 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp bff7117d-da01-40a3-adaf-9c988e479c57))
(fp_rect (start 1.75 1.25) (end 2.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c00be96d-d17c-4e2a-83f0-2c238ebbb4e5))
(fp_rect (start -1.75 4.75) (end -1.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c03a4e65-270d-4837-96f6-1030154faece))
(fp_rect (start -5.25 4.75) (end -4.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c09ddcc9-a56e-4a7a-9ab0-7f3331386d5c))
(fp_rect (start 5.25 6.75) (end 5.75 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c1180f84-6dec-48c2-bdb9-daef366883bb))
(fp_rect (start -6.75 2.25) (end -6.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c16fde56-7b53-4495-a456-b6731065921b))
(fp_rect (start 1.75 3.25) (end 2.25 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c1b8991e-0984-44c1-9957-1aa54e8a25c1))
(fp_rect (start 0.75 -7.75) (end 1.25 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c1dd8ea5-4f46-49a5-9369-3fa5dd0a2cd3))
(fp_rect (start 5.75 6.75) (end 6.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c1ee23a2-042e-4ee9-8ad8-c8f3cc0b664b))
(fp_rect (start -7.75 3.75) (end -7.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c2efa809-e985-421e-88a8-e3d10b4e4606))
(fp_rect (start 2.25 6.25) (end 2.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c3b21ec1-00e1-4857-8553-049ebbdc1712))
(fp_rect (start -7.25 -7.25) (end -6.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c3bedfe7-e1b3-4c31-9e2c-9d0b14bc7330))
(fp_rect (start 1.75 -5.25) (end 2.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c4104581-087e-4915-9836-e01e0eb9ac46))
(fp_rect (start -4.25 -4.25) (end -3.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c426504e-b324-495d-920d-3d1aea5e74a0))
(fp_rect (start -6.25 0.75) (end -5.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c5373df0-cad6-48e1-92ab-0d87667560bb))
(fp_rect (start -0.25 -2.25) (end 0.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c588cd62-c80a-419a-9396-3238a8efa8e9))
(fp_rect (start -0.75 -7.25) (end -0.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c5fa19c4-9da8-43b1-a92c-3364992e2bea))
(fp_rect (start -8.25 -6.75) (end -7.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c6648b65-3bd8-4b9f-a814-855a66fe4eab))
(fp_rect (start -4.25 -1.25) (end -3.75 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c72b1b8a-bbd7-4893-afd4-acc91cc3edc8))
(fp_rect (start -3.25 5.25) (end -2.75 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c7423721-c7a2-4005-ab25-695bf994131c))
(fp_rect (start -0.25 -7.75) (end 0.25 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c78d9dcb-eed0-44ba-b15e-e6524f2d94e2))
(fp_rect (start 3.75 4.25) (end 4.25 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c7d6e1ca-839e-454d-98be-21e1cb005e8b))
(fp_rect (start 7.25 0.25) (end 7.75 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c80fbbb8-09d2-4404-af5e-7d1c6ec11f8b))
(fp_rect (start 2.25 -7.25) (end 2.75 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c816cf76-aaf9-4833-b199-c6e74faeb047))
(fp_rect (start -7.25 3.75) (end -6.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c81b6a49-70d9-4b5a-a11d-eb6ec667f943))
(fp_rect (start 3.75 6.25) (end 4.25 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c8de6e91-7231-4bcc-9362-60f50c32a237))
(fp_rect (start -7.25 -8.25) (end -6.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c8e675f7-f579-480e-beec-f2c6e9c976c6))
(fp_rect (start 5.25 -1.75) (end 5.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c8f5bd6a-c673-4da5-8342-9e01920a2eb7))
(fp_rect (start -5.25 -7.75) (end -4.75 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c9b87070-0548-4b7f-abdf-5933b239bd45))
(fp_rect (start 7.25 4.75) (end 7.75 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp c9c18807-ffd9-4907-accc-83ae6b56f306))
(fp_rect (start 2.25 3.25) (end 2.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp c9d612a6-abc2-47e0-9933-80e9ce5bf2a8))
(fp_rect (start -3.25 -6.75) (end -2.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp ca387643-3400-46bf-9120-fa571d8af417))
(fp_rect (start 5.25 -1.25) (end 5.75 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp caa5c6d6-cf03-43ee-9517-0a8a9bc3b898))
(fp_rect (start 3.75 1.75) (end 4.25 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp cb2cf3e1-c7ea-45c0-b377-9ff4be4ce3df))
(fp_rect (start -8.25 -0.25) (end -7.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp cb713b57-c538-485f-8074-2b176117b361))
(fp_rect (start 1.75 -1.75) (end 2.25 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp cb776452-7942-4023-817b-8e1e92c801da))
(fp_rect (start 1.25 5.75) (end 1.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp cb841d40-61b2-4bbb-9aa9-d3c0ad74bdfb))
(fp_rect (start -0.25 2.75) (end 0.25 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp cb90b628-c637-49db-89ad-21c2b74de62e))
(fp_rect (start 0.75 7.25) (end 1.25 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp cbc7fba1-c5b5-4752-8c63-e2cc8523598e))
(fp_rect (start -0.75 -8.25) (end -0.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp cc520eb5-4e67-4b46-b29c-d16bf41fd164))
(fp_rect (start 0.25 -1.75) (end 0.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp cd74cee6-0d0d-4d6d-a903-beeb46943746))
(fp_rect (start -6.25 -1.75) (end -5.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp ce16ed26-baa6-449b-a952-4b76d2f19bbd))
(fp_rect (start -3.75 -7.25) (end -3.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ce1774b6-74a4-4807-8a8d-f3f7e9cffbe1))
(fp_rect (start 6.25 -3.75) (end 6.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp ce610cd8-5136-410d-92ff-096ae2c9a3a8))
(fp_rect (start 2.25 3.75) (end 2.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp cea61a52-674d-4849-a781-a234d970aa61))
(fp_rect (start 1.25 1.25) (end 1.75 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp cfc7ebfc-264b-42b9-a168-cd11006351d0))
(fp_rect (start -5.75 -3.75) (end -5.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp cfe7f770-07c2-438c-ba3a-c3fad674f625))
(fp_rect (start -1.25 -7.75) (end -0.75 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d05ae25c-3fbe-42dd-b584-3640122228d7))
(fp_rect (start 6.75 4.25) (end 7.25 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d0a61f34-8522-463f-a5d3-128be0684382))
(fp_rect (start 4.75 -7.75) (end 5.25 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d0c04533-5679-4066-ab09-86204a6b7df3))
(fp_rect (start -0.25 2.25) (end 0.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d10cbf54-d85c-4d3a-9fc7-eb4c58d5899b))
(fp_rect (start -0.25 4.25) (end 0.25 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d116c193-d7ce-49db-aaa9-f0f91988eb49))
(fp_rect (start -5.25 -5.75) (end -4.75 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d120ae62-a108-466c-b9fd-7aef8cde0c9a))
(fp_rect (start 5.75 5.75) (end 6.25 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d172ff15-06f4-4472-a88d-6fd24dca3328))
(fp_rect (start -5.25 -3.25) (end -4.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d1bf903e-0aaa-4b3d-8abe-905776b09049))
(fp_rect (start -5.75 3.75) (end -5.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d1d4b91e-8b1f-484a-9411-966efd3e7435))
(fp_rect (start 6.75 -6.25) (end 7.25 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d1e377ec-41f0-4e13-bdf3-582ab00717c7))
(fp_rect (start 3.25 -5.75) (end 3.75 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d1e5675c-46f4-4698-a2b8-ec96e8dac78d))
(fp_rect (start -2.75 -4.25) (end -2.25 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d2480f23-cc3c-4d3f-918c-351b3846811f))
(fp_rect (start -7.25 2.75) (end -6.75 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d24cb340-c14f-4c6f-a49b-c8b6164c1650))
(fp_rect (start -0.75 -2.75) (end -0.25 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d27fd7f4-d272-453b-8f6b-c38ae274f697))
(fp_rect (start 5.75 4.25) (end 6.25 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d36c117f-faf8-4244-baf1-c3ef802e77c0))
(fp_rect (start 1.25 -2.75) (end 1.75 -2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d40adda3-9fa1-49b8-a11b-4856f7f44445))
(fp_rect (start 7.25 -2.25) (end 7.75 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d43fd3da-3d1f-4d52-9908-b66b7fccb97e))
(fp_rect (start -5.75 3.25) (end -5.25 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d4aa88ff-c21d-45ce-a5f8-6fd6cc572af3))
(fp_rect (start 0.75 -3.25) (end 1.25 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d58c7a65-b159-45f2-80f7-5e423717aa33))
(fp_rect (start 4.75 -6.25) (end 5.25 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d59a50d8-8ae2-46d6-8ea5-d638399cb5b1))
(fp_rect (start -8.25 -1.75) (end -7.75 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d61c7a2d-fbab-4d6e-8e27-d47463f1182e))
(fp_rect (start 2.75 -3.75) (end 3.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d6b8bf23-2e32-4dbc-ab40-9d07b7e5b23d))
(fp_rect (start -6.75 6.75) (end -6.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d6f128b4-d07b-4043-90fe-a5c388375e77))
(fp_rect (start 3.75 7.75) (end 4.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d76b79f1-6bb7-4a9b-9d97-ffd81b5c6300))
(fp_rect (start -6.75 -5.25) (end -6.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp d881244e-f0d9-48e2-98b6-1b31520fd8e3))
(fp_rect (start -4.25 7.75) (end -3.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp d9dc14df-f602-45c8-baee-18f338dde7b0))
(fp_rect (start -1.25 6.25) (end -0.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp da55f8b8-5f4b-4265-a0d8-b4c781fb6a7a))
(fp_rect (start 2.75 -8.25) (end 3.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp db0c505a-5fb0-4d8d-9141-387686733cbe))
(fp_rect (start -1.25 5.25) (end -0.75 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp db4eec97-a50a-4847-9e87-c1796050c32f))
(fp_rect (start 4.75 -0.75) (end 5.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp db66d670-69b7-404f-9541-b549dfae36ab))
(fp_rect (start 7.75 7.75) (end 8.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp dbaa33cd-353e-478c-a987-3e8866e19ae9))
(fp_rect (start -4.25 -0.75) (end -3.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp dbfd6032-3ba9-4c5e-806a-ce5a5433a665))
(fp_rect (start 7.75 -7.25) (end 8.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp dc5ae963-fe21-456d-b1a4-8eb4c651aae6))
(fp_rect (start -4.25 2.75) (end -3.75 3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp dc6cd7fc-7bd0-4de6-b25d-8358230cc2b3))
(fp_rect (start 4.25 0.75) (end 4.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp ddf5044d-271b-4e01-a609-3ba16fdb7050))
(fp_rect (start 6.25 -6.75) (end 6.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp de7ffa3a-2037-46f6-a7ae-fd836c4cc46c))
(fp_rect (start 3.25 -6.75) (end 3.75 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp df613813-22f2-4bee-b44c-2a2c1633ded3))
(fp_rect (start -3.25 -2.25) (end -2.75 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e054f807-c3ce-4a7e-9d6b-14f0839d4695))
(fp_rect (start 6.25 0.75) (end 6.75 1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e09aafd0-d16e-43e8-a0cb-4a539aade959))
(fp_rect (start -6.75 6.25) (end -6.25 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e0d857ee-7b4f-405d-a83a-91235b8e80f1))
(fp_rect (start -4.25 3.25) (end -3.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e105b377-04fd-4739-b42d-70b52bf9043e))
(fp_rect (start -1.75 -2.25) (end -1.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e109faf2-baea-4512-920c-3e2b43ba897c))
(fp_rect (start -7.75 -2.25) (end -7.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e14b6c18-1728-47af-a6a7-e680ece18d44))
(fp_rect (start 0.75 -5.75) (end 1.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e14d60e1-db05-4200-8e33-2b635e2d1be9))
(fp_rect (start 5.25 2.25) (end 5.75 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e157f239-db58-48f0-a8c9-8ae6164404f2))
(fp_rect (start 2.75 -6.25) (end 3.25 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e172da6a-bcf5-4396-ad65-991c2042bc50))
(fp_rect (start 2.25 7.25) (end 2.75 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e1d4a68d-c675-4b4c-b2fe-c31bfbc96c82))
(fp_rect (start -8.25 -2.25) (end -7.75 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e1e77345-b3a1-48c5-af6b-dd74d7941265))
(fp_rect (start -5.25 6.75) (end -4.75 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e25367f3-3ba5-4cb0-bbd9-92139eda38e8))
(fp_rect (start -2.25 7.75) (end -1.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e28addd6-9d8e-47f7-abfe-98c30e9ed852))
(fp_rect (start 3.75 5.25) (end 4.25 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e2bc1a90-22ff-4b34-8c57-b9c6016801a8))
(fp_rect (start -6.25 -5.25) (end -5.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e2defa08-2894-4ee2-bfa6-99118626bbf3))
(fp_rect (start 0.25 -3.75) (end 0.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e364a00d-7621-4343-a8d2-d01927959cc0))
(fp_rect (start -3.25 -4.25) (end -2.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e3d9ef7b-de42-4b47-a806-f57b85031b34))
(fp_rect (start -2.25 1.75) (end -1.75 2.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e44bf520-77c3-42b5-bd67-dd6d86635d05))
(fp_rect (start -5.25 -0.25) (end -4.75 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e5d16aea-1454-4b33-a4a4-d62ca305bb7a))
(fp_rect (start -6.75 3.75) (end -6.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e605149f-e0dd-4baf-8a5d-9f30663a8aec))
(fp_rect (start 6.75 -7.25) (end 7.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e63bb130-ad98-4933-863e-58b2216f7f13))
(fp_rect (start -0.25 7.25) (end 0.25 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e63bbbda-fdfe-4e24-9b63-ded53d82a2e9))
(fp_rect (start 6.25 0.25) (end 6.75 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e679d04c-4f61-4486-ab66-608cb7b52661))
(fp_rect (start -3.75 -2.25) (end -3.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e6a033c3-2e7f-4285-bfa7-b3cb094a62db))
(fp_rect (start -2.25 -5.25) (end -1.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e6dfd0e2-0004-4097-9bb5-61cb2463be0e))
(fp_rect (start -1.75 -3.25) (end -1.25 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e6e74239-eb7c-46be-a737-cd6b287fceea))
(fp_rect (start 2.25 4.25) (end 2.75 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e6f0aeee-3ee2-4aa4-9aab-99ad5b2b3b36))
(fp_rect (start -6.75 -8.25) (end -6.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e71066dc-0515-4d49-bc5a-be4459bcd7a6))
(fp_rect (start -5.25 7.25) (end -4.75 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e7183110-ea6d-45c2-9982-cd4f62d1bb39))
(fp_rect (start 5.75 -6.75) (end 6.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e7699434-0334-4d1c-bafc-478f02c5e11e))
(fp_rect (start 7.75 3.75) (end 8.25 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e7804ba0-5e09-4c5d-842b-b3eaab38d0af))
(fp_rect (start 0.75 6.25) (end 1.25 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e7dba29f-5d18-4496-9c7e-5d55cef58cd2))
(fp_rect (start -6.75 4.75) (end -6.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp e7fcce1b-eed4-40ef-bedb-01a9dab1ce54))
(fp_rect (start -8.25 0.25) (end -7.75 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e8868ed6-cacd-4e76-8fd3-f8676c9b2994))
(fp_rect (start -7.25 -3.25) (end -6.75 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e88f9db6-02f9-4eeb-91c3-59052e22c8ec))
(fp_rect (start -1.75 1.25) (end -1.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e923fde8-656b-4b3d-a875-e2b66e4cf1f6))
(fp_rect (start -8.25 7.25) (end -7.75 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e9bb58f5-022d-4cc3-87bb-983830e70009))
(fp_rect (start 4.75 2.25) (end 5.25 2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e9c06018-f94a-498d-9af0-97d1bc3f2ae8))
(fp_rect (start -3.25 1.25) (end -2.75 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp e9f01f1a-44b7-49b6-bde1-9ac19a4d1f43))
(fp_rect (start 5.75 -5.25) (end 6.25 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp eaeb1157-d68c-45d2-a9ad-5f263161d840))
(fp_rect (start -6.75 -3.75) (end -6.25 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp eb08a993-7bba-4bd2-b482-c99366b57b56))
(fp_rect (start 7.75 1.25) (end 8.25 1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp eb2ec285-f158-42b4-af03-0376105ccbd2))
(fp_rect (start 4.75 -2.25) (end 5.25 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp eb5e3a90-3b51-43bf-8446-d159dcb28685))
(fp_rect (start -6.25 6.25) (end -5.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ec75fc9f-f613-4d00-b93f-5bca9920acd3))
(fp_rect (start 4.75 -8.25) (end 5.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ed0d7b10-214a-4a74-a516-7d89de5d8c11))
(fp_rect (start -3.75 -0.75) (end -3.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp ed742886-c808-4131-837f-e0bfb55adae0))
(fp_rect (start 6.25 -8.25) (end 6.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ee2c1ad7-4a69-4089-a6ee-c2c7128ae42a))
(fp_rect (start -5.25 -6.25) (end -4.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ee37e74f-8e56-41f6-806a-fb8b70af954f))
(fp_rect (start -1.25 -4.75) (end -0.75 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp ee4ca2da-ba87-456f-bf56-676b9192bc5a))
(fp_rect (start 3.25 4.25) (end 3.75 4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ef660157-609b-4b9f-958b-0906c558d922))
(fp_rect (start -7.25 5.75) (end -6.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp ef772289-828c-46cc-810a-223c4d100a84))
(fp_rect (start -7.75 7.75) (end -7.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp efe74f95-0921-495d-92c8-b12b1ae29508))
(fp_rect (start 5.75 -1.25) (end 6.25 -0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f092a3c7-4ab3-457d-a711-8b64578f2301))
(fp_rect (start 7.25 -5.25) (end 7.75 -4.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f1ceebb8-504b-4498-b8db-4b978ef4f285))
(fp_rect (start -5.25 5.25) (end -4.75 5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f215e4f0-056d-476b-b174-abd11377a065))
(fp_rect (start -2.25 -4.75) (end -1.75 -4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp f314431c-6ad5-4baa-94f7-6360e163cebc))
(fp_rect (start -5.25 -8.25) (end -4.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f352260b-3c2a-4664-b125-aaf411f62463))
(fp_rect (start 0.75 -7.25) (end 1.25 -6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f3895704-4c3a-4f63-9cb4-ca8f4be32382))
(fp_rect (start -4.25 3.75) (end -3.75 4.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp f424a655-b30f-41dc-8594-266b44ed0364))
(fp_rect (start 6.25 -4.25) (end 6.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f4359816-c455-49c0-a515-b7ec2740e9ac))
(fp_rect (start 3.75 6.75) (end 4.25 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp f47404b8-d9a2-4237-b106-d475c33e5073))
(fp_rect (start -8.25 -6.25) (end -7.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f5c9f831-2ee7-4f7c-a571-fd9be530cc87))
(fp_rect (start 5.25 -8.25) (end 5.75 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f5e5ec6b-cfe1-4049-ad78-fa355d69a5b4))
(fp_rect (start 6.25 -2.25) (end 6.75 -1.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f6b70556-6821-4b6b-8261-7991f08bddb7))
(fp_rect (start -5.75 -8.25) (end -5.25 -7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f7a7f9a9-9428-42be-832a-ab35020d5810))
(fp_rect (start -0.25 -6.75) (end 0.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp f7c54b41-69ea-4ee2-ac7e-d21357aee8ed))
(fp_rect (start 2.25 -0.75) (end 2.75 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp f80aea68-781b-42b2-b0f7-ae33342b5e92))
(fp_rect (start -0.75 -5.75) (end -0.25 -5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp f818c8e8-1a30-4868-ae76-7511be1c41e5))
(fp_rect (start -7.25 -3.75) (end -6.75 -3.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp f827c9b7-652b-42aa-90f6-e57b7a58d1b1))
(fp_rect (start 6.75 -6.75) (end 7.25 -6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp f85ebcbe-9a65-40e0-9a71-9d3d5f57805f))
(fp_rect (start 3.25 0.25) (end 3.75 0.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f87f453e-4237-45d3-b736-ff61ff8c9af6))
(fp_rect (start 1.75 6.25) (end 2.25 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f8f5fc47-a957-42a9-8cc4-77aa06248ea6))
(fp_rect (start -6.25 -4.25) (end -5.75 -3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f964a8bb-84dc-42fc-8190-53d869778e1f))
(fp_rect (start 7.75 3.25) (end 8.25 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f9b69381-6d0d-4f82-9780-abbe556cdbe0))
(fp_rect (start 1.75 -3.25) (end 2.25 -2.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp f9d56579-4665-4291-8daa-238922297fe9))
(fp_rect (start -4.25 -6.25) (end -3.75 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp fa18aea8-6b0a-4dc9-b1e1-d270f10847ce))
(fp_rect (start -1.75 -0.75) (end -1.25 -0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fa5174ab-1489-4c82-abe8-a3a015638b1b))
(fp_rect (start -2.75 -1.75) (end -2.25 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fa57f43d-2cbf-4c62-a78e-c6fd96a8d752))
(fp_rect (start 0.75 4.75) (end 1.25 5.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fa69521e-0b4a-4a64-8b5a-040f7dde2974))
(fp_rect (start -1.75 -7.75) (end -1.25 -7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fac47c45-0a35-4908-8782-abd14c67d40e))
(fp_rect (start -2.75 -6.25) (end -2.25 -5.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp fbcdbe7d-f0d4-446e-8ac7-9f70271e27bb))
(fp_rect (start 1.75 -0.25) (end 2.25 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fc51550d-c0e8-422d-b3b9-4c0f3cbdaaff))
(fp_rect (start -4.25 5.75) (end -3.75 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fc632d25-fd55-4040-beb6-6efc5fe3122a))
(fp_rect (start -1.25 6.75) (end -0.75 7.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fc69c83e-a8f3-4e18-9070-2949d1c0d605))
(fp_rect (start 4.75 -1.75) (end 5.25 -1.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fd068fec-627f-4786-b55a-3b0f59bc8090))
(fp_rect (start 4.75 7.75) (end 5.25 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fd3c2437-60e6-48de-9221-1e13890bb42e))
(fp_rect (start -1.25 7.75) (end -0.75 8.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fd6da314-2040-40c8-8d51-fbf27d5328a2))
(fp_rect (start 3.75 5.75) (end 4.25 6.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fd7be013-c791-4b26-a4f6-bc756044558c))
(fp_rect (start -8.25 6.25) (end -7.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp fdaf7989-0aca-4b34-8de9-78c0b3ee2a8a))
(fp_rect (start -0.75 7.25) (end -0.25 7.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp fdb34042-4fe1-46d2-96d3-2171b09598e5))
(fp_rect (start 5.75 -0.25) (end 6.25 0.25) (layer "F.SilkS") (width 0) (fill solid) (tstamp fdfa0f5f-f3dc-48ed-8b1b-d0cbce5a317b))
(fp_rect (start -3.25 6.25) (end -2.75 6.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp fe7ad404-1bb3-492d-933d-5d1bf3089b77))
(fp_rect (start -6.25 3.25) (end -5.75 3.75) (layer "F.SilkS") (width 0) (fill solid) (tstamp ffaaedd8-e7d2-42f6-99c2-0a0def8b9829))
(fp_line (start 8.35 -8.35) (end 8.35 8.35) (layer "F.CrtYd") (width 0.05) (tstamp 1d53c623-dd8c-4272-aa7f-2c68f433a586))
(fp_line (start -8.35 -8.35) (end 8.35 -8.35) (layer "F.CrtYd") (width 0.05) (tstamp 64e77b69-9860-4f3b-8e08-c69a5f01219b))
(fp_line (start 8.35 8.35) (end -8.35 8.35) (layer "F.CrtYd") (width 0.05) (tstamp 7e99c699-6152-49b5-b1a0-8d37be687ab6))
(fp_line (start -8.35 8.35) (end -8.35 -8.35) (layer "F.CrtYd") (width 0.05) (tstamp a268b3ff-87db-49ca-ab02-b8b395242240))
)

View File

@ -0,0 +1,14 @@
(module Board (layer F.Cu) (tedit 605A21C1)
(descr "Mark board for extraction")
(attr virtual)
(fp_text reference REF** (at -4.5 -5) (layer Dwgs.User)
(effects (font (size 1 1) (thickness 0.15)) (justify left))
)
(fp_text value Board (at -7.25 -5) (layer Dwgs.User)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 0 0) (end -1.25 -4) (layer Dwgs.User) (width 0.2))
(fp_line (start -1.25 -4) (end -9.25 -4) (layer Dwgs.User) (width 0.2))
(fp_line (start 0 0) (end 0.5 -1) (layer Dwgs.User) (width 0.2))
(fp_line (start 0 0) (end -1 -0.5) (layer Dwgs.User) (width 0.2))
)

View File

@ -0,0 +1,13 @@
(module Fiducial:Fiducial (layer F.Cu) (tedit 5EA93A7C)
(descr "Circular Fiducial")
(tags fiducial)
(attr smd)
(fp_text reference REF** (at 0 -1.5) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Fiducial (at 0 1.5) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(pad "" smd circle (at 0 0) (size 0.5 0.5) (layers F.Cu F.Mask)
(solder_mask_margin 0.25) (clearance 0.25))
)

View File

@ -0,0 +1,9 @@
(module NPTH (layer F.Cu) (tedit 618E7E16)
(fp_text reference REF** (at 0 0.5) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value NPTH (at 0 -0.5) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(pad "" np_thru_hole circle (at 0 0) (size 1 1) (drill 1) (layers *.Cu *.Mask))
)

View File

@ -0,0 +1,17 @@
(module Tab (layer F.Cu) (tedit 60708B1A)
(descr "A symbol representing annotation for tab placement")
(attr virtual)
(fp_text reference REF** (at 0 -2) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Tab (at -2.75 -1) (layer Dwgs.User)
(effects (font (size 1.2 1.2) (thickness 0.2)))
)
(fp_line (start 0.25 0) (end -0.75 1) (layer Dwgs.User) (width 0.3))
(fp_line (start 0.25 0) (end -0.75 -1) (layer Dwgs.User) (width 0.3))
(fp_line (start 0.25 0) (end -2.75 0) (layer Dwgs.User) (width 0.3))
(fp_line (start 0.25 1) (end 0.25 -1) (layer Dwgs.User) (width 0.3))
(fp_text user "KIKIT: width: 3mm" (at -5.5 0 90) (layer Dwgs.User)
(effects (font (size 1 1) (thickness 0.15)))
)
)

View File

@ -0,0 +1,35 @@
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0.37 0.37 0.37
emissiveColor 0.0 0.0 0.0
specularColor 1.0 1.0 1.0
ambientIntensity 1.0
transparency 0.5
shininess 1.0
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
-0.4 -0.8 0,
0.4 -0.8 0,
0.4 0.8 0,
-0.4 0.8 0,
-0.4 -0.8 0.92,
0.4 -0.8 0.92,
0.4 0.8 0.92,
-0.4 0.8 0.92
]
}
coordIndex [
0,1,2,3,-1
4,5,6,7,-1
0,1,5,4,-1
2,3,7,6,-1
0,3,7,4,-1
1,2,6,5,-1
]
}
}

View File

@ -0,0 +1,35 @@
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0.37 0.37 0.37
emissiveColor 0.0 0.0 0.0
specularColor 1.0 1.0 1.0
ambientIntensity 1.0
transparency 0.5
shininess 1.0
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
-7.5 -6.075 0,
7.5 -6.075 0,
7.5 6.075 0,
-7.5 6.075 0,
-7.5 -6.075 6.2,
7.5 -6.075 6.2,
7.5 6.075 6.2,
-7.5 6.075 6.2
]
}
coordIndex [
0,1,2,3,-1
4,5,6,7,-1
0,1,5,4,-1
2,3,7,6,-1
0,3,7,4,-1
1,2,6,5,-1
]
}
}

View File

@ -0,0 +1,35 @@
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0.37 0.37 0.37
emissiveColor 0.0 0.0 0.0
specularColor 1.0 1.0 1.0
ambientIntensity 1.0
transparency 0.5
shininess 1.0
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
-0.6 -1 0,
0.6 -1 0,
0.6 1 0,
-0.6 1 0,
-0.6 -1 0.8,
0.6 -1 0.8,
0.6 1 0.8,
-0.6 1 0.8
]
}
coordIndex [
0,1,2,3,-1
4,5,6,7,-1
0,1,5,4,-1
2,3,7,6,-1
0,3,7,4,-1
1,2,6,5,-1
]
}
}

View File

@ -0,0 +1,35 @@
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0.37 0.37 0.37
emissiveColor 0.0 0.0 0.0
specularColor 1.0 1.0 1.0
ambientIntensity 1.0
transparency 0.5
shininess 1.0
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
-3.05 -8.89 0,
3.05 -8.89 0,
3.05 8.89 0,
-3.05 8.89 0,
-3.05 -8.89 3.55,
3.05 -8.89 3.55,
3.05 8.89 3.55,
-3.05 8.89 3.55
]
}
coordIndex [
0,1,2,3,-1
4,5,6,7,-1
0,1,5,4,-1
2,3,7,6,-1
0,3,7,4,-1
1,2,6,5,-1
]
}
}

View File

@ -0,0 +1,35 @@
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0.37 0.37 0.37
emissiveColor 0.0 0.0 0.0
specularColor 1.0 1.0 1.0
ambientIntensity 1.0
transparency 0.5
shininess 1.0
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
-2.2 -3.25 0,
2.2 -3.25 0,
2.2 3.25 0,
-2.2 3.25 0,
-2.2 -3.25 1.2,
2.2 -3.25 1.2,
2.2 3.25 1.2,
-2.2 3.25 1.2
]
}
coordIndex [
0,1,2,3,-1
4,5,6,7,-1
0,1,5,4,-1
2,3,7,6,-1
0,3,7,4,-1
1,2,6,5,-1
]
}
}

View File

@ -0,0 +1,35 @@
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0.37 0.37 0.37
emissiveColor 0.0 0.0 0.0
specularColor 1.0 1.0 1.0
ambientIntensity 1.0
transparency 0.5
shininess 1.0
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
-0.8 -1.46 0,
0.8 -1.46 0,
0.8 1.46 0,
-0.8 1.46 0,
-0.8 -1.46 1.25,
0.8 -1.46 1.25,
0.8 1.46 1.25,
-0.8 1.46 1.25
]
}
coordIndex [
0,1,2,3,-1
4,5,6,7,-1
0,1,5,4,-1
2,3,7,6,-1
0,3,7,4,-1
1,2,6,5,-1
]
}
}

View File

@ -0,0 +1,35 @@
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material {
diffuseColor 0.37 0.37 0.37
emissiveColor 0.0 0.0 0.0
specularColor 1.0 1.0 1.0
ambientIntensity 1.0
transparency 0.5
shininess 1.0
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
-0.4 -0.8 0,
0.4 -0.8 0,
0.4 0.8 0,
-0.4 0.8 0,
-0.4 -0.8 0.55,
0.4 -0.8 0.55,
0.4 0.8 0.55,
-0.4 0.8 0.55
]
}
coordIndex [
0,1,2,3,-1
4,5,6,7,-1
0,1,5,4,-1
2,3,7,6,-1
0,3,7,4,-1
1,2,6,5,-1
]
}
}

38
kicad/qeda.dcm Normal file
View File

@ -0,0 +1,38 @@
EESchema-DOCLIB Version 2.0 Date: 23/06/2022 16:55:23
#
$CMP HDMI-001S
D connector, HDMI, receptacle
F https://datasheet.lcsc.com/lcsc/2008152133_XUNPU-HDMI-001S_C720616.pdf
$ENDCMP
#
$CMP FT24C16A-EL
D memory, EEPROM, I²C, 16Kbi
F http://fremontmicro.com/downfile.aspx?filepath=/upload/2019/0715/1102v2x666.pdf&filename=ft24c16a-exx-rev1.4.pdf
$ENDCMP
#
$CMP R0603
D resistor, chip, 1.6x0.8 mm
$ENDCMP
#
$CMP C0603
D Chip capacitor 1.6x0.8 mm
K Capacitor
$ENDCMP
#
$CMP STM8S003x3
D 16-MHz STM8S 8-bit MCU, 8-Kbyte Flash memory, 128-byte data EEPROM, 10-bit ADC, 3 timers, UART, SPI, I2C
K IC, MCU, Micro-Controller, STM8S
F https://www.st.com/resource/en/datasheet/stm8s003f3.pdf
$ENDCMP
#
$CMP XKB_DSICxxLS
D switch, SIP, surface mount
F https://datasheet.lcsc.com/lcsc/2110151630_XKB-Connectivity-DSIC07LS-P_C319033.pdf
$ENDCMP
#
$CMP LED0805
D diode, LED, chip, 2.0x1.2 mm
K LED
$ENDCMP
#
# End Doc Library

205
kicad/qeda.lib Normal file
View File

@ -0,0 +1,205 @@
EESchema-LIBRARY Version 2.3 Date: 23/06/2022 16:55:23
#encoding utf-8
#
# HDMI-001S
#
DEF HDMI-001S J 0 140 Y Y 1 L N
F0 "J" 0 30 50 H V L BNN
F1 "HDMI-001S" 1730 -1130 50 H V L TNN
F2 "qeda:CONNECTOR_HDMI-001S" 0 0 0 H I C CNN
F3 "https://datasheet.lcsc.com/lcsc/2008152133_XUNPU-HDMI-001S_C720616.pdf" 0 0 0 H I C CNN
$FPLIST
CONNECTOR_HDMI-001S
$ENDFPLIST
DRAW
S 0 0 2400 -1100 1 1 12 f
X SCL 15 -200 -200 200 R 50 50 1 1 P
C 50 -200 25 1 1 12 F
X SDA 16 -200 -300 200 R 50 50 1 1 P
C 50 -300 25 1 1 12 F
X CEC 13 -200 -500 200 R 50 50 1 1 P
C 50 -500 25 1 1 12 F
X utility/HEAC+ 14 -200 -700 200 R 50 50 1 1 P
C 50 -700 25 1 1 12 F
X HPD/HEAC- 19 -200 -900 200 R 50 50 1 1 P
C 50 -900 25 1 1 12 F
X CK+ 10 2600 -200 200 L 50 50 1 1 P
C 2350 -200 25 1 1 12 F
X CK- 12 2600 -300 200 L 50 50 1 1 P
C 2350 -300 25 1 1 12 F
X D0+ 7 2600 -400 200 L 50 50 1 1 P
C 2350 -400 25 1 1 12 F
X D0- 9 2600 -500 200 L 50 50 1 1 P
C 2350 -500 25 1 1 12 F
X D1+ 4 2600 -600 200 L 50 50 1 1 P
C 2350 -600 25 1 1 12 F
X D1- 6 2600 -700 200 L 50 50 1 1 P
C 2350 -700 25 1 1 12 F
X D2+ 1 2600 -800 200 L 50 50 1 1 P
C 2350 -800 25 1 1 12 F
X D2- 3 2600 -900 200 L 50 50 1 1 P
C 2350 -900 25 1 1 12 F
X 5V 18 1200 200 200 D 50 50 1 1 W
C 1200 -50 25 1 1 12 F
X GND 17 700 -1300 200 U 50 50 1 1 W
C 700 -1050 25 1 1 12 F
X SHELL S1 900 -1300 200 U 50 50 1 1 P
C 900 -1050 25 1 1 12 F
X SHELL S2 1000 -1300 200 U 50 50 1 1 P
C 1000 -1050 25 1 1 12 F
X SHELL S3 1100 -1300 200 U 50 50 1 1 P
C 1100 -1050 25 1 1 12 F
X SHELL S4 1200 -1300 200 U 50 50 1 1 P
C 1200 -1050 25 1 1 12 F
X CKS 11 1400 -1300 200 U 50 50 1 1 P
C 1400 -1050 25 1 1 12 F
X D0S 8 1500 -1300 200 U 50 50 1 1 P
C 1500 -1050 25 1 1 12 F
X D1S 5 1600 -1300 200 U 50 50 1 1 P
C 1600 -1050 25 1 1 12 F
X D2S 2 1700 -1300 200 U 50 50 1 1 P
C 1700 -1050 25 1 1 12 F
ENDDRAW
ENDDEF
#
# FT24C16A-EL
#
DEF FT24C16A-EL U 0 40 Y Y 1 L N
F0 "U" 0 30 50 H V L BNN
F1 "FT24C16A-EL" 330 -630 50 H V L TNN
F2 "qeda:SOT95P280X125-5N" 0 0 0 H I C CNN
F3 "http://fremontmicro.com/downfile.aspx?filepath=/upload/2019/0715/1102v2x666.pdf&filename=ft24c16a-exx-rev1.4.pdf" 0 0 0 H I C CNN
$FPLIST
SOT95P280X125-5N
$ENDFPLIST
DRAW
S 0 0 400 -600 1 1 12 f
X SCL 1 -200 -100 200 R 50 50 1 1 U
X SDA 3 -200 -300 200 R 50 50 1 1 B
X WP 5 -200 -500 200 R 50 50 1 1 U
X VCC 4 300 200 200 D 50 50 1 1 W
X GND 2 300 -800 200 U 50 50 1 1 W
ENDDRAW
ENDDEF
#
# R0603
#
DEF R0603 R 0 40 N N 1 L N
F0 "R" 0 70 50 H V C BNN
F1 "R0603" 0 -70 50 H V C TNN
F2 "qeda:UC1608X55N" 0 0 0 H I C CNN
$FPLIST
UC1608X55N
$ENDFPLIST
DRAW
S -100 40 100 -40 1 1 12 f
X L 1 -150 0 50 R 50 50 1 1 P
X R 2 150 0 50 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# C0603
#
DEF C0603 C 0 40 N N 1 L N
F0 "C" 0 110 50 H V C BNN
F1 "C0603" 0 -110 50 H V C TNN
F2 "qeda:CAPC1608X92N" 0 0 0 H I C CNN
$FPLIST
CAPC1608X92N
$ENDFPLIST
DRAW
P 2 1 1 12 -15 80 -15 -80 N
P 2 1 1 12 15 80 15 -80 N
X L 1 -100 0 85 R 50 50 1 1 P
X R 2 100 0 85 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# STM8S003x3
#
DEF STM8S003x3 U 0 40 Y Y 1 L N
F0 "U" 0 30 50 H V L BNN
F1 "STM8S003x3" 680 -1330 50 H V L TNN
F2 "qeda:SOP65P640X120-20N" 0 0 0 H I C CNN
F3 "https://www.st.com/resource/en/datasheet/stm8s003f3.pdf" 0 0 0 H I C CNN
ALIAS STM8S003F3 STM8S003K3
$FPLIST
SOP65P640X120-20N
$ENDFPLIST
DRAW
S 0 0 1150 -1300 1 1 12 f
X PA1/OSCIN 5 -200 -300 200 R 50 50 1 1 B
X PA2/OSCOUT 6 -200 -400 200 R 50 50 1 1 B
X PA3 10 -200 -500 200 R 50 50 1 1 B
X PB4 12 -200 -700 200 R 50 50 1 1 B
X PB5 11 -200 -800 200 R 50 50 1 1 B
X NRST 4 -200 -1000 200 R 50 50 1 1 I
X PC3 13 1350 -100 200 L 50 50 1 1 B
X PC4 14 1350 -200 200 L 50 50 1 1 B
X PC5 15 1350 -300 200 L 50 50 1 1 B
X PC6 16 1350 -400 200 L 50 50 1 1 B
X PC7 17 1350 -500 200 L 50 50 1 1 B
X PD1/SWIM 18 1350 -700 200 L 50 50 1 1 B
X PD2 19 1350 -800 200 L 50 50 1 1 B
X PD3 20 1350 -900 200 L 50 50 1 1 B
X PD4 1 1350 -1000 200 L 50 50 1 1 B
X PD5 2 1350 -1100 200 L 50 50 1 1 B
X PD6 3 1350 -1200 200 L 50 50 1 1 B
X VCAP 8 600 200 200 D 50 50 1 1 W
X VDD 9 700 200 200 D 50 50 1 1 W
X VSS 7 650 -1500 200 U 50 50 1 1 W
ENDDRAW
ENDDEF
#
# XKB_DSICxxLS
#
DEF XKB_DSICxxLS SW 0 40 Y Y 1 L N
F0 "SW" 425 30 50 H V C BNN
F1 "XKB_DSICxxLS" 425 -830 50 H V C TNN
F2 "qeda:SOP254P976X355-14N" 0 0 0 H I C CNN
F3 "https://datasheet.lcsc.com/lcsc/2110151630_XKB-Connectivity-DSIC07LS-P_C319033.pdf" 0 0 0 H I C CNN
$FPLIST
SOP254P976X355-14N
$ENDFPLIST
DRAW
S 0 0 850 -800 1 1 12 f
S 360 -320 440 -400 1 1 12 N
S 360 -400 440 -480 1 1 12 F
X LEFT 1 -200 -100 200 R 50 50 1 1 P
X LEFT 2 -200 -200 200 R 50 50 1 1 P
X LEFT 3 -200 -300 200 R 50 50 1 1 P
X LEFT 4 -200 -400 200 R 50 50 1 1 P
X LEFT 5 -200 -500 200 R 50 50 1 1 P
X LEFT 6 -200 -600 200 R 50 50 1 1 P
X LEFT 7 -200 -700 200 R 50 50 1 1 P
X RIGHT 8 1050 -100 200 L 50 50 1 1 P
X RIGHT 9 1050 -200 200 L 50 50 1 1 P
X RIGHT 10 1050 -300 200 L 50 50 1 1 P
X RIGHT 11 1050 -400 200 L 50 50 1 1 P
X RIGHT 12 1050 -500 200 L 50 50 1 1 P
X RIGHT 13 1050 -600 200 L 50 50 1 1 P
X RIGHT 14 1050 -700 200 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# LED0805
#
DEF LED0805 D 0 40 N N 1 L N
F0 "D" 0 80 50 H V C BNN
F1 "LED0805" 0 -80 50 H V C TNN
F2 "qeda:LEDC2012X80N" 0 0 0 H I C CNN
$FPLIST
LEDC2012X80N
$ENDFPLIST
DRAW
P 4 1 1 12 -40 50 40 0 -40 -50 -40 50 f
P 2 1 1 12 40 50 40 -50 N
P 2 1 1 12 50 75 100 125 N
P 4 1 1 12 68 107 100 125 82 93 68 107 F
P 2 1 1 12 75 50 125 100 N
P 4 1 1 12 93 82 125 100 107 68 93 82 F
X A 2 -100 0 60 R 50 50 1 1 P
X C 1 100 0 60 L 50 50 1 1 P
ENDDRAW
ENDDEF
# End Library

View File

@ -0,0 +1,38 @@
(module CAPC1608X92N (layer F.Cu)
(attr smd)
(pad 1 smd rect (at 0.000 -0.750) (size 1.250 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 2 smd rect (at 0.000 0.750) (size 1.250 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(fp_text reference REF** (at 0.000 0.000) (layer F.SilkS)
(effects (font (size 1.200 1.200) (thickness 0.200)))
)
(fp_line (start -0.925 -0.900) (end -0.925 0.900) (layer F.SilkS) (width 0.200))
(fp_line (start 0.925 -0.900) (end 0.925 0.900) (layer F.SilkS) (width 0.200))
(fp_circle (center 0.000 0.000) (end 0.000 0.500) (layer F.Fab) (width 0.100))
(fp_line (start -0.700 0.000) (end 0.700 0.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.000 -0.700) (end 0.000 0.700) (layer F.Fab) (width 0.100))
(fp_text value CAPC1608X92N (at 0.000 0.000 90) (layer F.Fab)
(effects (font (size 0.528 0.528) (thickness 0.100)))
)
(fp_text user REF** (at 0.000 0.000 90) hide (layer F.Fab)
(effects (font (size 0.528 0.528) (thickness 0.100)))
)
(fp_line (start -0.400 -0.800) (end 0.400 -0.800) (layer F.Fab) (width 0.100))
(fp_line (start 0.400 -0.800) (end 0.400 0.800) (layer F.Fab) (width 0.100))
(fp_line (start 0.400 0.800) (end -0.400 0.800) (layer F.Fab) (width 0.100))
(fp_line (start -0.400 0.800) (end -0.400 -0.800) (layer F.Fab) (width 0.100))
(fp_line (start -0.875 -1.550) (end -0.875 -1.050) (layer F.CrtYd) (width 0.050))
(fp_line (start -0.875 -1.050) (end -0.875 1.050) (layer F.CrtYd) (width 0.050))
(fp_line (start -0.875 1.050) (end -0.875 1.550) (layer F.CrtYd) (width 0.050))
(fp_line (start -0.875 1.550) (end 0.875 1.550) (layer F.CrtYd) (width 0.050))
(fp_line (start 0.875 1.550) (end 0.875 1.050) (layer F.CrtYd) (width 0.050))
(fp_line (start 0.875 1.050) (end 0.875 -1.050) (layer F.CrtYd) (width 0.050))
(fp_line (start 0.875 -1.050) (end 0.875 -1.550) (layer F.CrtYd) (width 0.050))
(fp_line (start 0.875 -1.550) (end -0.875 -1.550) (layer F.CrtYd) (width 0.050))
(model CAPC1608X92N.wrl
(at (xyz 0 0 0))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 0 0 ))
)
)

View File

@ -0,0 +1,85 @@
(module CONNECTOR_HDMI-001S (layer F.Cu)
(pad 1 smd rect (at -4.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 2 smd rect (at -4.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 3 smd rect (at -3.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 4 smd rect (at -3.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 5 smd rect (at -2.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 6 smd rect (at -2.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 7 smd rect (at -1.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 8 smd rect (at -1.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 9 smd rect (at -0.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 10 smd rect (at 0.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 11 smd rect (at 0.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 12 smd rect (at 1.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 13 smd rect (at 1.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 14 smd rect (at 2.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 15 smd rect (at 2.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 16 smd rect (at 3.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 17 smd rect (at 3.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 18 smd rect (at 4.000 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 19 smd rect (at 4.500 4.235) (size 0.300 2.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad S1 thru_hole oval (at -7.250 -2.485) (size 1.500 2.300) (layers F.Cu F.Mask *.Cu B.Cu B.Mask)
(drill oval 0.900 1.600)
(solder_mask_margin 0.050))
(pad S2 thru_hole oval (at 7.250 -2.485) (size 1.500 2.300) (layers F.Cu F.Mask *.Cu B.Cu B.Mask)
(drill oval 0.900 1.600)
(solder_mask_margin 0.050))
(pad S3 thru_hole oval (at -7.250 3.475) (size 1.500 3.400) (layers F.Cu F.Mask *.Cu B.Cu B.Mask)
(drill oval 0.900 2.700)
(solder_mask_margin 0.050))
(pad S4 thru_hole oval (at 7.250 3.475) (size 1.500 3.400) (layers F.Cu F.Mask *.Cu B.Cu B.Mask)
(drill oval 0.900 2.700)
(solder_mask_margin 0.050))
(fp_text reference REF** (at 0.000 0.000) (layer F.SilkS)
(effects (font (size 1.200 1.200) (thickness 0.200)))
)
(fp_line (start -7.600 -6.175) (end 7.600 -6.175) (layer F.SilkS) (width 0.200))
(fp_line (start 7.600 -6.175) (end 7.600 -3.935) (layer F.SilkS) (width 0.200))
(fp_line (start 7.600 -1.035) (end 7.600 1.475) (layer F.SilkS) (width 0.200))
(fp_line (start 7.600 5.475) (end 7.600 6.175) (layer F.SilkS) (width 0.200))
(fp_line (start 7.600 6.175) (end -7.600 6.175) (layer F.SilkS) (width 0.200))
(fp_line (start -7.600 -6.175) (end -7.600 -3.935) (layer F.SilkS) (width 0.200))
(fp_line (start -7.600 -1.035) (end -7.600 1.475) (layer F.SilkS) (width 0.200))
(fp_line (start -7.600 5.475) (end -7.600 6.175) (layer F.SilkS) (width 0.200))
(fp_circle (center 0.000 0.000) (end 0.000 0.500) (layer F.Fab) (width 0.100))
(fp_line (start -0.700 0.000) (end 0.700 0.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.000 -0.700) (end 0.000 0.700) (layer F.Fab) (width 0.100))
(fp_text value CONNECTOR_HDMI-001S (at 0.000 0.000 0) (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_text user REF** (at 0.000 0.000 0) hide (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_line (start -7.500 -6.075) (end 7.500 -6.075) (layer F.Fab) (width 0.100))
(fp_line (start 7.500 -6.075) (end 7.500 6.075) (layer F.Fab) (width 0.100))
(fp_line (start 7.500 6.075) (end -7.500 6.075) (layer F.Fab) (width 0.100))
(fp_line (start -7.500 6.075) (end -7.500 -6.075) (layer F.Fab) (width 0.100))
(fp_line (start -8.250 -6.325) (end 8.250 -6.325) (layer F.CrtYd) (width 0.050))
(fp_line (start 8.250 -6.325) (end 8.250 6.325) (layer F.CrtYd) (width 0.050))
(fp_line (start 8.250 6.325) (end -8.250 6.325) (layer F.CrtYd) (width 0.050))
(fp_line (start -8.250 6.325) (end -8.250 -6.325) (layer F.CrtYd) (width 0.050))
(model CONNECTOR_HDMI-001S.wrl
(at (xyz 0 0 0))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 0 0 ))
)
)

View File

@ -0,0 +1,42 @@
(module LEDC2012X80N (layer F.Cu)
(attr smd)
(pad 1 smd rect (at 0.000 -0.900) (size 1.600 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 2 smd rect (at 0.000 0.900) (size 1.600 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(fp_text reference REF** (at 0.000 0.000) (layer F.SilkS)
(effects (font (size 1.200 1.200) (thickness 0.200)))
)
(fp_line (start -1.100 -1.100) (end -1.100 1.100) (layer F.SilkS) (width 0.200))
(fp_line (start 1.100 -1.100) (end 1.100 1.100) (layer F.SilkS) (width 0.200))
(fp_line (start -1.100 -1.100) (end -1.100 -1.750) (layer F.SilkS) (width 0.200))
(fp_line (start -1.100 -1.750) (end 1.100 -1.750) (layer F.SilkS) (width 0.200))
(fp_line (start 1.100 -1.750) (end 1.100 -1.100) (layer F.SilkS) (width 0.200))
(fp_circle (center 0.000 0.000) (end 0.000 0.500) (layer F.Fab) (width 0.100))
(fp_line (start -0.700 0.000) (end 0.700 0.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.000 -0.700) (end 0.000 0.700) (layer F.Fab) (width 0.100))
(fp_text value LEDC2012X80N (at 0.000 0.000 90) (layer F.Fab)
(effects (font (size 0.792 0.792) (thickness 0.100)))
)
(fp_text user REF** (at 0.000 0.000 90) hide (layer F.Fab)
(effects (font (size 0.792 0.792) (thickness 0.100)))
)
(fp_line (start 0.000 -1.000) (end 0.600 -1.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.600 -1.000) (end 0.600 1.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.600 1.000) (end -0.600 1.000) (layer F.Fab) (width 0.100))
(fp_line (start -0.600 1.000) (end -0.600 -0.400) (layer F.Fab) (width 0.100))
(fp_line (start -0.600 -0.400) (end 0.000 -1.000) (layer F.Fab) (width 0.100))
(fp_line (start -1.050 -1.700) (end -1.050 -1.250) (layer F.CrtYd) (width 0.050))
(fp_line (start -1.050 -1.250) (end -1.050 1.250) (layer F.CrtYd) (width 0.050))
(fp_line (start -1.050 1.250) (end -1.050 1.700) (layer F.CrtYd) (width 0.050))
(fp_line (start -1.050 1.700) (end 1.050 1.700) (layer F.CrtYd) (width 0.050))
(fp_line (start 1.050 1.700) (end 1.050 1.250) (layer F.CrtYd) (width 0.050))
(fp_line (start 1.050 1.250) (end 1.050 -1.250) (layer F.CrtYd) (width 0.050))
(fp_line (start 1.050 -1.250) (end 1.050 -1.700) (layer F.CrtYd) (width 0.050))
(fp_line (start 1.050 -1.700) (end -1.050 -1.700) (layer F.CrtYd) (width 0.050))
(model LEDC2012X80N.wrl
(at (xyz 0 0 0))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 0 0 ))
)
)

View File

@ -0,0 +1,61 @@
(module MECHANICAL_XKB_DSICXXLS (layer F.Cu)
(attr smd)
(pad NC1 smd rect (at -7.620 -4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC2 smd rect (at -5.080 -4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC3 smd rect (at -2.540 -4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC4 smd rect (at 0.000 -4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC5 smd rect (at 2.540 -4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC6 smd rect (at 5.080 -4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC7 smd rect (at 7.620 -4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC8 smd rect (at -7.620 4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC9 smd rect (at -5.080 4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC10 smd rect (at -2.540 4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC11 smd rect (at 0.000 4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC12 smd rect (at 2.540 4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC13 smd rect (at 5.080 4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad NC14 smd rect (at 7.620 4.650) (size 1.100 1.700) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(fp_text reference REF** (at 0.000 0.000) (layer F.SilkS)
(effects (font (size 1.200 1.200) (thickness 0.200)))
)
(fp_line (start -8.990 -3.150) (end 8.990 -3.150) (layer F.SilkS) (width 0.200))
(fp_line (start 8.990 -3.150) (end 8.990 3.150) (layer F.SilkS) (width 0.200))
(fp_line (start 8.990 3.150) (end -8.990 3.150) (layer F.SilkS) (width 0.200))
(fp_line (start -8.990 3.150) (end -8.990 -3.150) (layer F.SilkS) (width 0.200))
(fp_circle (center 0.000 0.000) (end 0.000 0.500) (layer F.Fab) (width 0.100))
(fp_line (start -0.700 0.000) (end 0.700 0.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.000 -0.700) (end 0.000 0.700) (layer F.Fab) (width 0.100))
(fp_text value MECHANICAL_XKB_DSICXXLS (at 0.000 0.000 0) (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_text user REF** (at 0.000 0.000 0) hide (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_line (start -7.890 -3.050) (end 8.890 -3.050) (layer F.Fab) (width 0.100))
(fp_line (start 8.890 -3.050) (end 8.890 3.050) (layer F.Fab) (width 0.100))
(fp_line (start 8.890 3.050) (end -8.890 3.050) (layer F.Fab) (width 0.100))
(fp_line (start -8.890 3.050) (end -8.890 -2.050) (layer F.Fab) (width 0.100))
(fp_line (start -8.890 -2.050) (end -7.890 -3.050) (layer F.Fab) (width 0.100))
(fp_line (start -9.140 -5.750) (end 9.140 -5.750) (layer F.CrtYd) (width 0.050))
(fp_line (start 9.140 -5.750) (end 9.140 5.750) (layer F.CrtYd) (width 0.050))
(fp_line (start 9.140 5.750) (end -9.140 5.750) (layer F.CrtYd) (width 0.050))
(fp_line (start -9.140 5.750) (end -9.140 -5.750) (layer F.CrtYd) (width 0.050))
(model MECHANICAL_XKB_DSICXXLS.wrl
(at (xyz 0 0 0))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 0 0 ))
)
)

View File

@ -0,0 +1,71 @@
(module SOP254P976X355-14N (layer F.Cu)
(attr smd)
(pad 1 smd rect (at -4.650 -7.620) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 2 smd rect (at -4.650 -5.080) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 3 smd rect (at -4.650 -2.540) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 4 smd rect (at -4.650 0.000) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 5 smd rect (at -4.650 2.540) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 6 smd rect (at -4.650 5.080) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 7 smd rect (at -4.650 7.620) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 14 smd rect (at 4.650 -7.620) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 13 smd rect (at 4.650 -5.080) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 12 smd rect (at 4.650 -2.540) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 11 smd rect (at 4.650 0.000) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 10 smd rect (at 4.650 2.540) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 9 smd rect (at 4.650 5.080) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 8 smd rect (at 4.650 7.620) (size 1.700 1.100) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(fp_text reference REF** (at 0.000 0.000) (layer F.SilkS)
(effects (font (size 1.200 1.200) (thickness 0.200)))
)
(fp_line (start -3.150 -8.990) (end 3.150 -8.990) (layer F.SilkS) (width 0.200))
(fp_line (start 3.150 -8.990) (end 3.150 8.990) (layer F.SilkS) (width 0.200))
(fp_line (start 3.150 8.990) (end -3.150 8.990) (layer F.SilkS) (width 0.200))
(fp_line (start -3.150 8.990) (end -3.150 -8.990) (layer F.SilkS) (width 0.200))
(fp_line (start -3.150 -8.470) (end -5.800 -8.470) (layer F.SilkS) (width 0.200))
(fp_line (start -5.800 -8.470) (end -5.800 -7.070) (layer F.SilkS) (width 0.200))
(fp_circle (center 0.000 0.000) (end 0.000 0.500) (layer F.Fab) (width 0.100))
(fp_line (start -0.700 0.000) (end 0.700 0.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.000 -0.700) (end 0.000 0.700) (layer F.Fab) (width 0.100))
(fp_text value SOP254P976X355-14N (at 0.000 0.000 90) (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_text user REF** (at 0.000 0.000 90) hide (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_line (start -2.050 -8.890) (end 3.050 -8.890) (layer F.Fab) (width 0.100))
(fp_line (start 3.050 -8.890) (end 3.050 8.890) (layer F.Fab) (width 0.100))
(fp_line (start 3.050 8.890) (end -3.050 8.890) (layer F.Fab) (width 0.100))
(fp_line (start -3.050 8.890) (end -3.050 -7.890) (layer F.Fab) (width 0.100))
(fp_line (start -3.050 -7.890) (end -2.050 -8.890) (layer F.Fab) (width 0.100))
(fp_line (start -5.750 -8.420) (end -3.300 -8.420) (layer F.CrtYd) (width 0.050))
(fp_line (start -3.300 -8.420) (end -3.300 -9.140) (layer F.CrtYd) (width 0.050))
(fp_line (start -3.300 -9.140) (end 3.300 -9.140) (layer F.CrtYd) (width 0.050))
(fp_line (start 3.300 -9.140) (end 3.300 -8.420) (layer F.CrtYd) (width 0.050))
(fp_line (start 3.300 -8.420) (end 5.750 -8.420) (layer F.CrtYd) (width 0.050))
(fp_line (start 5.750 -8.420) (end 5.750 8.420) (layer F.CrtYd) (width 0.050))
(fp_line (start 5.750 8.420) (end 3.300 8.420) (layer F.CrtYd) (width 0.050))
(fp_line (start 3.300 8.420) (end 3.300 9.140) (layer F.CrtYd) (width 0.050))
(fp_line (start 3.300 9.140) (end -3.300 9.140) (layer F.CrtYd) (width 0.050))
(fp_line (start -3.300 9.140) (end -3.300 8.420) (layer F.CrtYd) (width 0.050))
(fp_line (start -3.300 8.420) (end -5.750 8.420) (layer F.CrtYd) (width 0.050))
(fp_line (start -5.750 8.420) (end -5.750 -8.420) (layer F.CrtYd) (width 0.050))
(model SOP254P976X355-14N.wrl
(at (xyz 0 0 0))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 0 0 ))
)
)

View File

@ -0,0 +1,81 @@
(module SOP65P640X120-20N (layer F.Cu)
(attr smd)
(pad 1 smd rect (at -2.950 -2.925) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 2 smd rect (at -2.950 -2.275) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 3 smd rect (at -2.950 -1.625) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 4 smd rect (at -2.950 -0.975) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 5 smd rect (at -2.950 -0.325) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 6 smd rect (at -2.950 0.325) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 7 smd rect (at -2.950 0.975) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 8 smd rect (at -2.950 1.625) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 9 smd rect (at -2.950 2.275) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 10 smd rect (at -2.950 2.925) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 20 smd rect (at 2.950 -2.925) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 19 smd rect (at 2.950 -2.275) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 18 smd rect (at 2.950 -1.625) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 17 smd rect (at 2.950 -0.975) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 16 smd rect (at 2.950 -0.325) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 15 smd rect (at 2.950 0.325) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 14 smd rect (at 2.950 0.975) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 13 smd rect (at 2.950 1.625) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 12 smd rect (at 2.950 2.275) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(pad 11 smd rect (at 2.950 2.925) (size 1.525 0.450) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.001))
(fp_text reference REF** (at 0.000 0.000) (layer F.SilkS)
(effects (font (size 1.200 1.200) (thickness 0.200)))
)
(fp_line (start -2.300 -3.450) (end 2.300 -3.450) (layer F.SilkS) (width 0.200))
(fp_line (start 2.300 3.450) (end -2.300 3.450) (layer F.SilkS) (width 0.200))
(fp_line (start -2.300 -3.450) (end -4.013 -3.450) (layer F.SilkS) (width 0.200))
(fp_line (start -4.013 -3.450) (end -4.013 -2.700) (layer F.SilkS) (width 0.200))
(fp_circle (center 0.000 0.000) (end 0.000 0.500) (layer F.Fab) (width 0.100))
(fp_line (start -0.700 0.000) (end 0.700 0.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.000 -0.700) (end 0.000 0.700) (layer F.Fab) (width 0.100))
(fp_text value SOP65P640X120-20N (at 0.000 0.000 90) (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_text user REF** (at 0.000 0.000 90) hide (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_line (start -1.200 -3.250) (end 2.200 -3.250) (layer F.Fab) (width 0.100))
(fp_line (start 2.200 -3.250) (end 2.200 3.250) (layer F.Fab) (width 0.100))
(fp_line (start 2.200 3.250) (end -2.200 3.250) (layer F.Fab) (width 0.100))
(fp_line (start -2.200 3.250) (end -2.200 -2.250) (layer F.Fab) (width 0.100))
(fp_line (start -2.200 -2.250) (end -1.200 -3.250) (layer F.Fab) (width 0.100))
(fp_line (start -3.963 -3.400) (end -2.450 -3.400) (layer F.CrtYd) (width 0.050))
(fp_line (start -2.450 -3.400) (end -2.450 -3.500) (layer F.CrtYd) (width 0.050))
(fp_line (start -2.450 -3.500) (end 2.450 -3.500) (layer F.CrtYd) (width 0.050))
(fp_line (start 2.450 -3.500) (end 2.450 -3.400) (layer F.CrtYd) (width 0.050))
(fp_line (start 2.450 -3.400) (end 3.963 -3.400) (layer F.CrtYd) (width 0.050))
(fp_line (start 3.963 -3.400) (end 3.963 3.400) (layer F.CrtYd) (width 0.050))
(fp_line (start 3.963 3.400) (end 2.450 3.400) (layer F.CrtYd) (width 0.050))
(fp_line (start 2.450 3.400) (end 2.450 3.500) (layer F.CrtYd) (width 0.050))
(fp_line (start 2.450 3.500) (end -2.450 3.500) (layer F.CrtYd) (width 0.050))
(fp_line (start -2.450 3.500) (end -2.450 3.400) (layer F.CrtYd) (width 0.050))
(fp_line (start -2.450 3.400) (end -3.963 3.400) (layer F.CrtYd) (width 0.050))
(fp_line (start -3.963 3.400) (end -3.963 -3.400) (layer F.CrtYd) (width 0.050))
(model SOP65P640X120-20N.wrl
(at (xyz 0 0 0))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 0 0 ))
)
)

View File

@ -0,0 +1,52 @@
(module SOT95P280X125-5N (layer F.Cu)
(attr smd)
(pad 1 smd rect (at -1.300 -0.950) (size 1.100 0.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 2 smd rect (at -1.300 0.000) (size 1.100 0.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 3 smd rect (at -1.300 0.950) (size 1.100 0.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 4 smd rect (at 1.300 0.950) (size 1.100 0.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 5 smd rect (at 1.300 -0.950) (size 1.100 0.600) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(fp_text reference REF** (at 0.000 0.000) (layer F.SilkS)
(effects (font (size 1.200 1.200) (thickness 0.200)))
)
(fp_line (start -0.900 -1.560) (end 0.900 -1.560) (layer F.SilkS) (width 0.200))
(fp_line (start 0.900 -0.350) (end 0.900 0.350) (layer F.SilkS) (width 0.200))
(fp_line (start 0.900 1.560) (end -0.900 1.560) (layer F.SilkS) (width 0.200))
(fp_line (start -0.900 -1.550) (end -2.150 -1.550) (layer F.SilkS) (width 0.200))
(fp_line (start -2.150 -1.550) (end -2.150 -0.650) (layer F.SilkS) (width 0.200))
(fp_circle (center 0.000 0.000) (end 0.000 0.500) (layer F.Fab) (width 0.100))
(fp_line (start -0.700 0.000) (end 0.700 0.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.000 -0.700) (end 0.000 0.700) (layer F.Fab) (width 0.100))
(fp_text value SOT95P280X125-5N (at 0.000 0.000 90) (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_text user REF** (at 0.000 0.000 90) hide (layer F.Fab)
(effects (font (size 1.000 1.000) (thickness 0.100)))
)
(fp_line (start 0.000 -1.460) (end 0.800 -1.460) (layer F.Fab) (width 0.100))
(fp_line (start 0.800 -1.460) (end 0.800 1.460) (layer F.Fab) (width 0.100))
(fp_line (start 0.800 1.460) (end -0.800 1.460) (layer F.Fab) (width 0.100))
(fp_line (start -0.800 1.460) (end -0.800 -0.660) (layer F.Fab) (width 0.100))
(fp_line (start -0.800 -0.660) (end 0.000 -1.460) (layer F.Fab) (width 0.100))
(fp_line (start -2.100 -1.500) (end -1.050 -1.500) (layer F.CrtYd) (width 0.050))
(fp_line (start -1.050 -1.500) (end -1.050 -1.710) (layer F.CrtYd) (width 0.050))
(fp_line (start -1.050 -1.710) (end 1.050 -1.710) (layer F.CrtYd) (width 0.050))
(fp_line (start 1.050 -1.710) (end 1.050 -1.500) (layer F.CrtYd) (width 0.050))
(fp_line (start 1.050 -1.500) (end 2.100 -1.500) (layer F.CrtYd) (width 0.050))
(fp_line (start 2.100 -1.500) (end 2.100 1.500) (layer F.CrtYd) (width 0.050))
(fp_line (start 2.100 1.500) (end 1.050 1.500) (layer F.CrtYd) (width 0.050))
(fp_line (start 1.050 1.500) (end 1.050 1.710) (layer F.CrtYd) (width 0.050))
(fp_line (start 1.050 1.710) (end -1.050 1.710) (layer F.CrtYd) (width 0.050))
(fp_line (start -1.050 1.710) (end -1.050 1.500) (layer F.CrtYd) (width 0.050))
(fp_line (start -1.050 1.500) (end -2.100 1.500) (layer F.CrtYd) (width 0.050))
(fp_line (start -2.100 1.500) (end -2.100 -1.500) (layer F.CrtYd) (width 0.050))
(model SOT95P280X125-5N.wrl
(at (xyz 0 0 0))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 0 0 ))
)
)

View File

@ -0,0 +1,38 @@
(module UC1608X55N (layer F.Cu)
(attr smd)
(pad 1 smd rect (at 0.000 -0.700) (size 1.100 0.750) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(pad 2 smd rect (at 0.000 0.700) (size 1.100 0.750) (layers F.Cu F.Mask F.Paste)
(solder_mask_margin 0.050))
(fp_text reference REF** (at 0.000 0.000) (layer F.SilkS)
(effects (font (size 1.200 1.200) (thickness 0.200)))
)
(fp_line (start -0.850 -0.900) (end -0.850 0.900) (layer F.SilkS) (width 0.200))
(fp_line (start 0.850 -0.900) (end 0.850 0.900) (layer F.SilkS) (width 0.200))
(fp_circle (center 0.000 0.000) (end 0.000 0.500) (layer F.Fab) (width 0.100))
(fp_line (start -0.700 0.000) (end 0.700 0.000) (layer F.Fab) (width 0.100))
(fp_line (start 0.000 -0.700) (end 0.000 0.700) (layer F.Fab) (width 0.100))
(fp_text value UC1608X55N (at 0.000 0.000 90) (layer F.Fab)
(effects (font (size 0.528 0.528) (thickness 0.100)))
)
(fp_text user REF** (at 0.000 0.000 90) hide (layer F.Fab)
(effects (font (size 0.528 0.528) (thickness 0.100)))
)
(fp_line (start -0.400 -0.800) (end 0.400 -0.800) (layer F.Fab) (width 0.100))
(fp_line (start 0.400 -0.800) (end 0.400 0.800) (layer F.Fab) (width 0.100))
(fp_line (start 0.400 0.800) (end -0.400 0.800) (layer F.Fab) (width 0.100))
(fp_line (start -0.400 0.800) (end -0.400 -0.800) (layer F.Fab) (width 0.100))
(fp_line (start -0.730 -1.255) (end -0.730 -0.980) (layer F.CrtYd) (width 0.050))
(fp_line (start -0.730 -0.980) (end -0.730 0.980) (layer F.CrtYd) (width 0.050))
(fp_line (start -0.730 0.980) (end -0.730 1.255) (layer F.CrtYd) (width 0.050))
(fp_line (start -0.730 1.255) (end 0.730 1.255) (layer F.CrtYd) (width 0.050))
(fp_line (start 0.730 1.255) (end 0.730 0.980) (layer F.CrtYd) (width 0.050))
(fp_line (start 0.730 0.980) (end 0.730 -0.980) (layer F.CrtYd) (width 0.050))
(fp_line (start 0.730 -0.980) (end 0.730 -1.255) (layer F.CrtYd) (width 0.050))
(fp_line (start 0.730 -1.255) (end -0.730 -1.255) (layer F.CrtYd) (width 0.050))
(model UC1608X55N.wrl
(at (xyz 0 0 0))
(scale (xyz 0.3937 0.3937 0.3937))
(rotate (xyz 0 0 0 ))
)
)

@ -1 +1 @@
Subproject commit 939ae5450bb586bea02e4c7bb27aaf4f8920e5e8
Subproject commit 00e9790a224eb9add19e01e9095b80b05f6cf944

View File

@ -1,58 +0,0 @@
#!/bin/sh
if test ! $# -eq 2
then
echo "Need two arguments: a board file name and a tab file name" >&2
exit 1
fi
board="$1"
tab="$2"
if test ! -f "$board"
then
echo "Board file $board not found" >&2
exit 1
fi
if test ! -f "$tab"
then
echo "Tab file $tab not found" >&2
exit 1
fi
btmp=.tmp.$board
awk -F "[ \t]*[;][ \t]*" -v "outfn=$btmp" '
BEGIN { sq = "'\''" }
# quote s with single quotes and remove any single quote from it
# (pcb-rnd action syntax does not have escaping)
function squote(s)
{
gsub("[" sq "]", ".", s)
return sq s sq
}
# ignore comments
/^[ \t]*#/ { next }
# generate an unselect-query-propset sequence for each line
(NF > 1) {
print "Unselect(all)"
print "query(select, " squote($1) ")"
for(n = 2; n <= NF; n++) {
if (split($n, A, "=") == 2)
print "propset(selection, " squote(A[1]) "," squote(A[2]) ")"
}
}
END {
print "Unselect(all)"
print "Save(LayoutAs, " squote(outfn) ")"
}
' < "$tab" | pcb-rnd --gui batch "$board" && mv "$btmp" "$board"

BIN
picture/back_v2.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 KiB

BIN
picture/dongle_v1_back.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

BIN
picture/front_v2.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

BIN
picture/inline_v0_back.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

View File

@ -1,9 +0,0 @@
@.a.footprint == "LEDC2012X80N.lht"; a/xy::jlcpcb::rotate=270;
@.a.footprint == "RESC1608X55N.lht"; a/xy::jlcpcb::rotate=90;
@.a.footprint == "CONNECTOR_USB_MICRO-B_C10418.lht"; a/xy::jlcpcb::translate=-1.2mm,0mm;
@.a.footprint == "CONNECTOR_USB_MICRO-B_C10418.lht"; a/xy::jlcpcb::rotate=270;
@.a.footprint == "CONNECTOR_USB-A-2.0_RECEPTACLE_C42428.lht"; a/xy::jlcpcb::translate=0mm,-1.7mm;
@.a.footprint == "CONNECTOR_MY-1220-03.lht"; a/xy::jlcpcb::translate=0mm,-0.95mm;
@.a.footprint == "CONNECTOR_XKB_U262-24XN-4BV60.lht"; a/xy::jlcpcb::rotate=180;
@.a.footprint == "CONNECTOR_XKB_U262-24XN-4BV60.lht"; a/xy::jlcpcb::translate=0mm,0.7mm;
@.a.footprint == "SOT95P237X112-3N.lht"; a/xy::jlcpcb::rotate=180;

9
refdes2fab.py Normal file
View File

@ -0,0 +1,9 @@
import pcbnew
import sys
board = pcbnew.LoadBoard(sys.argv[1])
for fp in board.GetFootprints():
fp.Value().SetVisible(False)
fp.Reference().SetLayer(board.GetLayerID('F.Fab'))
board.Save(sys.argv[1])

3
sym-lib-table Normal file
View File

@ -0,0 +1,3 @@
(sym_lib_table
(lib (name "qeda")(type "Legacy")(uri "${KIPRJMOD}/kicad/qeda.lib")(options "")(descr ""))
)

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +0,0 @@
v 20210626 2
C 0 0 1 0 0 title.sym
{
T 1000 700 5 10 1 1 0 0 1
date=$date$
T 4300 700 5 10 1 1 0 0 1
org=CuVoodoo
T 4300 400 5 10 1 1 0 0 1
authors=King Kévin
T 3000 1200 5 14 1 1 0 4 1
title=TITLE
T 1000 400 5 10 1 1 0 0 1
version=$version$
T 1000 100 5 10 1 1 0 0 1
revision=$revision$
T 4300 100 5 10 1 1 0 0 1
licence=CERN-OHL-S
T 0 1800 5 10 0 0 0 0 1
device=none
T 0 2000 5 10 0 0 0 0 1
footprint=none
}

View File

@ -1 +1 @@
0
2