From 41a25b6e417501cb6287df498ef6badcaced0801 Mon Sep 17 00:00:00 2001 From: dorababu <dorababu@subcom.tech> Date: Wed, 3 Aug 2022 16:27:59 +0530 Subject: [PATCH] Compare sha256 hash with Crypto lib --- .../.pio/build/Teensy_SHA/.sconsign310.dblite | Bin 0 -> 253489 bytes .../FrameworkArduino/AudioStream.cpp.o | Bin 0 -> 5652 bytes .../FrameworkArduino/CrashReport.cpp.o | Bin 0 -> 1920 bytes .../FrameworkArduino/DMAChannel.cpp.o | Bin 0 -> 2988 bytes .../FrameworkArduino/EventResponder.cpp.o | Bin 0 -> 6820 bytes .../FrameworkArduino/HardwareSerial.cpp.o | Bin 0 -> 1572 bytes .../FrameworkArduino/HardwareSerial1.cpp.o | Bin 0 -> 8892 bytes .../FrameworkArduino/HardwareSerial2.cpp.o | Bin 0 -> 9356 bytes .../FrameworkArduino/HardwareSerial3.cpp.o | Bin 0 -> 9356 bytes .../FrameworkArduino/HardwareSerial4.cpp.o | Bin 0 -> 776 bytes .../FrameworkArduino/HardwareSerial5.cpp.o | Bin 0 -> 776 bytes .../FrameworkArduino/HardwareSerial6.cpp.o | Bin 0 -> 776 bytes .../FrameworkArduino/IPAddress.cpp.o | Bin 0 -> 1676 bytes .../FrameworkArduino/IntervalTimer.cpp.o | Bin 0 -> 2608 bytes .../Teensy_SHA/FrameworkArduino/Print.cpp.o | Bin 0 -> 5292 bytes .../Teensy_SHA/FrameworkArduino/Stream.cpp.o | Bin 0 -> 5400 bytes .../Teensy_SHA/FrameworkArduino/Time.cpp.o | Bin 0 -> 2016 bytes .../Teensy_SHA/FrameworkArduino/Tone.cpp.o | Bin 0 -> 4048 bytes .../Teensy_SHA/FrameworkArduino/WMath.cpp.o | Bin 0 -> 2516 bytes .../Teensy_SHA/FrameworkArduino/WString.cpp.o | Bin 0 -> 20164 bytes .../Teensy_SHA/FrameworkArduino/analog.c.o | Bin 0 -> 4484 bytes .../FrameworkArduino/avr_emulation.cpp.o | Bin 0 -> 1304 bytes .../Teensy_SHA/FrameworkArduino/eeprom.c.o | Bin 0 -> 3948 bytes .../FrameworkArduino/keylayouts.c.o | Bin 0 -> 992 bytes .../Teensy_SHA/FrameworkArduino/main.cpp.o | Bin 0 -> 1028 bytes .../FrameworkArduino/math_helper.c.o | Bin 0 -> 4912 bytes .../FrameworkArduino/memcpy-armv7m.S.o | Bin 0 -> 1016 bytes .../Teensy_SHA/FrameworkArduino/memset.S.o | Bin 0 -> 552 bytes .../Teensy_SHA/FrameworkArduino/mk20dx128.c.o | Bin 0 -> 10140 bytes .../Teensy_SHA/FrameworkArduino/new.cpp.o | Bin 0 -> 1796 bytes .../Teensy_SHA/FrameworkArduino/nonstd.c.o | Bin 0 -> 2600 bytes .../FrameworkArduino/pins_teensy.c.o | Bin 0 -> 12472 bytes .../Teensy_SHA/FrameworkArduino/ser_print.c.o | Bin 0 -> 768 bytes .../Teensy_SHA/FrameworkArduino/serial1.c.o | Bin 0 -> 11040 bytes .../Teensy_SHA/FrameworkArduino/serial2.c.o | Bin 0 -> 9628 bytes .../Teensy_SHA/FrameworkArduino/serial3.c.o | Bin 0 -> 8928 bytes .../Teensy_SHA/FrameworkArduino/serial4.c.o | Bin 0 -> 764 bytes .../Teensy_SHA/FrameworkArduino/serial5.c.o | Bin 0 -> 764 bytes .../Teensy_SHA/FrameworkArduino/serial6.c.o | Bin 0 -> 764 bytes .../FrameworkArduino/serial6_lpuart.c.o | Bin 0 -> 772 bytes .../FrameworkArduino/serialEvent.cpp.o | Bin 0 -> 1032 bytes .../FrameworkArduino/serialEvent1.cpp.o | Bin 0 -> 1036 bytes .../FrameworkArduino/serialEvent2.cpp.o | Bin 0 -> 1036 bytes .../FrameworkArduino/serialEvent3.cpp.o | Bin 0 -> 1036 bytes .../FrameworkArduino/serialEvent4.cpp.o | Bin 0 -> 772 bytes .../FrameworkArduino/serialEvent5.cpp.o | Bin 0 -> 772 bytes .../FrameworkArduino/serialEvent6.cpp.o | Bin 0 -> 772 bytes .../FrameworkArduino/serialEventUSB1.cpp.o | Bin 0 -> 1052 bytes .../FrameworkArduino/serialEventUSB2.cpp.o | Bin 0 -> 1052 bytes .../Teensy_SHA/FrameworkArduino/touch.c.o | Bin 0 -> 1368 bytes .../FrameworkArduino/usb_audio.cpp.o | Bin 0 -> 768 bytes .../Teensy_SHA/FrameworkArduino/usb_desc.c.o | Bin 0 -> 2752 bytes .../Teensy_SHA/FrameworkArduino/usb_dev.c.o | Bin 0 -> 8544 bytes .../FrameworkArduino/usb_flightsim.cpp.o | Bin 0 -> 772 bytes .../FrameworkArduino/usb_inst.cpp.o | Bin 0 -> 3848 bytes .../FrameworkArduino/usb_joystick.c.o | Bin 0 -> 772 bytes .../FrameworkArduino/usb_keyboard.c.o | Bin 0 -> 772 bytes .../Teensy_SHA/FrameworkArduino/usb_mem.c.o | Bin 0 -> 2540 bytes .../Teensy_SHA/FrameworkArduino/usb_midi.c.o | Bin 0 -> 768 bytes .../Teensy_SHA/FrameworkArduino/usb_mouse.c.o | Bin 0 -> 768 bytes .../Teensy_SHA/FrameworkArduino/usb_mtp.c.o | Bin 0 -> 764 bytes .../FrameworkArduino/usb_rawhid.c.o | Bin 0 -> 768 bytes .../FrameworkArduino/usb_seremu.c.o | Bin 0 -> 768 bytes .../FrameworkArduino/usb_serial.c.o | Bin 0 -> 5112 bytes .../FrameworkArduino/usb_serial2.c.o | Bin 0 -> 768 bytes .../FrameworkArduino/usb_serial3.c.o | Bin 0 -> 768 bytes .../Teensy_SHA/FrameworkArduino/usb_touch.c.o | Bin 0 -> 768 bytes .../Teensy_SHA/FrameworkArduino/yield.cpp.o | Bin 0 -> 1916 bytes TestSHA256/.pio/build/Teensy_SHA/firmware.elf | Bin 0 -> 125524 bytes TestSHA256/.pio/build/Teensy_SHA/firmware.hex | 1331 +++++++++++++++++ .../lib1ac/DFRobot_ID809/DFRobot_ID809.cpp.o | Bin 0 -> 20752 bytes .../Teensy_SHA/lib1ac/libDFRobot_ID809.a | Bin 0 -> 23306 bytes .../build/Teensy_SHA/lib516/SHA256/sha256.c.o | Bin 0 -> 2612 bytes .../.pio/build/Teensy_SHA/lib516/libSHA256.a | Bin 0 -> 2816 bytes .../lib537/DFRobot_ID809/DFRobot_ID809.cpp.o | Bin 0 -> 20752 bytes .../Teensy_SHA/lib537/libDFRobot_ID809.a | Bin 0 -> 23306 bytes .../build/Teensy_SHA/lib6bd/SHA256/sha256.c.o | Bin 0 -> 2612 bytes .../.pio/build/Teensy_SHA/lib6bd/libSHA256.a | Bin 0 -> 2816 bytes .../build/Teensy_SHA/libFrameworkArduino.a | Bin 0 -> 235286 bytes .../build/Teensy_SHA/libbc6/Wire/Wire.cpp.o | Bin 0 -> 764 bytes .../Teensy_SHA/libbc6/Wire/WireIMXRT.cpp.o | Bin 0 -> 768 bytes .../Teensy_SHA/libbc6/Wire/WireKinetis.cpp.o | Bin 0 -> 9956 bytes .../Teensy_SHA/libbc6/Wire/utility/twi.c.o | Bin 0 -> 760 bytes .../.pio/build/Teensy_SHA/libbc6/libWire.a | Bin 0 -> 13350 bytes .../.pio/build/Teensy_SHA/src/main.cpp.o | Bin 0 -> 5172 bytes TestSHA256/.pio/build/project.checksum | 1 + .../libdeps/Teensy_SHA/DFRobot_ID809/.piopm | 1 + .../DFRobot_ID809/DFRobot_ID809.cpp | 1089 ++++++++++++++ .../Teensy_SHA/DFRobot_ID809/DFRobot_ID809.h | 504 +++++++ .../Teensy_SHA/DFRobot_ID809/library.json | 4 + .../.pio/libdeps/Teensy_SHA/SHA256/.piopm | 1 + .../libdeps/Teensy_SHA/SHA256/library.json | 4 + .../.pio/libdeps/Teensy_SHA/SHA256/sha256.c | 169 +++ .../.pio/libdeps/Teensy_SHA/SHA256/sha256.h | 48 + .../.pio/libdeps/Teensy_SHA/integrity.dat | 2 + .../lib/DFRobot_ID809/DFRobot_ID809.cpp | 1089 ++++++++++++++ TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.h | 504 +++++++ TestSHA256/lib/SHA256/sha256.c | 169 +++ TestSHA256/lib/SHA256/sha256.h | 48 + TestSHA256/platformio.ini | 9 + TestSHA256/src/main.cpp | 178 +++ 101 files changed, 5151 insertions(+) create mode 100644 TestSHA256/.pio/build/Teensy_SHA/.sconsign310.dblite create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/AudioStream.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/CrashReport.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/DMAChannel.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/EventResponder.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial1.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial2.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial3.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial4.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial5.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial6.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/IPAddress.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/IntervalTimer.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Print.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Stream.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Time.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Tone.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/WMath.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/WString.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/analog.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/avr_emulation.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/eeprom.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/keylayouts.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/main.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/math_helper.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/memcpy-armv7m.S.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/memset.S.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/mk20dx128.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/new.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/nonstd.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/pins_teensy.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/ser_print.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial1.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial2.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial3.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial4.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial5.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial6.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial6_lpuart.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent1.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent2.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent3.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent4.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent5.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent6.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEventUSB1.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEventUSB2.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/touch.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_audio.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_desc.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_dev.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_flightsim.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_inst.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_joystick.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_keyboard.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mem.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_midi.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mouse.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mtp.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_rawhid.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_seremu.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial2.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial3.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_touch.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/yield.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/firmware.elf create mode 100644 TestSHA256/.pio/build/Teensy_SHA/firmware.hex create mode 100644 TestSHA256/.pio/build/Teensy_SHA/lib1ac/DFRobot_ID809/DFRobot_ID809.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/lib1ac/libDFRobot_ID809.a create mode 100644 TestSHA256/.pio/build/Teensy_SHA/lib516/SHA256/sha256.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/lib516/libSHA256.a create mode 100644 TestSHA256/.pio/build/Teensy_SHA/lib537/DFRobot_ID809/DFRobot_ID809.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/lib537/libDFRobot_ID809.a create mode 100644 TestSHA256/.pio/build/Teensy_SHA/lib6bd/SHA256/sha256.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/lib6bd/libSHA256.a create mode 100644 TestSHA256/.pio/build/Teensy_SHA/libFrameworkArduino.a create mode 100644 TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/Wire.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/WireIMXRT.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/WireKinetis.cpp.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/utility/twi.c.o create mode 100644 TestSHA256/.pio/build/Teensy_SHA/libbc6/libWire.a create mode 100644 TestSHA256/.pio/build/Teensy_SHA/src/main.cpp.o create mode 100644 TestSHA256/.pio/build/project.checksum create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/.piopm create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/DFRobot_ID809.cpp create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/DFRobot_ID809.h create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/library.json create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/.piopm create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/library.json create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/sha256.c create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/sha256.h create mode 100644 TestSHA256/.pio/libdeps/Teensy_SHA/integrity.dat create mode 100644 TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.cpp create mode 100644 TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.h create mode 100644 TestSHA256/lib/SHA256/sha256.c create mode 100644 TestSHA256/lib/SHA256/sha256.h create mode 100644 TestSHA256/platformio.ini create mode 100644 TestSHA256/src/main.cpp diff --git a/TestSHA256/.pio/build/Teensy_SHA/.sconsign310.dblite b/TestSHA256/.pio/build/Teensy_SHA/.sconsign310.dblite new file mode 100644 index 0000000000000000000000000000000000000000..f0c67470b2da7559a81dfecdea3dd8e4012f1984 GIT binary patch literal 253489 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 JtI4xD{U<zn1N;C0 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/AudioStream.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/AudioStream.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..d1a64ce43fb28140797eac9b21049b937a6cba67 GIT binary patch literal 5652 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/CrashReport.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/CrashReport.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..c7ca06f5fe697043e383db4d4af319de995390f9 GIT binary patch literal 1920 zcma)6OKTHR6h4zlpJ{6wT3R2-RZ304PLrBcDk7GU1hFk8L=kI|nPen^Bok)F(5}R_ z{(vsJ5D`}*Zd{5h|A7k^{sMR6!kzUyGjr4F)JG4TIgjt$^SF<BQdlc0ib9eUO3|T3 z^e*lpeOXVWC`qSi{C%Q6QrxO9UK}i{xAsb+c<}Srfg;8~&_@pIlpqDZA<EmjQ!kqx z%XUS>5pByAdRK2Wb)#ttt1T*~*>-ltT3*bFE7}eX^4d~9e@&!H8+Sy-vYL)~WZ7c1 zye<kY!>rZJn%K0hs_8hE?aYgumen$1DV<qPuVhw4$~K#(?wIpp3riNwV97#m!Lapq zwJvP4+i)5vy_8L7SC+SFHI0(GsT&Pa=AicF(X6?%u%4y<(Sh}$STa7TOexdqjB;8z zqnwX%i(v}yTb#ZhgfaEVt`ezqbh!#om{f|>MA!j)685>C&p#Mxs?;Be@0XA#RT_xk z0}*`C%YW$fPM~M1G#tT)dl)M!B_entf{#Y*F`9;l_e_A3nC}Lpq;V)^Fyp*aNzB&? zY@R%cd7eQsjesX`V_td|ArsrEAG&l}wbP+lmu749@czc_%yJ0JH+9Fk+OZpLw_+8_ zxlPtM%-4LR*)DY1cYI~8ii>9d4Xt(!531ZfzB1e(dQO6er~EUHjgj{TVtnYJ*bF|J zv)giY1Jbp9S(h3vs!Li;cXiSX#~}^ZUt_0s!f|`S$J^`;_>UNWOs}eKaT}=n$C0%F zM&lVR>-Xu!hYp0as?}<lI0OxESJPeBZWxbU)A6?AM4z*W;=3bXf&c$HTq<ARg&<D8 zzGxihV7dh67xBM1{)a^C3iu?+S9=+bA@I!rc#gz;=b1T%nd@zX!}%%!2H}y+_Y_t* z?jCH3aiG*+2XS)#2eA45NRn~<mcsq*qd)G4`(w#*EI)y{?h=@(4(2_O#Bq#&38dV= zJ=n4q)SmtsdbsYZP+k6`$hzO4b6#0%AG!sW#2E7rFj91+KLKY(8ju{r#Q$2^8{2PS ls1k%NRhDw^IPN+eFTlKh63qSa9`Ov}d|$EXEqsz>zTW_6`Y-?h literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/DMAChannel.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/DMAChannel.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..8c95899153b2c2f9312a13e0898f7f1fa5237993 GIT binary patch literal 2988 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/EventResponder.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/EventResponder.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..2d0d76acdfacb6c681e908131b06b25fd458a26b GIT binary patch literal 6820 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..e161113cd36e0ddef244d9e1d781bd129ee4a5e2 GIT binary patch literal 1572 zcmb7EPfrt35TEUq|DuIpKqR^f(W0`pWg+58D5a9LgdkopX5H>S?8dgc*|!up852K* z#-pD=;?a-50lgV7#*0_QgWPmxyHB<a3QjVe`OW|Lc3z+63Ja1XfglNzaEJg#;(@14 z3q%rnp&Q({iKRqQ+uD6|z5HTsVDH)jjLM%^4&oP|&Gqg{lb?28&;5MAHu7Pob1`=? z3O!pHH~TFn_qgsmH$S={UEcpH`UNtd&E8g$`K9~Hs^e6+vhH}w>`GC|RZGmWn58Ux zj>$N8JU*^WshXNrGO6@*Y9>9SBt2GP24~~S15CNe!jy@riIQj3%(CLKy3K8;rew5~ zHZ%PYW>eVIU`ELX=?bcCS;zC))<jW*_TG+SSFAriAf1&4<ss>uG%Q_+HO-13dOvaa z{wwO2o4f!rG^fjGiINO)7>F7W4<erbV{3c>0cB_p`~m~wD9O;#;_ryMv3q9=?t)>o z(3zHz`>}sM5|KdtQHUv~59_}S@u>h~|GS1~Z5kfC$2{ApsHW?}m=9wX=xa-9t=XGN z8<w@|G(vNAR`Yqm=6<dY+cv9Mx?%cuo#|$onNRffit(5qRb^7+y6J4xe4Ph9xxQ)p z<q+sBD4RPfF>{OmGllLw){RFZiC0x1c?N$}zFqZ=5=!4|$g<FId3;bU!#6-JaSkf3 zq)JBhzs^s&M`j!|^561Kc1Nn|RIB(EK*i^y8ouw@r465PJn~8DJO<Kkh)rz#R~%-G z7jP+z6EC1Oj%pBHMW!u1E{@)DYhT)7LE`1yKtmVuozRiM!b7O{AX5x6^)o{$`aVZY zJ1$7ndxeJRd=w{Ur&ytX40W25h~k_;Yy40g@fT$5={BqYKTt^vfKt@!LtV^9?j(YJ lQbH1OB*mSRYYYtvGM(i#GMyuVOm`BkH;+lXXcHvr{RZzB`KAB> literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial1.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial1.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..53770c4c91a32fc7062484471f0ca1b9a0a82a8d GIT binary patch literal 8892 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 G^!^7sKG7fm literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial2.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial2.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..a6a25be9145014014f933fe527ba950b13c031a4 GIT binary patch literal 9356 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 GdjA2?A|D?B literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial3.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial3.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..4c3aedb49c24019f269a75784ed2655eb29ae7b4 GIT binary patch literal 9356 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 MwBn}Z%?5h^0gCY-+yDRo literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial4.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial4.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..a8547e522c3b7ca2e3f53fd69a483159dede62de GIT binary patch literal 776 zcma)3NlODU6n^P+u?IoL;sz2g+JcSKGA-0wskI)gh|595L#7kyK--jL+)n-#!N24m z@fYYzXM$4?;)9p(?MvQk_w<+$0+tAr;YR~_i<O)=3n)Vo@&LU~=a80rXV>&f%8{n` zQqlHBpLWN-2m%q%b0r5tYpHaFHkik1wC>iLZmZU!WhF*}Yf+)Mm~tSJlxm~uD?S+v zsS=N&4&{W_J=beB@1X5sZ!WkW0@+0|*O4j`&(*#M`NcxNm|4lLk`h^S*2xChB-<Ig zi^cRlS@`_2c7x8`wnm>%chHh12eN4uy*Ypru7W47#HCOnA9-vrodPiZGLE>97^xVC zR>J8cU;&RfFkfq6134ax3EJ>W7>^<q`VW!NbDjQHw$N?%#Our`zE`3k*sXR@HgR^V z-*NV@_AqAQA94FhJ#!;Nrk<Qh@nh;4ZXjb%{Fj*C5o%UJw0)ORwzC=c4LZ6;NXW(+ fv^yEs2eK({W-cI`D=i@xk<;~#FtLO-OSaxO5x7xc literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial5.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial5.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..cae6578c219a898eee0f7928fb0de7b170cd2e7e GIT binary patch literal 776 zcma)3NlU{(6n@jy9t0JO8_0Ok6l`otQmD65Ydu&ImxG9hNi)(w(<w7?JNZ`x|B`>i zU!ZTA45l8$2XDT&FY{h|r^kd4FhszD9}VCwQHt&?z=8^t0Q%kTA+`Ev*Yrw=v7+}v z($2+z_9CAL0T1Z86hp3*kg7&K+qE6qY&fk(+i6ov@-b(M*XS*#9Pl)y?$v$CCc_bx z{4rFan9!!%aNDgr=rpi5<IE3%?4nrg3K{d~`oM+KVtG)>trS*Cm8|90$p+aZ+c~p~ z!R$T-`1~?<jrqB4wLYJoM@yFSP{^w2Edrb{89Xt`FS!ia*t3VzDS)kBqL}%Ju}pAe zB%D45J76&b+gA$gp@<?rK^uOF&Ei;w{zJ^wT&KU4Ep+QW@j5d~?v*MCW~&{Pb)4Di zcbxgFJ&alSN8El|Pv1zBt|w+v^5}Y+J!I^O|B}!<f@2g!({~wVGn;nbprfaSluVpP fvy*mxAnW3K<}$Lr(h_n7Ia}`t6RT)5Wa@nb6Kzpp literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial6.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/HardwareSerial6.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..af44c9ce3ca67e24571c289657cde50dab481937 GIT binary patch literal 776 zcma)3NlODU6n^P+u?IoL;sz2gIt4p+%Ct~#rPg||A}$9J51CG+18q~1xSjkff`7?B z;xEvb&IDTz;)9p(?MvQk=k%Bm0+tB4@S_2|B}y)s2Dng!JV3YIKBR8<?3!K)F;w(k zNZPvS(atF3QN$y9E=8X!C8R3Tx)*pptyTR-wdpshEBTN!#mn>-Qx15VQmI!$$;SNw zmHaVQu^7`@Pz{=mJ7`t0H{&dff$XA~YYVCQbEOwRezDLiW>&JRq(s)7b+SP=$#%x> zVsUn#EPQ@hyFq7eTcgjXJ7}3D2ePv&dUF6LOh!*k@=GpbHf(tP$ppYtFC)!DL@g5> zSP7@s;6+R`@Is})>x<EdkI{x-;xVmd96o5S<~seYY@yriiPxD@a<5cDuv_h*Y~t)z zzvJv*?P1KqKjQY&dgexkOg%A`lE>6DTt~*9_%8{)BluQ9w0)ORwzC=c4LUkTNXf<- fv^yEs2eK({W-cI`D=i@xk!R~2VPXkwmTbLm6(Uh$ literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/IPAddress.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/IPAddress.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..23a1555c582afb3d3e39c6d23a9a76d94a6d14b2 GIT binary patch literal 1676 zcmb7E%}*0i5TEUCTd082VEiDFg%T|S%N7e-Pc2Pb2p={G9yHo)yNhi?*>!hoBr!43 zqlstF#(zKqi5`dt{R7}8cN1es6uektVx4LG+ASW?Nv88=elzoa@4eYRO3WoWjsqqf z1fl5xgoP^N4p&VOjzb3+n?ll)>`b;LA<$D6`g{YGAHOT!$>F@z-<uC6pQn1tTpt8{ z1HmLA8&d~6f@o~*Z^9rK2_(DA+}Mi)+0E}g@qT>`dqUUaSM8GfqkAvKSBAgsg1EmW zUHrAfkNn(zRu*I~41rId`H}BC@9%Ml87X+j_*QKy9=|FEQwz)DlCG~>;)-sHvBh~Y zQOs(ps;Oey)N`6;>83R#PDo)XB#z6WNjVaVh(S|Z)f7t`5^rJ2m{u<tofyrU%33Zj zn%ez>RnXVO@vt0@Ox}i=jGHQ&k}Uvt9+&R8Zra*|(fKfVI=%DlF2B&jo#amOr@1rS zS?-*xg)2JF`xW4z;>7tD6o7};avmd2;X%MRaZ2sMScC`9A>6~Ds^!6Z2={^?5#mTY zyAXE@4{Z>22GDm34?d@hY>z=dMyTHvR6p{KJ2Fn-`VK1L)2M#r`w%Tj2WmI<pGn75 z)x-ysa)tqeHe^zB*QR1~nT%D+W@a*(n+vm%M$%=&EUei}dSY=RO)D5w0W)e&C{#rk zO8CxZqL|MU)T|B3E2dt&Ze!iuM0z%d=+ccQO#A?R-2fwXOQ(0yAtY<PXe(K?wpp`z zw!-1CK~fc40V!))AmPYK6qJr2-biXP_={jI$FddEE*aAQT}+jTsS`7#(sEEKrx%MF zUY>+sg{0VcBiWLzS$NWamR`)HcV!b-`wwZBv&m-j!6y4~9`zu(fJ*m$R33ewhxet~ zW5T`=dc$_qXdRHTF+F7`D&>&Ue#@xNeyiwDqcUOr)-mAB+d!XTl*`s{>v`<_Z_uY% zXTtI}G2rAEMSjGG_>rYNvfHS%FP)p@1FBwK)qV&g-9^O~MlA|(34<Z#prsrV9Ph>* qlRu3`UuaPmmPeMIfglwFQPeJ6(>)SDvUCP)(U6x|^t9nM_x%HChV%LW literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/IntervalTimer.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/IntervalTimer.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..4dbc151942ce4373c8ef9f175d93b90685996ab7 GIT binary patch literal 2608 zcma)7U1%d!6h4zln#OFl$=cf3F56iXYZluvX|qc!eaJR{YLjkRDu|18@-u59`EzC( z3<&l`d=Uj%P;gxY_eJ(W7WPpr`0T^(gHH;svZ#+KSSTv!IWu#U$<^u}xVh(i=eys% zbLP&;TiHTR5CmW*Kn#WvKxfR%c#`H6gD^}%ClC8#t$*i_+wi0i{Y3d*nJvsHr!&!z z`yk_aEhNr=05_EBOJlw1jr>tG=sHl=U5BN0Pk+uMNbtMo@aOF*rT=9oA1p*_>EA$% zD6oHW<7DyX;XBEjhc^si{)`gIxs~fRSh#yPxO{6}RF3XJL{!4LpMHV&|J<kJWFEl% zwLNzVI$|pIx|kAbpWpUx^zZmHv!O>e{g?d3+)<<>9%Nju{+wHgTn>Gff@t>WiTJyU z+uR@anHK5o{RsD6FNhn$*^n|@3+GRuCgBXbg4k&e`xvnW4*L$VH5;S#BbHC6pOs?y z%@?KZcDtcVSKFF&@p4hhHp^<Ys#c{ftzA)dy{+lzr1Nr8PDo4f#D(~3VpWQ1YC|pQ z>N)8OE_p_^mn@!NENi7!r6y@=x31UQEomtkPp)2g1un*M^O9OB*Fl&^*OP8*hWf^0 zF$rS<Z_(#E<(?F#glRD>JTA-#XIvv^#lU$N+;H%hGcS&00Yn&GE+XPI5!~>o6TtW} zjA;*A>B87)B6v8y2X809n*)+(;E^MOm*aa)zIAtr;iaE}iQwb-K9hf9!0-(`azyZR zd_TwcbNm3u4{-bd$DiQ%6C8hn<A==r5DdZ7b`Zo_fY307p2(?-FbQiW58xWkr?B1? zJI<J~*Q_<YpGh<J!P|D;iv953NF0C<M`Aqh^DRTwx~0Z;y{T$)rPG0^0Xr`j5{c?= zv)S9Zy4$K4U5HjK&<uBsQn{fbu$fpMS)WLh)mQ7Sbg$A-_3T!z+s!urg|@7=s@X1d z>PCF0u508Zn6t#3Wz*Ti^SWjLR_vMT;lgV|^&|Ya8Pg_@ZY=S~?V0Wl#USgwCO!tv zhGxw*=HUlufLtvZC6LRy4l)7qKWif6=gx8uRf+#vVAo_w8B}Kkvg$MfSrr?BtlF6n zJ%)95=c|(|?PgPL;bUT>l1ql6)yunvs$*du&SsHD_s;tJ0T_P6)_T@y&e}ZIX?PxK zkUfQi-qHW@7Ldd5>+DL*e~#nP{kevN8RKOTpe~YP32a$(4(fZ<y@*F~4~KK#Z!o5{ z%$VLT0#3bg6rnpxdUWlW-gWeydO-~6n`OrIK0?5$7j~SFaHjVK`cA#*F?zQ+J;|X* z-I3{i&FQTiqxTi37jx)Q_hfqCa(abh^zLzbafcptSEl!?t;g<*f_hYEX2c_VfWuk8 z71WauqxV7Gm+8?TCrUsZ2U!P$w&j|?l%p|@Ke%UyrGCIT!2+8@A!)O-QT!6_8zuqU jm`gMJRwxz3U<=1I`g1tweDqxO3{E`-6Q3f+jOqOiW}ZO6 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Print.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Print.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..697c56ff705d1b21a12e75c8b0eaf6e4a4c6b3f6 GIT binary patch literal 5292 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 QjP{f<UK|~ELqi_#Kcw*Ac>n+a literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Stream.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Stream.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..9772f1f630bac01dc8d8e7e10e07e763457061be GIT binary patch literal 5400 zcma)9eQaCR6+bU_96KLP>Lg7<+w>Wi)NP2dTc<S8p~R_gs7BgQTCIYz)UjWQLlRql zFIDo#wn8;15}KwJX+dQbbQS6}O^OGRR?#S$w11G8<_$E_rc9ak5m10RY|}h#T6WI! zyUz8+K#z2N-#Nc?e)rt_?z!*!JCR42qA0*c0UvB=02elyNM*?Ee6R<0L27=};Ing` zqi_)}+nIBD{a^oE?;KSwDwnQ|UfOywT=hHesLGy5%npDrw^T8gS~!|p4^R(_MAP+A zZoqjN?x|uI*bmrG!_GxNdzszK4lrT@U&9Bjd3#_sT%U!V?U}ZGrTNU!qdBPj^fssq zALgD{LdPSYysH$RyXV6ny!+V-EZ$jum%cE+hIu=4EO&L*W?g%#Z+b^*CaRg6t^LPq zfeMx7Znd(8g=bEu23(n%>6+_`ni_!l^K;;Zi!=w@+>?3xfBu-s&DXN?bIr`bu4Eca zhALKI@=iBmlx;4zP{H7boy@}mg%Qxw!aiOx8Sh4}MOX~H>B-biH)R4hNLSRrjnqJX zzK+?g_3|!3$NlVD_*Kl!mF@DiWF4!|*<5>IwI7uC(dyvuqcApFY_86~-n<t6b9P52 z70xdxyFOV7u>1n3*cKH}Vcf2d^8Fj5JhX%>?>d_M_Q@mcD2~>MBkj)mu@(4g-gm9O z;DXh|fV!(A)61F;(^{Nk<wpO*O~3DU_PgO*+4{`eYv6jAJ#?MC7e36NS9bknMd|p{ z3h9039LY*=Jb(Vz@4WLho*%8jYnd(V*-RCKo%UrV^m@25uhclRe6RfTmg0R-S8--E zJ0~{WdwtE!{l;6FH`WxVC+lGK80%OD-{vJH^lF6S?b*V+cs~61--5R@r83-W&$ODq zig%yBVQVmLhuG>$e!iY<Vc@AW^Zj0i^4XN78N42@w(?Qh?Q4qt?VtPDnwgi+%BP;S zW90W)A@(xHI+h!<{Si6dX2##d_`g~4lo!_2K!5)Os&C-P3H5j~Ij*Z`l4-T?*q|Dj z7}4T!Ev^owlQB)#lWBdo+U*bdgX-QuaDSjD*rWQ=+PD_gwcY9y7;>Lxg>-dyjijTK zu~9XxolWS8<fOVc6bSX~e-iovSi?~*I+6gT10O5<lW9Yn?ivh%qpoVuRpGWbDa}fY ztyO7L?o!$-sOCix&lfwat&5ng<n#fsL20-REuz@K4z;2I^?K9~7H#(86Fu0#A^AJN zjdsfEo7gH47sUon$=@mQJ4JWoua^9)CA?O`OS88@orKp(@%0i;v)vFIY?koN8z4T} zpi#mbCA?X}n<czO!doP~O~TvE^?Ir3)mD6>2ODga{I^Q@b_w4u;X5RJhlG11+#}&$ z3HM6)J(Au5{b-^6(u>WF`|WY;xisLzX|7;T`V_Vee<!?X=|1e;xL>YWI_*?9X7fu+ z-)8D{@Ow+|HT8P<40|rb|8H!>PdnF*@4pTe(wj`Z5jriM@^nKp^jUhrzXiTQ&Xy2g zT+&mP|14r|XoD9@;<v&TOQ$=68@9t+mVVOIcfgXRA24+f`~!6^G+w1p;-t5sPA*|= zZv3ReV@6twPWWS~6znu$XB>tfKeE4I>^YN|jGve^662AfugAt73l5L@Q_-~H5Bg)t zN!>`LlPUjRF~CSnXz^oOG#)t%GYM@x4*HC4Bw|kwPb9|26Z&v0IW=i~E@DX2p2moc zk%RkEXgZ=z8;254C5%!mplil)94I+uL?(ow5T$EoDi}-WfKve7NRMlif=e+@u$6|H zQy0(!xC**<c+!Z(%35(M!{#AAd}d;5yr?Aho)O%G0h5J|C!?i2C4jgpJ@}^L;Tc2I zBSWz<kt$R~3a=|B;Q_+&r6wkyiWCD;=?~I+aV9kEkET)@u42)Kdn4Gr5pB_rnYCB# zFMJCs?gO|B_fvHj0PRESX|IX+7SaQ>=dj0P+r+y8T1m$qA=6IVwH-G*o$T%SLv>Ug zw0P0U#BmV%GLW72arFZL$EZg<Mg4;S=dAuY>Jc~N@WVxQPx;aLKs}99-3MUihh(Z{ zr>i;H+o?x8_Xoc|GhswWus70$ew07qhuQ#tJZeP2Kceg4$Iri?jQ)+C-6NJrS%*6- zy0W1rw^dB#96n!Ga(cni;wnc{ESItJ6D-M}3hqlu%A)0}uN;e5hhL7LEjvz0rNzG5 zr96vNmgN!&mMze-o~5N))}>rM;)y&lq2bx;$D5`<YGAF8OyNm^+xL!zZU^*jpqeA0 zZ;mKbLnIz-<YyxVMfM|%WEVE7)35TQ+Ly=eMH?4>%e)s2E^NIPaN9aZs5Z%m8jbfT zHj&Rj{WLZ%oNo{fBHzaXAFToB<97<aF7F}Mi;WBCyMP9f@4o^c<;D4ahR<StO{mZu zxNyFoph4uTttrfpeCgcce80hGk?$ZXoCBfaGu>@Ozg|@6JmkV-K1G8#Zj&%>9b$ak z%@{B8okFFTlUaVG(w#}<+lG8}?$bQzhRylzm-t>moz{&D&u^c^7ZUQL8#(7YA@N;B zy@``qexyDs@f{TS=myXEz9sSf0`*fwU<uD}M&dh!d=2PB^Q9X<=lhYw*MtRDZoV%| ze8+|S=pO>-Tafs+A>S<GTzG!hCB9S0M>R<K(LV^zw=D6!`33pimiS&2@}o0_^Vu*S zU5n?-4b;W6gXgy{@x3JQ(LWT<*CFxcP(O({7tVJ#+Qt3%ioi$zXgJ@H#P={BTzJ(e z3g>%7;=77`d_Q{xK3(EFhkS>MY=v=2O-g(>1U|38H*4|HyCV4&@+Aw8<}a-+wb#%O zp%jPqVd8jIDhm0KP_3X}QQpIGGZ@Q-`%y2LA&z{#*mk2GuTbXt(f+127WuB?W<DSU Ha=!lqD5~dt literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Time.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Time.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..8852eb7cb49f3444825cdf63ca83640d083bde1a GIT binary patch literal 2016 zcma)7Yitx%6h3!m_R-h2Y`3(~(oX4C+F*xmyI@PA>0`UC_Oa4HqGFZV?vOTgyUWao zTjHY%#1f1I<cCobNiks1AEy1`TcFj(5Px(96A~kope`_p**2}#jESDR?ZAMEc$z!s zp4WHIJ@?%0%Pk##LI@Z{paSkl03TUW7K=B<D!>65u;VeYz3OH%Fsg$bxaI6PiM%_l zr>m#qna-<=u_GsS=K3ie_H0kfoaJo4r%!5Z?t8kmYgF6Ep4Kfb6B^?@p}h)w3oTkV z6S!6EI%?-MA2*>*FsHPyt)Hz1_l2lE+8%u)y4K$?7cLAWL-xS@w|gBkQ`#?i>3ZJA z*ym8?I{Sn_F#mCs@f~a7W(k*jF)?PF8&eMItmR7nlqTimCRvAF&+%NJMwA@GPy62g z(Ba)*%|do|yr%6+{;<wAOldn@p>m7v^6no;Ow}?&k>d%Bb6v@=Y^&@<uPAyII18t= znUx_o))NJN<t9!qsGHC-8Nx#uGebP*#z-w$e|2ot^wT}Znz+lE6{8x*%*AbfQj@+r zu=~p!$-@|{B1#U2wLt~VVLwZ=UP#cY(&L}tHzN*$>uiyGjeE3-z342ACyLyECdj%U z6KmWH30sRWad2d0<eTx)BOjbObEf>!qwbOe+7^0EcsGr&4b^p=p7pc-4V=!-m;Q8h z@zObe8TQeExnrc3og0u}*O`^^{PWt*ymy-%dS1C>8vB)<jGxzjU18T(lxBSjl{e$u z!uwus;hg$&qH$=;cv-u<%iW1xetw^BdqmHl)CP+}YbUkeiV;^~_2QQpz32rfvn5%Z zW#;W3QhTV$qBFj%X|n#0IBZyme}QLPHO(y)xVVMEt<*jnZ;l;^kr*@NXrr?dm=|}x z16JKqo8cpyL1#R?54-jX?adEZ&r;;I#Bl93Vw`z+3xSfNl4ATzeW10uc{5+p+O>_} z8i@=j{LYBXH+FaOE#aUP3P~aUaXHc}DN00ED*26qSE%M|Jk^^#_0{!!g)9w7q9RrD z+c9K=v>Z~ku_`EwgS~ycEbZx6`XhsUjo0I?-_!$*9_+g)iNSs#58&3)9FbKiR@LbR zYnH7ujd5}=l1K8{0<wy%CdCZBCo`Gf90#+1n{Dh}FA{)-yTe)3n27}r(#;B#vryiD zI|+A}l?CfP{??TLjoV(<+dH~p!Je|;QQ9GAS;$0A&~7Fc(##^pr$ced58wpW<iz?O zUX~Y;JFy<v+8>sL-e?ruD!4=N>{A`};mDxc=M#q%l<I@BB<`Y4;qGd$PgEtk_xDQ! zA!@D*i@Q>q?)HCK;W*}GG60g8i*gW@p|C0jk*o3&?=yCIi7E&oQ58W5DhdcV8Uj@c z_o>0`_+Qlsa)hEIocVx4ZzLR+1~D}bpdhNM+#h^Sl@u)Y|4|{j(d#yDZt3^?POLFO zrOSTC1l{XLF(|FWMQ`<fe)JvOo0s0PLB`}ghzdFt4a<gkG*EmxKh%dVDnE(KjCTnI zIwJ-dc-v56#{0{JM|)u4y@-2?XPo~#+|Zl`8F+7^g8I?(P`ZqMk)>_wOKo%=$AvwK zrj+<;MWNadkW(K@D{vXTqcVs8S3jhiWitFIH)^A%7zXjEr0+Ke7p;$SdR8;uTWHvh JI)e<ne*im_yVL*x literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Tone.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/Tone.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..c730ae7d87794caf1c29a96e720626dd27edbeda GIT binary patch literal 4048 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 Le<+h6Ce{A}ix+qC literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/WMath.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/WMath.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..3d466783f2687cef145460cd8144d5f8eec71c38 GIT binary patch literal 2516 zcma)7&2Jl35TEsP9Or|`+1mL+w3{XZmo$rA+(3Xs6Q^+?c7$k9B`DPEc#9L_>}q!j zMM6TfLV^Pa{sn~KN)=V=p-~Q~y&xfR;ZT9ffdh~tB_#r+MVOiOKJVsX1S5^#{NBv_ zy_xrBpWiuKoR=gCxJZzO00AUpo~I+{4QUvH6zp9eC_P&1-by_?uz2^63*TRHrPtnd zBgt<DzaCD`-QFFYxxG6+$K2>apWA<Y?*3;-m>bE%MC1<JhrIOkmb-U<q71H_+1rjS zPLv5Z5$w=57kiej-aBYCX20q^_Ry~q#IH$<LuIo-KHu`<CVw(nsyJ5b*-AZ^S{him z>P9}e;<C~22H9>`WO(k@?(x}Mm`%);9|u?3$4nC7vIL}W?!Z2rf&E5?&5xD0e>9m{ z=v*8t56w62AP?G~=Mulx`2DXPv+(|G>`vl(bUr?UxS`A?w#@=&w=?rIC^SMLpMOe8 z7nWXBmJMUwRxTNqGV?-7Ia{yj)v8`qp0|t@-L?(OKB1geb81#OmB~(JrnA#Z+S1o` z&DKvSFXNKObbra@>B)+vZLHK3OW$0zSB(wjR4$X7o_YmlGI%bUu2oh+dKk@)ykR-| z<;hYGVh?ndx*~EkDW#-AHY5#8Bht|bonu(S_Z`JU3H#WgZUA6#csawFurP>1Pj~`x zA7a|WM2#R;aJ+!plqfg6kwHvYAM@hlt*B;0a>yVq#K(pBU?r_#&@IGw3;A?&YHwuF zE5!E-{yxD^)ds>KA@~!46D<b)g1=wz%U*uLqzq#|pp%n84qRw4I3nOAob=)VD*=p- z!83<&92R^`_ao!^obxfAoQ$hp^>Na}eX!<Z>I50<d(+2sGcwi#=S!MXQ&&tA#vQo$ z(iAps)u`81Q?nd31LIYkEaq%oCnK9_y3Zl3BYwhe;<aGqW?)i;&$qsg_LFt(b^W|y zRVlm$YBfy7>#@iPV25Deg+}T<!j%8fPQZ#$aRk+VtL|tO9387U*0_Zqlmlv2b2LyZ zwhbzNrYcRUt$bSbg?)#s3wwe(!?S*En{78}H;Jdf^Jta7_RlFi5y~60^$%WM!5h&x zuqb?HRLya$)yf-=ZsRfhUwIG%B~<=JHvc1n)%>Lx_2c+UA;u90$s?$ASN|19@13|W z^)46wqEO#=p`P&_-=c%~2T&=7lyDI>%=Zam`c}A59LWM|nC}O4a6UQ%&UXpzFyH5h z+woNdzI!1);^lmA3w$>bx2yNEz;_VhqaNpc9|?RXF<IJ=3&oLqh#Ic<&k!Hg!}&f% zJ6vxL0lgJmIN!%O5$20_1m{PuCg;0>c9?Gg0p}o2ZhtAn6)~<|9d|K~=6PQ&{|nzQ zJ|FcL3B?&r)B8o}<@Fnm$kn=nFVK+{;t0}9&i5qTi}l8c#20ST$iEeG9pFS6CkD|z WhD!A&Q0eT#e9P!~59hdWzP|xn_DQDz literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/WString.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/WString.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..3e3e4b52ea15a0b558cb5c89f7a281dbacb8b415 GIT binary patch literal 20164 zcmc(meSB2ana9t~1em-4VHz+5q?4E0@M4;Y0Tar{#>wOc1tEoCEsK(n4BXHpGiC-2 z71u(rz93dhU5e8B0&PX<ZpNBzZOJF>>Zf*<wh6MkxOMwsciBZ3*MenhYP;+Ho_p_^ zIrquEk^Z&klbd^=^Lx(sKIi40d(LEXPvc5m(=;KICMrb65~6&usZ6RdPZi>@cv=(; zX6wTE=!5_LD5w_<iQ(G824hcHdqWG>4o%gwbuDD6qT+WWhm75Cmk6=&!l*C)-Z}Ek z)~BMh7NYV6DN?E281iT8)i3!BU#d7R$_}*#^|7I8`V5`?rs&IG3K|6|y8d*lC~I%E z^zXEW^q?8ZIg>5QvUOi;Lu-GlFL8a!k2_I``FfTfG_Qhstr@TC=iya$f0*hiX}*yM zjT}dvC+U7Y-=vm+U!f1ZU0aX44U1v3eadzXl(kZvWr^HUzpfpjNVFp|j;w)#A<OTp zX}|Gali?+Km+SZ71iV~@clmyPUDo8$xnDACT$R$&ElSL%&|8wdYe1Ck9m_6|EvJ=g zN3!+3W0R_=1%f)&Tnz6F&lss4oP?2(ulvn@Ei>ATXN-mD-OkqMTCF?Q4#k_O{%U_& z6suj_^LK{Ry){hbt)A3IWJzvQKg>2`pz-`P>QXR7<J4nh42!{jyN*;hSu@|jtz+4L zxcZ&32A?rq|4BGo-)YR$b5E}?+8>^B^5yeWa#ml^{EJ@-Vx)}quf8Ds;_9)HRkJaI z%{CPk7e{_{QB0pUQf545EYN-DbF`ue#aw2H(#O|*7jaR^pmE5k(=FxFIeS#%xtgTY zh*w7>m94;tFBp`4;@%epgL(Sy0X(-yiuBx4Dy2PZ{yvg<ZnDv9|9^h>Bf2l?S$K}J zODHnKY_U$|x%Qj!QEOzIn$?HiZ8A~+etdgn?m=URBBJ~K>DRL{TNaq*GtX1Okk43~ z$}wi7ibxs$3g*3{zIaoS9&gGs#KI3p?l(lm*ho=deK_9aAKYc^F&+<VBO>S@qDTfl z{K|#;96z41U4|b$yWpkUQC{YTQr6roZJ%-BoQ9JAK`MKEI+e4oMa8LM5zJ_!;)KIK z-ay{>hv$s+8xI=$%n0I5hf?vuY-6gSE%Tot;$(g1n3hLZUk&?53&*t273pH(#ZfI7 zAHvZja4s0^Hy$$P%-I*tf5T@aQ1{QL3NXS;&6cqu#q%C481kc)i*QigsMc9;2pX@5 zi=K1;;Dbg#BANPzFq%QBOFdC+JtwlZejW8gZN+fEaUkqFDbTj{8_XzBz8`O~-NQa( zeM`KFu6=I`!=Lg;;!RmMh_bx6A3Z>?L8+-_Uq~HE)ei194u+?_dA3+vI#vHhSTiby z3-#HkM}=7vQMPa$-ajB&^IE_0*%Zc%VZRenVot%(>I)xL#hd7N!4TDD%A4fzR1vjc zaGVFl++Z?tJSpU}FYGrtIi933^ua#F?lW5EiqcQsTD)$uF-fm7<GyxXL299Kym-uv zZft0mp)I9WzxtgE*FR+B|DfOaL+W7o%G3M8lZ;vVH-~)}KUy;L{A7RO$>~Ogj=I!j zpZSY0wMBj7l+$%4)2D~$XjNk2`=d0gUD!!ArZe^H$zrolhaV5qs$iO)_2vw{SkKc% z$<wVRi2<Xebyv8pb=v8EFn#)!`ZdPJTfeyO8sk9G<Pobak+Y804^OvlT=(I*g26q? ztbq5)i`hmbRn~V+>Oj~(TpFiQDHe{6795K=p-!tu#{7@;4@}Zu!ff0)GCJmeYP$Yo zTz_ul<d}aT+j#AKo}XswS$h4*ieKd!+P>E@hihk=BQHm^1JqM^K1W|~{Pf6HV_)Nj z(<}7#^GZ&M@;ZAQ3|tgBvw!syW4`g6u_7`%a<W)E?-x|=d1Ham5P81!R7-{Nf)O&7 zoAZCp#gD2fmS2xn=)M88($_-fO5`69&4x%&uQRRnm`m^uN&7slPd~HVY-=LjVqQHD z>M`6Q?|fFy^Q|qBI(yV)&Do`w=sD-J@<hei(GuM%_v*Qzo_A5xtQs93x%X|&|Ge?d zbJqCx89Q4=DLpH-7(09LzAJq5alC<MMD~Phhl`6pWgI%6l~p@DTYsi?ek4#_Vb-M- zZ!b|Y+CnQa%)uCAkyNm+%6j`!PfVw_qqmm1R-90$@i*C+qQ95gZM>CQtcx>^dPU!) zi<;kx_=8bxSxqGC%y+_*PHW48eKL2`+%<Cs!#{4#J}t_A&{AuTzbbvc*+SPDKQ?}Q zP7KqN4}Ww0K(mCP_l`Z!2+`EguryfFv}#?jB^K*S1UJWegV(RQDcIP(DcaEy?Fcsa z#@eHaM65S4Ke)KErZN<)t_m%wsteTxD|(|{(Y8c%e(=vw<TFvb$kmIl-qhRH({2QN zqjz*BI%7S->YA#Wx+S-Y>#H#7v_;!Cbqeh&Tuy3;^(LczSKm}4CQqGmQ%+VOyHJ~{ zUEwRzW^2XTyeyieSW?&Y+2Z0ys_b*D_=WHZC&7mtHTgugn5t&LR+CRmX8L4R2F=fO zKhtxWp3C%nrsp$#8q=pSy@2TjOb;+UAjpH-uoy>{2r&Ob=3mJ4SxleB^dhDgF};}S z6h$Wa#9XG&&4{@2iFr()$Mhi6gG?`FdMVS(nO@HHtC&usIFo$Xb2`UUMMlJxPb^^i z0;Vrw`XZ)RGQE=NRZOP`E|Ywsn(5UU5m!D@!*px6ES-E}3DcKI$vpc+Ez@h6zLe=p znZAta%b0#0)30NCJ=5!%9%g!&=@F(!n65KjXZmucFK7CVOuv!oE1ABM>8qH&is{Wv zZ)W-$rmtao3)5Seelyc=X8J8mzlG`RnZBOs8<@U<>9;ZcHm0{Sy_M;kn7)bW9Zc_F z`evqYX1c+2gXvqDzLn`+Oz&cP57T>?9%p)->Ag(vWqN|?38p8Rp2UnNL}r#xGXFc6 z{~b)flj(OdeLK^)GyN{6-^KL1nSM9Z?_v5qOy9}$olNg%dOy?eW%|8LzmMtnG5rCi zKfv@oOy9%wy-eTB^oN=LFw-Al`Xfw#l<AK$eIL{JG5s;7KgRU^OyAG+157`_^e349 z1k=A|j^9k?w=$Qw@`-PYg?0|DnKanWH~P1k|C7vqN_^fdC&V<I16W_SDjo&6j^ZG; z)aeN#n^pz^tUuKrCx2>T(&?ECVEuX2w&_h45V_)SaF&Vue};qnX{8bn`QlBSWg`6y z4pqNs+qCitAgWmqNtgC#ZJSnJw3@t$*&A(}+9@CkMGqCW6WuSt^j)@X#WzcQo%!!) z`u7}mk@z9AUv=2UVhpxSbpL;3`Z<R^SA4+y|A*;Qv#j=@l~Vxg(JNugMEp-NeX(s@ z^$Us!v)9_T)!(IJi*3`&I)GO1WA+0M`zmpS*?(u-)_AHAzp`zLEr3z=uESm=^06hN zDi@l1rMS|zX=NS|RU&NLv=R?s{rGv?j+=IkFks6>_lViLAJ+k_7r*K#Un>sUwl#j1 ziUHfU#>+DCio?E6oOamt;$4Rw7PMuf_^t90QE1y%eRZ+ewypS=i)P!l>UX2K$F{9_ zR*G-hcD@<^Dv@&7&EhqOy+-_-!)_6Obl5kGnUk#eEZ!}m61Gef<5F9<p6B&qt!*!Y z77!am5A)w<>sI`?iM<a0R&m(2bItOb#1C!TYL5=_n#0~K{@J#z_zZEuwj*Zwt>P1t zabYK7%z;hqZH@mfQOES_Z9M>=fanpo*|s&l<D$=@_lmu?ZQVa1zGK@~e<j6>4*xsE zE4FRj|4#91*fLRk|6%JvTnEH<@kgfnrdaWpn)+R$*kRu-u7NF+**~^kZu;LNT5Q|u zpPeGk{QGR(8vp%bpKa4hIw0;9FW9!#Klh0d+g@(!4~Tbc+j@TY2n`@=Z>v4_iYsip z9GL;}u&AaR*~yI8*6BJR9ucc-yVkTH745cdjrV=xZioGt*biGKVmxW<v{Da<{UXKm zmu%gt&jImsrk}KRt3FSNx0(JM+on3s5P1K7VQsRvvu8_Xdps`6lVaogRZFa#wzZAT zE7~jLZN16LYEj++DXn$(HEwMT)pcy^?%uxf&fd;s+orDQ#&)BvR{=z-8}AUCd!tb` zFND0zJ+AGICZfG}L>sq?-e_A_SFBwTL)8HGY>9@qZQdO1g-fPfO?xc9ox<BH63O27 z_;y8Ws3w8(yP`d6e#p$vKupI_-Nuc2S6jlcD!n|~6_2WwXrNLb>r~yiX2sf#&YSU^ z>PACsOUBxqUWRH`H+CALbDR${9Z_#}*r7(JUESElbf;b2*o{EC#@z+Ej=O9&L`O1) zX56gihZ>RZ@Kd`Ct)-eZ-7)m-8fVK?H?DSOgm?x#LW`~bSi7y;txG1<F>qPiBgc79 z%9!XD&}j^1>S<<t+%SNXT4qUGJRa@oAktRR9qo1wQ>n60Ww!J7GS>~?se~#0)MrKJ zb-DO;yW~-K$Gg_77}q{)R@gIxmxC3vYgzAS$km<d=_=6Ja}}r+Tm@<hSAp8YRiH+3 z70@yp&5zSJc2s+|63vsVWJ}ex$GS0rMq6Umki^r}-W^vxmPBvg*4C9sk62k!=G)^y zW_KmWd2Sh>)rE)7o{wa~E#tF7_C0Rc(i7{AHsDVSR;gsHD|V+f3Chx;szeg+fy5U& zlZNSJ&bvLVF5|q^iq_&$$dp%=CG_67KIxd?>k`pqgPpAodV2AwWw~9uC7KLxPev1s z&Bj(cNbBt&t8#5;Pe-(G^=3S()EkC5*^d_;cS)BqTNTCdqekJ-9VJ5{yjzkt$Xl8b z@tZOq73`Gg?i0{?m)9k>Z9<@Uxi_LI)KRGjly5)Qcp1mL+S;Ry?P`msa|ypTw2@{q zn%0$qOM0W`L~q{2hNbh=%upy9TS;Tf9Bk@BfRuHZE~S!;Z6iy$Neyb!jm1M}A`wTB zYJC<bV>k39p|xS?s=~F&nBEm@BMA+WjHz$3(Bdygdt=FHZ+B-;TM~aZYsBtfh}`d6 zd$ZgDT$7D6t^ITV%G%SDzKrZ2*nWcoyHeOM(0UDL*tB*eoA#7+rX?5UlRZ!7AG6EN zv^m3eIcY;TInsWG*{^17^FFT$5v2RTU*4bAfE2HJ{zc|Y@lYIQT*#Mav;HVA;|)-G z_{sAUve6FBbp9tHw$d5xfGwDqhYvc;_8PS71Dp1^xj38mNBpJ@-E1$Jk9xS~|Ed0{ zKj)bBaEZ%NKP678NA9n!`sALm&;R0K|Et|j|0T@7@#Vs%`p>&y*Y`KpXGXcOvxp1Z z>umPdm_5F5HpknCHt+ZLI0A?EtXbc)`#DRq+B;jrr%dpb=P8=i-Z+zgZmwqaPmYGa z7Qse7_4B-Z4WAakMt__AK1~y0TW_T^^e@vnpkY^oGy3~k`~25*24}>!A({I7cD^5* z3-kG)^MLhP0ddSYQ9tv1g=W=rwuVnV;D>Xw%`wN*96Qb{0jW%E@5UAbXFSE`*^pQG zdv;P(cC;niMCGPLLR8|f<du|JnVHzkjfk6|Y(L!OaT^dfCuJ+*CfmCaPsx2v>EUk9 z@NSy5UX^<_HxI;NxHb+1>@PfuU}xc>U{B$pU?1V3VCUeWw7UwK?Sn@#TGV?<<Cd?k zo@ls<8rACtDCV+%a0|ui8LxYLEsH%!?#(0@_~t&tt)z7Dtf_RM#pXnSiPg>t%Wj=e z?V3>So>1NFP+eE<nXQXjJy%!W1|Ciy|J=G3bhe<Yi}N9Ib#b<|tBbR_U0s}Q?&{)f zcvqLpX#EaH2YGIe)UHW8$$ilHu`Ac?(t~$g8X@;gu6((Bauwx1%2kv*Dp%2KZ{_Yh zes^_we(vqcc3SDTVY<Q6`>nKOFWQ~EE=LTuhq>QM7n4LQSAFwJh3&^2Na>T_Jvkqa zbpK^^=b#?%;5|sv407?nI5%7Em*?f)1y0mu-_tvO=U&dW8C4gN?jo1Houf3@DFoW( zaX@-M=d7?@Jgu@uvt_>TbBloQ0Ns4#9?+r5VU*qlx~j@nu(CHs>qTXO=&~22#Uwn^ zn`0W{9-nwu;zOS9Xb+a5_+DmZTM`@9P22Dh1Xi<`m*&6?t6Xy(P9<vSmy&4TK&b== z`QcA;X5xONQTj9v+T(njAFaFjeG8B$6RpE3(cfNjaMa_Vbm}UL{|v6lhYq^m4LDR@ z1U8kGN%9(zq4M5Rc(fOhJOkG%FAkgbG%`tE2QpONS%pV&N#0&utGxSRM{vj_c@H2% z<-H3Y-IwZ1dpyZIiffg30(J!snI!L7WT?DsbP%;O@$zv<9=5^`-X+-OIAoH%myx0J z3KbshwI%O&xK`sUf)PZXOp-_YHkDTn9<>|AM{!CXwr~z!Eo|Dm$|QN%N;-Ipl=$eg z1j(ymycXDQ?N`Nk%M>2%`6W+&H-g3xr5zr;8yIh;!kdM1lD7qZ_(?yPhdp@hjJHAI z(YTSkos4(FgLgOMbt$}Jh4%#GUGm`VXS^K>kNQu>H^_K%vz&7g`B6$S-a`tHKHHJJ zUou`Zcy9gsI^!J#PmaH!!h4(X=(`$j^UGPrJFM_Z72af&hij&PVY|&QS;$wPkE05& zT;Y{4-Z2jzeTPNmy{Pao)uh{R1>>E9?KVF*G2StSN9`^9Lw?sqJ|Aa2c<qe$io#o< z@OHsZZNEz%ygz5W6AF*|PsVqY@v`v(qvu;D@}u-D<DF7?mCz;cRmLj<&uzYXnepBN zPtMO(3h#G}SL4BZpYh&R;;UA8(@|b+zh>BR=rYOr<{@7lFPFfR?;~0R$of_>-f`IU z9LXekix@8-gG4@W^qHXK$?qP?@$xg2b8Ekw7_SgK*?zSO?{@g9^*swaD1)>8$n0jk zawWc{wjag&HO9+E;BZYRS>HX3w+K$M{g%O7*7y62x5$Hcgz+K@?>dF|I^(r?@LpxS z4GOPb;l0CnJ3M&*&Ui_M7gl&vP+ski!yY^z^40P8kiv^7yiYOS3D`6aWP)j?5?rXf z!{GU$JcC2WL4IV*?~cjw_Z9@V@wbxkj)Eu0-*Sbw4Ss5U$2@qqGu|<Ucca4lOU5h2 zce#SlWrA#`=NRt<cz!5U-<3GXkL*##s{xPJhcZdt&l&HO!dnGr$-BgO^&Y$njQ5tp zYgTwypuF0CD?NChK)%|)XBFNWg(ts@C;Rsn58e{SdspGLD7;(Yr^eUe!TTcPT~c^A zE4;5TUfhGXgYo{T@NQ9fhZv8_(L5v*^&6!p883T&W<0NlF8lYVjQ0)LZtJ1HWxPW0 z{NT{|+o15yGv0C7ZqM5}#+$3~Zc}(u(XncOyoGXZ@#Vlz9WUhyuT|kyGM*o{+w-x2 z@fIn(O$u)X;}yboo3EM}uSVf@C_IDl$~|};jJHhTZB}^qGF}aAxBBj6yokax6y7t8 zR}VV^T_!pHzRh?m!ISgpRyfP?_e;jx4V%^@GD+U+jJH9FuM5tS_W|Sm2)5h$@3)NC zq40VX-n=Q!@pl5{+{Pb$Cp8D<>Tyu&Qh0ILGQR5=Z_FdUFEYP;*lzuH7xOEE?e@Ig ziF`G_q!M3JiSH4{tAXv-e$O$#<*?oQ?YqcV@4G{}Fa76`Y?og!-VWG7=rYN1@EYUo zR(RXtEP3xS-a**q5@!36`JasUkiw(?Op?6mnC#Sf=(q<j4}NNWzoGExKba(tz5}fC z&U)}F8SkLNqyK!8yqg)%58G{=u3@~x3U8;v+rfA>u<?^lbYDt+jCWMw^+T8OJ<WK_ zV7HhA>zCwxi}7Amc=sy2*BI{+*ly3qPZ{r+!n;r5z0Y_DVJ~-y?>)wQMd3Z5@Mh+) z{zW;r_reVL;U_(BoS2_^uhM^p$@aU3@h*Yq_MER}eg&}0X`tCjw)1M_<0pOJQ}czO zb;dI|9>yW>n}m}(PHXVtrCU9|&io?qs|80UdEbZOhoAI)7cI!tm;O&m-Z#Z~JHQJ{ znC(aA_ZhE7;n9DtN#5Tx-a!xEDB~?tc#kQ(-!tAZ@Ms+*ldSK5GhPHdTCY(%(|^Xv z_-3NK+RjCJ?&Em|{D4fi-v;n76inU$g?A0(m4oNjZ=Yej4uwbmc_-srZS%5_N2vxp zWmu)JlklT>uzfVsVh_J3ZC;h)7qhSFL~J^qg&$aP%A<4`ypVNi{+2P!fF<uqLe~Nz qeuT0zNk2NvI*@i6ybCCN2-in(P<^SLsEt+L&#pv&P^O(E@BaW-u`<;F literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/analog.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/analog.c.o new file mode 100644 index 0000000000000000000000000000000000000000..0e025aef55ee53f14ec8df4c8a9fe1214a6db4f4 GIT binary patch literal 4484 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 NK0i9FoCITB{U1=P=j{Lh literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/avr_emulation.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/avr_emulation.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..8b0b10b06e4a931c961c49bac8fddb751b39e5d7 GIT binary patch literal 1304 zcma)5&2G~`5FXb~LJ$=V|34C1Bm}8MjGelX!mSEU6^WFng&shtTHD*kQXE^mP6a34 zfGZEcffwRMcmkMpys2ZkDkF{O=bIVN?9P63-wriR14SCN;lcvg(leyyWTFk5a2;TO zFnCSc`v)J$`#7EnavF28cQ__)<gp-N0h#dFXF|kWY?EEnF>TVd?4H%P`=rg;j8Vb1 z$tO&C#qyNSZpY(v?oSD4=b;GWIq5o<)9-zTJq!O$8TCTYo}*eD#5`qRI%5awn~iaE z<CbwpyQ|&TA7~G?N7|E(tkuG&IFA8;{uUt6*QN!u*VA?M6iEjIZWkSB7fFX&39l7l ztX41K^%CAF;f)f0tz<XhUha{dw6K0Bx8>X|Xuz8_+knxUjs4Mce!`-~jHY<*rk^D6 zEP#`b2X^;pG8&GC@BA4RVu!Ocx5AzH!iA&B;4s5>q_!&7OTu})NL>I^e2r4-p-lNw zPL+n2nSvS6l!ECAk$udppfpX{$R$-*ctxX^U|F}OA4d_J<6m(HO`4`W^cE=-`N8~$ zc#JXfeAVqO-^WFw+M=g<oZ6ytoZ8J77$<M`s<@XGajFJFt8MIE5vOvFE8>b9t#n=y zr)nUydPU!JUA|dKa^5)8mLHiT`3Ex2nk>BlKT)xjfl}3Op{~wE!c#ohUsB0Q#Yw5o eTtdH*Ep*;Mc@tUAv4z}3F4i+JDL|hhRqr1`XOCL| literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/eeprom.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/eeprom.c.o new file mode 100644 index 0000000000000000000000000000000000000000..e5f8bd3cc3ee6e1c8e3923dbb5ebedf91ae821eb GIT binary patch literal 3948 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 XWW3wB4$K#8$Mf~VVZR18))?P^SL*B( literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/keylayouts.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/keylayouts.c.o new file mode 100644 index 0000000000000000000000000000000000000000..64c5a696aca54eb701d43545d51acc7c7016e257 GIT binary patch literal 992 zcmah{TUXOS5T4K*ML~)nH^oH}iid_2(`tR=)KV`kRs?T=bdxNSW81}SiuB1p;Scaf z`A0m*cb#prhm;4Mb0#z2%r}$Gm;F|$ZE2bY$~4Hr1p;Uc^*af(AF?n4DOmgHH>u^A z$DdfIn0xqWW#KkiymNQy-m-Xbrhh#@dQ#b{K7IE5MXkR5vhix?_3qxAx9{G6*grU2 z&l`5T5Kkmi!|9PLS4YRLjb|pVPfp#Ko|&DSzj=#)IqlwuYPtNFWUJeIWS8@nAjjMz zn>%$<X<N*3m_r&Kx0w*!6RV`4n|hvX82O@6%9lviV=YDnTP6EAvd+ShTp?$9v}2zT zkDa-~<sGtN8fK|@2%83e8)ejTL0iT&QRbe{&U1AWlB215dT1g(sZD9qu^DYvo6{Bo zMf!RKkEmX8`1L2!g4lqXfOv2`hLxzrAP!^E0^+E}AQ6Q)orFwSX=2Ps{%6)}(H`&m zLbqYbk=W)A6Gv3ot_z@xUfZV@M&AqKiOTT9eb621Q_w9TK=-%=`lS`R&D(9(K`M%@ zQ{VSotLrl{aJGMed2CAEk|8O$Ul$WfrNxk^RJzPl+OHsQ82x{|wQ!%>FZVUkl_|B$ zSdhEr-H`Sjo%gfgA$!tm==jdlpo%#b^9o>;9BJ|&sk2G^8yg2Q2~F{2RA-Yd6AM2u WrbCzK8xQm7zMse=SXU<ZNc#(#lXhAF literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/main.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/main.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..646edfb579e70b7d1bfb4db30d16b3e40e26ddca GIT binary patch literal 1028 zcmah{PiqrF6o1oA+cdRcgT<;SBZ^JIOp~%L#FHh~UJ?<}lX{rVPU%86v&>Azp8Qbi z_wd*cQ1GfJ!GrO=-3*=PpbviY{?EKW^XYK#oG}KT7_{J00~jonp2fIiEm(y*)W1%D z{h50F{tid|{uAChdhv$8)_QFDu{QkR)sP?NiAqzI@|Q-Bl(pK}ZN4XB(dE0H?tZ7& z?eUgTV<oNH=5H}&N6k{&d+o%?$>@X|^&zvFp77nc6ZiJt!$AjYkxC{Rutz8^_O)^9 zV|y6G(%SNHWuaNS!8X{<Xp`Myx7od_gR=hW2>YwS&uQR-=t}p1`qlIZEg?lvgGOjT zJ){VhLKU-@VGS)*!*xUx<C{SQ**53&yK_3^GMk7|QNTl2%3zf{Enuv50cV*Sr%+bi zz{2SD#wvpNH9Ukp%biS+J5%u!FX0d!h*UZWBC!?(u11g%W2M0t1U(F5r1M-&FccRi zq;n=qPMxwrmH!s+pqu*lld1mJWsaZt{aKu!_<Wq-;}*u%5&w&$e>49s&D)dT++#GX zAfC<~=a@u0AsfXI=)FFI?xTB&o*{H8RR{S90|eGqR91k`D0IDooMMR95xxh~f1u+X i2{ZC>#QluOb%FSXpdI@fsV|bl`@Ue}1GIVa_x%OX3vnX= literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/math_helper.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/math_helper.c.o new file mode 100644 index 0000000000000000000000000000000000000000..bca292c6f306a4273b1c6238b28e0cda1befa9f1 GIT binary patch literal 4912 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 XabU$J>o4s+YrIA@e8Phu#+&~DQQ_{n literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/memcpy-armv7m.S.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/memcpy-armv7m.S.o new file mode 100644 index 0000000000000000000000000000000000000000..16eb7dc08c819ae3bcfdde6f55b2f81971dccb3e GIT binary patch literal 1016 zcmc&y%}WA76o2E)YN>@51eHO7ko2*Lcv^!L`+&?t{Re9ac@P(O0;NNTj{OszqFV$V zIuso`b+g@L9XuC7K?l3_MxEM?#A9!H{NBg!y?yg$4p%qV2q7SaKn#97fGbZsqa@o9 zg8@*0TxOnuj=oV^c}Qy+d#lA#Y1IG1w02{~6XCvdgtS*Hm{7iXO#8H0!r!obk=t;K zqyUxLff_Y(wX8v|jdi#U&TZHsJZZRb_s*y_@#x_CY+3b<$Xx!|KaXEB?S29)g1D2M zXMVgv=L3zXUu<Z~yYj3s+*dBL#<UM>tQj3{$35=2zZn(PsVU};v&6+qki@T<c48Av z{`u3Ab061^y0d4d@zV67UMK+>LsQ9Cs=QcR%qPJ+<jW6st`-wLgt}e=00nmi#fbB* zz%P#i!><!PMdFCaM>&*><sG9ApqlkE*9(Ze+QB_(;g}rMU7hQo7EBY=%ywSYIj@!q z`@CrO82FFyWcUBxZce=8Gsn<kJ|Q!xB20yY^5ozMU%Ins51{trEp#{rLR&<?8R;O( seqpp_FOfdL6)y>+E0QPBwS9C%b04ZWn>a@Zbr99r&p=)PV^U<lF9|om3jhEB literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/memset.S.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/memset.S.o new file mode 100644 index 0000000000000000000000000000000000000000..6cf45a0c765f77bbeca0ca482fd88959a05d93c4 GIT binary patch literal 552 zcmah_Jr4mv5Pj>Mk3vGD(NIyal~N-@<q}b8_u>)?A$KdG@^|=WeulU1hNEDTmw7Y$ z_RZ{Grt_In3K9xEyer_I9{9s&?x6x7<2DNunQ#l$B=slz*hZ&8Fhr?V4ypzAeueij z0r2p7!(%5O9*Qh=a^6`JGTS)K8(|!7q1VP5=rBp3$ICz)YvXNrv{91x`o~)oxc8Sb zVfya(E!nh_>15Myo%~^!x(e}6*H1MEre`=mH$y`F8f=J{JG&7hN3sx|%d)FGS`iDP UO!$QR(K=Bj@_tv=;z9c25Bn-1MgRZ+ literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/mk20dx128.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/mk20dx128.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2fa574b507045aac386be8927495541c01e4fd74 GIT binary patch literal 10140 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 BvgiN+ literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/new.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/new.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..2bb4a3bdf22e686ba39ba6603ecbffb83d18257b GIT binary patch literal 1796 zcma)6L2nX46n<MMQi4s3ZE7{CYhsi}S%J_-8V^*g^-v5kdeJmy7p5r$ShBmedeVcx zz^ncPFWxoruXyy}K~H+Jes6cD%uY!3C2!vQ=6mz;W_E^GJA3yG!yst}6={NqKBq!v zwibpWEmMI`e*O6}&1tvU+%k*14<4J3TzBA`2d-ysKWv#hLq~MGqHDH2w<CPt_55{n z!>U;ovs$ifmg|+eS@gs}*uGddpJK^P5icoilpN0<bq-BW9QFL3J2I=aa;?6(Pupem zWDDErk#QC2Y}54u@uJkKQReKK*4#`Xy<{vKE2;Cws&T<sn+dm|4C+49^z%faD3v$` z0!}VZVMetSrD;x`09GwU8I8}VG}N*hpVj!B#^*FXukm?}pV#<#jbG64BC!IW5$~jc zv7l6N^(uVAXXsJ_XNf<GG_Jo6pVa55n!tJ5N?`Oi6313&Jf<rFJ$o`b?$gj74BQR_ zyN|IuXdlsmCj{p<@@Oig0Q=BmTU*lNN{pvP%YQixY=<mA@S=DqGhD8Ktgao{WI4W1 z7Ot$tlUCGS0;53{hpi?ixZlJCHlwWx_h5D0;ZTh5%Xk--9Ryy_c^(Kq+Qa{h7g5CL zE^l1)mM1Ia&AuGh$(ya$u?E{UIN#2H)$#k(e^-4KGQWX3eme~~+gCKi`sd(W!_K$? zSM_cIOAVx_`EBH?-Zw>$&p_(6k*j*VZkpbnruRe9<G!Sxt?4yl4k0wDy$_`J_gm59 zS1t8C<Z6F+V-6uSsW$>r_4vcc^W!%x_1+*?_3p<ULTFO&HIS;8RrL5@L+ZUn&U*Zv z+4!8?FpCD}*x$h+F^*=5J|U?{fXFp$i*R|T7%u>P;3PI##}P+%YTuE4#3Vm+d1n@o Q^Bz>a_gHiXbJC>VUkBr>-v9sr literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/nonstd.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/nonstd.c.o new file mode 100644 index 0000000000000000000000000000000000000000..076a9ab653d8200d41c46b4cf6609a754e4cf4c9 GIT binary patch literal 2600 zcma)8e@xR?5Wm-Np%i2=MFnK!3k9sQekoE>WQ(Q1104vHEz>w91<Jrc`(0a%X2}45 zByMie>5?&*EM#+uKb9e8OEl<eHWTBPC9T_%1vKLy!AUY(ani(O?5^K_p|C%;OWybH zb9e9F-MxE--s(Ee7z33U7-1d(_;nFWoF&4HkOE5}_;r1@#32vHndRcsN7I_8%Rq00 zkXiSxZ-Y5}>H4MkFiT12Q21vcF{4SY8&2K7Jj`51nU#!Z9<ph|tn;t21RlI9*Q9=< z%@)S4-A}d7&iw5&8ANWiE#WN8$`Q|sJoOs*On(F$lKGK~M;_ce!1zJFl4tRAQ}+&# z2N<ovqW-l(sI~H&TNF)Az{+n#<amzu0OT}s#ggXJih@{M{oELsu0QhjH*&}!OFpk1 z*^;v@mm6~A7Ws2ouz&=?ef@(OqCtzf4BDOsz#zzR7q8t99>={?`uOot^4Z@1Mbzg@ z^ikts6N9<^P+&3?%3WE3NzDazzKknbjPO2wH>^DYMX&j9g+Lgw!SsiH)<}l&e7O3u zkCk2tL5ejv(8o&eh7-oWMbzYHrDs=xQ9BjSn(i35DK`_lNq((?4a1q-ENa4<BuU&M zFXP8-;_c?FfiQ@f@^M>2h$UqB+3AL$^i0zDp)ecQlpM1OA*M^dogQXM>FA^PvrX(I ztbOP&$K7NL{hYz6N9Xzg?<6T&Ih}VVa3TzS-CLYnnSq`9m|qTAQr`0&<tKPUaJJ;5 zNi|FB^lyEvDwng34MA}U-uaK;g_s~z8LFUg=8pJa+`~!?RaDzRfZ~4Q|7;YB2K{rj ztZtTXO=$$&nRJT!pUX~uFnKcsdR8!8ZRTp9eh-`bf5Lule%vwSd-BE*6m5RoHl&}@ z2?I7=NE6@tWH;(`cN@7aG7}>qmUNKM1T+_f^E;z=LiZt@ek%*l)10;?`1B#B@8bzR ziu>Z^zvriXRGESDv4-H=O?2z6)7hX*5*RB2+YA-C2Ardo$Rxe&SLf(3)-gJ9Hlxx8 zg{}txy)%tNiCoOb8h0t(Ns8%CMwN9^naVZtUipH2KkMoQm{yEI!S|D&4#&>j;w+91 ztFw1yGM_)hH9P^n+1cJ+t@_YGte`9lG45WBe0)OW?@t)`ujpq+pJITT%F0cmv1Z$= z;wvs!mq%=Oxy6d@^<s5*i=(a0(Iz&!U9Ap}$L02{5!Xu=saRZRE-p2f6_<%dx1-Bp z_c+#wyKqa9Bf7=3-qhl@J6k(Mw_{(Yr_<#W*ICS#veMm9L8sas_Lfdy1t`W<y4+sJ zep9^#;*)jtdd*U88e7g*3h69^WwLC|Tp@Ep?C+KqLbG!Q6odu8YJ?XC5Kt3K0%##I zR)IK{1c+N?kBc>9G~FV*4wBKMcJ3I(z9R<51`t3W@t@b}=S7r+MbQOFf>hK~59)9& z#eAQQ;@k+1gB8eCBHw%!ASbN+#w$v~m5Lbo5^lsr@tv6SQmk)B#G-u2zGo2zr_1T_ zwn?p!=Y_mB=;`vh?9kjCx#i~e)^54Sxd3)~7edE8?C$A;Hm}R$b+<!%>ppKgpxEVb z(vg|C60umiuWaP$gqH!Vjq+0B%K@s0rzv?7|0;@qAdZ_Rh-Uz7#nDK_X6+%4`oqN0 z|7?^?SU=%9<Qlxx#wZ8LbD-O6Z$a*LE4)LMaFo3uwb{LPkXk$*kVqjZ9g*;{C^*uf zd8igFxm~oA!WK*Tr>WJ|-R*E<JbYV{-RpICw)A)%9!&p#(<=0&yNr+Suq@h%rA8<R zzvPD{Mrg4g*@#x-O2GABe$S)N;&W+URZ?Hs3#f?o>qDHUIw4p6Hlj=~!-|XO1{OrK zNN<f^B>7QZFX4)fcLuSnCX2EfuLkAVc)wu0{ivgO^skT_ZzswWZyhe8G&HEaBusu} z?}&0Ua-vK$xD+w+B_CRE;=**~h!Q{VpkJ{HkdqG)j`v)T3D;p#{Uk(5^&_s{A(^gX dyg^hxgEGaS{HRY<YfKy9bu7YxI+fIT{{W{zG<X02 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/pins_teensy.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/pins_teensy.c.o new file mode 100644 index 0000000000000000000000000000000000000000..3e7f12b3d5a4b9c60e468d9493264f49d90e2074 GIT binary patch literal 12472 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/ser_print.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/ser_print.c.o new file mode 100644 index 0000000000000000000000000000000000000000..392b7272443e426d1ee9179c5fe0896c4861746e GIT binary patch literal 768 zcma)3%}T>S5T0%NV-E!t#XpesqAA#zl(bN9rPf}osOU*VHtk9SO}6Z=q9<R&yRYPn z_yjuJbg}gy4otrJ=65Ia+C4iZgn$(SF8nZnw~Q3RX@U!7C<634onz|u&Tr_o5MxCj zgrx1OKJ6wE9}fADUPv+EN(rf|wBdzbK<j?c^jkrTx{{AMQ@l!VvE+!)N@|T-Bw0Eb zQOTcT6^oSCLqBXa@1X7DY{pp>1KCHj&=FGe=UP96Vx`nC=T`G;WSwj{n`Db@lii%% z#p3)vdHDRYeuK`!wuUd3JLs7g2lDe2qXhuP<^4p)srCi{o_a|%ix9QUaAYlfwFYm< zGy^YE3cP_x5}u+De}%`imT~l`xmuX;H`&3k*$=NWmF!M4f?&7VL)+xpZGPw3e{_I3 zOaI6_ob@xeF=G0Osg-?9Kcfv)oH@z70Pko7mLS@>D`?xdneZhBy2hA^%`<3sGNBJt a)7-qdglev{j9NyW?{|WQ74%uL{k{RGeolM< literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial1.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial1.c.o new file mode 100644 index 0000000000000000000000000000000000000000..f0c78f5c0ecb507e63a3726ea32fe1ca40e2424d GIT binary patch literal 11040 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 Tq2~%sDSWUR;J2EAobUeumnUY4 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial2.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial2.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a18f967efc257ec52ea69c2ea723bcd25ebf5e33 GIT binary patch literal 9628 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 BX(0dr literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial3.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial3.c.o new file mode 100644 index 0000000000000000000000000000000000000000..ff1f331b44b88131e58579f6b58706b3a90a296c GIT binary patch literal 8928 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 b^!qga$*#N)Ixlo4O~YXjo&Rha$oT#r8u@tM literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial4.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial4.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2229f50d51e8d414e258eaf244da2ccb289e08ba GIT binary patch literal 764 zcma)3%}T>S5T0%NV-Z0`@egFZXbLtaB`wrjskIlYB6<=Jn`EVdrYpNq^yEwU2ELLn z;uGj>lf~47I50ck{O*1`uY<EwLI@ZkV8f3G@Rm6he^y{a9jXAse*c)-!}A+@EyP68 zdm(A>YD5P~z@vyq^iqnDD<!0A(6-|{9&Nc^$L)GuYD+%hOz{T2#g-$Uw=~<$K(c8# zrjkF!Di%}P@?F2%xr3gIcQej{7|1@tN?*v7KQ~7{RF`U_dTF)1M%KxOwMn+fHrXv1 zF2)x5l;QKs#I?2N*lK^i-NHywEGQRU%vJytmoc08P6*(rmn3BY+EiwCY!JRV1t(%D z11C@loKPeQpJEI@!eMDD<KQvnYHt2t&JHFuH{8ffvK{3P8pC7{v92>re%G1*Il!8Q zf7Bi3^YmV{=y_s>vO~|)+D64YAF?RGI|9!*XwAJVh|Sw{`T`RJ4RSGc+8Rze^?|B~ Y>o?a>^=6h)>!`(fC)l`%F(YQ)H@@*rQUCw| literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial5.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial5.c.o new file mode 100644 index 0000000000000000000000000000000000000000..e356a2cdfbbc19351eaf45a0c6e11f84c8a6ea7e GIT binary patch literal 764 zcma)3%}T>S5T0%NV-Z0`@egFZXbLtaB`MTfskIlYB6<=Jn`EVdwkx|)^yEwU2ELLn z;uGj>lf~47I50ck{O*1`ul=)ALI@ZkV8f3G@Rm6he^y{a9jX9>UhkONgYz4DEyP&S zdm(A}YDoK&kjF8P>7^7AS4v3Lpn>B%9&Nc^+wFKAYD+%mOz{T2#g-$Uw={!hDA_a` zQOTbYm53>A`L5q--$B>KyBTL;0%RXyr6**{pPNG;s!O$Dy|h|hBkN?t+9X?Ko9vbh z7h{Wj%JBJR;@VnsY_&h%ZegS-7L<!FW-9=S%Y=;sCjxNP%OqtX+EiwCWDveN1t(@H z11D4poJdS2e2Ovr2#2MqOv1;MtGW4qIXjrt+;Af^$##@GXbh7*#JbKf`CVuJ=KyOK z{!w?B&(nL+qUVVj$__nGYk-P(K4ejVcLbhs(3*Q!5SzE@^aUpR8suW?v^AV`>H}2| Y*Ke+&>dh>p)=`V|POxziV@AxpZ@{8WQvd(} literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial6.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial6.c.o new file mode 100644 index 0000000000000000000000000000000000000000..608aa25c1b0751c7ebd4a6612c5a01e1aacefb65 GIT binary patch literal 764 zcma)3%}T>S5T0%NV-Z0`@egFZXbLtaB`wrjskIlYB6<=Jn`EVdrYpNq^yEwU2ELLn z;uGj>lf~47I50ck{O*1`uY<EwLI@ZkV8f3G@Rm6he^y{a9jXAse*c)-!}A+@EyP68 zdm(A>YD5P~z@vyq^iqnDD<!0A(6-|{9&Nc^$L)GuYD+%hOz{T2#g-$Uw=~<$K(c8# zrjkF!Di%}P@?F2%xr3gIcQej{7|1@tN?*v7KQ~7{RF`U_dTF)1M%KxOwMn+fHrXv1 zF2)x5l;QKs#I?2N*lK^i-NHywEGQRU%vJytmob}koDjfKFG<P*w5iPO*dTm!3QojQ z22P+9IH5=qKE)V*gu~KQ#=&FC)!h8QoE=PRZn%+|WIM_oG=|9@VqIsL{H`<qbAUAq z|EN36=jpv@(euO%Wrv=pwT+5*K4ejVcLbhs(3*Q!5SzE@^aUmc8suW?v^AV`>H}2| Y*Ke+&>dh>p)=`V|POxziV@AxpZ^BbeQ~&?~ literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial6_lpuart.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serial6_lpuart.c.o new file mode 100644 index 0000000000000000000000000000000000000000..1de4d37cb6b1c79d5e09b8ba5085746e5560b430 GIT binary patch literal 772 zcma)3%}T>S5T3Pv_8@3c`~z7p+JcQqNelH>YVE~}h<Xu`O}o-S(k;7N(UULY%~$e8 zd;*<qvY2`h2PWTq^ShII?VX<yLcj`vD*P~jw}ce@c|sM+Pz30AyC<~Tzqp~-LPUx_ z3Q0Rx1KNuNJ{s{6y_90el@e0bXw&f>k2YMd<+i;xtx6torg)9sVaYL1OX|&fAlYO% zrjkE}Dijmi@Lj*%x`&R7vl(YW2;>0GLRU!5pX&o3iYui-d8v|LCmUolw?($e4%u6> zyI9QblZVeQ>o=HN*w*mH@*H}yl7oDfVzdCDxC~j;dWfboCbcsJaMVkzS%9czf@5pp z(=|9FrWrVaQs4|l9P<hK@P9Z=YZ(SJ&DFw~Kglje&5n4Pxg@tr34+~dA8nIoH~O7t z|I;DnEdL|#DD7wNW5o0mb1V6neny+9ICGkK0p8K@EJ3t$*U+|aGvQkd^o)^;%`<3s dGNBJt)7-qdglaCdidsg^_B+MG3i_<re&2$kP+<T7 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..855e0e31b823ee4d7d79ef3787f1e2426cac7183 GIT binary patch literal 1032 zcma)4U2YRG5FU4v{(z8ZRa6QRGKim4A|_jHtEO*N6!Jn)h2RAQkvHqom6ABJ-4vd< zNDsg*=qY&O5}W{LcGs;NkYJ>5=kJ^Gc-CLKFP<~Tzzc&0TzUY93q_`$6siH&VHu`9 z_{N~u>Fo1H@8ui*TI-SJN80d%SAE_crz*=-#t)4iDr>c|TYN_(BIetzc(>J#+q_}a zNJ*=<_&Y3lrmB+WPBS%fGCbx+&2pRT3ExgyNqhG_9JFu%sbrc1dyHniqm5Ian*9V8 zZ!Gm!7S?L(>=xUIZnI5xhutg3E{4ANg!ih!&tDe_G@>iFCjV-O2qU3HP=nPlfPN?u z)I%4m7w7yXSjPy>L?=DK`bQOmVyjedmC5C(J5v)UhSMoLbTD`u$3b`ogTNbP>PVi9 z9DuN&$4;iGohkLPw{U9?L?)dCky;Ca0^*Op1w;I`yBO;67-s^3KTk;KOrD-NWvlW3 zOWj2l-P3QSd|#KPe*5<;p5OjFk9v?iK`bNw#e0gJ`E$cR=j~3#^ZoWJA5|g#+z;rH zP0y30jnIWveke!yh`?UcG79h&jo3S=eLs3r{!B`L$HXZam3SU$zavWhK%674RiJy^ RM64jferH&?k1;R4-)}F8b@KoK literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent1.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent1.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..1d267a7bba612566b10a5d78d12744d6605159cf GIT binary patch literal 1036 zcma)4?`ji45TETO{i6uBv}hG%710!$H5abM2!1Fr=8F-L`bCj+FSn%!NjB_mgZ<=- z_yE2|eGS2v@CkJ0?zY`VK?mmMH~)S+vwNR=uU<07zzc&0TzUY9OGT!h6s7^!VHIY5 zIA_rBcAxP^|Mfe5sP)+LV{Q1s+X3%QQk7*Y<8O=}DQmT{JA6+hBIfN@yx;1?9o{f% ztfW;t`~$W;QB_NGubCP-9i4Ea=DE%Fl(&;s(%JtA2Q3^xDw*cM9wDrEwQ=fGbCAID zjg`UL(nf8QZLwR?ZMMzsuzTg$#n2a@aIYHt{B@B)5M9}t{HqKRMnZ|81{+}j{ZJyP zhc0$6FZe64g%O&GPI`d-kE;rbty8~MCYR&hTuogpMza|_bTE7$x5M}xhM_ym)UiAr zI{;zNCQhbkohj{!M|g1#L?)dCky;Ca0^(2RqD1_iUySr*f`fs;7ZlPtlc%Rn*=mRX zF?X?ucJ((?{$rP&{srz=b^Zkw>xhGd?r#<KUv;}!vv_X!dLF;1>O9}m%12X(Klcbd z!t{%hbWnAH$`9p8b5!J-l~I7N2x9M`^?d7y{h5^hj)^k@mH0Zc{*Ea11N9r~wMuD^ So2YB3A>S8le2y_Mp6@qa=yv}A literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent2.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent2.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..a296ca5a7db63020e0ca7f56d24a3ec4cc150442 GIT binary patch literal 1036 zcma)4?`ji45TETO{i6uBv}hG%710!$H5abM2!1Fr=8F-L`bCj+FSn%!NjB_mgZ<=- z_yE2|eGS2v@CkJ0?zY`VK?mmMH~)S+vwNR=uU<07zzc&0TzUY9OGT!h6s7^!VHIY5 zIA_rBcAxP^|Mfe5sP)+LV{Q1s+X3%QQk7*Y<8O=}DQmT{JA6+hBIfN@yx;1?9o{f% ztfW;t`~$W;QB_NGubCP-9i4Ea=DE%Fl(&;s(%JtA2Q3^xDw*cM9wDrEwQ=fGbCAID zjg`UL(nf8QZLwR?ZMMzsuzTg$#n2a@aIYHt{B@B)5M9}t{HqKRMnZ|81{+}j{ZJyP zhc0$6FZe64g%O&GPI`d-kE;rbty8~MCYR&hTuohDjAk=<=wSFhZin$X3`2LAsbhIM zb^yYjO`J^8I#b#ckMQCgh)g;OBDEF-1;n4sMTz)3zZmJs1P23wFDRsQCQnbDvegd% zWA0)R?dor){Kqak{R`Z$>ii2V))5B@-QOzezv_0eX7Swc^*nx2)p@?Bm5-(nf9?@_ zgy|P0>7eQYl^@EH=BUUuE298k5yaj>>-p9Z`!gy19TR5+D)Dt>{T)&22kJM}Yn9R- SH&NG6L%uKA_#9(iJl}6=q;~`W literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent3.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent3.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..f4028231ad011ca8aceef23bdf8d31c6083ca897 GIT binary patch literal 1036 zcma)4?`ji45TETO{i6uBShNbVif9UE&BbeJ1V5A*^Tmir{h~<R%WdgFk`24tU_bdH zK0x21zJ}mS_yjt0ciV2GpaXOBn}5HZ*}X5lS1%c3;Dtd0E<AvPr6N;L3e$kAunMz2 zoH6KkyU%!||N0$2(0Xk7p*DQ~?SS_tsmd~y@i#_~l(pK}ZN4KC5%YE{-feZ_4sRGW zR?@0%{sCK_sH&y8(@c$=j*hrd^W5fo%G*gR>Fj=l{T2=&l}vMB4-wY8+Bo&OIY?mn z+R9*UX`^<7ZL*uuEw;sOv%BTk#n9)UaIYHt{B@o{5MA1u{L2gxMnZ|81{+}j{ZJyP zhc0$6FZe64i4mHKPP&i%kE#laty8~MCYR&hTut3mF`CWbfrH`uxE;plFbv&crVi!t z*Z~N8GI26R>r82nJi?1}ATsGBh}2pT6cB$h7bW8F{9>dh6C4Z#zMzoKnLIsq%2qr4 zkGX?Iw5z|F@*lhC^e=F)s`D?fSVtTrbbqU;|Ehb8HH+tlujlcLs?PK6RX&<R{JEdd zBTT<2Ne5LIsQgflG)G0QSs4X5MG$)jt>;@u?9Zh1cTAiRsKnQi^>;+6AE@6@uT)BV TTt{6)4f(!e<8zF8@qE7lbYOQ0 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent4.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent4.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..9d4013bd3ceaae18f3c357267ddeb35de0be4601 GIT binary patch literal 772 zcma)3%}xR_5T3I9$iYO3#=peWi!O;&APWiJ2qG6T#;6zLp}W+u2~g5jq9<R(o3G@H z_yjs-X<R%QCz*aToxgsa*Y3qRAq1Qd@ZrY;cuSmIFi-HI2zh{Br*lgE-sLU5k#eNz zqg1qg-KX7gC<X&DpjS#pLTjmXnKoF!YP4RhHLI;!i~3581lOWW@3G`WEJ`YkN~riG z8d4=@v5w`0)`M!$YCb@_inF=kVGQID&0I$+Bc3b$0P?Gaelb(ZZjeo~<!zH4vP<?e zj*G)IpDcWSxqFM=5?kvpmwR}V77wy%7o#}<EmX`$-I<t}fJM_O0MjpH!$U-)5*#`U zpKgE+xZ%J;t${^yJjP03_#ccLqvG(%2)#7sPiGIKmLqOvF3GMI4uWHJfVRzZjDF|2 ze>%dPm4D<NFZ$X2Sh4-&+)57H&uRk|XX3Xc@{Uk*4x*d8j<$Q74c}p)YmJ4tJd2K# d4Sk^6=Jw46RJ)-y)FNuS-x(H`@Xm?r_YGTbP)Yy* literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent5.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent5.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..cbb213c3eeb9bccc1b55c6a32be64fcd8df6c186 GIT binary patch literal 772 zcma)3%}N6?5T5kc9t16le<1OqTd=V$+d{pST6?h~qF%&9b~n<6wkb(0dh$iQ`AWWs zPoR_T23rr}z~r0B{N>BM_Abr|A>f372R|ObTjJ#Xd4dNeC;;@k-BarIFK_9Mlp{?a zrJ|kd0qu<g5k(@RS4xILYpHaFHkr@rv{9?KYVCTPdP<B0*P=r2vE)RgCDmp%P<#>& zsS>kT$8tg&e$8*U9-vdh*<A1-26BjIzAKdx&((nsh1KGqlqu&n$R^p!Zj&9dOZGF4 zi^D}eIr#i?_ZG8DY^}dsp2eF*$wF??#b_Qt3l;NGZzd+D$-?Orfa#a9;Q^vi2@aiw zPdC6KZaA<&Yha-qkFgRM{s-g6s5p2sLNAT^)7itQ<%pY^OR}rfL2!%?(6)Jw(eFI> zPe+)u@{hdZw4dFN728kFt>m!%tTs_`CVopI?+A70AiBBhXuG%B@Erzv)=0(WS#+Fi c=mXU@w{I?@+6}FtmQWY_onc`a@0_@P-(4e6O8@`> literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent6.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEvent6.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..61f14c6edcd56c62004d719450845ef62f90a649 GIT binary patch literal 772 zcma)3%}N6?5T5kc9t16le<1OqTd=V$+d{pST6?h~qF%&9b~n<6wkb(0dh$iQ`AWWs zPoR_T23rr}z~r0B{N>BM_Abr|A>f372R|ObTjJ#Xd4dNeC;;@k-BarIFK_9Mlp{?a zrJ|kd0qu<g5k(@RS4xILYpHaFHkr@rv{9?KYVCTPdP<B0*P=r2vE)RgCDmp%P<#>& zsS>kT$8tg&e$8*U9-vdh*<A1-26BjIzAKdx&((nsh1KGqlqu&n$R^p!Zj&9dOZGF4 zi^D}eIr#i?_ZG8DY^}dsp2eF*$wF??#b_Qt3l;NGZzd+D#lq<nfa#a9;Q^vi2@aiw zPdC6KZaA<&Yha-qkFgRM{s-g6s5p2sLNAT^)7itQ<%pY^OR}rfL2!%?(6)Jw(eFI> zPe+)u@{hdZw4dFN728kFt>m!%tTs_`CVopI?+A70AiBBhXuG%B@Erzv)=0(WS#+Fi c=mXU@w{I?@+6}FtmQWY_onc`a@0_@P-(J^HOaK4? literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEventUSB1.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEventUSB1.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..f27e64a652722e144ce0a8e2ad1c972b9f72a38a GIT binary patch literal 1052 zcma)4-D(p-6h6~U`lAT8v{)5n6wwr#F<UmJ@veq6H%3J5jUr(-JE03nCd^Djd({{5 z0ep-4AYS<fK7pRIyVGtLMGu@gf8Y6=nTy`*BgPnbV$gtV3m{p_BK0T}4Y&=fFz>@9 zgMPRBk~jKqj`;_zCzg-3;fL=Ayf=+ilBk5gHF~71)yD4dwunT?_gdk8s}pv3!>Eap zR_*XlnDRmuDb02>HgYyP;YKY|o9Y?gi&{}<|1%u6Z~&=foC14>YQ3wCQ)kUV1j~0; z25U<jwN19g?giWIK6}6(<zr_<UmfMWYVh;dRRERX#@1xttPr55OaatjtL#9#Oaau( zCT1^J>=oEX56wiKo?w2nK#*^p@~twdob(oI=8oUL3dLwXho=sPAH#Mfw18p7GfdQ2 zo=zNqu;)`JW0cP1^2BR+gAPO@odgkE3xXWtkM%Q@_-hw2($gu<2?8HfNasu%pE_lW zmHtaSL=^4rZz}(D*Qx$R9v3+OB2^sKAbO6xiu^C!E@G;E%dhG6eu4A#4hkDZM!xSD zEz;@B5_OPursW64h{=bw=D8Q(D=MKkQ2Ki7sQaE2{(*rDQVQ}olKze;^d0#d@~wht TkGsfg$mM!pF!2a|o_xLEiF13} literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEventUSB2.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/serialEventUSB2.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..8c8a98d9a94698f2ee3ae17d52024a0eeb03f1ab GIT binary patch literal 1052 zcma)4-D(p-6h6~U`lAR|ELH^>MKpzG%!W;AysIJ2jS*3Mqez&|PUu3C2{Y56SA7v5 zz_+Lm(yP9KPoU@Q?zG!Q(F14B-*^6I=CuF%kTC|H7&PF@0!UV}NIl9#18%}PECz7K zV9@Km<c-0bBmP0_spS)G_`$m&@6TeDBr4%=jUFp&wXr+ABO(#<b}QU#b;B-i7&TSW zsvZ6bQ(mYdrP*o5M$X5_+^A)0Q$6SHs1<ehKEpu^2arm}DX?d#)_dAG^`$wCVD;A8 zaAW08?JnD5_kwM9pFLoY^0Bj_FOTwGHTe1KGJr~OZELcxR|wEkrT}WNRd%3VrU2?? z6SG$<_8M%Xhi0NqPcXk(Ajr2#`Bs@!PWwwWcSrAEwZ(X`fTs>dAHz;1w1iQ`GfLD% zo=hEpuwQ3R#weZ1<+0cB1|5h*Ite1S76duOAM0l*@z*Y5tY<Tv69hh}kj|MjK5@zx zEB%*vh$!0K-&FqRu2TJrJT7qlMXETeLG&DX9r<6lUBp!TmS5BBg97L4?H4wRjC|h- zTBOsLCF&yUOv?|75t9#VEpjiwcT_@ep!D@NQTIJ5e1U;eQVQ}olKze;bdLN3`9{IC T$8F>d<Z``ln0SajPrlx7lu~=& literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/touch.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/touch.c.o new file mode 100644 index 0000000000000000000000000000000000000000..dad043175f145995b70947593f9ca352ddee856b GIT binary patch literal 1368 zcma)5%}*0S6o1>@mX;6s5JFL7Mj%>@j4c!b7?Y9)ngE4D^kCGq+wMR&X*<pCV&EhP z4<0;v^S>bRXl(ogj3ypDiSg>C-g>~)H{DKIh>8A^x9|5pX6C(lv(HyHRux472?Zi> zW&s?it%yI~QW5Bd5Zs8+ui^EvC(WtbpGMciYbT9rP5oJe`rBmjq*44nyfu;@*@Ve! zxo-`KDkNDa>dVAO<iol8#6phdJ~W`F-246ca`BD-^h<a`@b2}{@oZxdj*jc^fK*fP zUe*K|EfGY~Pyl=?Y-@=lWepaNv_z=8=|vv|f?dt#rT%8G>+bPGDw$j&k<{ix@__S_ zO?J6OmUq%*rJQGm!3>hIc!AkAx9ll0N8>a`W}>nA=wfV<L@ZWfy3MA@V_b5VwU<oK zP3JAWQYaFOJu_{SSIA5}8eg1$3d>O}TW5OS1mz}Df0A1cJD5(#A<);A4*7<(VP!-a zRl~}daz(lB>vY*6-uu_!SF;m9qMn<Mu+MLxqQ?srG@O_h8qN@4wd2xY0{M=|UP4~< z*d2;Qg#d{783J&>ZH%K<Fz$s4U0xH{2Vtd^2k;8@5Z1Tl$rupa;roRmEx@D$8`;_U ztiek9VcINM+-3z{F>G|l=l<fJG@xo$W*pme_t;^&0fxC}I(jLKk*veBW@VRWGpV%O zqpusFgh%?s!PGu1J9-|qW4XF08II5aYUqv*G;iBL@nKNmq^)9G2T_ZQ1S(6Q1zs+* z3a-PqLv_co%>2H?Y|-NX;wmPJ_aJZ8{SVJp%jw@}=gH|`%#&~G7Ul&}{*@<Q@x^n+ zyd<<Xxr17~uSDBE#e&3D;<e&rT@mLcP{e++-Wu|86bZRs1|1?#oG<VLg}0dd5iuc; zP_T!p>jl_GXG|KXMUKEAitJU`y=a(%v?23^mbHn{3v>*i^dRp?5%r0_M6cfcUgM%Y J^hwD5{s8IE$dLd5 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_audio.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_audio.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..9ca51ec59115b95bfdefd3aa41bcfc25e58b9656 GIT binary patch literal 768 zcma)3NlU{(6n<m6*n_yBxPgopO~J;bq=kAbwf15~Tuve~X+|1oI%OsmJ^44h`<MJ9 z{sMi|WH9w0K6vxJeVO;#JwGFafFS}l{Ad7gsZ#W30X9^i1kmerPN?0xxTQBjj1+wo zlD4n<v>OLJ40%W|r5JFfgj7}9aD2z3b=PaUEw4pw$w!<iUZr=Ka?G=oTB8<7HXaPA z<WG@`#F*B7*KalNq3vRC##s;nIY6=45i;S=wZ0FfrE<TruvS<n8)VbkBHLt#>@ApG z4CePKz~`5-YqaLJ)%tw8g_b;7P{^z3Edoqc@W7^FB%Hxy0^q2ZIAH-|B2ye13Fl70 z30cCx36uh7AmW&h(T1Pluq2UDFip6c>+zSei%z{CUS&q<oiYW%Y_pHDjx*c*jx&FB zh%t-*h&#&a>Dy@1^~6j{A6-v#0~vebucY*j;28zc^j$^S%%<Jf=;&%8BNM05?4(^E b$hx?mxs0r@vw~bf&euD|#AUP@GWEUz#xPGs literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_desc.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_desc.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fbb5a6878eb963ae7075d887f9f098ca8b596c17 GIT binary patch literal 2752 zcma)7L2MgE6#cVn$FbEUcABI~O3}J8#Z{Ya65L3s5ONxtA|*knq^GK~*7l~cWP4Y; zYt)_^LGIj84jkZwdMlNv5E4ocT#(?vfeT!@AWm>;4~X#o?oKjUr-Hwlo&V;)`7{5| z?B9ns)>nlPBt=k}ju6pjnb4B1gk71&s6g&lyN|u6Q)^Qj)9<+FmoJQzc8b%k=}xbv z+$s0;{j&pq|2(!fxm|xcwl=oDcYSZ4{@5Y$Xm7ttx$_6l|2Ytkj8&Q`ybzbf8`r+f zT{2#1SDybgF*D<)9=qS(p<kaw8toHl)ePDI+92A)PxgpqROE$5RDCw_QL3j2O~<Au z^-Z$zbjha&)TAD@pgWY+R!9@{Y$2N>5*pNWiSi;{Lg1;AHjpk2kjSJz)bmu$rUYp@ zERad-T9vz9?uf>x#${qg8Dnvl6@KabibUwVNF<t~>xwSz+)wDY>3zCR2HrM#*s(=z zjHkdqrTA6m++10?W|VKfd)wG_oVIUlIi9h6Ys0wFsoTw_-8A0woQCcDj^|%Au9_8d z-dLEMUz}T-Uoy&`-L@^?zG&RRlq+^TW%lZ9-LtxlZNsxaX!$LtYb;deDocxZX?YGy zTeekik+=Xgz2bO*eSdbNLIXpYjjT4B8WZE<j6Nx*#I$%d&Wo~NnYM5!MSmWsHvO2D zQ+eEht|k`~bxP4G)dBDbFy}0i!}Nzxr-9HetppsN9|pJ=z^dq!N${f&Kyq{%OxOph z6dU<22-sE8DVyMDRWstrCG33pjzmYa9N&=~k6x#tgnj6U3Qecsgnc++Kki+pJS~F3 zHDDKQ6!~3OX5^vYiZN%pfcRwYH$$AGo!CAR;$iw+!A0!n8wD2--!BR-0{<1`N%RGr z#~I!XgmDqL660un#M|@hwWjSi%m$SLDmAHzTime2F|XwYjz<lryVbg<j_{;bw-wZU z+iO|vZV%srN4<97SfN9^+jN~)H>kx^1FPP)50{GE*4iyU2*>=uYjy9%zG{&(thQyr z;Y$gs!S$SGuMyO`R);s<H&L~#^Ey_yw`Dbgo@aY6o!m#FXuosx7IK<9N8y=iNHFJA z!xiRp){xp)xW{*2=KeJz{tsv~D7@Sk@iP4f9i#?*;6?qm)KDe@GMiRlky-bBGEsa? z9yCwReMmL?&n_D0IdPWz!Z}P>MD0Ip6WPT+!i7&h*l=?Si|><q$bFko4<xa^Om5$t z=&B{JhuLsC9lMKMp(dMFfU8vR1-6gu{%<)8CVv*PnnnNXqv^7$@{uu5{#ueewz0g9 z#+B^9c>H%ruDgpdDSV$;E~9bftD=R1jq)Ai8q6GSydKvYb$?$2Ge?T_*TjIz`vI8i zgA~d87y~NrH(;*QQY7yS3@}gTsSF@(%$53&3EpM!xb8`jyzeof#+ygHoGXrnD?IZ! z-rv#G{p|p7-IOBzjbL2m?Ey#|bESSR!TS{WB!6$mJl+$_6JRG&!#7~K-Ubxh0au!e zNYK0lF^6FRP2Ls8Rm6Ljox~zl?q!bIv<cv%orcb}hU4IS!MRiYeFwvv(g|!*{TGZs Bgp&XO literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_dev.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_dev.c.o new file mode 100644 index 0000000000000000000000000000000000000000..e9175687efb9f53d63c861dbb7d8f691fba2e66d GIT binary patch literal 8544 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 MlkCfyg{r>)1;goI?*IS* literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_flightsim.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_flightsim.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..88be23845791fe617b592ab8651d2adb91752bbd GIT binary patch literal 772 zcma)3OG^VW5T3Yw*n{8`Um)?KE!eeNwuO2twf15~MDZXZ**3Kc-KHd|=*d6g&A;Ry z@fYZ%yTPpoabWVz`;mEVpPvyzz!HHX{Ad7gv6A&?0YxZ44xrO&ozP<E;)Y%eF;a9O zByC=GX*&vdzt8*hQi>i|N=Q|rHP?4NTCI5XO2cc=qU0ma6fe;`OgZLBO1V}JBpdgJ zRPv`#g<?#re#LLp@1a@2-i)ag34wk4$I&*iQUxutx!u&|n0CmUqb*&^FyhwLrb zT`Z>e$-w8AwHtKiwl(^Ex`UQ9Igm-K=*<F5Rq!wvg^xq6!pQASCIGH_i8KokwTy9S zC7fM@+h>}A8z=>CPec(PqYXdAWm?NHm};)(`uwHrqSNe%mzhy~t3*Mt8||ZP;_ODh z<Lo~jV$9+{;*OGf=01i@Ju#Ew$J8@iL&l!?D>1zzcveBQeOFMnvl;g-I@(4^$i^A8 eI~mspvMFw6&Lf)(Eh86@)Add<aSd&jY`t%QYf%OO literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_inst.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_inst.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..818c283fa0d285f2c72fba020d2e589f91c587e9 GIT binary patch literal 3848 zcma)8O>7%Q6n^$5X##}Sq){45(@hA)p=1*WCn%_gmNcnQo2r6PPyv~>y{-*T*4kZ% zzlv6f0|yQuA#vdXq8zv&aRsRo;zq=w;)0X|NE|qDK|&xQMETx&W_Nb*)_KzGdvCrs z-^|W?yE9i;&#h%L8IqErJjEW-p`j4zFNP{l$LRhLABN9y`-RR4JtFj|&|^Z63w>DV zBha`0`u9e+Hn^5s<Nm?$NjDI>Cm9q`zZ$|gv$FD-nLl&>X>-GMo4#3dJ@eF)>*nfa z*{N2Ys(Hb4D~|8Go<CzQT1Bg1F3cB}=9df0X5Mp}j_o@$=5rV_=ZGP*i?e0V-m271 z&)IJH4R_02D9#s`mtLS#^O)9l>~e!L$6)raxL)AAI=fz^f#H4YL)m-!4rWF(W5%J( zc;?>BL{_XaQtH0<(eJk+0ER(#s4o0FHUBQnAEvt#J)E&v3}h~eb0%XkD5v3^;aChB z(QwXuEC!8gI9Eh0290SrS4u1fjcYhpP%H)=)^M(@SPVLXH&BHuE*681YWUF@gk{jA z=1*z9nk|k`rqe)=DhBnbF3^6>AJF`LnlG!n({0cY9fZlNVCE?rriBg^J`dpe1X_&m zr<#Vpp1^bTp@x5+z(;6D!+%cTqofur&p(FA<N3$vadw0-UJ^LJ*%b19O~c<8IPc69 z^8JN|e<S=n@JZzRN8vMf4*8|FUoJJa{J^TTS~MNdbd^e%&KH)r-*>!*-7Hm_w(l=i z@Tq&N+u;BK)S7L-j?t}l(0x#`<v1@V$8b-jZhI*MJjbpk2V8c7^!R0a+io=Na??o; zin_Z`vly;CIi&M4ZaYYQo5G_J?V9U7<23?p)>pWzRBqR5j#sLAj*~Kb7`J-iZ2cv5 zH^biBj;O2QSf<#Qjf?+J7d;i`4p}Cecpy|X@u1K%LLV1;R_M9TcQR3+@JpR|gox`d zi;sr?oY{FIuA8hy;dhmN7-t{*4-wtR8bxNZ#-DwfH9uJM!D#ufZ3cE3I`BHWE-f4Y z0a;Z$u*oX>K3O<cEbg>!Ux_{9WbyS16D8LpEKzAaVx#iv5!bz-dJI}rs%LMZ_0EoZ zE^jgRv}?VDRAGRq9IN7PZaQ1Y49<4T4g#-HZU+w1bJ=s-tuV8Ddwhp~j(W~;IdENZ zd2s6!O^-W)ei?_7N{u_M#GwRJ<IX8@DB0Aw4J8gGo*MVO5{FMBHLj|};S)-YYbtSk zPNnTjpv3WB$~bv%<g<X~N=HRcdHPPGhmQey`s#6vvGDJL_rF&hzY~uc5EC#TuStru zc`x~@d{O{kW1%v?eDmTs_Mb&l`L4m2955rB^Q7{9tMKtnP4ZoZt@6FCaKMcC-hi$0 z?I?U)zmo4W*ec&U3J1)H?-ST6-wz5O-vlM!P1q{my9x))i0^yYD&MZc$2UjG_cv^n z?>&VBX2ka=Y?bd9g^zEVl5Y-VD&GgdI8RbIj^#LlRKDL7KE9bszDpY4N5H!AUDWvg zQ24mkCEr_uFDvTrQ($>CDRO;pYJC5I?<9hz(fH;o`K}8-S@%1@4xmYqd>?CkCvY9* z_h3H0DNDXD1s{JWEW2oKXmuWd!~OjV2Ig!@=q!93#gT9v3)iAt8~dj*?@bB9mnLhm gB^*Xq(D5P$@^ygM$m`?x;+&~`y8wQYB*3KkA6bC(-2eap literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_joystick.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_joystick.c.o new file mode 100644 index 0000000000000000000000000000000000000000..9b37ee0dbba40f8e2e785f7b984fdabeed5bcd5f GIT binary patch literal 772 zcma)3%}&BV5T4~%4kl_e{v~F;C?rw~DI|C!h+M=NgC}E5Th>qo*6c1uPQHjYU&$Bo z33P_Cv3Su*rr&(?yVH4XpPw<tzzTyR{4jvGm}I?KLJ<m(1L(9`C%o9XxaK`6hnn9@ z#hX`M-W~;_-xqy;sbna$mP(g+&GDQHuez1G+o&{nQHi1OwJ7l$EIAhQl5(vaD1RId zxDwBij^vnEJ=bg0Z=vbpY+v|61ndCKY)dL5Udmk$a?AN{A+?rSXB%uYy~VcK4%<uF zT`VT|$-w8A^%JHSwk5t;o<>hn(vV3~jAj8QI=Fj~Q*EN~(Fp+@JslZ8Kr|}Gfwl1A z2AsZcd~gD-!3pJPB*y5&zv1}Cs3@2ip%;eyL3S}tJK|+#65nc05bQ?#Xj7iu=y#s| zPluSZ^pCuwc|W=j3H6gREB;VF(i$qxe2TpQ?`TvkL9}yM(Y9}+a1R4*GUj6Q2<=W3 b`aq@T^yWM&U1$ZhfST-giiPC2V*7mqw}ns1 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_keyboard.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_keyboard.c.o new file mode 100644 index 0000000000000000000000000000000000000000..3fa272f77552709b1a9b52408bfc05c70bac75b3 GIT binary patch literal 772 zcma)3%}&BV5T3RC$iYO7#=pd@7llMBkV1ktg2+XTF?ce@Z0Q;rfi=6u$jKM+<}3Lk zK7r2AZY*AOlIb_!{O)vKI~V7SF|fj*2tN$qEhbrSo=}7W<N&(u_9-uRFK>8XsgdCi zO7qrrk9Wqt3<4SOE3F377^O{#*Im!8@>-?Zs5GlhUet0Vg^?wGizO#ADJj>>z7~_g zkZbuInov!6&8v9L#vQaOI9o{JhrkZe%(j(|<V(5dL2f1AD=e*NHrOWHa<<tH+hzMp zb{C83eKPR*W&MQC!nVX0%N_Kj#eqzkVl)ddHU9mhocT)Vz#Ra%W;Tw5j~M9~ht|S} zN8kn`65#sAfICp*v7Dd}|As4~NQeG3l4fDZA7l^Xv?E?-F7d4rf?zi~K%4UHM!)my ze>%dP<$vTIC;jL?B-BsMt@uOzNb9IL^C|WMyrWUI1kui2L)*TM!hH;M$VkNI5!#(7 b^npsv>CJgmy3i_W0X5z43=7F`#rFFKf-q02 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mem.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mem.c.o new file mode 100644 index 0000000000000000000000000000000000000000..d540e75fa0f544fbcb90d611740abab45f73916d GIT binary patch literal 2540 zcmeHJ%}*0S6o1<-g;G#xKoJtMDA6Lawxkdt9!mHqK~N-kG6Z(pscq7Bo7sgxJopjM zUgR(EPw+tE$qzVq^oY@$H@#pum|!BlH{G$@^`Hljykz?3_ug;b%)EIs+XvJ0Gm4^s z6a`{XLjc>2!qboxDh8*a1^7<uY#{&Q=<#7>u<g^W1DN=bI{!rp1lG)*###02uKE$) zc0u2p#kQH-Yn8OQ16m~wujCx9H%`s%c0d22Ug!x&23z(cbJ5MEmwcyrmSP3+eMjnH z_asHDq(kU~%Lng|zyB2D$DV$^CgYGkM)Bg4{z(Q-GVq@>ke-|z*JA0LceG{8D%x7k z;@ZU0f;L?;SvJeE+9J0y%(g9V4`?HLQcq~Z@x*9+EHS3VI4d&4W&_$?9CDSpLxx6% zOm37jd5yD;f?cr6+Hf+S92;GMi8wCbV1`)$<sx<)CN1u;&7p-PgjyRH!hvY8L+Mn` zs$I%CrCaF@_;>4lzk=|s?tM_}UN-<0>W8an@rnvTh<FW%Pa&>7Lcuz(3Lzgq<l~2Y z{3hYA8JnQp1r%9<rkV?TDujLfu+QJ@!x5k)QchCXqPYHqi{}Ln!8mFuZP=NW05#zi zAGTb)hN)`D^}xDqu9jFy&p^Ke{aJy{^<0keRb#^_6b-Y;swAUWv@)Wb<E(1qn>5zq zTf+Pst(F<X(h|muRn8Uet#iY{IuRB(x;qfpL+25|gSt){4@h9tDZ-rqQ?8%(7B~Yy z-?QEh{L$^Ll4F>t9bVOW*~6l9K+hVE0lI11pkpcPWYoomt9z+8id~5zg7Zfb$XYdG zxQtaQu`*797ehB3hZoFshuOHOf0G`h(YeZss(zzuV`XLcxjb3fexAH9myk!*_BS5g zPyf6rv`LXS;tCq5I#aIW9WIpWsTCV>sL_1W*u3!^#8jJ7WV{J9c;oG3ycpUj9_2vB zTgE=cllyq>`cMgx@u-fyygkHJ(^4ewJ{pKe`zGl}hr9!X$w%!8HXL3-CFB|M=&ng2 x4hh|F&olt|A8T89sy~uPTAm?!_AuT<G}8MM#fDJilXBvXH-*V~gf=NM-Y=4I)*k=> literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_midi.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_midi.c.o new file mode 100644 index 0000000000000000000000000000000000000000..19ad04dbd68bae482b9dce313469b3c8deff0eb8 GIT binary patch literal 768 zcma)3%}T>S5T0%NV?jYh@egFZXbLtaB`wrjskIj?Mf4;hn`WhfrYpOt=*idc?ko8s zK7r0QSxmj?z~q~6es?mjy^C`~2pAz?!w&;^OG(L}C)iMhGC;rEJ*9U4@`hduF;VnE zNZPp?&|VzyFytW}N-^R}38`wd>G+OE8?M)K+g_X6l215Oyhd-a<b-D>^=3VgY&sfK z$)6$>i79RPuHSCmLC3|}jI$sDa)@TBD`di->jNLkE0saDuwL9Cn`Fz{COc%8>=(=~ z2J`zA;q%M*HChYXYQ9)*p(igE6!R3LC4iX<?&BzooDqPdUgCrWh>1*bY%F|q0#3*h z22P+9I3p3qe2PB&6Anuf83nV1tAzo7kUfm+{qQPtN$->q1hdTn+B(l{^E=P{qa(~& z`bXYz)=%F?i|!}pR{GKXv^G(3=40vwct^uC1kuc0L)*Mfhld#GX(JPpr_t=BLm#NR Zxqfp6RbOWnwThbWcZP+_=rdyaeFM|XP4EB! literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mouse.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mouse.c.o new file mode 100644 index 0000000000000000000000000000000000000000..43c71425b52434a091a858b42db5b181d58104b6 GIT binary patch literal 768 zcma)3%}T>S5T0%NV-E!t#XpesqAA#zl(bN9rPf}osOU*VHt9+OO;>hP(UY&?-B<EO zd;*<qvY2`h2PWTq^ShII?Vp_zLcj<C8-5tTTS`j)Ji&%4lmQ04-Z8ZY=Qs3Ph>4;P zLelQlkoMz%k4Ah%FQf>$QbMXaZ8^T<(WdLQ-Hz9xw&WAe6tB};EIHy?Nu$*WB%6j~ zD*02SA~B^+-}O7~JLtMNn{gIIK=#or^@L3Lb7Sa3xmFog3#-L7vQ9RvO|nI{$!@{y zVlcl?5k9|+U!%3Kt>%m67JBkxK`~D;S^}7<;64^J#hnnqQ7>`A0>nh7I5rl(Iss?I z5(ZA76gZ)XV?IS6{tAaBiHw3-!qvirzsU}U^?rDjxukc>2!h#W4{e=iw)vfB{?P&E zEd3+zFzcspqeb@<b1VJmep*|oIP)>}0=%Q)8G>l$uApt+ro)#Q=xZYrlc&+_q(dL5 ay19OH1yx^X8MTU<?{|WQHS`%V{k{R9%uaX! literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mtp.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_mtp.c.o new file mode 100644 index 0000000000000000000000000000000000000000..111e45d77843ae5dc21e21283a84028b0377b3aa GIT binary patch literal 764 zcma)3%}T>S5S}&tv526e_y@9HGzA-zk{0T%)Y^+x5j}}WlCCt+bj$8m^yEwU2ELLn z;uGj>lf~47I50ck{O*1`uif)ALI@ZkV8f3G@RmA7e^y{a1xf(DPUnQ$y^C9V!}&<k zM=oglx=*`F$OZ#8pjU!NOiC_fl{OsT@o3%knr_Q$QCqMP3nZ)3J8U^-Sxc=^3q>%F zhE%YpSjK!z>%Qx^n)lFl@$P^HVGQH|VX?!7V$Zd{52fXDzp}7aSSK4~)7m22WQXi6 z7%s-<`4r&u%fz*{=Gba~zTLt|UMwi&UCb5%rZRj;)WnGZ9Ql%{AVjM~YKI2ln-w^N zKn380Qi2olBw=HW;YT=uQX&qgipjb8e>uCD)ZB0*Gf8)pIcN-%eZ;!XF!^0){^t;D z7XMLql+Dw7(W2+^8A=a5Piq4e@0_GjfOiC*anPE3R}q`H>GUNgx*B9+>a;bSbm{|D Z57%!lqw3A9pjJ@x^G>mG31ddgyl*vnO_%@x literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_rawhid.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_rawhid.c.o new file mode 100644 index 0000000000000000000000000000000000000000..5f030a7f19ecc436951fb9ae6c486179626e9f96 GIT binary patch literal 768 zcma)3%}T>S5T0#XYY&Qw;vdL*(G+ZKN?NG5Qfn_(r07XRHpxl@O;>hPe@?!JcVEdD z@d<Rc$ztk39GHCb&F@a;wRe6-2mvDmZ1`aSZz(BxvjiI|umI5Sc2B6?zqqDXLW~u? z7m{{{1KNvy9)>)mmr?{=DIryrHXYA#X`}A8>TS18ZOO-+DPE;FSaQs>l3KIoOEw8c zRPx72MPfo5UfpZAZlP1h*^Dzk0&;+6sVii{pKAjT7M99`N@1<IPBzG<wMDkc4%sW1 zT@2>;DZ=NM@oTi^w$*&T+(J)YEGXtFMoR!w<=;v6G>Sqe0C3bxoG>3TktvRhh0jjF z30cCx@s$E65OK^W=)-^Euq2U@KTWur8}TRE#i-s7uQHSLP8mTk+w7yQ^UOBC^UOaw z#GJ){<Q--G^lh~0eqv^&AKg!D6BTDZq+Wn`G+aXv&D>SA&D(T%h=HCqGBJ4?%}zS> bfvTJ9H<wZMbyiR-sQG@USh$QnBc|Us8+}gD literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_seremu.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_seremu.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fc1fbadc4e4701c9b7230b9785d291e2bda73337 GIT binary patch literal 768 zcma)3%}T>S5T0%NV-Jdo;vdL*(G+Y<N?NG5Qfn_(r07XRHt9+OO;>hP(UY&?-B<EO zd;*<qvY2`h2PWTq^ShII?OmJ`Lcj<C8-5tTTS`j)Ji&%4lmYtP?kTnVmpAlUh>4;P zLekD~Kznh(M<YI>S5kyrDIryjHXYybXv6hdZrf{9Tk;8Kir45ZmYndcq~5Ftl1;-g zmHa7Ek(knk@A~c59dulr%{U7pActs{x<V%Wxjyiryj&Sn3+u%VvPrhAZL&jl$$r7? zVlcl?5k9|+U!%3Kt>%m67JBkxK`~D;S^}7<;9hab<CzlzIO-)%Sb&(w6vxKGXD8r{ zSi-;wlmaIdam=Ua!++thB#}`tOSoDX@h92CsNN5+GMDsD89^}H9H6c9%r?LC%s)E9 zoTY!{9cTUYZM5iqVs51$-A`*16=y!CUVwKrJVOx8+%>e#+jMw{fu1%pF?kxzPCE2~ as+;RKS5WnJR#B^{`F>|uxPm?-rr$R@1y14s literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial.c.o new file mode 100644 index 0000000000000000000000000000000000000000..bd12757b435bd323ac6c3e4291471d3d01d2594f GIT binary patch literal 5112 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial2.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial2.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fd76a0ad4e677222c86ed7b994c9c60371ab21c5 GIT binary patch literal 768 zcma)3OH0E*5T0%Num|yh;tOQGXbLtaB`wrjskIj?;^QPDn{=gtrYpOt=*hp~-M{1? z@fYZ9lf~47I57F<o99mEwRd((2mvDmZ1`aSZz(DHvjiKePzLCCyT{b-pWo1HA;yY6 z2uVAa1KNuNJ{<BPy^td0N(rfIwCVVcM;or!a@$^;+LDhsQ@loRvE+znCG}=KkZcl; zsN_$Pio}FAeAjQc?x5r1Y{pp-0og~h)D<$}&-H;1<;BXNT39Wvk#(|RZIUgrO?C@r z7lZkIitzbm{2HyfZ8e`Sx6qRp3yOJ)(GtK^1^0@}h>aUg2;iufIAH-|B2ye03*Vi9 zGh_(^Cr}EUP{c8xpbvkB!;(Zs!8GA&ZpL3^2ZMS)yvj_{J7omHY_o^9&NJKm&NKh$ z0CN`pk$0H&)3?#0`-z#Aesn*rO;nuun0f);(eMmGG;>$bHgD76D-86sk%`IEXm-+} c4^-V;zqx{{ud|F=Ma}m+!NMi<88Q970b0UO1poj5 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial3.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_serial3.c.o new file mode 100644 index 0000000000000000000000000000000000000000..c47bde9b105baa48fafe03d0d367794f93d36ae4 GIT binary patch literal 768 zcma)3OH0E*5S}%C*n{{$@ddJ8GzA-*nilG<)Y^*`@o^H7O|sHJ)0N#+^yJ_0?qBkc z_zQHl$ztk39GHCb&2uO7+B-WXgn$tOHvBMvx0DpUX@U(EC;{}l-D7I^&u{3p5F<q& zgruFz0qw;;4?`Z(3n>Dwl#r@Qn~vwWv{83k^|srlw&Wwu6tB`-EIH&^Nv&D)B^w7r zD*02SA~B{7ukN*5chIThY{r=%0og;d*cCG2&$WRErG@gKGPhD#C2M5e+8~=`i|ovq zT@2>;DZuBK@oThZw$*&L+(J)YEGXnDMvDLw<=-nVBQ`p60su$7#0m2e6Pe=BSorP) zoRB399A7DL0ujf2j6VDs4oeal`ICgJnHhhPZ4B!D@G4VD@01Y)v&}BrI?rtLJJ0;1 zeaxBvN8Ul!Pv1t1?kA>J`qBNgHc@frW9kKXN5eG)(ac>&+q_MOuQ1TlMkXdtquEJ^ cK2UXY{pK>NzRnVA1vTIA1Pd3@XT<dT23&Jb1^@s6 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_touch.c.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/usb_touch.c.o new file mode 100644 index 0000000000000000000000000000000000000000..3c25595d16d5e263f83256cf3a1c0297d8130dd9 GIT binary patch literal 768 zcma)3%}T>S5T0%NV-E!t#XpesqAA#zl(bN9rPf}osOU*Vl60kkrYpN!(UY&?-B<EO zd;*<qvY2`h2PWTq^ShII?Vp_zLcj<C8-5tTTS`j)Ji&%4lmQ04-Z8ZY=Qs44^NFMn zT+r^-koJ?1jYe!lF9eU6lw8O<Z8^T<(WdLQ-Hz9xwqO$$NLHt}SaQU&l18f$ieMUz zsbEjBjQNx{eb?`_@1X1A?0^Mf3}he8QjZJ8o*P3S%C*X{T39Wvk#(|RZIUgrO?C@r z7lZkIitzbm{2Hx=Z8cvkx6qRp3yOJ)(GtK+hWCokqOlVJIPxV?L5QeCieqEps}(q- zKn380Qi2olBw<tZ;jeH4r9>Rg6q5@R{w6yZ*8AaA=91niBM4@jJ+yV6+2(hi`9}ws zv-FR=!>pgajTYUH&#m;M`)O^V;>^d?3-FGHX9%L1yMnfPn+{)Mps$TgOrA!wlMa2L a>gM{*6;yqlWz;HazTXKJ*3f6f^!o;urcQDI literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/yield.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/FrameworkArduino/yield.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..c4d076d5154d1460b58add2f91f264b6c6320bb4 GIT binary patch literal 1916 zcmah}O>7%g5T4D(2?-R^w1u=$(KdC9laR%mIH8G<padsKX+kLF&{oy<t@ou~VSCNK zwc{cr3Y8EC4w1N6T)81}a1TK~Aoak31BW05iAqSRP$dTmQ9=*+)G)K&jW?DdPn!K^ z=6y47-p}ku$qRFmBtbAFh(Xf=a3kJKB;i2}4nZ%B{a&BdmL^JHRJ6BdN*`3Ep?lpk z`Kiq>yN_?e&{fnUKaVb)NcUGBK8k$OTlsFge*590zK@;tf%HJ-?1iBcjHnwh{P$1B zI?Zj>*KU>Tpuou1##a5aHHb#;O9}MEAKdxs_5OR8>(S-WbZl<WD$he~XJZuc&)V)k zk9U8l9$6SH4OS;gcWVui|9UJ><g2x$b@IA&`gHzU<!dHYjdeJaT)mwx&!5SE>qY)n z>smN@eWw=e`@c|v`PtbSB{skGu5!t?GeTLh9p(JRMJ1UvxM^}zS$6Cc7s7VLurjG8 zR81L=Yg6%QZCZ&rJj0pb!^%|*d5QZWW0PZs!*Z##;_#v+EIX%+C*q0escUdPj+HRZ z3=5>Qs77XO$K|E5#RPO6>R#;W=<hr#9h07u2c+ZD3F-NcHid`puM>85!xVYn?E=WK zKZA^(@Q|Sso(wzCej4o`_k5ju8Ywb#!C~J+bx3Fvzd5>^Drz!xx7bg#*gX(M59Rs; zWeC?F2{HOmf3?M4Zn58QvCA#?H!XH^Zvd1(5;{<_&-pgNVXFV8#WSXw%I6{KLevEP z%9TmamweeN<Z@Q-MuP$cVd#Q87R%_Y$gB)AG91~O)^H|^Jm(hCv7{wD{UR56J7;o7 zi?3LYa4*wB$+m<kf2BFc&IYtlR^8+)tdMcr#ZG6~{?u<W$6RF&f5$6zA|dpYUC6n9 z=|W$%+;p%HPBja^ru~8A=fwYpct@nOlxr2ao=Wr7d-_U--4JvgpQ7|W18|oR51sC$ z10UiBAwH2!LVRey5cUK7N_Yg|KH*V-2ZYA}wh5obk1B3vU1lJ<P6N|{hW+J&YBHCB zY6t-;cCAWI)vM5Rs%`Gn3u$oL?Ltl2*(@FosMz}|b6v+W3NH7yhXoxx29ZK<Ea;fV zKe!nebnYpi7j$kb&wsA)0`jQ44&ufAeBpJe_kt00{EO)5L3z!eDC5L3>h!-L4hgOI zijTp%3KkU9gj0L^C0{>?M<+<}R40v7XxI(a`_dfAhbWjU?>X_ahE6Ro5Q#&B{#U`8 tWN%~PpOfN`fJYddIZb_!j$0^Cp-%re+HW5Uok=*~8)&>8B*D2r{TCu+RJZ^D literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/firmware.elf b/TestSHA256/.pio/build/Teensy_SHA/firmware.elf new file mode 100644 index 0000000000000000000000000000000000000000..f94059cc7e6743363a4748d4caae78e826c18fad GIT binary patch literal 125524 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/firmware.hex b/TestSHA256/.pio/build/Teensy_SHA/firmware.hex new file mode 100644 index 0000000..a351707 --- /dev/null +++ b/TestSHA256/.pio/build/Teensy_SHA/firmware.hex @@ -0,0 +1,1331 @@ +:1000000000800020BD010000F5160000AD160000C4 +:10001000AD160000AD160000AD160000AD160000D4 +:10002000AD160000AD160000AD160000F51600007C +:10003000F5160000AD1600005530000059300000E4 +:10004000F5160000F5160000F5160000F516000084 +:10005000F5160000F5160000F5160000F516000074 +:10006000F5160000F5160000F5160000F516000064 +:10007000F5160000F5160000F5160000F516000054 +:10008000F5160000F5160000F5160000F516000044 +:10009000F5160000F5160000F5160000F516000034 +:1000A000F5160000F5160000F5160000F516000024 +:1000B000F5160000F5160000F5160000F516000014 +:1000C000F5160000F5160000F5160000F516000004 +:1000D000F5160000F5160000F5160000F5160000F4 +:1000E000F5160000F5160000F5160000F5160000E4 +:1000F000F5160000F5160000F5160000F5160000D4 +:10010000F5160000811F0000F5160000F51600002E +:10011000F5160000F5160000F5160000F5160000B3 +:10012000F5160000F5160000F5160000F5160000A3 +:10013000F5160000F5160000F5160000F516000093 +:10014000F5160000F5160000F5160000F516000083 +:10015000F5160000F5160000F5160000F516000073 +:10016000F516000075220000F5160000F5160000D7 +:10017000F5160000F5160000F5160000F516000053 +:10018000F5160000F5160000F5160000F516000043 +:10019000F5160000F5160000F5160000F516000033 +:1001A000F5160000F5160000F5160000F516000023 +:1001B000F5160000F5160000F5160000564B4CF23F +:1001C000205210B51A804DF628121A8000BF00BFC9 +:1001D00001F094FA514B4FF010621A60504A9A6045 +:1001E000504ADA60504A136813F4807304D14F49BF +:1001F0000B604FF4A85313604D4B1A78110703D5C9 +:100200001A7842F008021A704A4B4B492A221A7097 +:100210004A4A4B4B8B4204D252F8040F43F8040B6A +:10022000F8E7484B484900228B4202D243F8042B9E +:10023000FAE74649464A002352F8230041F82300D2 +:1002400001336F2BF8D1434B434A802103F8011B44 +:100250009342FBD1414B3D4A1A60414B8A221A70AE +:10026000A3F5805324225A70A0221A709A7992071B +:10027000FCD59A79D406FCD43A4A937903F00C035E +:10028000082B384BF9D105221A7143225A719A79F9 +:100290009006FCD5334A9179324B4906FBD5324A58 +:1002A0004FF0817111600521516020221A709A79F6 +:1002B00002F00C020C2AFAD12C4B2D4A1A602D4B5D +:1002C0002D4A1A6000225A60072243F8042C2B4A58 +:1002D000C3F80C2D62B601F041FB144B1B68DA0722 +:1002E00005D5274801F0CAFA264B274A1A60274B42 +:1002F0001B785B0609D5234C234B22689A4204D114 +:100300001F4801F0BBFA0023236001F0FDF902F061 +:1003100099FF01F0EFF8FEE70E2005403080044021 +:10032000823F04000100002B10D0034014D0034092 +:1003300002D0074000E007404C90FF1FD04900006A +:100340002087FF1F4C90FF1F9C96FF1F0082FF1FFE +:100350000000000000E400E05FE400E008ED00E0E1 +:1003600000500640004006404480044004800440A1 +:10037000C010050014E000E03F190100000020203B +:100380000954EA621CE00340A5C3945A00F00740F8 +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFFFFFFFFFFFFFFFFFDEF9FFFF23 +:1004100010B5054C237833B9044B13B10448AFF33E +:1004200000800123237010BD4C90FF1F00000000CE +:10043000CC490000084B10B51BB108490848AFF380 +:1004400000800848036803B910BD074B002BFBD0A0 +:10045000BDE81040184700BF000000005090FF1F8B +:10046000CC4900004C90FF1F0000000000B59DB07B +:10047000684600F013FA68464FF47C72044900F0B5 +:1004800039FA6846034900F057FA1DB05DF804FBDD +:100490009490FF1F8494FF1F08B501210D2001F0E7 +:1004A00001FA4FF4FA7001F009FA0D20002101F071 +:1004B000F9F94FF4FA70BDE8084001F0FFB900BF48 +:1004C00070B5002304220121564800F03BFD1D2198 +:1004D000554802F023FC554800F034FF4FF0FF323E +:1004E0000021504800F028FEFF2800F093800323ED +:1004F0001A4602214B4800F025FD12214C4802F01B +:100500000DFC4A4800F01EFF1A214A4802F006FC82 +:10051000464800F017FF434800F086FD05460028D6 +:10052000F9D1404800F09CFD0646002838D02B4603 +:10053000012203213B48404C00F004FD15213F48B7 +:1005400002F0ECFB2B460A223146384800F00EFF41 +:10055000364800F0F7FE3A4A3248B1B200F0A8FC43 +:10056000FFF784FF1421374802F0D8FB2F4800F032 +:10057000E9FE04F120050AE0002310222B4800F0D8 +:10058000F5FE0121304802F0C9FBA5422AD014F83B +:10059000011F0F29F0D8302002F044FC2178EBE74E +:1005A0000346022203211F4800F0CCFC0E212748FD +:1005B00002F0B4FB1D4800F0C5FE1D21244802F0E6 +:1005C000ADFB1A4800F0BEFE4FF47A7001F076F9E8 +:1005D000002304220121134800F0B4FCBDE8704060 +:1005E000FFF75ABF15211B481B4C02F097FB0F4821 +:1005F00000F0A8FE04F57C7514F8011F0B480023D9 +:10060000102200F0B3FE01210F4802F087FBA54243 +:10061000F2D1D2E70F21114802F080FB034800F02D +:1006200091FECAE76890FF1FB44200005087FF1F89 +:10063000D4420000E84200008394FF1F04430000FE +:100640009490FF1F1C430000344300003843000017 +:1006500058430000604300009390FF1F4843000090 +:1006600010B5054C204600F0D5F92046034A044950 +:10067000BDE8104002F0D4BD6890FF1F2087FF1F27 +:10068000290A0000F8B50D20012101F011F91B48DD +:100690001B4A04681B4D1C4F40F2EE2613783BB1F9 +:1006A0002B78DB0704D5036839685B1A0E2B06D854 +:1006B000036811781B1BE9B1B3F5FA6FEED94FF45B +:1006C000E131124800F086FD1049114800F0C8FBE6 +:1006D00009E0104802F022FB0F4800F033FE4FF40F +:1006E0007A7001F0EBF80A4800F050FB2421002852 +:1006F000EFD0F8BDB342D1D9E1E700BFA894FF1F06 +:100700001096FF1F2896FF1F9496FF1F2487FF1F38 +:100710006890FF1F784300005087FF1F2DE9F04FBE +:10072000CDB00DF12C0A0390013156461BAC087870 +:1007300011F8013C8A784D78000440EA03631343C2 +:1007400043EA052346F8043FA64201F10401EED135 +:1007500010200DF1640E14AF0CAE554684465EF8C1 +:10076000049F56F8043F57F8041F55F8040F4FEA4A +:10077000F9484FEAB34288EA794888EA992801445F +:1007800082EAF312414482EAD3030CF1010C0B44D8 +:10079000BCF1400F44F8043FE1D1039ADFF8F89030 +:1007A000136D05931E461346526D06921946104668 +:1007B0001A469B6D07931F46D36D126E08931C4615 +:1007C00015464B6E09928A6E0493C96E304B0A929D +:1007D0000B918646A346DDF8108001919446029362 +:1007E0000BE0CDF804C0C446A8461D4659F8043FA6 +:1007F0000293BB467746B64606464FEAF52205EA1F +:10080000080182EAB5122CEA050482EA75624C40BE +:100810005AF8041F019B144487EA0E0221444FEA50 +:10082000763002EA06040EEA070219445440029B9D +:10083000184A80EAB60080EAB650194420444A4576 +:1008400001EB0B030844CCD10899059A39440F46B3 +:1008500009991944049B2B4402441D460A9B1446E3 +:10086000069A4344184632440B9B1646079A634443 +:1008700072448E461946039B1C655E659A65DF656A +:10088000C3F860E05D669866D9664DB0BDE8F08F4C +:10089000982F8A429C440000A043000000220023BD +:1008A000F0B4C0E912230C4B0365A3F16263A3F516 +:1008B00011230A4F0A4E0B4D0B4C0C490264A3F650 +:1008C0004E130B4A47658665C565046641668266B8 +:1008D000C366F0BC704700BF67E6096A85AE67BBB8 +:1008E00072F36E3C3AF54FA57F520E518C68059B12 +:1008F000ABD9831FFAB1F8B504460D468E18002710 +:1009000001E0B54216D0236C15F8011BE154013308 +:10091000402B2364F5D121462046FFF7FFFED4E9A2 +:10092000122312F5007243F10003B542C4E9122309 +:100930002764E8D1F8BD7047F8B5036C372B05463E +:100940000C464ED84FF08002C25406D0C218002187 +:10095000373002F8011F8242FBD1D5E91201DB00DA +:10096000C01841F10001030A0A0C4FEA104E070EAD +:100970000E0A85F83E300B0EC5E9120185F83F00DE +:1009800085F83B1085F8392085F83DE085F83C7006 +:1009900085F83A6085F8383029462846FFF7BEFECC +:1009A0000322296DD300D9402170696DD94021718E +:1009B000A96DD9402172E96DD9402173296ED940C2 +:1009C0002174696ED9402175A96ED9402176E96EEE +:1009D000013A21FA03F32377531C04F10104E0D117 +:1009E000F8BD5A1C80213F2AC15407D8034400F1A6 +:1009F0003F01002203F8012F8B42FBD129462846F4 +:100A0000FFF78CFE38220021284602F06FFF2B6C86 +:100A1000A3E700BF002250210180426080F824201B +:100A200080F8252002857047704700BF2DE9F04F00 +:100A3000DFF8988085B0D8F800300293029C0191CD +:100A40009146002A40D0824600254FF0000B41F22B +:100A500088360027DAF8040003681B69984759466E +:100A600068B9D8F800300393039A0023121B63EB94 +:100A70000503964277EB030321DB8B46EAE7DAF8BE +:100A8000040003685B699847019B03F80B00D8F8E2 +:100A900000300393039A0023121B63EB0503964275 +:100AA00077EB030309F1FF390BF1010106DBB9F123 +:100AB000000FE2D1084605B0BDE8F08F8B465946DD +:100AC000084605B0BDE8F08F1146F3E7A894FF1F74 +:100AD00070B5044682B00E46002501220DF10701D3 +:100AE0002046FFF7A3FF012839D19DF80730AA2B34 +:100AF00029D0A52B29D0552B29D05A2BECD1022D4A +:100B0000EAD16FF05A02737032700F25B11C0122C6 +:100B10002046FFF78BFFF11C01222046FFF786FFDE +:100B2000311D02222046FFF781FFB11D022220461F +:100B3000FFF77CFF06F1080120460222FFF776FF4F +:100B4000284602B070BD0546C7E70225C5E7012D5E +:100B5000C2D16FF0550273703270F025D6E70125CF +:100B6000284602B070BD00BF70B4CA788B7808798F +:100B70004E798C79CD79134440EA0620FF3353FA3D +:100B800080F344EA052253FA82F303EB1023101298 +:100B900010FA83F080B25AB101F10803013A13FA56 +:100BA00082F3073111F8012F1044994280B2F9D134 +:100BB00070BC70472DE9F04782B00025F029074648 +:100BC00091469846ADF80650BDF828602BD006F146 +:100BD0000A05284602F05EFB0446C0B34AF25A53A7 +:100BE000ADB20380B2460023A4F80490E680A3705F +:100BF000E3708EB921463846FFF7B6FF02A90AF125 +:100C0000080321F8020D0222E01800F07BFC3D856C +:100C1000204602B0BDE8F0873246414604F10800A4 +:100C200000F070FCE6E71A2002F034FB044670B1D5 +:100C300003464AF6552223F8072B2946173003F8B6 +:100C4000011F8342FBD11A254FF0100ACBE7002089 +:100C5000DFE700BFF0B4CA788B784E7908798C79D9 +:100C6000CF790D7A134440EA0620FF334E7A44EAE6 +:100C7000072253FA80F345EA062453FA82F353FA23 +:100C800084F303EB102000EB1223201210FA83F000 +:100C900080B262B1023A002A01F10A0107DD0023A5 +:100CA000CC5C01339BB22044934280B2F8DBF0BCB1 +:100CB000704700BF2DE9F04F87B00DF10C098A464F +:100CC00049460646FFF704FF00B201283FD0F0284E +:100CD00030D0BDF8127007F10A0002F0DBFABB4613 +:100CE000054630B3A7F102087C1E99E807002B46A1 +:100CF00003C305F10A091A8049465A463046FFF7F0 +:100D000095FEA8442B199DF8144098F80A809B7A08 +:100D100086F8264014BB82B2974221D0422386F83F +:100D20002630FF24284602F0BDFA204607B0BDE871 +:100D3000F08FFEE71A2002F0ADFA054630B14FF011 +:100D4000100B5F460F244FF00E08CEE7FEE7462358 +:100D5000FF2086F8263007B0BDE8F08FFF24E1E7DA +:100D6000294630460193FFF775FF019B08EB0323EB +:100D70009BB2834204D0432386F82630FF24D1E778 +:100D80005A464946504600F0BDFBCBE730B583B02C +:100D9000002300930122F0210446FFF70BFF0546D4 +:100DA0006068228D036829465B689847284602F0F0 +:100DB00079FA04F108012046FFF77CFFB0FA80F0D1 +:100DC000400903B030BD00BF2DE9F04186B00023DB +:100DD0000C460093042207460846F021FFF7EAFE7E +:100DE00005466068228D036829465B689847284657 +:100DF00002F058FA04F108012046FFF75BFF20BB20 +:100E0000237A657A013303EB0525ADB28046284687 +:100E100002F040FA0646B8B100F805803146204697 +:100E2000FFF748FF314602A800F020FB304602F0F1 +:100E300039FA02A9384600F043FB02A800F0D6FABE +:100E4000384606B0BDE8F081FEE70449384600F0B8 +:100E50000DFB384606B0BDE8F08100BF304300000E +:100E600010B5044684B0416068462146FFF7ACFFE8 +:100E700002996846013900F02FFB0378342B13D018 +:100E800002996846013900F027FB0378332B04BF31 +:100E9000C823238064686846003418BF012400F02A +:100EA000A5FA204604B010BD50232380F2E700BF0E +:100EB000F0B585B004258DF80C1003AB0095F0213A +:100EC00000251746412204468DF80D508DF80E502E +:100ED0008DF80F50FFF76EFE05466068228D03689F +:100EE00029465B68984704F10806284602F0DAF9BB +:100EF00031462046FFF7DEFE10B1FF2005B0F0BD01 +:100F00000222054603AB0092F021422220468DF8D2 +:100F10000C508DF80D50FFF74DFE05466068228D90 +:100F2000036829465B689847284602F0BBF93146BA +:100F30002046FFF7BFFE39462046FFF7BBFE05B04F +:100F4000F0BD00BF30B50446008885B000255028AC +:100F5000039544D0012933D002293CD003294DD038 +:100F6000052904BF03238DF80C30012A2DD0022A55 +:100F70003ED0032A46D0042A4AD0052A4ED0062A5B +:100F80000CBF832387238DF80D308DF80E3004239A +:100F90000093242203ABF0212046FFF70BFE054609 +:100FA0006068228D036829465B689847284602F0EE +:100FB00079F904F108012046FFF77CFE05B030BD49 +:100FC0000223012A8DF80C30D1D184238DF80D3005 +:100FD0008DF80E30DBE704238DF80C30C5E78DF873 +:100FE0000C108DF80D208DF80E208DF80F30CEE707 +:100FF00082238DF80D308DF80E30C8E701238DF86F +:101000000C30B2E786238DF80D308DF80E30BEE738 +:1010100081238DF80D308DF80E30B8E785238DF8DB +:101020000D308DF80E30B2E730B583B00023009359 +:101030002122F0210446FFF7BDFD05466068228DA0 +:10104000036829465B689847284602F02BF904F1AB +:1010500008012046FFF72EFE00B9207A03B030BD0C +:10106000F0B590F82550012D85B002D0002005B0D4 +:10107000F0BD0024062280F82440009202AB0788CD +:10108000ADF80C406322F021064602948DF80C70F6 +:101090008DF80A50FFF78EFD05467068328D0368A3 +:1010A00029465B689847284602F0FCF806F10801DB +:1010B0003046FFF7FFFD08B9307AD8E72046D6E77B +:1010C00030B583B0002300932022F0210446FFF7BF +:1010D00071FD05466068228D036829465B68984764 +:1010E000284602F0DFF804F10801204603B0BDE80D +:1010F0003040FFF7DFBD00BF30B585B004AB002244 +:10110000ADF80C20022203F8041D0092F0216022A9 +:101110000446FFF74FFD05466068228D03682946A7 +:101120005B689847284602F0BDF804F108012046A4 +:10113000FFF7C0FD05B030BD2DE9F843531C28D0A2 +:1011400001EB81030E46054690464FEA430900270E +:1011500000E07EB92846FFF767FF04460028F8D074 +:101160002846FFF7ADFFF0B1002385F82530FF20BA +:10117000BDE8F88301370A20BFB200F09FFB4F455E +:10118000E8DD232385F8254085F82630FF20BDE8DB +:10119000F88390F82430022BD2D9452380F82630EA +:1011A000FF20BDE8F883B8F1FF3F14BF5FFA88F174 +:1011B00095F824102846FFF79FFF0028D4D195F812 +:1011C00024300122134485F8243085F82520BDE819 +:1011D000F88300BF084B4A08134410B50446B3FB1C +:1011E000F1F000F099FC054B1B7803B110BD2046CF +:1011F000BDE8104001F038BF00A24A044D87FF1F30 +:1012000008B5084600F0ECFD012008BD08B5084609 +:1012100000F0E6FD012008BD38B508460D4602F095 +:101220002FFE04460146284600F0E4FD204638BD66 +:1012300010B508461446114600F0DCFD204610BDEE +:101240000846114600F04EBF0846114600F030BF78 +:1012500000F084BE08B5084600F0A2FD003018BFBB +:10126000012008BD08B5084600F078FD003018BF21 +:10127000012008BD0846114600F046BD084600F0B2 +:101280006BBD00BF084600F023BD00BF00F0E6BC08 +:1012900010B5064B144603EB5100B0FBF1F000F023 +:1012A0003BFC2046BDE8104000F086BC00A24A048A +:1012B00000F02EBE00F0ECBD00F0D6BD00F0B0BDD9 +:1012C00000F0BABD0368064A1B68934205D110B509 +:1012D000C8B200F085FD012010BDC9B2184700BF9B +:1012E0000D1200000368064A1B68934205D110B531 +:1012F000C8B200F075FD012010BDC9B2184700BF8B +:101300000D1200000368064A1B68934205D110B510 +:10131000C8B200F065FD012010BDC9B2184700BF7A +:101320000D1200000368064A1B68934205D110B5F0 +:10133000C8B200F055FD012010BDC9B2184700BF6A +:101340000D12000030B5044683B002252A4601A8DC +:10135000054900F0D7F823682A4601A95B682046B2 +:10136000984703B030BD00BF18480000F0B50746ED +:101370008BB0002A33D0012A08BF0A2251B321249E +:1013800000E0F4B2B1FBF2F502FB1511C8B2092975 +:1013900000F1300198BFC8B20AA988BF3730214494 +:1013A00088BFC0B201F8240C661E2946002DE8D182 +:1013B00033B1013CE4B20AAB23442D2203F8242CC0 +:1013C0003B6801AA11195B683846C4F122029847AC +:1013D0000BB0F0BD30228DF825202124E8E703680A +:1013E000C9B21B6898470BB0F0BD00BF10B50446EA +:1013F000006801F057FF204610BD00BF38B54368B4 +:101400008B4201D3012038BD0D46044601310068EE +:1014100002F0BEFA0028F6D0A36884E82100002B71 +:10142000F0D10370EEE700BFF8B50446154632B9B7 +:10143000036803B11A700023A3602046F8BD0E466E +:101440001146FFF7DBFF074648B9206810B101F0ED +:1014500029FF276000236360A3602046F8BDA560D4 +:101460003146206802F09EFCE7E700BF38B5002354 +:101470000446036043608360037341B108460D4630 +:1014800002F0FEFC294602462046FFF7CDFF20462B +:1014900038BD00BF814211D038B5054600680C4602 +:1014A00008B101F0FFFE23686168A2682B60002389 +:1014B0006960AA6023606360A36038BD704700BFA5 +:1014C00010B5002304460360436083600373FFF795 +:1014D000E1FF204610BD00BF83688B4203D900683E +:1014E00008B108447047024900230B700846704752 +:1014F000A494FF1F08B5FFF7C5F8FEF7E1FF01F060 +:1015000011FDFAE701B441EA000313F003036FD1C0 +:10151000403A41D351F8043B40F8043B51F8043BB6 +:1015200040F8043B51F8043B40F8043B51F8043BBD +:1015300040F8043B51F8043B40F8043B51F8043BAD +:1015400040F8043B51F8043B40F8043B51F8043B9D +:1015500040F8043B51F8043B40F8043B51F8043B8D +:1015600040F8043B51F8043B40F8043B51F8043B7D +:1015700040F8043B51F8043B40F8043B51F8043B6D +:1015800040F8043B51F8043B40F8043B51F8043B5D +:1015900040F8043B403ABDD2303211D351F8043BFD +:1015A00040F8043B51F8043B40F8043B51F8043B3D +:1015B00040F8043B51F8043B40F8043B103AEDD2AC +:1015C0000C3205D351F8043B40F8043B043AF9D2FD +:1015D00004320AD0D2071CBF11F8013B00F8013BCE +:1015E00003D30B7803704B78437001BC704700BF86 +:1015F0000C2A4AD310F0030311D0C3F10403D21A0A +:10160000DB071CBF11F8013B00F8013B07D311F8C1 +:10161000013B00F8013B11F8013B00F8013B11F0E0 +:1016200003033FF475AF30B4043AC91AC3F1040C94 +:1016300051F8044B022B19D0032B0BD0240A51F87C +:10164000043B1D0644EA050440F8044B1C46043ADA +:10165000F4D216E0240E51F8043B1D0244EA0504BE +:1016600040F8044B1C46043AF4D20AE0240C51F82A +:10167000043B1D0444EA050440F8044B1C46043AAC +:10168000F4D20432B1EB0C0130BC043AA0D3013ADD +:1016900011F8013B00F8013BF9D20B7803704B784D +:1016A00043708B78837001BC704700BF08B5104C45 +:1016B00008E0236859050DD423681A050FD4236860 +:1016C000DB0411D423685803F3D500F0D3FD23685D +:1016D0005905F1D500F00EF823681A05EFD500F092 +:1016E00009F82368DB04EDD500F04AFCEAE700BF07 +:1016F0003480044008B5FFF7D9FF00BF014B10222A +:101700001A80704700200540704700BF094908B59E +:101710000B6830B16A461844A2F58052904202D25A +:101720000860184608BD01F087FD0C2303604FF0E8 +:10173000FF3008BD3887FF1FEFF3138070B9EFF358 +:1017400010836BB9EFF305825AB94FF48070EFF351 +:1017500011832BB1984228BF184670474FF0FF30D5 +:1017600070470F2A01D81846F1E7014BD05CEEE72D +:10177000F0E300E0F0B44D1E2E46002400E00134FA +:10178000B0FBF2F302FB1300092800F130078ABF17 +:101790003730F8B2C0B206F8010F1846002BEED170 +:1017A0000A1953704CB1107815F8016F2870013385 +:1017B000E01A834202F80169F5DB0846F0BC704785 +:1017C00010B40F4B53F8302092F880422CB1012313 +:1017D00069B182F8803010BC704703EBC0035B68CE +:1017E0001A6841B922F002021A6010BC704782F8F0 +:1017F000003110BC704742F003021A6010BC704701 +:101800001C4800001C4A02EBC00301295B6811D090 +:1018100004291BD052F83000002280F8802229B120 +:10182000022920D0032922D01A6070474FF4807219 +:101830001A60704752F830004FF4A27280F880129C +:101840001A601A6822F020021A60704752F83010AD +:101850004FF4A272012081F880021A601A6842F0E7 +:1018600020021A60704740F203121A6070474FF46A +:1018700081721A60704700BF1C48000030B4054BED +:10188000054D064C002210211A602A602060196064 +:1018900030BC704714D0034004D0034000D0034054 +:1018A000704700BF212801D8FFF78ABF704700BFEB +:1018B000212801D8FFF7A6BF704700BF2DE9F843E4 +:1018C000054672B6214F224B224A1B683C681268BB +:1018D00062B6520102D5322B88BF0134A5B3C3F5DD +:1018E0008C331D4EDFF86890DFF8688003F23F13F9 +:1018F0004FF47A72A6FB031302FB04F404EB1314F7 +:1019000072B6D9F800103A68D8F800E062B6C1F5AE +:101910008C3303F23F13A6FB03031EF0806FC4EB6E +:1019200013134FF47A7002D0322988BF013200FBC2 +:101930000233B3F57A7F04D3013D05D004F57A7400 +:10194000DEE701F0EFFADBE7BDE8F883A894FF1FBC +:1019500018E000E004ED00E0398EE338F8B52E4BD6 +:101960002E49DFF8D4E0DFF8D4C02D4E2D4D2E4C9B +:101970002E4A2F4F4FF4000018604FF0807018600F +:101980004FF0007018604FF0806018604FF00060FA +:10199000186000200860282348F6FF71CCF800107A +:1019A000CEF80030336013602B6023603B60B3627D +:1019B0009362092245F8242CC4F8D80F05F57F65F9 +:1019C000C7F8D41F07F5FF2707F5FA67C6F8F83FF1 +:1019D0002B6006F5FF26C4F8D42F05F5FD2504F588 +:1019E000FF24386006F2F4761248316005F5FF6591 +:1019F00004F5FD642B602360026001F05DFBFFF7DE +:101A00004FFF1420FFF75AFF01F06EF84FF48C706F +:101A1000BDE8F840FFF752BF08E100E00480034052 +:101A200014800340248003402C8003401C8003402A +:101A30003480034000800B400C800340088003404A +:101A40002DE9F84F2C4B1B6807460BB101221A7089 +:101A5000DFF8BC90DFF8BC8099F80040D8F800307F +:101A6000264D274E01349C422ABF4FF0000A5FFAF0 +:101A700084FA5446AB462B78A3421CD1FFF75CFE98 +:101A800040282BDC33791B06F5D59BF80030D8F8BD +:101A90000010DBB25A1C8A4225D2272A29D91949BB +:101AA000273B0968CB5CD1B2DBB2DBB2F3712970A2 +:101AB0002B78A342E2D0272C8ABF124B124B1B6813 +:101AC000124988BF283CFFB21F550D4B0120AC22A4 +:101AD000087089F800A0DA70BDE8F88FFF28CADD29 +:101AE00001F020FAC7E700210A46074B9B5CDBB2F6 +:101AF000DBE7D1B2F9E700BF2895FF1F2195FF1F53 +:101B000000C00640DC94FF1FB494FF1F2095FF1F08 +:101B10002C95FF1F4887FF1F1C4BDFF894C01A68E5 +:101B20001B49F0B542F480521A4D1A60DFF884E088 +:101B3000194F1A4E1A4C00238CF800304FF4517292 +:101B40002B701F2840F213358EF800303B70337035 +:101B500025600A6012D819460124124A124D1170EC +:101B60001248547000212C27402693724FF4003401 +:101B700091701174D7702E700460F0BDC0F34431C1 +:101B8000C0F3471400F01F03E7E700BF34800440B0 +:101B90000CC00440B194FF1F2195FF1F2095FF1F2B +:101BA00008C0044000C0064031E400E004E100E069 +:101BB000B094FF1F2C95FF1F234B23499B7803F004 +:101BC000EC0200F003031343420700F00F0248BF8A +:101BD00043F01003042A8B702ED01B4B1A4A5B79FA +:101BE000C10603F0EF0348BF43F01003537193792C +:101BF000820603F0EF03144A48BF43F0100310F4C9 +:101C00000070937105D1114B114A1968914218D097 +:101C1000704730B491780F4D0F4B0C480C4C41F08D +:101C2000A00191702A78046003EBC20340F24732AE +:101C30005B6830BC1A6070478B7943F040038B714E +:101C4000CBE71860704700BF00C006402895FF1F13 +:101C5000D400D8424C87FF1F1C480000F8B5134B36 +:101C60001B68DB041FD5124C237823B101F05AF90D +:101C70002378002BFAD10F4B0F4A104D104F114E05 +:101C8000114C12484FF4003119600023D37040F218 +:101C900003113960316029681579D2792370037096 +:101CA00011B101230B70F8BDF8BD00BF34800440B2 +:101CB0002095FF1F84E100E000C00640AC94FF1FA8 +:101CC00008C004400CC00440B094FF1FB194FF1F33 +:101CD0000A4A38B50546137803F0FF04002BFAD101 +:101CE00001212846FFF7E4FD21462846FFF7DAFDEB +:101CF000034A044B52F835201A6038BD2095FF1F67 +:101D00001C4800002895FF1F09B140F080000F4AD1 +:101D10001378984219D010B40D4C2468E40412D5FD +:101D200003F07F03082B02D10A4B00241C6000291A +:101D300000F07F0314BF60214421082B03D1054B21 +:101D400041F440711960107010BC70474C87FF1F40 +:101D5000348004400CC00440704700BF0D4B1B682A +:101D600013F4805305D0212805D90B4B00201860AF +:101D7000704718467047094B10B5074C53F8303080 +:101D800023600121FFF794FD236800221A700120CF +:101D900010BD00BF34800440AC94FF1F1C480000FD +:101DA0000C4B1B6813F4805306D00E2806D00A4A49 +:101DB000537B03F0FE03537300207047074B064A22 +:101DC00040F202311960537B43F001035373012049 +:101DD000704700BF3480044000C0064004C0044087 +:101DE000034B1B68DB0401D5FFF72ABE704700BF19 +:101DF0003480044070B5094E04464518AC4204F1E5 +:101E000001040AD03368DB04F8D514F8010CFFF79D +:101E100017FEAC4204F10104F4D170BD34800440DB +:101E200010B5044C237823B101F07CF82378002B03 +:101E3000FAD110BD2095FF1F084B094A1B78107876 +:101E4000DBB2C0B2834202D20138C01A7047054AE1 +:101E50001268013A1044C01A704700BF2C95FF1F4A +:101E60002195FF1F4887FF1F064A074B10781B78F4 +:101E7000C0B2DBB2984202D2044A12681044C01ABF +:101E8000704700BFB094FF1FB194FF1F3C87FF1F36 +:101E900070B4184B184D1B782A78D9B2D2B291423F +:101EA00022D0164B1C68531CA34214D300221346A5 +:101EB0001348C05CC0B2134E2A7032684AB19942CE +:101EC00038BF0919CB1A104909688B4201D8002381 +:101ED000137070BC70473F2B09D90C483F3A00681B +:101EE000805CDAB2C0B2E6E74FF0FF30F1E7DAB279 +:101EF000DEE700BFB094FF1FB194FF1F3C87FF1FB8 +:101F0000E094FF1FAC94FF1F4087FF1F2495FF1F25 +:101F10000D4A0E4B12781B78DBB29A4211D00C4A54 +:101F200011685A1C8A4204D300220A4B985CC0B242 +:101F300070473F2AF9D9084A3F3B1268D05CC0B2CB +:101F400070474FF0FF307047B094FF1FB194FF1FF0 +:101F50003C87FF1FE094FF1F2495FF1F054B064A97 +:101F60001B7806491268DBB20B700AB100231370AC +:101F7000704700BFB194FF1FAC94FF1FB094FF1FC8 +:101F800030B43C4B1A79940626D53B4DDC793B4B5B +:101F900029781A683A4BC9B2481C9042E4B232D34D +:101FA000197801F0FF03002957D00023184635495E +:101FB0000C542B703449096871B1344B1B78DBB277 +:101FC000834284BFD21A1318314A126898BFC31AC9 +:101FD000934224BF01230B70264AD378DBB2180644 +:101FE0001DD45A060DD5234B1B795B0609D5294B09 +:101FF00029491B6800220A7003B11A701D4B2C225C +:10200000DA7030BC70471B789842D3D03F282FD964 +:10201000224B3F391B685C54C3B22B70CAE711795D +:102020000906DED51E49194C08782178C9B28842C4 +:102030001BD01C4A1268481C904210D2272898BF17 +:10204000C1B20ED9184A27391268525CC1B2D2B255 +:102050000848D2B2C2712170C3E71846AAE700212E +:102060000846124A125CD2B2F2E76C21D170B8E78E +:10207000C3B29CE700C00640B094FF1F3C87FF1F1F +:10208000B194FF1FE094FF1FAC94FF1F2195FF1F29 +:102090004487FF1F2895FF1F2095FF1F2495FF1FD2 +:1020A0002C95FF1F4887FF1FDC94FF1FB494FF1F70 +:1020B000084B1860084B50B101F140021A60074A02 +:1020C000074B01F11A002831106019607047402257 +:1020D0001A60F4E72495FF1F3C87FF1F4087FF1F0E +:1020E0004487FF1F044B1860044B10B1283119605E +:1020F000704728221A607047DC94FF1F4887FF1F33 +:10210000704700BF431E032B14D872B60A4951F81A +:10211000230068B170B4094C058834F81320466870 +:1021200041F82360521B24F8132062B670BC70473C +:1021300062B67047002070478895FF1F8496FF1F86 +:10214000013803280BD872B6074B53F8203043B13F +:1021500000205B680130002BFBD162B67047002085 +:1021600070471846F9E700BFDC95FF1FF0B472B660 +:102170001A491B4E012311F8014B194F9A002407ED +:1021800042F0010505D556F8324064B156F83520C5 +:10219000BAB10133052BEED162B6124B00221A7090 +:1021A000F0BC00F02FBD0F4C0F4D217807EB43130F +:1021B000083001395860217047F8325062B6F0BCDF +:1021C0007047084A0949137807EBC5040830013BFA +:1021D0006060137047F8351062B6F0E754490000AC +:1021E0000080FF1F0596FF1F88004000C8004000C8 +:1021F000431E032B1DD81B4A400140F0100030B491 +:10220000104472B6184CE25C032A1BD8DFE802F0D7 +:102210000212151703220D88E25410F0080F14BFA4 +:10222000C823882343EA054308314160036062B64E +:1022300030BC704708300222EDE70522EBE708309A +:102240000422E8E7094A52F8230038B1084A52F854 +:102250002300416042F8231062B6E9E742F82310F8 +:10226000034AF7E70080FF1F1496FF1FDC95FF1F4E +:10227000EC95FF1F2DE9F04FDFF814B3DFF814A33E +:1022800087B044E0AD4F4FEA930807EBC809013E21 +:10229000D9F8042003F00803F6B2A2F1080003F015 +:1022A000FF04002B40F0038157F838301B0C99B223 +:1022B00022F8081C002B00F0F180A14B22F8064CFC +:1022C00042F8044C53F82620002A00F06C819D4D02 +:1022D00055F8263058609C4C45F8260034F81630E6 +:1022E000194424F8161000F06DFC002800F0548109 +:1022F000964A974B19F0080F00F1080018BF1346D3 +:10230000C9F8040047F8383008238BF800309BF8F0 +:102310000040E4B260071BD58E4B1B78ABB18E49F1 +:102320000A7802F0FF032AB1013BDBB20B70002BED +:1023300000F0B58389490A7802F0FF032AB1013B16 +:10234000DBB20B70002B00F0F68004238BF800301A +:1023500004F0080303F0FF02002B00F0D5809AF888 +:102360000030DBB21E098DD19C08744F57F8342021 +:1023700007EBC401C2F38302013A49680C2A7ED8F4 +:10238000DFE802F081817D7D7D7D7D7D427D7D7DEB +:1023900007000868724B734D01936C4B4A68724E8C +:1023A00047F8343081B240F281646D4B6A60286036 +:1023B00000220120A1423A611A60BA61307000F235 +:1023C000F680B1F5D06F80F0E882B1F5817F00F042 +:1023D000D38200F2D881802900F04D81822940F01B +:1023E0009282A988614B01F07F01042900F28C825E +:1023F0005F4C89000B44227062701A78930740F199 +:102400003883207002203AE1554B01931A6862B379 +:10241000584B5949544E18880C7896F800E04028DB +:10242000054684F0010C28BF402544F00204BEF1AB +:10243000000F81F800C0A0EB050007EBC40C0CBF37 +:102440008821C82180B28EF0010E41EA0541CCF806 +:102450000420188086F800E02A4447F8341010B9A8 +:10246000402D18BF0022019B1A603E4B1A88B2F51E +:10247000A06F04D100219A785970404B1A70404ADD +:102480000123137040E7374A158842F22100854244 +:1024900000F052812D4A47F83420F0E72B4A2C4BAC +:1024A00019F0080F18BF134647F838302CE700F032 +:1024B000A9FB344A344952F82630002B00F02D8114 +:1024C00058688C5D42F8260003F10802C9F8042020 +:1024D000032C05D8DFE804F0120F150204228A55F8 +:1024E0001A8819F0080F0CBF8823C82343EA024357 +:1024F00047F8383008E702228A55F1E703228A5567 +:10250000EEE705228A55EBE7E00700F17881210626 +:1025100000F1A281A20706D51C4A1D4913780220AA +:10252000DBB213700870E30602D5194B10221A7043 +:1025300007B0BDE8F08F00F0D1FC06E70080FF1F78 +:102540008895FF1F3495FF1F8496FF1FC800400029 +:10255000880040001096FF1F9995FF1F1896FF1FD7 +:102560003095FF1FFC95FF1F9895FF1FC020074067 +:102570000896FF1F4495FF1F0496FF1F98200740F1 +:1025800094200740DC95FF1F1496FF1F882007400A +:102590008020074090200740B74A47F8380013785A +:1025A00001331370B0E643F82600B44D93E642F2CF +:1025B0002104A14200F0AD8000F20E81B1F5086F58 +:1025C00000F05481B1F5106F40F09D81AC4AA978BC +:1025D0001170AC4D042402E00134142C0CD057F8D7 +:1025E00034301906F8D505EBC403013458680838AF +:1025F00000F008FB142CF2D1A349A44BA44A029189 +:10260000A449A54C9D4D039405964FF000098846BA +:102610001C4616460495206828B1456800F0F2FA79 +:102620002846002DF9D100232360049B30681A4608 +:10263000002342F8293028B1456800F0E3FA284623 +:10264000002DF9D100223260029A98F8003011462C +:10265000002241F8042B039A0291023B4FF0000143 +:1026600022F81910032B00F2B481DFE813F0E20125 +:10267000AE01E201AE01894C022022706270EA884C +:10268000824280F00D8286490D78402A45F0020E84 +:10269000944607EBCE0028BF4FF0400C04EB0C0330 +:1026A00044600293CCEB02004FEA0C484FF0010962 +:1026B0000022C82444EA080385F0010447F83E30AC +:1026C00032700C70DFF8BCE1764BDFF8D481002863 +:1026D00040F02081BCF1400F1BD144F0020407EB15 +:1026E000C403029FDFF89CE15F60002A40F027816D +:1026F000020442F0880286F800900D7007444EF8FC +:1027000034203B46402804D10020674A01991080BC +:102710000B60664A01231370B1E68B5D032B00F258 +:10272000248101A252F823F00923000009230000AC +:102730004D28000053280000928862B95C4ACD1DE4 +:1027400011F8013B02F8013F8D42F9D1594A126854 +:10275000862A00F0C9805249524E0878327840F0FB +:10276000020580F00100087007EBC501002A4FF058 +:102770000000486082F001020CBF8821C82147F8A0 +:102780003510327086E640F20232914240F0B0805D +:10279000A98801F07F01042900F2B5806A88002A27 +:1027A00040F0B180444C89000C448146217841F0CE +:1027B0000201217000200290804684460446384978 +:1027C0000D7845F0020E07EBCE03B9F1000F5C6007 +:1027D0000CBF8824C8246DE742F22124A14240F0B6 +:1027E0008E80A988002940F04281344B344A354C10 +:1027F0001B68AD78136081460A462570DAE72B49DD +:10280000204B3148264EDFF8B0C0304DDFF8D4E021 +:102810002F4F02240C702F4C18605C6098602E487B +:10282000D8601A619A610D2332702C4C8CF80030FC +:102830002B4EFF232B7001209F258EF800303A701D +:1028400033702570087007B0BDE8F08F00238B55FA +:102850005AE501238B5557E51749224B80220D205D +:1028600008701A70A2077FF55EAE55E6044A0B4C5D +:102870001278227003E700BF0596FF1F3495FF1FF3 +:102880001096FF1F0080FF1FEC95FF1F8895FF1F0C +:10289000DC95FF1F1496FF1F8496FF1F0896FF1FED +:1028A0000496FF1F9895FF1F4495FF1F9420074033 +:1028B0008B96FF1F8C96FF1FC0200740A894FF1F18 +:1028C0009496FF1F2896FF1F88004000882007402D +:1028D000982007404895FF1F9C95FF1F84200740C4 +:1028E0008C20074080200740754A0F21117032E785 +:1028F000B1F5A06F07D100224FF001095AE742F26B +:1029000021329142F7D06F4B0F221A706E4A012389 +:102910001370B4E540287FF6E0AE44F002040EEBFD +:10292000C401029E4E60AAB183F80090674A88F8FD +:1029300000503346403840334EF83420E5E6029BE1 +:1029400086F80090020442F0C8020D7003444EF86D +:102950003420D7E683F80090029B5D4A88F8005047 +:10296000403840334EF83420CFE619F0080F0CBF42 +:10297000022303238B55C7E4A98801F07F010429B2 +:10298000C1D86A88002ABED14E4C89000C448146C9 +:10299000217821F0020121700CE74E4A5468002C86 +:1029A000B1D06888B5F804E003E00C325468002C1C +:1029B000A9D013888342F8D153887345F5D1000A12 +:1029C00003280CBF2078108959E64FF0010388F8DE +:1029D000003009F10109B9F1040F04F1040406F112 +:1029E000040608F101087FF416AE3B4B059E3B4DF3 +:1029F000DFF8F080002018704FF0010918F8013B53 +:102A000005F8043B1A0719D44FEA890444F002027E +:102A100044F00304002347F8323047F83430304B99 +:102A20009D4209F10109E9D196F8009089F001026F +:102A3000C0E64FF0000388F80030CAE700F0C2F8A3 +:102A400018B307EB49134FEA890408305860204B4C +:102A500047F8343000F0B6F868B144F0010307EBF2 +:102A6000C30208305060194A47F83320CEE7814648 +:102A7000A0E6022003E6184B44F001021B7847F859 +:102A80003200154A01331370C0E7134B124A1B780A +:102A90004FEA8904013347F834001370DAE700BEC7 +:102AA0004028844628BF4FF0400C04EB0C03CCEBCD +:102AB00000004FEA0C48029300224FF001097EE625 +:102AC0009995FF1FC020074094200740C800400090 +:102AD00088004000584900000596FF1FC4200740A9 +:102AE000D4200740544900002DE9F04100F056FB86 +:102AF00000231F491A4601EBC30041F8332001337C +:102B0000142B42604FF000041948F4D1194A1A4FAF +:102B100013681A491A4D1B4EDFF874C0DFF874E0D1 +:102B2000DFF8748043F480231360C0F307233B7005 +:102B3000C0F307430B70000EFF2302F52832287004 +:102B4000D4328CF80030104D8EF800300F483370BE +:102B5000012388F80030702681F850404FF400744B +:102B6000102107F8183C2E7004601170BDE8F08148 +:102B70000080FF1F348004409C200740B0200740A5 +:102B8000B42007401020074049E400E008E100E0DD +:102B900080200740882007409420074000F0A2B81A +:102BA00000F07AB800F054B800F08EB800F06AB9BE +:102BB00000F044B90846114600F0B0B8084600F0ED +:102BC00031B900BF72B60D480268B2FA82F30B2B1E +:102BD00010DC4FF00041D94022EA0102026062B6E7 +:102BE000074803EBC303DB00C2180021C1501046A5 +:102BF0005160704762B60020704700BF6087FF1FBA +:102C0000BC83FF1F0D4B0E4AC31AA2FB03231B09F3 +:102C10000B2B0CD80B4A127852B972B60A484FF0F7 +:102C20000041026821FA03F31A43026062B670475A +:102C3000064A1278002AF0D0FFF798BABC83FF1F2B +:102C4000398EE3380596FF1F6087FF1F1096FF1F20 +:102C500038B50F4D286878B143880288C118013310 +:102C600093420C7A02D24380204638BDFFF7CAFF58 +:102C7000002320462B6038BD064B1B782BB1032068 +:102C8000FFF740FA28600028E6D14FF0FF3038BD4A +:102C90002496FF1F1096FF1F10B5094C206818B12D +:102CA00043881844007A10BD064B1B782BB10320D3 +:102CB000FFF728FA20600028F2D14FF0FF3010BD56 +:102CC0002496FF1F1096FF1F044B054A1B6890882F +:102CD0001BB11A885B88D31A184470472496FF1FCB +:102CE0008496FF1F0B4B1B789BB110B50A4C2068D4 +:102CF00048B1FFF787FF002303202360FFF702FAA4 +:102D000030B1FFF77FFF0320FFF7FCF90028F8D16F +:102D100010BD70471096FF1F2496FF1F2DE9F04F3E +:102D2000DFF8F89083B0012289F80020019169B39F +:102D3000DFF8EC80364F019E8346D8F80000B0B330 +:102D4000344D4488C4F14001B14228BF314604EB00 +:102D5000010E00221FFA8EFE2A70761AA0F802E0F9 +:102D600000F1080251B1013C224459441BF8014BC7 +:102D700002F8014F8B45F9D1B0F802E0BEF13F0FE8 +:102D80000BD8254A05211170002ED6D101980023B9 +:102D900089F8003003B0BDE8F08F40220280014680 +:102DA0000420FFF725FA0022C8F80020E9E73A7866 +:102DB0002AB3184D48F601444FF0010A07E0013CE0 +:102DC00016D02A78A2B900F0ADF83A78BAB104204A +:102DD000FFF7B6F90728F2D889F800A0FFF7F2FE4E +:102DE000C8F800000028ACD10C4B013C1870E8D1A9 +:102DF00001234FF0FF302B7003B0BDE8F08F0023AC +:102E00004FF0FF3089F8003003B0BDE8F08F00BF0D +:102E10001096FF1F2096FF1F1896FF1F1996FF1F81 +:102E20001C96FF1F00B583B002AB012103F8010D12 +:102E30001846FFF773FF03B05DF804FB38B50E4D7D +:102E40000E4C28680123237028B14088002323708A +:102E5000C0F1400038BD0A4B1B7813B90020207028 +:102E600038BD0420FFF76CF90728F7D8FFF7AAFE52 +:102E700028600028E9D1F1E71C96FF1F1996FF1F73 +:102E80001096FF1FF8B5114B1B788BB1104E114DEA +:102E9000346801272F7064B10F4A638800271770C8 +:102EA000214623800420FFF7A3F9376000232B700D +:102EB000F8BDFFF787FE084B28B1014604201C70BF +:102EC000FFF796F9F2E71F70F0E700BF1096FF1FBB +:102ED0001C96FF1F1996FF1F1896FF1F38B50E4B43 +:102EE0001B7873B90D4C216861B103F0FF054B8865 +:102EF0000B800420FFF77CF9256038BD084B0122C8 +:102F00001A7038BDFFF75EFE0028F7D00146BDE815 +:102F100038400420FFF76CB91996FF1F1C96FF1F5D +:102F20001896FF1F2DE9F843314E337893B1314F96 +:102F30003A787AB90122D9073A7036D49A0719D467 +:102F400000225B073A7005D52B4B1A6812B1EFF3DC +:102F500005820AB1BDE8F883EFF3108172B61868F4 +:102F600018B1264C2278002A2ED00029F2D162B660 +:102F7000BDE8F883DFF8908098F80020002ADFD0C1 +:102F8000DFF88890002405E0013498F80030E4B2BE +:102F9000A34212D959F824502B6828461B69984738 +:102FA0000028F1D02B699847EEE7FFF78DFEC8B9EE +:102FB000134B1B781BB93378C0E73378C0E73378FD +:102FC00003F0FE033370B9E745691D6001232370E8 +:102FD0005DB1AA6101B962B600254577836898475B +:102FE0002570B7E700F0D8F8E2E7064B1D60F1E77F +:102FF0006487FF1F2996FF1F3896FF1F3C96FF1F0F +:103000006787FF1F3496FF1F4C96FF1F4096FF1FD8 +:1030100070B5EFF3108272B60C4C206880B10C4E84 +:1030200000254369236073B19D6102B962B645779B +:1030300083689847EFF3108272B620680028F0D1B9 +:1030400002B962B670BD3360EFE700BF2C96FF1F78 +:103050003096FF1FFFF7DCBF024A1368013313608D +:10306000704700BFA894FF1F70B4104E104D347805 +:10307000CCB12B68984214D02A46002303E052F8C2 +:10308000041F81420DD00133DBB2A342F7D15A1C99 +:10309000D2B2084945F823000B78327043F002039E +:1030A0000B7070BC704723460122F2E74C96FF1F5D +:1030B0004096FF1F6487FF1F30B42948294A2A4BD6 +:1030C0002A4D6024E121047011701B78284C082BD4 +:1030D00030D00A2B2748284937D00C2B0CBF15229B +:1030E0003D2212232A60236002600B60234B244997 +:1030F0001B78244ABBB101230B601360224B234988 +:103100001B78234A012B26D9042B0FD9082B1ED953 +:10311000102B94BF862387230B6013601D4B012265 +:103120001A7030BC70470B601360E7E784230B60B4 +:103130001360F3E700F58E200F49083001221323B6 +:103140002A60236002600B60D0E71922F7E785232D +:103150000B601360E2E780230B601360DEE700BFC3 +:1031600000400740014007406587FF1F08B003404B +:103170000CB0034008B00B400CB00B404E96FF1F44 +:1031800020B0034020B00B406687FF1F24B00340EF +:1031900024B00B404D96FF1F704700BF70B584B040 +:1031A00072B6194B194D1A48702241260F248021FE +:1031B0001A702E701A460470197013781B06FCD50D +:1031C000144B186862B6144B144C984298BF00EB2D +:1031D000800001A998BF40000A22FEF7CBFA01A99E +:1031E0002046002311F8012B01333AB10A2B20F8B5 +:1031F000022FF7D11623237004B070BD5B00DBB241 +:10320000237004B070BD00BF000002400700024000 +:1032100006000240080002407F969800F487FF1FD6 +:103220000B460146184600F001B800BF13460A4697 +:103230000146022000F092BE014B1868704700BFA3 +:10324000388CFF1F70B50F4E0F4D761BB61018BF90 +:10325000002405D0013455F8043B9847A642F9D123 +:103260000A4E0B4D761B01F0A3FBB61018BF0024CD +:1032700006D0013455F8043B9847A642F9D170BDF9 +:1032800070BD00BFBC490000BC490000C849000037 +:10329000BC490000024B0146186800F00BB800BFA3 +:1032A000388CFF1F024B0146186800F01BBF00BF9F +:1032B000388CFF1F2DE9F04F01F10B05162D83B05F +:1032C000064640F29F8035F0070500F1BF80A94215 +:1032D00000F2BC8000F058FBB5F5FC7FC0F09C828A +:1032E0006B0A00F0BA80042B00F28381A80900F178 +:1032F000390E4FEA4E033830C44F07EB8303A3F176 +:1033000008015C68A14207D1ACE0002A80F2AC80E1 +:10331000E468A14200F0A680636823F003035A1B0F +:103320000F2AF2DDB9493C6901F1080E744500F03D +:10333000B381636823F003035A1B0F2A00F39981BA +:10334000002AC1F814E0C1F810E080F29E80B3F5C5 +:10335000007F80F06781DB0803F1010C01229B10E4 +:1033600002FA03F34A6851F83C80C4F8088001EB84 +:10337000CC091A43A9F10803E3604A6041F83C40D4 +:10338000C8F80C40831001249C40944200F28A80CB +:10339000144206D120F003006400144200F104003E +:1033A000FAD007EBC009CC468046DCF80C108C45FF +:1033B00007D173E1002A80F28181C9688C4500F051 +:1033C0006D814B6823F003035A1B0F2AF2DD0C4674 +:1033D000D1F80CC054F8088F4B1945F001054D6029 +:1033E00042F00101C8F80CC03046CCF808807B617F +:1033F0003B61C3F80CE0C3F808E059609A5000F054 +:10340000C5FA1FE0102921D800F0BEFA10250623C6 +:1034100002207E4F07EB8303A3F108025C6894420D +:1034200000F045816368E168A56823F00303234445 +:1034300030465A68E96042F001028D605A6000F03F +:10344000A5FA0834204603B0BDE8F08F00240C2311 +:103450002046336003B0BDE8F08F80234FF0400E6C +:103460003F2049E770465DE72344E1685A68A56854 +:1034700042F00102E96030468D605A6000F086FA41 +:103480000834204603B0BDE8F08F234430465A6824 +:1034900042F001025A6000F079FA0834204603B085 +:1034A000BDE8F08FBC68636823F00308A84504D327 +:1034B000C5EB08030F2B00F38C80554BDFF86091B0 +:1034C0001A68D9F8003001332A4404EB080A00F0E6 +:1034D000608102F580520F3222F47F6222F00F02E7 +:1034E00011463046019200F04BFCB0F1FF3F83469D +:1034F000019A00F05881824500F2FC80454B196822 +:10350000DA451144196000F05381D9F80000DFF862 +:1035100010E101301BBFCAEB0B0A5144CEF800B0DA +:1035200019601BF0070100F01781C1F10800C1F517 +:103530008051834408315A44C2F30B02C2EB0109A3 +:1035400049463046019300F01BFC431C019B00F0F0 +:103550003F81CBEB00024A4442F001021968C7F8F0 +:1035600008B04944BC42CBF804201960DFF8A490AD +:1035700016D0B8F10F0F40F2FD806268A8F10C037D +:1035800023F00703E01802F001024FF0050E1A4382 +:103590000F2B6260C0F804E0C0F808E000F21C8164 +:1035A0001D4BBC681A68914288BF19601B4B1A6892 +:1035B0009142626888BF196022F003029542A2EB33 +:1035C000050301D80F2B04DC304600F0DFF900249E +:1035D00038E7621943F0010345F0010565603046A4 +:1035E000BA60536000F0D2F90834204603B0BDE859 +:1035F000F08F142B71D9542B00F2A480280B00F10A +:103600006F0E4FEA4E036E3076E600BF3C8CFF1F14 +:103610005896FF1F5C96FF1F5496FF1F5096FF1F82 +:103620004890FF1F5A0A042A5ED9142A00F2B38078 +:1036300002F15C0149005B3207EB810C57F8211065 +:10364000DFF8DC81ACF1080C8C4500F088804A681A +:1036500022F00302934202D289688C45F7D1D1F857 +:103660000CC07A68C4F80CC0A160CCF80840CC60EB +:1036700088E6631942F0010745F0010565603046B0 +:103680004B610B61C3F80CE0C3F808E05F609A502F +:10369000083400F07BF9D5E64A6873E608F10108C2 +:1036A00018F0030F0CF1080C7FF47FAE30E0DC68FB +:1036B000A34208BF02303FF435AEB3E60B440C46DC +:1036C0005A68C96854F8085F42F001025A603046EF +:1036D000E9608D6000F05AF9B4E603F15C0E03F185 +:1036E0005B004FEA4E0307E69A0902F139014900EF +:1036F0003832A1E7BC424A4B3FF400AF9C68626895 +:1037000022F003025AE759F80839994540F08280BF +:1037100010F0030F00F1FF30F5D17B6823EA0403BA +:103720007B6064009C423FF6BDAE002C3FF4BAAE15 +:103730001C4240467FF435AE64001C4200F1040098 +:10374000FAD02EE6B3F5AA7F18D8E80B00F1780E70 +:103750004FEA4E037730CFE54FF48051EBE601217D +:10376000D8F80430921001FA02F21A43C8F8042083 +:10377000614677E70123CBF8043025E740F2545245 +:10378000934220D8A80C00F17D0E4FEA4E037C3006 +:10379000B2E51032A4E6542A26D81A0B02F16F01C2 +:1037A00049006E3248E7BC68626822F0030205E710 +:1037B000CAF30B0000287FF4A8AE4244BB6842F075 +:1037C00001025A60ECE6FE234FF07F0E7E2093E567 +:1037D00001224FF00009C1E604F10801304600F073 +:1037E00081FCD9F80010DBE6B2F5AA7F05D8DA0B28 +:1037F00002F17801490077321EE740F254518A42C3 +:1038000005D89A0C02F17D0149007C3214E7FE21B3 +:103810007E2211E77B6884E7E808431C5B00F8E53B +:103820003C8CFF1F8842F0B50DD98B1898420AD204 +:103830008118002A51D09A1A13F8014D01F8014D50 +:103840009342F9D1F0BD0F2A48D941EA00039B0702 +:1038500046D100F1100401F11003154653F8106C25 +:1038600044F8106C53F80C6C44F80C6C53F8086C6A +:1038700044F8086C103D53F8046C44F8046C0F2DA8 +:1038800003F1100304F11004E8D8A2F1100323F0AF +:103890000F0302F00F0E1033BEF1030F194403445F +:1038A00021D91E1F0D467446043C55F8047B46F88A +:1038B000047F032CF8D8AEF1040424F0030404348C +:1038C0002344214402F0030262B1013B0A4411F88F +:1038D000014B03F8014F8A42F9D1F0BD0346F3E7EB +:1038E0000346F2E7F0BD7246EEE700BF70B484070E +:1038F00046D0541E002A41D0CDB2034602E0621EDB +:10390000E4B3144603F8015B9A07F8D1032C2ED9CF +:10391000CDB245EA05250F2C45EA054519D903F135 +:1039200010022646103E0F2E42F8105C42F80C5C46 +:1039300042F8085C42F8045C02F11002F2D8A4F1EB +:10394000100222F00F0204F00F041032032C134473 +:103950000DD91E462246043A032A46F8045BFAD8DB +:10396000221F22F003020432134404F003042CB19A +:10397000C9B21C4403F8011BA342FBD170BC7047C1 +:1039800014460346C2E700BF704700BF704700BF40 +:10399000024B0A460146186800F002B8388CFF1F37 +:1039A0002DE9F04F174683B0002900F0C1800E4684 +:1039B000814607F10B05FFF7E7FF56F804EC162DDB +:1039C0002EF00304A6F1080840D810221546AF4295 +:1039D00041D8944275DAC94B996808EB04008842D3 +:1039E000416800F0D98021F0010303445B68DB07E4 +:1039F0007DD51EF0010F35D039464846FFF75AFCF9 +:103A00000746E0B156F8043C23F001034344A0F11B +:103A100008029A4200F04481221F242A00F23181D8 +:103A2000132A00F204810346324611681960516876 +:103A3000596092689A603146484600F053FB484608 +:103A4000FFF7A4FF384603B0BDE8F08F25F0070567 +:103A5000002D2A46BBDA0C230020C9F8003003B041 +:103A6000BDE8F08F56F8083CC3EB080ADAF80430DA +:103A700023F0030C04EB0C039342BDDB5746DAF84A +:103A80000C1057F8080F221F242AC160886000F22A +:103A90001781132A40F212813168CAF80810716840 +:103AA000CAF80C101B2A00F22B8108360AF110020A +:103AB0003168116071685160B16891603E461C4682 +:103AC000D046631B0F2B1DD8D8F8043003F0010338 +:103AD00023434444C8F80430636843F0010363603F +:103AE0004846FFF753FF304603B0BDE8F08F21F0A2 +:103AF00003012144914221DBC36882680C46D360F4 +:103B00009A60DEE7D8F8042008EB050102F0010214 +:103B1000154343F001020B44C8F804504A605A6848 +:103B200042F0010208315A60484600F0DBFAD7E75C +:103B3000114603B0BDE8F04FFFF7BCBB1EF0010F0C +:103B40007FF45AAF56F8083CC3EB080ADAF80430A1 +:103B500023F0030C01EB0C0E96458BDBC3688268E7 +:103B60005746D3609A6057F8081FDAF80C30CB60DC +:103B7000221F242A996000F29980132A62D933689F +:103B8000CAF808307368CAF80C301B2A00F2A0800B +:103B900008360AF1100356E021F0030BA34405F1A7 +:103BA0001000834559DA1EF0010F7FF425AF56F857 +:103BB000081CC1EB080ADAF8041021F0030CE344F6 +:103BC00058453FF757AF5746DAF80C1057F8080F2B +:103BD000221F242AC160886000F2B480132A40F2B8 +:103BE000A5803168CAF808107168CAF80C101B2A41 +:103BF00000F2AF8008360AF1100231681160716876 +:103C00005160B16891600AEB0501C5EB0B0242F00F +:103C1000010299604A60DAF8043003F001031D43A1 +:103C20004846CAF80450FFF7B1FE38465CE73368EF +:103C30000360736843601B2A27D800F1080306F16C +:103C40000802F2E63B4632681A6072685A60B2684F +:103C50009A603E467446D04633E708EB0501C5EB53 +:103C60000B0B4BF0010299604A6056F8043C03F0DC +:103C700001031D43484646F8045CFFF787FE3046C3 +:103C800032E73146FFF7CEFDD5E6B3688360F368CF +:103C9000C360242A28D000F1100306F11002C4E604 +:103CA00050F8043C23F003031C440AE7314638462D +:103CB0007446D046FFF7B6FD3E4602E73A46F7E6C1 +:103CC000314638461C46D046FFF7ACFD3E46F8E686 +:103CD000B368CAF81030F368CAF81430242A1BD02D +:103CE00010360AF11803AEE7336903617369436163 +:103CF00006F1180200F1180397E600BF3C8CFF1F85 +:103D0000B168CAF81010F168CAF81410242A0FD04C +:103D100010360AF11802CBE63369CAF81830736915 +:103D2000CAF81C3018360AF120038CE73A4664E7DB +:103D30003269CAF818207269CAF81C2018360AF1CC +:103D40002002B5E6314638460193FFF76BFD019B33 +:103D500059E7B168CAF81010F168CAF81410242A9B +:103D600003D010360AF1180247E73269CAF8182062 +:103D70007269CAF81C2018360AF120023DE700BF1C +:103D800038B5074C0023054608462360FDF7BEFC06 +:103D9000431C00D038BD2368002BFBD02B6038BDFE +:103DA0009896FF1F80EA0102844612F0030F4FD15C +:103DB00011F0030F32D14DF8044D11F0040F51F8FA +:103DC000043B0BD0A3F101329A4312F0803F04BFB1 +:103DD0004CF8043B51F8043B16D100BF51F8044B9A +:103DE000A3F101329A4312F0803FA4F101320BD1CA +:103DF0004CF8043BA24312F0803F04BF51F8043B4F +:103E00004CF8044BEAD023460CF8013B13F0FF0FAB +:103E10004FEA3323F8D15DF8044B704711F0010FDE +:103E200006D011F8012B0CF8012B002A08BF7047AF +:103E300011F0020FBFD031F8022B12F0FF0F16BFA6 +:103E40002CF8022B8CF8002012F47F4FB3D170476E +:103E500011F8012B0CF8012B002AF9D1704700BF93 +:103E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:103E7000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:103E800090F800F06DE9024520F007016FF0000C9A +:103E900010F0070491F820F040F049804FF0000442 +:103EA0006FF00700D1E9002391F840F000F108001D +:103EB00082FA4CF2A4FA8CF283FA4CF3A2FA8CF355 +:103EC0004BBBD1E9022382FA4CF200F10800A4FABC +:103ED0008CF283FA4CF3A2FA8CF3E3B9D1E9042310 +:103EE00082FA4CF200F10800A4FA8CF283FA4CF347 +:103EF000A2FA8CF37BB9D1E9062301F1200182FA01 +:103F00004CF200F10800A4FA8CF283FA4CF3A2FA06 +:103F10008CF3002BC6D0002A04BF04301A4612BA14 +:103F2000B2FA82F2FDE8024500EBD2007047D1E917 +:103F3000002304F00305C4F100004FEAC50514F0A6 +:103F4000040F91F840F00CFA05F562EA05021CBF77 +:103F500063EA050362464FF00004A9E72DE9F04744 +:103F6000254C2568D5F8484106468846924699462C +:103F7000C4B360681F2817DC431C76B104EB8005CE +:103F80000122C5F888A0D4F8881182401143022E7E +:103F9000C4F88811C5F808911ED00230636044F857 +:103FA00020800020BDE8F087144B03B34FF4C870A5 +:103FB000FFF770F90446D0B1D5F84831002780E802 +:103FC0008800C5F8484138460123C4F88871C4F810 +:103FD0008C71002EE1D0D1E7D4F88C110A43C4F8DB +:103FE0008C21DAE705F5A674C5F84841C1E74FF022 +:103FF000FF30BDE8F08700BFAC49000095320000FB +:10400000024B13B1024800F005B8704700000000F1 +:1040100021400000002301461A461846FFF79EBFC4 +:1040200038B5074D074C2C1BA41005D0013C55F8A2 +:10403000043D9847002CF9D1BDE8384000F0C4BCDD +:104040000000000000000000F8B5234F0C460646B3 +:10405000FFF79AFCBB685D6825F00305291B01F694 +:10406000EF7121F47F6121F00F01A1F58054B4F5C7 +:10407000805F07DB00213046FFF782FEBB682B44E0 +:10408000984204D03046FFF781FC0020F8BD614221 +:104090003046FFF775FE01300DD0104BBA68196835 +:1040A0002D1B45F001053046091B55601960FFF7CF +:1040B0006DFC0120F8BD00213046FFF761FEBA68B3 +:1040C000831A0F2BDEDD064C0449246843F00103FC +:1040D000001B53600860D5E73C8CFF1F5C96FF1FF8 +:1040E0004890FF1F002945D02DE9F0410D4680463C +:1040F000FFF74AFC55F8047C6A4927F00103A5F153 +:104100000804E2188E685068B24220F0030062D0C2 +:10411000FE0750600BD455F8087CE41B01F1080E33 +:10412000A56875453B446FD0E768EF60BD60151822 +:104130006D68ED0742D543F001026260E350B3F5CC +:10414000007F18D2DB085A1C4D6851F83270A76006 +:1041500001209B1000FA03F301EBC2001D43083855 +:10416000E0604D6041F83240FC604046BDE8F041FF +:10417000FFF70CBC70475A0A042A53D89A0902F177 +:1041800039077F0002F1380501EB870051F827203D +:104190004449083890424DD0516821F003018B42C8 +:1041A00002D292689042F7D1D068E060A260846049 +:1041B000D4604046BDE8F041FFF7E8BB95683A4F50 +:1041C000BD4203443FD0D068E86043F001028560FF +:1041D0006260E350B3E7FF07034407D455F8082CA7 +:1041E000A41A1344A068E268C26090602F4A126863 +:1041F00043F00100934260608C60B6D32C4B404684 +:104200001968FFF721FFB0E711184968C90744D4BE +:104210009168D268CA60034443F001009160606015 +:10422000E350A2E7142A17D802F15C077F0002F1DD +:104230005B05A9E7AA104B68012505FA02F21343B2 +:104240004B600246B1E743F001024C610C61E5604E +:10425000A5606260E35088E7542A06D81A0B02F181 +:104260006F077F0002F16E058EE7B2F5AA7F06D8D0 +:10427000DA0B02F178077F0002F1770584E740F25C +:104280005450824206D89A0C02F17D077F0002F159 +:104290007C0579E7FE277E2576E743F00102626020 +:1042A000E35062E73C8CFF1F448CFF1F4490FF1FCC +:1042B0005896FF1F506C656173652070726573734B +:1042C00020646F776E20796F75722066696E6765FE +:1042D00072000000436170747572696E67207375B7 +:1042E0006363656564730000506C6561736520727B +:1042F000656C6561736520796F75722066696E679C +:10430000657200004D61746368696E672073756340 +:1043100063656564732C49443D0000002D2D2D2DEF +:104320002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DBD +:1043300000000000200000004D61746368696E6732 +:10434000206661696C730000436170747572696EF8 +:1043500067206661696C73002D2D2D2D2D2D2D2D5F +:104360002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D7D +:104370002D2D2D2D2D000000436F6D6D756E696321 +:104380006174696F6E207769746820746865206451 +:104390006576696365206661696C656400FFFFFF8F +:1043A000982F8A4291443771CFFBC0B5A5DBB5E9A0 +:1043B0005BC25639F111F159A4823F92D55E1CAB14 +:1043C00098AA07D8015B8312BE853124C37D0C55A2 +:1043D000745DBE72FEB1DE80A706DC9B74F19BC1EA +:1043E000C1699BE48647BEEFC69DC10FCCA10C24DA +:1043F0006F2CE92DAA84744ADCA9B05CDA88F976BE +:1044000052513E986DC631A8C82703B0C77F59BF27 +:10441000F30BE0C64791A7D55163CA066729291453 +:10442000850AB72738211B2EFC6D2C4D130D3853F0 +:1044300054730A65BB0A6A762EC9C281852C7292B2 +:10444000A1E8BFA24B661AA8708B4BC2A3516CC7E0 +:1044500019E892D1240699D685350EF470A06A1019 +:1044600016C1A419086C371E4C774827B5BCB03468 +:10447000B30C1C394AAAD84E4FCA9C5BF36F2E6806 +:10448000EE828F746F63A5781478C8840802C78C95 +:10449000FAFFBE90EB6C50A4F7A3F9BEF27871C698 +:1044A000436F6D6D616E642070726F6365737365C9 +:1044B00064207375636365737366756C6C79000053 +:1044C000436F6D6D616E642070726F6365737369A5 +:1044D0006E67206661696C6564000000313A3120C6 +:1044E000636F6D70617269736F6E206661696C6570 +:1044F00064000000436F6D70617269736F6E2077A6 +:1045000069746820616C6C2066696E676572707290 +:10451000696E7473206661696C6564004E6F206615 +:10452000696E6765727072696E7420696E20646569 +:104530007369676E617465642049440044657369FA +:10454000676E617465642049442068617320666900 +:104550006E6765727072696E740000004D6F6475ED +:104560006C6520756E726567697374657265642029 +:1045700066696E6765727072696E74004E6F207244 +:104580006567697374657261626C6520494420686F +:10459000657265004E6F2062726F6B656E20666992 +:1045A0006E6765727072696E74000000496E7661A4 +:1045B0006C696420646573696E6761746564206604 +:1045C000696E6765727072696E74206461746100EF +:1045D0005468652066696E6765727072696E7420D2 +:1045E000686173206265656E2072656769737465C2 +:1045F00072656400506F6F72207175616C697479B7 +:104600002066696E6765727072696E7420696D618B +:104610006765000046696E6765727072696E742026 +:1046200073796E746865736973206661696C65641B +:1046300000000000436F6D6D756E69636174696F92 +:104640006E2070617373776F7264206E6F74206177 +:104650007574686F72697A656400000045787465E6 +:10466000726E616C20466C617368206275726E694F +:104670006E67206572726F7200000000496E76618D +:104680006C69642064657369676E61746564204950 +:1046900044000000496E636F72726563742070613C +:1046A00072616D65746572004163717569736974D7 +:1046B000696F6E2074696D656F757400496E7661FF +:1046C0006C6964206E756D626572206F6620666924 +:1046D0006E6765727072696E742073796E74686546 +:1046E00073697300496E636F7272656374204275FB +:1046F000666665722049442076616C75650000002D +:104700004E6F2066696E6765727072696E7420699B +:104710006E70757420696E746F2066696E6765725D +:104720007072696E742072656164657200000000C9 +:10473000436F6D6D616E642063616E63656C6C6563 +:104740006400000057726F6E672064617461206CB2 +:10475000656E67746800000057726F6E6720646151 +:10476000746120636865636B20636F64650000009B +:10477000457863656564207570706572206C696D3D +:104780006974206F66206163717569736974696FFC +:104790006E2074696D657300446174612072656197 +:1047A00064696E672074696D656F75740000000040 +:1047B00000000000000000000D1200003112000097 +:1047C000C1120000BD120000B9120000B5120000B5 +:1047D000B1120000D5110000911200008D120000EE +:1047E000851200007D1200007512000065120000A5 +:1047F0005512000051120000491200004112000041 +:10480000E51200000513000025130000C51200008A +:1048100019120000011200000D0AFFFF4008FE43BC +:1048200040A004404408FE4344A004400018FE4356 +:1048300000C004403000FE43309004403400FE438A +:10484000349004401C18FE431CC004401018FE4362 +:1048500010C004400818FE4308C004400C18FE4372 +:104860000CC004400C10FE430CB004401010FE437A +:1048700010B004401810FE4318B004401C10FE4352 +:104880001CB004401410FE4314B004400418FE434E +:1048900004C004400010FE4300B004400008FE4382 +:1048A00000A004400408FE4304A004400C08FE439A +:1048B0000CA004400808FE4308A004401418FE435E +:1048C00014C004401818FE4318C004400410FE43EE +:1048D00004B004400810FE4308B004401400FE4336 +:1048E000149004404C08FE434CA004400420FE43B6 +:1048F00004D004402410FE4324B004402010FE43A2 +:1049000020B004402810FE4328B004402C10FE4381 +:104910002CB004400020FE4300D004404808FE4371 +:1049200048A004401000FE43109004400000000026 +:1049300000000000BD2B0000B52B0000B12B0000D3 +:10494000AD2B0000A92B0000A52B0000A12B00001F +:104950009D2B000000151915000100006887FF1F3E +:1049600012000000000200009487FF1F43000000B7 +:1049700000030000F087FF1F00000000010309048E +:104980007C87FF1F0000000002030904D887FF1F77 +:104990000000000003030904F487FF1F000000006B +:1049A0000000000000000000000000001088FF1F51 +:1049B000F8B500BFF8BC08BC9E4670470140000037 +:0849C00035040000610600004F +:0449C800F8B500BF7F +:0849CC0054E8FF7F0100000028 +:1049D40000000000B847000000000000E8030000E9 +:1049E40000000000012100009C96FF1F4000000011 +:1049F4001A00000028000000280000000801000040 +:104A04003449000000000000E8030000000000003A +:104A1400FFFFFFFF010A0401120110010200004020 +:104A2400C016830475020102030100001803540038 +:104A3400650065006E00730079006400750069000C +:104A44006E006F0009024300020100C03209040035 +:104A540000010202010005240010010524010101E6 +:104A64000424020605240600010705820310004001 +:104A740009040100020A00000007050302400000C7 +:104A8400070584024000000016035500530042004D +:104A94002000530065007200690061006C00000092 +:104AA400040309040C0300000000000000000000DF +:104AB40000000000000000000000000000000000F2 +:104AC40000000000FC8AFF1F648BFF1FCC8BFF1FBC +:104AD40000000000000000000000000000000000D2 +:104AE40000000000000000000000000000000000C2 +:104AF40000000000000000000000000000000000B2 +:104B040000000000000000000000000000000000A1 +:104B14000000000000000000000000000000000091 +:104B24000000000000000000000000000000000081 +:104B34000000000000000000000000000000000071 +:104B44000000000000000000000000000000000061 +:104B54000000000000000000000000000000000051 +:104B64000000000000000000010000000000000040 +:104B74000E33CDAB34126DE6ECDE05000B00000005 +:104B84000000000000000000000000000000000021 +:104B94000000000000000000000000000000000011 +:104BA4000000000000000000000000000000000001 +:104BB40000000000000000000000000000000000F1 +:104BC40000000000000000000000000000000000E1 +:104BD40000000000000000000000000000000000D1 +:104BE40000000000000000000000000000000000C1 +:104BF40000000000000000000000000000000000B1 +:104C040000000000000000000000000000000000A0 +:104C14000000000000000000000000000000000090 +:104C24000000000000000000000000000000000080 +:104C34000000000000000000000000000000000070 +:104C44000000000000000000000000000000000060 +:104C54000000000000000000000000000000000050 +:104C64000000000000000000000000000000000040 +:104C74000000000000000000000000000000000030 +:104C84000000000000000000000000000000000020 +:104C94000000000000000000000000000000000010 +:104CA4000000000000000000000000000000000000 +:104CB40000000000000000000000000000000000F0 +:104CC40000000000000000000000000000000000E0 +:104CD40000000000000000000000000000000000D0 +:104CE40000000000000000000000000000000000C0 +:104CF40000000000000000000000000000000000B0 +:104D0400000000000000000000000000000000009F +:104D1400000000000000000000000000000000008F +:104D2400000000000000000000000000000000007F +:104D3400000000000000000000000000000000006F +:104D4400000000000000000000000000000000005F +:104D5400000000000000000000000000000000004F +:104D6400000000000000000000000000000000003F +:104D7400000000000000000000000000000000002F +:104D8400000000000000000000000000000000001F +:104D9400000000000000000000000000000000000F +:104DA40000000000000000000000000000000000FF +:104DB40000000000000000000000000000000000EF +:104DC40000000000000000000000000000000000DF +:104DD40000000000000000000000000000000000CF +:104DE40000000000000000000000000000000000BF +:104DF40000000000000000000000000000000000AF +:104E0400000000000000000000000000000000009E +:104E1400000000000000000000000000000000008E +:104E2400000000000000000000000000000000007E +:104E3400000000000000000000000000000000006E +:104E4400000000000000000000000000000000005E +:104E5400000000000000000000000000000000004E +:104E6400000000000000000000000000000000003E +:104E7400000000000000000000000000000000002E +:104E8400000000000000000000000000000000001E +:104E9400000000000000000000000000000000000E +:104EA40000000000000000000000000000000000FE +:104EB40000000000000000000000000000000000EE +:104EC40000000000000000000000000000000000DE +:104ED40000000000000000000000000000000000CE +:104EE40000000000000000001088FF1F0000000008 +:104EF400000000003C8CFF1F3C8CFF1F448CFF1FF4 +:104F0400448CFF1F4C8CFF1F4C8CFF1F548CFF1FC5 +:104F1400548CFF1F5C8CFF1F5C8CFF1F648CFF1F75 +:104F2400648CFF1F6C8CFF1F6C8CFF1F748CFF1F25 +:104F3400748CFF1F7C8CFF1F7C8CFF1F848CFF1FD5 +:104F4400848CFF1F8C8CFF1F8C8CFF1F948CFF1F85 +:104F5400948CFF1F9C8CFF1F9C8CFF1FA48CFF1F35 +:104F6400A48CFF1FAC8CFF1FAC8CFF1FB48CFF1FE5 +:104F7400B48CFF1FBC8CFF1FBC8CFF1FC48CFF1F95 +:104F8400C48CFF1FCC8CFF1FCC8CFF1FD48CFF1F45 +:104F9400D48CFF1FDC8CFF1FDC8CFF1FE48CFF1FF5 +:104FA400E48CFF1FEC8CFF1FEC8CFF1FF48CFF1FA5 +:104FB400F48CFF1FFC8CFF1FFC8CFF1F048DFF1F54 +:104FC400048DFF1F0C8DFF1F0C8DFF1F148DFF1F01 +:104FD400148DFF1F1C8DFF1F1C8DFF1F248DFF1FB1 +:104FE400248DFF1F2C8DFF1F2C8DFF1F348DFF1F61 +:104FF400348DFF1F3C8DFF1F3C8DFF1F448DFF1F11 +:10500400448DFF1F4C8DFF1F4C8DFF1F548DFF1FC0 +:10501400548DFF1F5C8DFF1F5C8DFF1F648DFF1F70 +:10502400648DFF1F6C8DFF1F6C8DFF1F748DFF1F20 +:10503400748DFF1F7C8DFF1F7C8DFF1F848DFF1FD0 +:10504400848DFF1F8C8DFF1F8C8DFF1F948DFF1F80 +:10505400948DFF1F9C8DFF1F9C8DFF1FA48DFF1F30 +:10506400A48DFF1FAC8DFF1FAC8DFF1FB48DFF1FE0 +:10507400B48DFF1FBC8DFF1FBC8DFF1FC48DFF1F90 +:10508400C48DFF1FCC8DFF1FCC8DFF1FD48DFF1F40 +:10509400D48DFF1FDC8DFF1FDC8DFF1FE48DFF1FF0 +:1050A400E48DFF1FEC8DFF1FEC8DFF1FF48DFF1FA0 +:1050B400F48DFF1FFC8DFF1FFC8DFF1F048EFF1F4F +:1050C400048EFF1F0C8EFF1F0C8EFF1F148EFF1FFC +:1050D400148EFF1F1C8EFF1F1C8EFF1F248EFF1FAC +:1050E400248EFF1F2C8EFF1F2C8EFF1F348EFF1F5C +:1050F400348EFF1F3C8EFF1F3C8EFF1F448EFF1F0C +:10510400448EFF1F4C8EFF1F4C8EFF1F548EFF1FBB +:10511400548EFF1F5C8EFF1F5C8EFF1F648EFF1F6B +:10512400648EFF1F6C8EFF1F6C8EFF1F748EFF1F1B +:10513400748EFF1F7C8EFF1F7C8EFF1F848EFF1FCB +:10514400848EFF1F8C8EFF1F8C8EFF1F948EFF1F7B +:10515400948EFF1F9C8EFF1F9C8EFF1FA48EFF1F2B +:10516400A48EFF1FAC8EFF1FAC8EFF1FB48EFF1FDB +:10517400B48EFF1FBC8EFF1FBC8EFF1FC48EFF1F8B +:10518400C48EFF1FCC8EFF1FCC8EFF1FD48EFF1F3B +:10519400D48EFF1FDC8EFF1FDC8EFF1FE48EFF1FEB +:1051A400E48EFF1FEC8EFF1FEC8EFF1FF48EFF1F9B +:1051B400F48EFF1FFC8EFF1FFC8EFF1F048FFF1F4A +:1051C400048FFF1F0C8FFF1F0C8FFF1F148FFF1FF7 +:1051D400148FFF1F1C8FFF1F1C8FFF1F248FFF1FA7 +:1051E400248FFF1F2C8FFF1F2C8FFF1F348FFF1F57 +:1051F400348FFF1F3C8FFF1F3C8FFF1F448FFF1F07 +:10520400448FFF1F4C8FFF1F4C8FFF1F548FFF1FB6 +:10521400548FFF1F5C8FFF1F5C8FFF1F648FFF1F66 +:10522400648FFF1F6C8FFF1F6C8FFF1F748FFF1F16 +:10523400748FFF1F7C8FFF1F7C8FFF1F848FFF1FC6 +:10524400848FFF1F8C8FFF1F8C8FFF1F948FFF1F76 +:10525400948FFF1F9C8FFF1F9C8FFF1FA48FFF1F26 +:10526400A48FFF1FAC8FFF1FAC8FFF1FB48FFF1FD6 +:10527400B48FFF1FBC8FFF1FBC8FFF1FC48FFF1F86 +:10528400C48FFF1FCC8FFF1FCC8FFF1FD48FFF1F36 +:10529400D48FFF1FDC8FFF1FDC8FFF1FE48FFF1FE6 +:1052A400E48FFF1FEC8FFF1FEC8FFF1FF48FFF1F96 +:1052B400F48FFF1FFC8FFF1FFC8FFF1F0490FF1F45 +:1052C4000490FF1F0C90FF1F0C90FF1F1490FF1FF2 +:1052D4001490FF1F1C90FF1F1C90FF1F2490FF1FA2 +:1052E4002490FF1F2C90FF1F2C90FF1F3490FF1F52 +:0C52F4003490FF1F00000200FFFFFFFFCE +:00000001FF diff --git a/TestSHA256/.pio/build/Teensy_SHA/lib1ac/DFRobot_ID809/DFRobot_ID809.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/lib1ac/DFRobot_ID809/DFRobot_ID809.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..cf8818abf118d25a0a9f4cdfef2d69fbda73d867 GIT binary patch literal 20752 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 VWvJwXEevc~6=Odp!$pyJ{|krq;0OQ! literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/lib1ac/libDFRobot_ID809.a b/TestSHA256/.pio/build/Teensy_SHA/lib1ac/libDFRobot_ID809.a new file mode 100644 index 0000000000000000000000000000000000000000..4462c797bcaca97cec6e3e3ca7722867bce58b17 GIT binary patch literal 23306 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/lib516/SHA256/sha256.c.o b/TestSHA256/.pio/build/Teensy_SHA/lib516/SHA256/sha256.c.o new file mode 100644 index 0000000000000000000000000000000000000000..81fcf553fca2795ad52a5cc186287069143aef9b GIT binary patch literal 2612 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/lib516/libSHA256.a b/TestSHA256/.pio/build/Teensy_SHA/lib516/libSHA256.a new file mode 100644 index 0000000000000000000000000000000000000000..34ce9f99074f606cdcc5e3e6ebcfdfdc8d58c97e GIT binary patch literal 2816 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/lib537/DFRobot_ID809/DFRobot_ID809.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/lib537/DFRobot_ID809/DFRobot_ID809.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..cf8818abf118d25a0a9f4cdfef2d69fbda73d867 GIT binary patch literal 20752 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 VWvJwXEevc~6=Odp!$pyJ{|krq;0OQ! literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/lib537/libDFRobot_ID809.a b/TestSHA256/.pio/build/Teensy_SHA/lib537/libDFRobot_ID809.a new file mode 100644 index 0000000000000000000000000000000000000000..6047b67b9fd81852567e15108f9ab25a44ce4182 GIT binary patch literal 23306 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/lib6bd/SHA256/sha256.c.o b/TestSHA256/.pio/build/Teensy_SHA/lib6bd/SHA256/sha256.c.o new file mode 100644 index 0000000000000000000000000000000000000000..81fcf553fca2795ad52a5cc186287069143aef9b GIT binary patch literal 2612 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/lib6bd/libSHA256.a b/TestSHA256/.pio/build/Teensy_SHA/lib6bd/libSHA256.a new file mode 100644 index 0000000000000000000000000000000000000000..b519e684ce7aad6ec8ac45e1dec1d1451dfca5ef GIT binary patch literal 2816 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/libFrameworkArduino.a b/TestSHA256/.pio/build/Teensy_SHA/libFrameworkArduino.a new file mode 100644 index 0000000000000000000000000000000000000000..fb5701eab1ac7f2e05015bc644bcfde363dd935f GIT binary patch literal 235286 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/Wire.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/Wire.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..d9dde844fc7c415cdc2784f85d61592c9bf3db5e GIT binary patch literal 764 zcma)3%}T>S5T0%NV+BD)@egFZXbLtaB`wrjskIkdL=+F=VUw;j&~(dg6g~M8zJagg zi}(aO+hj5IAP&ra^S}G;y!I~62_ayFfDJz$z+38+{CR;5RVV}WyWLZ2_lGz1T8N3F z4?@z;)qwWmfR9FeL@%WXxl%%^8f`kh<I#rewcNJXrncl0&J?fFJ8U`OSxdcH4<wt0 zV=DPmq#`k;4d3<Kt$XOWcsJuLh=3fTS?UUz@aOu#hw@5gP%W$%H^?U0vbM<%*(Li0 z!^L2pPZ2)9OkAV2z*hT<?G{GzVnH$QVzvZu8%gejvl)P+UgCrWh>1*bY%F|o0?vpf z44gnIa6%Ese2Ovr2ZtqzjDp96tA+7@I(wMa+;AgvNq3Yv2!_c4+Pcm#`CVuJ=Ll<- z{!w?F&C`3)qUVXZl^%MY)+Q?6iQkgSJA!8%M04*N+U9LKJ;X#$8=06ojfRs>eW2>$ Y`pp$oy_r?iDr$b-88$9s%!rxy4Q;1Q6951J literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/WireIMXRT.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/WireIMXRT.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..05f7e671ab2509eb84aad8106a2b1db3ef8f1b54 GIT binary patch literal 768 zcma)3NlU{(6n@imu?KNMaRV7I+JcQqNelH>YAu2hsTBqBkY%KSrc-93=*hp~-M{1? z@fYZuCWEa9@xhz#?aRE^?)fPp1T+z-z>fy-mMR5j8c=~U6ajjj&M~d@F0Sc-^O2+v zT+nvkrQO(PVaP&yDR{u7<U&?y!*ooW)-Ahfwd@wH2sUD#WL0{HDMu_zsWoc8@W#QA z3icGqh>vOAv7A=(9@-Z6_L%2KK=x5Abht>^bIo<2xL9(_xz+p{StlFDCfOp}WH+aG z(Kx$L9zMUcU7<0zt<vYy4YbUX0r^=Ky#;`qNU$^awm&d~$ppZZFLC1eh>1vXs3n{` z0W<Ux4@_T5FasXPY>YPi4AV;z5&4e^lXE@(Qg+a(_QR`8DZNvsAn0xOP*!nzo8NKz zj}9<q;U95_Sv_?dMXDa3O6jBODQ+NRPyCgX-VtoAAnLv=DC^mj`wAUhC1j-I6zZLn c>jPO8S2LH8)peGU%gD3!PB3u^ZJKnwZ_lz$wEzGB literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/WireKinetis.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/WireKinetis.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..8aa1a37f5f11f502d6032c47c3424a847e5ac809 GIT binary patch literal 9956 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 literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/utility/twi.c.o b/TestSHA256/.pio/build/Teensy_SHA/libbc6/Wire/utility/twi.c.o new file mode 100644 index 0000000000000000000000000000000000000000..cfea50bad493ed0cc6ab88c0b77377156ffbd183 GIT binary patch literal 760 zcma)3%}N6?5T11VV-JFg;vY!7=oaj{E!#r9m0Ekyiin=X!)`ayg|?9-{+)aU-@#Y% zMSKFC={C6aAP!8v`Q|T~%xm}TgfRwI7`X7m0Nzqk2&M@xl%WXF>vWE|+dIGJS5l5N zzmtl$FZ;YZjzk=bm|rM45L!#6E4<+aUX9oNTGMaUTHIA)Btk7J{02)7#jK>-s75NB z42E2Z$3!P`!s~$_w3@fj_VMmegi!))56wbHDkGk&{Q!!KrG7cLl3!(OY~9&ln{12i z<m@aKv-9NP^UL}Pow;d=&zC#s$%+H{EX8O6z&s`10Kn5PV-rS*Mx{8k7QWYj7l$SU zFVY&kfgF#;1bz4kUTBO;q6Z`NT<^cgHU?=f+{RSW{mcl0onjYl%Cl4a&a;2Bk2wqf z$UB(zqn(gYKRLD1gZhy+Q1Q<D)C=&AM$HmLd+##Z_H7hC#Xy&gnb<r+I}?RIP^me+ Vxr9nvSwbzNX8RpuA;qoOe&3=mOXdIo literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/libbc6/libWire.a b/TestSHA256/.pio/build/Teensy_SHA/libbc6/libWire.a new file mode 100644 index 0000000000000000000000000000000000000000..a3601ad29ab4216640e3cdd5ee2c03d59bdadcd1 GIT binary patch literal 13350 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 RH9-ESK2r*=l@L1K{{;^DhV1|V literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/Teensy_SHA/src/main.cpp.o b/TestSHA256/.pio/build/Teensy_SHA/src/main.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..407e6a091a3d0c831d5e22ae725616ccafc1761a GIT binary patch literal 5172 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 J7wG86`!|1hmy-Yh literal 0 HcmV?d00001 diff --git a/TestSHA256/.pio/build/project.checksum b/TestSHA256/.pio/build/project.checksum new file mode 100644 index 0000000..5fa6083 --- /dev/null +++ b/TestSHA256/.pio/build/project.checksum @@ -0,0 +1 @@ +d26dc5aa4cb3393323704e8f9a79fdf21acb95b1 \ No newline at end of file diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/.piopm b/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/.piopm new file mode 100644 index 0000000..6d0b735 --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/.piopm @@ -0,0 +1 @@ +{"type": "library", "name": "DFRobot_ID809", "version": "0.0.0+20220728181242", "spec": {"owner": null, "id": null, "name": "DFRobot_ID809", "requirements": null, "uri": "file://lib/DFRobot_ID809"}} \ No newline at end of file diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/DFRobot_ID809.cpp b/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/DFRobot_ID809.cpp new file mode 100644 index 0000000..ddf2e99 --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/DFRobot_ID809.cpp @@ -0,0 +1,1089 @@ + +/*! + * @file DFRobot_ID809.cpp + * @brief Define the basic structure of DFRobot_ID809 class and the implementation of underlying methods + * @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com) + * @licence The MIT License (MIT) + * @author [Eddard](eddard.liu@dfrobot.com) + * @version V1.0 + * @date 2020-03-19 + * @get from https://www.dfrobot.com + * @url https://github.com/cdjq/DFRobot_ID809 + */ + +#include <DFRobot_ID809.h> +#include <Arduino.h> +#include <string.h> +#include <stdio.h> +Stream *dbg=NULL; + +DFRobot_ID809::DFRobot_ID809() + :s(NULL){ + +} + +DFRobot_ID809::~DFRobot_ID809(){ + +} + +bool DFRobot_ID809::begin(Stream &s_){ + s = &s_; + String str = getDeviceInfo(); + //Serial.println(str[str.length()-1]); + if(str[str.length()-1] == '4'){ + + FINGERPRINT_CAPACITY = 80 ; + + //Serial.println(str[str.length()-1]); + }else if(str[str.length()-1] == '3'){ + //Serial.println(str[str.length()-1]); + FINGERPRINT_CAPACITY = 200 ; + + } + + if(s == NULL){ + return false; + } + return true; +} + +bool DFRobot_ID809::isConnected(){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_TEST_CONNECTION, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + return true; + }else{ + return false; + } +} + +uint8_t DFRobot_ID809::setDeviceID(uint8_t deviceID){ + uint8_t data[5] = {0}; //data:1bytes Parameter Type+4bytes Parameter Value + data[1] = deviceID; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::setSecurityLevel(uint8_t securityLevel){ + uint8_t data[5] = {0}; + data[0] = 1; + data[1] = securityLevel; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::setDuplicationCheck(uint8_t duplicationCheck){ + uint8_t data[5] = {0}; + data[0] = 2; + data[1] = duplicationCheck; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::setBaudrate(eDeviceBaudrate_t baudrate){ + uint8_t data[5] = {0}; + data[0] = 3; + data[1] = baudrate; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::setSelfLearn(uint8_t selfLearn){ + uint8_t data[5] = {0}; + data[0] = 4; + data[1] = selfLearn; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getDeviceID(){ + uint8_t data[1]; //data:1byte Parameter Type + data[0] = 0; + uint8_t ret = getParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getSecurityLevel(){ + uint8_t data[1]; + data[0] = 1; + uint8_t ret = getParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getDuplicationCheck(){ + uint8_t data[1]; + data[0] = 2; + uint8_t ret = getParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getBaudrate(){ + uint8_t data[1]; + data[0] = 3; + uint8_t ret = getParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getSelfLearn(){ + uint8_t data[1]; + data[0] = 4; + uint8_t ret = getParam(data); + return ret; +} + +String DFRobot_ID809::getDeviceInfo(){ + char *data; + uint8_t result; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DEVICE_INFO, NULL, 0); + sendPacket(header); + free(header); + result = responsePayload(buf); + LDBG("result=");LDBG(result); + if(result != ERR_SUCCESS){ + return ""; + } + uint16_t dataLen = buf[0]+(buf[1]<<8)+1; + if((data = (char *)malloc(dataLen)) == NULL){ + LDBG("no memory!!!\r\n"); + while(1); + } + data[dataLen] = 0; + result = responsePayload(data); + LDBG("result=");LDBG(result); + String ret = String(data); + free(data); + return ret; +} + +uint8_t DFRobot_ID809::setModuleSN(const char* SN){ + char data[2]; + data[0] = MODULE_SN_SIZE; + if(strlen(SN) > MODULE_SN_SIZE){ + LDBG("The serial number exceeds 15 characters"); + return ERR_ID809; + } + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_SET_MODULE_SN, data, 2); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + return ERR_ID809; + } + header = pack(DATA_TYPE, CMD_SET_MODULE_SN, SN, MODULE_SN_SIZE); + sendPacket(header); + free(header); + ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getTemplate(uint16_t id,uint8_t * temp){ + char data[4]; + data[0] = id; + data[1] = 0; + data[2] = 0; + data[3] = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_LOAD_CHAR, data, 4); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + data[0] = 0; + data[1] = 0; + header = pack(CMD_TYPE, CMD_UP_CHAR, data, 2); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret == ERR_SUCCESS) { + ret = buf[0]; + } + ret = responsePayload(temp); + + return ret; +} + +uint8_t DFRobot_ID809::downLoadTemplate(uint16_t id,uint8_t * temp){ + + char data[4]; + data[0] = 0xf2; + data[1] = 3; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DOWN_CHAR, data, 2); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(0x3f2 +1); + tempData[0] = 0; + tempData[1] = 0; + memcpy(tempData+2,temp,0x3f0); + + + header = pack(DATA_TYPE, CMD_DOWN_CHAR, tempData, 0x3f2); + + sendPacket(header); + + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret == ERR_SUCCESS) { + ret = buf[0]; + } + free(tempData); + + + return store(id); +} + +uint8_t DFRobot_ID809::contrastTemplate(uint8_t *temp){ + + char data[4]; + data[0] = 0xf2; + data[1] = 3; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DOWN_CHAR, data, 2); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(0x3f2 +1); + tempData[0] = 2; + tempData[1] = 0; + memcpy(tempData+2,temp,0x3f0); + + + header = pack(DATA_TYPE, CMD_DOWN_CHAR, tempData, 0x3f2); + + sendPacket(header); + + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret == ERR_SUCCESS) { + ret = buf[0]; + } + free(tempData); + data[0] = 0; + data[1] = 0; + data[2] = 2; + data[3] = 0; + header = pack(CMD_TYPE, CMD_MATCH, data, 4); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ret; + } + return ret; + +} +uint8_t DFRobot_ID809::getFingerImage(uint8_t *image) +{ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_IMAGE, NULL, 0); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + + char data[1]; + data[0] = 0; + header = pack(CMD_TYPE, CMD_UP_IMAGE_CODE, data, 1); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(500 +1); + for(uint8_t i=0;i<52;i++){ + + ret = responsePayload(tempData); + if(i == 51) + memcpy(image+i*496,tempData+2,304); + else + memcpy(image+i*496,tempData+2,496); + } + free(tempData); +} +uint8_t DFRobot_ID809::getQuarterFingerImage(uint8_t *image){ + + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_IMAGE, NULL, 0); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + + char data[1]; + data[0] = 1; + header = pack(CMD_TYPE, CMD_UP_IMAGE_CODE, data, 1); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(500 +1); + for(uint8_t i=0;i<13;i++){ + + ret = responsePayload(tempData); + if(i == 12) + memcpy(image+i*496,tempData+2,448); + else + memcpy(image+i*496,tempData+2,496); + } + free(tempData); + +} +uint8_t DFRobot_ID809::downLoadImage(uint16_t id,uint8_t * temp) +{ + char data[4]; + data[0] = 0xa0; + data[1] = 0; + data[2] = 0xa0; + data[3] = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DOWN_IMAGE, data, 4); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(500); + for(uint8_t i =0 ;i<52;i++){ + tempData[0] = i; + tempData[1] = 0; + if(i == 51){ + memcpy(tempData+2,temp+i*496,304); + header = pack(DATA_TYPE, CMD_DOWN_IMAGE, tempData, 306); + }else{ + memcpy(tempData+2,temp+i*496,496); + header = pack(DATA_TYPE, CMD_DOWN_IMAGE, tempData, 498); + } + sendPacket(header); + + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + + } + free(tempData); + + data[0] = 0; + data[1] = 0; + header = pack(CMD_TYPE, CMD_GENERATE, data, 2); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + // return ERR_ID809; + } + return store(id); + +} + +uint8_t DFRobot_ID809::receiveImageData(uint8_t * image){ + + + + uint8_t ret = responsePayload(image); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + +} +String DFRobot_ID809::getModuleSN(){ + char *data; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_MODULE_SN, NULL, 0); + sendPacket(header); + free(header); + uint8_t result = responsePayload(buf); + LDBG("result=");LDBG(result); + if(result != ERR_SUCCESS){ + return ""; + } + uint16_t dataLen = buf[0]+(buf[1]<<8)+1; + if((data = (char *)malloc(dataLen)) == NULL){ + LDBG("no memory!!!\r\n"); + while(1); + } + data[dataLen] = 0; + result = responsePayload(data); + LDBG("result=");LDBG(result); + String ret = String(data); + free(data); + return ret; +} + +uint8_t DFRobot_ID809::ctrlLED(eLEDMode_t mode,eLEDColor_t color,uint8_t blinkCount){ + char data[4] = {0}; + if(FINGERPRINT_CAPACITY == 80){ + data[0] = mode; + data[2] = data[1] = color; + data[3] = blinkCount; + }else{ + if(mode == 1){ + data[0] = 2; + } else if(mode == 2){ + data[0] = 4; + } else if(mode == 3){ + data[0] = 1; + } else if(mode == 4){ + data[0] = 0; + } else if(mode == 5){ + data[0] = 3; + } + if(color == eLEDGreen){ + data[2] = data[1] = 0x84; + }else if(color == eLEDRed){ + data[2] = data[1] = 0x82; + }else if(color == eLEDYellow){ + data[2] = data[1] = 0x86; + }else if(color == eLEDBlue){ + data[2] = data[1] = 0x81; + }else if(color == eLEDCyan){ + data[2] = data[1] = 0x85; + }else if(color == eLEDMagenta){ + data[2] = data[1] = 0x83; + }else { + data[2] = data[1] = 0x87; + } + } + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_SLED_CTRL, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::detectFinger(){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_FINGER_DETECT, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getEmptyID(){ + char data[4] = {0}; + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; //80 fingerprints at most, default to full range + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_EMPTY_ID, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getStatusID(uint8_t ID){ + char data[2] = {0}; + data[0] = ID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_STATUS, data, 2); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getEnrollCount(){ + char data[4] = {0}; + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_ENROLL_COUNT, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +#define getID(A, V) (A[0 + V/8] & (0x01 << (V & 0x07))) +uint8_t DFRobot_ID809::getEnrolledIDList(uint8_t* list) +{ + char *data; + uint8_t i = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_ENROLLED_ID_LIST, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + uint16_t dataLen = buf[0]+(buf[1]<<8); + if((data = (char *)malloc(dataLen)) == NULL){ + LDBG("no memory!!!\r\n"); + while(1); + } + ret = responsePayload(data); + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + ret = ERR_ID809; + }else{ + for(uint16_t j = 0; j < (dataLen*8); j++){ + if(getID(data, j) != 0){ + list[i] = j; + i++; + } + } + } + free(data); + return ret; +} + +uint8_t DFRobot_ID809::storeFingerprint(uint8_t ID){ + char data[4] = {0}; + uint8_t ret; + ret = merge(); + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + return ERR_ID809; + } + _number = 0; + data[0] = ID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_STORE_CHAR, data, 4); + sendPacket(header); + free(header); + ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; + +} +uint8_t DFRobot_ID809::store(uint8_t ID){ + + + char data[4] = {0}; + uint8_t ret; + LDBG("ret="); + LDBG(ret); + data[0] = ID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_STORE_CHAR, data, 4); + sendPacket(header); + free(header); + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + return ret; +} +uint8_t DFRobot_ID809::delFingerprint(uint8_t ID) +{ + char data[4] = {0}; + if(ID == DELALL) { + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; + } else { + data[0] = data[2] = ID; + } + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DEL_CHAR, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::search(){ + if(_state == 1){ + char data[6] = {0}; + data[2] = 1; + data[4] = FINGERPRINT_CAPACITY; + _number = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_SEARCH, data, 6); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + }else{ + ret = 0; + } + return ret; + } + return 0; +} + +uint8_t DFRobot_ID809::verify(uint8_t ID){ + if(_state == 1){ + char data[4] = {0}; + data[0] = ID; + _number = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_VERIFY, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + }else{ + ret = 0; + } + return ret; + } + return 0; +} + +uint8_t DFRobot_ID809::match(uint8_t RamBufferID0, uint8_t RamBufferID1){ + char data[4] = {0}; + data[0] = RamBufferID0; + data[2] = RamBufferID1; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_MATCH, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + }else{ + ret = 0; + } + return ret; +} + +uint8_t DFRobot_ID809::getBrokenQuantity(){ + char data[4] = {0}; + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_BROKEN_ID, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getBrokenID(){ + char data[4] = {0}; + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_BROKEN_ID, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[2]; + } + return ret; +} + +uint8_t DFRobot_ID809::loadFingerprint(uint8_t ID, uint8_t RamBufferID){ + char data[4] = {0}; + data[0] = ID; + data[2] = RamBufferID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_LOAD_CHAR, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::enterStandbyState(){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_ENTER_STANDBY_STATE, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::setParam(uint8_t* data){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_SET_PARAM, (const char *)data, 5); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::getParam(uint8_t* data){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_PARAM, (const char *)data, 1); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getImage(){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_IMAGE, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::collectionFingerprint(uint16_t timeout,int ramNumber){ //Collect fingerprint + uint16_t i = 0; + uint8_t ret; + if(ramNumber == -1){ + if(_number > 2){ + _error = eErrorGatherOut; + LDBG("Exceed upper limit of acquisition times "); + return ERR_ID809; + } + } + while(!detectFinger()){ + if(timeout != 0){ + delay(10); + if(++i > timeout*10){ + _error = eErrorTimeOut; + LDBG("Acquisition timeout "); + LDBG("ret=");LDBG(ret); + _state = 0; + return ERR_ID809; + } + } + } + ret = getImage(); + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + _state = 0; + return ERR_ID809; + } + if(ramNumber != -1){ + ret = generate(ramNumber); + } else{ + ret = generate(_number); + } + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + _state = 0; + return ERR_ID809; + } + _number++; + _state = 1; + return ret; +} + +uint8_t DFRobot_ID809::generate(uint8_t RamBufferID){ + char data[2] = {0}; + data[0] = RamBufferID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GENERATE, (const char *)data, 2); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::merge(){ + char data[3] = {0}; + data[2] = _number; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_MERGE, data, 3); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +pCmdPacketHeader_t DFRobot_ID809::pack(uint8_t type, uint16_t cmd, const char *payload, uint16_t len){ + pCmdPacketHeader_t header; + uint16_t cks=0; + uint16_t dataLen; + if(type == CMD_TYPE){ //Structure of command packet, fixed 26 bytes:10(frame header)+14(data)+2(CKS) + if((header = (pCmdPacketHeader_t)malloc(sizeof(sCmdPacketHeader_t)+16+2)) == NULL){ + return NULL; + } + header->PREFIX = CMD_PREFIX_CODE; + for(int i=0;i<16;i++){ + header->payload[i] = 0; + } + dataLen = 16; //Length of data to be replicated + }else{ //Structure of command data packet, unfixed length:10(frame header)+LEN(data)+2(CKS) + if((header = (pCmdPacketHeader_t)malloc(sizeof(sCmdPacketHeader_t)+len+2)) == NULL){ + return NULL; + } + header->PREFIX = CMD_DATA_PREFIX_CODE; + dataLen = len; //Length of data to be replicated + } + header->SID = 0; + header->DID = 0; + header->CMD = cmd; + header->LEN = len; + if(len){ + memcpy(header->payload, payload, len); + } + cks = getCmdCKS(header); + memcpy(&header->payload[dataLen],&cks,2); + _PacketSize = sizeof(sCmdPacketHeader_t) + dataLen +2; + return header; +} + + +void DFRobot_ID809::sendPacket(pCmdPacketHeader_t header){ + s->write((uint8_t *)header,_PacketSize); +} + +uint8_t DFRobot_ID809::responsePayload(void* buf){ + sRcmPacketHeader_t header; + uint16_t dataLen,dataCount,cks; + uint8_t ch,ret; + int16_t type; + type = readPrefix(&header); + if(type == 1){ + LDBG("--recv timeout---"); + _error = eErrorRecvTimeout; + return ERR_ID809; + } + pRcmPacketHeader_t packet; + if(type == RCM_TYPE){ //Structure of response packet, fixed 26 bytes: 10(frame header)+14(data)+2(CKS) + packet = (pRcmPacketHeader_t)malloc(sizeof(sRcmPacketHeader_t)+14+2); + dataLen = 14+2; //Length of data+CKS + if(packet == NULL){ + LDBG(""); + while(1); + } + }else{ //Structure of response data packet, unfixed length: 10(frame header)+(LEN-2)(data)+2(CKS) + packet = (pRcmPacketHeader_t)malloc(sizeof(sRcmPacketHeader_t)+header.LEN); + dataLen = header.LEN; //Length of data+CKS + if(packet == NULL){ + LDBG(""); + while(1); + } + } + memcpy(packet, &header, 10); + dataCount = readN(packet->payload, dataLen); + cks = packet->payload[dataLen-2]+(packet->payload[dataLen-1]<<8); + ret = (header.RET&0xFF); + _error = (eError_t)ret; + if(ret != ERR_SUCCESS){ + ret = ERR_ID809; + }else if(dataLen != dataCount){ + LDBG("--recvRspPacket length error---"); + _error = eErrorRecvLength; + ret = ERR_ID809; + }else if(getRcmCKS(packet) != cks){ + LDBG("--recvRspPacket cks error---"); + _error = eErrorRecvCks; + ret = ERR_ID809; + }else{ + LDBG("--recvRspPacket OK---"); + memcpy(buf, packet->payload, dataLen); + } + free(packet); + packet = NULL; + return ret; +} + +uint16_t DFRobot_ID809::readPrefix( pRcmPacketHeader_t header ){ + uint8_t ch,ret; + typedef enum{ + RECV_HEADER_INIT, + RECV_HEADER_AA, + RECV_HEADER_A5, + RECV_HEADER_OK + }eRecvHeaderState; + eRecvHeaderState state = RECV_HEADER_INIT; + while(state != RECV_HEADER_OK){ //Can judge the received command packet and command data packet prefix at the same time + if(readN(&ch, 1) != 1){ + ret = 1; + return ret; + } + if((ch == 0xAA) && (state == RECV_HEADER_INIT)){ + state = RECV_HEADER_AA; + continue; + }else if((ch == 0xA5) && (state == RECV_HEADER_INIT)){ + state = RECV_HEADER_A5; + continue; + }else if((ch == 0x55) && (state == RECV_HEADER_AA)){ + state = RECV_HEADER_OK; + ret = RCM_TYPE; + continue; + }else if((ch == 0x5A) && (state == RECV_HEADER_A5)){ + state = RECV_HEADER_OK; + ret = DATA_TYPE; + continue; + }else{ + state = RECV_HEADER_INIT; + if(ch == 0xAA){ + state = RECV_HEADER_AA; + }else if(ch == 0xA5){ + state = RECV_HEADER_A5; + } + } + } + if(ret == RCM_TYPE){ + header->PREFIX = RCM_PREFIX_CODE; + }else if(ret == DATA_TYPE){ + header->PREFIX = RCM_DATA_PREFIX_CODE; + } + readN(&header->SID, 1); + readN(&header->DID, 1); + readN(&header->RCM, 2); + readN(&header->LEN, 2); + readN(&header->RET, 2); + return ret; +} + +size_t DFRobot_ID809::readN(void* buffer, size_t len){ + size_t offset = 0,left = len; + uint8_t *buf = (uint8_t*)buffer; + long long curr = millis(); + while(left){ + if(s->available()){ + buf[offset++] = s->read(); + left--; + } + if(millis() - curr > 5000){ + LDBG("----------!!!!!!!!!recv timeout----------"); + break; + } + } + return offset; +} + +uint16_t DFRobot_ID809::getCmdCKS(pCmdPacketHeader_t packet){ + uint16_t cks = 0xFF; + cks += packet->SID; + cks += packet->DID; + cks += packet->CMD&0xFF; + cks += packet->CMD>>8; + cks += packet->LEN&0xFF; + cks += packet->LEN>>8; + if(packet->LEN > 0){ + uint8_t *p = packet->payload; + for(uint16_t i = 0; i < packet->LEN; i++){ + cks += p[i]; + } + } + return cks&0xFFFF; +} + +uint16_t DFRobot_ID809::getRcmCKS(pRcmPacketHeader_t packet){ + uint16_t cks = 0xFF; + cks += packet->SID; + cks += packet->DID; + cks += packet->RCM&0xFF; + cks += packet->RCM>>8; + cks += packet->LEN&0xFF; + cks += packet->LEN>>8; + cks += packet->RET&0xFF; + cks += packet->RET>>8; + if(packet->LEN > 0){ + uint8_t *p = packet->payload; + for(uint16_t i = 0; i < packet->LEN-2; i++){ + cks += p[i]; + } + } + return cks&0xFFFF; +} + +const DFRobot_ID809::sErrorDescription_t DFRobot_ID809::errorDescriptionsTable[]={ + {eErrorSuccess, "Command processed successfully"}, + {eErrorFail, "Command processing failed"}, + {eErrorVerify, "1:1 comparison failed"}, + {eErrorIdentify, "Comparison with all fingerprints failed"}, + {eErrorTmplEmpty, "No fingerprint in designated ID"}, + {eErrorTmplNotEmpty, "Designated ID has fingerprint"}, + {eErrorAllTmplEmpty, "Module unregistered fingerprint"}, + {eErrorEmptyIDNoexist, "No registerable ID here"}, + {eErrorBrokenIDNoexist, "No broken fingerprint"}, + {eErrorInvalidTmplData, "Invalid desingated fingerprint data"}, + {eErrorDuplicationID, "The fingerprint has been registered"}, + {eErrorBadQuality, "Poor quality fingerprint image"}, + {eErrorMergeFail, "Fingerprint synthesis failed"}, + {eErrorNotAuthorized, "Communication password not authorized"}, + {eErrorMemory, "External Flash burning error"}, + {eErrorInvalidTmplNo, "Invalid designated ID"}, + {eErrorInvalidParam, "Incorrect parameter"}, + {eErrorTimeOut, "Acquisition timeout"}, + {eErrorGenCount, "Invalid number of fingerprint synthesis"}, + {eErrorInvalidBufferID, "Incorrect Buffer ID value"}, + {eErrorFPNotDetected, "No fingerprint input into fingerprint reader"}, + {eErrorFPCancel, "Command cancelled"}, + {eErrorRecvLength, "Wrong data length"}, + {eErrorRecvCks, "Wrong data check code"}, + {eErrorGatherOut, "Exceed upper limit of acquisition times"}, + {eErrorRecvTimeout,"Data reading timeout"} +}; + +String DFRobot_ID809::getErrorDescription() +{ + for(int i=0;i<sizeof(errorDescriptionsTable)/sizeof(errorDescriptionsTable[0]);i++){ + if(_error == errorDescriptionsTable[i].error){ + return errorDescriptionsTable[i].description; + } + } + return ""; +} + diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/DFRobot_ID809.h b/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/DFRobot_ID809.h new file mode 100644 index 0000000..acb9dfd --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/DFRobot_ID809.h @@ -0,0 +1,504 @@ + +/*! + * @file DFRobot_ID809.h + * @brief Define basic structure of DFRobot_ID809 class + * @n This is an library for capacitive fingerprint module + * @n Main functions: fingerprint image capturing, fingerprint comparison, fingerprint deletion + * @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com) + * @licence The MIT License (MIT) + * @author [Eddard](eddard.liu@dfrobot.com) + * @version V1.0 + * @date 2020-03-19 + * @get from https://www.dfrobot.com + * @url https://github.com/cdjq/DFRobot_ID809 + */ + +#ifndef _DFRobot_ID809_H +#define _DFRobot_ID809_H + +#if ARDUINO >= 100 +#include "Arduino.h" +#else +#include "WProgram.h" +#endif +#include <Wire.h> + +#include <stdint.h> + +//Open this macro to see the detailed running process of the program + +//#define ENABLE_DBG +#ifdef ENABLE_DBG +#define LDBG(...) if(dbg) {dbg->print("["); dbg->print(__FUNCTION__); dbg->print("(): "); dbg->print(__LINE__); dbg->print(" ] "); dbg->println(__VA_ARGS__);} +#else +#define LDBG(...) +#endif + +extern Stream *dbg; + + /* + Frame struct of command packet + */ +typedef struct{ + uint16_t PREFIX; + uint8_t SID; + uint8_t DID; + uint16_t CMD; + uint16_t LEN; + uint8_t payload[0]; +}__attribute__ ((packed)) sCmdPacketHeader_t, *pCmdPacketHeader_t; + + /* + Frame struct of response packet + */ +typedef struct{ + uint16_t PREFIX; + uint8_t SID; + uint8_t DID; + uint16_t RCM; + uint16_t LEN; + uint16_t RET; + uint8_t payload[0]; +}__attribute__ ((packed)) sRcmPacketHeader_t, *pRcmPacketHeader_t; + + + + +class DFRobot_ID809{ +public: + +//#define FINGERPRINT_CAPACITY 80 //Fingerprint module capacity +#define MODULE_SN_SIZE 16 //Module SN length + + +#define DELALL 0xFF //Delete all fingerprints + +#define CMD_PREFIX_CODE 0xAA55 //Command packet prefix code +#define RCM_PREFIX_CODE 0x55AA //Response packet prefix code +#define CMD_DATA_PREFIX_CODE 0xA55A //Command data packet prefix code +#define RCM_DATA_PREFIX_CODE 0x5AA5 //Response data packet prefix code + +#define CMD_TYPE 0xF0 //Command packet type +#define RCM_TYPE 0xF0 //Response packet type +#define DATA_TYPE 0x0F //Data packet type + +#define CMD_TEST_CONNECTION 0X0001 //Test connection +#define CMD_SET_PARAM 0X0002 //Set parameter +#define CMD_GET_PARAM 0X0003 //Read parameter +#define CMD_DEVICE_INFO 0X0004 //Read device information +#define CMD_SET_MODULE_SN 0X0008 //Set module serial number +#define CMD_GET_MODULE_SN 0X0009 //Read module serial number +#define CMD_ENTER_STANDBY_STATE 0X000C //Enter sleep mode +#define CMD_GET_IMAGE 0X0020 //Capture fingerprint image +#define CMD_FINGER_DETECT 0X0021 //Detect fingerprint + #define CMD_UP_IMAGE_CODE 0X0022 //Upload fingerprint image to host + #define CMD_DOWN_IMAGE 0X0023 //Download fingerprint image to module +#define CMD_SLED_CTRL 0X0024 //Control collector backlight +#define CMD_STORE_CHAR 0X0040 //Save fingerprint template data into fingerprint library +#define CMD_LOAD_CHAR 0X0041 //Read fingerprint in module and save it in RAMBUFFER temporarily + #define CMD_UP_CHAR 0X0042 //Upload the fingerprint template saved in RAMBUFFER to host + #define CMD_DOWN_CHAR 0X0043 //Download fingerprint template to module designated RAMBUFFER +#define CMD_DEL_CHAR 0X0044 //Delete fingerprint in specific ID range +#define CMD_GET_EMPTY_ID 0X0045 //Get the first registerable ID in specific ID range +#define CMD_GET_STATUS 0X0046 //Check if the designated ID has been registered +#define CMD_GET_BROKEN_ID 0X0047 //Check whether there is damaged data in fingerprint library of specific range +#define CMD_GET_ENROLL_COUNT 0X0048 //Get the number of registered fingerprints in specific ID range +#define CMD_GET_ENROLLED_ID_LIST 0X0049 //Get registered ID list +#define CMD_GENERATE 0X0060 //Generate template from the fingerprint images saved in IMAGEBUFFER temporarily +#define CMD_MERGE 0X0061 //Synthesize fingerprint template data +#define CMD_MATCH 0X0062 //Compare templates in 2 designated RAMBUFFER +#define CMD_SEARCH 0X0063 //1:N Recognition in specific ID range +#define CMD_VERIFY 0X0064 //Compare specific RAMBUFFER template with specific ID template in fingerprint library + +#define ERR_SUCCESS 0x00 //Command processed successfully +#define ERR_ID809 0xFF //error + + +public: + + typedef enum{ + eBreathing = 1, //Breathing + eFastBlink, //Quick blink + eKeepsOn, //On + eNormalClose, //Off + eFadeIn, //Fade in + eFadeOut, //Fade out + eSlowBlink //Slow blink + }eLEDMode_t; + + typedef enum{ + eLEDGreen = 1, //green + eLEDRed, //red + eLEDYellow, //yellow + eLEDBlue, //blue + eLEDCyan, //cyan + eLEDMagenta, //magenta + eLEDWhite //white + }eLEDColor_t; + + typedef enum{ + e9600bps = 1, + e19200bps, + e38400bps, + e57600bps, + e115200bps + }eDeviceBaudrate_t; + + typedef enum{ + eErrorSuccess = 0x00, //Command processed successfully + eErrorFail = 0x01, //Command processing failed + eErrorVerify = 0x10, //1:1 Templates comparison in specific ID failed + eErrorIdentify = 0x11, //1:N comparison has been made, no same templates here + eErrorTmplEmpty = 0x12, //No registered template in the designated ID + eErrorTmplNotEmpty = 0x13, //Template already exists in the specified ID + eErrorAllTmplEmpty = 0x14, //No registered Template + eErrorEmptyIDNoexist = 0x15, //No registerable Template ID + eErrorBrokenIDNoexist = 0x16, //No damaged Template + eErrorInvalidTmplData = 0x17, //The designated Template Data is invalid + eErrorDuplicationID = 0x18, //The fingerprint has been registered + eErrorBadQuality = 0x19, //Poor quality fingerprint image + eErrorMergeFail = 0x1A, //Template synthesis failed + eErrorNotAuthorized = 0x1B, //Communication password not authorized + eErrorMemory = 0x1C, //Error in exernal Flash burning + eErrorInvalidTmplNo = 0x1D, //The designated template ID is invalid + eErrorInvalidParam = 0x22, //Incorrect parameter has been used + eErrorTimeOut = 0x23, //Acquisition timeout + eErrorGenCount = 0x25, //Invalid number of fingerprint synthesis + eErrorInvalidBufferID = 0x26, //Wrong Buffer ID value + eErrorFPNotDetected = 0x28, //No fingerprint input into fingerprint reader + eErrorFPCancel = 0x41, //Command cancelled + eErrorRecvLength = 0x42, //Wrong length of recieved data + eErrorRecvCks = 0x43, //Wrong check code + eErrorGatherOut = 0x45, //Exceed upper limit of acquisition times + eErrorRecvTimeout = 0x46 //Communication timeout + }eError_t; + + typedef struct{ + /**< Gesture enumeration variable X */ + eError_t error; + /**< Description about the gesture enumeration variable X */ + const char * description; + }sErrorDescription_t; + +public: + DFRobot_ID809(); + ~DFRobot_ID809(); + + /** + * @brief Init communication port + * @param Software serial or hardware serial + * @return true or false + */ + bool begin(Stream &s_); + + /** + * @brief Test whether the module connection is ok + * @return true or false + */ + bool isConnected(); + + /** + * @brief Set module ID + * @param ID:1-255 + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setDeviceID(uint8_t deviceID); + + /** + * @brief Set module security level + * @param security level:1-5 + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setSecurityLevel(uint8_t securityLevel); + + /** + * @brief Set module fingerprint replication check (Check whether the fingperint has been registered when saving it) + * @param 1(ON) or 0(OFF) + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setDuplicationCheck(uint8_t duplicationCheck); + + /** + * @brief Set module baud rate + * @param Baudrate:in typedef enum eDeviceBaudrate_t + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setBaudrate(eDeviceBaudrate_t baudrate); + + /** + * @brief Set module self-learning function (Update fingeprint when fingerprint comparison succeeds) + * @param 1(ON) or 0(OFF) + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setSelfLearn(uint8_t selfLearn); + + /** + * @brief Read module ID + * @return IDå·:1-255 or ERR_ID809 + */ + uint8_t getDeviceID(); + + /** + * @brief Read module security level + * @return Security level:1-5 or ERR_ID809 + */ + uint8_t getSecurityLevel(); + + /** + * @brief Read module fingerprint replication check status + * @return Status:1(ON), 0(OFF) or ERR_ID809 + */ + uint8_t getDuplicationCheck(); + + /** + * @brief Read module baud rate + * @return Baudrate:in typedef enum eDEVICE_BAUDRATE_t or ERR_ID809 + */ + uint8_t getBaudrate(); + + /** + * @brief Read module self-learning function status + * @return Status:1(ON), 0(OFF) or ERR_ID809 + */ + uint8_t getSelfLearn(); + uint8_t getTemplate(uint16_t id,uint8_t * temp); + uint8_t downLoadTemplate(uint16_t id,uint8_t * temp); + uint8_t getFingerImage(uint8_t *image); + uint8_t downLoadImage(uint16_t id,uint8_t * temp); + uint8_t receiveImageData(uint8_t *image); + uint8_t getQuarterFingerImage(uint8_t *image); + uint8_t contrastTemplate(uint8_t *temp); + /** + * @brief Read device number + * @return Device number + */ + String getDeviceInfo(); + + /** + * @brief Set serial number + * @param String pointer + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setModuleSN(const char* SN); + /** + * @brief Read serial number + * @return Serial number + */ + String getModuleSN(); + + /** + * @brief Set LED + * @param mode:in typedef enum eLEDMode_t + * @param color:in typedef enum eLEDColor_t + * @param blink Count: 00 represents blinking all the time + * @This parameter will only be valid in mode eBreathing, eFastBlink, eSlowBlink + * @return 0(succeed) or ERR_ID809 + */ + uint8_t ctrlLED(eLEDMode_t mode,eLEDColor_t color,uint8_t blinkCount); + + /** + * @brief Detect if there is finger touched + * @return 1(Touched) or 0(No touch) + */ + uint8_t detectFinger(); + + /** + * @brief Get the first registerable ID + * @return Registerable ID or ERR_ID809 + */ + uint8_t getEmptyID(); + + /** + * @brief Check if the ID has been registered + * @return 0(Registered), 1(Unregistered) or ERR_ID809 + */ + uint8_t getStatusID(uint8_t ID); + + /** + * @brief Get the number of registered users + * @return Number of registered users or ERR_ID809 + */ + uint8_t getEnrollCount(); + + /** + * @brief Get registered user list + * @return 0(succeed) or ERR_ID809 + */ + uint8_t getEnrolledIDList(uint8_t* list); + + /** + * @brief Fingerprint acquisition + * @return 0(succeed) or ERR_ID809 + */ + uint8_t collectionFingerprint(uint16_t timeout,int ramNumber = -1); + + /** + * @brief Save fingerprint + * @param Fingerprint ID + * @return 0(succeed) or ERR_ID809 + */ + uint8_t storeFingerprint(uint8_t ID); + + /** + * @brief Delete fingerprint + * @param Delete ID or DELALL(delete all) + * @return 0(succeed) or ERR_ID809 + */ + uint8_t delFingerprint(uint8_t ID); + + /** + * @brief Match the fingerprint with all fingeprints + * @return Successfully matched fingerprint ID, 0(Matching failed) or ERR_ID809 + */ + uint8_t search(); + + /** + * @brief Match the fingerprint with specific fingerprint + * @return Successfully matched fingerprint ID, 0(Matching failed) or ERR_ID809 + */ + uint8_t verify(uint8_t ID); + + /** + * @brief Compare templates in two specific RamBuffers + * @param RamBuffer number + * @param RamBuffer number + * @return 0(succeed) or ERR_ID809 + */ + uint8_t match(uint8_t RamBufferID0, uint8_t RamBufferID1); + + /** + * @brief Get the number of damaged fingerprints + * @return Damaged fingerprint ID or ERR_ID809 + */ + uint8_t getBrokenQuantity(); + + /** + * @brief Get the first damaged fingerprint ID + * @return Damaged fingerprint ID or ERR_ID809 + */ + uint8_t getBrokenID(); + + /** + * @brief Take out fingerprint template, temporarily save into RamBuffer + * @param Fingerprint ID + * @param RamBuffer number 0-2 + * @return 0(succeed) or ERR_ID809 + */ + uint8_t loadFingerprint(uint8_t ID, uint8_t RamBufferID); + + /** + * @brief Enter Standby mode + * @return 0(succeed) or ERR_ID809 + */ + uint8_t enterStandbyState(); + + /** + * @brief Get error information + * @return Text description of error information + */ + String getErrorDescription(); + + bool setDbgSerial(Stream &s_){dbg = &s_; return true;} + uint16_t FINGERPRINT_CAPACITY = 80; +protected: + /** + * @brief Set parameter + * @param Data type+ data + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setParam(uint8_t* data); + + /** + * @brief Read parameter + * @param Data type + * @return data or ERR_ID809 + */ + uint8_t getParam(uint8_t* data); + + /** + * @brief Capture fingerprint image + * @return 0(succeed) or ERR_ID809 + */ + uint8_t getImage(); + + /** + * @brief Take image as template + * @param Ram Buffer number + * @return 0(succeed) or ERR_ID809 + */ + uint8_t generate(uint8_t RamBufferID); + + /** + * @brief Fingerprint synthesis + * @return 0(succeed) or ERR_ID809 + */ + uint8_t merge(); + + /** + * @brief Packing data frame + * @param Data type:CMD_TYPE or DATA_TYPE + * @param Command + * @param Data + * @param Length + * @return Data frame + */ + pCmdPacketHeader_t pack(uint8_t type, uint16_t cmd, const char *payload, uint16_t len); + + /** + * @brief Send data + * @param Data frame + */ + void sendPacket(pCmdPacketHeader_t header); + + /** + * @brief Read byte + * @param Pointer for saving data + * @param Length of data to be received + * @return Actual received data length + */ + size_t readN(void* buf_, size_t len); + + /** + * @brief Read frame header + * @param Frame header struct of response packet + * @return Response packet type:RCM_TYPE,DATA_TYPE or 1(reading timeout) + */ + uint16_t readPrefix( pRcmPacketHeader_t header ); + + /** + * @brief Read data + * @param Pointer for saving data + * @return 0(success) or ERR_ID809 + */ + uint8_t responsePayload(void* buf); + + /** + * @brief Get command packet CKS + * @param Command packet frame + * @return CKS + */ + uint16_t getCmdCKS(pCmdPacketHeader_t packet); + + /** + * @brief Get response packet CKS + * @param Response packet frame + * @return CKS + */ + uint16_t getRcmCKS(pRcmPacketHeader_t packet); + uint8_t store(uint8_t ID); + +private: + Stream *s; + uint8_t buf[20]; //For saving response packet data + pCmdPacketHeader_t sendHeader; + pRcmPacketHeader_t recHeader; + + static const sErrorDescription_t /*PROGMEM*/ errorDescriptionsTable[26]; //Error information list + + uint8_t _number = 0; //Fingerprint acquisistion times + uint8_t _state = 0; //Collect fingerprint state + eError_t _error; //Error code + uint16_t _PacketSize = 0; //Data packet length to be sent +}; + +#endif diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/library.json b/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/library.json new file mode 100644 index 0000000..c537b85 --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/DFRobot_ID809/library.json @@ -0,0 +1,4 @@ +{ + "name": "DFRobot_ID809", + "version": "0.0.0+20220728181242" +} \ No newline at end of file diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/.piopm b/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/.piopm new file mode 100644 index 0000000..bdcb7ef --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/.piopm @@ -0,0 +1 @@ +{"type": "library", "name": "SHA256", "version": "0.0.0+20220728181242", "spec": {"owner": null, "id": null, "name": "SHA256", "requirements": null, "uri": "file://lib/SHA256"}} \ No newline at end of file diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/library.json b/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/library.json new file mode 100644 index 0000000..a8c7ac2 --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/library.json @@ -0,0 +1,4 @@ +{ + "name": "SHA256", + "version": "0.0.0+20220728181242" +} \ No newline at end of file diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/sha256.c b/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/sha256.c new file mode 100644 index 0000000..cf66018 --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/sha256.c @@ -0,0 +1,169 @@ +/********************************************************************* +* Filename: sha256.c +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Implementation of the SHA-256 hashing algorithm. + SHA-256 is one of the three algorithms in the SHA2 + specification. The others, SHA-384 and SHA-512, are not + offered in this implementation. + Algorithm specification can be found here: + * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf + This implementation uses little endian byte order. +*********************************************************************/ + +/*************************** HEADER FILES ***************************/ +#include <stdlib.h> +#include <string.h> +//#include <memory.h> +#include "sha256.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/****************************** MACROS ******************************/ +#define ROTLEFT(a,b) (((a) << (b)) | ((a) >> (32-(b)))) +#define ROTRIGHT(a,b) (((a) >> (b)) | ((a) << (32-(b)))) + +#define CH(x,y,z) (((x) & (y)) ^ (~(x) & (z))) +#define MAJ(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) +#define EP0(x) (ROTRIGHT(x,2) ^ ROTRIGHT(x,13) ^ ROTRIGHT(x,22)) +#define EP1(x) (ROTRIGHT(x,6) ^ ROTRIGHT(x,11) ^ ROTRIGHT(x,25)) +#define SIG0(x) (ROTRIGHT(x,7) ^ ROTRIGHT(x,18) ^ ((x) >> 3)) +#define SIG1(x) (ROTRIGHT(x,17) ^ ROTRIGHT(x,19) ^ ((x) >> 10)) + +/**************************** VARIABLES *****************************/ +static const WORD k[64] = { + 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5, + 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174, + 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da, + 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967, + 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85, + 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070, + 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3, + 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +}; + +/*********************** FUNCTION DEFINITIONS ***********************/ +void sha256_transform(SHA256_CTX *ctx, const BYTE data[]) +{ + WORD a, b, c, d, e, f, g, h, i, j, t1, t2, m[64]; + + for (i = 0, j = 0; i < 16; ++i, j += 4) + m[i] = (data[j] << 24) | (data[j + 1] << 16) | (data[j + 2] << 8) | (data[j + 3]); + for ( ; i < 64; ++i) + m[i] = SIG1(m[i - 2]) + m[i - 7] + SIG0(m[i - 15]) + m[i - 16]; + + a = ctx->state[0]; + b = ctx->state[1]; + c = ctx->state[2]; + d = ctx->state[3]; + e = ctx->state[4]; + f = ctx->state[5]; + g = ctx->state[6]; + h = ctx->state[7]; + + for (i = 0; i < 64; ++i) { + t1 = h + EP1(e) + CH(e,f,g) + k[i] + m[i]; + t2 = EP0(a) + MAJ(a,b,c); + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + ctx->state[0] += a; + ctx->state[1] += b; + ctx->state[2] += c; + ctx->state[3] += d; + ctx->state[4] += e; + ctx->state[5] += f; + ctx->state[6] += g; + ctx->state[7] += h; +} + +void sha256_init(SHA256_CTX *ctx) +{ + ctx->datalen = 0; + ctx->bitlen = 0; + ctx->state[0] = 0x6a09e667; + ctx->state[1] = 0xbb67ae85; + ctx->state[2] = 0x3c6ef372; + ctx->state[3] = 0xa54ff53a; + ctx->state[4] = 0x510e527f; + ctx->state[5] = 0x9b05688c; + ctx->state[6] = 0x1f83d9ab; + ctx->state[7] = 0x5be0cd19; +} + +void sha256_update(SHA256_CTX *ctx, const BYTE data[], size_t len) +{ + WORD i; + + for (i = 0; i < len; ++i) { + ctx->data[ctx->datalen] = data[i]; + ctx->datalen++; + if (ctx->datalen == 64) { + sha256_transform(ctx, ctx->data); + ctx->bitlen += 512; + ctx->datalen = 0; + } + } +} + +void sha256_final(SHA256_CTX *ctx, BYTE hash[]) +{ + WORD i; + + i = ctx->datalen; + + // Pad whatever data is left in the buffer. + if (ctx->datalen < 56) { + ctx->data[i++] = 0x80; + while (i < 56) + ctx->data[i++] = 0x00; + } + else { + ctx->data[i++] = 0x80; + while (i < 64) + ctx->data[i++] = 0x00; + sha256_transform(ctx, ctx->data); + memset(ctx->data, 0, 56); + } + + // Append to the padding the total message's length in bits and transform. + ctx->bitlen += ctx->datalen * 8; + ctx->data[63] = ctx->bitlen; + ctx->data[62] = ctx->bitlen >> 8; + ctx->data[61] = ctx->bitlen >> 16; + ctx->data[60] = ctx->bitlen >> 24; + ctx->data[59] = ctx->bitlen >> 32; + ctx->data[58] = ctx->bitlen >> 40; + ctx->data[57] = ctx->bitlen >> 48; + ctx->data[56] = ctx->bitlen >> 56; + sha256_transform(ctx, ctx->data); + + // Since this implementation uses little endian byte ordering and SHA uses big endian, + // reverse all the bytes when copying the final state to the output hash. + for (i = 0; i < 4; ++i) { + hash[i] = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff; + hash[i + 4] = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff; + hash[i + 8] = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff; + hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff; + hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff; + hash[i + 20] = (ctx->state[5] >> (24 - i * 8)) & 0x000000ff; + hash[i + 24] = (ctx->state[6] >> (24 - i * 8)) & 0x000000ff; + hash[i + 28] = (ctx->state[7] >> (24 - i * 8)) & 0x000000ff; + } +} + +#ifdef __cplusplus +} +#endif diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/sha256.h b/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/sha256.h new file mode 100644 index 0000000..bc64c5f --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/SHA256/sha256.h @@ -0,0 +1,48 @@ + +/********************************************************************* +* Filename: sha256.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding SHA1 implementation. +*********************************************************************/ + +#ifndef SHA256_H +#define SHA256_H + +/*************************** HEADER FILES ***************************/ +#include <stddef.h> + +/****************************** MACROS ******************************/ +#define SHA256_BLOCK_SIZE 32 // SHA256 outputs a 32 byte digest + + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte +typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines + +typedef struct { + BYTE data[64]; + WORD datalen; + unsigned long long bitlen; + WORD state[8]; +} SHA256_CTX; + +/*********************** FUNCTION DECLARATIONS **********************/ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +void sha256_init(SHA256_CTX *ctx); +void sha256_update(SHA256_CTX *ctx, const BYTE data[], size_t len); +void sha256_final(SHA256_CTX *ctx, BYTE hash[]); + +#ifdef __cplusplus +} +#endif + + +#endif // SHA256_H diff --git a/TestSHA256/.pio/libdeps/Teensy_SHA/integrity.dat b/TestSHA256/.pio/libdeps/Teensy_SHA/integrity.dat new file mode 100644 index 0000000..45a846c --- /dev/null +++ b/TestSHA256/.pio/libdeps/Teensy_SHA/integrity.dat @@ -0,0 +1,2 @@ +lib/DFRobot_ID809 +lib/SHA256 \ No newline at end of file diff --git a/TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.cpp b/TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.cpp new file mode 100644 index 0000000..ddf2e99 --- /dev/null +++ b/TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.cpp @@ -0,0 +1,1089 @@ + +/*! + * @file DFRobot_ID809.cpp + * @brief Define the basic structure of DFRobot_ID809 class and the implementation of underlying methods + * @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com) + * @licence The MIT License (MIT) + * @author [Eddard](eddard.liu@dfrobot.com) + * @version V1.0 + * @date 2020-03-19 + * @get from https://www.dfrobot.com + * @url https://github.com/cdjq/DFRobot_ID809 + */ + +#include <DFRobot_ID809.h> +#include <Arduino.h> +#include <string.h> +#include <stdio.h> +Stream *dbg=NULL; + +DFRobot_ID809::DFRobot_ID809() + :s(NULL){ + +} + +DFRobot_ID809::~DFRobot_ID809(){ + +} + +bool DFRobot_ID809::begin(Stream &s_){ + s = &s_; + String str = getDeviceInfo(); + //Serial.println(str[str.length()-1]); + if(str[str.length()-1] == '4'){ + + FINGERPRINT_CAPACITY = 80 ; + + //Serial.println(str[str.length()-1]); + }else if(str[str.length()-1] == '3'){ + //Serial.println(str[str.length()-1]); + FINGERPRINT_CAPACITY = 200 ; + + } + + if(s == NULL){ + return false; + } + return true; +} + +bool DFRobot_ID809::isConnected(){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_TEST_CONNECTION, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + return true; + }else{ + return false; + } +} + +uint8_t DFRobot_ID809::setDeviceID(uint8_t deviceID){ + uint8_t data[5] = {0}; //data:1bytes Parameter Type+4bytes Parameter Value + data[1] = deviceID; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::setSecurityLevel(uint8_t securityLevel){ + uint8_t data[5] = {0}; + data[0] = 1; + data[1] = securityLevel; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::setDuplicationCheck(uint8_t duplicationCheck){ + uint8_t data[5] = {0}; + data[0] = 2; + data[1] = duplicationCheck; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::setBaudrate(eDeviceBaudrate_t baudrate){ + uint8_t data[5] = {0}; + data[0] = 3; + data[1] = baudrate; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::setSelfLearn(uint8_t selfLearn){ + uint8_t data[5] = {0}; + data[0] = 4; + data[1] = selfLearn; + uint8_t ret = setParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getDeviceID(){ + uint8_t data[1]; //data:1byte Parameter Type + data[0] = 0; + uint8_t ret = getParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getSecurityLevel(){ + uint8_t data[1]; + data[0] = 1; + uint8_t ret = getParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getDuplicationCheck(){ + uint8_t data[1]; + data[0] = 2; + uint8_t ret = getParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getBaudrate(){ + uint8_t data[1]; + data[0] = 3; + uint8_t ret = getParam(data); + return ret; +} + +uint8_t DFRobot_ID809::getSelfLearn(){ + uint8_t data[1]; + data[0] = 4; + uint8_t ret = getParam(data); + return ret; +} + +String DFRobot_ID809::getDeviceInfo(){ + char *data; + uint8_t result; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DEVICE_INFO, NULL, 0); + sendPacket(header); + free(header); + result = responsePayload(buf); + LDBG("result=");LDBG(result); + if(result != ERR_SUCCESS){ + return ""; + } + uint16_t dataLen = buf[0]+(buf[1]<<8)+1; + if((data = (char *)malloc(dataLen)) == NULL){ + LDBG("no memory!!!\r\n"); + while(1); + } + data[dataLen] = 0; + result = responsePayload(data); + LDBG("result=");LDBG(result); + String ret = String(data); + free(data); + return ret; +} + +uint8_t DFRobot_ID809::setModuleSN(const char* SN){ + char data[2]; + data[0] = MODULE_SN_SIZE; + if(strlen(SN) > MODULE_SN_SIZE){ + LDBG("The serial number exceeds 15 characters"); + return ERR_ID809; + } + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_SET_MODULE_SN, data, 2); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + return ERR_ID809; + } + header = pack(DATA_TYPE, CMD_SET_MODULE_SN, SN, MODULE_SN_SIZE); + sendPacket(header); + free(header); + ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getTemplate(uint16_t id,uint8_t * temp){ + char data[4]; + data[0] = id; + data[1] = 0; + data[2] = 0; + data[3] = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_LOAD_CHAR, data, 4); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + data[0] = 0; + data[1] = 0; + header = pack(CMD_TYPE, CMD_UP_CHAR, data, 2); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret == ERR_SUCCESS) { + ret = buf[0]; + } + ret = responsePayload(temp); + + return ret; +} + +uint8_t DFRobot_ID809::downLoadTemplate(uint16_t id,uint8_t * temp){ + + char data[4]; + data[0] = 0xf2; + data[1] = 3; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DOWN_CHAR, data, 2); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(0x3f2 +1); + tempData[0] = 0; + tempData[1] = 0; + memcpy(tempData+2,temp,0x3f0); + + + header = pack(DATA_TYPE, CMD_DOWN_CHAR, tempData, 0x3f2); + + sendPacket(header); + + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret == ERR_SUCCESS) { + ret = buf[0]; + } + free(tempData); + + + return store(id); +} + +uint8_t DFRobot_ID809::contrastTemplate(uint8_t *temp){ + + char data[4]; + data[0] = 0xf2; + data[1] = 3; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DOWN_CHAR, data, 2); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(0x3f2 +1); + tempData[0] = 2; + tempData[1] = 0; + memcpy(tempData+2,temp,0x3f0); + + + header = pack(DATA_TYPE, CMD_DOWN_CHAR, tempData, 0x3f2); + + sendPacket(header); + + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret == ERR_SUCCESS) { + ret = buf[0]; + } + free(tempData); + data[0] = 0; + data[1] = 0; + data[2] = 2; + data[3] = 0; + header = pack(CMD_TYPE, CMD_MATCH, data, 4); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ret; + } + return ret; + +} +uint8_t DFRobot_ID809::getFingerImage(uint8_t *image) +{ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_IMAGE, NULL, 0); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + + char data[1]; + data[0] = 0; + header = pack(CMD_TYPE, CMD_UP_IMAGE_CODE, data, 1); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(500 +1); + for(uint8_t i=0;i<52;i++){ + + ret = responsePayload(tempData); + if(i == 51) + memcpy(image+i*496,tempData+2,304); + else + memcpy(image+i*496,tempData+2,496); + } + free(tempData); +} +uint8_t DFRobot_ID809::getQuarterFingerImage(uint8_t *image){ + + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_IMAGE, NULL, 0); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + + char data[1]; + data[0] = 1; + header = pack(CMD_TYPE, CMD_UP_IMAGE_CODE, data, 1); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(500 +1); + for(uint8_t i=0;i<13;i++){ + + ret = responsePayload(tempData); + if(i == 12) + memcpy(image+i*496,tempData+2,448); + else + memcpy(image+i*496,tempData+2,496); + } + free(tempData); + +} +uint8_t DFRobot_ID809::downLoadImage(uint16_t id,uint8_t * temp) +{ + char data[4]; + data[0] = 0xa0; + data[1] = 0; + data[2] = 0xa0; + data[3] = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DOWN_IMAGE, data, 4); + sendPacket(header); + free(header); + + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + char *tempData= (char *)malloc(500); + for(uint8_t i =0 ;i<52;i++){ + tempData[0] = i; + tempData[1] = 0; + if(i == 51){ + memcpy(tempData+2,temp+i*496,304); + header = pack(DATA_TYPE, CMD_DOWN_IMAGE, tempData, 306); + }else{ + memcpy(tempData+2,temp+i*496,496); + header = pack(DATA_TYPE, CMD_DOWN_IMAGE, tempData, 498); + } + sendPacket(header); + + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + + } + free(tempData); + + data[0] = 0; + data[1] = 0; + header = pack(CMD_TYPE, CMD_GENERATE, data, 2); + sendPacket(header); + free(header); + + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + if(ret != ERR_SUCCESS) { + // return ERR_ID809; + } + return store(id); + +} + +uint8_t DFRobot_ID809::receiveImageData(uint8_t * image){ + + + + uint8_t ret = responsePayload(image); + if(ret != ERR_SUCCESS) { + return ERR_ID809; + } + +} +String DFRobot_ID809::getModuleSN(){ + char *data; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_MODULE_SN, NULL, 0); + sendPacket(header); + free(header); + uint8_t result = responsePayload(buf); + LDBG("result=");LDBG(result); + if(result != ERR_SUCCESS){ + return ""; + } + uint16_t dataLen = buf[0]+(buf[1]<<8)+1; + if((data = (char *)malloc(dataLen)) == NULL){ + LDBG("no memory!!!\r\n"); + while(1); + } + data[dataLen] = 0; + result = responsePayload(data); + LDBG("result=");LDBG(result); + String ret = String(data); + free(data); + return ret; +} + +uint8_t DFRobot_ID809::ctrlLED(eLEDMode_t mode,eLEDColor_t color,uint8_t blinkCount){ + char data[4] = {0}; + if(FINGERPRINT_CAPACITY == 80){ + data[0] = mode; + data[2] = data[1] = color; + data[3] = blinkCount; + }else{ + if(mode == 1){ + data[0] = 2; + } else if(mode == 2){ + data[0] = 4; + } else if(mode == 3){ + data[0] = 1; + } else if(mode == 4){ + data[0] = 0; + } else if(mode == 5){ + data[0] = 3; + } + if(color == eLEDGreen){ + data[2] = data[1] = 0x84; + }else if(color == eLEDRed){ + data[2] = data[1] = 0x82; + }else if(color == eLEDYellow){ + data[2] = data[1] = 0x86; + }else if(color == eLEDBlue){ + data[2] = data[1] = 0x81; + }else if(color == eLEDCyan){ + data[2] = data[1] = 0x85; + }else if(color == eLEDMagenta){ + data[2] = data[1] = 0x83; + }else { + data[2] = data[1] = 0x87; + } + } + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_SLED_CTRL, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::detectFinger(){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_FINGER_DETECT, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getEmptyID(){ + char data[4] = {0}; + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; //80 fingerprints at most, default to full range + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_EMPTY_ID, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getStatusID(uint8_t ID){ + char data[2] = {0}; + data[0] = ID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_STATUS, data, 2); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getEnrollCount(){ + char data[4] = {0}; + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_ENROLL_COUNT, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +#define getID(A, V) (A[0 + V/8] & (0x01 << (V & 0x07))) +uint8_t DFRobot_ID809::getEnrolledIDList(uint8_t* list) +{ + char *data; + uint8_t i = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_ENROLLED_ID_LIST, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + uint16_t dataLen = buf[0]+(buf[1]<<8); + if((data = (char *)malloc(dataLen)) == NULL){ + LDBG("no memory!!!\r\n"); + while(1); + } + ret = responsePayload(data); + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + ret = ERR_ID809; + }else{ + for(uint16_t j = 0; j < (dataLen*8); j++){ + if(getID(data, j) != 0){ + list[i] = j; + i++; + } + } + } + free(data); + return ret; +} + +uint8_t DFRobot_ID809::storeFingerprint(uint8_t ID){ + char data[4] = {0}; + uint8_t ret; + ret = merge(); + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + return ERR_ID809; + } + _number = 0; + data[0] = ID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_STORE_CHAR, data, 4); + sendPacket(header); + free(header); + ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; + +} +uint8_t DFRobot_ID809::store(uint8_t ID){ + + + char data[4] = {0}; + uint8_t ret; + LDBG("ret="); + LDBG(ret); + data[0] = ID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_STORE_CHAR, data, 4); + sendPacket(header); + free(header); + ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + return ret; +} +uint8_t DFRobot_ID809::delFingerprint(uint8_t ID) +{ + char data[4] = {0}; + if(ID == DELALL) { + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; + } else { + data[0] = data[2] = ID; + } + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_DEL_CHAR, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret="); + LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::search(){ + if(_state == 1){ + char data[6] = {0}; + data[2] = 1; + data[4] = FINGERPRINT_CAPACITY; + _number = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_SEARCH, data, 6); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + }else{ + ret = 0; + } + return ret; + } + return 0; +} + +uint8_t DFRobot_ID809::verify(uint8_t ID){ + if(_state == 1){ + char data[4] = {0}; + data[0] = ID; + _number = 0; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_VERIFY, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + }else{ + ret = 0; + } + return ret; + } + return 0; +} + +uint8_t DFRobot_ID809::match(uint8_t RamBufferID0, uint8_t RamBufferID1){ + char data[4] = {0}; + data[0] = RamBufferID0; + data[2] = RamBufferID1; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_MATCH, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + }else{ + ret = 0; + } + return ret; +} + +uint8_t DFRobot_ID809::getBrokenQuantity(){ + char data[4] = {0}; + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_BROKEN_ID, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getBrokenID(){ + char data[4] = {0}; + data[0] = 1; + data[2] = FINGERPRINT_CAPACITY; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_BROKEN_ID, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[2]; + } + return ret; +} + +uint8_t DFRobot_ID809::loadFingerprint(uint8_t ID, uint8_t RamBufferID){ + char data[4] = {0}; + data[0] = ID; + data[2] = RamBufferID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_LOAD_CHAR, data, 4); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::enterStandbyState(){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_ENTER_STANDBY_STATE, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::setParam(uint8_t* data){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_SET_PARAM, (const char *)data, 5); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::getParam(uint8_t* data){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_PARAM, (const char *)data, 1); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + if(ret == ERR_SUCCESS){ + ret = buf[0]; + } + return ret; +} + +uint8_t DFRobot_ID809::getImage(){ + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GET_IMAGE, NULL, 0); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::collectionFingerprint(uint16_t timeout,int ramNumber){ //Collect fingerprint + uint16_t i = 0; + uint8_t ret; + if(ramNumber == -1){ + if(_number > 2){ + _error = eErrorGatherOut; + LDBG("Exceed upper limit of acquisition times "); + return ERR_ID809; + } + } + while(!detectFinger()){ + if(timeout != 0){ + delay(10); + if(++i > timeout*10){ + _error = eErrorTimeOut; + LDBG("Acquisition timeout "); + LDBG("ret=");LDBG(ret); + _state = 0; + return ERR_ID809; + } + } + } + ret = getImage(); + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + _state = 0; + return ERR_ID809; + } + if(ramNumber != -1){ + ret = generate(ramNumber); + } else{ + ret = generate(_number); + } + LDBG("ret=");LDBG(ret); + if(ret != ERR_SUCCESS){ + _state = 0; + return ERR_ID809; + } + _number++; + _state = 1; + return ret; +} + +uint8_t DFRobot_ID809::generate(uint8_t RamBufferID){ + char data[2] = {0}; + data[0] = RamBufferID; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_GENERATE, (const char *)data, 2); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +uint8_t DFRobot_ID809::merge(){ + char data[3] = {0}; + data[2] = _number; + pCmdPacketHeader_t header = pack(CMD_TYPE, CMD_MERGE, data, 3); + sendPacket(header); + free(header); + uint8_t ret = responsePayload(buf); + LDBG("ret=");LDBG(ret); + return ret; +} + +pCmdPacketHeader_t DFRobot_ID809::pack(uint8_t type, uint16_t cmd, const char *payload, uint16_t len){ + pCmdPacketHeader_t header; + uint16_t cks=0; + uint16_t dataLen; + if(type == CMD_TYPE){ //Structure of command packet, fixed 26 bytes:10(frame header)+14(data)+2(CKS) + if((header = (pCmdPacketHeader_t)malloc(sizeof(sCmdPacketHeader_t)+16+2)) == NULL){ + return NULL; + } + header->PREFIX = CMD_PREFIX_CODE; + for(int i=0;i<16;i++){ + header->payload[i] = 0; + } + dataLen = 16; //Length of data to be replicated + }else{ //Structure of command data packet, unfixed length:10(frame header)+LEN(data)+2(CKS) + if((header = (pCmdPacketHeader_t)malloc(sizeof(sCmdPacketHeader_t)+len+2)) == NULL){ + return NULL; + } + header->PREFIX = CMD_DATA_PREFIX_CODE; + dataLen = len; //Length of data to be replicated + } + header->SID = 0; + header->DID = 0; + header->CMD = cmd; + header->LEN = len; + if(len){ + memcpy(header->payload, payload, len); + } + cks = getCmdCKS(header); + memcpy(&header->payload[dataLen],&cks,2); + _PacketSize = sizeof(sCmdPacketHeader_t) + dataLen +2; + return header; +} + + +void DFRobot_ID809::sendPacket(pCmdPacketHeader_t header){ + s->write((uint8_t *)header,_PacketSize); +} + +uint8_t DFRobot_ID809::responsePayload(void* buf){ + sRcmPacketHeader_t header; + uint16_t dataLen,dataCount,cks; + uint8_t ch,ret; + int16_t type; + type = readPrefix(&header); + if(type == 1){ + LDBG("--recv timeout---"); + _error = eErrorRecvTimeout; + return ERR_ID809; + } + pRcmPacketHeader_t packet; + if(type == RCM_TYPE){ //Structure of response packet, fixed 26 bytes: 10(frame header)+14(data)+2(CKS) + packet = (pRcmPacketHeader_t)malloc(sizeof(sRcmPacketHeader_t)+14+2); + dataLen = 14+2; //Length of data+CKS + if(packet == NULL){ + LDBG(""); + while(1); + } + }else{ //Structure of response data packet, unfixed length: 10(frame header)+(LEN-2)(data)+2(CKS) + packet = (pRcmPacketHeader_t)malloc(sizeof(sRcmPacketHeader_t)+header.LEN); + dataLen = header.LEN; //Length of data+CKS + if(packet == NULL){ + LDBG(""); + while(1); + } + } + memcpy(packet, &header, 10); + dataCount = readN(packet->payload, dataLen); + cks = packet->payload[dataLen-2]+(packet->payload[dataLen-1]<<8); + ret = (header.RET&0xFF); + _error = (eError_t)ret; + if(ret != ERR_SUCCESS){ + ret = ERR_ID809; + }else if(dataLen != dataCount){ + LDBG("--recvRspPacket length error---"); + _error = eErrorRecvLength; + ret = ERR_ID809; + }else if(getRcmCKS(packet) != cks){ + LDBG("--recvRspPacket cks error---"); + _error = eErrorRecvCks; + ret = ERR_ID809; + }else{ + LDBG("--recvRspPacket OK---"); + memcpy(buf, packet->payload, dataLen); + } + free(packet); + packet = NULL; + return ret; +} + +uint16_t DFRobot_ID809::readPrefix( pRcmPacketHeader_t header ){ + uint8_t ch,ret; + typedef enum{ + RECV_HEADER_INIT, + RECV_HEADER_AA, + RECV_HEADER_A5, + RECV_HEADER_OK + }eRecvHeaderState; + eRecvHeaderState state = RECV_HEADER_INIT; + while(state != RECV_HEADER_OK){ //Can judge the received command packet and command data packet prefix at the same time + if(readN(&ch, 1) != 1){ + ret = 1; + return ret; + } + if((ch == 0xAA) && (state == RECV_HEADER_INIT)){ + state = RECV_HEADER_AA; + continue; + }else if((ch == 0xA5) && (state == RECV_HEADER_INIT)){ + state = RECV_HEADER_A5; + continue; + }else if((ch == 0x55) && (state == RECV_HEADER_AA)){ + state = RECV_HEADER_OK; + ret = RCM_TYPE; + continue; + }else if((ch == 0x5A) && (state == RECV_HEADER_A5)){ + state = RECV_HEADER_OK; + ret = DATA_TYPE; + continue; + }else{ + state = RECV_HEADER_INIT; + if(ch == 0xAA){ + state = RECV_HEADER_AA; + }else if(ch == 0xA5){ + state = RECV_HEADER_A5; + } + } + } + if(ret == RCM_TYPE){ + header->PREFIX = RCM_PREFIX_CODE; + }else if(ret == DATA_TYPE){ + header->PREFIX = RCM_DATA_PREFIX_CODE; + } + readN(&header->SID, 1); + readN(&header->DID, 1); + readN(&header->RCM, 2); + readN(&header->LEN, 2); + readN(&header->RET, 2); + return ret; +} + +size_t DFRobot_ID809::readN(void* buffer, size_t len){ + size_t offset = 0,left = len; + uint8_t *buf = (uint8_t*)buffer; + long long curr = millis(); + while(left){ + if(s->available()){ + buf[offset++] = s->read(); + left--; + } + if(millis() - curr > 5000){ + LDBG("----------!!!!!!!!!recv timeout----------"); + break; + } + } + return offset; +} + +uint16_t DFRobot_ID809::getCmdCKS(pCmdPacketHeader_t packet){ + uint16_t cks = 0xFF; + cks += packet->SID; + cks += packet->DID; + cks += packet->CMD&0xFF; + cks += packet->CMD>>8; + cks += packet->LEN&0xFF; + cks += packet->LEN>>8; + if(packet->LEN > 0){ + uint8_t *p = packet->payload; + for(uint16_t i = 0; i < packet->LEN; i++){ + cks += p[i]; + } + } + return cks&0xFFFF; +} + +uint16_t DFRobot_ID809::getRcmCKS(pRcmPacketHeader_t packet){ + uint16_t cks = 0xFF; + cks += packet->SID; + cks += packet->DID; + cks += packet->RCM&0xFF; + cks += packet->RCM>>8; + cks += packet->LEN&0xFF; + cks += packet->LEN>>8; + cks += packet->RET&0xFF; + cks += packet->RET>>8; + if(packet->LEN > 0){ + uint8_t *p = packet->payload; + for(uint16_t i = 0; i < packet->LEN-2; i++){ + cks += p[i]; + } + } + return cks&0xFFFF; +} + +const DFRobot_ID809::sErrorDescription_t DFRobot_ID809::errorDescriptionsTable[]={ + {eErrorSuccess, "Command processed successfully"}, + {eErrorFail, "Command processing failed"}, + {eErrorVerify, "1:1 comparison failed"}, + {eErrorIdentify, "Comparison with all fingerprints failed"}, + {eErrorTmplEmpty, "No fingerprint in designated ID"}, + {eErrorTmplNotEmpty, "Designated ID has fingerprint"}, + {eErrorAllTmplEmpty, "Module unregistered fingerprint"}, + {eErrorEmptyIDNoexist, "No registerable ID here"}, + {eErrorBrokenIDNoexist, "No broken fingerprint"}, + {eErrorInvalidTmplData, "Invalid desingated fingerprint data"}, + {eErrorDuplicationID, "The fingerprint has been registered"}, + {eErrorBadQuality, "Poor quality fingerprint image"}, + {eErrorMergeFail, "Fingerprint synthesis failed"}, + {eErrorNotAuthorized, "Communication password not authorized"}, + {eErrorMemory, "External Flash burning error"}, + {eErrorInvalidTmplNo, "Invalid designated ID"}, + {eErrorInvalidParam, "Incorrect parameter"}, + {eErrorTimeOut, "Acquisition timeout"}, + {eErrorGenCount, "Invalid number of fingerprint synthesis"}, + {eErrorInvalidBufferID, "Incorrect Buffer ID value"}, + {eErrorFPNotDetected, "No fingerprint input into fingerprint reader"}, + {eErrorFPCancel, "Command cancelled"}, + {eErrorRecvLength, "Wrong data length"}, + {eErrorRecvCks, "Wrong data check code"}, + {eErrorGatherOut, "Exceed upper limit of acquisition times"}, + {eErrorRecvTimeout,"Data reading timeout"} +}; + +String DFRobot_ID809::getErrorDescription() +{ + for(int i=0;i<sizeof(errorDescriptionsTable)/sizeof(errorDescriptionsTable[0]);i++){ + if(_error == errorDescriptionsTable[i].error){ + return errorDescriptionsTable[i].description; + } + } + return ""; +} + diff --git a/TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.h b/TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.h new file mode 100644 index 0000000..acb9dfd --- /dev/null +++ b/TestSHA256/lib/DFRobot_ID809/DFRobot_ID809.h @@ -0,0 +1,504 @@ + +/*! + * @file DFRobot_ID809.h + * @brief Define basic structure of DFRobot_ID809 class + * @n This is an library for capacitive fingerprint module + * @n Main functions: fingerprint image capturing, fingerprint comparison, fingerprint deletion + * @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com) + * @licence The MIT License (MIT) + * @author [Eddard](eddard.liu@dfrobot.com) + * @version V1.0 + * @date 2020-03-19 + * @get from https://www.dfrobot.com + * @url https://github.com/cdjq/DFRobot_ID809 + */ + +#ifndef _DFRobot_ID809_H +#define _DFRobot_ID809_H + +#if ARDUINO >= 100 +#include "Arduino.h" +#else +#include "WProgram.h" +#endif +#include <Wire.h> + +#include <stdint.h> + +//Open this macro to see the detailed running process of the program + +//#define ENABLE_DBG +#ifdef ENABLE_DBG +#define LDBG(...) if(dbg) {dbg->print("["); dbg->print(__FUNCTION__); dbg->print("(): "); dbg->print(__LINE__); dbg->print(" ] "); dbg->println(__VA_ARGS__);} +#else +#define LDBG(...) +#endif + +extern Stream *dbg; + + /* + Frame struct of command packet + */ +typedef struct{ + uint16_t PREFIX; + uint8_t SID; + uint8_t DID; + uint16_t CMD; + uint16_t LEN; + uint8_t payload[0]; +}__attribute__ ((packed)) sCmdPacketHeader_t, *pCmdPacketHeader_t; + + /* + Frame struct of response packet + */ +typedef struct{ + uint16_t PREFIX; + uint8_t SID; + uint8_t DID; + uint16_t RCM; + uint16_t LEN; + uint16_t RET; + uint8_t payload[0]; +}__attribute__ ((packed)) sRcmPacketHeader_t, *pRcmPacketHeader_t; + + + + +class DFRobot_ID809{ +public: + +//#define FINGERPRINT_CAPACITY 80 //Fingerprint module capacity +#define MODULE_SN_SIZE 16 //Module SN length + + +#define DELALL 0xFF //Delete all fingerprints + +#define CMD_PREFIX_CODE 0xAA55 //Command packet prefix code +#define RCM_PREFIX_CODE 0x55AA //Response packet prefix code +#define CMD_DATA_PREFIX_CODE 0xA55A //Command data packet prefix code +#define RCM_DATA_PREFIX_CODE 0x5AA5 //Response data packet prefix code + +#define CMD_TYPE 0xF0 //Command packet type +#define RCM_TYPE 0xF0 //Response packet type +#define DATA_TYPE 0x0F //Data packet type + +#define CMD_TEST_CONNECTION 0X0001 //Test connection +#define CMD_SET_PARAM 0X0002 //Set parameter +#define CMD_GET_PARAM 0X0003 //Read parameter +#define CMD_DEVICE_INFO 0X0004 //Read device information +#define CMD_SET_MODULE_SN 0X0008 //Set module serial number +#define CMD_GET_MODULE_SN 0X0009 //Read module serial number +#define CMD_ENTER_STANDBY_STATE 0X000C //Enter sleep mode +#define CMD_GET_IMAGE 0X0020 //Capture fingerprint image +#define CMD_FINGER_DETECT 0X0021 //Detect fingerprint + #define CMD_UP_IMAGE_CODE 0X0022 //Upload fingerprint image to host + #define CMD_DOWN_IMAGE 0X0023 //Download fingerprint image to module +#define CMD_SLED_CTRL 0X0024 //Control collector backlight +#define CMD_STORE_CHAR 0X0040 //Save fingerprint template data into fingerprint library +#define CMD_LOAD_CHAR 0X0041 //Read fingerprint in module and save it in RAMBUFFER temporarily + #define CMD_UP_CHAR 0X0042 //Upload the fingerprint template saved in RAMBUFFER to host + #define CMD_DOWN_CHAR 0X0043 //Download fingerprint template to module designated RAMBUFFER +#define CMD_DEL_CHAR 0X0044 //Delete fingerprint in specific ID range +#define CMD_GET_EMPTY_ID 0X0045 //Get the first registerable ID in specific ID range +#define CMD_GET_STATUS 0X0046 //Check if the designated ID has been registered +#define CMD_GET_BROKEN_ID 0X0047 //Check whether there is damaged data in fingerprint library of specific range +#define CMD_GET_ENROLL_COUNT 0X0048 //Get the number of registered fingerprints in specific ID range +#define CMD_GET_ENROLLED_ID_LIST 0X0049 //Get registered ID list +#define CMD_GENERATE 0X0060 //Generate template from the fingerprint images saved in IMAGEBUFFER temporarily +#define CMD_MERGE 0X0061 //Synthesize fingerprint template data +#define CMD_MATCH 0X0062 //Compare templates in 2 designated RAMBUFFER +#define CMD_SEARCH 0X0063 //1:N Recognition in specific ID range +#define CMD_VERIFY 0X0064 //Compare specific RAMBUFFER template with specific ID template in fingerprint library + +#define ERR_SUCCESS 0x00 //Command processed successfully +#define ERR_ID809 0xFF //error + + +public: + + typedef enum{ + eBreathing = 1, //Breathing + eFastBlink, //Quick blink + eKeepsOn, //On + eNormalClose, //Off + eFadeIn, //Fade in + eFadeOut, //Fade out + eSlowBlink //Slow blink + }eLEDMode_t; + + typedef enum{ + eLEDGreen = 1, //green + eLEDRed, //red + eLEDYellow, //yellow + eLEDBlue, //blue + eLEDCyan, //cyan + eLEDMagenta, //magenta + eLEDWhite //white + }eLEDColor_t; + + typedef enum{ + e9600bps = 1, + e19200bps, + e38400bps, + e57600bps, + e115200bps + }eDeviceBaudrate_t; + + typedef enum{ + eErrorSuccess = 0x00, //Command processed successfully + eErrorFail = 0x01, //Command processing failed + eErrorVerify = 0x10, //1:1 Templates comparison in specific ID failed + eErrorIdentify = 0x11, //1:N comparison has been made, no same templates here + eErrorTmplEmpty = 0x12, //No registered template in the designated ID + eErrorTmplNotEmpty = 0x13, //Template already exists in the specified ID + eErrorAllTmplEmpty = 0x14, //No registered Template + eErrorEmptyIDNoexist = 0x15, //No registerable Template ID + eErrorBrokenIDNoexist = 0x16, //No damaged Template + eErrorInvalidTmplData = 0x17, //The designated Template Data is invalid + eErrorDuplicationID = 0x18, //The fingerprint has been registered + eErrorBadQuality = 0x19, //Poor quality fingerprint image + eErrorMergeFail = 0x1A, //Template synthesis failed + eErrorNotAuthorized = 0x1B, //Communication password not authorized + eErrorMemory = 0x1C, //Error in exernal Flash burning + eErrorInvalidTmplNo = 0x1D, //The designated template ID is invalid + eErrorInvalidParam = 0x22, //Incorrect parameter has been used + eErrorTimeOut = 0x23, //Acquisition timeout + eErrorGenCount = 0x25, //Invalid number of fingerprint synthesis + eErrorInvalidBufferID = 0x26, //Wrong Buffer ID value + eErrorFPNotDetected = 0x28, //No fingerprint input into fingerprint reader + eErrorFPCancel = 0x41, //Command cancelled + eErrorRecvLength = 0x42, //Wrong length of recieved data + eErrorRecvCks = 0x43, //Wrong check code + eErrorGatherOut = 0x45, //Exceed upper limit of acquisition times + eErrorRecvTimeout = 0x46 //Communication timeout + }eError_t; + + typedef struct{ + /**< Gesture enumeration variable X */ + eError_t error; + /**< Description about the gesture enumeration variable X */ + const char * description; + }sErrorDescription_t; + +public: + DFRobot_ID809(); + ~DFRobot_ID809(); + + /** + * @brief Init communication port + * @param Software serial or hardware serial + * @return true or false + */ + bool begin(Stream &s_); + + /** + * @brief Test whether the module connection is ok + * @return true or false + */ + bool isConnected(); + + /** + * @brief Set module ID + * @param ID:1-255 + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setDeviceID(uint8_t deviceID); + + /** + * @brief Set module security level + * @param security level:1-5 + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setSecurityLevel(uint8_t securityLevel); + + /** + * @brief Set module fingerprint replication check (Check whether the fingperint has been registered when saving it) + * @param 1(ON) or 0(OFF) + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setDuplicationCheck(uint8_t duplicationCheck); + + /** + * @brief Set module baud rate + * @param Baudrate:in typedef enum eDeviceBaudrate_t + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setBaudrate(eDeviceBaudrate_t baudrate); + + /** + * @brief Set module self-learning function (Update fingeprint when fingerprint comparison succeeds) + * @param 1(ON) or 0(OFF) + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setSelfLearn(uint8_t selfLearn); + + /** + * @brief Read module ID + * @return IDå·:1-255 or ERR_ID809 + */ + uint8_t getDeviceID(); + + /** + * @brief Read module security level + * @return Security level:1-5 or ERR_ID809 + */ + uint8_t getSecurityLevel(); + + /** + * @brief Read module fingerprint replication check status + * @return Status:1(ON), 0(OFF) or ERR_ID809 + */ + uint8_t getDuplicationCheck(); + + /** + * @brief Read module baud rate + * @return Baudrate:in typedef enum eDEVICE_BAUDRATE_t or ERR_ID809 + */ + uint8_t getBaudrate(); + + /** + * @brief Read module self-learning function status + * @return Status:1(ON), 0(OFF) or ERR_ID809 + */ + uint8_t getSelfLearn(); + uint8_t getTemplate(uint16_t id,uint8_t * temp); + uint8_t downLoadTemplate(uint16_t id,uint8_t * temp); + uint8_t getFingerImage(uint8_t *image); + uint8_t downLoadImage(uint16_t id,uint8_t * temp); + uint8_t receiveImageData(uint8_t *image); + uint8_t getQuarterFingerImage(uint8_t *image); + uint8_t contrastTemplate(uint8_t *temp); + /** + * @brief Read device number + * @return Device number + */ + String getDeviceInfo(); + + /** + * @brief Set serial number + * @param String pointer + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setModuleSN(const char* SN); + /** + * @brief Read serial number + * @return Serial number + */ + String getModuleSN(); + + /** + * @brief Set LED + * @param mode:in typedef enum eLEDMode_t + * @param color:in typedef enum eLEDColor_t + * @param blink Count: 00 represents blinking all the time + * @This parameter will only be valid in mode eBreathing, eFastBlink, eSlowBlink + * @return 0(succeed) or ERR_ID809 + */ + uint8_t ctrlLED(eLEDMode_t mode,eLEDColor_t color,uint8_t blinkCount); + + /** + * @brief Detect if there is finger touched + * @return 1(Touched) or 0(No touch) + */ + uint8_t detectFinger(); + + /** + * @brief Get the first registerable ID + * @return Registerable ID or ERR_ID809 + */ + uint8_t getEmptyID(); + + /** + * @brief Check if the ID has been registered + * @return 0(Registered), 1(Unregistered) or ERR_ID809 + */ + uint8_t getStatusID(uint8_t ID); + + /** + * @brief Get the number of registered users + * @return Number of registered users or ERR_ID809 + */ + uint8_t getEnrollCount(); + + /** + * @brief Get registered user list + * @return 0(succeed) or ERR_ID809 + */ + uint8_t getEnrolledIDList(uint8_t* list); + + /** + * @brief Fingerprint acquisition + * @return 0(succeed) or ERR_ID809 + */ + uint8_t collectionFingerprint(uint16_t timeout,int ramNumber = -1); + + /** + * @brief Save fingerprint + * @param Fingerprint ID + * @return 0(succeed) or ERR_ID809 + */ + uint8_t storeFingerprint(uint8_t ID); + + /** + * @brief Delete fingerprint + * @param Delete ID or DELALL(delete all) + * @return 0(succeed) or ERR_ID809 + */ + uint8_t delFingerprint(uint8_t ID); + + /** + * @brief Match the fingerprint with all fingeprints + * @return Successfully matched fingerprint ID, 0(Matching failed) or ERR_ID809 + */ + uint8_t search(); + + /** + * @brief Match the fingerprint with specific fingerprint + * @return Successfully matched fingerprint ID, 0(Matching failed) or ERR_ID809 + */ + uint8_t verify(uint8_t ID); + + /** + * @brief Compare templates in two specific RamBuffers + * @param RamBuffer number + * @param RamBuffer number + * @return 0(succeed) or ERR_ID809 + */ + uint8_t match(uint8_t RamBufferID0, uint8_t RamBufferID1); + + /** + * @brief Get the number of damaged fingerprints + * @return Damaged fingerprint ID or ERR_ID809 + */ + uint8_t getBrokenQuantity(); + + /** + * @brief Get the first damaged fingerprint ID + * @return Damaged fingerprint ID or ERR_ID809 + */ + uint8_t getBrokenID(); + + /** + * @brief Take out fingerprint template, temporarily save into RamBuffer + * @param Fingerprint ID + * @param RamBuffer number 0-2 + * @return 0(succeed) or ERR_ID809 + */ + uint8_t loadFingerprint(uint8_t ID, uint8_t RamBufferID); + + /** + * @brief Enter Standby mode + * @return 0(succeed) or ERR_ID809 + */ + uint8_t enterStandbyState(); + + /** + * @brief Get error information + * @return Text description of error information + */ + String getErrorDescription(); + + bool setDbgSerial(Stream &s_){dbg = &s_; return true;} + uint16_t FINGERPRINT_CAPACITY = 80; +protected: + /** + * @brief Set parameter + * @param Data type+ data + * @return 0(succeed) or ERR_ID809 + */ + uint8_t setParam(uint8_t* data); + + /** + * @brief Read parameter + * @param Data type + * @return data or ERR_ID809 + */ + uint8_t getParam(uint8_t* data); + + /** + * @brief Capture fingerprint image + * @return 0(succeed) or ERR_ID809 + */ + uint8_t getImage(); + + /** + * @brief Take image as template + * @param Ram Buffer number + * @return 0(succeed) or ERR_ID809 + */ + uint8_t generate(uint8_t RamBufferID); + + /** + * @brief Fingerprint synthesis + * @return 0(succeed) or ERR_ID809 + */ + uint8_t merge(); + + /** + * @brief Packing data frame + * @param Data type:CMD_TYPE or DATA_TYPE + * @param Command + * @param Data + * @param Length + * @return Data frame + */ + pCmdPacketHeader_t pack(uint8_t type, uint16_t cmd, const char *payload, uint16_t len); + + /** + * @brief Send data + * @param Data frame + */ + void sendPacket(pCmdPacketHeader_t header); + + /** + * @brief Read byte + * @param Pointer for saving data + * @param Length of data to be received + * @return Actual received data length + */ + size_t readN(void* buf_, size_t len); + + /** + * @brief Read frame header + * @param Frame header struct of response packet + * @return Response packet type:RCM_TYPE,DATA_TYPE or 1(reading timeout) + */ + uint16_t readPrefix( pRcmPacketHeader_t header ); + + /** + * @brief Read data + * @param Pointer for saving data + * @return 0(success) or ERR_ID809 + */ + uint8_t responsePayload(void* buf); + + /** + * @brief Get command packet CKS + * @param Command packet frame + * @return CKS + */ + uint16_t getCmdCKS(pCmdPacketHeader_t packet); + + /** + * @brief Get response packet CKS + * @param Response packet frame + * @return CKS + */ + uint16_t getRcmCKS(pRcmPacketHeader_t packet); + uint8_t store(uint8_t ID); + +private: + Stream *s; + uint8_t buf[20]; //For saving response packet data + pCmdPacketHeader_t sendHeader; + pRcmPacketHeader_t recHeader; + + static const sErrorDescription_t /*PROGMEM*/ errorDescriptionsTable[26]; //Error information list + + uint8_t _number = 0; //Fingerprint acquisistion times + uint8_t _state = 0; //Collect fingerprint state + eError_t _error; //Error code + uint16_t _PacketSize = 0; //Data packet length to be sent +}; + +#endif diff --git a/TestSHA256/lib/SHA256/sha256.c b/TestSHA256/lib/SHA256/sha256.c new file mode 100644 index 0000000..cf66018 --- /dev/null +++ b/TestSHA256/lib/SHA256/sha256.c @@ -0,0 +1,169 @@ +/********************************************************************* +* Filename: sha256.c +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Implementation of the SHA-256 hashing algorithm. + SHA-256 is one of the three algorithms in the SHA2 + specification. The others, SHA-384 and SHA-512, are not + offered in this implementation. + Algorithm specification can be found here: + * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf + This implementation uses little endian byte order. +*********************************************************************/ + +/*************************** HEADER FILES ***************************/ +#include <stdlib.h> +#include <string.h> +//#include <memory.h> +#include "sha256.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/****************************** MACROS ******************************/ +#define ROTLEFT(a,b) (((a) << (b)) | ((a) >> (32-(b)))) +#define ROTRIGHT(a,b) (((a) >> (b)) | ((a) << (32-(b)))) + +#define CH(x,y,z) (((x) & (y)) ^ (~(x) & (z))) +#define MAJ(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) +#define EP0(x) (ROTRIGHT(x,2) ^ ROTRIGHT(x,13) ^ ROTRIGHT(x,22)) +#define EP1(x) (ROTRIGHT(x,6) ^ ROTRIGHT(x,11) ^ ROTRIGHT(x,25)) +#define SIG0(x) (ROTRIGHT(x,7) ^ ROTRIGHT(x,18) ^ ((x) >> 3)) +#define SIG1(x) (ROTRIGHT(x,17) ^ ROTRIGHT(x,19) ^ ((x) >> 10)) + +/**************************** VARIABLES *****************************/ +static const WORD k[64] = { + 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5, + 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174, + 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da, + 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967, + 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85, + 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070, + 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3, + 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +}; + +/*********************** FUNCTION DEFINITIONS ***********************/ +void sha256_transform(SHA256_CTX *ctx, const BYTE data[]) +{ + WORD a, b, c, d, e, f, g, h, i, j, t1, t2, m[64]; + + for (i = 0, j = 0; i < 16; ++i, j += 4) + m[i] = (data[j] << 24) | (data[j + 1] << 16) | (data[j + 2] << 8) | (data[j + 3]); + for ( ; i < 64; ++i) + m[i] = SIG1(m[i - 2]) + m[i - 7] + SIG0(m[i - 15]) + m[i - 16]; + + a = ctx->state[0]; + b = ctx->state[1]; + c = ctx->state[2]; + d = ctx->state[3]; + e = ctx->state[4]; + f = ctx->state[5]; + g = ctx->state[6]; + h = ctx->state[7]; + + for (i = 0; i < 64; ++i) { + t1 = h + EP1(e) + CH(e,f,g) + k[i] + m[i]; + t2 = EP0(a) + MAJ(a,b,c); + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + ctx->state[0] += a; + ctx->state[1] += b; + ctx->state[2] += c; + ctx->state[3] += d; + ctx->state[4] += e; + ctx->state[5] += f; + ctx->state[6] += g; + ctx->state[7] += h; +} + +void sha256_init(SHA256_CTX *ctx) +{ + ctx->datalen = 0; + ctx->bitlen = 0; + ctx->state[0] = 0x6a09e667; + ctx->state[1] = 0xbb67ae85; + ctx->state[2] = 0x3c6ef372; + ctx->state[3] = 0xa54ff53a; + ctx->state[4] = 0x510e527f; + ctx->state[5] = 0x9b05688c; + ctx->state[6] = 0x1f83d9ab; + ctx->state[7] = 0x5be0cd19; +} + +void sha256_update(SHA256_CTX *ctx, const BYTE data[], size_t len) +{ + WORD i; + + for (i = 0; i < len; ++i) { + ctx->data[ctx->datalen] = data[i]; + ctx->datalen++; + if (ctx->datalen == 64) { + sha256_transform(ctx, ctx->data); + ctx->bitlen += 512; + ctx->datalen = 0; + } + } +} + +void sha256_final(SHA256_CTX *ctx, BYTE hash[]) +{ + WORD i; + + i = ctx->datalen; + + // Pad whatever data is left in the buffer. + if (ctx->datalen < 56) { + ctx->data[i++] = 0x80; + while (i < 56) + ctx->data[i++] = 0x00; + } + else { + ctx->data[i++] = 0x80; + while (i < 64) + ctx->data[i++] = 0x00; + sha256_transform(ctx, ctx->data); + memset(ctx->data, 0, 56); + } + + // Append to the padding the total message's length in bits and transform. + ctx->bitlen += ctx->datalen * 8; + ctx->data[63] = ctx->bitlen; + ctx->data[62] = ctx->bitlen >> 8; + ctx->data[61] = ctx->bitlen >> 16; + ctx->data[60] = ctx->bitlen >> 24; + ctx->data[59] = ctx->bitlen >> 32; + ctx->data[58] = ctx->bitlen >> 40; + ctx->data[57] = ctx->bitlen >> 48; + ctx->data[56] = ctx->bitlen >> 56; + sha256_transform(ctx, ctx->data); + + // Since this implementation uses little endian byte ordering and SHA uses big endian, + // reverse all the bytes when copying the final state to the output hash. + for (i = 0; i < 4; ++i) { + hash[i] = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff; + hash[i + 4] = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff; + hash[i + 8] = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff; + hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff; + hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff; + hash[i + 20] = (ctx->state[5] >> (24 - i * 8)) & 0x000000ff; + hash[i + 24] = (ctx->state[6] >> (24 - i * 8)) & 0x000000ff; + hash[i + 28] = (ctx->state[7] >> (24 - i * 8)) & 0x000000ff; + } +} + +#ifdef __cplusplus +} +#endif diff --git a/TestSHA256/lib/SHA256/sha256.h b/TestSHA256/lib/SHA256/sha256.h new file mode 100644 index 0000000..bc64c5f --- /dev/null +++ b/TestSHA256/lib/SHA256/sha256.h @@ -0,0 +1,48 @@ + +/********************************************************************* +* Filename: sha256.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding SHA1 implementation. +*********************************************************************/ + +#ifndef SHA256_H +#define SHA256_H + +/*************************** HEADER FILES ***************************/ +#include <stddef.h> + +/****************************** MACROS ******************************/ +#define SHA256_BLOCK_SIZE 32 // SHA256 outputs a 32 byte digest + + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte +typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines + +typedef struct { + BYTE data[64]; + WORD datalen; + unsigned long long bitlen; + WORD state[8]; +} SHA256_CTX; + +/*********************** FUNCTION DECLARATIONS **********************/ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +void sha256_init(SHA256_CTX *ctx); +void sha256_update(SHA256_CTX *ctx, const BYTE data[], size_t len); +void sha256_final(SHA256_CTX *ctx, BYTE hash[]); + +#ifdef __cplusplus +} +#endif + + +#endif // SHA256_H diff --git a/TestSHA256/platformio.ini b/TestSHA256/platformio.ini new file mode 100644 index 0000000..4dc36fc --- /dev/null +++ b/TestSHA256/platformio.ini @@ -0,0 +1,9 @@ +[env:Teensy_SHA] + +platform = teensy +framework = arduino +board = teensy31 + +lib_deps = + lib/SHA256 + lib/DFRobot_ID809 diff --git a/TestSHA256/src/main.cpp b/TestSHA256/src/main.cpp new file mode 100644 index 0000000..7fc6a6b --- /dev/null +++ b/TestSHA256/src/main.cpp @@ -0,0 +1,178 @@ +#include <Arduino.h> +#include <sha256.h> +#include <DFRobot_ID809.h> + +// use serial3 as interface with fingerprint +// sensor . +#define FPSerial Serial3 + +// define buillt_in led +#define BUILTIN_LED 13 +// Collect the fingerprint 3 times +#define COLLECT_NUMBER 3 +#define SHA256_SIZE 32 + +/*------Funciotion dclarations----------*/ +// function to blink blitin_led +// to make sure that code is working +void blink_led(); + +/*------Global variables--------------*/ +DFRobot_ID809 fingerprint; +byte hash[SHA256_SIZE]; + +uint8_t ID, i, ret; +uint8_t temp[1008]; + +void compute_hash() { + + SHA256_CTX ctx; + sha256_init(&ctx); + sha256_update(&ctx, temp, sizeof(temp)); + sha256_final(&ctx, hash); + // SHA256 hasher; + // hasher.doUpdate(temp, sizeof(temp)); + // hasher.doFinal(hash); +} + +void setup() { + // config led_pin as output + pinMode(BUILTIN_LED, OUTPUT); + // use serial port to print the baud rate + Serial.begin(9600); + + FPSerial.begin(115200); + fingerprint.begin(FPSerial); + + while (fingerprint.isConnected() == false) { + Serial.println("Communication with the device failed"); + delay(1000); + } + + // fingerprint.getTemplate(1, temp); + + // for(uint8_t i=0; i<1008; i++) { + // Serial.print(i); + // Serial.print(": "); + // Serial.println(temp[i]); + // delay(100); + // } + + // compute_hash(); + // Serial.println("------------------------"); + // for (uint8_t i = 0; i < SHA256_SIZE; i++) { + // + // if (hash[i] < 0x10) { + // Serial.print('0'); + // } + // Serial.print(hash[i], HEX); + // Serial.print(" "); + // } + // Serial.println("------------------------"); +} + +void loop() { + + uint8_t ret = 0; + /*Set fingerprint LED ring mode, color, and number of blinks + Can be set as follows: + Parameter 1:<LEDMode> + eBreathing eFastBlink eKeepsOn eNormalClose + eFadeIn eFadeOut eSlowBlink + Parameter 2:<LEDColor> + eLEDGreen eLEDRed eLEDYellow eLEDBlue + eLEDCyan eLEDMagenta eLEDWhite + Parameter 3:<number of blinks> 0 represents blinking all the time + This parameter will only be valid in mode eBreathing, eFastBlink, eSlowBlink + */ + fingerprint.ctrlLED(/*LEDMode = */ fingerprint.eBreathing, + /*LEDColor = */ fingerprint.eLEDBlue, + /*blinkCount = */ 0); + Serial.println("Please press down your finger"); + /*Capture fingerprint image, Disable the collection timeout function + If succeed return 0, otherwise return ERR_ID809 + */ + if ((fingerprint.collectionFingerprint(/*timeout=*/0)) != ERR_ID809) { + /*Set fingerprint LED ring to quick blink in yellow 3 times*/ + fingerprint.ctrlLED(/*LEDMode = */ fingerprint.eFastBlink, + /*LEDColor = */ fingerprint.eLEDYellow, + /*blinkCount = */ 3); + Serial.println("Capturing succeeds"); + Serial.println("Please release your finger"); + /*Wait for finger to release + Return 1 when finger is detected, otherwise return 0 + */ + while (fingerprint.detectFinger()) + ; + + /*Compare the captured fingerprint with all the fingerprints in the + fingerprint library Return fingerprint ID(1-80) if succeed, return 0 when + failed + */ + ret = fingerprint.search(); + /*Compare the captured fingerprint with a fingerprint of specific ID + Return fingerprint ID(1-80) if succeed, return 0 when failed + */ + // ret = fingerprint.verify(/*Fingerprint ID = */1); + if (ret != 0) { + /*Set fingerprint LED ring to always ON in green */ + fingerprint.ctrlLED(/*LEDMode = */ fingerprint.eKeepsOn, + /*LEDColor = */ fingerprint.eLEDGreen, + /*blinkCount = */ 0); + Serial.print("Matching succeeds,ID="); + Serial.println(ret); + + fingerprint.getTemplate(ret, temp); + + // for(uint8_t i=0; i<1008; i++) { + // Serial.print(i); + // Serial.print(": "); + // Serial.println(temp[i]); + // delay(100); + // } + + compute_hash(); + Serial.println("--------------------"); + for (uint8_t i = 0; i < SHA256_SIZE; i++) { + + if (hash[i] < 0x10) { + Serial.print('0'); + } + Serial.print(hash[i], HEX); + Serial.print(" "); + } + Serial.println("---------------------"); + for (uint16_t i = 0; i < 1008; i++) { + Serial.print(temp[i], HEX); + Serial.print(" "); + } + + } else { + /*Set fingerprint LED ring to always ON in red*/ + fingerprint.ctrlLED(/*LEDMode = */ fingerprint.eKeepsOn, + /*LEDColor = */ fingerprint.eLEDRed, + /*blinkCount = */ 0); + Serial.println("Matching fails"); + } + } else { + Serial.println("Capturing fails"); + /*Get error code information*/ + // desc = fingerprint.getErrorDescription(); + // Serial.println(desc); + } + Serial.println("-----------------------------"); + delay(1000); + /*Set the fingerprint LED ring as blue breathing light*/ + fingerprint.ctrlLED(/*LEDMode = */ fingerprint.eBreathing, + /*LEDColor = */ fingerprint.eLEDBlue, + /*blinkCount = */ 0); + + blink_led(); +} + +void blink_led() { + digitalWrite(BUILTIN_LED, HIGH); + delay(500); + digitalWrite(BUILTIN_LED, LOW); + delay(500); +} -- GitLab