From c4119ab7cc5c2ac80efac6c4bd39ebf96c0e8b70 Mon Sep 17 00:00:00 2001 From: mattmcw Date: Sun, 6 Aug 2023 14:56:42 -0400 Subject: [PATCH] Manual merge from capper branch: all changes to arduino library with some improvements. --- app/data/cfg.json | 2 +- app/lib/arduino/index.js | 116 +++++++++++++++++++++------- app/lib/arduino/index.js.map | 2 +- app/package-lock.json | 2 +- app/package.json | 2 +- data/cfg.json | 2 +- package-lock.json | 4 +- package.json | 2 +- processing/mcopy/cfg.json | 2 +- src/arduino/index.ts | 142 ++++++++++++++++++++++++----------- 10 files changed, 198 insertions(+), 78 deletions(-) diff --git a/app/data/cfg.json b/app/data/cfg.json index ab04d88..83a20d7 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.7.23", + "version": "1.7.24", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/app/lib/arduino/index.js b/app/lib/arduino/index.js index 1a23b0a..c0633c5 100644 --- a/app/lib/arduino/index.js +++ b/app/lib/arduino/index.js @@ -54,10 +54,13 @@ class Arduino { async init() { const Log = require('log'); this.log = await Log({ label: 'arduino' }); + this.keys = Object.keys(cfg.arduino.cmd); + this.values = this.keys.map(key => cfg.arduino.cmd[key]); } /** * Enumerate all connected devices that might be Arduinos * + * @async * @returns {Promise} Resolves after enumerating **/ async enumerate() { @@ -98,9 +101,10 @@ class Arduino { /** * Send a command to an Arduino using async/await * - * @param {string} device Arduino identifier + * @param {string} device The Arduino device identifier * @param {string} cmd Single character command to send * + * @async * @returns {Promise} Resolves after sending **/ async sendAsync(device, cmd) { @@ -119,7 +123,15 @@ class Arduino { }); } /** + * Sends a command to the specified Arduino and waits for a response. + * Handles the communication lock to prevent sending multiple commands simultaneously. + * Emits an 'arduino_send' event after successfully sending the command. * + * @async + * @param {string} device - The Arduino device identifier. + * @param {string} cmd - The command to be sent to the Arduino. + * @returns {Promise} Returns 'false' if the communication is locked, otherwise returns the response from the device. + * @throws {Error} Throws an error if the sendAsync method encounters an error. **/ async send(device, cmd) { const serial = this.alias[device]; @@ -143,7 +155,15 @@ class Arduino { return ms; } /** + * Sends a string to the specified Arduino. + * Handles different types of devices, including fake devices for testing purposes. + * Waits for a specified delay before sending the string. * + * @async + * @param {string} device - The Arduino device identifier. + * @param {string} str - The string to be sent to the Arduino. + * @returns {Promise} Returns 'true' if the string is sent successfully, otherwise returns an error message. + * @throws {Error} Throws an error if the writeAsync method encounters an error. **/ async sendString(device, str) { let writeSuccess; @@ -240,7 +260,13 @@ class Arduino { }); } /** + * Handles the end of communication with the Arduino. + * Calculates the time taken for the communication, executes the callback, + * and emits an 'arduino_end' event. Handles errors and stray data received. * + * @param {string} serial - The serial address of the Arduino device. + * @param {string} data - The data received from the Arduino. + * @returns {any} The time taken for the communication in milliseconds. **/ end(serial, data) { const end = new Date().getTime(); @@ -264,19 +290,42 @@ class Arduino { else if (data[0] === cfg.arduino.cmd.error) { this.log.error(`Received error from device ${serial}`); this.unlock(serial); + this.error(serial, data); //error state //stop sequence //throw error in ui } else { - //this.log.info('Received stray "' + data + '"') //silent to user + this.log.info('Received stray "' + data + '"'); //silent to user } return ms; } + error(serial, data) { + this.log.error("ERROR", data); + } + /** + * Associates an alias with an Arduinos serial address. + * Used to map multi-purpose devices onto the same serial connection. + * + * @param {string} device - The serial number of the target Arduino. + * @param {string} serial - The alias to be associated with the target device. + **/ aliasSerial(device, serial) { //this.log.info(`Making "${serial}" an alias of ${device}`) this.alias[device] = serial; } + /** + * Connects to an Arduino using its serial number. + * Sets up the SerialPort instance and path for the device, and handles data communication. + * Handles opening the connection and emitting 'arduino_end' or 'confirmEnd' events upon receiving data. + * + * @async + * @param {string} device - The device identifier (common name). + * @param {string} serial - The serial address of the target Arduino (e.g., COM port on Windows). + * @param {function} confirm - A callback function to be executed upon receiving confirmation data. + * @returns {Promise} Resolves with the device path if the connection is successful. + * @throws {Error} Rejects with an error message if the connection fails. + **/ async connect(device, serial, confirm) { //this.log.info(`connect device ${device}`) //this.log.info(`connect serial ${serial}`) @@ -295,7 +344,7 @@ class Arduino { connectSuccess = await this.openArduino(device); } catch (e) { - this.log.error('failed to open: ' + e); + this.log.error(`Failed to open ${device} @ ${serial}: ` + e); return reject(e); } this.log.info(`Opened connection with ${this.path[device]} as ${device}`); @@ -316,30 +365,14 @@ class Arduino { return resolve(this.path[serial]); }); } + /** + * Handles the confirmation data received from an Arduino. + * Executes the confirmation callback function if the received data is present in the list of expected values. + * + * @param {string} data - The data received from the Arduino. + **/ confirmEnd(data) { - if (data === cfg.arduino.cmd.connect - || data === cfg.arduino.cmd.projector_identifier - || data === cfg.arduino.cmd.camera_identifier - || data === cfg.arduino.cmd.light_identifier - || data === cfg.arduino.cmd.projector_light_identifier - || data === cfg.arduino.cmd.projector_camera_light_identifier - || data === cfg.arduino.cmd.projector_camera_identifier - || data === cfg.arduino.cmd.projector_second_identifier - || data === cfg.arduino.cmd.projectors_identifier - || data === cfg.arduino.cmd.projector_second_forward - || data === cfg.arduino.cmd.projector_second_backward - || data === cfg.arduino.cmd.projector_second - || data === cfg.arduino.cmd.projectors - || data === cfg.arduino.cmd.camera_second_identifier - || data === cfg.arduino.cmd.cameras_identifier - || data === cfg.arduino.cmd.camera_second_forward - || data === cfg.arduino.cmd.camera_second_backward - || data === cfg.arduino.cmd.camera_second - || data === cfg.arduino.cmd.cameras - || data === cfg.arduino.cmd.capper_identifier - || data === cfg.arduino.cmd.camera_capper_identifier - || data === cfg.arduino.cmd.camera_capper_projector_identifier - || data === cfg.arduino.cmd.camera_capper_projectors_identifier) { + if (this.values.indexOf(data) !== -1) { this.confirmExec(null, data); this.confirmExec = {}; this.unlock(this.alias['connect']); @@ -350,6 +383,14 @@ class Arduino { this.unlock(this.alias['connect']); } } + /** + * Verifies the connection to an Arduino by sending a connect command. + * The confirmation callback checks if the received data matches the expected connect command. + * + * @async + * @returns {Promise} Resolves with 'true' if the connection is verified successfully. + * @throws {Error} Rejects with an error message if the connection verification fails. + **/ async verify() { return new Promise(async (resolve, reject) => { const device = 'connect'; @@ -372,6 +413,14 @@ class Arduino { return resolve(writeSuccess); }); } + /** + * Distinguishes the type of Arduino connected. + * Sends a command to the device to identify its type and resolves the promise with the received type. + * + * @async + * @returns {Promise} Resolves with the type of the connected Arduino-based device. + * @throws {Error} Rejects with an error message if the distinguish operation fails. + **/ async distinguish() { return new Promise(async (resolve, reject) => { const device = 'connect'; @@ -441,6 +490,13 @@ class Arduino { } }); } + /** + * Closes the connection to an Arduino. + * + * @async + * @returns {Promise} Resolves with 'true' if the connection is closed successfully. + * @throws {Error} Throws an error if the closeArduino method encounters an error. + **/ async close() { const device = 'connect'; let closeSuccess; @@ -452,6 +508,14 @@ class Arduino { } return closeSuccess; } + /** + * Establishes a fake connection to an Arduino for testing purposes. + * Creates a fake SerialPort instance with custom write and string methods. + * + * @async + * @param {string} serial - The device identifier of the fake Arduino. + * @returns {Promise} Resolves with 'true' if the fake connection is established successfully. + **/ async fakeConnect(device) { const serial = '/dev/fake'; this.aliasSerial(device, serial); diff --git a/app/lib/arduino/index.js.map b/app/lib/arduino/index.js.map index ed88766..c71a2ee 100644 --- a/app/lib/arduino/index.js.map +++ b/app/lib/arduino/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/arduino/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;IAWI;AAEJ,8BAA8B;AAC9B,iCAA+B;AAE/B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;AAC5C,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAA;AACjE,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;AAE1C,MAAM,MAAM,GAAS,IAAI,cAAc,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;AAC9D,MAAM,SAAS,GAAY,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAChD,MAAM,QAAQ,GAAY,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAE/C,IAAI,YAAkB,CAAA;AACtB,IAAI,GAAS,CAAA;AACb,IAAI,OAAa,CAAA;AAEjB,MAAM,KAAK,GAAc;IACxB,wBAAwB;IACxB,6BAA6B;IAC7B,6BAA6B;IAC7B,wBAAwB;IACxB,6BAA6B;IAC7B,wBAAwB;IACxB,cAAc;IACd,MAAM;CACN,CAAA;AAED;;IAEI;AAEJ,MAAM,OAAO;IAiBZ,YAAa,UAAqB;QAd1B,SAAI,GAAS,EAAE,CAAC;QAChB,UAAK,GAAc,KAAK,CAAC;QACzB,UAAK,GAAS,EAAE,CAAC;QACjB,WAAM,GAAS,EAAE,CAAC;QAClB,aAAQ,GAAS,EAAE,CAAC;QACpB,SAAI,GAAY,KAAK,CAAC;QACtB,UAAK,GAAS,EAAE,CAAC;QACjB,UAAK,GAAY,CAAC,CAAC;QACnB,UAAK,GAAS,EAAE,CAAC;QAIlB,aAAQ,GAAS,EAAE,CAAC;QAG1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,IAAI;QACT,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,KAAK,EAAG,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;;;QAII;IACG,KAAK,CAAC,SAAS;QACrB,IAAI,KAAa,CAAA;QACjB,IAAI,OAAO,GAAc,EAAE,CAAA;QAC3B,IAAI;YACH,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAA;SAC/B;QAAC,OAAO,GAAG,EAAE;YACb,MAAM,GAAG,CAAA;SACT;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAU,EAAE,EAAE;YAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC5E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;gBACtE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;QACF,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;SACvC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,OAAO,OAAO,CAAA;SACd;IACF,CAAC;IAED;;;;;;;QAOI;IACI,KAAK,CAAC,SAAS,CAAE,MAAe,EAAE,GAAY;QACrD,OAAO,IAAI,OAAO,CAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,OAAO,MAAM,EAAE,CAAC,CAAA;YAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAW,EAAE,EAAE;gBACjC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAA;YACnB,CAAC,CAAA;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAA;YAClC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAS,EAAE,OAAa,EAAE,EAAE;gBAC9E,IAAI,GAAG,EAAE;oBACR,qBAAqB;oBACrB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;YACF,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;QAEI;IACG,KAAK,CAAC,IAAI,CAAE,MAAe,EAAE,GAAY;QAC/C,MAAM,MAAM,GAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACvC,IAAI,EAAW,CAAA;QACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,MAAM,EAAE,CAAC,CAAA;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,MAAM,YAAY,CAAC,CAAA;YAChD,OAAO,IAAI,CAAA;SACX;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACjB,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI;YACH,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;SACtC;QAAC,OAAO,CAAC,EAAE;YACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SACxB;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEnB,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QAC5C,OAAO,EAAE,CAAA;IACV,CAAC;IAED;;QAEI;IACG,KAAK,CAAC,UAAU,CAAE,MAAe,EAAE,GAAY;QACrD,IAAI,YAAkB,CAAA;QACtB,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW;eAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;YACzC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;SAClD;aAAM;YACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,OAAO,MAAM,EAAE,CAAC,CAAA;YAC/C,IAAI;gBACH,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;aACjD;YAAC,OAAO,CAAC,EAAE;gBACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aACxB;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YAC/B,OAAO,YAAY,CAAA;SACnB;IACF,CAAC;IAED;;QAEI;IACI,KAAK,CAAC,UAAU,CAAE,MAAe,EAAE,UAAoB,KAAK;QACnE,MAAM,GAAG,GAAY,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;QAC1C,MAAM,MAAM,GAAY,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5E,OAAO,IAAI,OAAO,CAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAc,EAAE,EAAE;gBACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;gBAC7B,IAAI,OAAO,EAAE;oBACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;oBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,MAAM,oBAAoB,KAAK,GAAG,CAAC,CAAA;iBAC3D;gBACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAA;YACtB,CAAC,CAAA;YACD,IAAI,OAAO,EAAE;gBACZ,UAAU,CAAC;oBACV,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE;wBAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;wBACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;wBAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,MAAM,yBAAyB,CAAC,CAAA;wBACxD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;qBACpB;gBACF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;aACnB;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,OAAO,MAAM,EAAE,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAS,EAAE,OAAa,EAAE,EAAE;gBAClE,IAAI,GAAG,EAAE;oBACR,qBAAqB;oBACrB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;YACF,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;QAEI;IACG,KAAK,CAAC,KAAK,CAAE,MAAe,EAAE,UAAoB,KAAK;QAC7D,MAAM,MAAM,GAAY,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5E,IAAI,OAAgB,CAAA;QAEpB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,MAAM,YAAY,CAAC,CAAA;YACjD,OAAO,IAAI,CAAA;SACX;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEjB,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAEpC,IAAI;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAChD;QAAC,OAAO,CAAC,EAAE;YACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SACxB;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEnB,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/D,OAAO,OAAO,CAAA;IACf,CAAC;IAED;;;;;;;QAOI;IACI,KAAK,CAAC,UAAU,CAAE,MAAe,EAAE,GAAY;QACtD,OAAO,IAAI,OAAO,CAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,GAAS,EAAE,OAAa;gBAC5E,IAAI,GAAG,EAAE;oBACR,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;gBACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;QAEI;IACI,GAAG,CAAE,MAAe,EAAE,IAAa;QAC1C,MAAM,GAAG,GAAY,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QACzC,MAAM,EAAE,GAAY,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA;QACpC,IAAI,QAAc,CAAA;QAClB,2CAA2C;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,kBAAkB;YAClD,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;SACvB;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YAC7C,0CAA0C;YAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;YAClD,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YACtC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACxC,OAAO,IAAI,CAAA;SACX;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAA;YACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnB,aAAa;YACb,eAAe;YACf,mBAAmB;SACnB;aAAM;YACN,iEAAiE;SACjE;QACD,OAAO,EAAE,CAAA;IACV,CAAC;IAEM,WAAW,CAAE,MAAe,EAAE,MAAe;QACnD,2DAA2D;QAC3D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,OAAO,CAAE,MAAe,EAAE,MAAe,EAAE,OAAa;QACpE,2CAA2C;QAC3C,2CAA2C;QAC3C,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,cAAoB,CAAA;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC;gBACpC,IAAI,EAAG,MAAM;gBACb,QAAQ,EAAG,KAAK;gBAChB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;gBAC1B,MAAM;aACN,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnB,IAAI;gBACH,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;aAC/C;YAAC,OAAO,CAAC,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAA;gBACtC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aAChB;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,MAAM,EAAE,CAAC,CAAA;YACzE,IAAI,CAAC,OAAO,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;oBAClE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;oBAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;oBAClD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBAC3B,CAAC,CAAC,CAAA;aACF;iBAAM;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;oBAClE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;oBAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;oBAClD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;gBAChC,CAAC,CAAC,CAAA;aACF;YAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACH,CAAC;IAEO,UAAU,CAAE,IAAa;QAChC,IAAO,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO;eACnC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB;eAC7C,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;eAC1C,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB;eACzC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B;eACnD,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC;eAC1D,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;eAEpD,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;eACpD,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB;eAC9C,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB;eACjD,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB;eAClD,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB;eACzC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU;eAEnC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB;eACjD,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB;eAC3C,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB;eAC9C,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB;eAC/C,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa;eACtC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO;eAEhC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;eAC1C,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB;eACjD,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC;eAC3D,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE;YAEjE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC5B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;SAClC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;SAClC;IACF,CAAC;IAEM,KAAK,CAAC,MAAM;QAClB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAY,SAAS,CAAA;YACjC,IAAI,YAAkB,CAAA;YACtB,IAAI,CAAC,WAAW,GAAG,UAAU,GAAS,EAAE,IAAa;gBACpD,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;oBACrC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;iBACpB;qBAAM;oBACN,OAAO,MAAM,CAAC,qBAAqB,CAAC,CAAA;iBACpC;YACF,CAAC,CAAA;YAED,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAEpC,IAAI;gBACH,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;aACpE;YAAC,OAAO,CAAC,EAAE;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aAChB;YACD,OAAO,OAAO,CAAC,YAAY,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,WAAW;QACvB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAY,SAAS,CAAA;YACjC,IAAI,YAAkB,CAAA;YACtB,IAAI,IAAa,CAAA;YACjB,IAAI,CAAC,WAAW,GAAG,UAAU,GAAS,EAAE,IAAa;gBACpD,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE;oBAClD,IAAI,GAAG,WAAW,CAAA;iBAClB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;oBACtD,IAAI,GAAG,QAAQ,CAAA;iBACf;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;oBACrD,IAAI,GAAG,OAAO,CAAA;iBACd;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE;oBAC/D,IAAI,GAAG,iBAAiB,CAAA;iBACxB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE;oBACtE,IAAI,GAAG,wBAAwB,CAAA;iBAC/B;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE;oBAChE,IAAI,GAAG,kBAAkB,CAAA;iBACzB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE;oBAChE,IAAI,GAAG,kBAAkB,CAAA;iBACzB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;oBAC1D,IAAI,GAAG,4BAA4B,CAAA;iBACnC;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE;oBAC7D,IAAI,GAAG,eAAe,CAAA;iBACtB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE;oBACvD,IAAI,GAAG,sBAAsB,CAAA;iBAC7B;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE;oBACjE,IAAI,GAAG,mCAAmC,CAAA;iBAC1C;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE;oBACjE,IAAI,GAAG,gCAAgC,CAAA;iBACvC;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE;oBAClE,IAAI,GAAG,iDAAiD,CAAA;iBACxD;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;oBACtD,IAAI,GAAG,QAAQ,CAAA;iBACf;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE;oBAC7D,IAAI,GAAG,eAAe,CAAA;iBACtB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE;oBACvE,IAAI,GAAG,yBAAyB,CAAA;iBAChC;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE;oBACxE,IAAI,GAAG,0CAA0C,CAAA;iBACjD;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC,CAAA;YAED,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAEpC,IAAI;gBACH,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;gBAC7E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;aAC3B;YAAC,OAAO,CAAC,EAAE;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aAChB;QACF,CAAC,CAAC,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QACjB,MAAM,MAAM,GAAY,SAAS,CAAA;QACjC,IAAI,YAAsB,CAAA;QAC1B,IAAI;YACH,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;SAC9C;QAAC,OAAO,CAAC,EAAE;YACX,MAAM,CAAC,CAAA;SACP;QACD,OAAO,YAAY,CAAA;IACpB,CAAC;IAEM,KAAK,CAAC,WAAW,CAAE,MAAe;QACxC,MAAM,MAAM,GAAY,WAAW,CAAA;QACnC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;YACrB,KAAK,EAAG,KAAK,WAAW,GAAY,EAAE,EAAQ;gBAC7C,MAAM,CAAC,GAAS;oBACf,CAAC,EAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK;oBAChD,CAAC,EAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;oBAClD,CAAC,EAAG,GAAG;oBACP,CAAC,EAAG,GAAG;iBACP,CAAA;gBACD,IAAI,OAAO,GAAY,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC7B,IAAI,OAAO,OAAO,KAAK,WAAW;oBAAE,OAAO,GAAG,EAAE,CAAA;gBAChD,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;gBAE3B,MAAM,aAAK,CAAC,OAAO,CAAC,CAAA;gBAEpB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;gBACxB,OAAO,EAAE,EAAE,CAAA;YAEZ,CAAC;YACD,MAAM,EAAG,KAAK,WAAW,GAAY;gBACpC,YAAY;gBACZ,OAAO,IAAI,CAAA;YACZ,CAAC;YACD,IAAI,EAAG,IAAI;SACX,CAAA;QACD,uEAAuE;QACvE,OAAO,IAAI,CAAA;IACZ,CAAC;IAED;;;;;;QAMI;IACI,KAAK,CAAC,WAAW,CAAE,MAAe;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAS,EAAE,EAAE;gBACzD,IAAI,GAAG,EAAE;oBACR,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;;;;;QAMI;IACI,KAAK,CAAC,YAAY,CAAE,MAAe;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAa,EAAE,MAAY,EAAE,EAAE;YAClD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAS,EAAE,EAAE;gBAC1D,IAAI,GAAG,EAAE;oBACR,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAEO,IAAI,CAAE,MAAe;QAC5B,0CAA0C;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAC1B,CAAC;IAEO,MAAM,CAAE,MAAe;QAC9B,4CAA4C;QAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IAC3B,CAAC;IAEO,QAAQ,CAAE,MAAe;QAChC,OAAO,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAChF,CAAC;CACD;AAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE;IACnD,MAAM,CAAC,OAAO,GAAG,UAAU,CAAO,EAAE,EAAQ,EAAE,UAAqB;QAClE,YAAY,GAAG,EAAE,CAAA;QACjB,GAAG,GAAG,CAAC,CAAA;QACP,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAA;QACjC,OAAO,OAAO,CAAA;IACf,CAAC,CAAA;CACD"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/arduino/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;IAWI;AAEJ,8BAA8B;AAC9B,iCAA+B;AAE/B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;AAC5C,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAA;AACjE,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;AAE1C,MAAM,MAAM,GAAS,IAAI,cAAc,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;AAC9D,MAAM,SAAS,GAAY,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAChD,MAAM,QAAQ,GAAY,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAE/C,IAAI,YAAkB,CAAA;AACtB,IAAI,GAAS,CAAA;AACb,IAAI,OAAa,CAAA;AAEjB,MAAM,KAAK,GAAc;IACxB,wBAAwB;IACxB,6BAA6B;IAC7B,6BAA6B;IAC7B,wBAAwB;IACxB,6BAA6B;IAC7B,wBAAwB;IACxB,cAAc;IACd,MAAM;CACN,CAAA;AAED;;IAEI;AAEJ,MAAM,OAAO;IAmBZ,YAAa,UAAqB;QAhB1B,SAAI,GAAS,EAAE,CAAC;QAChB,UAAK,GAAc,KAAK,CAAC;QACzB,UAAK,GAAS,EAAE,CAAC;QACjB,WAAM,GAAS,EAAE,CAAC;QAClB,aAAQ,GAAS,EAAE,CAAC;QACpB,SAAI,GAAY,KAAK,CAAC;QACtB,UAAK,GAAS,EAAE,CAAC;QACjB,UAAK,GAAY,CAAC,CAAC;QACnB,UAAK,GAAS,EAAE,CAAC;QAMlB,aAAQ,GAAS,EAAE,CAAC;QAG1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,IAAI;QACT,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,KAAK,EAAG,SAAS,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;QAKI;IACG,KAAK,CAAC,SAAS;QACrB,IAAI,KAAa,CAAA;QACjB,IAAI,OAAO,GAAc,EAAE,CAAA;QAC3B,IAAI;YACH,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAA;SAC/B;QAAC,OAAO,GAAG,EAAE;YACb,MAAM,GAAG,CAAA;SACT;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAU,EAAE,EAAE;YAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC5E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;gBACtE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACvB;QACF,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;SACvC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,OAAO,OAAO,CAAA;SACd;IACF,CAAC;IAED;;;;;;;;QAQI;IACI,KAAK,CAAC,SAAS,CAAE,MAAe,EAAE,GAAY;QACrD,OAAO,IAAI,OAAO,CAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,OAAO,MAAM,EAAE,CAAC,CAAA;YAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAW,EAAE,EAAE;gBACjC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAA;YACnB,CAAC,CAAA;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAA;YAClC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAS,EAAE,OAAa,EAAE,EAAE;gBAC9E,IAAI,GAAG,EAAE;oBACR,qBAAqB;oBACrB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;YACF,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;;;;;;;;;QAUI;IACG,KAAK,CAAC,IAAI,CAAE,MAAe,EAAE,GAAY;QAC/C,MAAM,MAAM,GAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACvC,IAAI,EAAW,CAAA;QACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,MAAM,EAAE,CAAC,CAAA;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,MAAM,YAAY,CAAC,CAAA;YAChD,OAAO,IAAI,CAAA;SACX;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACjB,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI;YACH,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;SACtC;QAAC,OAAO,CAAC,EAAE;YACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SACxB;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEnB,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QAC5C,OAAO,EAAE,CAAA;IACV,CAAC;IAED;;;;;;;;;;QAUI;IACG,KAAK,CAAC,UAAU,CAAE,MAAe,EAAE,GAAY;QACrD,IAAI,YAAkB,CAAA;QACtB,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACpC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW;eAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;YACzC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;SAClD;aAAM;YACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,OAAO,MAAM,EAAE,CAAC,CAAA;YAC/C,IAAI;gBACH,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;aACjD;YAAC,OAAO,CAAC,EAAE;gBACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aACxB;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YAC/B,OAAO,YAAY,CAAA;SACnB;IACF,CAAC;IAED;;QAEI;IACI,KAAK,CAAC,UAAU,CAAE,MAAe,EAAE,UAAoB,KAAK;QACnE,MAAM,GAAG,GAAY,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;QAC1C,MAAM,MAAM,GAAY,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5E,OAAO,IAAI,OAAO,CAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAc,EAAE,EAAE;gBACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;gBAC7B,IAAI,OAAO,EAAE;oBACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;oBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,MAAM,oBAAoB,KAAK,GAAG,CAAC,CAAA;iBAC3D;gBACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAA;YACtB,CAAC,CAAA;YACD,IAAI,OAAO,EAAE;gBACZ,UAAU,CAAC;oBACV,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE;wBAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;wBACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;wBAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,MAAM,yBAAyB,CAAC,CAAA;wBACxD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;qBACpB;gBACF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;aACnB;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,OAAO,MAAM,EAAE,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAS,EAAE,OAAa,EAAE,EAAE;gBAClE,IAAI,GAAG,EAAE;oBACR,qBAAqB;oBACrB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;YACF,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;QAEI;IACG,KAAK,CAAC,KAAK,CAAE,MAAe,EAAE,UAAoB,KAAK;QAC7D,MAAM,MAAM,GAAY,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5E,IAAI,OAAgB,CAAA;QAEpB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,MAAM,YAAY,CAAC,CAAA;YACjD,OAAO,IAAI,CAAA;SACX;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEjB,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAEpC,IAAI;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAChD;QAAC,OAAO,CAAC,EAAE;YACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SACxB;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEnB,MAAM,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/D,OAAO,OAAO,CAAA;IACf,CAAC;IAED;;;;;;;QAOI;IACI,KAAK,CAAC,UAAU,CAAE,MAAe,EAAE,GAAY;QACtD,OAAO,IAAI,OAAO,CAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,GAAS,EAAE,OAAa;gBAC5E,IAAI,GAAG,EAAE;oBACR,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;gBACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAEE;;;;;;;;QAQI;IACC,GAAG,CAAE,MAAe,EAAE,IAAa;QAC1C,MAAM,GAAG,GAAY,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QACzC,MAAM,EAAE,GAAY,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA;QACpC,IAAI,QAAc,CAAA;QAClB,2CAA2C;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,kBAAkB;YAClD,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;SACvB;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YAC7C,0CAA0C;YAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;YAClD,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YACtC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACxC,OAAO,IAAI,CAAA;SACX;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAA;YACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACxB,aAAa;YACb,eAAe;YACf,mBAAmB;SACnB;aAAM;YACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,GAAG,CAAC,CAAA,CAAC,gBAAgB;SAC/D;QACD,OAAO,EAAE,CAAA;IACV,CAAC;IACU,KAAK,CAAC,MAAe,EAAE,IAAa;QACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;IAED;;;;;;QAMI;IACA,WAAW,CAAE,MAAe,EAAE,MAAe;QACnD,2DAA2D;QAC3D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7B,CAAC;IACE;;;;;;;;;;;QAWI;IACA,KAAK,CAAC,OAAO,CAAE,MAAe,EAAE,MAAe,EAAE,OAAa;QACpE,2CAA2C;QAC3C,2CAA2C;QAC3C,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,cAAoB,CAAA;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;YAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC;gBACpC,IAAI,EAAG,MAAM;gBACb,QAAQ,EAAG,KAAK;gBAChB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;gBAC1B,MAAM;aACN,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnB,IAAI;gBACH,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;aAC/C;YAAC,OAAO,CAAC,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,MAAM,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,CAAA;gBAC5D,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aAChB;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,MAAM,EAAE,CAAC,CAAA;YACzE,IAAI,CAAC,OAAO,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;oBAClE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;oBAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;oBAClD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBAC3B,CAAC,CAAC,CAAA;aACF;iBAAM;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;oBAClE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;oBAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;oBAClD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;gBAChC,CAAC,CAAC,CAAA;aACF;YAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACH,CAAC;IACE;;;;;QAKI;IACC,UAAU,CAAE,IAAa;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACrC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC5B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;SAClC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;SAClC;IACF,CAAC;IACE;;;;;;;QAOI;IACA,KAAK,CAAC,MAAM;QAClB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAY,SAAS,CAAA;YACjC,IAAI,YAAkB,CAAA;YACtB,IAAI,CAAC,WAAW,GAAG,UAAU,GAAS,EAAE,IAAa;gBACpD,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;oBACrC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;iBACpB;qBAAM;oBACN,OAAO,MAAM,CAAC,qBAAqB,CAAC,CAAA;iBACpC;YACF,CAAC,CAAA;YAED,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAEpC,IAAI;gBACH,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;aACpE;YAAC,OAAO,CAAC,EAAE;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aAChB;YACD,OAAO,OAAO,CAAC,YAAY,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACH,CAAC;IACE;;;;;;;QAOI;IACA,KAAK,CAAC,WAAW;QACvB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAY,SAAS,CAAA;YACjC,IAAI,YAAkB,CAAA;YACtB,IAAI,IAAa,CAAA;YACjB,IAAI,CAAC,WAAW,GAAG,UAAU,GAAS,EAAE,IAAa;gBACpD,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE;oBAClD,IAAI,GAAG,WAAW,CAAA;iBAClB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;oBACtD,IAAI,GAAG,QAAQ,CAAA;iBACf;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;oBACrD,IAAI,GAAG,OAAO,CAAA;iBACd;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE;oBAC/D,IAAI,GAAG,iBAAiB,CAAA;iBACxB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE;oBACtE,IAAI,GAAG,wBAAwB,CAAA;iBAC/B;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE;oBAChE,IAAI,GAAG,kBAAkB,CAAA;iBACzB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE;oBAChE,IAAI,GAAG,kBAAkB,CAAA;iBACzB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;oBAC1D,IAAI,GAAG,4BAA4B,CAAA;iBACnC;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE;oBAC7D,IAAI,GAAG,eAAe,CAAA;iBACtB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE;oBACvD,IAAI,GAAG,sBAAsB,CAAA;iBAC7B;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE;oBACjE,IAAI,GAAG,mCAAmC,CAAA;iBAC1C;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE;oBACjE,IAAI,GAAG,gCAAgC,CAAA;iBACvC;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE;oBAClE,IAAI,GAAG,iDAAiD,CAAA;iBACxD;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;oBACtD,IAAI,GAAG,QAAQ,CAAA;iBACf;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE;oBAC7D,IAAI,GAAG,eAAe,CAAA;iBACtB;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE;oBACvE,IAAI,GAAG,yBAAyB,CAAA;iBAChC;qBAAM,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE;oBACxE,IAAI,GAAG,0CAA0C,CAAA;iBACjD;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC,CAAA;YAED,MAAM,aAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAEpC,IAAI;gBACH,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;gBAC7E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;aAC3B;YAAC,OAAO,CAAC,EAAE;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aAChB;QACF,CAAC,CAAC,CAAA;IACH,CAAC;IACE;;;;;;QAMI;IACA,KAAK,CAAC,KAAK;QACjB,MAAM,MAAM,GAAY,SAAS,CAAA;QACjC,IAAI,YAAsB,CAAA;QAC1B,IAAI;YACH,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;SAC9C;QAAC,OAAO,CAAC,EAAE;YACX,MAAM,CAAC,CAAA;SACP;QACD,OAAO,YAAY,CAAA;IACpB,CAAC;IACE;;;;;;;QAOI;IACA,KAAK,CAAC,WAAW,CAAE,MAAe;QACxC,MAAM,MAAM,GAAY,WAAW,CAAA;QACnC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;YACrB,KAAK,EAAG,KAAK,WAAW,GAAY,EAAE,EAAQ;gBAC7C,MAAM,CAAC,GAAS;oBACf,CAAC,EAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK;oBAChD,CAAC,EAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;oBAClD,CAAC,EAAG,GAAG;oBACP,CAAC,EAAG,GAAG;iBACP,CAAA;gBACD,IAAI,OAAO,GAAY,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC7B,IAAI,OAAO,OAAO,KAAK,WAAW;oBAAE,OAAO,GAAG,EAAE,CAAA;gBAChD,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;gBAE3B,MAAM,aAAK,CAAC,OAAO,CAAC,CAAA;gBAEpB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;gBACxB,OAAO,EAAE,EAAE,CAAA;YAEZ,CAAC;YACD,MAAM,EAAG,KAAK,WAAW,GAAY;gBACpC,YAAY;gBACZ,OAAO,IAAI,CAAA;YACZ,CAAC;YACD,IAAI,EAAG,IAAI;SACX,CAAA;QACD,uEAAuE;QACvE,OAAO,IAAI,CAAA;IACZ,CAAC;IAED;;;;;;QAMI;IACI,KAAK,CAAC,WAAW,CAAE,MAAe;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAS,EAAE,EAAE;gBACzD,IAAI,GAAG,EAAE;oBACR,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAED;;;;;;QAMI;IACI,KAAK,CAAC,YAAY,CAAE,MAAe;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAa,EAAE,MAAY,EAAE,EAAE;YAClD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAS,EAAE,EAAE;gBAC1D,IAAI,GAAG,EAAE;oBACR,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;iBAClB;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;IAEO,IAAI,CAAE,MAAe;QAC5B,0CAA0C;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAC1B,CAAC;IAEO,MAAM,CAAE,MAAe;QAC9B,4CAA4C;QAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IAC3B,CAAC;IAEO,QAAQ,CAAE,MAAe;QAChC,OAAO,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAChF,CAAC;CACD;AAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE;IACnD,MAAM,CAAC,OAAO,GAAG,UAAU,CAAO,EAAE,EAAQ,EAAE,UAAqB;QAClE,YAAY,GAAG,EAAE,CAAA;QACjB,GAAG,GAAG,CAAC,CAAA;QACP,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAA;QACjC,OAAO,OAAO,CAAA;IACf,CAAC,CAAA;CACD"} \ No newline at end of file diff --git a/app/package-lock.json b/app/package-lock.json index 51b8871..ab51934 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.7.23", + "version": "1.7.24", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/app/package.json b/app/package.json index c6d50ae..0634f2f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.7.23", + "version": "1.7.24", "description": "GUI for the mcopy small gauge film optical printer platform", "main": "main.js", "scripts": { diff --git a/data/cfg.json b/data/cfg.json index ab04d88..83a20d7 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.7.23", + "version": "1.7.24", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/package-lock.json b/package-lock.json index 6b6a67a..8597cc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcopy", - "version": "1.7.23", + "version": "1.7.24", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mcopy", - "version": "1.7.23", + "version": "1.7.24", "license": "MIT", "dependencies": { "arduino": "file:app/lib/arduino", diff --git a/package.json b/package.json index 344b1a1..ea25740 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcopy", - "version": "1.7.23", + "version": "1.7.24", "description": "Small gauge film optical printer platform", "main": "build.js", "directories": { diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index ab04d88..83a20d7 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.7.23", + "version": "1.7.24", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/src/arduino/index.ts b/src/arduino/index.ts index 32cb3b4..3125856 100644 --- a/src/arduino/index.ts +++ b/src/arduino/index.ts @@ -57,6 +57,8 @@ class Arduino { private locks : any = {}; private confirmExec : any; private errorState : Function; + private keys : string[]; + private values : string[]; public stateStr : any = {}; @@ -68,11 +70,14 @@ class Arduino { async init () { const Log = require('log'); this.log = await Log({ label : 'arduino' }); + this.keys = Object.keys(cfg.arduino.cmd); + this.values = this.keys.map(key => cfg.arduino.cmd[key]); } /** * Enumerate all connected devices that might be Arduinos * + * @async * @returns {Promise} Resolves after enumerating **/ public async enumerate () : Promise{ @@ -108,9 +113,10 @@ class Arduino { /** * Send a command to an Arduino using async/await * - * @param {string} device Arduino identifier + * @param {string} device The Arduino device identifier * @param {string} cmd Single character command to send * + * @async * @returns {Promise} Resolves after sending **/ private async sendAsync (device : string, cmd : string) : Promise { @@ -130,7 +136,15 @@ class Arduino { } /** - * + * Sends a command to the specified Arduino and waits for a response. + * Handles the communication lock to prevent sending multiple commands simultaneously. + * Emits an 'arduino_send' event after successfully sending the command. + * + * @async + * @param {string} device - The Arduino device identifier. + * @param {string} cmd - The command to be sent to the Arduino. + * @returns {Promise} Returns 'false' if the communication is locked, otherwise returns the response from the device. + * @throws {Error} Throws an error if the sendAsync method encounters an error. **/ public async send (device : string, cmd : string) : Promise { const serial : any = this.alias[device] @@ -155,7 +169,15 @@ class Arduino { } /** - * + * Sends a string to the specified Arduino. + * Handles different types of devices, including fake devices for testing purposes. + * Waits for a specified delay before sending the string. + * + * @async + * @param {string} device - The Arduino device identifier. + * @param {string} str - The string to be sent to the Arduino. + * @returns {Promise} Returns 'true' if the string is sent successfully, otherwise returns an error message. + * @throws {Error} Throws an error if the writeAsync method encounters an error. **/ public async sendString (device : string, str : string) : Promise { let writeSuccess : any @@ -256,9 +278,15 @@ class Arduino { }) } - /** - * - **/ + /** + * Handles the end of communication with the Arduino. + * Calculates the time taken for the communication, executes the callback, + * and emits an 'arduino_end' event. Handles errors and stray data received. + * + * @param {string} serial - The serial address of the Arduino device. + * @param {string} data - The data received from the Arduino. + * @returns {any} The time taken for the communication in milliseconds. + **/ private end (serial : string, data : string) : any { const end : number = new Date().getTime() const ms : number = end - this.timer @@ -279,20 +307,42 @@ class Arduino { } else if (data[0] === cfg.arduino.cmd.error) { this.log.error(`Received error from device ${serial}`) this.unlock(serial) + this.error(serial, data) //error state //stop sequence //throw error in ui } else { - //this.log.info('Received stray "' + data + '"') //silent to user + this.log.info('Received stray "' + data + '"') //silent to user } return ms } + private error(serial : string, data : string) { + this.log.error("ERROR", data) + } + /** + * Associates an alias with an Arduinos serial address. + * Used to map multi-purpose devices onto the same serial connection. + * + * @param {string} device - The serial number of the target Arduino. + * @param {string} serial - The alias to be associated with the target device. + **/ public aliasSerial (device : string, serial : string) { //this.log.info(`Making "${serial}" an alias of ${device}`) this.alias[device] = serial; } - + /** + * Connects to an Arduino using its serial number. + * Sets up the SerialPort instance and path for the device, and handles data communication. + * Handles opening the connection and emitting 'arduino_end' or 'confirmEnd' events upon receiving data. + * + * @async + * @param {string} device - The device identifier (common name). + * @param {string} serial - The serial address of the target Arduino (e.g., COM port on Windows). + * @param {function} confirm - A callback function to be executed upon receiving confirmation data. + * @returns {Promise} Resolves with the device path if the connection is successful. + * @throws {Error} Rejects with an error message if the connection fails. + **/ public async connect (device : string, serial : string, confirm : any) : Promise { //this.log.info(`connect device ${device}`) //this.log.info(`connect serial ${serial}`) @@ -310,7 +360,7 @@ class Arduino { try { connectSuccess = await this.openArduino(device) } catch (e) { - this.log.error('failed to open: ' + e) + this.log.error(`Failed to open ${device} @ ${serial}: ` + e) return reject(e) } this.log.info(`Opened connection with ${this.path[device]} as ${device}`) @@ -331,35 +381,14 @@ class Arduino { return resolve(this.path[serial]) }) } - + /** + * Handles the confirmation data received from an Arduino. + * Executes the confirmation callback function if the received data is present in the list of expected values. + * + * @param {string} data - The data received from the Arduino. + **/ private confirmEnd (data : string) { - if ( data === cfg.arduino.cmd.connect - || data === cfg.arduino.cmd.projector_identifier - || data === cfg.arduino.cmd.camera_identifier - || data === cfg.arduino.cmd.light_identifier - || data === cfg.arduino.cmd.projector_light_identifier - || data === cfg.arduino.cmd.projector_camera_light_identifier - || data === cfg.arduino.cmd.projector_camera_identifier - - || data === cfg.arduino.cmd.projector_second_identifier - || data === cfg.arduino.cmd.projectors_identifier - || data === cfg.arduino.cmd.projector_second_forward - || data === cfg.arduino.cmd.projector_second_backward - || data === cfg.arduino.cmd.projector_second - || data === cfg.arduino.cmd.projectors - - || data === cfg.arduino.cmd.camera_second_identifier - || data === cfg.arduino.cmd.cameras_identifier - || data === cfg.arduino.cmd.camera_second_forward - || data === cfg.arduino.cmd.camera_second_backward - || data === cfg.arduino.cmd.camera_second - || data === cfg.arduino.cmd.cameras - - || data === cfg.arduino.cmd.capper_identifier - || data === cfg.arduino.cmd.camera_capper_identifier - || data === cfg.arduino.cmd.camera_capper_projector_identifier - || data === cfg.arduino.cmd.camera_capper_projectors_identifier) { - + if (this.values.indexOf(data) !== -1) { this.confirmExec(null, data) this.confirmExec = {} this.unlock(this.alias['connect']) @@ -369,7 +398,14 @@ class Arduino { this.unlock(this.alias['connect']) } } - + /** + * Verifies the connection to an Arduino by sending a connect command. + * The confirmation callback checks if the received data matches the expected connect command. + * + * @async + * @returns {Promise} Resolves with 'true' if the connection is verified successfully. + * @throws {Error} Rejects with an error message if the connection verification fails. + **/ public async verify () { return new Promise(async (resolve, reject) => { const device : string = 'connect' @@ -392,8 +428,15 @@ class Arduino { return resolve(writeSuccess) }) } - - public async distinguish () { + /** + * Distinguishes the type of Arduino connected. + * Sends a command to the device to identify its type and resolves the promise with the received type. + * + * @async + * @returns {Promise} Resolves with the type of the connected Arduino-based device. + * @throws {Error} Rejects with an error message if the distinguish operation fails. + **/ + public async distinguish () : Promise { return new Promise(async (resolve, reject) => { const device : string = 'connect' let writeSuccess : any @@ -447,8 +490,14 @@ class Arduino { } }) } - - public async close () { + /** + * Closes the connection to an Arduino. + * + * @async + * @returns {Promise} Resolves with 'true' if the connection is closed successfully. + * @throws {Error} Throws an error if the closeArduino method encounters an error. + **/ + public async close () : Promise { const device : string = 'connect' let closeSuccess : boolean try { @@ -458,7 +507,14 @@ class Arduino { } return closeSuccess } - + /** + * Establishes a fake connection to an Arduino for testing purposes. + * Creates a fake SerialPort instance with custom write and string methods. + * + * @async + * @param {string} serial - The device identifier of the fake Arduino. + * @returns {Promise} Resolves with 'true' if the fake connection is established successfully. + **/ public async fakeConnect (device : string) { const serial : string = '/dev/fake' this.aliasSerial(device, serial)