From 0fadcf5676cffaa61beb197478e8919912ecf6e8 Mon Sep 17 00:00:00 2001 From: Nick Leeman Date: Mon, 24 Jan 2022 17:15:40 +0100 Subject: [PATCH] upload code --- Securitas/.gitignore | 5 + Securitas/.vscode/extensions.json | 7 + Securitas/.vscode/settings.json | 7 + Securitas/include/README | 39 ++++ Securitas/lib/README | 46 ++++ Securitas/platformio.ini | 23 ++ Securitas/src/connections.h | 127 +++++++++++ Securitas/src/display.h | 71 ++++++ Securitas/src/fingersensor.h | 356 ++++++++++++++++++++++++++++++ Securitas/src/main.cpp | 23 ++ Securitas/src/passwords.h | 53 +++++ Securitas/test/README | 11 + SecuritasApp/go.mod | 32 +++ SecuritasApp/go.sum | 98 ++++++++ SecuritasApp/main.go | 252 +++++++++++++++++++++ securitas-bottom.stl | Bin 0 -> 26284 bytes securitas-casing.stl | Bin 0 -> 27884 bytes securitas-top.stl | Bin 0 -> 52684 bytes securitas.FCStd | Bin 0 -> 44764 bytes securitas.FCStd1 | Bin 0 -> 44854 bytes workspace.code-workspace | 21 ++ 21 files changed, 1171 insertions(+) create mode 100644 Securitas/.gitignore create mode 100644 Securitas/.vscode/extensions.json create mode 100644 Securitas/.vscode/settings.json create mode 100644 Securitas/include/README create mode 100644 Securitas/lib/README create mode 100644 Securitas/platformio.ini create mode 100644 Securitas/src/connections.h create mode 100644 Securitas/src/display.h create mode 100644 Securitas/src/fingersensor.h create mode 100644 Securitas/src/main.cpp create mode 100644 Securitas/src/passwords.h create mode 100644 Securitas/test/README create mode 100644 SecuritasApp/go.mod create mode 100644 SecuritasApp/go.sum create mode 100644 SecuritasApp/main.go create mode 100644 securitas-bottom.stl create mode 100644 securitas-casing.stl create mode 100644 securitas-top.stl create mode 100644 securitas.FCStd create mode 100644 securitas.FCStd1 create mode 100644 workspace.code-workspace diff --git a/Securitas/.gitignore b/Securitas/.gitignore new file mode 100644 index 0000000..89cc49c --- /dev/null +++ b/Securitas/.gitignore @@ -0,0 +1,5 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch diff --git a/Securitas/.vscode/extensions.json b/Securitas/.vscode/extensions.json new file mode 100644 index 0000000..0f0d740 --- /dev/null +++ b/Securitas/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ] +} diff --git a/Securitas/.vscode/settings.json b/Securitas/.vscode/settings.json new file mode 100644 index 0000000..22ba5ac --- /dev/null +++ b/Securitas/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "files.associations": { + "cstddef": "cpp", + "ranges": "cpp", + "functional": "cpp" + } +} \ No newline at end of file diff --git a/Securitas/include/README b/Securitas/include/README new file mode 100644 index 0000000..194dcd4 --- /dev/null +++ b/Securitas/include/README @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/Securitas/lib/README b/Securitas/lib/README new file mode 100644 index 0000000..6debab1 --- /dev/null +++ b/Securitas/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into executable file. + +The source code of each library should be placed in a an own separate directory +("lib/your_library_name/[here are source files]"). + +For example, see a structure of the following two libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/Securitas/platformio.ini b/Securitas/platformio.ini new file mode 100644 index 0000000..9778b2c --- /dev/null +++ b/Securitas/platformio.ini @@ -0,0 +1,23 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:wemos_d1_mini32] +platform = espressif8266 +board = d1_mini_pro +framework = arduino +lib_deps = + https://git.aterve.com/Frozenverse/SimpleSerialProtocol.git + https://git.aterve.com/Frozenverse/KeyValueEEPROM.git + adafruit/Adafruit Fingerprint Sensor Library@^2.0.7 + plerup/EspSoftwareSerial@^6.15.2 + adafruit/Adafruit GFX Library@^1.10.12 + adafruit/Adafruit SSD1306@^2.5.1 + adafruit/Adafruit BusIO@^1.10.1 + diff --git a/Securitas/src/connections.h b/Securitas/src/connections.h new file mode 100644 index 0000000..a2331ff --- /dev/null +++ b/Securitas/src/connections.h @@ -0,0 +1,127 @@ +#pragma once +#include +#include +#include +#include +#include + +#define SERIAL_PACKET_BUFFER_SIZE 25 + +namespace Connections { + void init(); + void handle(); + void sendPacket(char *id, char *type, char *data); + void onSerialPacket(Packet packet); + + long lastPacketTransmit = 0; + Packet serialPackets[SERIAL_PACKET_BUFFER_SIZE]; + SimpleSerialProtocol device; + + Packet *name_packet; +} + +void Connections::init() { + Display::drawStatus("Init serial: ..."); + + for (int i = 0; i < SERIAL_PACKET_BUFFER_SIZE; i++) { + serialPackets[i].id = "--"; + serialPackets[i].type = "--"; + serialPackets[i].data = "--"; + } + + Connections::device.init(Serial, 9600); + Display::drawStatus("Init serial: ok!"); + + Serial.print("!***!"); + delay(750); +} + +void Connections::handle() { + device.receivePackets(Connections::onSerialPacket); + + for (int i = 0; i < SERIAL_PACKET_BUFFER_SIZE; i++) { + if (!(strcmp(serialPackets[i].id, "--") == 0)) { + if ((millis() - lastPacketTransmit) > 500) { + device.sendPacket(serialPackets[i].id, serialPackets[i].type, serialPackets[i].data); + + serialPackets[i].id = "--"; + serialPackets[i].type = "--"; + serialPackets[i].data = "--"; + + lastPacketTransmit = millis(); + + break; + } + } + } +} + +void Connections::sendPacket(char *id, char *type, char *data) { + for (int i = 0; i < SERIAL_PACKET_BUFFER_SIZE; i++) { + if (strcmp(serialPackets[i].id, "--") == 0) { + serialPackets[i].id = id; + serialPackets[i].type = type; + serialPackets[i].data = data; + + break; + } + } +} + +void Connections::onSerialPacket(Packet packet) { + if (strcmp(packet.id, "test") == 0) { + Connections::sendPacket("received", "received", "received"); + } + + if (strcmp(packet.id, "passwords") == 0 && strcmp(packet.type, "available") == 0) { + char* passwords = (char*)Passwords::available(); + Connections::sendPacket("passwords", "available_passwords", passwords); + } + + if (strcmp(packet.id, "fingerprint") == 0 && strcmp(packet.type, "enroll") == 0) { + int id = atoi(packet.data); + bool status = FingerPrintSensor::enroll(id); + + if (status) { + + Connections::sendPacket("fingerprint", "auth_status", "valid"); + } else { + Connections::sendPacket("fingerprint", "auth_status", "invalid"); + } + // char* status = (char*)char(enroll_status); + Connections::sendPacket("fingerprint", "enroll_status", ""); + } + + if (strcmp(packet.id, "fingerprint") == 0 && strcmp(packet.type, "auth") == 0) { + int status = FingerPrintSensor::authenticate(); + if (status) { + Connections::sendPacket("fingerprint", "auth_status", "valid"); + Display::drawStatus("Ready!"); + FingerPrintSensor::color(2); + + } else { + Connections::sendPacket("fingerprint", "auth_status", "invalid"); + Display::drawStatus("Not authenticated!"); + FingerPrintSensor::color(1); + } + } + + if (strcmp(packet.id, "passwords") == 0 && strcmp(packet.type, "available") == 0) { + const char * data = Passwords::available(); + Connections::sendPacket("passwords", "available_passwords", (char*)data); + } + + if (strcmp(packet.id, "new_password") == 0) { + Passwords::store(packet.type, packet.data); + } + + if (strcmp(packet.id, "passwords") == 0 && strcmp(packet.type, "new_available") == 0) { + Passwords::setAvailable(packet.data); + } + + if (strcmp(packet.id, "passwords") == 0 && strcmp(packet.type, "load") == 0) { + const char* password = Passwords::get(packet.data); + // const char* password = "ds"; + Connections::sendPacket("passwords", "password", (char*)password); + } +} \ No newline at end of file diff --git a/Securitas/src/display.h b/Securitas/src/display.h new file mode 100644 index 0000000..b0bb9ff --- /dev/null +++ b/Securitas/src/display.h @@ -0,0 +1,71 @@ +#pragma once + +#include +#include +#include +#include + +#define SCREEN_RESET 0 // GPIO0 +#define SCREEN_ADDRESS 0x3C +#define SCREEN_WIDTH 128 // OLED display width, in pixels +#define SCREEN_HEIGHT 32 // OLED display height, in pixels + +namespace Display +{ + Adafruit_SSD1306 _display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, SCREEN_RESET); + + void init(); + void drawText(int x, int y, char* text); + void drawRectangle(int x, int y, int w, int h); + void drawStatus(char* status); +} + + +void Display::init() { + // Init screen bus + if(!_display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { + return; + } + + // Init screen buffer + _display.display(); + _display.clearDisplay(); + + Display::drawRectangle(0, 0, 128, 32); + Display::drawText(24, 3, "Securitas Mk 1"); + Display::drawText(8, 16, "Made by Nick Leeman"); + + delay(750); +} + +void Display::drawStatus(char* status) { + _display.clearDisplay(); + Display::drawRectangle(0, 0, 128, 32); + Display::drawText(3, 3, "Securitas Mk 1"); + Display::drawText(95, 3, "21:28"); + Display::drawText(3, 20, status); +} + +void Display::drawText(int x, int y, char* text) { + // Normal 1:1 pixel scale + _display.setTextSize(1); + + // Draw white text + _display.setTextColor(SSD1306_WHITE); + + // Start at top-left corner + _display.setCursor(x, y); + + // Use full 256 char 'Code Page 437' font + _display.cp437(true); + + // Write text + _display.printf(text); + + // Update buffer + _display.display(); +} + +void Display::drawRectangle(int x, int y, int w, int h) { + _display.drawRect(x, y, w, h, SSD1306_WHITE); +} \ No newline at end of file diff --git a/Securitas/src/fingersensor.h b/Securitas/src/fingersensor.h new file mode 100644 index 0000000..3646829 --- /dev/null +++ b/Securitas/src/fingersensor.h @@ -0,0 +1,356 @@ +#pragma once + +#include +#include + +namespace FingerPrintSensor +{ + SoftwareSerial fingerSensorSerial(12, 14); + Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerSensorSerial); + + bool authenticated = false; + + void init(); + bool enroll(int id); + bool authenticate(); + void color(int type); +} + +void FingerPrintSensor::init() { + Display::drawStatus("Init fingerprint: ..."); + + // set the data rate for the sensor serial port + finger.begin(57600); + delay(50); + + if (!finger.verifyPassword()) { + Display::drawStatus("Init fingerprint: err!"); + return; + } + + finger.getParameters(); + + Display::drawStatus("Init fingerprint: ok!"); + delay(750); +} + +bool FingerPrintSensor::enroll(int id) { + Display::drawStatus("Enrolling process"); + delay(1000); + + int status = -1; + + while (status != FINGERPRINT_OK) { + status = finger.getImage(); + + switch (status) { + case FINGERPRINT_OK: + Display::drawStatus("Image captured!"); + delay(1000); + break; + + case FINGERPRINT_NOFINGER: + Display::drawStatus("Place finger..."); + delay(250); + break; + + case FINGERPRINT_PACKETRECIEVEERR: + Display::drawStatus("Comms error..."); + delay(1000); + break; + + case FINGERPRINT_IMAGEFAIL: + Display::drawStatus("Image error!"); + delay(1000); + break; + + default: + Display::drawStatus("Unknown error!"); + delay(1000); + break; + } + } + + status = finger.image2Tz(1); + switch (status) { + case FINGERPRINT_OK: + Display::drawStatus("Image Converted!"); + delay(1000); + break; + + case FINGERPRINT_IMAGEMESS: + Display::drawStatus("Bad image quality!"); + delay(1000); + return false; + + case FINGERPRINT_PACKETRECIEVEERR: + Display::drawStatus("Comms error..."); + delay(1000); + return false; + + case FINGERPRINT_FEATUREFAIL: + Display::drawStatus("No features!"); + delay(1000); + return false; + + case FINGERPRINT_INVALIDIMAGE: + Display::drawStatus("Invalid features!"); + delay(1000); + return false; + + default: + Display::drawStatus("Unknown error!"); + delay(1000); + return false; + } + + status = 0; + while (status != FINGERPRINT_NOFINGER) { + status = finger.getImage(); + } + + + status = -1; + Display::drawStatus("Place finger again!"); + delay(1000); + + while (status != FINGERPRINT_OK) { + status = finger.getImage(); + + switch (status) { + case FINGERPRINT_OK: + Display::drawStatus("Image captured!"); + delay(1000); + break; + + case FINGERPRINT_NOFINGER: + Display::drawStatus("Place finger..."); + delay(250); + break; + + case FINGERPRINT_PACKETRECIEVEERR: + Display::drawStatus("Comms error..."); + delay(1000); + break; + + case FINGERPRINT_IMAGEFAIL: + Display::drawStatus("Image error!"); + delay(1000); + break; + + default: + Display::drawStatus("Unknown error!"); + delay(1000); + break; + } + } + + status = finger.image2Tz(2); + switch (status) { + case FINGERPRINT_OK: + Display::drawStatus("Image converted!"); + delay(1000); + break; + + case FINGERPRINT_IMAGEMESS: + Display::drawStatus("Bad image quality!"); + delay(1000); + return false; + + case FINGERPRINT_PACKETRECIEVEERR: + Display::drawStatus("Comms error..."); + delay(1000); + return false; + + case FINGERPRINT_FEATUREFAIL: + Display::drawStatus("No features!"); + delay(1000); + return false; + + case FINGERPRINT_INVALIDIMAGE: + Display::drawStatus("Invalid features!"); + delay(1000); + return false; + + default: + Display::drawStatus("Unknown error!"); + delay(1000); + return false; + } + + Display::drawStatus("Creating model..."); + delay(1000); + + status = finger.createModel(); + if (status == FINGERPRINT_OK) { + Display::drawStatus("Enroll match!"); + delay(1000); + } + + else if (status == FINGERPRINT_PACKETRECIEVEERR) { + Display::drawStatus("Comms error..."); + delay(1000); + return false; + } + + else if (status == FINGERPRINT_ENROLLMISMATCH) { + Display::drawStatus("Finger mismatch!"); + delay(1000); + return false; + } + + else { + Display::drawStatus("Unknown error!"); + delay(1000); + return false; + } + + Serial.print("ID "); Serial.println(id); + status = finger.storeModel(id); + if (status == FINGERPRINT_OK) { + Display::drawStatus("Enroll success!"); + delay(1000); + } + + else if (status == FINGERPRINT_PACKETRECIEVEERR) { + Display::drawStatus("Comms error..."); + delay(1000); + return false; + } + + else if (status == FINGERPRINT_BADLOCATION) { + Display::drawStatus("Invalid id!"); + delay(1000); + return false; + } + + else if (status == FINGERPRINT_FLASHERR) { + Display::drawStatus("Invalid flash!"); + delay(1000); + return false; + } + + else { + Display::drawStatus("Unknown error!"); + delay(1000); + return false; + } + + return true; +} + +bool FingerPrintSensor::authenticate() { + uint8_t status = finger.getImage(); + + while (status != FINGERPRINT_OK) + { + status = finger.getImage(); + switch (status) { + case FINGERPRINT_OK: + Display::drawStatus("Finger scanned!"); + delay(1000); + break; + + case FINGERPRINT_NOFINGER: + Display::drawStatus("Place finger..."); + delay(1000); + break; + + case FINGERPRINT_PACKETRECIEVEERR: + Display::drawStatus("Comms error..."); + delay(1000); + return false; + + case FINGERPRINT_IMAGEFAIL: + Display::drawStatus("Image error!"); + delay(1000); + return false; + + default: + Display::drawStatus("Unknown error!"); + delay(1000); + return false; + } + } + + + + // OK success! + + status = finger.image2Tz(); + switch (status) { + case FINGERPRINT_OK: + Display::drawStatus("Image converted!"); + delay(1000); + break; + + case FINGERPRINT_IMAGEMESS: + Display::drawStatus("Bad image quality!"); + delay(1000); + return false; + + case FINGERPRINT_PACKETRECIEVEERR: + Display::drawStatus("Comms error..."); + delay(1000); + return false; + + case FINGERPRINT_FEATUREFAIL: + Display::drawStatus("Invalid features!"); + delay(1000); + return false; + + case FINGERPRINT_INVALIDIMAGE: + Display::drawStatus("Invalid features!"); + delay(1000); + return false; + + default: + Display::drawStatus("Unknown error!"); + delay(1000); + return false; + } + + // OK converted! + status = finger.fingerSearch(); + if (status == FINGERPRINT_OK) { + Display::drawStatus("Fingerprint valid!"); + authenticated = true; + delay(1000); + return true; + } + + else if (status == FINGERPRINT_PACKETRECIEVEERR) { + Display::drawStatus("Comms error!"); + delay(1000); + return false; + } + + else if (status == FINGERPRINT_NOTFOUND) { + Display::drawStatus("No match found!"); + delay(1000); + return false; + } + + else { + Display::drawStatus("Unknown error!"); + delay(1000); + return false; + } +} + +void FingerPrintSensor::color(int type) { + switch (type) + { + case 0: + finger.LEDcontrol(FINGERPRINT_LED_OFF, 0, FINGERPRINT_LED_RED); + break; + + case 1: + finger.LEDcontrol(FINGERPRINT_LED_ON, 0, FINGERPRINT_LED_RED); + break; + + case 2: + finger.LEDcontrol(FINGERPRINT_LED_ON, 0, FINGERPRINT_LED_BLUE); + break; + } +} diff --git a/Securitas/src/main.cpp b/Securitas/src/main.cpp new file mode 100644 index 0000000..6c8ad69 --- /dev/null +++ b/Securitas/src/main.cpp @@ -0,0 +1,23 @@ +#include + +#include +#include +#include +#include + + +void setup() +{ + Display::init(); + Connections::init(); + Passwords::init(); + FingerPrintSensor::init(); + Connections::sendPacket("device", "init", "ready"); + + FingerPrintSensor::color(1); + Display::drawStatus("Not authenticated!"); +} + +void loop() { + Connections::handle(); +} \ No newline at end of file diff --git a/Securitas/src/passwords.h b/Securitas/src/passwords.h new file mode 100644 index 0000000..83fd7da --- /dev/null +++ b/Securitas/src/passwords.h @@ -0,0 +1,53 @@ +#pragma once +#include +#include +#include + +namespace Passwords +{ + void init(); + const char* available(); + void setAvailable(char * passwords); + void store(char* name, char* password); + const char* get(char* name); +} + +void Passwords::init() { + Display::drawStatus("Init Passwords..."); + KeyValueEEPROM.begin(); + + if(!KeyValueEEPROM.exists("stored-passwords")) { + KeyValueEEPROM.set("stored-passwords", ""); + } + + delay(750); +} + +const char* Passwords::available() { + if (FingerPrintSensor::authenticated) { + char * key = "stored-passwords"; + return KeyValueEEPROM.get(key); + } else { + return "-"; + } +} + +void Passwords::setAvailable(char * passwords) { + if (FingerPrintSensor::authenticated) { + KeyValueEEPROM.set("stored-passwords", passwords); + } +} + +void Passwords::store(char* name, char* password) { + if (FingerPrintSensor::authenticated) { + KeyValueEEPROM.set(name, password); + } +} + +const char* Passwords::get(char* name) { + if (FingerPrintSensor::authenticated) { + return KeyValueEEPROM.get(name, "--"); + } + + return "-"; +} \ No newline at end of file diff --git a/Securitas/test/README b/Securitas/test/README new file mode 100644 index 0000000..b94d089 --- /dev/null +++ b/Securitas/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Unit Testing and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/page/plus/unit-testing.html diff --git a/SecuritasApp/go.mod b/SecuritasApp/go.mod new file mode 100644 index 0000000..509267c --- /dev/null +++ b/SecuritasApp/go.mod @@ -0,0 +1,32 @@ +module frozenverse/securitas + +go 1.17 + +require fyne.io/fyne/v2 v2.1.2 + +require ( + github.com/creack/goselect v0.1.2 // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 // indirect + github.com/fsnotify/fsnotify v1.4.9 // indirect + github.com/go-gl/gl v0.0.0-20210813123233-e4099ee2221f // indirect + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20211024062804-40e447a793be // indirect + github.com/godbus/dbus/v5 v5.0.4 // indirect + github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 // indirect + github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 // indirect + github.com/stretchr/testify v1.7.0 // indirect + github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 + github.com/yuin/goldmark v1.3.8 // indirect + go.bug.st/serial v1.3.4 + golang.org/x/image v0.0.0-20200430140353-33d19683fad8 // indirect + golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect + golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf // indirect + golang.org/x/text v0.3.3 // indirect + gopkg.in/yaml.v2 v2.2.8 // indirect +) diff --git a/SecuritasApp/go.sum b/SecuritasApp/go.sum new file mode 100644 index 0000000..6b5cfef --- /dev/null +++ b/SecuritasApp/go.sum @@ -0,0 +1,98 @@ +fyne.io/fyne/v2 v2.1.2 h1:avp9CvLAUdvE7fDMtH1tVKyjxEWHWcpow6aI6L7Kvvw= +fyne.io/fyne/v2 v2.1.2/go.mod h1:p+E/Dh+wPW8JwR2DVcsZ9iXgR9ZKde80+Y+40Is54AQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I= +github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/goselect v0.1.2 h1:2DNy14+JPjRBgPzAd1thbQp4BSIihxcBf0IXhQXDRa0= +github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 h1:FDqhDm7pcsLhhWl1QtD8vlzI4mm59llRvNzrFg6/LAA= +github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3/go.mod h1:CzM2G82Q9BDUvMTGHnXf/6OExw/Dz2ivDj48nVg7Lg8= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/go-gl/gl v0.0.0-20210813123233-e4099ee2221f h1:s0O46d8fPwk9kU4k1jj76wBquMVETx7uveQD9MCIQoU= +github.com/go-gl/gl v0.0.0-20210813123233-e4099ee2221f/go.mod h1:wjpnOv6ONl2SuJSxqCPVaPZibGFdSci9HFocT9qtVYM= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20211024062804-40e447a793be h1:Z28GdQBfKOL8tNHjvaDn3wHDO7AzTRkmAXvHvnopp98= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20211024062804-40e447a793be/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff h1:W71vTCKoxtdXgnm1ECDFkfQnpdqAO00zzGXLA5yaEX8= +github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff/go.mod h1:wfqRWLHRBsRgkp5dmbG56SA0DmVtwrF5N3oPdI8t+Aw= +github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526/go.mod h1:UQkeMHVoNcyXYq9otUupF7/h/2tmHlhrS2zw7ZVvUqc= +github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lucor/goinfo v0.0.0-20210802170112-c078a2b0f08b/go.mod h1:PRq09yoB+Q2OJReAmwzKivcYyremnibWGbK7WfftHzc= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 h1:HunZiaEKNGVdhTRQOVpMmj5MQnGnv+e8uZNu3xFLgyM= +github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564/go.mod h1:afMbS0qvv1m5tfENCwnOdZGOF8RGR/FsZ7bvBxQGZG4= +github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 h1:m59mIOBO4kfcNCEzJNy71UkeF4XIx2EVmL9KLwDQdmM= +github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.3.8 h1:Nw158Q8QN+CPgTmVRByhVwapp8Mm1e2blinhmx4wx5E= +github.com/yuin/goldmark v1.3.8/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.bug.st/serial v1.3.4 h1:fMpfNEOsPQjYGZ3VHcs/xxsxoaPgbcjrm4YnMkcir3Y= +go.bug.st/serial v1.3.4/go.mod h1:z8CesKorE90Qr/oRSJiEuvzYRKol9r/anJZEb5kt304= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/SecuritasApp/main.go b/SecuritasApp/main.go new file mode 100644 index 0000000..b4f9ec8 --- /dev/null +++ b/SecuritasApp/main.go @@ -0,0 +1,252 @@ +package main + +import ( + "fmt" + "log" + "strings" + "time" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/app" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/dialog" + "fyne.io/fyne/v2/widget" + "go.bug.st/serial" + "go.bug.st/serial/enumerator" +) + +type Packet struct { + Id string + Type string + Data string +} + +var serialPort serial.Port +var isAuthenticated bool = false +var application = app.New() +var window = application.NewWindow("Securitas") + +var authBtn = widget.NewButton("Authenticate", func() { + go sendPacket("fingerprint", "auth", "-") +}) + +var loadPasswordsBtn = widget.NewButton("Load Passwords", func() { + go sendPacket("passwords", "available", "-") +}) + +var addPasswordBtn = widget.NewButton("Add password", func() { + nameEntry := widget.NewEntry() + passwordEntry := widget.NewEntry() + + var items = []*widget.FormItem{ + {Text: "Name", Widget: nameEntry}, + {Text: "Password", Widget: passwordEntry}, + } + + go dialog.ShowForm("New Password", "Create", "Cancel", items, func(status bool) { + if !status { + return + } + + sendPacket("new_password", nameEntry.Text, passwordEntry.Text) + time.Sleep(time.Millisecond * 750) + + newPasswordsArray := append(passwordSelector.Options, nameEntry.Text) + newPasswords := strings.Join(newPasswordsArray[:], "-") + sendPacket("passwords", "new_available", newPasswords) + time.Sleep(time.Millisecond * 750) + + go sendPacket("passwords", "available", "-") + }, window) +}) + +var enrollBtn = widget.NewButton("Enroll", func() { + go sendPacket("fingerprint", "enroll", "1") +}) + +var passwordSelector = widget.NewSelect([]string{}, func(value string) { + log.Println("Select set to", value) +}) + +var getPasswordBtn = widget.NewButton("Get", func() { + go sendPacket("passwords", "load", passwordSelector.Selected) +}) + +func main() { + window.Resize(fyne.NewSize(600, 400)) + window.CenterOnScreen() + window.SetFixedSize(true) + + titleText := widget.NewLabel("Password manager") + titleText.TextStyle.Bold = true + + txtResults := widget.NewTextGrid() + txtResults.ShowLineNumbers = true + + loadPasswordsBtn.Disable() + // addPasswordBtn.Disable() + enrollBtn.Disable() + + cntButtons := container.NewGridWithColumns(4, authBtn, loadPasswordsBtn, addPasswordBtn, enrollBtn) + cntSelection := container.NewGridWithColumns(2, passwordSelector, getPasswordBtn) + cntContent := container.NewGridWithRows(3, titleText, cntSelection, cntButtons) + + window.SetContent(cntContent) + + go handleSerial() + + window.ShowAndRun() +} + +func handleSerial() { + ports, err := enumerator.GetDetailedPortsList() + if err != nil { + log.Fatal(err) + } + if len(ports) == 0 { + fmt.Println("No serial ports found!") + return + } + for _, port := range ports { + fmt.Printf("Found port: %s\n", port.Name) + if port.IsUSB { + fmt.Printf(" USB ID %s:%s\n", port.VID, port.PID) + fmt.Printf(" USB serial %s\n", port.SerialNumber) + } + } + + fmt.Println("") + + for { + var device string = "/dev/ttyUSB0" + fmt.Println("Trying to connect to: ", device) + + mode := &serial.Mode{ + BaudRate: 9600, + } + + port, err := serial.Open(device, mode) + if err != nil { + log.Fatal(err) + time.Sleep(time.Second * 2) + } + + serialPort = port + + fmt.Println("Connected to: ", device) + fmt.Println("") + + reading := false + for { + data := "" + buffer := make([]byte, 512) + + for { + n, err := port.Read(buffer) + + if err != nil { + fmt.Printf("Error occured: %v", err.Error()) + break + } + + if n == 0 { + fmt.Println("\nEOF") + break + } + + if strings.Contains(string(buffer[:n]), "!***!") { + reading = true + data = "" + buffer = make([]byte, 1024) + } + + if !reading { + break + } + + data += string(buffer[:n]) + + if strings.Contains(string(buffer[:n]), "\n") { + fmt.Printf("%#v\n", data) + break + } + } + + if !reading { + continue + } + + data = strings.ReplaceAll(data, "\x00", "") + data = strings.ReplaceAll(data, "\xb4", "") + data = strings.ReplaceAll(data, "\xc3", "") + data = strings.ReplaceAll(data, "\r\n", "") + + pieces := strings.Split(data, "\xc4") + + var packet Packet + packet.Id = pieces[0] + packet.Type = pieces[1] + packet.Data = pieces[2] + + go handlePacket(&packet) + // fmt.Printf("%#v\n", data) + } + + // var newPacket Packet + // err = json.Unmarshal([]byte(`{\"id\":\"fingerprint_init\",\"type\":""\"found\",\"data\":\"true\",\"overflow\""":false}`), &newPacket) + // if err != nil { + // fmt.Println(err) + // } + } +} + +func sendPacket(pId string, pType string, pData string) { + n, err := serialPort.Write([]byte("\xb4" + pId + "\xc4" + pType + "\xc4" + pData + "\xc3\r\n")) + if err != nil { + log.Fatal(err) + } + + fmt.Println("-------- Send Packet --------") + fmt.Println("ID: ", pId) + fmt.Println("Type: ", pType) + fmt.Println("Data: ", pData) + fmt.Printf("Send %v bytes\n", n) +} + +func handlePacket(packet *Packet) { + fmt.Println("-------- New Packet --------") + fmt.Printf("ID: %#v\n", packet.Id) + fmt.Printf("Type: %#v\n", packet.Type) + fmt.Printf("Data: %#v\n", packet.Data) + + if packet.Id == "fingerprint" { + if packet.Type == "enroll_status" { + + } + + if packet.Type == "auth_status" { + if packet.Data == "valid" { + isAuthenticated = true + authBtn.Disable() + loadPasswordsBtn.Enable() + addPasswordBtn.Enable() + enrollBtn.Enable() + } else { + isAuthenticated = false + } + } + } + + if packet.Id == "passwords" { + if packet.Type == "available_passwords" { + if len(packet.Data) >= 1 { + passwordSelector.Options = strings.Split(packet.Data, "-") + } else { + var empty [0]string + passwordSelector.Options = empty[:] + } + + loadPasswordsBtn.Disable() + } + } +} diff --git a/securitas-bottom.stl b/securitas-bottom.stl new file mode 100644 index 0000000000000000000000000000000000000000..e221562129ad7f1de4ab83a046e723e96b19e108 GIT binary patch literal 26284 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 literal 0 HcmV?d00001 diff --git a/securitas-casing.stl b/securitas-casing.stl new file mode 100644 index 0000000000000000000000000000000000000000..ad93dd3cd48770e97ad2db34fbad7bbb0e0040d2 GIT binary patch literal 27884 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 literal 0 HcmV?d00001 diff --git a/securitas-top.stl b/securitas-top.stl new file mode 100644 index 0000000000000000000000000000000000000000..7f8ea7389670cd848a35ac32aba704df42fb14cc GIT binary patch literal 52684 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 B^f&+j literal 0 HcmV?d00001 diff --git a/securitas.FCStd b/securitas.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..7034d684837e66e83aba3f56b1a7a410e78e6e1b GIT binary patch literal 44764 zcmZ6RV{|QBx2|K`S+Q-~wr$%sR&3i&R&3k0ZQIGZ+50=^+8gyu>+?VBSR+7+FOcLI>q>7}Bklg=xauP?_1o6)kA5RMI6ea~k z;$~<6aD4Xb$vFwav#q`V9D2LCSAX}}r7iiM)Z)(h+YN^&x_tBZrDkXP+lu+!#vZlx zdLwe8ub5AVuOsr-51eWRhx_-Qql>5G{lm%39dJ|{XG89_@g;a{5I7$O_eTKNE!yqF z8sr|y!QE@i90YE7E@NvpZ`;iDi7~8@4f`v`Yiz(nmTtmu{g=cXiWctY3!d&P-#}k7 zo7=+1{jFXP?CuWcq*lAYXj{V6O?g`fu4*-E4Rl2^ABehEOtdz(KNY52^iuZLdf_ zvsgtHofT#k6Fw-vv0`-Vp5A%%o~PWxDPtbGkM>t+L<}&#thZnI%IbHJzV2}NnKxRT zk*Ql=}L8?Y|qWnDnKBrty zIuVLGBYn95Rer^&e)w!GZTE)5afe1Nv%w*FPX3~olUxJZ#F0i+N*I^t3CQFK91{?> z+ngl;vQCX`^||-^KASSV4s1xTC)03vRW_81Lf0*{(>Qh>t%FgiM3OtI7mF}Ass zj8FD)4wO$wYKLxn8C8Dz{(ff!2Y`z2(eq-00as&1mCCjxQmLk_U?H-LQNC4 zfYhr5^RE1Ldvx&<>tv?Dzceq^?Olm|pG<#v84Qm-CT3_a4jN|*K=)=iJvVmZ6eDZU z$A#<1a`K8InRQ?UA~ly4LyEsQvvtovXG18+DUpB);qzg~mc`2e=Iso%S^EgJ&*)x< zuZ8#0rtb$Mi1LgPjC;v|K|v`>QYK$VdQYy4k)Mdv6^IG}Sg(=O7Fn0ep;&G7WmeAlob;+ua^9Q&{z(J-d)(G~$6JQFh>iQF8hs8D% z68olL*G3@l{szKLbs!WyIaYz>vi%X9+mJ7KQ%&IM9(FMO1Bz$1j1kpU#emt*C|1lq zu8r)WymbI$n;=|#G7m@+?j;C@FwJ)OKbLSg{zh^pXPm4)42NkPZY@`<2)1UR;eDn~ zhh!MMk|9X|;jIB-VHcKMe%U=3_!U(5`=@h+pU%nt>Ab?rn-RkS7w;Mplb;=t>%V{b zu^9N5RDIhtoIKbM3)7v#ONN_n;*r20aFfdMJI(^#=H%&kY`)I8&W6^ ztL)Lo`#lM3_S35k1V8|r_U5$B7o<+noKAJgZ0XQwzTYo~nRbjT6&aC}JMMF<*fD^n zE15Z(!E+lf<;#zg{8`fA4RB8bg+5)*YTF0P`3qzhIA+SBgo(lvt|``agcJxC7`a-*57i7bl)J%Pnc9zf8bh!^%j z3rdgBIOb7Ms}K>m#C$EdL{OBJ3fb8B(KLvNB_wt`P>2m@S_Foy zK2*Y!C3cZvYsk$agO`vSgoe)`XoU4;3UKg~<0^3&am0PsMBMaLkoTnU<1#Ijkc{E@ z#dhFsUa*d74TSkaTFIsUf^qer%DBK#0^>RI9!OAfSQ^NzBQySKXX+A? zdeJzs3fkXrYm_04GzIB?8_xcZJ zHc{(w@lczJMn8~m&-Cq)dm7I1Vy~gy+t)s_vq{B6cUPjfcV_McI_Dm1KSHogzgYCN zTZx=eVF^YU6+lT4V0-?-VlwUF{vtY=w}p(*uu z#@5@4?JrG1ajRg&8?;)X!`9b0?5B7Ls*hB z1@1S01lPw4i6c*Wbr~Q7=2gUk?zWSnCEO9#F+W#Lb5+PN_;iSQ-Ux$u`HZbV&MJQy zlk>Y%!Y&T|mdRF0q7>p(V7cYg#YIqv(aypMwduf~T|nKe2s))m$~*cxfXdw&Q=~LH zps3Ub88*Yvfr#4yn@b0LsA*@U#zVI6Oe0hkDSkMN#E#KP{o{Yi;Zi%I! zojA!2zEV8jpGu;LQR%=u>{{>hAj^$okj4Bt;{tOc8PyUZtq{F;<==y$<)&%2Mhs^S zE%&6`o6uuz{zJj2LWTA1-sh4SV>>LY_Dmwc*^RzI;b>SQsq@)O?zK$AqWnChGQ@6Pi88!?YyOJ5^PDsQYhgAI(y^j%* z?x7So1k3VH4oRRKT~S@wIaVS#v$8xy^k7KfBY6W7l123VhJu@&dui3@MOjUfdpmLD zBkL zapF^)J^9|8rjdZjX)@aRM7$)pMz=ucwxV(4YE=ZBl!kRO%N#V2t>(4c8UP^ zv8I;TE+za%T=Dy#R^fzO;au~gFLoY{1)IQjba7!}Hp{3fi2L6=pX(H6wl9Xirki$!8@A zr=qJ9&261=%&*0NS-I}v$t&Quud6rXXDBEVPc_0U#W-fcWt=t#ZGA{NFPt+5UOq=& z&P(DiJ<&h`2ibe3tSRFRZzTr=7-&>Cbn=vRuHMs-+s%;E4Ui~+vw$Aigx_Z%4Q64M zkW8fHTamtU#Eo`fP6rC>{(P%Rc~7{oX8gNxecU){EFdM=h2`EngmmQIN&W~~gWs75 zx*Kv#z<=xwb@~kbDC{z3Daq}6$mz=U&64Gkjq{L`T1dvJU^*{{K_mn`WJ@)*PP=-N z&{Y6W8Czr0I1`DVE?NJ8DK3xiVc?W3nL}|{HY}p-M>jYoij#RZz(}H4@Jg1KZ@l*g z$+8m?Ve(IpL?>VD%LA8>7HgLeK#C-m8P{u#ix+k^|ZV{J8}pX z!5%MZU(W!aXULYRP?0I(@DqQw@zsxw54u#vEY3fhj})gkSPkko=et0X3HDJ^RvDbS=w zu87Ad*kl6LI#72cgW4!G<*12dJwIXe|#+pY&@L@5)TmY z4gp=);%8|0+dvkgyC%+06ry^I5X0@pvd6{55y1kX?V4Ed^(yr?QfNpk>@UK;oz#Af zc!>GJEq(&Qy{v?Q--n1F751>;w-4x>8iwyiQ4b*rklVloIW7E4(mlh67olVbO# zN`QfVoSjMr(w`aF3Mji$6%CF|(%q91|L{zYJTQJ(A*|WLLd|PDTwGO!LTtgVH|j}# zVKybGZa2l=FB<22NZ=8zV2kvfsw<@Fq%p9%UpXjZd(C8)Z4VvzQb(0H63Jh{ue}`C^3gM zuV|l$R0gTDB|{q0g)a%Z=&=Eix)3_Hqg3s>I$+!IwHzZi9lAPnyj}vWuE#A>r$z`p zXPzz$uw8hk2jq3Ob>PK_(z|QIX+^sn)M>qDOM}R(kWpliyodInMkCt?Q0UtF@*z|s zfav6D>d|z+nVhlh%jN8p2%*i6_#tV-%pvQ`*idVqR zP}bpFQDdc8{{pMU-&MLbVxuMp4zHdw=r4unQ@f)IJzkwh0hY9vYNyTQRNh(l59d}@ zSy;@oOsNvDw;rGMZeg>=1W1if&iVv1enrqgNUhTIA9IL9q1C|4P)BwE-Ax`y)*Lar zv7y2@L^c4bMWUxz+x=zE=M_uF{}Ar3i1Gw~d}%+o1|$uVEkjSt$gUIz3gFr(EJ6!m z$00!ynBp(FwxfXZ03T9qUp_wc;DjCg8=4*z@S1(Me<%z}Fw0+RI4oxNqR&K|!aR)Q z01AJ;IcFfAyIEx+!5XK+jp~>3I@pBjSUcnVNOM8@td}S_Rb&;_Tv~P-QtPOcfb|$o zAt`Ao?#Ff;eKG#Q@d09nIE~T9yo?YSdTa?6(xNAsL4<7pFob7QMuuU~6x?j27Yz?E@B}sph zdYkl$B20VH3HboqFoxn}RCd1lJE)OR^E+{GT;_uL-ZX#^FQqvZXz5jZQ51a!;yjFq zB7n`_cDqsgl=TO?+-wx0p$yc1uG{)C1%Jz0`(t^r`!!f#a#UG}oG7TGt!lEW-Ofz} z>~yj7;2czKshkySr|RX0H>viG>!{Xuwr;)|#U?-;6N#o%6WhYQAUtyRT3bYXMYCW= z<46+SyDf}n4f#JX+$l(98My%hGz+35(EUtcW7`F&!fFO9n_4dn5!uC^w0{sF1{&PY z9=lK*ZZ8(n$DryFFg&i_`8*q`OyY9@cmo`13_Nl49;|Zgn4GPG9 z*AM~o>QNyA+t_0PQTN0du^xEoVZL<7-*jnB?uHBR5N#H4BV5PfjYNP%^K$V%J<_3# zF7VtVw6rr_Vj>1jfqZvf(%c#B!+UfXT^i2gCDcca#`5Q-nYHzuodwv_CFe04yfYPS z8#mA?wn0Ym1+PH9H;g=nHm>08#|kRmg971D0wK0^WCX;YstWpp06~JOlKiEg6(cpV zf_QJ}c?_lai{RFg@kxJZ7QhEC>MQP*JIgNooX}>7w&n&b+m~03YxDz zE+6+yBr1my+s!P0M3&PLU)R$Lk3oG8~PkLcp11s_)Zauhy<>j!3s4r)M z-t(5>*Cm*&@?-GvMJE{9ZXuSw8+F^xJtQrW(CWS-ovHe?7@0Q^IJt5V;9o)q9W|$& zu@6Iw$jFhsVnjHFfqK!}Ww~p3HubvAbrd{@?NFVLP>iwgE|XN!3S_LC$WxMy3*CB0 ztSMu=m5E}!xCuuabPYkvb6snbQ@L*ryko0$c-0HYBtOGv0BaKB;z(WPrda!NE^fEv z_^^h=ey zY@q61uMSmR#(qZafD>uo! zz|tB`aDz3P_`07ih3X359|^w@y3PtTRrl?2+^JT}|C<$-T{CU-teFYZUluu)SIBsQ zK5=w*7TO!cx&P1b)23jV?OxO1c@am~l&y(P_dTsABupXq4Yer91fx<1i#zoChY$QH zJb36-7W5_-+`t#OJU33ln$p#X>N0>z#1H2B((+ES#F2*|CFjO>s~$dHy8&5_1>Ka~GPOG6hg)2HX91OZ0?ZP&Hk z&m89^ce{Z#-fAS{dMO$h7k?&TlRt0^vXhRvGeB!;9|FdbG-9(ge_pj(o}KK*T$ zKHrrYCHAZ+Ic-pvBlEH3*@)&)S^P)7TgF^|7z50#F8 z9#kCm9u_VmTpzbU~!>*&Z*>v=>yN;a>_9=9tQaY<|1dHpW9MMy; z`lG*?_NbK@Sm7(b0N4Bd*M4eC!6@2LYe3QUz{)yP_fk&02pNJ2?tXjyb?>KBeN4(C zhZ&hWTgF(G*JLFlc6pTlYJEdaUW$ZysJ0w~S$U4y`^TZurz=(p z8Sr@@#p4%+<{*Oai-JrUmVKknqQ<%xnWnB|jZq^MfmlfJ!LzPeJLQ|jLl zVRka|A)hsbu)KtZBEeKM#8OIM@bflOToN2lmwe?V{E-lZPj^0(?Hgi$gKl5TAPxEO z1$Fes)XiAf7jnhuUaA%DFg57|a50q`TVZEv1pi#Bbvrz@k*E*d=oN8c$8M+ZyxE?p z)IYC>r?983%c6|^d0C*@j#N)6P#qVTbAEhQL6oTvv>x^=dARt*KMnd(4J;_YSTOY$ zX#2dCzGN5-B)^};VTOp`hFry2#5XC1Z|5W1O%lpui{4{PzXA2(j#`|blquL~A6W)o z!3FVykTcGqUP2qtDP2-SBg;|<>qUg6ken+H=RS7h6QI%S-Mn5F{j7z)u3v&vbG1gD z%4=3hoRYDm3RSBmgS_^q4VpgtZ7)hpnIu@;1E3kDT`#8OlnL?SpajPoPp~JrONgGw zLmQUa3Ip^y^UUiRH5gLyMii-nOq!6&J*P~Pd}g2x7i!~$Fr>MZWbKv&O6E4hD!|4x z(~9O8)5|Gl4EGtYG?1#;z$xLOGn<1PI}~>C6)jVdh^ugkPUIzo8>-5vZ;St_cZ)`q zn^}T@D=nNB?WvY4h(eyeso3pI?;Z6g6C;^*G)MV?zn`q>Wx+J!8ln((klwQYG*U9! zxHMdXW*i|`pfXDplV$qVWWM6W)gwwgPCQ7&l~-ARJb1+3C4_*7lWr;}l%ZJ?+Xkk9 zN8%)})Ne<;8ZnRGiPq}kb+##~r1eDd%dL5xK82mqHubD_r$$ZHK8YTX8VH13hIeVn z{RvjZAV2+LXH$jQ?S%a^I>ha$g~1`OA=*H76LJw!F%h5I-JH^Gj1ipPP|fPa;8&mnMU(?ClbfbUhnsZ~CKQlEd`a%>SGkKV;{IngNazHn6Y| zN$*@DhZQX~p4w5N1e22yokLQ@s>nWmKyrp0v3vri!qT~5IFv<$aqFbiJ7{3(kmI_b zZ}xamEr@gBm59hh_W}*dQ=e(buTkYc>RFA%$vs zv+F#)ThmHJn-!Z%@(FL^!z=bBG$!A6AE>e!V1w}Y{Z#DBDl|yT?VQf^&iIk38_;iy z#{*CskD_-bp=V#~R*V`+TM!z!62X+8(jN*f~q_Yi20Bo z6m8ZuL8!%-!pLLP} zQra9z3i#SO+C+vS@3fefD#BQj(%;jKo`Z|R5`0QAAC5bKw_Xke+6*o|c*Yi^Q=Y3w z!0Ei=I%O>G{M$pqZ}%AUQtjgHlVr=L8m%(IdMv?Gf>loGt$nPZ=rWGcINk*!HL}+& z(zAwSqtO$@>*vQ2EQHZV|TkfHvTAB;R}F|Sjzaw!XSe*wJ&o1 zM->@?0p5SBr7@)hbmjS{imQNUJf`8FNAo$=98Vh+X{vn|E-8qox+mxzL|EgElT8@p z!P*M>AEDQ0;O=~kx4uMs-)tFz$q_p;w2FA(ZxZmu6n~24;^29{qeCB_;d+E=ZDBq~ zh1L7_=B9R$@JfFY*ttdNNWTl!%MjiZA&|4^;Q_u_;`x!MEpdKuO08)*aWph=Gnq1! z2SL09>aN9?i7rxY(=5-}?h04KWib1~I{paSZb|3ix)qsv25FgRal3VGR;=tR2qXQg zKmQ`zA!R`DyojkPF*WtH)5UNyNzB|*->o<1IWna3G(`!h0l$PnA zIL`yL#-hizpxC5}%Z=aB*cPkK8=%FHtWc6$)u~c^{>Z4qnwz4PtMARAC53F&T_^ua z+XE(8kS z=7axw7mmV@cRlt73R2SJ?EvG1c)}OS_jiRAYlYn<~FKATRk8^#HfxJ#JZ=t|a~GZDi6mvof?^Pwxm zcSJ>itR3|gI%mmt8dXVF;-Bgt(V|atKdnTvE63NTl8q&1hPUKyg4<(teM4TxT5dK^ zS~L?lDIT<3VCjtRyTKOzt6q}bPqRLwS30&KM=w+_SDv6MlgMiiOPJHTR>^=#4d4L< z6N;l>XJUYW{B8ja>K?nQa_6QAlc;7~H0qzrxj|qe{f5q^fnOs*^baeto z;I)}7Yq&(3x~NobWW)#NA3io1W^P7rpGx zX?rpG2|>8FxEo_WGLGQ_Kyw3#&mhG7q9siB|rgs#OZG&Elas^O%W!z&GfAF?8p+Z z5Av;|*m=_T{_ZD1f^oD-UGh&R`zOtBOpP$XXbuZVf^QBDI+SzlIcSor--@zj2wn0i zwg^Z_pyNkEoP{Z^=#oZL{3xcD<@5{j71X)j5j)iyBEG>pGE3VTmOw1^EO@+{Y>>8G zG=OfKKM9weh(tp+hcbr?mr?xb?*!-kc^Rc8lA&6Y309P?UvRvGs9&trY=gNmKX&vx z&@&%me1mO#Vv!V{5X^Cgf^MQqqCn#u07 zT)KU=KJO%8MBUlU{x#xb5h7721?Ik82H^Kt{*>ly0lMTev_bPg@GKVirm*PkrTfAB*i zhTBFclKmIW2IN`DL8XzjrCg|5D;VVW^*5;d>~~!Yo*f;`lQj-@2R>tV7qu-}r-!3j z_W}RjQrYpk4OBb%a5mHm6ik^TEd_BXKUFWFgb$CoZM^BW%f`n^6p#N+A;;M_Jb~_` zEc?;C!*x3Jq)k6bk$U(fQP=p5j<0(Lo6=ORKSiltQkIxxsz*RsOaf#&E}t16Sl7Wp zJp>x96IJH%CHrdo0(5QW{D5(!_;cInZ+G1K)rhqD$_M)}C3BJ!pY zB@itXgLMrr2`LKbBoITTXj+sMb?KPZgvlE%@=+xa$(hyUx4T8ic8h+b#F1b4|40XQo@*6!KR$D& zCHZ-Q7@rUyn&?Ke^d-ulS=TkFD;j(&4EAk8?Y%HVXP~X!N0gIsqdZsee%t0 z0S5AegWl19+~f7NFF!03B?$F{$+BD!ioWL`^|1U`J!+;y~%xG}$??0WUw z?faCCZ!CUtOsJC+_FbTn!e4q&jjFvQ`Q#@9KsFq3t&6E@iUgqMqXAIVdHckn z;wumqfy5NF;K_t!K)(j*hAfPxYN;hsP&C+Fv>2v@|I0cgC7Y^9)|Laqd6%7~;++SY zZA2KIVP!4!KsGKP5sq#^$Y=Y=ku}zdsEAysFDfY3QcOhf=ksx1NR6%6l3X?#T^8a@ z#sZrjMGr%XMGMHm%Ur_>u+htZ+mZEyK=jS^|Eo}C7`~140skybFB0?zOKsB4CO)59 z=gLrN+f!ua9{5A2{!-3s0-`PdInay%rb@S~IJXb#;nQ=3_lP@NNwf@O%=5!YCBkkk z3q&*kzGBV)p%|+-^v^RZiy#s5Da#(U$COs@r;*XO06?~}K251U%|Ltsn{!SWteHqD zAWt#YsIXW=qBcTzw1Fc9!;ymm^0Ta(N`J3I%++JUJ~I+h<)3Y_kpjJvR{@-o3?sxc zTAOE9N>PzuF&R?@Om~Gr6~w_JF3W{(kG0isUiEY~=G=2+@y*9b;BjN_1XYb{X5` z$)VR5x3jq@*dk$^d$Km3lXvfHO zN#VJT@KT@_{3k>VI$eVeLbvQH+jt5-T8frDClRWZN<}I4AKyF#W8288eDeNIxMo#b z6BB6$APGpE`&^J|KOf3fqr}k&p^l*H3%dO$Ib;s8rfPgTGSin|;0zzR=tBkzqIbbT1Y+ zT%y0;LwuT7LyeBpkktNYNlG!vkr85s|Lub{eBCd}4mVhD+Z{tNIpWN}2WZBD_u$?f zsvrVS8xDlzVu}$*k@r+yMuj%dr)$lGoyj3SJ=V1L2L|!(T}M`jiuj5E$b@}CfQkd` z#Cp5dNARFbuQGhPo&qTz!%7->37!u{a+yGC`n2Luw*Wv;q8npRZH0+@ITe$}m1hCx zY@oK@Cg5|jIYiO~*(mzq+aY5~(uHWzVx3+lc&Ni0cjcxhwZ!IfgEIx4f#zy=9NEUI z14v5ar3FJRr%P8sl#Ke{!(vhD7rw`32dA!)f>4kYpc3odqKb*KX~4vn z*m#8xNtdX#&eG!jpHz`sYyV|r3Xmhr1EUIS!LiylaH;&wh83;z5r}_4904COe8zqT z-h8)@Jw%ki7si!4p#*COmobPmN**} zxLIzS0gY8arHMYc9KXu)w?D7X;zFw9&UB)672Lw6lem$UiRAYZeMB(v$9RLsm5@0X z2M$I%xq1CWAn8vU&VBorL3kg^0plXOO;T8iI9vs+n}sRF+Yt{R{cpg{bYk@)K1vF zs?3TYfWQt;JMKL<(@wOD6LGUm+_p@h-E}^V3pOx0C ztJG%mE_5w1{g(8Xz8ny!(P}MJrzZsc>vcsfNH?h{Q?>*PT>>b0mJ(7D&^`M7M{3g& z3!DAUX%J}=7zDJtJ4RW_wCLzAi$y|meHt~uyq-9D3o6*Re}t07(q`8>Q<3OUo|H6< zQ_+a4UdOudLKs&@C+I8bSGb@X&PQw9uT1f1#NU>q%D;EjCG)W1c!#eP*glN?KH=Zq zcaVO26zqZ^q5J0a+6B}lL2OCc zQ;24QchfSkqFL>mdHNiv%Ii|z zk{1m}@8h#**9%&Di5p?NJRb zCaDaB0syEn1^|Hl*`q3N;OMMmZeVXhYv^cyrM(feD2m|oqV~#Qu%CRBDh5JK7mfre zoFm2$09hB7Ikj(l z=f(U;V1(!W#I#y^fpIG0Q8(1XmT}DsxQYGwtP>tgvs7e#_isvw=Kg@3ZIynTTh)Fs z>hWE^tF7nL(Nt;fv>)_N|LF4|4Ago+!|(7`dmZ%kQTJ*?ToI}kxtvSA__o7(Zez}- zNjD~|9Pan~yNk;EqtZrmK; zwRFO*Oav|PRKhyp=;{KPwiwLhh=r1^Ri!zwq8sm~d@mXAD8S0-rm4(pQZ}0u+_qYMhn*;94H{Pw*tjdAiOzAs!80YlTP9kc} zBso<%%0y)Ju%d6!qz9@Bp(0XJLyg}#sb(t=)QAPlbIE0oHTJM7ALT$g;kuxFNq>Og zNIMANpyO0K_C~*a;&sWfiy8GjTzsQVyVRM^UZPA^1>^I$$1c;?Ol76w2_TlIfqGlw zfRz|@bCJ_SVH84BE^2gCHyxg;b5y%9P(XBqzOj^9)>aQc{CadrhOMgnlXx@kfvAMH z+S?YJy|&ar6U66ZF*y0omwMCP)$OgvGaQmKaMH8G_wnlb_xmZ;EfhA}T@^=sj4CqB!+5x} zYI4p_(9xD~(M)s7Ow@OWZAz6A#hl0>bM6mQ9Nkhsd2tduOeXm1I*st+ETB@V2ZRsS zE0KoSD~-%0GEXXZ!s@cuZ+wk-hG#FEoWbzYl6d`uUx}X|&*O(ff$NP#px&&*@{{gC zgH$kIKJf4ge^jdwbb+Y`Z@G`mmzcT;yN=TCH|f+41IM#lZ2mmFG(A8RrNvv^j?UOh z)1W6p*PahuG=M;1rzi`bPVu-TcZ&G?r=af#@38U&mDmT)?`)K1QKc!&kf)-0;KVpa zTz*OEQm>kut&UfY4o(P}4yMMqTjJ}p^J=TanE$EKrP5{e_q3Z>_vZV;2mei#MbQkK z;|_^J446(P6r{UfdNW=ZZf?rZQ&QQUd*il}#4@|hdOBW{H@q<8-5ZhD900AX7kRgnlGi# z$Sfe{lnOZFUJDJyPfLKi##6IypR%9`h7r;;B9|yvLf<#1;s3PR3J1gB75WsZ3Ju zD;1e;PGNarUA5sO5W102noeI1AD@!asMl?*+oP-I8NzkT+ zP`TPoN7FN$>Q4*sWZ_e_fO*TY9DE3EPK(2R2e$$wef(M|350t(+zp<`bqS5QjY|ccO%hs? z=O{CP58+b~vGt){Eb6iY*sJ)u+~A)5^?`R;w+*Iad(q@{8NinyjRb6mH3JItu@Qk2 z`c4MalaXesb_`XmQ431T*byU^-pvGE?qIFlwjrJMd@?QIeCs-GIT6u^+1K0V?HXd zo1bY)7R4-=MYH36H~URoz%dw5O@ znt+2@(x!ncfH5Mhr8n&SRm9R9_(|E-TnnWIQe!-6386)5x-0AffX4qJjH3J(sX%|u zTbip)w^YXx!ZbS^DC$7OERb^c?-SJ4fwFUdd!;42jS6EXhPS#2b2t{p1hC_U^~8aU zwp>N`EwLrcJA`=^5_woc6uC7h5E6Y11({4GRHX?R@|knJqQuczUU@=}eV7FFmzixw>zsNxVR*nzp(Svclai5ikau)Au~a-fl-VN2z-d9G z%!FYvReIIaSMj;&a+;O+>Tu+6k)Q62_M{7GHPcFYD95mfS}`?gy=^e6s1wFnWJ`^c z&!j8(^00_rC=M!eeRfIF^!R$oDYQ22xs@cxuqJuSL@w?zMhg%;IP{!?8?GD2GmfqUB`rP+AnVWmF)hjjThy z-_$@e3GS6@v;sZ8Z+lo<$*@Za7lVqLxm$aJt}E%9n!15fwGM-Q^jTp&T;nfc9nJYY z6q0)3SpLSQ6vxSmG{G0+(1b=zd6Z(}w4SSFMmcFN37#Rx-0rruN00zGZ+UR3e!B%X zV$YT5&pywpX!po11e*Y2AwUeh))1g3DAYM3h2A5o;*2(}yTEd~ zL}6D+hnl1Y(aZGyl;-~}tNMmBVxm9*0Ko_V0C4}WtTOy#t3#7(T;T)OP5$^1Oa~*lu{(gnZVPu?huc#T zEru%8yqiQmZac^5*J|AxhwNi+Zy$~w)XTRGX(t`-buJ)xK1UaHCo}E9j;kI@RLI$E zEKx6+FR8bkF5T@>fZ+IS?9nq`q3bexth{AgLWt%AK{C@6x+La+c+m(y0o)!^`0mbgHz|i+x83CKz0SsOD0qLUr+*fX zcCMn^??wj*p@}*mgcy9<>ZdYB>-FL)yVeoAxRwm}3Qb*x7|otVxElN9B}||!&0+o$ z(yk$OE~iT&(w1|T&6^B!)-f})EXvfqj9?^P;YzJ8N=4Exq-%?>{y>>h>t*7bF%d#TF&VmK1gByjI>|0f?6QUGM zPsLlSCjReP60!`VcQ`&1U#EqPkH)>tlxRR|WWI4(^@h%RMWj`$tqC1yg(Zv5!v)Z4 ze5PbqrR#0uCwE9~RRg6-Kt9uc!C2UfwJ0|}Q8Qs3>ROn!5G!CxNyRk5LE(_z|34l% zL(Fr7g8~46(fzL{j`835C__hXlM^B2=8MYPW1UB!?xD|7LtsXwQWdCa1@TCpcud6!il$GCMAT+qg--8DYIqi3=hYYk|87q&uyN*lh-+@Hv zUGT5ycRjZnw{LdLDFiAF8!;_{yBs`Q!aHwoGb1*|2Ok?Z=ywzE`K`}&&b`e%;SZZ; z^8b%3e18;YTU2 z!Dyx9Ogk%BwMjLsgMRB!ZNq*#>DzXG#nukDE&tvZ)7J%riGAScgtnwLON@DImcP~kLv0&ct^>@=A@OwPFFaqBSYAY`B>Ky%L@%}MDX9u_!EFa7q4{e zZMnO_`O97H`%crgHr-ErxK3IbmAVqrsJW)2HWbYgHFRxxSWMar{26)S&?TStyUbP- z)qX7!wi1_3)QwL$hUl@O;4UiE6P(`+Ex6?G|^QpW+f4;1mZqBgW8y*}|9^$iOFF)Zpf3FH8_*)MI6wLX? zJoD-CM1dL<9@l5YnYqBxq17G^@xhA9U>DOqo&UTDXi5-=bE5PBw>j3C-qXQBvQr1O zllI)JU`>bc*%r=Nm-Apct1#6shxyQ;kd+b zT)ZUAZH$0+b9X&#Xr2mGfvXgty~#B2J`mmj9*v}RROLu`WH`iVhP!7ka3m;~skyoQ zDVQDq?}>If2ZM9Wi0I47tK*q%VrV}F9jsM#_K675!%AOVUH2PYXGRG_mk?50W^mpR z)=7){+mWeKP^50W$ah^K z+aN0m9OoBL9Rg2ayFP+Ex@R0EaYr3d13fB#EEi=JW@IIUFLP9dv~~K4b`qZXy-#YK zNc&zaj!__N*VdY355zE*ssZ!G3jCRN!%iyf9JxY(+QyGl3KBb7cA38@NWRz=X!CO{ zRBxHtW>!1>6ib;9PZ@K>!~~`3Q7$=Z(LvOV-lyY$#QG5U1J_>bl5r=c%=@*@@vYV< zOiTG|TV(7gVFEN2+Lr^NJWGTYoEDt2BWmK(VGn+qtY>`JQWeV=ng@4t{u zoccWWslER3LHwLyh7yXHw;9+XUQxg;_!E zL%<{5*%!HPHg@^D2giy_xR1z2Xx>ZdR||-)IIIL5f#aFOT}6B)mRcwWfwR<$?CJfN zQts@LOqZDs7Vrw=N(lS>mf@<%lVFhd&Fs=S9@b&aueO{H&S}WPP6#nCTp%K)4(@51 z=t_sEYRi;mvM6T<4mGErYV#L{7k4Z|Y%JB;@3UvokG2MuK7ut^S}m>}o1OoX)8fC$ z8Pn{iy0Sy7#`f%@GSn4bFgOoBBX=V4oJml=%cmcEYpy}) z4?5q6Qn9zzy)VG8|3PPtgftzmT!8hq zRVxki9j_P_Zd}|(nWn0ZTXQPx(a`5S7zfM=Q=5yDc=-6IhL~2Pf6z&^?@PM&4?1VI z(5-dW*L_;u+nJzZ)vEpot~G_{h~{#Gz4_(NV?Se zW08EEj~S~{Lg!P6Y7~|v@z}%4j$l9NoY~vL{uiAvo&wQh{HupDMdjZ=V6)Y1hP?}! zx)YW0ajP50f>N8}x(YZP8_bvREp58S$bhZHQWeOIgM=k+U+bO9D-Qs9`Q;3seFU31 z5WPp=t7CSUeI3B8r7EOmEtya|8s?qoX}3D zdo*`wH>%?|V*e56@D*wYb0ytqxh)0Q>&_6c@Nm6In6fofd(vX*cU1 za1Q@~Qx;*g{QuDPPC=q<(XwdUwz1m1+O}=mwr#EM)wXThwr$(C_4@4dUcA^l?yb*? z`kIlEBS%)wF=i_rt~pMfXUCnL@;h1`e~9yWi%G@o`~N3S=^x@eZO%sYh}=uh2#Wm7 z(Gb;MS(|(z>hOAVulck!3)5m+=nPLAXHNc2qw2+mP^u;Lzr-2vL!5`ncBtDU#cw~% znGwQcGix|N(3?Bu`){!+SaqA80QNH{g6BVClj$Gk)Lgg0W<~HmR=ugcbooQlx;)$? z^FEgcYE>{D5YGVy^ZSN`@2ksHOnr_fWU&Hcuu*}m7BzG{b38SbvA%)B)6xFv=%cbr z%Uff!s;c|M^~m(Ie=+*)`EdWUj!Tz^hIgB5qvC48w!Hk1NQcX8o+5uD56k!TEXP&J zYgJ#95nH^8CSB|Td5)&ZuTDc#8%sO0DXlnAZYYGT5(hxTG9UZH60!u1RtBd+t`)v) zPxCx+IGiKs^gg862pFAgvvfVuA2;Ay^r-i}Bi5zoE@OWr;mhHB)lJm){L&P@B*fP4__!O;(Wm0c_i1~8{c1le}N`_cQ_^*2eci~b7kxA!C zg!7N#o_K!Vguh0k>RfNuR)(!%x^7caYdC+zk=bYh;tOCDd{!+aHFcVrmYgxq_{zpn>(l^QS*I-ud1mN2#h3w2(VfK*mV#wyS(ls{TXtMx zI7JO-Q(^g6EmI`|jY38kHDu3?KK5;*QUrUg)JESjREmycP_FjMR%(~MvT0lHsph#J z3(r)SY&%H}O*9jIouahZ15cPq#zO}3aBIWG56_e zGxL|Or04?t1XFcV7MEU>lBDdG&G)PZB`J%-UJ8a*O+o92imNHKlS((i5#kLeD{PEo z3041hYul$oXPe_OhF`Vrx4o;oZ+%C*Pn$OHNae!d{O9)g?+GiIEE*$uic)olC2`n3 z7dk2~MsOqr{{rqJCvCL$qa(!9D^ZSAcM3rF(QY#tuB9AR6d^6<}AnOP;C(<+vi>Ma-(uqzb4Eiis$wPVlNlHjI7O#0&$u!UqfYIfO1P>m$}p@TW^-4CKK?3fsS@M*#EC({K#EHyXKM2v8ytp)K?m@+csWa|5R#b7_ zW=95I#+^|#AHSPg@gk!0s9$Bh_^W%`DZ8gw!YCcgzgO`ERUzaCM+HRTt@~SLpn66b zw{i{8q7w#Nf@hqB_!gLpB-{E!H{*hMSZ(5vRrIP323+pJ>E;60nl|;27O8TESTGJ(ric3NR4i zfnNr<2AdS9E{-C5AXtGSH_nONCzmr^8}qr6Txe^jDm|&Sc>){gK^fM&LB?8QR}~2> zi)--i#Fr>4ZdRcX_*1p_Aa&$=0u0Ge|5o;)c3HhrutJn``PlEqFxX~_(y?31$hx9f zL*B-XNnciQmrTXWifhW|KC?I^?KwYL`LU3_^wiAD*lafc;nIC^l2em|5692ZdmVi<;x#THF5>#)tG2swdG2ZpM>S_~j65mIa{S61@@r!|_uM=Oa#+(K-9n$YO_rdj zU#q)K(PHhGzYWiEy#43)E!|@7oT#&gVc(33VcRAOn-9!Evj(<#FIf`LN?uO1cjR-Diiw$ z_`mCyO(~d@C?EiU=T8m$mp#Y)KlQ6IVcRm04qFuW19-jGPS~Sd{o!j%CWfu3fa5-FfO$5xrO{SwBMHp) zgxLDAQUN6tpbk9!Kor-`7INL2R?eM=O(u?n0^kgePmJ&uZ2BryV(8FIr(NedhxNQP zb%3yj`N;TILQrrx+&!>ci0CT}-qk^}+k7MT!ap%{>@8qZ?|zVu^K*9tm^(wkMR3y8 z_k^|0f+sI@qa=cUuc#5v>(JEMpjp>$G&?;c_epw@8(>@P1pVJfZt-@&7Wm_cS|b1F z$XWi8465?BYkV+1&($r%m8;UO$w7UFpqukW(m;*Vh{h<8v0;3LU+=5QJqlBR@ewX* zBBzMB!=~@|ro;ZblWuN|ZOZW<6uL+E=+36RrSS97XPQmwrXC5_b;rWBBdRyd*(TT> z`UNxgv?VqJg7fCrpH{Ar>CmEK%P37zoA{*r zm14^Z99RQSU9sbp;rj;#cCjmi1K%UbwD(@9(KQd{=hx+<9&DK3taMvdz9#eP zxpUABprzGwj&mOSQ?;oVYtaQ!mZis;4?`O4zir(0|598z#eCL!)#qZ@0qm)4PzYz3 zm;U82he*77o0t^QJpD{jO=jz~6~I0x0+EI%-5+zah=6-I3?Nh?mY`ow~`O4|%*&?(Gkx1;XDXMlH@4Ats-cCDhHrj8x zFK4=bf-uvE;|IHpMBakIV72I8Fz{C(X1NHpxPWc`wIgBeGQwa>&*wOG*&$TVrE_BB zW|Hbn4I-n4XkHd#s{-m%#N$no(M6U~iuaGPlWn|wWhUvf=N4i6mH2u`*^FWXyt|wK zMe;&AEhsr`Iq%`WPq~xM27N0FvB4+}2GsStNOGyO$DVtL6-_AeT49^aqHbH{*OvO3 zYVNo(^V=A4u1KLwIwcaK1)QP>oFxwABSZe8ZgQIy&_Ez_kI>`o#Y^oH6BQ_qx&z%^ zG9HJ@vc#|jU$G;=#lu4%+J0oN)9w9#;QC^bgcrt_W!~4W`B)p zev?G*O^yG(!91RC(@_XhSfJpSTcmNxOg$a2B&X5|H+2DO;qbk|A?zW(33Ue)BN%fN3x>NjlK&t6d zRAbn%^0@MWRD+$u##_IH!p2$tqvoro2s;emOl5;oIL^HCuZH>Gge#A}WNE9$?cut% zg;Q_zH6eULGY>i}9uwJx2Q8@Q_)Rs7W?B0(e&)Y8X2C#oOKNZak}ckTn>mevMY$8v zgwar+ZmF@iaKJ(wCq!R6w^U z)c^Vl?PQs=Al!87w;63hXDkVNDe^15&^&qfu?H&r1qh-|j>{>9!CD5(_C~}i_4T(-H(r4cpsSAwV_Ba9Y#F+2K#qdZ0mMcF- zf5fnjY>@Q+r2RL^l8B+0xIqE{OsM|{wQT>OR!cH^odu!mT=ir{Wl`YQBNteDLvoiN z>|A|p!6;BK#|oF<$GZ<>LuVXYgGkY$bq4Xs+O5Jt$8kF0>A~CRz2?$0g(Z9|NzHE{!4C**2pG0;i1$VIz$3_r(%EUbb>xcmw=iS8u~A!b1jM zMt9cW*RZLF=ijn#1cV(vPrvRh@1Y=3%O2-VdqA^D4^$|5X2Nax`io{B&i`b;`uB6RBx+j z1E{&|nWk}QAZ9SSR0EM&0+^{Jtpk?>4Jswe65r zf-{ZlK|IN+h6YYrr=zzbh?G{xW_$LaB-X=afRgm-+RTC6X^kwdw*qTgII-tjmZ_A+ z#?T^DZlCzOS_PfZLTOqovHWwS{5J>( z^R=(_wzqqIXT7XFpZ@dLbo=phb9y^#_SPjF0NUte@w+bzZLO-(Qmm)2MxViu`C{%A zLM=9-MnJ<)CXUVdUTA#=-dVemQy`iIqOzyK0f5cCP)3v8+6`#_?+tyOC4S)w#&XzJ z6?q3Y~0gMKYi&GNB)vxG>U`J>{PF+24zJzM5Zjn{<2usUJdM6%| zGTtIoca+$*kVQBF;WO4W@H|f;3qny?6#OM$47M=T=Hcf>j~6KAI1RKje~-g5*xy~~ zkBh<0_o{~)@@B)Cyd|ECws#*#mq*;n-NLCIZr&~KDp#CIp}wUPMB}u;NC{x#3VI4@ z&t&c<-S~yAZmgMatK|nbEB+Q*5qF#H0A+@iyI z!1{ewd(4EOO~d~L#tuHA2|%co=>|ZAupW84i4Y4lxW2e}9914;3nfV_GrFB6RQy`8 zSz+re=>n^63C{bKU2Pd_PjkGOYPgKQt2|fU9gA40RwvH8@(LaKQEExyC!pN>a=NV4 z!tE?zkxDO_q4Fr}QS7+zEaa_98~W8JBGGW-iEtfm~1(#j91Y1*qb6~`tL~V+(%NTXT{#VHA zdW5pRDmP_Y`6K?9!P2d*CKhI&R2Tb!j;TtEY#oBzjI>zqose-uP7_KM{FGV#Aw(}P zS)4^IL3#{8(92aeU#2S;;+aIN;4Lhiq_HF<|Bc0UzC54xZ?t4aD$Ej3a3jTCw~G$5 zqmO`^XxXk(ZaI#J&ZN(PR5iY?Zc!{*9|9@7WS@RW|J0Ph;F?WE5TUe5_e@A8D|=MJYyb(M=?MsEElE(8ik z)G}Ev+)w(j3^i^E?szX!MDWD0W|W-0+Eve;)DIJ>Mxpb?BT#Xtz5EwENaVwKtFP+* z;zt*$cF3b-;aQ;1DbOj>H7bE~ML=XkgbAH9?6KgZBo9V~QX(@y6Y#;$O{y;~dA=i1 zFpHpl0$`s^V*W$3H(&^ZJ7-8Obb!%J1&oENFXBRKbCAkDYCt&HB{G{!@kGE=lns^k zre!SvLVuboin#+L9)ydA_xkh47QSqIwh;>@6ENBlEw@tgA`{f_A_2SHp%@4tOKooi zYk!6z#Ph&7C>*G^E%d{e{*V|%*9bAaD`SOUN-;7

)3k{vzqST(LtF3DeRbQm#Nj zTAAw83kxs-C#;~MLoT)c-6yJ&`fEZk

&s%CR}6cxQH(2IniPDNb2wL#5Hfl8%- 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 T-gFg1#1ae^6cD2PJz@Gkom#N5 literal 0 HcmV?d00001 diff --git a/securitas.FCStd1 b/securitas.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..02896b4fc7621f6ff2105ddd6836f628973317c6 GIT binary patch literal 44854 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 V?*MKh2FbZvT1rdG(EWa3`ahpw#w`E< literal 0 HcmV?d00001 diff --git a/workspace.code-workspace b/workspace.code-workspace new file mode 100644 index 0000000..d436dcb --- /dev/null +++ b/workspace.code-workspace @@ -0,0 +1,21 @@ +{ + "folders": [ + { + "path": "SecuritasApp" + }, + { + "path": "Securitas" + } + ], + "settings": { + "files.associations": { + "array": "cpp", + "string": "cpp", + "string_view": "cpp", + "ranges": "cpp", + "memory": "cpp", + "istream": "cpp", + "functional": "cpp" + } + } +} \ No newline at end of file