# 86Duino CLI - Full AI Reference for QEC Boards > Official AI-readable reference for `86duino-cli`, the command-line tool used to compile and upload sketches to ICOP Technology QEC and 86Duino boards. Maintained by QEC. Paste this URL into ChatGPT, Claude, Cursor, Copilot, Gemini, or any LLM-powered tool to obtain authoritative context for QEC firmware development tasks. > > Canonical URL: https://www.qec.tw/llms-full.txt > Site: https://www.qec.tw/ > Last verified: 2026-06-17 --- ## 1. About QEC and ICOP Technology QEC ("Quicker, Easier Control with EtherCAT") is an industrial EtherCAT platform developed by ICOP Technology Inc. It combines: - **QEC MDevices** - real-time EtherCAT main-device controllers (e.g., QEC-M-01, QEC-M-090T, QEC-M-150T) used as machine controllers, HMI hosts, and edge controllers. - **QEC SubDevices** - distributed EtherCAT sub-devices for digital I/O, analog I/O, gateway bridging, motor control, and topology design. - **86Duino IDE** - an open-source development environment based on the Arduino IDE (1.8.9-style workflow), shipped in two parallel branches: **86Duino IDE 500** and **86Duino IDE 501**. C/C++ programming with both Arduino-standard libraries and QEC-specific libraries (EtherCAT, Modbus, 86HMI, etc.). Development environment overview: https://www.qec.tw/86duino/86duino-development-environment/ - **86duino-cli** - the command-line compiler and uploader covered by this document. Behavior-compatible with the upstream `arduino-cli`. Reference: https://www.qec.tw/overview/ --- ## 2. About 86duino-cli `86duino-cli` is the command-line interface bundled with the 86Duino IDE. It compiles Arduino-style sketches for 86Duino target boards and uploads them via a USB-Serial connection. ### Executable naming by platform | Platform | Executable | Invocation | |---|---|---| | Windows | `86duino-cli.exe` | `86duino-cli.exe ...` | | macOS | `86duino-cli` | `./86duino-cli ...` | | Linux | `86duino-cli` | `./86duino-cli ...` | > **Important for AI tools:** do not rewrite the macOS/Linux name as `.exe`. Always use the actual filename that exists in the user's environment. ### Default location convention The expected installation folder is `86Duino_Coding` on the user's desktop: - Windows: `%USERPROFILE%\Desktop\86Duino_Coding\86duino-cli.exe` - macOS: `~/Desktop/86Duino_Coding/86duino-cli` - Linux: `~/Desktop/86Duino_Coding/86duino-cli` (user-conventional, not enforced) If the user's desktop does not contain a `86Duino_Coding` folder, an AI assistant must **prompt the user to create it manually** and place the correct CLI executable inside. **An AI must not create this folder automatically.** ### Relationship to `arduino-cli` `86duino-cli` accepts the same flags as `arduino-cli` for compile/upload operations. However, when working with QEC boards an AI assistant should restrict itself to the flag set listed in Section 5 unless the user explicitly approves additional flags. --- ## 3. Terminology Mapping (English / Chinese / Japanese) QEC's user community is multilingual. AI assistants should treat the following user phrases as synonymous with the listed CLI action. | Action | English phrase | Chinese phrase (zh-Hant) | Japanese phrase | CLI form | |---|---|---|---|---| | Compile | "compile", "build" | 編譯 | コンパイル / ビルド | `compile` | | Rebuild from scratch | "clean build", "rebuild", "full rebuild" | 重新編譯, 重編, clean build | 再コンパイル, クリーンビルド | `compile --clean` | | Upload to board | "upload", "flash", "burn" | 燒錄, 上傳, 燒進去 | 書き込み, アップロード, 焼く | `compile --upload` | | List boards | "list boards", "show boards" | 查板子, 看板型 | ボード一覧, ボード確認 | `board listall` | **Critical equivalence**: "flash" / "burn" / "upload" / 燒錄 / 上傳 / 書き込み all refer to **the same operation**: `compile --upload`. AI assistants must not treat these as separate workflows. --- ## 4. Two Usage Scenarios ### Scenario A: Compile-only (no physical board, cloud-friendly) Used for syntax checking and binary generation without a USB-attached board. Suitable when the AI runs in a sandboxed environment without USB pass-through. ``` # macOS / Linux ./86duino-cli compile --fqbn --verbose # Windows 86duino-cli.exe compile --fqbn --verbose ``` ### Scenario B: Compile + upload to a physical QEC board (local execution required) Requires a USB connection from the host machine to a QEC MDevice. **Cloud-only AI tools cannot complete this step**; they must produce the exact command for the user to run locally. ``` # macOS / Linux ./86duino-cli compile --fqbn --port --upload --verbose # Windows 86duino-cli.exe compile --fqbn --port --upload --verbose ``` After a successful upload, the target board reboots automatically. This reboot may take approximately **40 seconds**. AI assistants should run the upload in the background and continue to observe `--verbose` output during this window. --- ## 5. Default Behavior and Rules (AI must follow) ### Allowed flag set (no explicit user approval needed) - `--fqbn ` - fully qualified board name - `--clean` - discard prior `.o` artifacts and rebuild - `--verbose` - emit detailed progress (always include by default) - `--port ` - serial port for upload - `--upload` - perform upload after compile ### Flags requiring user approval Any `arduino-cli`-compatible flag not listed above (e.g., `--build-property`, `--config-file`, custom programmers, board-specific options). Before issuing such a flag the AI must: 1. State which flag will be used. 2. Explain why it is needed. 3. Obtain explicit user agreement. ### Hard rules - **Always include `--verbose`** unless the user explicitly opts out. - **Never guess an FQBN.** Run `board listall` and match against actual output. If the user's description is ambiguous, list candidates and ask the user to pick. - **Never auto-create the `86Duino_Coding` folder.** Prompt the user instead. - **Never auto-select a port** if multiple PL2303 candidates exist. List them and ask. - **Stop immediately on upload failure.** Report the raw error verbatim. Do not retry, do not continue with subsequent steps, do not minimize the error. - **Use the actual executable filename** that exists in the user's filesystem. Do not rewrite `86duino-cli` to `86duino-cli.exe` or vice versa based on assumption. --- ## 6. FQBN Reference Table for QEC and 86Duino Boards The following table is the **verified output** of `./86duino-cli board listall` on a working 86Duino IDE installation, filtered to show only 86Duino-vendor boards (Arduino-vendor boards omitted). | Board name | FQBN | |---|---| | 86Duino DUO | `86duino:x86:86DuinoEX2` | | 86Duino EduCake | `86duino:x86:EduCake` | | 86Duino ONE | `86duino:x86:86DuinoONE` | | 86Duino QEC | `86duino:x86:86DuinoQEC` | | 86Duino QEC7 | `86duino:x86:86DuinoQEC7` | | 86Duino QEC9 | `86duino:x86:86DuinoQEC9` | | 86Duino QEC15 | `86duino:x86:86DuinoQEC15` | | 86Duino QECM2 | `86duino:x86:86DuinoQECM2` | | 86Duino QECM02 | `86duino:x86:86DuinoQECM02` | | 86Duino QECPPC9 | `86duino:x86:86DuinoQECPPC9` | | 86Duino QECPPC15 | `86duino:x86:86DuinoQECPPC15` | | 86Duino QECPPC104 | `86duino:x86:86DuinoQECPPC104` | | 86Duino ZERO | `86duino:x86:86DuinoZERO` | ### Voice-to-FQBN heuristics These are **best-effort matches only**. The authoritative answer always comes from `board listall` run on the user's actual environment. | User phrasing | Likely board | FQBN | |---|---|---| | "the QEC board" / "QEC 板" | 86Duino QEC | `86duino:x86:86DuinoQEC` | | "QEC 7-inch panel" / "QEC 7 吋" | 86Duino QEC7 | `86duino:x86:86DuinoQEC7` | | "QEC 9-inch panel" / "QEC 9 吋" | 86Duino QEC9 | `86duino:x86:86DuinoQEC9` | | "QEC 15-inch panel" / "QEC 15 吋" | 86Duino QEC15 | `86duino:x86:86DuinoQEC15` | | "QEC M2" | 86Duino QECM2 | `86duino:x86:86DuinoQECM2` | | "QEC M02" | 86Duino QECM02 | `86duino:x86:86DuinoQECM02` | | "QEC PPC9" | 86Duino QECPPC9 | `86duino:x86:86DuinoQECPPC9` | | "QEC PPC15" | 86Duino QECPPC15 | `86duino:x86:86DuinoQECPPC15` | | "QEC PPC104" | 86Duino QECPPC104 | `86duino:x86:86DuinoQECPPC104` | | "DUO" | 86Duino DUO | `86duino:x86:86DuinoEX2` | | "ONE" | 86Duino ONE | `86duino:x86:86DuinoONE` | | "ZERO" | 86Duino ZERO | `86duino:x86:86DuinoZERO` | | "EduCake" | 86Duino EduCake | `86duino:x86:EduCake` | ### Trap: 86Duino DUO's FQBN The 86Duino **DUO** maps to FQBN `86duino:x86:86DuinoEX2` - **not** `86DuinoDUO`. Many AI tools incorrectly guess `86DuinoDUO` based on the board name. Always verify against `board listall`. --- ## 7. Port Detection Rules QEC MDevices use the **Prolific PL2303GC** USB-to-Serial bridge chip. AI assistants should look for PL2303-named devices when auto-detecting upload ports. Reference: QEC FAQ section "My PC does not detect the QEC MDevice via USB" at https://www.qec.tw/faq/ ### Windows Identify devices in **Device Manager -> Ports (COM & LPT)** whose name begins with `Prolific PL2303GC`. Example device name: ``` Prolific PL2303GC USB Serial COM Port (COM6) ``` Extract `COM6` from the trailing parenthetical and pass as `--port COM6`. PowerShell detection: ```powershell Get-PnpDevice -Class Ports | Where-Object { $_.FriendlyName -like "*PL2303*" } | Select-Object FriendlyName ``` If no PL2303 device is present, the most likely cause is a missing PL2303 driver. The driver is available on the QEC Software page: https://www.qec.tw/software/ ### macOS List `/dev/tty.*` and filter for `PL2303`: ``` ls /dev/tty.* | grep -i PL2303 ``` Example output: ``` /dev/tty.PL2303G-USBtoUART1120 ``` Pass the full path as `--port /dev/tty.PL2303G-USBtoUART1120`. ### Linux ``` ls /dev/ttyUSB* 2>/dev/null dmesg | grep -i pl2303 | tail ``` The PL2303 driver is included in mainline kernels (`pl2303.ko`). Typical device node: `/dev/ttyUSB0`. ### Multiple PL2303 candidates If two or more PL2303 devices are present, the AI must list all candidates and ask the user which one to use. **Do not select arbitrarily.** ### No PL2303 detected If no PL2303 device is found, the AI must not attempt to upload. Respond with a clarifying question equivalent to: > "I cannot find a PL2303 serial port on your system. Is the USB cable to the QEC board plugged in?" If the user confirms the cable is connected, suggest checking the QEC Software page for the PL2303 driver. --- ## 8. Command Templates ### 8.1 List all installed boards ``` # macOS / Linux cd ~/Desktop/86Duino_Coding && ./86duino-cli board listall # Windows cd %USERPROFILE%\Desktop\86Duino_Coding 86duino-cli.exe board listall ``` ### 8.2 Compile ``` # macOS / Linux ./86duino-cli compile --fqbn --verbose # Windows 86duino-cli.exe compile --fqbn --verbose ``` ### 8.3 Clean rebuild (discards .o cache) ``` # macOS / Linux ./86duino-cli compile --fqbn --clean --verbose # Windows 86duino-cli.exe compile --fqbn --clean --verbose ``` ### 8.4 Compile + upload ``` # macOS / Linux ./86duino-cli compile --fqbn --port --upload --verbose # Windows 86duino-cli.exe compile --fqbn --port --upload --verbose ``` --- ## 9. Standard Workflows (AI Standard Operating Procedure) ### 9.1 Compile workflow 1. Verify `86Duino_Coding` folder and its CLI executable exist on the user's desktop. 2. Resolve the project path to an absolute path. If the user gave a colloquial location (e.g., "the sketch_mar24b folder on my desktop"), translate to the absolute path: - Windows: `C:\Users\\Desktop\sketch_mar24b` - macOS: `/Users//Desktop/sketch_mar24b` or `~/Desktop/sketch_mar24b` 3. Run `board listall`. Match the user's board description to a single FQBN. If ambiguous, list candidates and confirm with the user. 4. Execute: ``` compile --fqbn --verbose ``` 5. On compile failure: read the error, propose the smallest necessary fix, retry once. Do not silently retry indefinitely. 6. On success: report the result. ### 9.2 Compile + upload workflow 1. Same as steps 1-3 above. 2. Resolve the upload port: - If the user supplied a port -> use it verbatim. - Otherwise -> auto-detect using the rules in Section 7. 3. If multiple PL2303 candidates -> ask the user which to use. 4. If no PL2303 detected -> ask whether the cable is plugged in. Do not proceed. 5. Execute (preferably as a background process so output can be observed): ``` compile --fqbn --port --upload --verbose ``` 6. The board will reboot automatically. Wait up to ~40 seconds while monitoring `--verbose` output. 7. On upload failure: **stop immediately**, output the raw error, do not proceed. 8. On success: report compile + upload success. --- ## 10. Interaction Examples ### Example 1: Compile only **User:** > "My 86Duino project is in the sketch_mar24b folder on my desktop. I'm using the QEC 7-inch board. Please compile and fix any errors automatically." **AI behavior:** 1. Resolve path: `C:\Users\\Desktop\sketch_mar24b` (Windows) or `~/Desktop/sketch_mar24b` (macOS). 2. Resolve FQBN: `86duino:x86:86DuinoQEC7`. 3. Execute: ``` 86duino-cli.exe compile --fqbn 86duino:x86:86DuinoQEC7 C:\Users\\Desktop\sketch_mar24b --verbose ``` 4. If compile errors: read output, propose minimum fix, recompile. 5. Report final status. ### Example 2: Compile + upload **User:** > "My project is at `C:\Users\RoBoard\Downloads\arduino_cli\sketch_mar24b`. Using QEC M02 board. Compile, fix errors, then upload." **AI behavior:** 1. FQBN: `86duino:x86:86DuinoQECM02`. 2. Auto-detect PL2303 port. Suppose it returns `COM3`. 3. Execute: ``` 86duino-cli.exe compile --fqbn 86duino:x86:86DuinoQECM02 --port COM3 --upload C:\Users\RoBoard\Downloads\arduino_cli\sketch_mar24b --verbose ``` 4. On compile errors: fix and retry. 5. On success: wait ~40 seconds for board reboot and continue monitoring output. ### Example 3: Clean rebuild **User:** > "Force a clean rebuild of sketch_mar24b on my desktop." **AI behavior:** ``` 86duino-cli.exe compile --fqbn 86duino:x86:86DuinoQEC7 C:\Users\\Desktop\sketch_mar24b --clean --verbose ``` ### Example 4: Insufficient information **User:** > "Compile and upload my 86Duino project." **AI response (do not proceed):** > "I need a few details before I can proceed: > (1) the absolute path to your sketch folder, > (2) the target board model (e.g., QEC 7-inch, QEC M02), > (3) confirmation that `86Duino_Coding` exists on your desktop with `86duino-cli` (or `86duino-cli.exe`) inside. > Once those are confirmed I'll detect the PL2303 port and run the compile + upload." ### Example 5: Cable not plugged in **User:** > "Compile and upload sketch_mar24b on my desktop to the QEC 7-inch board." **AI behavior:** 1. Attempt PL2303 detection - none found. 2. Respond: > "I cannot find a PL2303 serial port on your system. Is the USB cable to the QEC board plugged in?" 3. Do not attempt upload. --- ## 11. Common Error Scenarios | Situation | Recommended AI response | |---|---| | Desktop has no `86Duino_Coding` folder | Ask the user to create it and place the correct CLI executable inside. Do not auto-create. | | `86Duino_Coding` exists but no CLI executable | Ask the user to download and place `86duino-cli` (or `.exe`) inside. Point to https://www.qec.tw/software/ | | Board name maps to multiple candidates | List candidate FQBNs and ask the user to confirm. | | No PL2303 port detected | Ask whether the USB cable is connected. Suggest installing the PL2303 driver from the QEC Software page if confirmed plugged in. | | Multiple PL2303 ports detected | List all candidates and ask the user to choose. | | Compile failure | Output the error verbatim, propose the smallest viable fix, retry once. | | Upload failure | **Stop immediately**, output the raw error, do not continue. | | User asks for a flag not in the approved set | Explain the flag's purpose, ask for explicit approval before using. | --- ## 12. Cloud vs Local AI Capability Matrix | Capability | Cloud AI (ChatGPT web, Claude.ai, Gemini web) | Local AI (Claude Desktop, Cursor, Cline, Continue) | |---|---|---| | Read user's filesystem | No | Yes | | Execute `86duino-cli` directly | No (unless via a sandboxed code interpreter without USB) | Yes | | Detect COM / tty devices on user's machine | No | Yes | | Best mode of operation | Produce complete, copy-pastable CLI commands | Run the CLI directly and observe output | **Critical rule for cloud AI:** when you cannot execute the CLI yourself, your output must contain the **complete, copy-pastable command** with the FQBN, absolute project path, and detected port (or a placeholder marked clearly for the user to fill in). --- ## 13. Multilingual Considerations QEC documentation is published in English, 繁體中文 (zh-TW), and 日本語 (ja). The QEC website (https://www.qec.tw/) maintains parallel paths: - English: `https://www.qec.tw/...` - 繁體中文: `https://www.qec.tw/zh/...` - 日本語: `https://www.qec.tw/ja/...` AI assistants should respond in the user's apparent language but always use English for technical identifiers (FQBNs, flag names, port names) since those are language-invariant. Mixing English flag names into Chinese or Japanese responses is normal and expected. --- ## 14. Verified Sources The information in this document is derived from the following verified sources: | Topic | Source | |---|---| | FQBN list (13 boards) | Output of `./86duino-cli board listall` on a working 86Duino IDE installation. | | PL2303GC chip identification | QEC FAQ, "My PC does not detect the QEC MDevice via USB" section. https://www.qec.tw/faq/ | | Reboot duration after upload | QEC official skill specification. | | 86Duino IDE 500/501 versions | QEC homepage, Software & Tools section. https://www.qec.tw/ | | Product families (MDevice, SubDevice) | QEC Overview page. https://www.qec.tw/overview/ | | Multilingual site structure | QEC sitemap_index.xml: https://www.qec.tw/sitemap_index.xml | | Allowed CLI flag set | QEC official 86duino-cli skill specification. | Fields **not** covered in this document because they have not been verified against QEC documentation: - Specific QEC MDevice hardware specifications (CPU model, RAM, storage by SKU) - EtherCAT Library API signatures - authoritative reference: https://www.qec.tw/ethercat/api/ethercat-library-api-user-manual/ - CiA402 motion profile internals - authoritative reference: https://www.qec.tw/ethercat/api/cia402/ - Modbus library API details - authoritative reference: https://www.qec.tw/86duino-library/modbus-library/ - 86HMI Editor - authoritative reference: https://www.qec.tw/86duino/86hmi/ - ArduBlock - authoritative reference: https://www.qec.tw/86duino/ardublock/ - 86EVA (EtherCAT-Based Virtual Arduino) - authoritative reference: https://www.qec.tw/ethercat/86eva/ - Library catalog (overview of all libraries): https://www.qec.tw/86duino/libraries/ - Getting Started (set up QEC for 86Duino): https://www.qec.tw/ethercat/ethercat-application/set-up-the-qec-for-86duino/ For these topics, AI assistants should direct the user to the specific URLs above. If the user's question is outside these listed topics, fall back to the QEC site search or contact form rather than attempting to answer from inference. --- ## 15. Related Tools and Library Catalog ### 15.1 Related Tools (out of scope for `86duino-cli` itself) These are referenced for completeness; their usage is outside the scope of this document. - **86EVA** - EtherCAT-Based Virtual Arduino: configuration workflow for EtherCAT setup, Virtual Arduino mapping, and project deployment. https://www.qec.tw/ethercat/86eva/ - **86HMI** - HMI design framework for QEC panel PCs. https://www.qec.tw/86duino/86hmi/ - **ArduBlock** - Low-code, block-based programming environment compatible with 86Duino projects. https://www.qec.tw/86duino/ardublock/ - **86Duino Development Environment** - overview of the 86Duino IDE and toolchain. https://www.qec.tw/86duino/86duino-development-environment/ - **86Duino Language Reference** - Arduino-style language and syntax reference for 86Duino sketches. https://www.qec.tw/86duino/86duino-language-reference/ - **Getting Started** - set up your first QEC MDevice with 86Duino. https://www.qec.tw/ethercat/ethercat-application/set-up-the-qec-for-86duino/ - **PL2303 driver download** - Required on Windows if Device Manager shows the QEC USB connection with a yellow warning icon. https://www.qec.tw/software/ ### 15.2 Official 86Duino Library Catalog Authoritative source: https://www.qec.tw/86duino/libraries/ (article dated 2026-03-31, "Libraries"). The 86Duino IDE ships with the following libraries. AI assistants should reference these names when the user asks "is there a library for X?" and direct deeper questions to the URL above. **Supported Arduino Standard Libraries** (Arduino-compatible, included with 86Duino IDE): - `EEPROM` - reading and writing to "permanent" storage. https://www.qec.tw/86duino-library/eeprom-library/ - `Ethernet` - connecting to the internet via the onboard LAN connector. https://www.qec.tw/86duino-library/ethernet-library/ - `Firmata` - communicating with applications on the host using the standard serial protocol. https://www.qec.tw/86duino-library/firmata-library/ - `LiquidCrystal` - controlling LCDs. https://www.qec.tw/86duino-library/liquidcrystal-library/ - `SD` - reading and writing SD cards. https://www.qec.tw/86duino-library/sd-library/ - `Servo` - controlling servo motors. https://www.qec.tw/86duino-library/servo-library/ - `SPI` - Serial Peripheral Interface bus communication. https://www.qec.tw/86duino-library/spi-library/ - `SoftwareSerial` - software-implemented serial on digital pins. https://www.qec.tw/86duino-library/softwareserial-library/ - `Stepper` - controlling stepper motors. https://www.qec.tw/86duino-library/stepper-library/ - `Wire` - Two-Wire Interface (TWI / I2C). https://www.qec.tw/86duino-library/wire-library/ **86Duino-Only Libraries** (specific to 86Duino hardware, not in upstream Arduino): - `Motion86` - multi-axis motion controller functionality. https://www.qec.tw/86duino-library/motion86-library/ - `Modbus` - Modbus ASCII / RTU / TCP master and slave. https://www.qec.tw/86duino-library/modbus-library/ - `CANBus` - Controller Area Network communication. https://www.qec.tw/86duino-library/canbus-library/ - `FirmataPlus86` - Scratch integration via FirmataPlus protocol. https://www.qec.tw/86duino-library/firmataplus86-library/- `Servo86` - extended servo-motor library for robot motion. https://www.qec.tw/86duino-library/servo86-library/ - `AIServo86` - serial-servo-motor library for robot motion. https://www.qec.tw/86duino-library/aiservo86-library/ **EtherCAT Libraries** (QEC platform-specific): - `EtherCAT` - makes QEC a working EtherCAT main-device system. https://www.qec.tw/ethercat/api/ethercat-library-api-user-manual/ - `EthercatDevice_CiA402` - generic CiA 402 EtherCAT SubDevice class for controlling any CiA 402-compliant servo drive. https://www.qec.tw/ethercat/api/cia402/ **Supported Non-Standard Arduino Libraries** (Arduino libraries adapted for 86Duino): - `Audio` - onboard HD Audio interface via Arduino Due Audio library API. https://www.qec.tw/86duino-library/audio-library/ - `TimerOne` - 86Duino's 32-bit hardware timer via Arduino TimerOne API. https://www.qec.tw/86duino-library/timerone-library/ - `MsTimer2` - 86Duino's second hardware timer via Arduino MsTimer2 API. https://www.qec.tw/86duino-library/mstimer2-library/ - `Time86` - on-board RTC timer via Arduino Time library API. https://www.qec.tw/86duino-library/time86-library/ - `SCoop` - Simple Cooperative Scheduler for multi-threaded / multi-tasking sketches. https://www.qec.tw/86duino-library/scoop/scoop-library/ To use a library in a sketch: `Sketch > Import Library` in the 86Duino IDE, or `#include ` at the top of the sketch. --- ## 16. Quick AI Prompt (paste into ChatGPT / Claude / Cursor / Copilot) If the user wants the AI to use this reference, the most effective prompt is: ``` I'm developing for an 86Duino QEC board. Please read https://www.qec.tw/llms-full.txt for the official 86duino-cli reference (FQBNs, port detection, build/upload commands), then help me with my project. ``` --- *This file is authored and maintained by QEC. It is AI-readable plain text. Last verified 2026-06-17. Report inaccuracies via the QEC contact form at https://www.qec.tw/contact/.*