diff options
| author | Ján Sučan <sucanjan@fit.cvut.cz> | 2017-05-10 15:13:29 +0200 |
|---|---|---|
| committer | Ján Sučan <sucanjan@fit.cvut.cz> | 2017-05-10 15:13:29 +0200 |
| commit | 02e24f0f533fe904c3a5275c4060c10c38d7c17a (patch) | |
| tree | 19d05c60e3d6a6782c4712de960a8f6705054063 | |
Uvodny commit, subory su rovnake ako na CD prilozenom k vytlacenemu texu bakalarskej prace, naviac je pridany len subor LICENCIA
156 files changed, 14902 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..31e971d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,100 @@ +cmake_minimum_required (VERSION 3.3) +project (Main VERSION 1.0.0) + +add_compile_options (-Wall -Werror -pedantic -g) + +# Path to common firmware binary files +set (FwPrefix ${CMAKE_CURRENT_SOURCE_DIR}/firmware) +set (FwCommonPrefix ${FwPrefix}) +set(FwCommon + ${FwCommonPrefix}/stage_1/Objects/stage_1.bin + ${FwCommonPrefix}/ident/Objects/ident.bin +) + +# Define program name and version +add_definitions (-DPROGRAM_NAME="${CMAKE_PROJECT_NAME}") +add_definitions (-DPROGRAM_VERSION="${PROJECT_VERSION}") + +# Platform specific options +if (WIN32) + add_definitions (-DWIN32) + set (DefaultSerialPortName COM1) +else() + add_definitions (-DUNIX) + set (DefaultSerialPortName /dev/ttyUSB0) +endif() +add_definitions(-DDEFAULT_SERIAL_PORT_NAME="${DefaultSerialPortName}") + +# Utility, to dump binary file as a C declaration +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/utils/xd) + +# Generate firmware header files +include_directories (${CMAKE_CURRENT_BINARY_DIR}) + +# Function generates header files containing arrays with binary +# files data. Name transformation is: <name>.bin -> fw_<name>.hpp +# +# Arguments: +# GenCmd - path to the generator command +# NameSpc - namespace for C++ definitions in the header file +# FwList - list of binary files +# OutDir - directory where the header files will be placed +function (generate_headers_from_binaries GenCmd NameSpc FwList OutDir) + foreach (FILE ${FwList}) + get_filename_component(NAME "${FILE}" NAME_WE) + set (OutHeader ${OutDir}/fw_${NAME}.hpp) + # set (NameSpc FwCommon) + add_custom_command ( + OUTPUT ${OutHeader} + COMMAND ${GenCmd} -dfw_${NAME} -p${NameSpc} ${FILE} ${OutHeader} + DEPENDS ${GenCmd} ${FILE} + ) + endforeach() +endfunction() + +generate_headers_from_binaries ( + "$<TARGET_FILE:xd>" + FwCommon + "${FwCommon}" + "${CMAKE_CURRENT_BINARY_DIR}" +) + +# Generate header with help message +add_custom_command ( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/help_message.hpp + COMMAND $<TARGET_FILE:xd> -thelp_message -pHelpMessage ${CMAKE_SOURCE_DIR}/HelpMessage.txt ${CMAKE_CURRENT_BINARY_DIR}/help_message.hpp + DEPENDS $<TARGET_FILE:xd> ${CMAKE_SOURCE_DIR}/HelpMessage.txt + ) + +include_directories ( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/McuSt10f269 + ${CMAKE_CURRENT_SOURCE_DIR}/McuSt10f168 + ${CMAKE_CURRENT_SOURCE_DIR}/SerialPort + ) +add_subdirectory (McuSt10f269) +add_subdirectory (McuSt10f168) +add_subdirectory (SerialPort) +add_executable (main + ExitException.cpp + Logger.cpp + UserConfig.cpp + Mcu.cpp + main.cpp + ${CMAKE_CURRENT_BINARY_DIR}/fw_stage_1.hpp + ${CMAKE_CURRENT_BINARY_DIR}/fw_ident.hpp + ${CMAKE_CURRENT_BINARY_DIR}/help_message.hpp + ) +target_link_libraries (main McuSt10f269 McuSt10f168 SerialPort) + +set_target_properties (main PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF + ) + +# Tests +enable_testing () + +include (${CMAKE_SOURCE_DIR}/tests/st10f168/CMakeLists.txt) +include (${CMAKE_SOURCE_DIR}/tests/st10f269/CMakeLists.txt) diff --git a/ExitCodes.hpp b/ExitCodes.hpp new file mode 100755 index 0000000..6c903d3 --- /dev/null +++ b/ExitCodes.hpp @@ -0,0 +1,12 @@ +#ifndef EXIT_CODES_HPP +#define EXIT_CODES_HPP 1 + +#define EXIT_MAIN_NOOP 1 +#define EXIT_USER_CONFIG 2 +#define EXIT_MAIN_FILE_INOUT 3 +#define EXIT_MAIN_PROG_VERIFY 4 +#define EXIT_MAIN_SIGNAL 5 +#define EXIT_MCU 6 +#define EXIT_SERIAL_PORT 7 + +#endif diff --git a/ExitException.cpp b/ExitException.cpp new file mode 100755 index 0000000..d890bba --- /dev/null +++ b/ExitException.cpp @@ -0,0 +1,13 @@ +#include "ExitException.hpp" + +CExitException::CExitException(const string & whatArg, int returnValue) : + runtime_error(whatArg), mReturnValue(returnValue) +{ + ; +} + +int +CExitException::getReturnValue() +{ + return mReturnValue; +} diff --git a/ExitException.hpp b/ExitException.hpp new file mode 100755 index 0000000..ca21bd1 --- /dev/null +++ b/ExitException.hpp @@ -0,0 +1,19 @@ +#ifndef EXIT_EXCEPTION_HPP +#define EXIT_EXCEPTION_HPP 1 + +#include <string> +#include <stdexcept> + +using std::runtime_error; +using std::string; + +class CExitException : public runtime_error +{ +private: + int mReturnValue; +public: + CExitException(const string & whatArg, int returnValue); + int getReturnValue(); +}; + +#endif diff --git a/HelpMessage.txt b/HelpMessage.txt new file mode 100755 index 0000000..8ecb927 --- /dev/null +++ b/HelpMessage.txt @@ -0,0 +1,56 @@ +Usage: %ARG% OPERATION OPARGS + + OPERATION Can be one of these: help, version, speeds, ident, erase, + read, write. + + OPARGS Are arguments for selected operation. Note that the same + argument can have a different meaning when used with + different OPERATION. + +Common options: + -p PORTNAME Name of a serial port device to use. + + -s SPEED Serial line communication speed in Bd. Note that the + SPEED is a number without 'Bd' suffix. Default SPEED + is 19200. + + -v Be more verbose. + + -f FREQ CPU frequency in MHz. Real number with dot as a decimal + separator. This is used only by ST10F168 MCU and is + mandatory for it. + + -g Print progress for read and write operations. + +Operations: + help + Print this help message. + + version + Print name and version information of this program. + + speeds + Print list of serial line speeds available. + + ident + Print name of supported MCU connected. + + erase [-b n[,n]...] + -b n[,n]... Numbers of sectors to erase. Without this option whole + FLASH memory is erased. + + read [-n COUNT] FILE + -n COUNT Read only COUNT bytes from address 0 instead of whole memory. + + FILE Name of a file where to write content of memory. + + write [-e,-c] FILE + -e Erase whole FLASH memory before writing data. Without this + option only blocks which are going to be programmed are + erased. + + -c Check written data by reading it back and comparing with FILE + data. Without this option result of write operation is + checked only by MCU FLASH memory controller. + + FILE Name of a file containing data to write to MCU FLASH memory. diff --git a/LICENCIA b/LICENCIA new file mode 100644 index 0000000..e63ddb0 --- /dev/null +++ b/LICENCIA @@ -0,0 +1,54 @@ +Slovenský, český a anglický text licencie je prevzatý zo súboru +FITthesis.cls v archíve vzorových LaTeX šablón FIT ČVUT, ktoré som +používal pri tvorbe mojej bakalárskej práce: + +https://edux.fit.cvut.cz/_media/szz/ +priloha2-smernice_dekana_pro_szz-latex-sablony-160505.zip + +V texte mojej bakalárskej práce som zvolil text prehlásenia číslo 5: +"zcela volné užití pro každého". Text tejto licencie v slovenskom, +českom a anglickom jazyku citujem: + +„Prehlasujem, že som predloženú prácu vypracoval(a) samostatne a že +som uviedol(uviedla) všetky informačné zdroje v súlade s Metodickým +pokynom o etickej príprave vysokoškolských záverečných prác. +Beriem na vedomie, že sa na moju prácu vzťahujú práva a povinnosti +vyplývajúce zo zákona č. 121/2000 Sb., autorského zákona, v znení +neskorších predpisov. V súlade s ustanovením § 46 odst. 6 tohoto +zákona týmto udeľujem bezvýhradné oprávnenie (licenciu) k užívaniu +tejto mojej práce, a to vrátane všetkých počítačových programov ktoré +sú jej súčasťou alebo prílohou a tiež všetkej ich dokumentácie (ďalej +len „Dielo“), a to všetkým osobám, ktoré si prajú Dielo užívať. Tieto +osoby sú oprávnené Dielo používať akýmkoľvek spôsobom, ktorý neznižuje +hodnotu Diela (vrátane komerčného využitia). Toto oprávnenie je +časovo, územne a množstevne neobmedzené.“ + +„Prohlašuji, že jsem předloženou práci vypracoval(a) samostatně a že +jsem uvedl(a) veškeré použité informační zdroje v souladu s Metodickým +pokynem o etické přípravě vysokoškolských závěrečných prací. +Beru na vědomí, že se na moji práci vztahují práva a povinnosti +vyplývající ze zákona č. 121/2000 Sb., autorského zákona, ve znění +pozdějších předpisů. V souladu s ust. § 46 odst. 6 tohoto zákona +tímto uděluji nevýhradní oprávnění (licenci) k užití této mojí práce, +a to včetně všech počítačových programů, jež jsou její součástí či +přílohou a veškeré jejich dokumentace (dále souhrnně jen „Dílo“), a to +všem osobám, které si přejí Dílo užít. Tyto osoby jsou oprávněny Dílo +užít jakýmkoli způsobem, který nesnižuje hodnotu Díla a za jakýmkoli +účelem (včetně užití k výdělečným účelům). Toto oprávnění je časově, +teritoriálně i množstevně neomezené.“ + +“I hereby declare that the presented thesis is my own work and that I +have cited all sources of information in accordance with the Guideline +for adhering to ethical principles when elaborating an academic final +thesis. +I acknowledge that my thesis is subject to the rights and obligations +stipulated by the Act No. 121/2000 Coll., the Copyright Act, as +amended. In accordance with Article 46(6) of the Act, I hereby grant a +nonexclusive authorization (license) to utilize this thesis, +including any and all computer programs incorporated therein or +attached thereto and all corresponding documentation (hereinafter +collectively referred to as the “Work”), to any and all persons that +wish to utilize the Work. Such persons are entitled to use the Work in +any way (including for-profit purposes) that does not detract from its +value. This authorization is not limited in terms of time, location +and quantity.” diff --git a/Logger.cpp b/Logger.cpp new file mode 100755 index 0000000..142442e --- /dev/null +++ b/Logger.cpp @@ -0,0 +1,73 @@ +#include "Logger.hpp" +#include "ExitException.hpp" +#include <sstream> + +using std::endl; +using std::cout; +using std::cerr; +using std::flush; +using std::hex; +using std::uppercase; +using std::ostringstream; + +bool CLogger::mLogInfo = false; +int CLogger::mProgressLastPercent = -1; + +void +CLogger::error(const string & msg, int returnValue) +{ + cerr << "ERROR: " << msg << endl; + throw CExitException(msg, returnValue); +} + +void +CLogger::warning(const string & msg) +{ + cerr << "WARNING: " << msg << endl; +} + +void +CLogger::info(const string & msg) +{ + if (!CLogger::mLogInfo) + return; + cout << "INFO: " << msg << endl; +} + +void +CLogger::progress(uint32_t b, uint32_t n) +{ + if (b > n) + b = n; + + double d = n; + int p = (int) (b / (d / 100.0)); + if ((p == 100) && (b != n)) + p = 99; + else if (p > 100) + p = 100; + + if (((p == 0) && (p != mProgressLastPercent)) + || ((p == 100) && (p != mProgressLastPercent)) + || ((p - mProgressLastPercent) >= LOGGER_PROGRESS_UNIT)) { + cout << p << "% (" << b << " B / " << n << " B)" << endl; + mProgressLastPercent = p; + } + + if (p == 100) + mProgressLastPercent = -1; +} + +void +CLogger::setLogInfo(bool b) +{ + mLogInfo = b; +} + +string +CLogger::decToHex(int dec) +{ + ostringstream os; + os << "0x" << hex << uppercase << dec; + return os.str(); +} diff --git a/Logger.hpp b/Logger.hpp new file mode 100755 index 0000000..0925b69 --- /dev/null +++ b/Logger.hpp @@ -0,0 +1,23 @@ +#ifndef LOGGER_HPP +#define LOGGER_HPP 1 + +#include <iostream> + +using std::string; + +#define LOGGER_PROGRESS_UNIT 3 // % + +class CLogger { +private: + static bool mLogInfo; + static int mProgressLastPercent; +public: + static void error(const string & msg, int returnValue); + static void warning(const string & msg); + static void info(const string & msg); + static void progress(uint32_t b, uint32_t n); + static void setLogInfo(bool b); + static string decToHex(int dec); +}; + +#endif @@ -0,0 +1,422 @@ +#include <Mcu.hpp> + +#include "fw_stage_1.hpp" +#include "fw_ident.hpp" +#include "ExitCodes.hpp" +#include "Logger.hpp" +#include "ExitException.hpp" +#include "McuSt10f269.hpp" +#include "McuSt10f168.hpp" + +#include <sstream> + +using FwCommon::fw_stage_1; +using FwCommon::fw_stage_1_length; +using FwCommon::fw_ident; +using FwCommon::fw_ident_length; +using std::ostringstream; +using std::nothrow; + +#define FW_1_MAX_LENGTH 32 +#define FW_MAX_LENGTH 2048 +#define BOOTSTRAP_ACK 0xD5 +#define SHELL_ACK 0xAB + +#define PAD_BYTE 0xFF + +#define CMD_PING 0x00 +#define CMD_ERASE_BLOCKS 0x01 +#define CMD_READ 0x02 +#define CMD_WRITE 0x03 +#define CMD_IDENTIFY 0x04 +#define CMD_ERASE_CHIP 0x05 + +#define RET_SERIAL_OVERRUN 0x20 +#define RET_BAD_ECHO 0x21 + +#define JUNK_BYTE_COUNT 128 + + +CMcu::CMcu(CSerialPort & serialPort, float mcuFrequency) + : mSerialPort(serialPort), mMcuFrequency(mcuFrequency) +{ + // Check in which mode MCU is + CLogger::info("Sending zero byte"); + uint8_t ack = CMD_PING; + // Send zero byte + mSerialPort.write(&ack, 1, 1); + // Read response + mSerialPort.read(&ack, 1); + + // If some unknown data were received, try to read out junk bytes from + // previous operations without collected return status + for (int i = 0; (ack != BOOTSTRAP_ACK) && (ack != SHELL_ACK) && (i < JUNK_BYTE_COUNT); ++i) { + mSerialPort.read(&ack, 1); + } + + uint16_t idchip, idmanuf; + uint8_t data[4]; + + if (ack == SHELL_ACK) { + CLogger::info("Received stage 2 firmware ACK byte " + CLogger::decToHex(ack)); + CLogger::info("Skipping MCU initialization, NOT LOADING stage 2 firmware"); + + // Get IDCHIP and IDMANUF registers using Ident command for initialized MCU + CLogger::info("Getting IDMAUNF and IDCHIP registers of already initialized MCU"); + + mSerialPort.sendSafeByte(CMD_IDENTIFY); + mSerialPort.read(data, 4); + decodeIdentData(data, idchip, idmanuf); + + setMcuSpecificsById(idchip, idmanuf); + } else if (ack == BOOTSTRAP_ACK) { + // Ziskame identifikaciu a nahrame shell mcuSpecfics + CLogger::info("Received bootstrap loader ACK byte " + CLogger::decToHex(ack)); + + // Write the first stage loader + CLogger::info("Writing stage 1 firmware"); + mSerialPort.write(fw_stage_1, fw_stage_1_length, FW_1_MAX_LENGTH); + + // Get identification + CLogger::info("Getting IDMAUNF and IDCHIP registers"); + mSerialPort.write(fw_ident, fw_ident_length, FW_MAX_LENGTH); + mSerialPort.read(data, 4); + + decodeIdentData(data, idchip, idmanuf); + setMcuSpecificsById(idchip, idmanuf); + + // Load stage 2 firmware + CLogger::info("Writing stage 2 firmware"); + mSerialPort.write(mMcuSpecifics->getFirmware(), + mMcuSpecifics->getFirmwareLength(), FW_MAX_LENGTH); + // Wait for initialization end + uint16_t r = mSerialPort.readWord(); + if (r != 0x00) { + CLogger::error("Cannot initialize MCU: " + getMessageForRetCode(r), EXIT_MCU); + } + } else { + CLogger::error("Received unknown ack byte " + CLogger::decToHex(ack) + + ", expected " + CLogger::decToHex(BOOTSTRAP_ACK) + + " or " + CLogger::decToHex(SHELL_ACK), EXIT_MCU); + } +} + +void +CMcu::decodeIdentData(uint8_t data[4], uint16_t & idmanuf, uint16_t & idchip) +{ + idmanuf = 0; + idmanuf |= data[0]; + idmanuf |= (data[1]) << 8; + + idchip = 0; + idchip |= data[2]; + idchip |= (data[3]) << 8; +} + + +string +CMcu::getMessageForRetCode(uint16_t ret) +{ + string s; + + switch (ret) { + case RET_SERIAL_OVERRUN: + s = "MCU serial receiver buffer overrun, use lower serial speed"; + break; + case RET_BAD_ECHO: + s = "MCU received corrupted double word value"; + break; + default: + if (mMcuSpecifics == 0 || (s = mMcuSpecifics->getMessageForRetCode(ret)).empty()) + s = "Unknown MCU return code: " + CLogger::decToHex(ret); + break; + } + + return s; +} + +void +CMcu::setMcuSpecificsById(uint16_t idmanuf, uint16_t idchip) +{ + if (CMcuSt10f269::hasThisId(idmanuf, idchip)) { + CLogger::info("ST10F269 MCU found"); + mMcuSpecifics.reset(new CMcuSt10f269()); + } else if (CMcuSt10f168::hasThisId(idmanuf, idchip)) { + CLogger::info("ST10F168 MCU found"); + mMcuSpecifics.reset(new CMcuSt10f168()); + } else { + ostringstream os; + os << "Received unknown MCU identification registers values: "; + os << "IDMANUF=" << CLogger::decToHex(idmanuf); + os << " IDCHIP=" << CLogger::decToHex(idchip); + CLogger::error(os.str(), EXIT_MCU); + } +} + +// ----------------------------------------------------------------------------- +// Operacie +// ----------------------------------------------------------------------------- + +void +CMcu::sendShellCommand(uint8_t cmd) +{ + // Check needed frequency + if ((mMcuSpecifics->getName() != "ST10F168") && (mMcuFrequency > 0)) + CLogger::info("Ignoring -f option for this MCU"); + if ((mMcuSpecifics->getName() == "ST10F168") && (mMcuFrequency == 0)) + CLogger::error("Missing -f option for MCU " + mMcuSpecifics->getName(), EXIT_MCU); + + mSerialPort.sendSafeByte(cmd); + // Write configuration data + list<uint16_t> d = mMcuSpecifics->getConfigData(mMcuFrequency); + list<uint16_t>::const_iterator it; + for (it = d.begin(); it != d.end(); ++it) + mSerialPort.sendSafeWord(*it); +} + +string +CMcu::ident() +{ + return mMcuSpecifics->getName(); +} + +void +CMcu::erase() +{ + uint16_t r; + + sendShellCommand(CMD_ERASE_CHIP); + // Wait for return status of erase operation + mSerialPort.setReadTimeout(mMcuSpecifics->getEraseTimeout()); + r = mSerialPort.readWord(); + mSerialPort.setDefaultTimeout(); + + if (r != 0) + CLogger::error(getMessageForRetCode(r), EXIT_MCU); +} + +void +CMcu::erase(uint32_t startAddr, uint32_t endAddr) +{ + list<uint32_t> bs = mMcuSpecifics->getBlockSizes(); + + // Block address space + typedef struct { + uint32_t a; + uint32_t b; + } range_t; + + unique_ptr<range_t []> ba(new(nothrow) range_t[bs.size()]); + + if (!ba) + CLogger::error("Cannot allocate memory", EXIT_MCU); + + list<uint32_t>::const_iterator it; + unsigned int i; + uint32_t a = 0; + for (i = 0, it = bs.begin(); it != bs.end(); ++it, ++i) { + ba[i].a = a; + a = (*it * 1024); + ba[i].b = ba[i].a + a - 1; + a = ba[i].a + a; + } + + uint32_t lastValidAddr = mMcuSpecifics->getFlashSize() - 1; + + if (startAddr > lastValidAddr) { + ostringstream os; + os << "Start erase address " << startAddr << " is out of range [0," << lastValidAddr << "]"; + CLogger::error(os.str(), EXIT_MCU); + } + + if (endAddr > lastValidAddr) { + ostringstream os; + os << "End erase address " << endAddr << " is out of range [0," << lastValidAddr << "]"; + CLogger::error(os.str(), EXIT_MCU); + } + + if (startAddr > endAddr) { + ostringstream os; + os << "Start erase address " << startAddr << " is greater than end erase address " << endAddr; + CLogger::error(os.str(), EXIT_MCU); + } + + // Construct block list + list<unsigned int> l; + // Find block containing startAddr + for (i = 0; i < bs.size(); ++i) { + if (startAddr >= ba[i].a && startAddr <= ba[i].b) + break; + } + // Find blocks up to the block containing endAddr + for ( ; i < bs.size(); ++i) { + l.push_back(i); + if (endAddr >= ba[i].a && endAddr <= ba[i].b) + break; + } + + // Erase blocks covering the range + erase(l); +} + +void +CMcu::erase(list<unsigned int> blockList) +{ + // Construct mask + uint16_t mask = 0; + list<unsigned int>::const_iterator it; + unsigned int bc = mMcuSpecifics->getBlockSizes().size(); + + for (it = blockList.begin(); it != blockList.end(); ++it) { + if (*it >= bc) { + ostringstream os; + os << "Block number " << *it << " is out of range [0," << (bc - 1) << "]"; + CLogger::error(os.str(), EXIT_MCU); + } + mask |= 1 << *it; + } + ostringstream os; + os << "Erasing blocks: "; + for (it = blockList.begin(); it != blockList.end(); ++it) { + if (it != blockList.begin()) + os << ","; + os << *it; + } + os << " (mask = " << CLogger::decToHex(mask) << ")"; + CLogger::info(os.str()); + + // Erase blocks + sendShellCommand(CMD_ERASE_BLOCKS); + mSerialPort.sendSafeWord(mask); + // Read status + mSerialPort.setReadTimeout(mMcuSpecifics->getEraseTimeout()); + uint16_t r = mSerialPort.readWord(); + + if (r != 0x00) + CLogger::error(getMessageForRetCode(r), EXIT_MCU); + + mSerialPort.setDefaultTimeout(); +} + +void +CMcu::write(vector<uint8_t> data, bool printProgress) +{ + if ((data.size() < 1) || (data.size() > mMcuSpecifics->getFlashSize())) { + ostringstream os; + os << "Data length " << data.size() << " to write is not in range "; + os << "[1-" << mMcuSpecifics->getFlashSize() << "]"; + CLogger::error(os.str(), EXIT_MCU); + } + // Number of bytes to be written + uint32_t bw = ((data.size() % 2) == 1) ? data.size() + 1 : data.size(); + ostringstream os; + os << "Writing " << data.size() << " bytes"; + if (bw != data.size()) + os << " + 1 byte pad"; + CLogger::info(os.str()); + // Write command + sendShellCommand(CMD_WRITE); + // Write number of bytes to read + mSerialPort.sendSafeDoubleWord(bw); + // Write by 1024 blocks and read return status after each one + uint32_t i = 0; + + if (printProgress) + CLogger::progress(i, data.size()); + + while (i < bw) { + uint32_t s = ((bw - i) > 1024) ? 1024 : (bw - i); + if (((i + s) >= bw) && (bw != data.size())) { + // Going to write last block of size increased by pad + mSerialPort.write(data.data() + i, s - 1, s - 1); + uint8_t b = PAD_BYTE; + mSerialPort.write(&b, 1, 1); + } else { + mSerialPort.write(data.data() + i, s, s); + } + i += s; + + if (printProgress) + CLogger::progress(i, data.size()); + + // Read status + uint16_t r = mSerialPort.readWord(); + if (r == 0) { + // Read position + uint32_t u = mSerialPort.readDoubleWord(); + // Check position + if ((bw - u) != i) { + ostringstream os; + os << "Serial communication error: position status mismatch, expected " << i << ", have " << (bw - u); + CLogger::error(os.str(), EXIT_MCU); + } + } else { + CLogger::error(getMessageForRetCode(r), EXIT_MCU); + } + } +} + +vector<uint8_t> +CMcu::read(bool printProgress) +{ + return read(mMcuSpecifics->getFlashSize(), printProgress); +} + +vector<uint8_t> +CMcu::read(uint32_t size, bool printProgress) +{ + uint32_t r; + + if ((size < 1) || (size > mMcuSpecifics->getFlashSize())) { + ostringstream os; + os << "Data length " << size << " to read is outside address range "; + os << "[1-" << mMcuSpecifics->getFlashSize() << "]"; + CLogger::error(os.str(), EXIT_MCU); + } + + // Check if size is odd or even number + r = size; + if ((size % 2) == 1) + r++; + // Write command + sendShellCommand(CMD_READ); + // Write number of bytes to read + mSerialPort.sendSafeDoubleWord(r); + // Get data from FLASH memory by 1024 byte blocks + uint32_t i = 0; + if (printProgress) + CLogger::progress(i, size); + + vector<uint8_t> data; + + while (i < r) { + uint32_t s = ((r - i) > 1024) ? 1024 : (r - i); + // Read data + data.resize(data.size() + s); + mSerialPort.read(data.data() + i , s); + i += s; + + if (printProgress) + CLogger::progress(i, size); + + // Read status + uint16_t t = mSerialPort.readWord(); + if (t == 0) { + // Read position + uint32_t u = mSerialPort.readDoubleWord(); + // Check position + if ((r - u) != i) { + ostringstream os; + os << "Serial communication error: position status mismatch"; + os << ", expected " << i << " has " << (r - u); + CLogger::error(os.str(), EXIT_MCU); + } + } else { + CLogger::error(getMessageForRetCode(r), EXIT_MCU); + } + } + + // Discard possible rounding/pad byte + data.resize(size); + return data; +} @@ -0,0 +1,37 @@ +#ifndef MCU_HPP +#define MCU_HPP 1 + +#include "SerialPort.hpp" +#include "McuSpecifics.hpp" + +#include <cstdint> +#include <vector> +#include <memory> + +using std::vector; +using std::unique_ptr; + +class CMcu { +private: + CSerialPort & mSerialPort; + unique_ptr<IMcuSpecifics> mMcuSpecifics; + float mMcuFrequency; + + void decodeIdentData(uint8_t data[4], uint16_t & idmanuf, uint16_t & idchip); + void setMcuSpecificsById(uint16_t idmanuf, uint16_t idchip); + string getMessageForRetCode(uint16_t ret); + void sendShellCommand(uint8_t cmd); + +public: + CMcu(CSerialPort & serialPort, float mcuFrequency); + + void erase(); + void erase(list<unsigned int> blockList); + void erase(uint32_t startAddr, uint32_t endAddr); + void write(vector<uint8_t> data, bool printProgress); + vector<uint8_t> read(bool printProgress); + vector<uint8_t> read(uint32_t size, bool printProgress); + string ident(); +}; + +#endif diff --git a/McuSpecifics.hpp b/McuSpecifics.hpp new file mode 100755 index 0000000..9dac153 --- /dev/null +++ b/McuSpecifics.hpp @@ -0,0 +1,26 @@ +#ifndef MCU_SPECIFICS_HPP +#define MCU_SPECIFICS_HPP 1 + +#include "SerialPort.hpp" +#include "McuSpecifics.hpp" + +#include <cstdint> +#include <list> + +using std::list; + +class IMcuSpecifics { +public: + virtual ~IMcuSpecifics() {}; + + virtual string getName() = 0; + virtual uint8_t *getFirmware() = 0; + virtual int getFirmwareLength() = 0; + virtual const list<uint32_t> getBlockSizes() = 0; + virtual uint32_t getFlashSize() = 0; + virtual int getEraseTimeout() = 0; + virtual string getMessageForRetCode(uint16_t ret) = 0; + virtual const list<uint16_t> getConfigData(float mcuFrequency) = 0; +}; + +#endif diff --git a/McuSt10f168/CMakeLists.txt b/McuSt10f168/CMakeLists.txt new file mode 100755 index 0000000..786a909 --- /dev/null +++ b/McuSt10f168/CMakeLists.txt @@ -0,0 +1,26 @@ +# Path to firmware binary files for ST10F168 +set (FwSt10f168Prefix ${FwPrefix}) +set(FwSt10f168 + ${FwSt10f168Prefix}/st10f168/Objects/st10f168.bin + ) + +# Generate firmware header files +include_directories (${CMAKE_CURRENT_BINARY_DIR}) + +generate_headers_from_binaries ( + "$<TARGET_FILE:xd>" + FwSt10f168 + "${FwSt10f168}" + "${CMAKE_CURRENT_BINARY_DIR}" + ) + +add_library (McuSt10f168 STATIC + McuSt10f168.cpp + ${CMAKE_CURRENT_BINARY_DIR}/fw_st10f168.hpp +) + +set_target_properties (McuSt10f168 PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF +) diff --git a/McuSt10f168/McuSt10f168.cpp b/McuSt10f168/McuSt10f168.cpp new file mode 100755 index 0000000..6d60a21 --- /dev/null +++ b/McuSt10f168/McuSt10f168.cpp @@ -0,0 +1,173 @@ +#include "Logger.hpp" +#include "ExitCodes.hpp" +#include "McuSt10f168.hpp" +#include "fw_st10f168.hpp" + +#include <sstream> + +using FwSt10f168::fw_st10f168; +using FwSt10f168::fw_st10f168_length; + +#define ST10F168_FLASH_SIZE (256 * 1024) +#define ST10F168_IDMANUF 0x0400 +#define ST10F168_IDCHIP 0x0A80 +#define ST10F168_ERASE_TIMEOUT 15000 // Ms +#define ST10F168_MIN_PERIOD 30 // ns +#define ST10F168_MAX_PERIOD 199 // ns +#define ST10F168_MAX_FREQ 25 // MHz + +using std::ostringstream; + +bool +CMcuSt10f168::hasThisId(uint16_t idmanuf, uint16_t idchip) +{ + // Mask out revision bits 3 - 0 from idchip value + return ((idmanuf == ST10F168_IDMANUF) + && ((idchip & 0xfff0) == ST10F168_IDCHIP)); +} + +CMcuSt10f168::CMcuSt10f168() +{ + mBlockSizes.push_back(16); + mBlockSizes.push_back(48); + mBlockSizes.push_back(96); + mBlockSizes.push_back(96); +} + +CMcuSt10f168::~CMcuSt10f168() +{ + ; +} + +string +CMcuSt10f168::getName() +{ + return string("ST10F168"); +} + +uint8_t * +CMcuSt10f168::getFirmware() +{ + return fw_st10f168; +} + +int +CMcuSt10f168::getFirmwareLength() +{ + return fw_st10f168_length; +} + +const list<uint32_t> +CMcuSt10f168::getBlockSizes() +{ + return mBlockSizes; +} + +uint32_t +CMcuSt10f168::getFlashSize() +{ + return ST10F168_FLASH_SIZE; +} + +int +CMcuSt10f168::getEraseTimeout() +{ + return ST10F168_ERASE_TIMEOUT; +} + +string +CMcuSt10f168::getMessageForRetCode(uint16_t ret) +{ + string s; + + switch (ret) { + case 0x00: + s = "Operation was successful"; + break; + case 0x01: + s = "Flash Protection is active"; + break; + case 0x02: + s = "Vpp voltage not present"; + break; + case 0x03: + s = "Programming operation failed"; + break; + case 0x04: + s = "Address value (R1) incorrect; not in Flash address area or odd"; + break; + case 0x05: + s = "CPU period out of range (must be between 30 ns and 199 ns)"; + break; + case 0x06: + s = "Not enough free space on system stack for proper operation"; + break; + case 0x07: + s = "Incorrect bank number (R2,R3) specified"; + break; + case 0x08: + s = "Erase operation failed (phase 1)"; + break; + case 0x09: + s = "Bad source address for Multiple Word programming command"; + break; + case 0x0A: + s = "Bad number of words to be copied in Multiple Word programming command; one destination will be out of FLASH"; + break; + case 0x0B: + s = "PLL Unlocked or Oscilator watchdog overflow occured during programming or erasing the FLASH"; + break; + case 0x0C: + s = "Erase operation failed (phase 2)"; + break; + case 0x0D: + s = "MCU serial buffer overrun, use lower serial speed"; + break; + case 0xFF: + s = "Unknown or bad command"; + break; + default: + s = ""; + break; + } + + return s; +} + +const list<uint16_t> +CMcuSt10f168::getConfigData(float mcuFrequency) +{ + list<uint16_t> ret; + ret.push_back(get2TclConst(mcuFrequency)); + return ret; +} + +uint16_t +CMcuSt10f168::get2TclConst(float mcuFrequency) +{ + if (mcuFrequency > ST10F168_MAX_FREQ) { + ostringstream os; + os << "User-entered CPU frequency " << mcuFrequency << " MHz is outside range "; + os << "(0, " << ST10F168_MAX_FREQ << "]"; + CLogger::error(os.str(), EXIT_MCU); + } + uint16_t t = ((uint16_t) (1000.0 / mcuFrequency)) + 1; + if (t > 200) { + ostringstream os; + os << "For user-entered CPU frequency " << mcuFrequency << "MHz"; + os << " the period is " << t << " ns which is greater than maximal allowed "; + os << "period " << ST10F168_MAX_PERIOD << " ns. Setting period to "; + os << ST10F168_MAX_PERIOD << " ns"; + CLogger::warning(os.str()); + t = ST10F168_MAX_PERIOD; + } else if (t < 30) { + ostringstream os; + os << "For user-entered CPU frequency " << mcuFrequency << "MHz"; + os << " the period is " << t << " ns which is lower than minmal allowed "; + os << "period " << ST10F168_MIN_PERIOD << " ns. Setting period to "; + os << ST10F168_MIN_PERIOD << " ns"; + CLogger::warning(os.str()); + t = ST10F168_MIN_PERIOD; + } + return t; +} diff --git a/McuSt10f168/McuSt10f168.hpp b/McuSt10f168/McuSt10f168.hpp new file mode 100755 index 0000000..0f98620 --- /dev/null +++ b/McuSt10f168/McuSt10f168.hpp @@ -0,0 +1,27 @@ +#ifndef MCU_ST10F168_HPP +#define MCU_ST10F168_HPP + +#include "McuSpecifics.hpp" + +class CMcuSt10f168 : public IMcuSpecifics { +private: + list<uint32_t> mBlockSizes; + + uint16_t get2TclConst(float mcuFrequency); +public: + static bool hasThisId(uint16_t idmanuf, uint16_t idchip); + + CMcuSt10f168(); + ~CMcuSt10f168(); + + string getName(); + uint8_t *getFirmware(); + int getFirmwareLength(); + const list<uint32_t> getBlockSizes(); + uint32_t getFlashSize(); + int getEraseTimeout(); + string getMessageForRetCode(uint16_t ret); + const list<uint16_t> getConfigData(float mcuFrequency); +}; + +#endif diff --git a/McuSt10f269/CMakeLists.txt b/McuSt10f269/CMakeLists.txt new file mode 100755 index 0000000..b67a62f --- /dev/null +++ b/McuSt10f269/CMakeLists.txt @@ -0,0 +1,26 @@ +# Path to firmware binary files for ST10F269 +set (FwSt10f269Prefix ${FwPrefix}) +set(FwSt10f269 + ${FwSt10f269Prefix}/st10f269/Objects/st10f269.bin + ) + +# Generate firmware header files +include_directories (${CMAKE_CURRENT_BINARY_DIR}) + +generate_headers_from_binaries ( + "$<TARGET_FILE:xd>" + FwSt10f269 + "${FwSt10f269}" + "${CMAKE_CURRENT_BINARY_DIR}" +) + +add_library (McuSt10f269 STATIC + McuSt10f269.cpp + ${CMAKE_CURRENT_BINARY_DIR}/fw_st10f269.hpp +) + +set_target_properties (McuSt10f269 PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF +) diff --git a/McuSt10f269/McuSt10f269.cpp b/McuSt10f269/McuSt10f269.cpp new file mode 100755 index 0000000..99c578d --- /dev/null +++ b/McuSt10f269/McuSt10f269.cpp @@ -0,0 +1,102 @@ +#include "Logger.hpp" +#include "McuSt10f269.hpp" +#include "fw_st10f269.hpp" + +using FwSt10f269::fw_st10f269; +using FwSt10f269::fw_st10f269_length; + +#define ST10F269_FLASH_SIZE (256 * 1024) +#define ST10F269_IDMANUF 0x0401 +#define ST10F269_IDCHIP 0x10D0 +#define ST10F269_ERASE_TIMEOUT 15000 // Ms + +#define RET_ERASE_ERROR 0x030 +#define RET_WRITE_ERROR 0x031 + +bool +CMcuSt10f269::hasThisId(uint16_t idmanuf, uint16_t idchip) +{ + // Mask out revision bits 3 - 0 from idchip value + return ((idmanuf == ST10F269_IDMANUF) + && ((idchip & 0xfff0) == ST10F269_IDCHIP)); +} + +CMcuSt10f269::CMcuSt10f269() +{ + mBlockSizes.push_back(16); + mBlockSizes.push_back(8); + mBlockSizes.push_back(8); + mBlockSizes.push_back(32); + mBlockSizes.push_back(64); + mBlockSizes.push_back(64); + mBlockSizes.push_back(64); +} + +CMcuSt10f269::~CMcuSt10f269() +{ + ; +} + +string +CMcuSt10f269::getName() +{ + return string("ST10F269"); +} + +uint8_t * +CMcuSt10f269::getFirmware() +{ + return fw_st10f269; +} + +int +CMcuSt10f269::getFirmwareLength() +{ + return fw_st10f269_length; +} + +const list<uint32_t> +CMcuSt10f269::getBlockSizes() +{ + return mBlockSizes; +} + +uint32_t +CMcuSt10f269::getFlashSize() +{ + return ST10F269_FLASH_SIZE; +} + +int +CMcuSt10f269::getEraseTimeout() +{ + return ST10F269_ERASE_TIMEOUT; +} + +string +CMcuSt10f269::getMessageForRetCode(uint16_t ret) +{ + string s; + + switch (ret) { + case RET_ERASE_ERROR: + s = "Error while erasing memory"; + break; + case RET_WRITE_ERROR: + s = "Error while writing memory"; + break; + default: + s = ""; + break; + } + + return s; +} + +const list<uint16_t> +CMcuSt10f269::getConfigData(float mcuFrequency) +{ + list<uint16_t> ret; + ret.push_back(0x00); // Any byte value + return ret; +} diff --git a/McuSt10f269/McuSt10f269.hpp b/McuSt10f269/McuSt10f269.hpp new file mode 100755 index 0000000..01063d6 --- /dev/null +++ b/McuSt10f269/McuSt10f269.hpp @@ -0,0 +1,25 @@ +#ifndef MCU_ST10F269_HPP +#define MCU_ST10F269_HPP + +#include "McuSpecifics.hpp" + +class CMcuSt10f269 : public IMcuSpecifics { +private: + list<uint32_t> mBlockSizes; +public: + static bool hasThisId(uint16_t idmanuf, uint16_t idchip); + + CMcuSt10f269(); + ~CMcuSt10f269(); + + string getName(); + uint8_t *getFirmware(); + int getFirmwareLength(); + const list<uint32_t> getBlockSizes(); + uint32_t getFlashSize(); + int getEraseTimeout(); + string getMessageForRetCode(uint16_t ret); + const list<uint16_t> getConfigData(float mcuFrequency); +}; + +#endif diff --git a/SerialPort/CMakeLists.txt b/SerialPort/CMakeLists.txt new file mode 100755 index 0000000..dc7aa6b --- /dev/null +++ b/SerialPort/CMakeLists.txt @@ -0,0 +1,19 @@ +if (WIN32) + add_library (SerialPort STATIC + SerialPortFactory.cpp + SerialPort.cpp + SerialPortWin32.cpp + ) +else() + add_library (SerialPort STATIC + SerialPortFactory.cpp + SerialPort.cpp + SerialPortUnix.cpp + ) +endif() + +set_target_properties (SerialPort PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF +) diff --git a/SerialPort/SerialPort.cpp b/SerialPort/SerialPort.cpp new file mode 100755 index 0000000..93e9d20 --- /dev/null +++ b/SerialPort/SerialPort.cpp @@ -0,0 +1,157 @@ +#include "SerialPort.hpp" +#include "Logger.hpp" +#include "ExitException.hpp" +#include "ExitCodes.hpp" +#include <cstring> +#include <sstream> + +using std::ostringstream; + +#define READ_DEFAULT_TIMEOUT 3000 // ms + +void +CSerialPort::writeWord(uint16_t w) +{ + uint8_t b; + + b = (w & 0xff); + this->write(&b, 1, 1); + + b = (w & 0xff00) >> 8; + this->write(&b, 1, 1); +} + +uint16_t +CSerialPort::readWord() +{ + uint8_t b; + uint16_t w; + + w = 0; + + this->read(&b, 1); + w |= ((uint16_t) b); + + this->read(&b, 1); + w |= ((uint16_t) b) << 8; + + return w; +} + +uint32_t +CSerialPort::readDoubleWord() +{ + uint8_t b; + uint32_t dw; + + dw = 0; + + this->read(&b, 1); + dw |= ((uint32_t) b); + + this->read(&b, 1); + dw |= ((uint32_t) b) << 8; + + this->read(&b, 1); + dw |= ((uint32_t) b) << 16; + + this->read(&b, 1); + dw |= ((uint32_t) b) << 24; + + return dw; +} + +void +CSerialPort::setReadTimeout(int timetout) +{ + mReadTimeoutMs = timetout; +} + +void +CSerialPort::setDefaultTimeout() +{ + mReadTimeoutMs = READ_DEFAULT_TIMEOUT; +} + +void +CSerialPort::write(uint8_t *data, int data_length, int padd_to) +{ + // Write data + for (int i = 0; i < data_length; ) + i += writeSingle(data, data_length); + // Write pad + // TODO: odkial brat hodnotu pad byte?? + uint8_t p[512]; + memset(p, 0xFF, 512); + + for (padd_to -= data_length; padd_to > 0; ) { + int w = 512; + if (padd_to < 512) + w = padd_to; + padd_to -= writeSingle(p, w); + } +} + +void +CSerialPort::read(uint8_t *data, int data_length) +{ + for (int i = 0; i < data_length; ) { + int old_i = i; + i += readSingle(data + i, data_length - i); + // TODO: pre Win32, pretoze tam nedetekujeme timeout a moze vracat 0 bajtov precitanych + if (i == old_i) { + CLogger::error("Timeout occured while reading data from serial port", EXIT_SERIAL_PORT); + } + } +} + +void +CSerialPort::sendSafeByte(uint8_t b) +{ + uint8_t r; + + this->write(&b, 1, 1); + this->read(&r, 1); + if (r != b) { + ostringstream os; + os << "Bad echo when sending byte safely, expected " << CLogger::decToHex(b); + os << " received " << CLogger::decToHex(r); + CLogger::error(os.str(), EXIT_SERIAL_PORT); + } + this->write(&b, 1, 1); + this->read(&r, 1); + if (r != 0x00) { + ostringstream os; + os << "Cannot send byte safely, expected 0x00 received " << CLogger::decToHex(r); + CLogger::error(os.str(), EXIT_SERIAL_PORT); + } +} + +void +CSerialPort::sendSafeWord(uint16_t w) +{ + this->writeWord(w); + uint16_t r = this->readWord(); + if (r != w) { + ostringstream os; + os << "Bad echo when sending word safely, expected " << CLogger::decToHex(w); + os << " received " << CLogger::decToHex(r); + CLogger::error(os.str(), EXIT_SERIAL_PORT); + } + this->writeWord(w); + r = this->readWord(); + if (r != 0x00) { + ostringstream os; + os << "Cannot send word safely, expected 0x0000 received " << CLogger::decToHex(r); + CLogger::error(os.str(), EXIT_SERIAL_PORT); + } +} + +void +CSerialPort::sendSafeDoubleWord(uint32_t w) +{ + // Send low word + sendSafeWord(w & 0x0000FFFF); + // Send high word + sendSafeWord((w & 0xFFFF0000) >> 16); +} diff --git a/SerialPort/SerialPort.hpp b/SerialPort/SerialPort.hpp new file mode 100755 index 0000000..90bb87f --- /dev/null +++ b/SerialPort/SerialPort.hpp @@ -0,0 +1,37 @@ +#ifndef SERIAL_PORT_H +#define SERIAL_PORT_H 1 + +#include <iostream> +#include <cstdint> + +using std::string; + +class CSerialPort { +protected: + int mReadTimeoutMs; // Miliseconds + + virtual ssize_t readSingle(uint8_t *data, int data_length) = 0; + virtual ssize_t writeSingle(uint8_t *data, int data_length) = 0; +public: + virtual ~CSerialPort() { ; }; + + virtual void open(string portName, string speed) = 0; + virtual string getSpeeds(string portName) = 0; + + virtual void close() = 0; + + void setReadTimeout(int ms); + void setDefaultTimeout(); + + void writeWord(uint16_t w); + uint16_t readWord(); + uint32_t readDoubleWord(); + void read(uint8_t *data, int data_length); + void write(uint8_t *data, int data_length, int padd); + void sendSafeByte(uint8_t b); + void sendSafeWord(uint16_t w); + void sendSafeDoubleWord(uint32_t w); + +}; + +#endif diff --git a/SerialPort/SerialPortFactory.cpp b/SerialPort/SerialPortFactory.cpp new file mode 100755 index 0000000..a7e8e9f --- /dev/null +++ b/SerialPort/SerialPortFactory.cpp @@ -0,0 +1,21 @@ +#include "SerialPortFactory.hpp" + +#ifdef WIN32 +#include "SerialPortWin32.hpp" +#else +#include "SerialPortUnix.hpp" +#endif + +std::unique_ptr<CSerialPort> +CSerialPortFactory::getSerialPort() +{ + std::unique_ptr<CSerialPort> sp; + +#ifdef WIN32 + sp.reset(new CSerialPortWin32()); +#else + sp.reset(new CSerialPortUnix()); +#endif + + return sp; +} diff --git a/SerialPort/SerialPortFactory.hpp b/SerialPort/SerialPortFactory.hpp new file mode 100755 index 0000000..7cecc8c --- /dev/null +++ b/SerialPort/SerialPortFactory.hpp @@ -0,0 +1,13 @@ +#ifndef SERIAL_PORT_FACTORY_HPP +#define SERIAL_PORT_FACTORY_HPP 1 + +#include <memory> + +#include "SerialPort.hpp" + +class CSerialPortFactory { +public: + std::unique_ptr<CSerialPort> getSerialPort(); +}; + +#endif diff --git a/SerialPort/SerialPortUnix.cpp b/SerialPort/SerialPortUnix.cpp new file mode 100755 index 0000000..20fba2e --- /dev/null +++ b/SerialPort/SerialPortUnix.cpp @@ -0,0 +1,285 @@ +#include <stdio.h> +#include <string.h> /* String function definitions */ +#include <unistd.h> /* UNIX standard function definitions */ +#include <fcntl.h> /* File control definitions */ +#include <errno.h> /* Error number definitions */ +#include <termios.h> +#include <sys/select.h> +#include <errno.h> + +#include <sstream> +#include <iostream> +#include <iomanip> + +using std::ostringstream; +using std::endl; +using std::setw; +using std::right; + +#include "ExitCodes.hpp" +#include "SerialPortUnix.hpp" +#include "Logger.hpp" +#include "ExitException.hpp" + +#define DEFAULT_SERIAL_SPEED "19200" + +CSerialPortUnix::CSerialPortUnix() +{ + mSerialPortFd = -1; + mPortName = ""; + // Construct vector of available system baudrates +#ifdef B50 + mBaudrates.push_back(pair<string, speed_t>("50", B50)); +#endif +#ifdef B75 + mBaudrates.push_back(pair<string, speed_t>("75", B75)); +#endif +#ifdef B110 + mBaudrates.push_back(pair<string, speed_t>("110", B110)); +#endif +#ifdef B134 + mBaudrates.push_back(pair<string, speed_t>("134", B134)); +#endif +#ifdef B150 + mBaudrates.push_back(pair<string, speed_t>("150", B150)); +#endif +#ifdef B200 + mBaudrates.push_back(pair<string, speed_t>("200", B200)); +#endif +#ifdef B300 + mBaudrates.push_back(pair<string, speed_t>("300", B300)); +#endif +#ifdef B600 + mBaudrates.push_back(pair<string, speed_t>("600", B600)); +#endif +#ifdef B1200 + mBaudrates.push_back(pair<string, speed_t>("1200", B1200)); +#endif +#ifdef B1800 + mBaudrates.push_back(pair<string, speed_t>("1800", B1800)); +#endif +#ifdef B2400 + mBaudrates.push_back(pair<string, speed_t>("2400", B2400)); +#endif +#ifdef B4800 + mBaudrates.push_back(pair<string, speed_t>("4800", B4800)); +#endif +#ifdef B9600 + mBaudrates.push_back(pair<string, speed_t>("9600", B9600)); +#endif +#ifdef B19200 + mBaudrates.push_back(pair<string, speed_t>("19200", B19200)); +#endif +#ifdef B38400 + mBaudrates.push_back(pair<string, speed_t>("38400", B38400)); +#endif +#ifdef B57600 + mBaudrates.push_back(pair<string, speed_t>("57600", B57600)); +#endif +#ifdef B115200 + mBaudrates.push_back(pair<string, speed_t>("115200", B115200)); +#endif +#ifdef B230400 + mBaudrates.push_back(pair<string, speed_t>("230400", B230400)); +#endif +} + +CSerialPortUnix::~CSerialPortUnix() +{ + ; +} + +void +CSerialPortUnix::openPort(string portName) +{ + if (mSerialPortFd == -1) { + mSerialPortFd = ::open(portName.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); + if (mSerialPortFd == -1) + CLogger::error("Cannot open serial port " + portName, EXIT_SERIAL_PORT); + mPortName = portName; + } +} + +void +CSerialPortUnix::open(string portName, string speed) +{ + this->setDefaultTimeout(); + + openPort(portName); + // Set parameters of serial communication + pair<string, speed_t> s = findSpeed(speed, getDeviceSpeeds()); + setSpeed(s); + + struct termios options; + + tcgetattr(mSerialPortFd, &options); + // Control options + options.c_cflag |= (CLOCAL | CREAD); + options.c_cflag &= ~PARENB; + options.c_cflag &= ~CSTOPB; + options.c_cflag &= ~CSIZE; + options.c_cflag |= CS8; + // Turn off hardware flow controll + options.c_cflag &= ~CRTSCTS; + // Input Options - Turn off software flow controll, and CR <-> LF mapping + options.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL); + // Line options - Raw input + options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + // Raw output + options.c_oflag &= ~OPOST; + tcsetattr(mSerialPortFd, TCSANOW, &options); + // Blocking read + fcntl(mSerialPortFd, F_SETFL, 0); + + CLogger::info("Serial port " + mPortName + " opened at speed " + s.first + " Bd"); +} + +void +CSerialPortUnix::close() +{ + // Close only valid descriptor + if (mSerialPortFd != -1) { + if (::close(mSerialPortFd) == -1) + CLogger::error("Cannot close serial port", EXIT_SERIAL_PORT); + mSerialPortFd = -1; + mPortName = ""; + } +} + +vector<pair<string, speed_t>> +CSerialPortUnix::getDeviceSpeeds() +{ + vector<pair<string, speed_t>> ds; + vector<pair<string, speed_t>>::const_iterator it; + + // Test which baudrates are supported by underlying device + for (it = mBaudrates.begin(); it != mBaudrates.end(); ++it) { + // Try to set the baudrate + struct termios options; + + if (tcgetattr(mSerialPortFd, &options) != 0) + CLogger::error("Cannot get attributes of serial port " + mPortName, EXIT_SERIAL_PORT); + + if (!cfsetispeed(&options, it->second) + && !cfsetospeed(&options, it->second) + && !tcsetattr(mSerialPortFd, TCSANOW, &options)) { + ds.push_back(*it); + } + } + + return ds; +} + +string +CSerialPortUnix::getSpeeds(string portName) +{ + ostringstream os; + int c; + vector<pair<string, speed_t>> s; + vector<pair<string, speed_t>>::const_iterator it; + + openPort(portName); + s = getDeviceSpeeds(); + for (c = 0, it = s.begin(); it != s.end(); ++c, ++it) + os << setw(7) << right << it->first << " Bd" << endl; + // Close serial port + close(); + + if (c == 0) + CLogger::error("Serial port device does not support any baudrates", EXIT_SERIAL_PORT); + + return os.str(); +} + +pair<string, speed_t> +CSerialPortUnix::findSpeed(string speed, const vector<pair<string, speed_t>> & list) +{ + vector<pair<string, speed_t>>::const_iterator it; + vector<pair<string, speed_t>>::const_iterator defit; + bool foundDef = false; + + for (it = list.begin(); it != list.end(); ++it) { + if (!(it->first).compare(speed)) + return *it; // Exact match + else if (!(it->first).compare(DEFAULT_SERIAL_SPEED)) { + defit = it; // We have found default serial speed + foundDef = true; + } + } + + if (foundDef) + // We have not found exact speed and default speed. Choose + // highest supported. + return *defit; + + return *(it - 1); +} + +void +CSerialPortUnix::setSpeed(pair<string, speed_t> speed) +{ + struct termios options; + + if (tcgetattr(mSerialPortFd, &options) + || cfsetispeed(&options, speed.second) + || cfsetospeed(&options, speed.second) + || tcsetattr(mSerialPortFd, TCSANOW, &options)) { + CLogger::error("Cannot set serial speed: " + speed.first + ": " + strerror(errno), EXIT_SERIAL_PORT); + } +} + + +ssize_t +CSerialPortUnix::writeSingle(uint8_t *data, int data_length) +{ + ssize_t r = ::write(mSerialPortFd, data, data_length); + + if (r <= 0) { + ostringstream os; + os << "Cannot write to serial port"; + if (r < 0) + os << ": " << string(strerror(errno)); + CLogger::error(os.str(), EXIT_SERIAL_PORT); + } + + return r; +} + +ssize_t +CSerialPortUnix::readSingle(uint8_t *data, int data_length) +{ + ssize_t r = 0; + int s; + fd_set read_fds, write_fds, except_fds; + struct timeval timeout; + + // Renew file descriptor sets + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + FD_ZERO(&except_fds); + FD_SET(mSerialPortFd, &read_fds); + // Set timeout + timeout.tv_sec = mReadTimeoutMs / 1000; + timeout.tv_usec = 0; + // Wait for event + s = select(mSerialPortFd + 1, &read_fds, &write_fds, &except_fds, &timeout); + if (s == 1) { + // One descriptor changed, ready to read + r = ::read(mSerialPortFd, data, data_length); + } else if (s == 0) { + // Timeout occured + CLogger::error("Timeout occured while reading data from serial port", EXIT_SERIAL_PORT); + } + + if ((s < 0) || (r <= 0)) { + // Error occured in select or read + ostringstream os; + os << "Cannot read from serial port"; + if (r < 0) { + os << ": " << strerror(errno); + CLogger::error(os.str(), EXIT_SERIAL_PORT); + } + } + + return r; +} diff --git a/SerialPort/SerialPortUnix.hpp b/SerialPort/SerialPortUnix.hpp new file mode 100755 index 0000000..db1ae73 --- /dev/null +++ b/SerialPort/SerialPortUnix.hpp @@ -0,0 +1,35 @@ +#ifndef SERIAL_PORT_UNIX_H +#define SERIAL_PORT_UNIX_H 1 + +#include <termios.h> + +#include <vector> +#include "SerialPort.hpp" + +using std::vector; +using std::pair; + +class CSerialPortUnix : public CSerialPort { +private: + int mSerialPortFd; + string mPortName; + vector< pair<string, speed_t> > mBaudrates; + + vector<pair<string, speed_t>> getDeviceSpeeds(); + pair<string, speed_t> findSpeed(string speed, const vector<pair<string, speed_t>> & list); + void setSpeed(pair<string, speed_t> speed); + void openPort(string portName); + + ssize_t readSingle(uint8_t *data, int data_length); + ssize_t writeSingle(uint8_t *data, int data_length); +public: + CSerialPortUnix(); + ~CSerialPortUnix(); + + void open(string portName, string speed); + string getSpeeds(string portName); + + void close(); +}; + +#endif diff --git a/SerialPort/SerialPortWin32.cpp b/SerialPort/SerialPortWin32.cpp new file mode 100755 index 0000000..15316d2 --- /dev/null +++ b/SerialPort/SerialPortWin32.cpp @@ -0,0 +1,238 @@ +#include <sstream> +#include <cstdio> + +#include "ExitCodes.hpp" +#include "SerialPortWin32.hpp" +#include "Logger.hpp" + +using std::ostringstream; +using std::istringstream; + +//Returns the last Win32 error, in string format. Returns an empty string if there is no error. +string +CSerialPortWin32::getLastErrorAsString() +{ + DWORD e = GetLastError(); + if (e == 0) + return string(); + + LPSTR msgBuff = nullptr; + size_t size = FormatMessageA( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + e, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR) &msgBuff, + 0, + NULL); + + string m(msgBuff, size); + + LocalFree(msgBuff); + + return m; +} + + + + +CSerialPortWin32::CSerialPortWin32() +{ + mSerialPortH = INVALID_HANDLE_VALUE; + + mMaxBaudrates.push_back(s_speed("User defined", BAUD_USER, 0)); + mMaxBaudrates.push_back(s_speed("75", BAUD_075, 75)); + mMaxBaudrates.push_back(s_speed("110", BAUD_110, 110)); + mMaxBaudrates.push_back(s_speed("134.5", BAUD_134_5, 134)); + mMaxBaudrates.push_back(s_speed("150", BAUD_150, 150)); + mMaxBaudrates.push_back(s_speed("300", BAUD_300, 300)); + mMaxBaudrates.push_back(s_speed("600", BAUD_600, 600)); + mMaxBaudrates.push_back(s_speed("1200", BAUD_1200, 1200)); + mMaxBaudrates.push_back(s_speed("1800", BAUD_1800, 1800)); + mMaxBaudrates.push_back(s_speed("2400", BAUD_2400, 2400)); + mMaxBaudrates.push_back(s_speed("4800", BAUD_4800, 4800)); + mMaxBaudrates.push_back(s_speed("7200", BAUD_7200, 7200)); + mMaxBaudrates.push_back(s_speed("9600", BAUD_9600, 9600)); + mMaxBaudrates.push_back(s_speed("14400", BAUD_14400, 14400)); + mMaxBaudrates.push_back(s_speed("19200", BAUD_19200, 19200)); + mMaxBaudrates.push_back(s_speed("38400", BAUD_38400, 38400)); + mMaxBaudrates.push_back(s_speed("56000", BAUD_56K, 56000)); + mMaxBaudrates.push_back(s_speed("57600", BAUD_57600, 576000)); + mMaxBaudrates.push_back(s_speed("115200", BAUD_115200, 115200)); + mMaxBaudrates.push_back(s_speed("128000", BAUD_128K, 128000)); +} + +CSerialPortWin32::~CSerialPortWin32() +{ + ; +} + +void +CSerialPortWin32::openPort(string portName) +{ + if (mSerialPortH == INVALID_HANDLE_VALUE) { + // Construct Windows serial port name + ostringstream sn; + sn << "\\\\.\\" << portName; + // Open serial port + mSerialPortH = CreateFile(sn.str().c_str(), // Port name + GENERIC_READ | GENERIC_WRITE, // Read/Write + 0, // No Sharing + NULL, // No Security + OPEN_EXISTING,// Open existing port only + 0, // Non Overlapped I/O + NULL); // Null for Comm Devices + + if (mSerialPortH == INVALID_HANDLE_VALUE) { + CLogger::error("Cannot open port " + portName + ": " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } + } +} + +void +CSerialPortWin32::open(string portName, string speed) +{ + this->setDefaultTimeout(); + + openPort(portName); + + DWORD ms = getMaxSpeed(portName).value; + + // Konfiguracia + DCB dcbSerialParams = { 0 }; + dcbSerialParams.DCBlength = sizeof(dcbSerialParams); + + if (GetCommState(mSerialPortH, &dcbSerialParams) == 0) { + CLogger::error("Cannot get state for port " + portName + ": " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } + // Set speed + istringstream is(speed); + DWORD n; + is >> n; + if (n == 0) { + // User has requested default baudrate + n = ((ms == 0) || (19200 <= ms)) ? 19200 : ms; + } else if ((ms != 0) && (n > ms)) { + ostringstream os; + os << "Baudrate " << n << " Bd is higher than max. baudrate " << ms << " Bd supported by " << portName; + CLogger::error(os.str(), EXIT_SERIAL_PORT); + } + + dcbSerialParams.BaudRate = n; + dcbSerialParams.ByteSize = 8; // Setting ByteSize = 8 + dcbSerialParams.StopBits = ONESTOPBIT;// Setting StopBits = 1 + dcbSerialParams.Parity = NOPARITY; // Setting Parity = None + + if (SetCommState(mSerialPortH, &dcbSerialParams) == 0) { + CLogger::error("Cannot set state for port " + portName + ": " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } + + ostringstream os; + os << n; + CLogger::info("Serial port " + portName + " opened at speed " + os.str() + " Bd"); +} + +CSerialPortWin32::s_speed +CSerialPortWin32::getMaxSpeed(string portName) +{ + COMMPROP cp; + + if (GetCommProperties(mSerialPortH, &cp) == 0) { + CLogger::error("Cannot get properties of " + portName + " port: " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } + + // Convert key to baudrate value + list<s_speed>::const_iterator it; + + for (it = mMaxBaudrates.begin(); it != mMaxBaudrates.end(); ++it) { + if (it->key == cp.dwMaxBaud) + break; + } + + return *it; +} + +string +CSerialPortWin32::getSpeeds(string portName) +{ + openPort(portName); + + s_speed m = getMaxSpeed(portName); + + ostringstream os; + os << "User defined baudrate"; + if (m.key != BAUD_USER) + os << " up to the " << m.name << " Bd"; + + close(); + return os.str(); +} + +void +CSerialPortWin32::close() +{ + if (mSerialPortH != INVALID_HANDLE_VALUE) { + if (CloseHandle(mSerialPortH) == 0) { + CLogger::error("Cannot close serial port: " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } + mSerialPortH = INVALID_HANDLE_VALUE; + } +} + +void +CSerialPortWin32::setTimeouts(int ms) +{ + COMMTIMEOUTS timeouts; + + if (!GetCommTimeouts(mSerialPortH, &timeouts)) { + CLogger::error("Cannot get timeouts for serial port: " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } + + timeouts.ReadIntervalTimeout = ms; + timeouts.ReadTotalTimeoutMultiplier = ms; + timeouts.ReadTotalTimeoutConstant = 0; + + timeouts.WriteTotalTimeoutMultiplier = ms; + timeouts.WriteTotalTimeoutConstant = 0; + + if (!SetCommTimeouts(mSerialPortH, &timeouts)) { + CLogger::error("Cannot set timeouts for port: " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } +} + +ssize_t +CSerialPortWin32::writeSingle(uint8_t *data, int data_length) +{ + DWORD written = 0; + + setTimeouts(mReadTimeoutMs); + // TODO: Rozlisovat medzi timeoutom a chybou + if (!WriteFile(mSerialPortH, data, data_length, &written, NULL)) { + CLogger::error("Cannot write data to the serial port: " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } + + return written; +} + +ssize_t +CSerialPortWin32::readSingle(uint8_t *data, int data_length) +{ + DWORD read; + + setTimeouts(mReadTimeoutMs); + + if (!ReadFile(mSerialPortH, data, data_length, &read, NULL)) { + CLogger::error("Cannot read data from serial port: " + getLastErrorAsString(), + EXIT_SERIAL_PORT); + } + + return read; +} diff --git a/SerialPort/SerialPortWin32.hpp b/SerialPort/SerialPortWin32.hpp new file mode 100755 index 0000000..2cba0f7 --- /dev/null +++ b/SerialPort/SerialPortWin32.hpp @@ -0,0 +1,49 @@ +#ifndef SERIAL_PORT_WIN32_H +#define SERIAL_PORT_WIN32_H 1 + +#include <windows.h> +#include <list> +#include "SerialPort.hpp" + +using std::pair; +using std::list; + +class CSerialPortWin32 : public CSerialPort { +private: + HANDLE mSerialPortH; + + struct s_speed { + string name; + DWORD key; + DWORD value; + + s_speed(string n, DWORD k, DWORD v) { + name = n; + key = k; + value = v; + } + }; + + list<struct s_speed> mMaxBaudrates; + + + void openPort(string portName); + s_speed getMaxSpeed(string portName); + void setTimeouts(int ms); + string getLastErrorAsString(); + + ssize_t readSingle(uint8_t *data, int data_length); + ssize_t writeSingle(uint8_t *data, int data_length); +public: + CSerialPortWin32(); + ~CSerialPortWin32(); + + void open(string portName, string speed); + string getSpeeds(string portName); + + void close(); + void write(uint8_t *data, int data_length, int padd_to); + void read(uint8_t *data, int data_length); +}; + +#endif diff --git a/UserConfig.cpp b/UserConfig.cpp new file mode 100755 index 0000000..dbfa88e --- /dev/null +++ b/UserConfig.cpp @@ -0,0 +1,375 @@ +#include <sstream> +#include <memory> +#include "ExitCodes.hpp" +#include "UserConfig.hpp" +#include "Logger.hpp" +#include "help_message.hpp" + +using std::ostringstream; +using std::istringstream; +using std::endl; +using std::noskipws; + + +#define OPERATION_SPEEDS "speeds" +#define OPERATION_ERASE "erase" +#define OPERATION_READ "read" +#define OPERATION_WRITE "write" +#define OPERATION_HELP "help" +#define OPERATION_VERSION "version" +#define OPERATION_IDENT "ident" + + +// Common options +#define OPTION_SERIAL_PORT "-p" +#define OPTION_VERBOSE_MODE "-v" +#define OPTION_SERIAL_SPEED "-s" +#define OPTION_FREQUENCY "-f" +#define OPTION_PRINT_PROGRESS "-g" +// Options specific for an operation +#define OPTION_B "-b" +#define OPTION_C "-c" +#define OPTION_E "-e" +#define OPTION_N "-n" + + +CUserConfig::CUserConfig(int argc, char **argv) +{ + mSerialPortName = DEFAULT_SERIAL_PORT_NAME; + mSerialSpeed = "0"; // Default serial speed for given device + mVerboseMode = false; + mSpeeds = false; + mHelp = false; + mVersion = false; + mIdent = false; + mErase = false; + mRead = false; + mReadOutputFilename = ""; + mReadLength = -1; + mWrite = false; + mWriteInputFilename = ""; + mWriteEraseWholeMemory = false; + mWriteCheckByRead = false; + mMcuFrequency = 0; + mPrintProgress = false; + + vector<char *> args; + + for (int i = 1; i < argc; ++i) + args.push_back(argv[i]); + + parseCommandLine(args); +} + +const string +CUserConfig::getHelpMessage(const string & execName) const +{ + return HelpMessage::getText(execName); +} + +void +CUserConfig::parseCommandLine(vector<char *> & args) +{ + // Process options common for all operations. Create custom + // argument vector without processed common options. + vector<char *>::iterator it = args.begin(); + // Skip operation name from processing + if (it != args.end()) + ++it; + // Start at the second argument, first is the name of an + // operation. + while (it != args.end()) { + string a = *it; + bool processed = false; + bool with_argument = false; + + if (!a.compare(OPTION_SERIAL_PORT)) { + mSerialPortName = getArgument(it, args.end()); + processed = true; + with_argument = true; + } else if (!a.compare(OPTION_SERIAL_SPEED)) { + mSerialSpeed = getArgument(it, args.end()); + processed = true; + with_argument = true; + } else if (!a.compare(OPTION_VERBOSE_MODE)) { + mVerboseMode = true; + processed = true; + } else if (!a.compare(OPTION_PRINT_PROGRESS)) { + mPrintProgress = true; + processed = true; + } else if (!a.compare(OPTION_FREQUENCY)) { + istringstream is(getArgument(it, args.end())); + string s = is.str(); + float f; + is >> noskipws >> f; + bool a = (is.fail() || (f <= 0)); + bool b = (is.peek() != EOF); + if (a || b) { + ostringstream os; + os << "Argument for -f option '" << s << "' is not a positive real number"; + CLogger::error(os.str(), EXIT_USER_CONFIG); + } + mMcuFrequency = f; + processed = true; + with_argument = true; + } + + if (processed) { + it = args.erase(it); + if (with_argument) // Urcite bude platne, to mame osetrene getArgument() + it = args.erase(it); + } else { + ++it; + } + } + + it = args.begin(); + if (it != args.end()) { + it = args.begin(); + // Resolve operation name + string a = *it; + + if (!a.compare(OPERATION_SPEEDS)) { + mSpeeds = true; + } else if (!a.compare(OPERATION_ERASE)) { + mErase = true; + parseEraseArguments(++it, args.end()); + } else if (!a.compare(OPERATION_READ)) { + mRead = true; + parseReadArguments(++it, args.end()); + } else if (!a.compare(OPERATION_WRITE)) { + mWrite = true; + parseWriteArguments(++it, args.end()); + } else if (!a.compare(OPERATION_HELP)) { + mHelp = true; + } else if (!a.compare(OPERATION_VERSION)) { + mVersion = true; + } else if (!a.compare(OPERATION_IDENT)) { + mIdent = true; + } else { + CLogger::error("Unknown operation requested: " + a, EXIT_USER_CONFIG); + } + } +} + +void +CUserConfig::parseEraseArguments(vector<char *>::const_iterator args, + vector<char *>::const_iterator end) +{ + while (args != end) { + string a = *args; + if (!a.compare(OPTION_B)) { + // Prepend comma for unified parsing + istringstream is("," + getArgument(args, end)); + // Parse block numbers list + bool e = false; + for (;;) { + // Get comma + int c = is.get(); + if (is.eof()) { + break; + } else if (c != ',') { + e = true; + break; + } + // Get number + int n; + is >> n; + if (is.fail()) { + e = true; + break; + } + mEraseBlockList.push_back(n); + } + if (e || mEraseBlockList.size() == 0) + CLogger::error("Argument for -b option must be in format N[,N]...", EXIT_USER_CONFIG); + ++args; + ++args; + } else { + string s = *args; + CLogger::error("Unknown argument '" + s + "' for erase operation", EXIT_USER_CONFIG); + } + } +} + +void +CUserConfig::parseReadArguments(vector<char *>::const_iterator args, + vector<char *>::const_iterator end) +{ + while (args != end) { + string a = *args; + if (!a.compare(OPTION_N)) { + istringstream n(getArgument(args, end)); + string s = n.str(); + n >> noskipws >> mReadLength; + bool a = (n.fail() || (mReadLength < 0)); + bool b = (n.peek() != EOF); + if (a || b) { + ostringstream os; + os << "Argument for -n option '" << s << "' is not 0 or a positive number"; + CLogger::error(os.str(), EXIT_USER_CONFIG); + } + ++args; + ++args; + } else { + // First occurence of this is the name of output file + if (mReadOutputFilename.length() == 0) { + mReadOutputFilename = a; + ++args; + } else { + string s = *args; + CLogger::error("Unknown argument '" + s + "' for read operation", EXIT_USER_CONFIG); + } + } + } + // Must have at least filename where to write output + if (mReadOutputFilename.length() == 0) + CLogger::error("Missing output filename for read operation", EXIT_USER_CONFIG); +} + +void +CUserConfig::parseWriteArguments(vector<char *>::const_iterator args, + vector<char *>::const_iterator end) +{ + while (args != end) { + string a = *args; + if (!a.compare(OPTION_E)) { + mWriteEraseWholeMemory = true; + ++args; + } else if (!a.compare(OPTION_C)) { + mWriteCheckByRead = true; + ++args; + } else { + // First occurence of this is the name of output file + if (mWriteInputFilename.length() == 0) { + mWriteInputFilename = a; + ++args; + } else { + string s = *args; + CLogger::error("Unknown argument '" + s + "' for write operation", EXIT_USER_CONFIG); + } + } + } + // Must have at least filename where to write output + if (mWriteInputFilename.length() == 0) + CLogger::error("Missing input filename for write operation", EXIT_USER_CONFIG); +} + +string +CUserConfig::getArgument(vector<char *>::const_iterator args, + vector<char *>::const_iterator end) +{ + if (++args == end) { + string s(*(--args)); + CLogger::error("Missing argument for option '" + s + "'", EXIT_USER_CONFIG); + } + return string(*args); +} + +bool +CUserConfig::isEraseSet() +{ + return mErase; +} + +list<unsigned int> +CUserConfig::getEraseBlockList() +{ + return mEraseBlockList; +} + +bool +CUserConfig::isReadSet() +{ + return mRead; +} + +bool +CUserConfig::isWriteSet() +{ + return mWrite; +} + +bool +CUserConfig::isVerboseModeSet() +{ + return mVerboseMode; +} + +bool +CUserConfig::isPrintProgressSet() +{ + return mPrintProgress; +} + +bool +CUserConfig::isHelpSet() +{ + return mHelp; +} + +bool +CUserConfig::isVersionSet() +{ + return mVersion; +} + +bool +CUserConfig::isIdentSet() +{ + return mIdent; +} + +string & +CUserConfig::getSerialPortName() +{ + return mSerialPortName; +} + +string & +CUserConfig::getSerialSpeed() +{ + return mSerialSpeed; +} + +string & +CUserConfig::getReadOutputFname() +{ + return mReadOutputFilename; +} + +string & +CUserConfig::getWriteInputFname() +{ + return mWriteInputFilename; +} + +int +CUserConfig::getReadLength() +{ + return mReadLength; +} + +bool +CUserConfig::getWriteEraseWholeMemory() +{ + return mWriteEraseWholeMemory; +} + +bool +CUserConfig::getWriteCheckByRead() +{ + return mWriteCheckByRead; +} + +bool +CUserConfig::isSpeedsSet() +{ + return mSpeeds; +} + +float +CUserConfig::getMcuFrequency() +{ + return mMcuFrequency; +} diff --git a/UserConfig.hpp b/UserConfig.hpp new file mode 100755 index 0000000..4d3d6b3 --- /dev/null +++ b/UserConfig.hpp @@ -0,0 +1,67 @@ +#ifndef USER_CONFIG_HPP +#define USER_CONFIG_HPP 1 + +#include <iostream> +#include <list> +#include <vector> + +using std::string; +using std::list; +using std::vector; + +class CUserConfig { +private: + string mSerialPortName; + string mSerialSpeed; + bool mVerboseMode; + bool mHelp; + bool mVersion; + bool mIdent; + bool mSpeeds; + float mMcuFrequency; + bool mPrintProgress; + // Erase + bool mErase; + list<unsigned int> mEraseBlockList; + // Read + bool mRead; + string mReadOutputFilename; + int mReadLength; + // Write + bool mWrite; + bool mWriteEraseWholeMemory; + string mWriteInputFilename; + bool mWriteCheckByRead; + + string getArgument(vector<char *>::const_iterator args, vector<char *>::const_iterator end); + void parseEraseArguments(vector<char *>::const_iterator args, vector<char *>::const_iterator end); + void parseReadArguments(vector<char *>::const_iterator args, vector<char *>::const_iterator end); + void parseWriteArguments(vector<char *>::const_iterator args, vector<char *>::const_iterator end); + void parseCommandLine(vector<char *> & args); + +public: + CUserConfig(int argc, char **argv); + + const string getHelpMessage(const string & execName) const; + + string & getSerialPortName(); + string & getSerialSpeed(); + bool isSpeedsSet(); + bool isVerboseModeSet(); + bool isPrintProgressSet(); + bool isHelpSet(); + bool isVersionSet(); + bool isIdentSet(); + bool isEraseSet(); + list<unsigned int> getEraseBlockList(); + bool isReadSet(); + string & getReadOutputFname(); + bool isWriteSet(); + string & getWriteInputFname(); + int getReadLength(); + bool getWriteEraseWholeMemory(); + bool getWriteCheckByRead(); + float getMcuFrequency(); +}; + +#endif diff --git a/firmware/ident/Objects/ident.SBR b/firmware/ident/Objects/ident.SBR Binary files differnew file mode 100755 index 0000000..301c7d7 --- /dev/null +++ b/firmware/ident/Objects/ident.SBR diff --git a/firmware/ident/Objects/ident.bin b/firmware/ident/Objects/ident.bin Binary files differnew file mode 100755 index 0000000..3abc090 --- /dev/null +++ b/firmware/ident/Objects/ident.bin diff --git a/firmware/ident/ident.a66 b/firmware/ident/ident.a66 new file mode 100755 index 0000000..737d1fb --- /dev/null +++ b/firmware/ident/ident.a66 @@ -0,0 +1,27 @@ +$MOD167
+$SEGMENTED
+
+$INCLUDE (REG167.INC)
+$INCLUDE (COMMON.INC)
+
+NAME FIRMWARE_IDENTIFICATION
+ASSUME DPP3: SYSTEM
+
+FW_IDENT SECTION CODE AT FW2BASE
+MAIN PROC
+ ; Odosleme identifikaciu vyrobcu
+ CALL IDENTIFY
+ ; Vratime sa na firmware prvej urovne a tam pockame na nahratie
+ ; firmwaru pre vykonavanie operacii s FLASH
+ JMP FW1START
+MAIN ENDP
+
+$INCLUDE (SUBROUTINES.INC)
+
+FW_IDENT ENDS
+
+FW_S1 SECTION CODE AT FW1BASE
+FW1START:
+FW_S1 ENDS
+
+END
\ No newline at end of file diff --git a/firmware/ident/ident.uvgui.jan b/firmware/ident/ident.uvgui.jan new file mode 100755 index 0000000..83e0e39 --- /dev/null +++ b/firmware/ident/ident.uvgui.jan @@ -0,0 +1,1360 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_gui.xsd"> + + <SchemaVersion>-5.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <ViewPool/> + + <SECTreeCtrl> + <View> + <WinId>38003</WinId> + <ViewName>Registers</ViewName> + <TableColWidths>115 184</TableColWidths> + </View> + <View> + <WinId>346</WinId> + <ViewName>Code Coverage</ViewName> + <TableColWidths>442 160</TableColWidths> + </View> + <View> + <WinId>204</WinId> + <ViewName>Performance Analyzer</ViewName> + <TableColWidths>602</TableColWidths> + </View> + </SECTreeCtrl> + + <TreeListPane> + <View> + <WinId>1506</WinId> + <ViewName>Symbols</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1936</WinId> + <ViewName>Watch 1</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1937</WinId> + <ViewName>Watch 2</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1935</WinId> + <ViewName>Call Stack + Locals</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>2506</WinId> + <ViewName>Trace Data</ViewName> + <UserString></UserString> + <TableColWidths>75 135 130 95 70 230 200 150</TableColWidths> + </View> + </TreeListPane> + + <WindowSettings> + <LogicAnalizer> + <ShowLACursor>1</ShowLACursor> + <ShowSignalInfo>1</ShowSignalInfo> + <ShowCycles>0</ShowCycles> + <LeftSideBarSize>0</LeftSideBarSize> + <TimeBaseIndex>-1</TimeBaseIndex> + </LogicAnalizer> + </WindowSettings> + + <WinLayoutEx> + <sActiveDebugView></sActiveDebugView> + <WindowPosition> + <length>44</length> + <flags>0</flags> + <showCmd>3</showCmd> + <MinPosition> + <xPos>-1</xPos> + <yPos>-1</yPos> + </MinPosition> + <MaxPosition> + <xPos>-1684</xPos> + <yPos>-4</yPos> + </MaxPosition> + <NormalPosition> + <Top>89</Top> + <Left>-1243</Left> + <Right>-322</Right> + <Bottom>869</Bottom> + </NormalPosition> + </WindowPosition> + <MDIClientArea> + <RegID>0</RegID> + <MDITabState> + <Len>381</Len> + <Data>010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000001000000020000000000000001000000495A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C6964656E745C6964656E742E61363600000000096964656E742E61363600000000BECEA100FFFFFFFF4F5A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C73743130663236395C73743130663236392E613636000000000C73743130663236392E61363600000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000A9FAFFFF5E00000000000000E8030000</Data> + </MDITabState> + </MDIClientArea> + <ViewEx> + <ViewType>0</ViewType> + <ViewName>Build</ViewName> + <Window> + <RegID>-1</RegID> + <PaneID>-1</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>940100004B000000F8030000B4000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04FBFFFF5E00000068FDFFFFC7000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1005</RegID> + <PaneID>1005</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100004F030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>109</RegID> + <PaneID>109</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100004F030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1465</RegID> + <PaneID>1465</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1466</RegID> + <PaneID>1466</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1467</RegID> + <PaneID>1467</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1468</RegID> + <PaneID>1468</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1506</RegID> + <PaneID>1506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1913</RegID> + <PaneID>1913</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1935</RegID> + <PaneID>1935</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1936</RegID> + <PaneID>1936</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1937</RegID> + <PaneID>1937</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1939</RegID> + <PaneID>1939</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1940</RegID> + <PaneID>1940</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1941</RegID> + <PaneID>1941</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1942</RegID> + <PaneID>1942</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>195</RegID> + <PaneID>195</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100004F030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>196</RegID> + <PaneID>196</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100004F030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>197</RegID> + <PaneID>197</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000008303000090060000D5030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>198</RegID> + <PaneID>198</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000007A010000F8030000FA010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>199</RegID> + <PaneID>199</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000008603000013040000BC030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>203</RegID> + <PaneID>203</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>204</RegID> + <PaneID>204</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>221</RegID> + <PaneID>221</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000000000000000000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2506</RegID> + <PaneID>2506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2507</RegID> + <PaneID>2507</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>343</RegID> + <PaneID>343</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>346</RegID> + <PaneID>346</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35824</RegID> + <PaneID>35824</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35885</RegID> + <PaneID>35885</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35886</RegID> + <PaneID>35886</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35887</RegID> + <PaneID>35887</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35888</RegID> + <PaneID>35888</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35889</RegID> + <PaneID>35889</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35890</RegID> + <PaneID>35890</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35891</RegID> + <PaneID>35891</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35892</RegID> + <PaneID>35892</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35893</RegID> + <PaneID>35893</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35894</RegID> + <PaneID>35894</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35895</RegID> + <PaneID>35895</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35896</RegID> + <PaneID>35896</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35897</RegID> + <PaneID>35897</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35898</RegID> + <PaneID>35898</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35899</RegID> + <PaneID>35899</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35900</RegID> + <PaneID>35900</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35901</RegID> + <PaneID>35901</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35902</RegID> + <PaneID>35902</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35903</RegID> + <PaneID>35903</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35904</RegID> + <PaneID>35904</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35905</RegID> + <PaneID>35905</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38003</RegID> + <PaneID>38003</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D01000058020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38007</RegID> + <PaneID>38007</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000008603000013040000BC030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>436</RegID> + <PaneID>436</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000008603000013040000BC030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>437</RegID> + <PaneID>437</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>440</RegID> + <PaneID>440</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59392</RegID> + <PaneID>59392</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>882</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000007D0300001A000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59393</RegID> + <PaneID>0</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000D503000090060000E8030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59399</RegID> + <PaneID>59399</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>439</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>1</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000001A000000C201000034000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59400</RegID> + <PaneID>59400</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>572</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>2</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0000000034000000470200004E000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <DockMan> + <Len>2619</Len> + <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF94010000B4000000F8030000B8000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000004FBFFFF5E00000068FDFFFFC7000000940100004B000000F8030000B40000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF640200004B000000680200008D010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000D8FBFFFF5E00000068FDFFFFA0010000680200004B000000F80300008D0100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF900100004B0000009401000068030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000070F9FFFF5E00000000FBFFFF84020000000000004B00000090010000680300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000076010000F80300007A01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB0900000180008000000000000070F9FFFF8D01000068FDFFFF0D020000000000007A010000F8030000FA01000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFFC0100007A01000000020000FA01000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000068030000900600006C030000010000000100001004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000100000070F9FFFF8802000086FDFFFFF1020000000000006C03000090060000D50300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data> + </DockMan> + <ToolBar> + <RegID>59392</RegID> + <Name>File</Name> + <Buttons> + <Len>2030</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000025235960000000000000003000252350370726506304646383448000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data> + </Buttons> + <OriginalItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59399</RegID> + <Name>Build</Name> + <Buttons> + <Len>678</Len> + <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000</Data> + </Buttons> + <OriginalItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59400</RegID> + <Name>Debug</Name> + <Buttons> + <Len>2220</Len> + <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7200000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data> + </Buttons> + <OriginalItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ControlBarsSummary> + <Bars>0</Bars> + <ScreenCX>1366</ScreenCX> + <ScreenCY>768</ScreenCY> + </ControlBarsSummary> + </ViewEx> + </WinLayoutEx> + + <MDIGroups> + <Orientation>1</Orientation> + <ActiveMDIGroup>0</ActiveMDIGroup> + <MDIGroup> + <Size>100</Size> + <ActiveTab>0</ActiveTab> + <Doc> + <Name><1>.\ident.a66</Name> + <ColumnNumber>9</ColumnNumber> + <TopLine>1</TopLine> + <CurrentLine>10</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + </MDIGroup> + </MDIGroups> + +</ProjectGui> diff --git a/firmware/ident/ident.uvopt b/firmware/ident/ident.uvopt new file mode 100755 index 0000000..cb41179 --- /dev/null +++ b/firmware/ident/ident.uvopt @@ -0,0 +1,262 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd"> + + <SchemaVersion>1.0</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Extensions> + <cExt>*.c</cExt> + <aExt>*.s*; *.src; *.a*</aExt> + <oExt>*.obj</oExt> + <lExt>*.lib</lExt> + <tExt>*.txt; *.h; *.inc</tExt> + <pExt>*.plm</pExt> + <CppX>*.cpp</CppX> + <nMigrate>0</nMigrate> + </Extensions> + + <DaveTm> + <dwLowDateTime>0</dwLowDateTime> + <dwHighDateTime>0</dwHighDateTime> + </DaveTm> + + <Target> + <TargetName>Target 1</TargetName> + <ToolsetNumber>0x2</ToolsetNumber> + <ToolsetName>166/167</ToolsetName> + <TargetOption> + <MCS166> + <Clock>40000000</Clock> + <uocRom>1</uocRom> + <uocXCAN>1</uocXCAN> + <hadROM>1</hadROM> + <hadXRAM>1</hadXRAM> + <hadICAN>1</hadICAN> + <uocIROM2>0</uocIROM2> + <uocIROM3>0</uocIROM3> + <uocXRAM3>0</uocXRAM3> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + <ICAN> + <Type>0</Type> + <StartAddress>0xe800</StartAddress> + <Size>0x800</Size> + </ICAN> + <IROM> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x40000</Size> + </IROM> + <XRAM> + <Type>0</Type> + <StartAddress>0xc000</StartAddress> + <Size>0x2000</Size> + </XRAM> + <IRAM> + <Type>0</Type> + <StartAddress>0xf600</StartAddress> + <Size>0x800</Size> + </IRAM> + <IROM2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </IROM2> + <IROM3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </IROM3> + <XRAM3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </XRAM3> + </OnChipMemories> + </MCS166> + <OPTTT> + <gFlags>1</gFlags> + <BeepAtEnd>1</BeepAtEnd> + <RunSim>1</RunSim> + <RunTarget>0</RunTarget> + <RunAbUc>0</RunAbUc> + </OPTTT> + <OPTHX> + <HexSelection>1</HexSelection> + <FlashByte>65535</FlashByte> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + </OPTHX> + <OPTLEX> + <PageWidth>120</PageWidth> + <PageLength>65</PageLength> + <TabStop>8</TabStop> + <ListingPath>.\Listings\</ListingPath> + </OPTLEX> + <ListingPage> + <CreateCListing>1</CreateCListing> + <CreateAListing>1</CreateAListing> + <CreateLListing>1</CreateLListing> + <CreateIListing>0</CreateIListing> + <AsmCond>1</AsmCond> + <AsmSymb>1</AsmSymb> + <AsmXref>0</AsmXref> + <CCond>1</CCond> + <CCode>0</CCode> + <CListInc>0</CListInc> + <CSymb>0</CSymb> + <LinkerCodeListing>0</LinkerCodeListing> + </ListingPage> + <OPTXL> + <LMap>1</LMap> + <LComments>1</LComments> + <LGenerateSymbols>1</LGenerateSymbols> + <LLibSym>1</LLibSym> + <LLines>1</LLines> + <LLocSym>1</LLocSym> + <LPubSym>1</LPubSym> + <LXref>0</LXref> + <LExpSel>0</LExpSel> + </OPTXL> + <OPTFL> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <IsCurrentTarget>1</IsCurrentTarget> + </OPTFL> + <CpuCode>255</CpuCode> + <Books> + <Book> + <Number>0</Number> + <Title>Data Sheet</Title> + <Path>DATASHTS\ST\ST10F269_DS.PDF</Path> + </Book> + <Book> + <Number>1</Number> + <Title>Programming Manual</Title> + <Path>DATASHTS\ST\ST10_PM.PDF</Path> + </Book> + </Books> + <DebugOpt> + <uSim>1</uSim> + <uTrg>0</uTrg> + <sLdApp>1</sLdApp> + <sGomain>1</sGomain> + <sRbreak>1</sRbreak> + <sRwatch>1</sRwatch> + <sRmem>1</sRmem> + <sRfunc>1</sRfunc> + <sRbox>1</sRbox> + <tLdApp>1</tLdApp> + <tGomain>0</tGomain> + <tRbreak>1</tRbreak> + <tRwatch>1</tRwatch> + <tRmem>1</tRmem> + <tRfunc>0</tRfunc> + <tRbox>1</tRbox> + <tRtrace>1</tRtrace> + <sRSysVw>1</sRSysVw> + <tRSysVw>1</tRSysVw> + <sRunDeb>0</sRunDeb> + <sLrtime>0</sLrtime> + <nTsel>-1</nTsel> + <sDll></sDll> + <sDllPa></sDllPa> + <sDlgDll></sDlgDll> + <sDlgPa></sDlgPa> + <sIfile></sIfile> + <tDll></tDll> + <tDllPa></tDllPa> + <tDlgDll></tDlgDll> + <tDlgPa></tDlgPa> + <tIfile></tIfile> + <pMon></pMon> + </DebugOpt> + <Breakpoint/> + <Tracepoint> + <THDelay>0</THDelay> + </Tracepoint> + <DebugFlag> + <trace>0</trace> + <periodic>1</periodic> + <aLwin>0</aLwin> + <aCover>0</aCover> + <aSer1>0</aSer1> + <aSer2>0</aSer2> + <aPa>0</aPa> + <viewmode>0</viewmode> + <vrSel>0</vrSel> + <aSym>0</aSym> + <aTbox>0</aTbox> + <AscS1>0</AscS1> + <AscS2>0</AscS2> + <AscS3>0</AscS3> + <aSer3>0</aSer3> + <eProf>0</eProf> + <aLa>0</aLa> + <aPa1>0</aPa1> + <AscS4>0</AscS4> + <aSer4>0</aSer4> + <StkLoc>0</StkLoc> + <TrcWin>0</TrcWin> + <newCpu>0</newCpu> + <uProt>0</uProt> + </DebugFlag> + <LintExecutable></LintExecutable> + <LintConfigFile></LintConfigFile> + <bLintAuto>0</bLintAuto> + </TargetOption> + </Target> + + <Group> + <GroupName>ident</GroupName> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>1</FileNumber> + <FileType>2</FileType> + <tvExp>1</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>.\ident.a66</PathWithFileName> + <FilenameWithoutPath>ident.a66</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + +</ProjectOpt> diff --git a/firmware/ident/ident.uvproj b/firmware/ident/ident.uvproj new file mode 100755 index 0000000..a54ef24 --- /dev/null +++ b/firmware/ident/ident.uvproj @@ -0,0 +1,314 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd"> + + <SchemaVersion>1.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Targets> + <Target> + <TargetName>Target 1</TargetName> + <ToolsetNumber>0x2</ToolsetNumber> + <ToolsetName>166/167</ToolsetName> + <TargetOption> + <TargetCommonOption> + <Device>ST10F269</Device> + <Vendor>STMicroelectronics</Vendor> + <Cpu>IRAM (0xF600 - 0xFDFF) XRAM (0xC000-0xDFFF) XRAM2(0xE000-0xE7FF) IROM(0-0x3FFFF) ICAN(0xE800-0xEFFF) CLOCK(40000000) MOD167</Cpu> + <FlashUtilSpec></FlashUtilSpec> + <StartupFile>"LIB\START167.A66" ("C16x/ST10 Startup Code")</StartupFile> + <FlashDriverDll></FlashDriverDll> + <DeviceId>3236</DeviceId> + <RegisterFile>REGST10F269.H</RegisterFile> + <MemoryEnv></MemoryEnv> + <Cmp></Cmp> + <Asm></Asm> + <Linker></Linker> + <OHString></OHString> + <InfinionOptionDll></InfinionOptionDll> + <SLE66CMisc></SLE66CMisc> + <SLE66AMisc></SLE66AMisc> + <SLE66LinkerMisc></SLE66LinkerMisc> + <SFDFile></SFDFile> + <bCustSvd>0</bCustSvd> + <UseEnv>0</UseEnv> + <BinPath></BinPath> + <IncludePath></IncludePath> + <LibPath></LibPath> + <RegisterFilePath></RegisterFilePath> + <DBRegisterFilePath></DBRegisterFilePath> + <TargetStatus> + <Error>0</Error> + <ExitCodeStop>0</ExitCodeStop> + <ButtonStop>0</ButtonStop> + <NotGenerated>0</NotGenerated> + <InvalidFlash>1</InvalidFlash> + </TargetStatus> + <OutputDirectory>.\Objects\</OutputDirectory> + <OutputName>ident</OutputName> + <CreateExecutable>1</CreateExecutable> + <CreateLib>0</CreateLib> + <CreateHexFile>1</CreateHexFile> + <DebugInformation>1</DebugInformation> + <BrowseInformation>1</BrowseInformation> + <ListingPath>.\Listings\</ListingPath> + <HexFormatSelection>1</HexFormatSelection> + <Merge32K>0</Merge32K> + <CreateBatchFile>0</CreateBatchFile> + <BeforeCompile> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopU1X>0</nStopU1X> + <nStopU2X>0</nStopU2X> + </BeforeCompile> + <BeforeMake> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopB1X>0</nStopB1X> + <nStopB2X>0</nStopB2X> + </BeforeMake> + <AfterMake> + <RunUserProg1>1</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name>Z:\mnt\shared-ntfs\bin\win\hex2bin.exe Z:\mnt\shared-ntfs\sw\firmware\ident\Objects\ident.H86</UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopA1X>2</nStopA1X> + <nStopA2X>0</nStopA2X> + </AfterMake> + <SelectedForBatchBuild>0</SelectedForBatchBuild> + <SVCSIdString></SVCSIdString> + </TargetCommonOption> + <CommonProperty> + <UseCPPCompiler>0</UseCPPCompiler> + <RVCTCodeConst>0</RVCTCodeConst> + <RVCTZI>0</RVCTZI> + <RVCTOtherData>0</RVCTOtherData> + <ModuleSelection>0</ModuleSelection> + <IncludeInBuild>1</IncludeInBuild> + <AlwaysBuild>0</AlwaysBuild> + <GenerateAssemblyFile>0</GenerateAssemblyFile> + <AssembleAssemblyFile>0</AssembleAssemblyFile> + <PublicsOnly>0</PublicsOnly> + <StopOnExitCode>3</StopOnExitCode> + <CustomArgument></CustomArgument> + <IncludeLibraryModules></IncludeLibraryModules> + <ComprImg>1</ComprImg> + </CommonProperty> + <DllOption> + <SimDllName>S166.DLL</SimDllName> + <SimDllArguments>-cEXTMAC</SimDllArguments> + <SimDlgDll>D167.DLL</SimDlgDll> + <SimDlgDllArguments>-p269</SimDlgDllArguments> + <TargetDllName>S166.DLL</TargetDllName> + <TargetDllArguments>-cEXTMAC</TargetDllArguments> + <TargetDlgDll>T167.DLL</TargetDlgDll> + <TargetDlgDllArguments>-p269</TargetDlgDllArguments> + </DllOption> + <DebugOption> + <OPTHX> + <HexSelection>1</HexSelection> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + <Oh166RecLen>16</Oh166RecLen> + </OPTHX> + <Simulator> + <UseSimulator>1</UseSimulator> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>1</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>1</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <LimitSpeedToRealTime>0</LimitSpeedToRealTime> + <RestoreSysVw>1</RestoreSysVw> + </Simulator> + <Target> + <UseTarget>0</UseTarget> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>0</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>0</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <RestoreTracepoints>1</RestoreTracepoints> + <RestoreSysVw>1</RestoreSysVw> + </Target> + <RunDebugAfterBuild>0</RunDebugAfterBuild> + <TargetSelection>-1</TargetSelection> + <SimDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + </SimDlls> + <TargetDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + <Driver></Driver> + </TargetDlls> + </DebugOption> + <Utilities> + <Flash1> + <UseTargetDll>0</UseTargetDll> + <UseExternalTool>0</UseExternalTool> + <RunIndependent>0</RunIndependent> + <UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging> + <Capability>0</Capability> + <DriverSelection>-1</DriverSelection> + </Flash1> + <bUseTDR>0</bUseTDR> + <Flash2></Flash2> + <Flash3></Flash3> + <Flash4></Flash4> + <pFcarmOut></pFcarmOut> + <pFcarmGrp></pFcarmGrp> + <pFcArmRoot></pFcArmRoot> + <FcArmLst>0</FcArmLst> + </Utilities> + <Target166> + <Target166Misc> + <MemoryModel>1</MemoryModel> + <RTOS>0</RTOS> + <NearData>6</NearData> + <iData>65535</iData> + <sData>65535</sData> + <bData>65535</bData> + <Mod167>1</Mod167> + <ModV2>0</ModV2> + <UseOnChipRom>1</UseOnChipRom> + <UseOnChipXramCan>1</UseOnChipXramCan> + <UseOnChipXram2>1</UseOnChipXram2> + <NearRamMemory>0</NearRamMemory> + <NearRomMemory>0</NearRomMemory> + <UseIrom2>0</UseIrom2> + <UseIrom3>0</UseIrom3> + <UseXram3>0</UseXram3> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + </OnChipMemories> + </Target166Misc> + <C166> + <Optimize>6</Optimize> + <SpeedSize>1</SpeedSize> + <RegisterColoring>0</RegisterColoring> + <UseStaticMemory>0</UseStaticMemory> + <WarningLevel>2</WarningLevel> + <AliasChecking>1</AliasChecking> + <VariablesInOrder>0</VariablesInOrder> + <CharAsUnsignedChar>0</CharAsUnsignedChar> + <NoDppSave>1</NoDppSave> + <Float64>0</Float64> + <SaveTempVar>0</SaveTempVar> + <ReorderInstruction>0</ReorderInstruction> + <VariousControls> + <MiscControls>MOD167</MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </C166> + <Ec166> + <WarningLevel>2</WarningLevel> + <UnsignedChar>0</UnsignedChar> + <VariousControls> + <MiscControls></MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </Ec166> + <A166> + <UseMPL>1</UseMPL> + <CaseSensitiveSymbols>0</CaseSensitiveSymbols> + <VariousControls> + <MiscControls>MOD167</MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath>..\..\firmware\include</IncludePath> + </VariousControls> + </A166> + <L166> + <UseLinkFile>0</UseLinkFile> + <LinkerCmdFile></LinkerCmdFile> + <LinkOnly>0</LinkOnly> + <UseTargetSet>1</UseTargetSet> + <DppUsage>0</DppUsage> + <nDataSelection>2</nDataSelection> + <nConstSelection>1</nConstSelection> + <NearDataString></NearDataString> + <NearConstString></NearConstString> + <iStartStopString></iStartStopString> + <InterruptVectorAddress></InterruptVectorAddress> + <WarningLevel>2</WarningLevel> + <DisableWarningNumbers></DisableWarningNumbers> + <Assign></Assign> + <Registerbank></Registerbank> + <Reserve></Reserve> + <MiscControls></MiscControls> + <UserClasses></UserClasses> + <UserSection></UserSection> + </L166> + </Target166> + </TargetOption> + <Groups> + <Group> + <GroupName>ident</GroupName> + <Files> + <File> + <FileName>ident.a66</FileName> + <FileType>2</FileType> + <FilePath>.\ident.a66</FilePath> + </File> + </Files> + </Group> + </Groups> + </Target> + </Targets> + +</Project> diff --git a/firmware/include/COMMON.INC b/firmware/include/COMMON.INC new file mode 100755 index 0000000..fbad655 --- /dev/null +++ b/firmware/include/COMMON.INC @@ -0,0 +1,30 @@ +IDMANUF DEFR 0F07Eh
+IDCHIP DEFR 0F07Ch
+XPERCON EQU 0F024h
+
+FW2BASE EQU 0E000h ; 0F600h 0E000h
+FW2END EQU 0E7FFh ; 0F9FFh 0E7FFh
+FW2DATA EQU (FW2END + 1 - 42)
+
+FW1BASE EQU 0FA40h
+
+STACK_TOP EQU 0FC00h
+STACK_BOTTOM EQU (STACK_TOP - 256d) ; 256 bytes
+
+REGBANK0 EQU STACK_TOP
+REGBANK1 EQU (REGBANK0 + 32d)
+
+CMD_PING EQU 00h
+CMD_ERASE_BLOCKS EQU 01h
+CMD_READ EQU 02h
+CMD_WRITE EQU 03h
+CMD_IDENTIFY EQU 04h
+CMD_ERASE_CHIP EQU 05h
+
+SHELL_ACK EQU 0ABh
+
+RET_SERIAL_OVERRUN EQU 20h
+RET_BAD_ECHO EQU 21h
+RET_ERASE_ERROR EQU 30h
+RET_WRITE_ERROR EQU 31h
+
diff --git a/firmware/include/SHELL.INC b/firmware/include/SHELL.INC new file mode 100755 index 0000000..f951a7f --- /dev/null +++ b/firmware/include/SHELL.INC @@ -0,0 +1,51 @@ +CMDLOOP:
+ ; Receive command safely, EXCEPT zero word
+ CALL REC_BYTE
+ CMP R14,#0
+ JMPR CC_NE,CMDLOOP_ERROR
+ CMP R15,#CMD_PING
+ JMPR CC_NE,CMDLOOP_NO_PING
+ ; Respond to ping
+ MOV R15,#SHELL_ACK
+ CALL SEND_BYTE
+ JMP CMDLOOP
+CMDLOOP_NO_PING:
+ MOV R13,#SEND_BYTE
+ MOV R12,#REC_BYTE
+ CALL ACK_DATA
+ CMP R14,#0
+ JMPR CC_EQ,CMDLOOP_OK
+CMDLOOP_ERROR:
+ MOV R15,R14
+ CALL SEND_BYTE
+ JMP CMDLOOP
+CMDLOOP_OK:
+ PUSH R15
+ MOV R15,#0
+ CALL SEND_BYTE ; Send zero byte
+ POP R15 ; Restore command number
+
+ CMP R15,#CMD_ERASE_BLOCKS
+ JMPR CC_NE,CMDLOOP_1
+ CALL ERASE_BLOCKS
+ JMP CMDLOOP
+CMDLOOP_1:
+ CMP R15,#CMD_READ
+ JMPR CC_NE,CMDLOOP_2
+ CALL READ
+ JMP CMDLOOP
+CMDLOOP_2:
+ CMP R15,#CMD_WRITE
+ JMPR CC_NE,CMDLOOP_3
+ CALL WRITE
+ JMP CMDLOOP
+CMDLOOP_3:
+ CMP R15,#CMD_IDENTIFY
+ JMPR CC_NE,CMDLOOP_4
+ CALL IDENTIFY
+ JMP CMDLOOP
+CMDLOOP_4:
+ CMP R15,#CMD_ERASE_CHIP
+ JMPR CC_NE,CMDLOOP
+ CALL ERASE_CHIP
+ JMP CMDLOOP
diff --git a/firmware/include/SUBROUTINES.INC b/firmware/include/SUBROUTINES.INC new file mode 100755 index 0000000..65d5f55 --- /dev/null +++ b/firmware/include/SUBROUTINES.INC @@ -0,0 +1,177 @@ +IDENTIFY PROC NEAR
+ MOV R15,IDMANUF
+ CALL SEND
+ MOV R15,IDCHIP
+ CALL SEND
+ RET
+IDENTIFY ENDP
+
+
+; Vstup: R8:R7 global counter, R10 block counter
+; Vystup: R14 navratovy kod (0 pokracuje sa, 1 ukoncit spracovanie)
+CHECK_COUNT PROC NEAR
+ ; Defaultny navratovy kod je "pokracovat"
+ MOV R14,#0
+ ; Dekrementujeme globalny citac
+ SUB R7,#2
+ SUBC R8,#0
+ CMP R8,#0
+ JMPR CC_NE,CHECK_COUNT_BLOCK
+ CMP R7,#0
+ JMPR CC_NE,CHECK_COUNT_BLOCK
+ ; Uspesne koncime, mame precitany potrebny pocet bajtov
+ MOV R14,#1
+ JMP CHECK_RET_SEND
+CHECK_COUNT_BLOCK:
+ ; Dekrementujeme citac 1024 bajtoveho bloku
+ SUB R10,#2
+ CMP R10,#0
+ JMPR CC_NE,CHECK_RET
+CHECK_RET_SEND:
+ ; Odosleme nulu
+ MOV R15,#0
+ CALL SEND
+ ; Resetujeme citac 1024 bajtoveho bloku
+ MOV R10,#1024
+ ; Posleme hodnotu globalneho citaca
+ MOV R15,R7
+ CALL SEND
+ MOV R15,R8
+ CALL SEND
+CHECK_RET:
+ RET
+CHECK_COUNT ENDP
+
+;-------------------------------------------------------------------------------
+; Safe receive
+;-------------------------------------------------------------------------------
+; !! Posiela do PC kod chyby
+REC_SAFE PROC NEAR
+ ; Vystup: R14 navratovy kod, R15 data (slovo)
+ CALL REC
+ CMP R14,#0
+ JMPR CC_NE,REC_SAFE_RETURN_NO_SEND
+ CALL ACK_WORD
+ ; Send result of safe receiving
+REC_SAFE_RETURN:
+ PUSH R15
+ MOV R15,R14
+ CALL SEND
+ POP R15
+REC_SAFE_RETURN_NO_SEND:
+ RET
+REC_SAFE ENDP
+
+
+REC_DWORD_SAFE PROC NEAR
+ ; Vystup: R14 navratovy kod, R8:R7 data (dvojslovo)
+ PUSH R15
+ CALL REC_SAFE
+ CMP R14,#0
+ JMPR CC_NE,REC_DWORD_ERROR
+ MOV R7,R15
+ CALL REC_SAFE
+ CMP R14,#0
+ JMPR CC_NE,REC_DWORD_ERROR
+ MOV R8,R15
+REC_DWORD_ERROR:
+ POP R15
+ RET
+REC_DWORD_SAFE ENDP
+
+
+ACK_WORD PROC NEAR
+ PUSH R12
+ PUSH R13
+ MOV R13,#SEND
+ MOV R12,#REC
+ CALL ACK_DATA
+ POP R13
+ POP R12
+ RET
+ACK_WORD ENDP
+
+
+ACK_DATA PROC NEAR
+ ; Vstup: R15 data (slovo), R13 (pointer na SEND), R12 (pointer na REC)
+ ; Vystup: R14 navratovy kod, R15 data (slovo)
+ PUSH R0
+ PUSH R15
+ MOV R14,#RET_BAD_ECHO
+ MOV R0,R15
+ CALL [R13] ; SEND
+ CALL [R12] ; RECEIVE
+ ; Serial buffer overrun?
+ CMP R14,#0
+ JMPR CC_NE,ACK_DATA_RETURN ; Return code is already in R14
+ ; Good echo from PC?
+ CMP R15,R0
+ JMPR CC_NE,ACK_DATA_RETURN ; Return code is already in R14
+ ; Everything is OK
+ MOV R14,#0
+ACK_DATA_RETURN:
+ POP R15
+ POP R0
+ RET
+ACK_DATA ENDP
+
+;-------------------------------------------------------------------------------
+; Send and receive
+;-------------------------------------------------------------------------------
+SEND PROC NEAR
+ ; Posle slovo.
+ ; Vstup: R15
+ ; Zachovava: R15
+ PUSH R15
+ CALL SEND_BYTE
+ SHR R15,#8
+ CALL SEND_BYTE
+ POP R15
+ RET
+SEND ENDP
+
+
+SEND_BYTE PROC NEAR
+ ; Posle nizsi bajt zo slova.
+ ; Vstup: R15
+ ; Zachovava: R15
+SEND_BYTE_1:
+ JNB S0TIC.7,SEND_BYTE_1
+ BCLR S0TIC.7
+ MOV S0TBUF,R15 ; bity 9 az 15 su nevyznamne
+ RET
+SEND_BYTE ENDP
+
+
+REC PROC NEAR
+ ; Vystup: R15 data, R14 navratovy kod
+ PUSH R0
+ CALL REC_BYTE ; Receive low byte
+ CMP R14,#0
+ JMPR CC_NE,REC_OK
+ MOV R0,R15 ; high byte bude vzdy 0
+ CALL REC_BYTE
+ SHL R15,#8
+ OR R15,R0
+REC_OK:
+ POP R0
+ RET
+REC ENDP
+
+
+REC_BYTE PROC NEAR
+ ; Vystup: R15 data (low byte), R14 navratovy kod
+REC_BYTE_1:
+ JNB S0RIC.7,REC_BYTE_1
+ JB S0CON.10,REC_BYTE_ERR
+ MOV R15,S0RBUF ; nevyznamne bity pre dany operacny rezim serioveho rozhrania budu precitane ako 0
+ BCLR S0RIC.7
+ ; Successfully received word
+ MOV R14,#0
+ JMP REC_BYTE_OK
+REC_BYTE_ERR:
+ BCLR S0CON.10
+ MOV R14,#RET_SERIAL_OVERRUN
+REC_BYTE_OK:
+ RET
+REC_BYTE ENDP
diff --git a/firmware/main.uvmpw b/firmware/main.uvmpw new file mode 100755 index 0000000..62fb37e --- /dev/null +++ b/firmware/main.uvmpw @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectWorkspace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_mpw.xsd"> + + <SchemaVersion>1.0</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <WorkspaceName>WorkSpace</WorkspaceName> + + <project> + <PathAndName>.\ident\ident.uvproj</PathAndName> + <NodeIsExpanded>1</NodeIsExpanded> + </project> + + <project> + <PathAndName>.\stage_1\stage_1.uvproj</PathAndName> + <NodeIsExpanded>1</NodeIsExpanded> + </project> + + <project> + <PathAndName>.\st10f168\st10f168.uvproj</PathAndName> + <NodeIsExpanded>1</NodeIsExpanded> + </project> + + <project> + <PathAndName>.\st10f269\st10f269.uvproj</PathAndName> + <NodeIsActive>1</NodeIsActive> + <NodeIsExpanded>1</NodeIsExpanded> + </project> + +</ProjectWorkspace> diff --git a/firmware/main.uvmpw.uvgui.jan b/firmware/main.uvmpw.uvgui.jan new file mode 100755 index 0000000..c3f94d7 --- /dev/null +++ b/firmware/main.uvmpw.uvgui.jan @@ -0,0 +1,1306 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_gui.xsd"> + + <SchemaVersion>-5.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <WinLayoutEx> + <sActiveDebugView></sActiveDebugView> + <WindowPosition> + <length>44</length> + <flags>0</flags> + <showCmd>3</showCmd> + <MinPosition> + <xPos>-1</xPos> + <yPos>-1</yPos> + </MinPosition> + <MaxPosition> + <xPos>-1684</xPos> + <yPos>-4</yPos> + </MaxPosition> + <NormalPosition> + <Top>89</Top> + <Left>-1243</Left> + <Right>-322</Right> + <Bottom>869</Bottom> + </NormalPosition> + </WindowPosition> + <MDIClientArea> + <RegID>0</RegID> + <MDITabState> + <Len>381</Len> + <Data>010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000001000000020000000000000001000000495A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C6964656E745C6964656E742E61363600000000096964656E742E61363600000000BECEA100FFFFFFFF4F5A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C73743130663236395C73743130663236392E613636000000000C73743130663236392E61363600000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000A9FAFFFF5E00000000000000E8030000</Data> + </MDITabState> + </MDIClientArea> + <ViewEx> + <ViewType>0</ViewType> + <ViewName>Build</ViewName> + <Window> + <RegID>-1</RegID> + <PaneID>-1</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>940100004B000000F8030000B4000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04FBFFFF5E00000068FDFFFFC7000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1005</RegID> + <PaneID>1005</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000320100007E020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>109</RegID> + <PaneID>109</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000320100007E020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1465</RegID> + <PaneID>1465</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1466</RegID> + <PaneID>1466</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1467</RegID> + <PaneID>1467</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1468</RegID> + <PaneID>1468</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1506</RegID> + <PaneID>1506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1913</RegID> + <PaneID>1913</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1935</RegID> + <PaneID>1935</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1936</RegID> + <PaneID>1936</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1937</RegID> + <PaneID>1937</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1939</RegID> + <PaneID>1939</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1940</RegID> + <PaneID>1940</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1941</RegID> + <PaneID>1941</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1942</RegID> + <PaneID>1942</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>195</RegID> + <PaneID>195</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000320100007E020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>196</RegID> + <PaneID>196</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000320100007E020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>197</RegID> + <PaneID>197</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000B202000035010000D5030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>198</RegID> + <PaneID>198</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000007A010000F8030000FA010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>199</RegID> + <PaneID>199</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000B50200003201000044040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>203</RegID> + <PaneID>203</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>204</RegID> + <PaneID>204</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>221</RegID> + <PaneID>221</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000000000000000000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2506</RegID> + <PaneID>2506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2507</RegID> + <PaneID>2507</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>343</RegID> + <PaneID>343</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>346</RegID> + <PaneID>346</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35824</RegID> + <PaneID>35824</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35885</RegID> + <PaneID>35885</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35886</RegID> + <PaneID>35886</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35887</RegID> + <PaneID>35887</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35888</RegID> + <PaneID>35888</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35889</RegID> + <PaneID>35889</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35890</RegID> + <PaneID>35890</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35891</RegID> + <PaneID>35891</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35892</RegID> + <PaneID>35892</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35893</RegID> + <PaneID>35893</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35894</RegID> + <PaneID>35894</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35895</RegID> + <PaneID>35895</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35896</RegID> + <PaneID>35896</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35897</RegID> + <PaneID>35897</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35898</RegID> + <PaneID>35898</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35899</RegID> + <PaneID>35899</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35900</RegID> + <PaneID>35900</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35901</RegID> + <PaneID>35901</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35902</RegID> + <PaneID>35902</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35903</RegID> + <PaneID>35903</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35904</RegID> + <PaneID>35904</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35905</RegID> + <PaneID>35905</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38003</RegID> + <PaneID>38003</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000006500000032010000F6010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38007</RegID> + <PaneID>38007</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000B50200003201000044040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>436</RegID> + <PaneID>436</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000B50200003201000044040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>437</RegID> + <PaneID>437</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>440</RegID> + <PaneID>440</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59392</RegID> + <PaneID>59392</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>882</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000007D0300001A000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59393</RegID> + <PaneID>0</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000D503000090060000E8030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59399</RegID> + <PaneID>59399</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>439</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>1</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000001A000000C201000034000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59400</RegID> + <PaneID>59400</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>572</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>2</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0000000034000000470200004E000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <DockMan> + <Len>2611</Len> + <Data>000000000A000000000000000020000000000000FFFFFFFFFFFFFFFF94010000B4000000F8030000B8000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000004FBFFFF5E00000068FDFFFFC7000000940100004B000000F8030000B40000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF640200004B000000680200008D010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000D8FBFFFF5E00000068FDFFFFA0010000680200004B000000F80300008D0100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF350100004B00000039010000D50300000100000002000010040000000100000023FFFFFFA902000000000000000000000000000001000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000070F9FFFF5E000000A5FAFFFF22020000000000004B00000035010000970200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFF04000000C5000000C7000000B4010000779400000180001000000100000070F9FFFF26020000A5FAFFFFE8030000000000009B02000035010000D50300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF000000000000000002000000000000000100000002000000FFFFFFFF0000000097020000350100009B020000010000000100001004000000000000003EFEFFFFC001000000000000000000000000000002000000FFFFFFFFED030000FFFFFFFFC500000001000000FFFFFFFFC500000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000076010000F80300007A01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB0900000180008000000000000070F9FFFF8D01000068FDFFFF0D020000000000007A010000F8030000FA01000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFFC0100007A01000000020000FA01000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000000000000000000</Data> + </DockMan> + <ToolBar> + <RegID>59392</RegID> + <Name>File</Name> + <Buttons> + <Len>2204</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000005434F4E53549600000000000000130005434F4E53540445585453085245435F534146450F5245545F57524954455F4552524F520252300A5245435F434F4E464947035231330841434B5F574F52440352313504454E445009534358542043502C52055265736574013209524541445F444F4E4503464152025235037072650630464638344802523400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data> + </Buttons> + <OriginalItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59399</RegID> + <Name>Build</Name> + <Buttons> + <Len>678</Len> + <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000</Data> + </Buttons> + <OriginalItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59400</RegID> + <Name>Debug</Name> + <Buttons> + <Len>2220</Len> + <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7201000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data> + </Buttons> + <OriginalItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ControlBarsSummary> + <Bars>0</Bars> + <ScreenCX>1366</ScreenCX> + <ScreenCY>768</ScreenCY> + </ControlBarsSummary> + </ViewEx> + </WinLayoutEx> + + <MDIGroups> + <Orientation>1</Orientation> + <ActiveMDIGroup>0</ActiveMDIGroup> + <MDIGroup> + <Size>100</Size> + <ActiveTab>0</ActiveTab> + <Doc> + <Name><1>.\ident.a66</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>1</TopLine> + <CurrentLine>1</CurrentLine> + <Folding>0</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name><4>.\st10f269.a66</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>72</TopLine> + <CurrentLine>123</CurrentLine> + <Folding>0</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + </MDIGroup> + </MDIGroups> + +</ProjectGui> diff --git a/firmware/st10f168/Objects/st10f168.SBR b/firmware/st10f168/Objects/st10f168.SBR Binary files differnew file mode 100755 index 0000000..5ce35c3 --- /dev/null +++ b/firmware/st10f168/Objects/st10f168.SBR diff --git a/firmware/st10f168/Objects/st10f168.bin b/firmware/st10f168/Objects/st10f168.bin Binary files differnew file mode 100755 index 0000000..bdde05c --- /dev/null +++ b/firmware/st10f168/Objects/st10f168.bin diff --git a/firmware/st10f168/st10f168.a66 b/firmware/st10f168/st10f168.a66 new file mode 100755 index 0000000..0ae78af --- /dev/null +++ b/firmware/st10f168/st10f168.a66 @@ -0,0 +1,273 @@ +$MOD167
+$SEGMENTED
+
+$INCLUDE (REG167.INC)
+$INCLUDE (COMMON.INC)
+
+CONST_2TCL EQU (REGBANK1 + 32d) ; premenna
+
+NAME FIRMWARE_ST10F168
+ASSUME DPP3: SYSTEM
+
+FW_DATA SECTION DATA WORD AT FW2DATA
+ ; Control array of structures {segment, address, length in words} for read and write operations
+ FLASH_MAPPING:
+ DW 0,0,(32*1024)/2
+ DW 1,8000h,(32*1024)/2
+ DW 2,0000h,(64*1024)/2
+ DW 3,0000h,(32*1024)/2
+ DW 3,8000h,(32*1024)/2
+ DW 4,0000h,(64*1024)/2 ; Length is not needed
+FW_DATA ENDS
+
+FW_ST10F168 SECTION CODE AT FW2BASE
+;-------------------------------------------------------------------------------
+; Main procedure
+;
+; Caka na slovo prikazu, odosle ho naspat pre potvrdenie a to iste musi znovu
+; prijat.
+;-------------------------------------------------------------------------------
+MAIN PROC
+ ; Default register bank
+ MOV CP,#REGBANK0
+ ; Zapneme serial buffer overrun detection
+ BSET S0CON.7
+ ; Init stack, size = 128 words, 256 bytes
+ MOV R0,SYSCON
+ AND R0,#3FFFh
+ OR R0,#2000h
+ MOV SYSCON,R0
+
+ MOV STKUN, #STACK_TOP
+ MOV STKOV, #STACK_BOTTOM
+ MOV SP, #STACK_TOP
+
+ NOP
+ NOP
+
+ MOV DPP0,#0
+ MOV DPP1,#1
+ MOV DPP2,#2
+ MOV DPP3,#3
+
+ ; Signalize successful initialization
+ MOV R15,#0
+ CALL SEND
+;-----------------------------------------------------------------------
+; Command loop
+;-----------------------------------------------------------------------
+$INCLUDE (SHELL.INC)
+
+MAIN ENDP
+
+;-------------------------------------------------------------------------------
+; Receive config information (1 word)
+;-------------------------------------------------------------------------------
+REC_CONFIG PROC NEAR
+ ; Get 2TCL constant
+ CALL REC_SAFE
+ CMP R14,#0
+ JMPR CC_NE,REC_CONFIG_ERROR
+ MOV CONST_2TCL,R15
+REC_CONFIG_ERROR:
+ RET
+REC_CONFIG ENDP
+
+;-------------------------------------------------------------------------------
+; Erase chip
+;-------------------------------------------------------------------------------
+ERASE_CHIP PROC NEAR
+ SCXT CP,#REGBANK1
+ ; Receive 2TCL constant for R4 STEAK
+ CALL REC_CONFIG
+ CMP R14,#0
+ JMPR CC_NE,ERASE_CHIP_ERROR
+ MOV R13,#0Fh ; Erase all blocks
+ JMP ERASE_BLOCKS_MASK_OK
+ERASE_CHIP_ERROR:
+ POP CP
+ RET
+ERASE_CHIP ENDP
+
+;-------------------------------------------------------------------------------
+; Erase blocks
+;-------------------------------------------------------------------------------
+ERASE_BLOCKS PROC NEAR
+ SCXT CP,#REGBANK1
+ ; Receive 2TCL constant for R4 STEAK
+ CALL REC_CONFIG
+ CMP R14,#0
+ JMPR CC_NE,ERASE_BLOCKS_ERROR
+ ; Receive mask of blocks going to be erased
+ CALL REC_SAFE
+ ; Store mask
+ MOV R13,R15
+ ; Exit if there was an error
+ CMP R14,#0
+ JMPR CC_EQ,ERASE_BLOCKS_MASK_OK
+ERASE_BLOCKS_ERROR:
+ POP CP
+ RET
+
+ERASE_BLOCKS_MASK_OK:
+ ; Erase blocks command
+ MOV R0,#0EEEEh
+ MOV R1,#5555h
+ MOV R2,#0 ; Block counter
+ ; V R13 mame masku
+ERASE_BLOCKS_LOOP:
+ ROR R13,#1
+ JNB PSW.1,ERASE_BLOCKS_NEXT
+ MOV R3,R2
+ CALL UNLOCK_SEQUENCE
+ ; Check return code
+ CMP R14,#0
+ JMPR CC_NE,ERASE_BLOCKS_DONE
+ERASE_BLOCKS_NEXT:
+ CMPI1 R2,#2
+ JMPR CC_UGT,ERASE_BLOCKS_DONE
+ JMP ERASE_BLOCKS_LOOP
+ERASE_BLOCKS_DONE:
+ MOV R15,R14
+ CALL SEND
+ POP CP
+ RET
+ERASE_BLOCKS ENDP
+
+;-------------------------------------------------------------------------------
+; Read
+;-------------------------------------------------------------------------------
+READ PROC NEAR
+ SCXT CP,#REGBANK1
+ ; Receive 2TCL constant for R4 STEAK
+ CALL REC_CONFIG
+ CMP R14,#0
+ JMPR CC_NE,READ_ERROR
+ ; Prijmeme pocet bajtov pre precitanie
+ CALL REC_DWORD_SAFE
+ CMP R14,#0
+ JMPR CC_NE,READ_ERROR
+ ; Pocitadlo velkosti 1024 bajtoveho bloku
+ MOV R10,#1024
+ ; Base of the control table
+ MOV R11,#DPP3:FLASH_MAPPING
+
+READ_START:
+ MOV R0,[R11] ; Get segment, R0
+ ADD R11,#2
+ MOV R1,[R11] ; Get start address, R1
+ ADD R11,#2
+ MOV R2,[R11] ; Get data length to read, R2
+ ADD R11,#2
+READ_LOOP:
+ ; Read word
+ EXTS R0,#1
+ MOV R15,[R1]
+ CALL SEND
+ CALL CHECK_COUNT
+ CMP R14,#1
+ JMPR CC_EQ,READ_DONE
+ ADD R1,#2 ; Set address of the next word
+ SUB R2,#1 ; Decrement word counter
+ JMPR CC_NZ,READ_LOOP
+ JMP READ_START
+
+READ_ERROR:
+READ_DONE:
+ POP CP
+ RET
+READ ENDP
+
+;-------------------------------------------------------------------------------
+; Write
+;-------------------------------------------------------------------------------
+WRITE PROC NEAR
+ SCXT CP,#REGBANK1
+ ; Receive 2TCL constant for R4 STEAK
+ CALL REC_CONFIG
+ CMP R14,#0
+ JMPR CC_NE,WRITE_ERROR
+ ; Prijmeme pocet bajtov pre zapis
+ CALL REC_DWORD_SAFE
+ CMP R14,#0
+ JMPR CC_NE,WRITE_ERROR
+ ; Pocitadlo velkosti 1024 bajtoveho bloku
+ MOV R10,#1024
+ ; Base of the control table
+ MOV R11,#DPP3:FLASH_MAPPING
+WRITE_START:
+ MOV R0,[R11] ; Get segment number, R0
+ AND R0,#000Fh ; Skonstruujeme prikaz
+ OR R0,#55A0h
+ ADD R11,#2
+ MOV R1,[R11] ; Get start address, R1
+ ADD R11,#2
+ MOV R5,[R11] ; Get data length to write, R5
+ ADD R11,#2
+WRITE_LOOP:
+ CALL REC
+ CMP R14,#0
+ JMPR CC_NE,WRITE_SEND_ERROR
+ MOV R2,R15
+ ; Write word
+ CALL UNLOCK_SEQUENCE
+ CMP R14,#0
+ JMPR CC_NE,WRITE_SEND_ERROR
+ CALL CHECK_COUNT
+ CMP R14,#1
+ JMPR CC_EQ,WRITE_DONE
+ ADD R1,#2
+ SUB R5,#1
+ JMPR CC_NZ,WRITE_LOOP
+ JMP WRITE_START
+
+WRITE_SEND_ERROR:
+ MOV R15,R14
+ CALL SEND
+WRITE_ERROR:
+WRITE_DONE:
+ POP CP
+ RET
+WRITE ENDP
+
+;-------------------------------------------------------------------------------
+; Helper subroutines
+;-------------------------------------------------------------------------------
+$INCLUDE (SUBROUTINES.INC)
+
+; Vstup: R0, R1, R2, R3, R4
+; Vystup: R14 navratovy kod
+; Zachovava: R0, R1, R2, R3, R4
+UNLOCK_SEQUENCE PROC NEAR
+ PUSH R0
+ PUSH R1
+ PUSH R2
+ PUSH R3
+ PUSH R6
+
+ MOV R4,CONST_2TCL ; Perioda hodinoveho signalu v ns
+ ; Unlock sequence
+ MOV R6,#8000h
+
+ EXTS #1,#2
+ MOV 8000h,R6
+ MOV [R6],R6
+ NOP
+ NOP
+ MOV R14,R0
+
+ POP R6
+ POP R3
+ POP R2
+ POP R1
+ POP R0
+ RET
+UNLOCK_SEQUENCE ENDP
+;-------------------------------------------------------------------------------
+; End of helper subroutines
+;-------------------------------------------------------------------------------
+
+FW_ST10F168 ENDS
+
+
+END
\ No newline at end of file diff --git a/firmware/st10f168/st10f168.uvgui.jan b/firmware/st10f168/st10f168.uvgui.jan new file mode 100755 index 0000000..e4d3aee --- /dev/null +++ b/firmware/st10f168/st10f168.uvgui.jan @@ -0,0 +1,1360 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_gui.xsd"> + + <SchemaVersion>-5.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <ViewPool/> + + <SECTreeCtrl> + <View> + <WinId>38003</WinId> + <ViewName>Registers</ViewName> + <TableColWidths>115 184</TableColWidths> + </View> + <View> + <WinId>346</WinId> + <ViewName>Code Coverage</ViewName> + <TableColWidths>442 160</TableColWidths> + </View> + <View> + <WinId>204</WinId> + <ViewName>Performance Analyzer</ViewName> + <TableColWidths>602</TableColWidths> + </View> + </SECTreeCtrl> + + <TreeListPane> + <View> + <WinId>1506</WinId> + <ViewName>Symbols</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1936</WinId> + <ViewName>Watch 1</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1937</WinId> + <ViewName>Watch 2</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1935</WinId> + <ViewName>Call Stack + Locals</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>2506</WinId> + <ViewName>Trace Data</ViewName> + <UserString></UserString> + <TableColWidths>75 135 130 95 70 230 200 150</TableColWidths> + </View> + </TreeListPane> + + <WindowSettings> + <LogicAnalizer> + <ShowLACursor>1</ShowLACursor> + <ShowSignalInfo>1</ShowSignalInfo> + <ShowCycles>0</ShowCycles> + <LeftSideBarSize>0</LeftSideBarSize> + <TimeBaseIndex>-1</TimeBaseIndex> + </LogicAnalizer> + </WindowSettings> + + <WinLayoutEx> + <sActiveDebugView></sActiveDebugView> + <WindowPosition> + <length>44</length> + <flags>0</flags> + <showCmd>3</showCmd> + <MinPosition> + <xPos>-1</xPos> + <yPos>-1</yPos> + </MinPosition> + <MaxPosition> + <xPos>-1684</xPos> + <yPos>-4</yPos> + </MaxPosition> + <NormalPosition> + <Top>89</Top> + <Left>-1243</Left> + <Right>-322</Right> + <Bottom>869</Bottom> + </NormalPosition> + </WindowPosition> + <MDIClientArea> + <RegID>0</RegID> + <MDITabState> + <Len>381</Len> + <Data>010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000001000000020000000000000001000000495A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C6964656E745C6964656E742E61363600000000096964656E742E61363600000000BECEA100FFFFFFFF4F5A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C73743130663236395C73743130663236392E613636000000000C73743130663236392E61363600000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000A9FAFFFF5E00000000000000E8030000</Data> + </MDITabState> + </MDIClientArea> + <ViewEx> + <ViewType>0</ViewType> + <ViewName>Build</ViewName> + <Window> + <RegID>-1</RegID> + <PaneID>-1</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>940100004B000000F8030000B4000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>56FDFFFF50010000BAFFFFFFB9010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1005</RegID> + <PaneID>1005</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100007B010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>109</RegID> + <PaneID>109</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100007B010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1465</RegID> + <PaneID>1465</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1466</RegID> + <PaneID>1466</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1467</RegID> + <PaneID>1467</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1468</RegID> + <PaneID>1468</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1506</RegID> + <PaneID>1506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1913</RegID> + <PaneID>1913</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1935</RegID> + <PaneID>1935</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1936</RegID> + <PaneID>1936</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1937</RegID> + <PaneID>1937</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1939</RegID> + <PaneID>1939</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1940</RegID> + <PaneID>1940</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1941</RegID> + <PaneID>1941</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1942</RegID> + <PaneID>1942</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>195</RegID> + <PaneID>195</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100007B010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>196</RegID> + <PaneID>196</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100007B010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>197</RegID> + <PaneID>197</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000AF01000090010000DE020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>198</RegID> + <PaneID>198</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000007A010000F8030000FA010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>199</RegID> + <PaneID>199</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000B20100008D010000C5020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>203</RegID> + <PaneID>203</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>204</RegID> + <PaneID>204</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>221</RegID> + <PaneID>221</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000000000000000000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2506</RegID> + <PaneID>2506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2507</RegID> + <PaneID>2507</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>343</RegID> + <PaneID>343</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>346</RegID> + <PaneID>346</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35824</RegID> + <PaneID>35824</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35885</RegID> + <PaneID>35885</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35886</RegID> + <PaneID>35886</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35887</RegID> + <PaneID>35887</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35888</RegID> + <PaneID>35888</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35889</RegID> + <PaneID>35889</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35890</RegID> + <PaneID>35890</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35891</RegID> + <PaneID>35891</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35892</RegID> + <PaneID>35892</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35893</RegID> + <PaneID>35893</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35894</RegID> + <PaneID>35894</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35895</RegID> + <PaneID>35895</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35896</RegID> + <PaneID>35896</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35897</RegID> + <PaneID>35897</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35898</RegID> + <PaneID>35898</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35899</RegID> + <PaneID>35899</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35900</RegID> + <PaneID>35900</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35901</RegID> + <PaneID>35901</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35902</RegID> + <PaneID>35902</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35903</RegID> + <PaneID>35903</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35904</RegID> + <PaneID>35904</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35905</RegID> + <PaneID>35905</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38003</RegID> + <PaneID>38003</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000650000008D0100007B010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38007</RegID> + <PaneID>38007</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000B20100008D010000C5020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>436</RegID> + <PaneID>436</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000B20100008D010000C5020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>437</RegID> + <PaneID>437</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>440</RegID> + <PaneID>440</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59392</RegID> + <PaneID>59392</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>882</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000007D0300001A000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59393</RegID> + <PaneID>0</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000DE02000016040000F1020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59399</RegID> + <PaneID>59399</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>439</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>1</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000001A000000C201000034000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59400</RegID> + <PaneID>59400</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>572</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>2</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0000000034000000470200004E000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <DockMan> + <Len>2611</Len> + <Data>000000000A000000000000000020000000000000FFFFFFFFFFFFFFFF94010000B4000000F8030000B8000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000056FDFFFF50010000BAFFFFFFB9010000940100004B000000F8030000B40000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF640200004B000000680200008D010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C0000018000400000000000002AFEFFFF50010000BAFFFFFF92020000680200004B000000F80300008D0100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF900100004B00000094010000DE02000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000C2FBFFFF5001000052FDFFFF99020000000000004B00000090010000940100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFF04000000C5000000C7000000B40100007794000001800010000001000000C2FBFFFF9D02000052FDFFFFE3030000000000009801000090010000DE0200000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF000000000000000002000000000000000100000002000000FFFFFFFF0000000094010000900100009801000001000000010000100400000000000000CCFDFFFF4E01000000000000000000000000000002000000FFFFFFFFED030000FFFFFFFFC500000001000000FFFFFFFFC500000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000076010000F80300007A01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000C2FBFFFF7F020000BAFFFFFFFF020000000000007A010000F8030000FA01000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFFC0100007A01000000020000FA01000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000000000000000000</Data> + </DockMan> + <ToolBar> + <RegID>59392</RegID> + <Name>File</Name> + <Buttons> + <Len>2030</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000025235960000000000000003000252350370726506304646383448000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data> + </Buttons> + <OriginalItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59399</RegID> + <Name>Build</Name> + <Buttons> + <Len>678</Len> + <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000</Data> + </Buttons> + <OriginalItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59400</RegID> + <Name>Debug</Name> + <Buttons> + <Len>2220</Len> + <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7201000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data> + </Buttons> + <OriginalItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ControlBarsSummary> + <Bars>0</Bars> + <ScreenCX>1366</ScreenCX> + <ScreenCY>768</ScreenCY> + </ControlBarsSummary> + </ViewEx> + </WinLayoutEx> + + <MDIGroups> + <Orientation>1</Orientation> + <ActiveMDIGroup>0</ActiveMDIGroup> + <MDIGroup> + <Size>100</Size> + <ActiveTab>0</ActiveTab> + <Doc> + <Name>Z:\home\jan\tmp\skola\BP\firmware\ident\st10f168.a66</Name> + <ColumnNumber>16</ColumnNumber> + <TopLine>2</TopLine> + <CurrentLine>5</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + </MDIGroup> + </MDIGroups> + +</ProjectGui> diff --git a/firmware/st10f168/st10f168.uvopt b/firmware/st10f168/st10f168.uvopt new file mode 100755 index 0000000..4b708ed --- /dev/null +++ b/firmware/st10f168/st10f168.uvopt @@ -0,0 +1,262 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd"> + + <SchemaVersion>1.0</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Extensions> + <cExt>*.c</cExt> + <aExt>*.s*; *.src; *.a*</aExt> + <oExt>*.obj</oExt> + <lExt>*.lib</lExt> + <tExt>*.txt; *.h; *.inc</tExt> + <pExt>*.plm</pExt> + <CppX>*.cpp</CppX> + <nMigrate>0</nMigrate> + </Extensions> + + <DaveTm> + <dwLowDateTime>0</dwLowDateTime> + <dwHighDateTime>0</dwHighDateTime> + </DaveTm> + + <Target> + <TargetName>Target 1</TargetName> + <ToolsetNumber>0x2</ToolsetNumber> + <ToolsetName>166/167</ToolsetName> + <TargetOption> + <MCS166> + <Clock>25000000</Clock> + <uocRom>1</uocRom> + <uocXCAN>1</uocXCAN> + <hadROM>1</hadROM> + <hadXRAM>1</hadXRAM> + <hadICAN>1</hadICAN> + <uocIROM2>0</uocIROM2> + <uocIROM3>0</uocIROM3> + <uocXRAM3>0</uocXRAM3> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + <ICAN> + <Type>0</Type> + <StartAddress>0xe800</StartAddress> + <Size>0x800</Size> + </ICAN> + <IROM> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x40000</Size> + </IROM> + <XRAM> + <Type>0</Type> + <StartAddress>0xd000</StartAddress> + <Size>0x1800</Size> + </XRAM> + <IRAM> + <Type>0</Type> + <StartAddress>0xf600</StartAddress> + <Size>0x800</Size> + </IRAM> + <IROM2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </IROM2> + <IROM3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </IROM3> + <XRAM3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </XRAM3> + </OnChipMemories> + </MCS166> + <OPTTT> + <gFlags>1</gFlags> + <BeepAtEnd>1</BeepAtEnd> + <RunSim>1</RunSim> + <RunTarget>0</RunTarget> + <RunAbUc>0</RunAbUc> + </OPTTT> + <OPTHX> + <HexSelection>1</HexSelection> + <FlashByte>65535</FlashByte> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + </OPTHX> + <OPTLEX> + <PageWidth>120</PageWidth> + <PageLength>65</PageLength> + <TabStop>8</TabStop> + <ListingPath>.\Listings\</ListingPath> + </OPTLEX> + <ListingPage> + <CreateCListing>1</CreateCListing> + <CreateAListing>1</CreateAListing> + <CreateLListing>1</CreateLListing> + <CreateIListing>0</CreateIListing> + <AsmCond>1</AsmCond> + <AsmSymb>1</AsmSymb> + <AsmXref>0</AsmXref> + <CCond>1</CCond> + <CCode>0</CCode> + <CListInc>0</CListInc> + <CSymb>0</CSymb> + <LinkerCodeListing>0</LinkerCodeListing> + </ListingPage> + <OPTXL> + <LMap>1</LMap> + <LComments>1</LComments> + <LGenerateSymbols>1</LGenerateSymbols> + <LLibSym>1</LLibSym> + <LLines>1</LLines> + <LLocSym>1</LLocSym> + <LPubSym>1</LPubSym> + <LXref>0</LXref> + <LExpSel>0</LExpSel> + </OPTXL> + <OPTFL> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <IsCurrentTarget>1</IsCurrentTarget> + </OPTFL> + <CpuCode>255</CpuCode> + <Books> + <Book> + <Number>0</Number> + <Title>Data Sheet</Title> + <Path>DATASHTS\ST\ST10F168_DS.PDF</Path> + </Book> + <Book> + <Number>1</Number> + <Title>Programming Manual</Title> + <Path>DATASHTS\ST\ST10_PM.PDF</Path> + </Book> + </Books> + <DebugOpt> + <uSim>1</uSim> + <uTrg>0</uTrg> + <sLdApp>1</sLdApp> + <sGomain>1</sGomain> + <sRbreak>1</sRbreak> + <sRwatch>1</sRwatch> + <sRmem>1</sRmem> + <sRfunc>1</sRfunc> + <sRbox>1</sRbox> + <tLdApp>1</tLdApp> + <tGomain>0</tGomain> + <tRbreak>1</tRbreak> + <tRwatch>1</tRwatch> + <tRmem>1</tRmem> + <tRfunc>0</tRfunc> + <tRbox>1</tRbox> + <tRtrace>1</tRtrace> + <sRSysVw>1</sRSysVw> + <tRSysVw>1</tRSysVw> + <sRunDeb>0</sRunDeb> + <sLrtime>0</sLrtime> + <nTsel>-1</nTsel> + <sDll></sDll> + <sDllPa></sDllPa> + <sDlgDll></sDlgDll> + <sDlgPa></sDlgPa> + <sIfile></sIfile> + <tDll></tDll> + <tDllPa></tDllPa> + <tDlgDll></tDlgDll> + <tDlgPa></tDlgPa> + <tIfile></tIfile> + <pMon></pMon> + </DebugOpt> + <Breakpoint/> + <Tracepoint> + <THDelay>0</THDelay> + </Tracepoint> + <DebugFlag> + <trace>0</trace> + <periodic>1</periodic> + <aLwin>0</aLwin> + <aCover>0</aCover> + <aSer1>0</aSer1> + <aSer2>0</aSer2> + <aPa>0</aPa> + <viewmode>0</viewmode> + <vrSel>0</vrSel> + <aSym>0</aSym> + <aTbox>0</aTbox> + <AscS1>0</AscS1> + <AscS2>0</AscS2> + <AscS3>0</AscS3> + <aSer3>0</aSer3> + <eProf>0</eProf> + <aLa>0</aLa> + <aPa1>0</aPa1> + <AscS4>0</AscS4> + <aSer4>0</aSer4> + <StkLoc>0</StkLoc> + <TrcWin>0</TrcWin> + <newCpu>0</newCpu> + <uProt>0</uProt> + </DebugFlag> + <LintExecutable></LintExecutable> + <LintConfigFile></LintConfigFile> + <bLintAuto>0</bLintAuto> + </TargetOption> + </Target> + + <Group> + <GroupName>st10f168</GroupName> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>1</FileNumber> + <FileType>2</FileType> + <tvExp>1</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>.\st10f168.a66</PathWithFileName> + <FilenameWithoutPath>st10f168.a66</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + +</ProjectOpt> diff --git a/firmware/st10f168/st10f168.uvproj b/firmware/st10f168/st10f168.uvproj new file mode 100755 index 0000000..7516ae4 --- /dev/null +++ b/firmware/st10f168/st10f168.uvproj @@ -0,0 +1,314 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd"> + + <SchemaVersion>1.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Targets> + <Target> + <TargetName>Target 1</TargetName> + <ToolsetNumber>0x2</ToolsetNumber> + <ToolsetName>166/167</ToolsetName> + <TargetOption> + <TargetCommonOption> + <Device>ST10F168</Device> + <Vendor>STMicroelectronics</Vendor> + <Cpu>IRAM (0xF600 - 0xFDFF) XRAM(0xD000-0xE7FF) IROM(0-0x3FFFF) ICAN(0xE800-0xEFFF) CLOCK(25000000) MOD167</Cpu> + <FlashUtilSpec></FlashUtilSpec> + <StartupFile>"LIB\START167.A66" ("C16x/ST10 Startup Code")</StartupFile> + <FlashDriverDll></FlashDriverDll> + <DeviceId>3184</DeviceId> + <RegisterFile>REG168.H</RegisterFile> + <MemoryEnv></MemoryEnv> + <Cmp></Cmp> + <Asm></Asm> + <Linker></Linker> + <OHString></OHString> + <InfinionOptionDll></InfinionOptionDll> + <SLE66CMisc></SLE66CMisc> + <SLE66AMisc></SLE66AMisc> + <SLE66LinkerMisc></SLE66LinkerMisc> + <SFDFile></SFDFile> + <bCustSvd>0</bCustSvd> + <UseEnv>0</UseEnv> + <BinPath></BinPath> + <IncludePath></IncludePath> + <LibPath></LibPath> + <RegisterFilePath></RegisterFilePath> + <DBRegisterFilePath></DBRegisterFilePath> + <TargetStatus> + <Error>0</Error> + <ExitCodeStop>0</ExitCodeStop> + <ButtonStop>0</ButtonStop> + <NotGenerated>0</NotGenerated> + <InvalidFlash>1</InvalidFlash> + </TargetStatus> + <OutputDirectory>.\Objects\</OutputDirectory> + <OutputName>st10f168</OutputName> + <CreateExecutable>1</CreateExecutable> + <CreateLib>0</CreateLib> + <CreateHexFile>1</CreateHexFile> + <DebugInformation>1</DebugInformation> + <BrowseInformation>1</BrowseInformation> + <ListingPath>.\Listings\</ListingPath> + <HexFormatSelection>1</HexFormatSelection> + <Merge32K>0</Merge32K> + <CreateBatchFile>0</CreateBatchFile> + <BeforeCompile> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopU1X>0</nStopU1X> + <nStopU2X>0</nStopU2X> + </BeforeCompile> + <BeforeMake> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopB1X>0</nStopB1X> + <nStopB2X>0</nStopB2X> + </BeforeMake> + <AfterMake> + <RunUserProg1>1</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name>Z:\mnt\shared-ntfs\bin\win\hex2bin.exe Z:\mnt\shared-ntfs\sw\firmware\st10f168\Objects\st10f168.H86</UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopA1X>2</nStopA1X> + <nStopA2X>0</nStopA2X> + </AfterMake> + <SelectedForBatchBuild>0</SelectedForBatchBuild> + <SVCSIdString></SVCSIdString> + </TargetCommonOption> + <CommonProperty> + <UseCPPCompiler>0</UseCPPCompiler> + <RVCTCodeConst>0</RVCTCodeConst> + <RVCTZI>0</RVCTZI> + <RVCTOtherData>0</RVCTOtherData> + <ModuleSelection>0</ModuleSelection> + <IncludeInBuild>1</IncludeInBuild> + <AlwaysBuild>0</AlwaysBuild> + <GenerateAssemblyFile>0</GenerateAssemblyFile> + <AssembleAssemblyFile>0</AssembleAssemblyFile> + <PublicsOnly>0</PublicsOnly> + <StopOnExitCode>3</StopOnExitCode> + <CustomArgument></CustomArgument> + <IncludeLibraryModules></IncludeLibraryModules> + <ComprImg>1</ComprImg> + </CommonProperty> + <DllOption> + <SimDllName>S166.DLL</SimDllName> + <SimDllArguments></SimDllArguments> + <SimDlgDll>D167.DLL</SimDlgDll> + <SimDlgDllArguments>-p168</SimDlgDllArguments> + <TargetDllName>S166.DLL</TargetDllName> + <TargetDllArguments></TargetDllArguments> + <TargetDlgDll>T167.DLL</TargetDlgDll> + <TargetDlgDllArguments>-p168</TargetDlgDllArguments> + </DllOption> + <DebugOption> + <OPTHX> + <HexSelection>1</HexSelection> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + <Oh166RecLen>16</Oh166RecLen> + </OPTHX> + <Simulator> + <UseSimulator>1</UseSimulator> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>1</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>1</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <LimitSpeedToRealTime>0</LimitSpeedToRealTime> + <RestoreSysVw>1</RestoreSysVw> + </Simulator> + <Target> + <UseTarget>0</UseTarget> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>0</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>0</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <RestoreTracepoints>1</RestoreTracepoints> + <RestoreSysVw>1</RestoreSysVw> + </Target> + <RunDebugAfterBuild>0</RunDebugAfterBuild> + <TargetSelection>-1</TargetSelection> + <SimDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + </SimDlls> + <TargetDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + <Driver></Driver> + </TargetDlls> + </DebugOption> + <Utilities> + <Flash1> + <UseTargetDll>0</UseTargetDll> + <UseExternalTool>0</UseExternalTool> + <RunIndependent>0</RunIndependent> + <UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging> + <Capability>0</Capability> + <DriverSelection>-1</DriverSelection> + </Flash1> + <bUseTDR>0</bUseTDR> + <Flash2></Flash2> + <Flash3></Flash3> + <Flash4></Flash4> + <pFcarmOut></pFcarmOut> + <pFcarmGrp></pFcarmGrp> + <pFcArmRoot></pFcArmRoot> + <FcArmLst>0</FcArmLst> + </Utilities> + <Target166> + <Target166Misc> + <MemoryModel>1</MemoryModel> + <RTOS>0</RTOS> + <NearData>6</NearData> + <iData>65535</iData> + <sData>65535</sData> + <bData>65535</bData> + <Mod167>1</Mod167> + <ModV2>0</ModV2> + <UseOnChipRom>1</UseOnChipRom> + <UseOnChipXramCan>1</UseOnChipXramCan> + <UseOnChipXram2>0</UseOnChipXram2> + <NearRamMemory>0</NearRamMemory> + <NearRomMemory>0</NearRomMemory> + <UseIrom2>0</UseIrom2> + <UseIrom3>0</UseIrom3> + <UseXram3>0</UseXram3> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + </OnChipMemories> + </Target166Misc> + <C166> + <Optimize>6</Optimize> + <SpeedSize>1</SpeedSize> + <RegisterColoring>0</RegisterColoring> + <UseStaticMemory>0</UseStaticMemory> + <WarningLevel>2</WarningLevel> + <AliasChecking>1</AliasChecking> + <VariablesInOrder>0</VariablesInOrder> + <CharAsUnsignedChar>0</CharAsUnsignedChar> + <NoDppSave>1</NoDppSave> + <Float64>0</Float64> + <SaveTempVar>0</SaveTempVar> + <ReorderInstruction>0</ReorderInstruction> + <VariousControls> + <MiscControls>MOD167</MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </C166> + <Ec166> + <WarningLevel>2</WarningLevel> + <UnsignedChar>0</UnsignedChar> + <VariousControls> + <MiscControls></MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </Ec166> + <A166> + <UseMPL>1</UseMPL> + <CaseSensitiveSymbols>0</CaseSensitiveSymbols> + <VariousControls> + <MiscControls>MOD167</MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath>..\..\firmware\include</IncludePath> + </VariousControls> + </A166> + <L166> + <UseLinkFile>0</UseLinkFile> + <LinkerCmdFile></LinkerCmdFile> + <LinkOnly>0</LinkOnly> + <UseTargetSet>1</UseTargetSet> + <DppUsage>0</DppUsage> + <nDataSelection>2</nDataSelection> + <nConstSelection>1</nConstSelection> + <NearDataString></NearDataString> + <NearConstString></NearConstString> + <iStartStopString></iStartStopString> + <InterruptVectorAddress></InterruptVectorAddress> + <WarningLevel>2</WarningLevel> + <DisableWarningNumbers></DisableWarningNumbers> + <Assign></Assign> + <Registerbank></Registerbank> + <Reserve></Reserve> + <MiscControls></MiscControls> + <UserClasses></UserClasses> + <UserSection></UserSection> + </L166> + </Target166> + </TargetOption> + <Groups> + <Group> + <GroupName>st10f168</GroupName> + <Files> + <File> + <FileName>st10f168.a66</FileName> + <FileType>2</FileType> + <FilePath>.\st10f168.a66</FilePath> + </File> + </Files> + </Group> + </Groups> + </Target> + </Targets> + +</Project> diff --git a/firmware/st10f269/Objects/st10f269.SBR b/firmware/st10f269/Objects/st10f269.SBR Binary files differnew file mode 100755 index 0000000..a85bcd0 --- /dev/null +++ b/firmware/st10f269/Objects/st10f269.SBR diff --git a/firmware/st10f269/Objects/st10f269.bin b/firmware/st10f269/Objects/st10f269.bin Binary files differnew file mode 100755 index 0000000..d9253d7 --- /dev/null +++ b/firmware/st10f269/Objects/st10f269.bin diff --git a/firmware/st10f269/st10f269.a66 b/firmware/st10f269/st10f269.a66 new file mode 100755 index 0000000..6bd03d7 --- /dev/null +++ b/firmware/st10f269/st10f269.a66 @@ -0,0 +1,422 @@ +$MOD167
+$SEGMENTED
+
+$INCLUDE (REG167.INC)
+$INCLUDE (COMMON.INC)
+
+NAME FIRMWARE_ST10F269
+ASSUME DPP3: SYSTEM
+
+
+FW_DATA SECTION DATA WORD AT FW2DATA
+ ; Control array of structures {segment, address, length in words} for read and write operations
+ FLASH_MAPPING:
+ DW 1,0000h,(16*1024)/2
+ DW 1,4000h,(8*1024)/2
+ DW 1,6000h,(8*1024)/2
+ DW 1,8000h,(32*1024)/2
+ DW 2,0000h,(64*1024)/2
+ DW 3,0000h,(64*1024)/2 ; Length is not needed
+ DW 4,0000h,(64*1024)/2 ; Length is not needed
+FW_DATA ENDS
+
+FW_ST10F269 SECTION CODE AT FW2BASE
+;-------------------------------------------------------------------------------
+; Main procedure
+;
+; Caka na slovo prikazu, odosle ho naspat pre potvrdenie a to iste musi znovu
+; prijat.
+;-------------------------------------------------------------------------------
+MAIN PROC
+ ; REMAP flash to segment 1 !!! Because of BUG.
+ BSET ROMS1
+ ; Default register bank
+ MOV CP,#REGBANK0
+ ; Zapneme serial buffer overrun detection
+ BSET S0CON.7
+ ; Init stack, size = 128 words, 256 bytes
+ MOV R0,SYSCON
+ AND R0,#3FFFh
+ OR R0,#2000h
+ MOV SYSCON,R0
+
+ MOV STKUN, #STACK_TOP
+ MOV STKOV, #STACK_BOTTOM
+ MOV SP, #STACK_TOP
+
+ NOP
+ NOP
+
+ MOV DPP0,#0
+ MOV DPP1,#1
+ MOV DPP2,#2
+ MOV DPP3,#3
+
+ ; Signalize successful initialization
+ MOV R15,#0
+ CALL SEND
+;-----------------------------------------------------------------------
+; Command loop
+;-----------------------------------------------------------------------
+$INCLUDE (SHELL.INC)
+
+MAIN ENDP
+
+;-------------------------------------------------------------------------------
+; Receive config information (1 word)
+;-------------------------------------------------------------------------------
+REC_CONFIG PROC NEAR
+ CALL REC_SAFE
+ RET
+REC_CONFIG ENDP
+
+;-------------------------------------------------------------------------------
+; Erase chip
+;-------------------------------------------------------------------------------
+ERASE_CHIP PROC NEAR
+ SCXT CP,#REGBANK1
+ ; Receive config information
+ CALL REC_CONFIG
+ CMP R14,#0
+ JMPR CC_NE,ERASE_CHIP_ERROR
+
+ MOV R0,#1554h
+ MOV R1,#2AA8h
+ MOV R2,#0A8h
+ MOV R3,#54h
+ MOV R4,#80h
+ MOV R5,#10h
+
+ ; Command cycles
+ EXTS #1,#3
+ MOV [R0],R2 ; [1554h], 0A80h
+ MOV [R1],R3 ; [2AA8h], 54h
+ MOV [R0],R4 ; [1554h], 80h
+ EXTS #1,#3
+ MOV [R0],R2 ; [1554h], 0A80h
+ MOV [R1],R3 ; [2AA8h], 54h
+ MOV [R0],R5 ; [1554h], 10h
+
+ NOP ; For BUG: Last command cycle
+ NOP
+
+ ; Pockame na dokoncenie zmazania chipu a detekujeme chyby
+ MOV R0,#1
+ MOV R1,#0000h
+ CALL OP_WAIT
+ MOV R15,R14
+ CALL SEND
+ERASE_CHIP_ERROR:
+ POP CP
+ RET
+ERASE_CHIP ENDP
+
+;-------------------------------------------------------------------------------
+; Erase blocks
+;-------------------------------------------------------------------------------
+ERASE_BLOCKS PROC NEAR
+ SCXT CP,#REGBANK1
+ ; Receive config information
+ CALL REC_CONFIG
+ CMP R14,#0
+ JMPR CC_NE,ERASE_BLOCKS_ERROR
+ ; Receive mask of blocks going to be erased
+ CALL REC_SAFE
+ ; Store mask
+ MOV R13,R15
+ ; Exit if there was an error
+ CMP R14,#0
+ JMPR CC_NE,ERASE_BLOCKS_ERROR
+
+ERASE_BLOCKS_START:
+ ; Base address of the control structure
+ MOV R11,#DPP3:FLASH_MAPPING
+
+ MOV R0,#1554h
+ MOV R1,#2AA8h
+ MOV R2,#0A8h
+ MOV R3,#54h
+ MOV R4,#80h
+
+ ; Command cycles
+ EXTS #1,#3
+ MOV [R0],R2 ; [1554h], 0A8h
+ MOV [R1],R3 ; [2AA8h], 54h
+ MOV [R0],R4 ; [1554h], 80h
+ EXTS #1,#2
+ MOV [R0],R2 ; [1554h], 0A8h
+ MOV [R1],R3 ; [2AA8h], 54h
+
+ MOV R2,#0 ; Block counter
+ ; V R13 mame masku
+
+ERASE_BLOCKS_LOOP:
+ MOV R0,[R11] ; Get segment, R0
+ ADD R11,#2
+ MOV R1,[R11] ; Get start address, R1
+ ADD R11,#4 ; Skip size
+
+ ROR R13,#1
+ JNB PSW.1,ERASE_BLOCKS_NEXT
+ ; Add command for given block
+ MOV R4,#30h
+ EXTS R0,#1
+ MOV [R1],R4
+ERASE_BLOCKS_NEXT:
+ CMPI1 R2,#5
+ JMPR CC_UGT,ERASE_BLOCKS_WAIT
+ JMP ERASE_BLOCKS_LOOP
+ERASE_BLOCKS_WAIT:
+ NOP ; For BUG: Last command cycle
+ NOP
+ ; Pockame na dokoncenie zmazania chipu a detekujeme chyby
+ ; V R0 a R1 mame segment a adresu platnu pre posledny mazany blok
+ CALL OP_WAIT
+ MOV R15,R14
+ CALL SEND
+ERASE_BLOCKS_ERROR:
+ POP CP
+ RET
+ERASE_BLOCKS ENDP
+
+;-------------------------------------------------------------------------------
+; Read
+;-------------------------------------------------------------------------------
+READ PROC NEAR
+ SCXT CP,#REGBANK1
+ ; Receive config information
+ CALL REC_CONFIG
+ CMP R14,#0
+ JMPR CC_NE,READ_ERROR
+ ; Prijmeme pocet bajtov pre precitanie
+ CALL REC_DWORD_SAFE
+ CMP R14,#0
+ JMPR CC_NE,READ_ERROR
+ ; Pocitadlo velkosti 1024 bajtoveho bloku
+ MOV R10,#1024
+ ; Base of the control table
+ MOV R11,#DPP3:FLASH_MAPPING
+ ; Read/Reset command
+ MOV R0,#0000h
+ MOV R1,#00F0h
+ EXTS #1,#1
+ MOV [R0],R1 ; zapiseme na lubovolnu adresu
+
+READ_START:
+ MOV R0,[R11] ; Get segment, R0
+ ADD R11,#2
+ MOV R1,[R11] ; Get start address, R1
+ ADD R11,#2
+ MOV R2,[R11] ; Get data length to read, R2
+ ADD R11,#2
+READ_LOOP:
+ ; Read word
+ EXTS R0,#1
+ MOV R15,[R1]
+ CALL SEND
+ CALL CHECK_COUNT
+ CMP R14,#1
+ JMPR CC_EQ,READ_DONE
+ ADD R1,#2 ; Set address of the next word
+ SUB R2,#1 ; Decrement word counter
+ JMPR CC_NZ,READ_LOOP
+ JMP READ_START
+
+READ_ERROR:
+READ_DONE:
+ POP CP
+ RET
+
+READ ENDP
+;-------------------------------------------------------------------------------
+; Write
+;-------------------------------------------------------------------------------
+WRITE PROC NEAR
+ SCXT CP,#REGBANK1
+ ; Receive config information
+ CALL REC_CONFIG
+ CMP R14,#0
+ JMPR CC_NE,WRITE_ERROR
+ ; Prijmeme pocet bajtov pre zapis
+ CALL REC_DWORD_SAFE
+ CMP R14,#0
+ JMPR CC_NE,WRITE_ERROR
+ ; Pocitadlo velkosti 1024 bajtoveho bloku
+ MOV R10,#1024
+ ; Base of the control table
+ MOV R11,#DPP3:FLASH_MAPPING
+WRITE_START:
+ MOV R0,[R11] ; Get segment, R0
+ ADD R11,#2
+ MOV R1,[R11] ; Get start address, R1
+ ADD R11,#2
+ MOV R3,[R11] ; Get data length to write, R3
+ ADD R11,#2
+WRITE_LOOP:
+ CALL REC
+ CMP R14,#0
+ JMPR CC_NE,WRITE_SEND_ERROR
+ ; Write word in R15 to the FLASH
+ MOV R5,#1554h
+ MOV R6,#2AA8h
+ MOV R2,#0A8h
+ MOV R12,#54h
+ MOV R9,#0A0h
+ ; Command cycles
+ EXTS #1,#3
+ MOV [R5],R2 ; [1554h], 0A8h
+ MOV [R6],R12 ; [2AA8h], 54h
+ MOV [R5],R9 ; [1554h], 0A0h
+ ; 4. cyklus - zapiseme data na cielovu adresu
+ EXTS R0,#1
+ MOV [R1],R15
+
+ NOP ; For BUG: Last command cycle
+ NOP
+ ; Pockame na dokoncenie zmazania chipu a detekujeme chyby
+ ; V R0 a R1 mame segment a adresu platnu pre posledny mazany blok
+ ; V R2 mame zapisovane slovo
+ MOV R2,R15
+ CALL OP_WAIT
+ CMP R14,#0
+ JMPR CC_NE,WRITE_SEND_ERROR
+ ; End of Write word
+ CALL CHECK_COUNT
+ CMP R14,#1
+ JMPR CC_EQ,WRITE_DONE
+ ADD R1,#2
+ SUB R3,#1
+ JMPR CC_NZ,WRITE_LOOP
+ JMP WRITE_START
+
+WRITE_SEND_ERROR:
+ MOV R15,R14
+ CALL SEND
+WRITE_ERROR:
+WRITE_DONE:
+ POP CP
+ RET
+
+WRITE ENDP
+
+;-------------------------------------------------------------------------------
+; Helper subroutines
+;-------------------------------------------------------------------------------
+$INCLUDE (SUBROUTINES.INC)
+
+;OP_WAIT_ERASE PROC NEAR
+
+ ;; Vstup: R0 segment, R1 adresa
+ ;; Vystup: R14 navratovy kod
+ ;PUSH R0
+ ;PUSH R1
+ ;PUSH R2
+ ;PUSH R3
+ ;PUSH R4
+ ;MOV R14,#0 ; Defaultny navratovy kod
+;OP_WAIT_ERASE_LOOP:
+ ;EXTS R0,#1
+ ;MOV R3,[R1]
+ ;MOV R4,R3 ; Make a copy for error bit checking
+ ;; Is operation complete?
+ ;EXTS R0,#1
+ ;MOV R3,[R1]
+ ;XOR R3,R4
+ ;JNB R3.6,OP_WAIT_ERASE_RETURN
+ ;; Has error occured?
+ ;JB R4.5,OP_WAIT_ERASE_ERROR
+ ;JMP OP_WAIT_ERASE_LOOP
+;OP_WAIT_ERASE_ERROR:
+ ;; Error, run Read/Reset command, this also resets the error bit .5
+ ;MOV R14,#RET_ERASE_ERROR
+ ;MOV R2,#0F0h
+ ;EXTS R0,#1
+ ;MOV [R1],R2
+;OP_WAIT_ERASE_RETURN:
+ ;POP R4
+ ;POP R3
+ ;POP R2
+ ;POP R1
+ ;POP R0
+ ;RET
+;OP_WAIT_ERASE ENDP
+
+OP_WAIT PROC NEAR
+ ; Vstup: R0 segment, R1 adresa, R2 bit 7 (hodnota, ktora znaci ukoncenie operacie)
+ ; Vystup: R14 navratovy kod
+ PUSH R0
+ PUSH R1
+ PUSH R2
+ PUSH R3
+ PUSH R4
+ MOV R14,#0 ; Defaultny navratovy kod
+OP_WAIT_LOOP:
+ EXTS R0,#1
+ MOV R3,[R1]
+ MOV R4,R3 ; Make a copy for error bit checking
+ ; Is operation complete?
+ EXTS R0,#1
+ MOV R3,[R1]
+ XOR R3,R4
+ JNB R3.6,OP_WAIT_RETURN
+ ; Has error occured?
+ JB R4.5,OP_WAIT_ERROR
+ JMP OP_WAIT_LOOP
+OP_WAIT_ERROR:
+ ; Error, run Read/Reset command, this also resets the error bit .5
+ MOV R14,#RET_WRITE_ERROR
+ MOV R2,#0F0h
+ EXTS R0,#1
+ MOV [R1],R2
+OP_WAIT_RETURN:
+ POP R4
+ POP R3
+ POP R2
+ POP R1
+ POP R0
+ RET
+OP_WAIT ENDP
+;---------------
+
+
+;OP_DP_WAIT PROC NEAR
+ ;; Vstup: R0 segment, R1 adresa, R2 bit 7 (hodnota, ktora znaci ukoncenie operacie)
+ ;; Vystup: R14 navratovy kod
+ ;PUSH R0
+ ;PUSH R1
+ ;PUSH R2
+ ;PUSH R3
+ ;PUSH R4
+ ;MOV R2,#0FFh
+ ;MOV R14,#0 ; Defaultny navratovy kod
+;OP_DP_WAIT_LOOP:
+ ;EXTS R0,#1
+ ;MOV R3,[R1]
+ ;MOV R4,R3 ; Make a copy for error bit checking
+ ;; Is operation complete?
+ ;XOR R3,R2
+ ;JNB R3.7,OP_DP_WAIT_RETURN
+ ;; Has error occured?
+ ;JB R4.5,OP_DP_WAIT_ERROR
+ ;JMP OP_DP_WAIT_LOOP
+;OP_DP_WAIT_ERROR:
+ ;; Error, run Read/Reset command, this also resets the error bit .5
+ ;MOV R14,#RET_WRITE_ERROR
+ ;MOV R2,#0F0h
+ ;EXTS R0,#1
+ ;MOV [R1],R2
+;OP_DP_WAIT_RETURN:
+ ;POP R4
+ ;POP R3
+ ;POP R2
+ ;POP R1
+ ;POP R0
+ ;RET
+;OP_DP_WAIT ENDP
+;-------------------------------------------------------------------------------
+; End of helper subroutines
+;-------------------------------------------------------------------------------
+
+FW_ST10F269 ENDS
+
+END
\ No newline at end of file diff --git a/firmware/st10f269/st10f269.uvgui.jan b/firmware/st10f269/st10f269.uvgui.jan new file mode 100755 index 0000000..727bfc8 --- /dev/null +++ b/firmware/st10f269/st10f269.uvgui.jan @@ -0,0 +1,1360 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_gui.xsd"> + + <SchemaVersion>-5.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <ViewPool/> + + <SECTreeCtrl> + <View> + <WinId>38003</WinId> + <ViewName>Registers</ViewName> + <TableColWidths>115 184</TableColWidths> + </View> + <View> + <WinId>346</WinId> + <ViewName>Code Coverage</ViewName> + <TableColWidths>442 160</TableColWidths> + </View> + <View> + <WinId>204</WinId> + <ViewName>Performance Analyzer</ViewName> + <TableColWidths>602</TableColWidths> + </View> + </SECTreeCtrl> + + <TreeListPane> + <View> + <WinId>1506</WinId> + <ViewName>Symbols</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1936</WinId> + <ViewName>Watch 1</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1937</WinId> + <ViewName>Watch 2</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1935</WinId> + <ViewName>Call Stack + Locals</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>2506</WinId> + <ViewName>Trace Data</ViewName> + <UserString></UserString> + <TableColWidths>75 135 130 95 70 230 200 150</TableColWidths> + </View> + </TreeListPane> + + <WindowSettings> + <LogicAnalizer> + <ShowLACursor>1</ShowLACursor> + <ShowSignalInfo>1</ShowSignalInfo> + <ShowCycles>0</ShowCycles> + <LeftSideBarSize>0</LeftSideBarSize> + <TimeBaseIndex>-1</TimeBaseIndex> + </LogicAnalizer> + </WindowSettings> + + <WinLayoutEx> + <sActiveDebugView></sActiveDebugView> + <WindowPosition> + <length>44</length> + <flags>0</flags> + <showCmd>3</showCmd> + <MinPosition> + <xPos>-1</xPos> + <yPos>-1</yPos> + </MinPosition> + <MaxPosition> + <xPos>-1684</xPos> + <yPos>-4</yPos> + </MaxPosition> + <NormalPosition> + <Top>89</Top> + <Left>-1243</Left> + <Right>-322</Right> + <Bottom>869</Bottom> + </NormalPosition> + </WindowPosition> + <MDIClientArea> + <RegID>0</RegID> + <MDITabState> + <Len>381</Len> + <Data>010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000001000000020000000000000001000000495A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C6964656E745C6964656E742E61363600000000096964656E742E61363600000000BECEA100FFFFFFFF4F5A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C73743130663236395C73743130663236392E613636000000000C73743130663236392E61363600000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000A9FAFFFF5E00000000000000E8030000</Data> + </MDITabState> + </MDIClientArea> + <ViewEx> + <ViewType>0</ViewType> + <ViewName>Build</ViewName> + <Window> + <RegID>-1</RegID> + <PaneID>-1</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>940100004B000000F8030000B4000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>79FDFFFFE4000000DDFFFFFF4D010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1005</RegID> + <PaneID>1005</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000ED010000F6010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>109</RegID> + <PaneID>109</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000ED010000F6010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1465</RegID> + <PaneID>1465</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1466</RegID> + <PaneID>1466</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1467</RegID> + <PaneID>1467</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1468</RegID> + <PaneID>1468</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1506</RegID> + <PaneID>1506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1913</RegID> + <PaneID>1913</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1935</RegID> + <PaneID>1935</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1936</RegID> + <PaneID>1936</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1937</RegID> + <PaneID>1937</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1939</RegID> + <PaneID>1939</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1940</RegID> + <PaneID>1940</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1941</RegID> + <PaneID>1941</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1942</RegID> + <PaneID>1942</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>195</RegID> + <PaneID>195</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000ED010000F6010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>196</RegID> + <PaneID>196</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000ED010000F6010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>197</RegID> + <PaneID>197</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000002A020000F0010000D5030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>198</RegID> + <PaneID>198</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000007A010000F8030000FA010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>199</RegID> + <PaneID>199</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000002D020000BF00000040030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>203</RegID> + <PaneID>203</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>204</RegID> + <PaneID>204</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>221</RegID> + <PaneID>221</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000000000000000000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2506</RegID> + <PaneID>2506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2507</RegID> + <PaneID>2507</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>343</RegID> + <PaneID>343</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>346</RegID> + <PaneID>346</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35824</RegID> + <PaneID>35824</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35885</RegID> + <PaneID>35885</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35886</RegID> + <PaneID>35886</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35887</RegID> + <PaneID>35887</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35888</RegID> + <PaneID>35888</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35889</RegID> + <PaneID>35889</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35890</RegID> + <PaneID>35890</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35891</RegID> + <PaneID>35891</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35892</RegID> + <PaneID>35892</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35893</RegID> + <PaneID>35893</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35894</RegID> + <PaneID>35894</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35895</RegID> + <PaneID>35895</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35896</RegID> + <PaneID>35896</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35897</RegID> + <PaneID>35897</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35898</RegID> + <PaneID>35898</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35899</RegID> + <PaneID>35899</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35900</RegID> + <PaneID>35900</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35901</RegID> + <PaneID>35901</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35902</RegID> + <PaneID>35902</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35903</RegID> + <PaneID>35903</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35904</RegID> + <PaneID>35904</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35905</RegID> + <PaneID>35905</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38003</RegID> + <PaneID>38003</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000BF0000007B010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38007</RegID> + <PaneID>38007</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000002D020000BF00000040030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>436</RegID> + <PaneID>436</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000002D020000BF00000040030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>70F9FFFF1802000000000000C3020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>437</RegID> + <PaneID>437</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>440</RegID> + <PaneID>440</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59392</RegID> + <PaneID>59392</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>882</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000007D0300001A000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59393</RegID> + <PaneID>0</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000D503000090060000E8030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59399</RegID> + <PaneID>59399</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>439</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>1</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000001A000000C201000034000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59400</RegID> + <PaneID>59400</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>572</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>2</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0000000034000000470200004E000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <DockMan> + <Len>2611</Len> + <Data>000000000A000000000000000020000000000000FFFFFFFFFFFFFFFF94010000B4000000F8030000B8000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000079FDFFFFE4000000DDFFFFFF4D010000940100004B000000F8030000B40000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF640200004B000000680200008D010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C0000018000400000000000004DFEFFFFE4000000DDFFFFFF26020000680200004B000000F80300008D0100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00100004B000000F4010000D50300000100000002000010040000000100000040FFFFFFC505000000000000000000000000000001000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000E5FBFFFFE4000000A7FCFFFF2D020000000000004B000000F00100000F0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFF04000000C5000000C7000000B40100007794000001800010000001000000E5FBFFFF31020000A7FCFFFF770300000000000013020000F0010000D50300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF000000000000000002000000000000000100000002000000FFFFFFFF000000000F020000F00100001302000001000000010000100400000000000000CCFDFFFF4E01000000000000000000000000000002000000FFFFFFFFED030000FFFFFFFFC500000001000000FFFFFFFFC500000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000076010000F80300007A01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000E5FBFFFF13020000DDFFFFFF93020000000000007A010000F8030000FA01000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFFC0100007A01000000020000FA01000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000000000000000000</Data> + </DockMan> + <ToolBar> + <RegID>59392</RegID> + <Name>File</Name> + <Buttons> + <Len>2030</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000025235960000000000000003000252350370726506304646383448000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data> + </Buttons> + <OriginalItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59399</RegID> + <Name>Build</Name> + <Buttons> + <Len>678</Len> + <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000</Data> + </Buttons> + <OriginalItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59400</RegID> + <Name>Debug</Name> + <Buttons> + <Len>2220</Len> + <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7200000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data> + </Buttons> + <OriginalItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ControlBarsSummary> + <Bars>0</Bars> + <ScreenCX>1366</ScreenCX> + <ScreenCY>768</ScreenCY> + </ControlBarsSummary> + </ViewEx> + </WinLayoutEx> + + <MDIGroups> + <Orientation>1</Orientation> + <ActiveMDIGroup>0</ActiveMDIGroup> + <MDIGroup> + <Size>100</Size> + <ActiveTab>0</ActiveTab> + <Doc> + <Name>Z:\home\jan\tmp\skola\BP\firmware\ident\st10f269.a66</Name> + <ColumnNumber>22</ColumnNumber> + <TopLine>1</TopLine> + <CurrentLine>7</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + </MDIGroup> + </MDIGroups> + +</ProjectGui> diff --git a/firmware/st10f269/st10f269.uvopt b/firmware/st10f269/st10f269.uvopt new file mode 100755 index 0000000..a2d9a9e --- /dev/null +++ b/firmware/st10f269/st10f269.uvopt @@ -0,0 +1,262 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd"> + + <SchemaVersion>1.0</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Extensions> + <cExt>*.c</cExt> + <aExt>*.s*; *.src; *.a*</aExt> + <oExt>*.obj</oExt> + <lExt>*.lib</lExt> + <tExt>*.txt; *.h; *.inc</tExt> + <pExt>*.plm</pExt> + <CppX>*.cpp</CppX> + <nMigrate>0</nMigrate> + </Extensions> + + <DaveTm> + <dwLowDateTime>0</dwLowDateTime> + <dwHighDateTime>0</dwHighDateTime> + </DaveTm> + + <Target> + <TargetName>Target 1</TargetName> + <ToolsetNumber>0x2</ToolsetNumber> + <ToolsetName>166/167</ToolsetName> + <TargetOption> + <MCS166> + <Clock>40000000</Clock> + <uocRom>1</uocRom> + <uocXCAN>1</uocXCAN> + <hadROM>1</hadROM> + <hadXRAM>1</hadXRAM> + <hadICAN>1</hadICAN> + <uocIROM2>0</uocIROM2> + <uocIROM3>0</uocIROM3> + <uocXRAM3>0</uocXRAM3> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + <ICAN> + <Type>0</Type> + <StartAddress>0xe800</StartAddress> + <Size>0x800</Size> + </ICAN> + <IROM> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x40000</Size> + </IROM> + <XRAM> + <Type>0</Type> + <StartAddress>0xc000</StartAddress> + <Size>0x2000</Size> + </XRAM> + <IRAM> + <Type>0</Type> + <StartAddress>0xf600</StartAddress> + <Size>0x800</Size> + </IRAM> + <IROM2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </IROM2> + <IROM3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </IROM3> + <XRAM3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </XRAM3> + </OnChipMemories> + </MCS166> + <OPTTT> + <gFlags>1</gFlags> + <BeepAtEnd>1</BeepAtEnd> + <RunSim>1</RunSim> + <RunTarget>0</RunTarget> + <RunAbUc>0</RunAbUc> + </OPTTT> + <OPTHX> + <HexSelection>1</HexSelection> + <FlashByte>65535</FlashByte> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + </OPTHX> + <OPTLEX> + <PageWidth>120</PageWidth> + <PageLength>65</PageLength> + <TabStop>8</TabStop> + <ListingPath>.\Listings\</ListingPath> + </OPTLEX> + <ListingPage> + <CreateCListing>1</CreateCListing> + <CreateAListing>1</CreateAListing> + <CreateLListing>1</CreateLListing> + <CreateIListing>0</CreateIListing> + <AsmCond>1</AsmCond> + <AsmSymb>1</AsmSymb> + <AsmXref>0</AsmXref> + <CCond>1</CCond> + <CCode>0</CCode> + <CListInc>0</CListInc> + <CSymb>0</CSymb> + <LinkerCodeListing>0</LinkerCodeListing> + </ListingPage> + <OPTXL> + <LMap>1</LMap> + <LComments>1</LComments> + <LGenerateSymbols>1</LGenerateSymbols> + <LLibSym>1</LLibSym> + <LLines>1</LLines> + <LLocSym>1</LLocSym> + <LPubSym>1</LPubSym> + <LXref>0</LXref> + <LExpSel>0</LExpSel> + </OPTXL> + <OPTFL> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <IsCurrentTarget>1</IsCurrentTarget> + </OPTFL> + <CpuCode>255</CpuCode> + <Books> + <Book> + <Number>0</Number> + <Title>Data Sheet</Title> + <Path>DATASHTS\ST\ST10F269_DS.PDF</Path> + </Book> + <Book> + <Number>1</Number> + <Title>Programming Manual</Title> + <Path>DATASHTS\ST\ST10_PM.PDF</Path> + </Book> + </Books> + <DebugOpt> + <uSim>1</uSim> + <uTrg>0</uTrg> + <sLdApp>1</sLdApp> + <sGomain>1</sGomain> + <sRbreak>1</sRbreak> + <sRwatch>1</sRwatch> + <sRmem>1</sRmem> + <sRfunc>1</sRfunc> + <sRbox>1</sRbox> + <tLdApp>1</tLdApp> + <tGomain>0</tGomain> + <tRbreak>1</tRbreak> + <tRwatch>1</tRwatch> + <tRmem>1</tRmem> + <tRfunc>0</tRfunc> + <tRbox>1</tRbox> + <tRtrace>1</tRtrace> + <sRSysVw>1</sRSysVw> + <tRSysVw>1</tRSysVw> + <sRunDeb>0</sRunDeb> + <sLrtime>0</sLrtime> + <nTsel>-1</nTsel> + <sDll></sDll> + <sDllPa></sDllPa> + <sDlgDll></sDlgDll> + <sDlgPa></sDlgPa> + <sIfile></sIfile> + <tDll></tDll> + <tDllPa></tDllPa> + <tDlgDll></tDlgDll> + <tDlgPa></tDlgPa> + <tIfile></tIfile> + <pMon></pMon> + </DebugOpt> + <Breakpoint/> + <Tracepoint> + <THDelay>0</THDelay> + </Tracepoint> + <DebugFlag> + <trace>0</trace> + <periodic>1</periodic> + <aLwin>0</aLwin> + <aCover>0</aCover> + <aSer1>0</aSer1> + <aSer2>0</aSer2> + <aPa>0</aPa> + <viewmode>0</viewmode> + <vrSel>0</vrSel> + <aSym>0</aSym> + <aTbox>0</aTbox> + <AscS1>0</AscS1> + <AscS2>0</AscS2> + <AscS3>0</AscS3> + <aSer3>0</aSer3> + <eProf>0</eProf> + <aLa>0</aLa> + <aPa1>0</aPa1> + <AscS4>0</AscS4> + <aSer4>0</aSer4> + <StkLoc>0</StkLoc> + <TrcWin>0</TrcWin> + <newCpu>0</newCpu> + <uProt>0</uProt> + </DebugFlag> + <LintExecutable></LintExecutable> + <LintConfigFile></LintConfigFile> + <bLintAuto>0</bLintAuto> + </TargetOption> + </Target> + + <Group> + <GroupName>st10f269</GroupName> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>1</FileNumber> + <FileType>2</FileType> + <tvExp>1</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>.\st10f269.a66</PathWithFileName> + <FilenameWithoutPath>st10f269.a66</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + +</ProjectOpt> diff --git a/firmware/st10f269/st10f269.uvproj b/firmware/st10f269/st10f269.uvproj new file mode 100755 index 0000000..3d2e222 --- /dev/null +++ b/firmware/st10f269/st10f269.uvproj @@ -0,0 +1,314 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd"> + + <SchemaVersion>1.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Targets> + <Target> + <TargetName>Target 1</TargetName> + <ToolsetNumber>0x2</ToolsetNumber> + <ToolsetName>166/167</ToolsetName> + <TargetOption> + <TargetCommonOption> + <Device>ST10F269</Device> + <Vendor>STMicroelectronics</Vendor> + <Cpu>IRAM (0xF600 - 0xFDFF) XRAM (0xC000-0xDFFF) XRAM2(0xE000-0xE7FF) IROM(0-0x3FFFF) ICAN(0xE800-0xEFFF) CLOCK(40000000) MOD167</Cpu> + <FlashUtilSpec></FlashUtilSpec> + <StartupFile>"LIB\START167.A66" ("C16x/ST10 Startup Code")</StartupFile> + <FlashDriverDll></FlashDriverDll> + <DeviceId>3236</DeviceId> + <RegisterFile>REGST10F269.H</RegisterFile> + <MemoryEnv></MemoryEnv> + <Cmp></Cmp> + <Asm></Asm> + <Linker></Linker> + <OHString></OHString> + <InfinionOptionDll></InfinionOptionDll> + <SLE66CMisc></SLE66CMisc> + <SLE66AMisc></SLE66AMisc> + <SLE66LinkerMisc></SLE66LinkerMisc> + <SFDFile></SFDFile> + <bCustSvd>0</bCustSvd> + <UseEnv>0</UseEnv> + <BinPath></BinPath> + <IncludePath></IncludePath> + <LibPath></LibPath> + <RegisterFilePath></RegisterFilePath> + <DBRegisterFilePath></DBRegisterFilePath> + <TargetStatus> + <Error>0</Error> + <ExitCodeStop>0</ExitCodeStop> + <ButtonStop>0</ButtonStop> + <NotGenerated>0</NotGenerated> + <InvalidFlash>1</InvalidFlash> + </TargetStatus> + <OutputDirectory>.\Objects\</OutputDirectory> + <OutputName>st10f269</OutputName> + <CreateExecutable>1</CreateExecutable> + <CreateLib>0</CreateLib> + <CreateHexFile>1</CreateHexFile> + <DebugInformation>1</DebugInformation> + <BrowseInformation>1</BrowseInformation> + <ListingPath>.\Listings\</ListingPath> + <HexFormatSelection>1</HexFormatSelection> + <Merge32K>0</Merge32K> + <CreateBatchFile>0</CreateBatchFile> + <BeforeCompile> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopU1X>0</nStopU1X> + <nStopU2X>0</nStopU2X> + </BeforeCompile> + <BeforeMake> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopB1X>0</nStopB1X> + <nStopB2X>0</nStopB2X> + </BeforeMake> + <AfterMake> + <RunUserProg1>1</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name>Z:\mnt\shared-ntfs\bin\win\hex2bin.exe Z:\mnt\shared-ntfs\sw\firmware\st10f269\Objects\st10f269.H86</UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopA1X>2</nStopA1X> + <nStopA2X>0</nStopA2X> + </AfterMake> + <SelectedForBatchBuild>0</SelectedForBatchBuild> + <SVCSIdString></SVCSIdString> + </TargetCommonOption> + <CommonProperty> + <UseCPPCompiler>0</UseCPPCompiler> + <RVCTCodeConst>0</RVCTCodeConst> + <RVCTZI>0</RVCTZI> + <RVCTOtherData>0</RVCTOtherData> + <ModuleSelection>0</ModuleSelection> + <IncludeInBuild>1</IncludeInBuild> + <AlwaysBuild>0</AlwaysBuild> + <GenerateAssemblyFile>0</GenerateAssemblyFile> + <AssembleAssemblyFile>0</AssembleAssemblyFile> + <PublicsOnly>0</PublicsOnly> + <StopOnExitCode>3</StopOnExitCode> + <CustomArgument></CustomArgument> + <IncludeLibraryModules></IncludeLibraryModules> + <ComprImg>1</ComprImg> + </CommonProperty> + <DllOption> + <SimDllName>S166.DLL</SimDllName> + <SimDllArguments>-cEXTMAC</SimDllArguments> + <SimDlgDll>D167.DLL</SimDlgDll> + <SimDlgDllArguments>-p269</SimDlgDllArguments> + <TargetDllName>S166.DLL</TargetDllName> + <TargetDllArguments>-cEXTMAC</TargetDllArguments> + <TargetDlgDll>T167.DLL</TargetDlgDll> + <TargetDlgDllArguments>-p269</TargetDlgDllArguments> + </DllOption> + <DebugOption> + <OPTHX> + <HexSelection>1</HexSelection> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + <Oh166RecLen>16</Oh166RecLen> + </OPTHX> + <Simulator> + <UseSimulator>1</UseSimulator> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>1</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>1</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <LimitSpeedToRealTime>0</LimitSpeedToRealTime> + <RestoreSysVw>1</RestoreSysVw> + </Simulator> + <Target> + <UseTarget>0</UseTarget> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>0</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>0</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <RestoreTracepoints>1</RestoreTracepoints> + <RestoreSysVw>1</RestoreSysVw> + </Target> + <RunDebugAfterBuild>0</RunDebugAfterBuild> + <TargetSelection>-1</TargetSelection> + <SimDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + </SimDlls> + <TargetDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + <Driver></Driver> + </TargetDlls> + </DebugOption> + <Utilities> + <Flash1> + <UseTargetDll>0</UseTargetDll> + <UseExternalTool>0</UseExternalTool> + <RunIndependent>0</RunIndependent> + <UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging> + <Capability>0</Capability> + <DriverSelection>-1</DriverSelection> + </Flash1> + <bUseTDR>0</bUseTDR> + <Flash2></Flash2> + <Flash3></Flash3> + <Flash4></Flash4> + <pFcarmOut></pFcarmOut> + <pFcarmGrp></pFcarmGrp> + <pFcArmRoot></pFcArmRoot> + <FcArmLst>0</FcArmLst> + </Utilities> + <Target166> + <Target166Misc> + <MemoryModel>1</MemoryModel> + <RTOS>0</RTOS> + <NearData>6</NearData> + <iData>65535</iData> + <sData>65535</sData> + <bData>65535</bData> + <Mod167>1</Mod167> + <ModV2>0</ModV2> + <UseOnChipRom>1</UseOnChipRom> + <UseOnChipXramCan>1</UseOnChipXramCan> + <UseOnChipXram2>1</UseOnChipXram2> + <NearRamMemory>0</NearRamMemory> + <NearRomMemory>0</NearRomMemory> + <UseIrom2>0</UseIrom2> + <UseIrom3>0</UseIrom3> + <UseXram3>0</UseXram3> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + </OnChipMemories> + </Target166Misc> + <C166> + <Optimize>6</Optimize> + <SpeedSize>1</SpeedSize> + <RegisterColoring>0</RegisterColoring> + <UseStaticMemory>0</UseStaticMemory> + <WarningLevel>2</WarningLevel> + <AliasChecking>1</AliasChecking> + <VariablesInOrder>0</VariablesInOrder> + <CharAsUnsignedChar>0</CharAsUnsignedChar> + <NoDppSave>1</NoDppSave> + <Float64>0</Float64> + <SaveTempVar>0</SaveTempVar> + <ReorderInstruction>0</ReorderInstruction> + <VariousControls> + <MiscControls>MOD167</MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </C166> + <Ec166> + <WarningLevel>2</WarningLevel> + <UnsignedChar>0</UnsignedChar> + <VariousControls> + <MiscControls></MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </Ec166> + <A166> + <UseMPL>1</UseMPL> + <CaseSensitiveSymbols>0</CaseSensitiveSymbols> + <VariousControls> + <MiscControls>MOD167</MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath>..\..\firmware\include</IncludePath> + </VariousControls> + </A166> + <L166> + <UseLinkFile>0</UseLinkFile> + <LinkerCmdFile></LinkerCmdFile> + <LinkOnly>0</LinkOnly> + <UseTargetSet>1</UseTargetSet> + <DppUsage>0</DppUsage> + <nDataSelection>2</nDataSelection> + <nConstSelection>1</nConstSelection> + <NearDataString></NearDataString> + <NearConstString></NearConstString> + <iStartStopString></iStartStopString> + <InterruptVectorAddress></InterruptVectorAddress> + <WarningLevel>2</WarningLevel> + <DisableWarningNumbers></DisableWarningNumbers> + <Assign></Assign> + <Registerbank></Registerbank> + <Reserve></Reserve> + <MiscControls></MiscControls> + <UserClasses></UserClasses> + <UserSection></UserSection> + </L166> + </Target166> + </TargetOption> + <Groups> + <Group> + <GroupName>st10f269</GroupName> + <Files> + <File> + <FileName>st10f269.a66</FileName> + <FileType>2</FileType> + <FilePath>.\st10f269.a66</FilePath> + </File> + </Files> + </Group> + </Groups> + </Target> + </Targets> + +</Project> diff --git a/firmware/stage_1/Objects/stage_1.SBR b/firmware/stage_1/Objects/stage_1.SBR Binary files differnew file mode 100755 index 0000000..9c773c8 --- /dev/null +++ b/firmware/stage_1/Objects/stage_1.SBR diff --git a/firmware/stage_1/Objects/stage_1.bin b/firmware/stage_1/Objects/stage_1.bin Binary files differnew file mode 100755 index 0000000..817c262 --- /dev/null +++ b/firmware/stage_1/Objects/stage_1.bin diff --git a/firmware/stage_1/stage_1.a66 b/firmware/stage_1/stage_1.a66 new file mode 100755 index 0000000..f1b4b60 --- /dev/null +++ b/firmware/stage_1/stage_1.a66 @@ -0,0 +1,43 @@ +$MOD167
+$SEGMENTED
+
+$INCLUDE (REG167.INC)
+$INCLUDE (COMMON.INC)
+
+NAME FIRMWARE_STAGE_1
+ASSUME DPP3: SYSTEM
+
+; Firmware prvej urovne - First stage firmware
+;
+; Musi mat 32 bajtov. Nahra do IRAM kod, pre vykonavanie operacii
+; s FLASH pamatou.
+; Ten kod je firmware druhej urovne (second stage firmware)
+; a moze mat maximalne 1024 bajtov. Bude zavedeny do IRAM na adresu 0xF600.
+; Po nahrani do RAM, skoci na adresu 0xF600 a zacne vykonavat second
+; stage firmware.
+FW_STAGE_1 SECTION CODE AT FW1BASE
+
+; Typ Task nemoze byt, pretoze nam kompilator kod umiestni na adresu 0000h
+MAIN PROC
+ ; Enable XRAM1 where firmware will be stored
+ BSET SYSCON.2 ; XPEN = 1
+ BSET XPERCON.2 ; XRAM1EN = 1
+ ; Load the firmware base address in XRAM1
+ MOV R0,#FW2BASE
+ ; Receive firmware
+REC: JNB S0RIC.7,REC ; cakame na bajt zo serioveho rozhrania
+ MOVB [R0],S0RBUF ; zapiseme ho do RAM
+ BCLR S0RIC.7 ; zhodime priznak prijatia ramca zo serioveho rozhrania
+ CMPI1 R0,#FW2END ; najprv sa porovnava, az potom inkrementuje
+ JMPR CC_ULT,REC
+ ; Enter the firmware
+ JMP FW2START
+MAIN ENDP
+
+FW_STAGE_1 ENDS
+
+FW_S2 SECTION CODE AT FW2BASE
+FW2START:
+FW_S2 ENDS
+
+END
\ No newline at end of file diff --git a/firmware/stage_1/stage_1.uvgui.jan b/firmware/stage_1/stage_1.uvgui.jan new file mode 100755 index 0000000..a24e09a --- /dev/null +++ b/firmware/stage_1/stage_1.uvgui.jan @@ -0,0 +1,2601 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_gui.xsd"> + + <SchemaVersion>-5.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <ViewPool/> + + <SECTreeCtrl> + <View> + <WinId>38003</WinId> + <ViewName>Registers</ViewName> + <TableColWidths>115 184</TableColWidths> + </View> + <View> + <WinId>346</WinId> + <ViewName>Code Coverage</ViewName> + <TableColWidths>442 160</TableColWidths> + </View> + <View> + <WinId>204</WinId> + <ViewName>Performance Analyzer</ViewName> + <TableColWidths>602</TableColWidths> + </View> + </SECTreeCtrl> + + <TreeListPane> + <View> + <WinId>1506</WinId> + <ViewName>Symbols</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1936</WinId> + <ViewName>Watch 1</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1937</WinId> + <ViewName>Watch 2</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>1935</WinId> + <ViewName>Call Stack + Locals</ViewName> + <UserString></UserString> + <TableColWidths>133 133 133</TableColWidths> + </View> + <View> + <WinId>2506</WinId> + <ViewName>Trace Data</ViewName> + <UserString></UserString> + <TableColWidths>75 135 130 95 70 230 200 150</TableColWidths> + </View> + </TreeListPane> + + <WindowSettings> + <LogicAnalizer> + <ShowLACursor>1</ShowLACursor> + <ShowSignalInfo>1</ShowSignalInfo> + <ShowCycles>0</ShowCycles> + <LeftSideBarSize>0</LeftSideBarSize> + <TimeBaseIndex>-1</TimeBaseIndex> + </LogicAnalizer> + </WindowSettings> + + <WinLayoutEx> + <sActiveDebugView></sActiveDebugView> + <WindowPosition> + <length>44</length> + <flags>0</flags> + <showCmd>3</showCmd> + <MinPosition> + <xPos>-1</xPos> + <yPos>-1</yPos> + </MinPosition> + <MaxPosition> + <xPos>-1684</xPos> + <yPos>-4</yPos> + </MaxPosition> + <NormalPosition> + <Top>89</Top> + <Left>-1243</Left> + <Right>-322</Right> + <Bottom>869</Bottom> + </NormalPosition> + </WindowPosition> + <MDIClientArea> + <RegID>0</RegID> + <MDITabState> + <Len>381</Len> + <Data>010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000001000000020000000000000001000000495A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C6964656E745C6964656E742E61363600000000096964656E742E61363600000000BECEA100FFFFFFFF4F5A3A5C686F6D655C6A616E5C746D705C736B6F6C615C42505C746578745C5553425F464C4153485C7372635C696D706C5C6669726D776172655C73743130663236395C73743130663236392E613636000000000C73743130663236392E61363600000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000A9FAFFFF5E00000000000000E8030000</Data> + </MDITabState> + </MDIClientArea> + <ViewEx> + <ViewType>0</ViewType> + <ViewName>Build</ViewName> + <Window> + <RegID>-1</RegID> + <PaneID>-1</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>940100004B000000F8030000B4000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>A4FBFFFF1A01000008FEFFFF83010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1005</RegID> + <PaneID>1005</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000E1000000F3020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>109</RegID> + <PaneID>109</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000E1000000F3020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1465</RegID> + <PaneID>1465</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1466</RegID> + <PaneID>1466</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1467</RegID> + <PaneID>1467</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1468</RegID> + <PaneID>1468</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1506</RegID> + <PaneID>1506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1913</RegID> + <PaneID>1913</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1935</RegID> + <PaneID>1935</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1936</RegID> + <PaneID>1936</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1937</RegID> + <PaneID>1937</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1939</RegID> + <PaneID>1939</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1940</RegID> + <PaneID>1940</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1941</RegID> + <PaneID>1941</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1942</RegID> + <PaneID>1942</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>195</RegID> + <PaneID>195</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000E1000000F3020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>196</RegID> + <PaneID>196</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000E1000000F3020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>197</RegID> + <PaneID>197</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000002703000090060000D5030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>198</RegID> + <PaneID>198</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000007A010000F8030000FA010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>199</RegID> + <PaneID>199</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000002A03000013040000BC030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>203</RegID> + <PaneID>203</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>204</RegID> + <PaneID>204</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>221</RegID> + <PaneID>221</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000000000000000000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2506</RegID> + <PaneID>2506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2507</RegID> + <PaneID>2507</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>343</RegID> + <PaneID>343</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>346</RegID> + <PaneID>346</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35824</RegID> + <PaneID>35824</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>9701000065000000F50300009B000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35885</RegID> + <PaneID>35885</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35886</RegID> + <PaneID>35886</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35887</RegID> + <PaneID>35887</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35888</RegID> + <PaneID>35888</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35889</RegID> + <PaneID>35889</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35890</RegID> + <PaneID>35890</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35891</RegID> + <PaneID>35891</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35892</RegID> + <PaneID>35892</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35893</RegID> + <PaneID>35893</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35894</RegID> + <PaneID>35894</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35895</RegID> + <PaneID>35895</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35896</RegID> + <PaneID>35896</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35897</RegID> + <PaneID>35897</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35898</RegID> + <PaneID>35898</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35899</RegID> + <PaneID>35899</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35900</RegID> + <PaneID>35900</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35901</RegID> + <PaneID>35901</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35902</RegID> + <PaneID>35902</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35903</RegID> + <PaneID>35903</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35904</RegID> + <PaneID>35904</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35905</RegID> + <PaneID>35905</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>6B02000065000000F503000074010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38003</RegID> + <PaneID>38003</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000065000000E1000000EE020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38007</RegID> + <PaneID>38007</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000002A03000013040000BC030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>04000000170000000002000080000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>436</RegID> + <PaneID>436</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000002A03000013040000BC030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0400000017000000CF000000BB010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>437</RegID> + <PaneID>437</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>440</RegID> + <PaneID>440</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0300000094010000F5030000E1010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>040000001700000094010000A7010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59392</RegID> + <PaneID>59392</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>882</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000007D0300001A000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59393</RegID> + <PaneID>0</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000D503000090060000E8030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59399</RegID> + <PaneID>59399</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>439</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>1</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000001A000000C201000034000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59400</RegID> + <PaneID>59400</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>572</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>2</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0000000034000000470200004E000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <DockMan> + <Len>2619</Len> + <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF94010000B4000000F8030000B8000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000A4FBFFFF1A01000008FEFFFF83010000940100004B000000F8030000B40000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF640200004B000000680200008D010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C00000180004000000000000078FCFFFF1A01000008FEFFFF5C020000680200004B000000F80300008D0100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE40000004B000000E80000000C0300000100000002000010040000000100000072FEFFFF7D020000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000010FAFFFF1A010000F4FAFFFFD6030000000000004B000000E40000000C0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000076010000F80300007A01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB0900000180008000000000000010FAFFFF4902000008FEFFFFC9020000000000007A010000F8030000FA01000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFFC0100007A01000000020000FA01000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000000C030000900600001003000001000000010000100400000001000000EDFCFFFF67000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000100000010FAFFFFDA03000026FEFFFF9F040000000000001003000090060000D50300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data> + </DockMan> + <ToolBar> + <RegID>59392</RegID> + <Name>File</Name> + <Buttons> + <Len>2030</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000025235960000000000000003000252350370726506304646383448000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data> + </Buttons> + <OriginalItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59399</RegID> + <Name>Build</Name> + <Buttons> + <Len>678</Len> + <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000</Data> + </Buttons> + <OriginalItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59400</RegID> + <Name>Debug</Name> + <Buttons> + <Len>2220</Len> + <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7200000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data> + </Buttons> + <OriginalItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ControlBarsSummary> + <Bars>0</Bars> + <ScreenCX>1366</ScreenCX> + <ScreenCY>768</ScreenCY> + </ControlBarsSummary> + </ViewEx> + <ViewEx> + <ViewType>1</ViewType> + <ViewName>Debug</ViewName> + <Window> + <RegID>-1</RegID> + <PaneID>-1</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0005000097010000900600001A030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1005</RegID> + <PaneID>1005</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000AE0100008D01000001030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>5A0800001F000000EA090000EA020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>109</RegID> + <PaneID>109</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000AE0100008D01000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>5A0800001F000000EA090000EA020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1465</RegID> + <PaneID>1465</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1466</RegID> + <PaneID>1466</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1467</RegID> + <PaneID>1467</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1468</RegID> + <PaneID>1468</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1506</RegID> + <PaneID>1506</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00050000AB010000900600001A030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1913</RegID> + <PaneID>1913</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>97010000660000008D0600008E010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1935</RegID> + <PaneID>1935</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000150200002B020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1936</RegID> + <PaneID>1936</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000150200002B020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1937</RegID> + <PaneID>1937</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000150200002B020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1939</RegID> + <PaneID>1939</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1940</RegID> + <PaneID>1940</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1941</RegID> + <PaneID>1941</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>1942</RegID> + <PaneID>1942</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>195</RegID> + <PaneID>195</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000AE0100008D01000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>5A0800001F000000EA090000EA020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>196</RegID> + <PaneID>196</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000AE0100008D01000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>5A0800001F000000EA090000EA020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>197</RegID> + <PaneID>197</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000003A020000D904000097020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>198</RegID> + <PaneID>198</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>32768</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000005B020000A2010000D3030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>199</RegID> + <PaneID>199</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000003A020000D904000097020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>203</RegID> + <PaneID>203</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>480300004F00000090060000D3030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AC0400002702000058080000A2040000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>204</RegID> + <PaneID>204</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>97010000660000008D0600008E010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>221</RegID> + <PaneID>221</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000000000000000000000000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2506</RegID> + <PaneID>2506</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>2507</RegID> + <PaneID>2507</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>343</RegID> + <PaneID>343</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>97010000660000008D0600008E010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>346</RegID> + <PaneID>346</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>97010000660000008D0600008E010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35824</RegID> + <PaneID>35824</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>97010000660000008D0600008E010000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35885</RegID> + <PaneID>35885</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35886</RegID> + <PaneID>35886</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35887</RegID> + <PaneID>35887</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35888</RegID> + <PaneID>35888</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35889</RegID> + <PaneID>35889</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35890</RegID> + <PaneID>35890</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35891</RegID> + <PaneID>35891</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35892</RegID> + <PaneID>35892</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35893</RegID> + <PaneID>35893</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35894</RegID> + <PaneID>35894</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35895</RegID> + <PaneID>35895</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35896</RegID> + <PaneID>35896</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35897</RegID> + <PaneID>35897</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35898</RegID> + <PaneID>35898</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35899</RegID> + <PaneID>35899</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35900</RegID> + <PaneID>35900</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35901</RegID> + <PaneID>35901</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35902</RegID> + <PaneID>35902</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35903</RegID> + <PaneID>35903</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35904</RegID> + <PaneID>35904</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>35905</RegID> + <PaneID>35905</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>16384</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03050000AE0100008D06000049040000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>AB0600001C0000003B080000E7020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38003</RegID> + <PaneID>38003</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>1</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>03000000AE0100008D01000001030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>5A0800001F000000EA090000EA020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>38007</RegID> + <PaneID>38007</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000003A020000D904000097020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000F302000028010000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>436</RegID> + <PaneID>436</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>030000003A020000D904000097020000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B0000007D010000D1020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>437</RegID> + <PaneID>437</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000150200002B020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>440</RegID> + <PaneID>440</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>A90100007202000041030000BA030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>850000009B000000150200002B020000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59392</RegID> + <PaneID>59392</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>940</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>0000000000000000B70300001C000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59393</RegID> + <PaneID>0</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>32767</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentRowIndex>0</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>00000000D303000090060000E6030000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59399</RegID> + <PaneID>59399</PaneID> + <IsVisible>0</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>463</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>1</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000001C000000DA01000038000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <Window> + <RegID>59400</RegID> + <PaneID>59400</PaneID> + <IsVisible>1</IsVisible> + <IsFloating>0</IsFloating> + <IsTabbed>0</IsTabbed> + <IsActivated>0</IsActivated> + <MRUWidth>612</MRUWidth> + <PinState>0</PinState> + <RecentFrameAlignment>8192</RecentFrameAlignment> + <RecentRowIndex>2</RecentRowIndex> + <RectRecentDocked> + <Len>16</Len> + <Data>000000001C0000006F02000038000000</Data> + </RectRecentDocked> + <RectRecentFloat> + <Len>16</Len> + <Data>0A0000000A0000006E0000006E000000</Data> + </RectRecentFloat> + </Window> + <DockMan> + <Len>2652</Len> + <Data>0000000009000000000000000020000000000000FFFFFFFFFFFFFFFF94010000A701000090060000AB01000000000000010000000400000001000000F9FEFFFFCD010000FFFFFFFF0500000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000940100006500000090060000BD010000940100004F00000090060000A701000000000000402800460500000014506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF5701000001000000FFFFFFFF57010000000000000080000001000000FFFFFFFFFFFFFFFF0000000057020000440300005B020000010000000100001004000000010000003AFDFFFF5000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000001000000A60100007102000044030000E9030000A60100005B02000044030000D303000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFFA20100005B020000A6010000D303000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF000000001F020000DC04000023020000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B401000077940000018000800000000000000000000039020000DC040000C60200000000000023020000DC040000B00200000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFF440300004F00000048030000D303000001000000020000100400000001000000000000000000000000000000000000000000000001000000CB000000000000000000000000000000000000000000000001000000CB00000001000000CB00000002000000FFFF02001200434D756C746950616E654672616D65576E64000100945A0800001F000000EA090000EA02000001000000000000000200000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000400000010000005A0800001F000000EA090000EA0200000000000097010000900100001A0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED030000058000010094AB0600001C0000003B080000E702000001000000000000000200000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000001000000AB0600001C0000003B080000E70200000005000097010000900600001A0300000000000040410056170000000753796D626F6C7301000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFE20500000000000000000000</Data> + </DockMan> + <ToolBar> + <RegID>59392</RegID> + <Name>File</Name> + <Buttons> + <Len>2015</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000443414C4C960000000000000001000443414C4C00000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020001001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000</Data> + </Buttons> + <OriginalItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>1423</Len> + <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59399</RegID> + <Name>Build</Name> + <Buttons> + <Len>657</Len> + <Data>00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64CF010000</Data> + </Buttons> + <OriginalItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>583</Len> + <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ToolBar> + <RegID>59400</RegID> + <Name>Debug</Name> + <Buttons> + <Len>2220</Len> + <Data>00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020001003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000002000100320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000020000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data> + </Buttons> + <OriginalItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data> + </OriginalItems> + <OrigResetItems> + <Len>898</Len> + <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data> + </OrigResetItems> + </ToolBar> + <ControlBarsSummary> + <Bars>0</Bars> + <ScreenCX>1680</ScreenCX> + <ScreenCY>1050</ScreenCY> + </ControlBarsSummary> + </ViewEx> + </WinLayoutEx> + + <MDIGroups> + <Orientation>1</Orientation> + <ActiveMDIGroup>0</ActiveMDIGroup> + <MDIGroup> + <Size>100</Size> + <ActiveTab>0</ActiveTab> + <Doc> + <Name>Z:\home\jan\tmp\skola\BP\firmware\ident\stage_1.a66</Name> + <ColumnNumber>10</ColumnNumber> + <TopLine>4</TopLine> + <CurrentLine>38</CurrentLine> + <Folding>0</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + </MDIGroup> + </MDIGroups> + +</ProjectGui> diff --git a/firmware/stage_1/stage_1.uvopt b/firmware/stage_1/stage_1.uvopt new file mode 100755 index 0000000..29191e8 --- /dev/null +++ b/firmware/stage_1/stage_1.uvopt @@ -0,0 +1,269 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd"> + + <SchemaVersion>1.0</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Extensions> + <cExt>*.c</cExt> + <aExt>*.s*; *.src; *.a*</aExt> + <oExt>*.obj</oExt> + <lExt>*.lib</lExt> + <tExt>*.txt; *.h; *.inc</tExt> + <pExt>*.plm</pExt> + <CppX>*.cpp</CppX> + <nMigrate>0</nMigrate> + </Extensions> + + <DaveTm> + <dwLowDateTime>0</dwLowDateTime> + <dwHighDateTime>0</dwHighDateTime> + </DaveTm> + + <Target> + <TargetName>Target 1</TargetName> + <ToolsetNumber>0x2</ToolsetNumber> + <ToolsetName>166/167</ToolsetName> + <TargetOption> + <MCS166> + <Clock>40000000</Clock> + <uocRom>1</uocRom> + <uocXCAN>1</uocXCAN> + <hadROM>1</hadROM> + <hadXRAM>1</hadXRAM> + <hadICAN>1</hadICAN> + <uocIROM2>0</uocIROM2> + <uocIROM3>0</uocIROM3> + <uocXRAM3>0</uocXRAM3> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + <ICAN> + <Type>0</Type> + <StartAddress>0xe800</StartAddress> + <Size>0x800</Size> + </ICAN> + <IROM> + <Type>1</Type> + <StartAddress>0x0</StartAddress> + <Size>0x40000</Size> + </IROM> + <XRAM> + <Type>0</Type> + <StartAddress>0xc000</StartAddress> + <Size>0x2000</Size> + </XRAM> + <IRAM> + <Type>0</Type> + <StartAddress>0xf600</StartAddress> + <Size>0x800</Size> + </IRAM> + <IROM2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </IROM2> + <IROM3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </IROM3> + <XRAM3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </XRAM3> + </OnChipMemories> + </MCS166> + <OPTTT> + <gFlags>1</gFlags> + <BeepAtEnd>1</BeepAtEnd> + <RunSim>1</RunSim> + <RunTarget>0</RunTarget> + <RunAbUc>0</RunAbUc> + </OPTTT> + <OPTHX> + <HexSelection>1</HexSelection> + <FlashByte>65535</FlashByte> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + </OPTHX> + <OPTLEX> + <PageWidth>120</PageWidth> + <PageLength>65</PageLength> + <TabStop>8</TabStop> + <ListingPath>.\Listings\</ListingPath> + </OPTLEX> + <ListingPage> + <CreateCListing>1</CreateCListing> + <CreateAListing>1</CreateAListing> + <CreateLListing>1</CreateLListing> + <CreateIListing>0</CreateIListing> + <AsmCond>1</AsmCond> + <AsmSymb>1</AsmSymb> + <AsmXref>0</AsmXref> + <CCond>1</CCond> + <CCode>0</CCode> + <CListInc>0</CListInc> + <CSymb>0</CSymb> + <LinkerCodeListing>0</LinkerCodeListing> + </ListingPage> + <OPTXL> + <LMap>1</LMap> + <LComments>1</LComments> + <LGenerateSymbols>1</LGenerateSymbols> + <LLibSym>1</LLibSym> + <LLines>1</LLines> + <LLocSym>1</LLocSym> + <LPubSym>1</LPubSym> + <LXref>0</LXref> + <LExpSel>0</LExpSel> + </OPTXL> + <OPTFL> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <IsCurrentTarget>1</IsCurrentTarget> + </OPTFL> + <CpuCode>255</CpuCode> + <Books> + <Book> + <Number>0</Number> + <Title>Data Sheet</Title> + <Path>DATASHTS\ST\ST10F269_DS.PDF</Path> + </Book> + <Book> + <Number>1</Number> + <Title>Programming Manual</Title> + <Path>DATASHTS\ST\ST10_PM.PDF</Path> + </Book> + </Books> + <DebugOpt> + <uSim>1</uSim> + <uTrg>0</uTrg> + <sLdApp>1</sLdApp> + <sGomain>1</sGomain> + <sRbreak>1</sRbreak> + <sRwatch>1</sRwatch> + <sRmem>1</sRmem> + <sRfunc>1</sRfunc> + <sRbox>1</sRbox> + <tLdApp>1</tLdApp> + <tGomain>0</tGomain> + <tRbreak>1</tRbreak> + <tRwatch>1</tRwatch> + <tRmem>1</tRmem> + <tRfunc>0</tRfunc> + <tRbox>1</tRbox> + <tRtrace>1</tRtrace> + <sRSysVw>1</sRSysVw> + <tRSysVw>1</tRSysVw> + <sRunDeb>0</sRunDeb> + <sLrtime>0</sLrtime> + <nTsel>-1</nTsel> + <sDll></sDll> + <sDllPa></sDllPa> + <sDlgDll></sDlgDll> + <sDlgPa></sDlgPa> + <sIfile></sIfile> + <tDll></tDll> + <tDllPa></tDllPa> + <tDlgDll></tDlgDll> + <tDlgPa></tDlgPa> + <tIfile></tIfile> + <pMon></pMon> + </DebugOpt> + <TargetDriverDllRegistry> + <SetRegEntry> + <Number>0</Number> + <Key>DLGD167</Key> + <Name>(103=-1,-1,-1,-1,0)(3005=-1,-1,-1,-1,0)(108=-1,-1,-1,-1,0)(3004=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(3008=-1,-1,-1,-1,0)(3009=-1,-1,-1,-1,0)(88=-1,-1,-1,-1,0)(89=-1,-1,-1,-1,0)(90=-1,-1,-1,-1,0)(93=-1,-1,-1,-1,0)(94=-1,-1,-1,-1,0)(95=-1,-1,-1,-1,0)(96=-1,-1,-1,-1,0)(97=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(98=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(3007=-1,-1,-1,-1,0)(3000=-1,-1,-1,-1,0)(3003=-1,-1,-1,-1,0)(3034=-1,-1,-1,-1,0)(3012=-1,-1,-1,-1,0)</Name> + </SetRegEntry> + </TargetDriverDllRegistry> + <Breakpoint/> + <Tracepoint> + <THDelay>0</THDelay> + </Tracepoint> + <DebugFlag> + <trace>0</trace> + <periodic>1</periodic> + <aLwin>1</aLwin> + <aCover>0</aCover> + <aSer1>0</aSer1> + <aSer2>0</aSer2> + <aPa>0</aPa> + <viewmode>1</viewmode> + <vrSel>0</vrSel> + <aSym>0</aSym> + <aTbox>0</aTbox> + <AscS1>0</AscS1> + <AscS2>0</AscS2> + <AscS3>0</AscS3> + <aSer3>0</aSer3> + <eProf>0</eProf> + <aLa>0</aLa> + <aPa1>0</aPa1> + <AscS4>0</AscS4> + <aSer4>0</aSer4> + <StkLoc>0</StkLoc> + <TrcWin>0</TrcWin> + <newCpu>0</newCpu> + <uProt>0</uProt> + </DebugFlag> + <LintExecutable></LintExecutable> + <LintConfigFile></LintConfigFile> + <bLintAuto>0</bLintAuto> + </TargetOption> + </Target> + + <Group> + <GroupName>stage_1</GroupName> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>1</FileNumber> + <FileType>2</FileType> + <tvExp>1</tvExp> + <Focus>0</Focus> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>.\stage_1.a66</PathWithFileName> + <FilenameWithoutPath>stage_1.a66</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + +</ProjectOpt> diff --git a/firmware/stage_1/stage_1.uvproj b/firmware/stage_1/stage_1.uvproj new file mode 100755 index 0000000..8e95cad --- /dev/null +++ b/firmware/stage_1/stage_1.uvproj @@ -0,0 +1,314 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd"> + + <SchemaVersion>1.1</SchemaVersion> + + <Header>### uVision Project, (C) Keil Software</Header> + + <Targets> + <Target> + <TargetName>Target 1</TargetName> + <ToolsetNumber>0x2</ToolsetNumber> + <ToolsetName>166/167</ToolsetName> + <TargetOption> + <TargetCommonOption> + <Device>ST10F269</Device> + <Vendor>STMicroelectronics</Vendor> + <Cpu>IRAM (0xF600 - 0xFDFF) XRAM (0xC000-0xDFFF) XRAM2(0xE000-0xE7FF) IROM(0-0x3FFFF) ICAN(0xE800-0xEFFF) CLOCK(40000000) MOD167</Cpu> + <FlashUtilSpec></FlashUtilSpec> + <StartupFile>"LIB\START167.A66" ("C16x/ST10 Startup Code")</StartupFile> + <FlashDriverDll></FlashDriverDll> + <DeviceId>3236</DeviceId> + <RegisterFile>REGST10F269.H</RegisterFile> + <MemoryEnv></MemoryEnv> + <Cmp></Cmp> + <Asm></Asm> + <Linker></Linker> + <OHString></OHString> + <InfinionOptionDll></InfinionOptionDll> + <SLE66CMisc></SLE66CMisc> + <SLE66AMisc></SLE66AMisc> + <SLE66LinkerMisc></SLE66LinkerMisc> + <SFDFile></SFDFile> + <bCustSvd>0</bCustSvd> + <UseEnv>0</UseEnv> + <BinPath></BinPath> + <IncludePath></IncludePath> + <LibPath></LibPath> + <RegisterFilePath></RegisterFilePath> + <DBRegisterFilePath></DBRegisterFilePath> + <TargetStatus> + <Error>0</Error> + <ExitCodeStop>0</ExitCodeStop> + <ButtonStop>0</ButtonStop> + <NotGenerated>0</NotGenerated> + <InvalidFlash>1</InvalidFlash> + </TargetStatus> + <OutputDirectory>.\Objects\</OutputDirectory> + <OutputName>stage_1</OutputName> + <CreateExecutable>1</CreateExecutable> + <CreateLib>0</CreateLib> + <CreateHexFile>1</CreateHexFile> + <DebugInformation>1</DebugInformation> + <BrowseInformation>1</BrowseInformation> + <ListingPath>.\Listings\</ListingPath> + <HexFormatSelection>1</HexFormatSelection> + <Merge32K>0</Merge32K> + <CreateBatchFile>0</CreateBatchFile> + <BeforeCompile> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopU1X>0</nStopU1X> + <nStopU2X>0</nStopU2X> + </BeforeCompile> + <BeforeMake> + <RunUserProg1>0</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name></UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopB1X>0</nStopB1X> + <nStopB2X>0</nStopB2X> + </BeforeMake> + <AfterMake> + <RunUserProg1>1</RunUserProg1> + <RunUserProg2>0</RunUserProg2> + <UserProg1Name>Z:\mnt\shared-ntfs\bin\win\hex2bin.exe Z:\mnt\shared-ntfs\sw\firmware\stage_1\Objects\stage_1.H86</UserProg1Name> + <UserProg2Name></UserProg2Name> + <UserProg1Dos16Mode>0</UserProg1Dos16Mode> + <UserProg2Dos16Mode>0</UserProg2Dos16Mode> + <nStopA1X>2</nStopA1X> + <nStopA2X>0</nStopA2X> + </AfterMake> + <SelectedForBatchBuild>0</SelectedForBatchBuild> + <SVCSIdString></SVCSIdString> + </TargetCommonOption> + <CommonProperty> + <UseCPPCompiler>0</UseCPPCompiler> + <RVCTCodeConst>0</RVCTCodeConst> + <RVCTZI>0</RVCTZI> + <RVCTOtherData>0</RVCTOtherData> + <ModuleSelection>0</ModuleSelection> + <IncludeInBuild>1</IncludeInBuild> + <AlwaysBuild>0</AlwaysBuild> + <GenerateAssemblyFile>0</GenerateAssemblyFile> + <AssembleAssemblyFile>0</AssembleAssemblyFile> + <PublicsOnly>0</PublicsOnly> + <StopOnExitCode>3</StopOnExitCode> + <CustomArgument></CustomArgument> + <IncludeLibraryModules></IncludeLibraryModules> + <ComprImg>1</ComprImg> + </CommonProperty> + <DllOption> + <SimDllName>S166.DLL</SimDllName> + <SimDllArguments>-cEXTMAC</SimDllArguments> + <SimDlgDll>D167.DLL</SimDlgDll> + <SimDlgDllArguments>-p269</SimDlgDllArguments> + <TargetDllName>S166.DLL</TargetDllName> + <TargetDllArguments>-cEXTMAC</TargetDllArguments> + <TargetDlgDll>T167.DLL</TargetDlgDll> + <TargetDlgDllArguments>-p269</TargetDlgDllArguments> + </DllOption> + <DebugOption> + <OPTHX> + <HexSelection>1</HexSelection> + <HexRangeLowAddress>0</HexRangeLowAddress> + <HexRangeHighAddress>0</HexRangeHighAddress> + <HexOffset>0</HexOffset> + <Oh166RecLen>16</Oh166RecLen> + </OPTHX> + <Simulator> + <UseSimulator>1</UseSimulator> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>1</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>1</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <LimitSpeedToRealTime>0</LimitSpeedToRealTime> + <RestoreSysVw>1</RestoreSysVw> + </Simulator> + <Target> + <UseTarget>0</UseTarget> + <LoadApplicationAtStartup>1</LoadApplicationAtStartup> + <RunToMain>0</RunToMain> + <RestoreBreakpoints>1</RestoreBreakpoints> + <RestoreWatchpoints>1</RestoreWatchpoints> + <RestoreMemoryDisplay>1</RestoreMemoryDisplay> + <RestoreFunctions>0</RestoreFunctions> + <RestoreToolbox>1</RestoreToolbox> + <RestoreTracepoints>1</RestoreTracepoints> + <RestoreSysVw>1</RestoreSysVw> + </Target> + <RunDebugAfterBuild>0</RunDebugAfterBuild> + <TargetSelection>-1</TargetSelection> + <SimDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + </SimDlls> + <TargetDlls> + <CpuDll></CpuDll> + <CpuDllArguments></CpuDllArguments> + <PeripheralDll></PeripheralDll> + <PeripheralDllArguments></PeripheralDllArguments> + <InitializationFile></InitializationFile> + <Driver></Driver> + </TargetDlls> + </DebugOption> + <Utilities> + <Flash1> + <UseTargetDll>0</UseTargetDll> + <UseExternalTool>0</UseExternalTool> + <RunIndependent>0</RunIndependent> + <UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging> + <Capability>0</Capability> + <DriverSelection>-1</DriverSelection> + </Flash1> + <bUseTDR>0</bUseTDR> + <Flash2></Flash2> + <Flash3></Flash3> + <Flash4></Flash4> + <pFcarmOut></pFcarmOut> + <pFcarmGrp></pFcarmGrp> + <pFcArmRoot></pFcArmRoot> + <FcArmLst>0</FcArmLst> + </Utilities> + <Target166> + <Target166Misc> + <MemoryModel>1</MemoryModel> + <RTOS>0</RTOS> + <NearData>6</NearData> + <iData>65535</iData> + <sData>65535</sData> + <bData>65535</bData> + <Mod167>1</Mod167> + <ModV2>0</ModV2> + <UseOnChipRom>1</UseOnChipRom> + <UseOnChipXramCan>1</UseOnChipXramCan> + <UseOnChipXram2>1</UseOnChipXram2> + <NearRamMemory>0</NearRamMemory> + <NearRomMemory>0</NearRomMemory> + <UseIrom2>0</UseIrom2> + <UseIrom3>0</UseIrom3> + <UseXram3>0</UseXram3> + <OnChipMemories> + <Ocm1> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm1> + <Ocm2> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm2> + <Ocm3> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm3> + <Ocm4> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm4> + <Ocm5> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm5> + <Ocm6> + <Type>0</Type> + <StartAddress>0x0</StartAddress> + <Size>0x0</Size> + </Ocm6> + </OnChipMemories> + </Target166Misc> + <C166> + <Optimize>6</Optimize> + <SpeedSize>1</SpeedSize> + <RegisterColoring>0</RegisterColoring> + <UseStaticMemory>0</UseStaticMemory> + <WarningLevel>2</WarningLevel> + <AliasChecking>1</AliasChecking> + <VariablesInOrder>0</VariablesInOrder> + <CharAsUnsignedChar>0</CharAsUnsignedChar> + <NoDppSave>1</NoDppSave> + <Float64>0</Float64> + <SaveTempVar>0</SaveTempVar> + <ReorderInstruction>0</ReorderInstruction> + <VariousControls> + <MiscControls>MOD167</MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </C166> + <Ec166> + <WarningLevel>2</WarningLevel> + <UnsignedChar>0</UnsignedChar> + <VariousControls> + <MiscControls></MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath></IncludePath> + </VariousControls> + </Ec166> + <A166> + <UseMPL>1</UseMPL> + <CaseSensitiveSymbols>0</CaseSensitiveSymbols> + <VariousControls> + <MiscControls>MOD167</MiscControls> + <Define></Define> + <Undefine></Undefine> + <IncludePath>..\..\firmware\include</IncludePath> + </VariousControls> + </A166> + <L166> + <UseLinkFile>0</UseLinkFile> + <LinkerCmdFile></LinkerCmdFile> + <LinkOnly>0</LinkOnly> + <UseTargetSet>1</UseTargetSet> + <DppUsage>0</DppUsage> + <nDataSelection>2</nDataSelection> + <nConstSelection>1</nConstSelection> + <NearDataString></NearDataString> + <NearConstString></NearConstString> + <iStartStopString></iStartStopString> + <InterruptVectorAddress></InterruptVectorAddress> + <WarningLevel>2</WarningLevel> + <DisableWarningNumbers></DisableWarningNumbers> + <Assign></Assign> + <Registerbank></Registerbank> + <Reserve></Reserve> + <MiscControls></MiscControls> + <UserClasses></UserClasses> + <UserSection></UserSection> + </L166> + </Target166> + </TargetOption> + <Groups> + <Group> + <GroupName>stage_1</GroupName> + <Files> + <File> + <FileName>stage_1.a66</FileName> + <FileType>2</FileType> + <FilePath>.\stage_1.a66</FilePath> + </File> + </Files> + </Group> + </Groups> + </Target> + </Targets> + +</Project> diff --git a/main.cpp b/main.cpp new file mode 100755 index 0000000..2d25318 --- /dev/null +++ b/main.cpp @@ -0,0 +1,219 @@ +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> /* strerror() */ +#include <stdint.h> + +#include <iostream> +#include <csignal> +#include <string> +#include <sstream> +#include <vector> +#include <memory> + +#include "ExitCodes.hpp" +#include "Logger.hpp" +#include "ExitException.hpp" +#include "UserConfig.hpp" +#include "SerialPortFactory.hpp" +#include "SerialPort.hpp" +#include "Mcu.hpp" + +using std::cout; +using std::endl; +using std::string; +using std::ostringstream; +using std::vector; +using std::unique_ptr; + +void opSpeeds(CUserConfig & uc); +void opRead(CUserConfig & uc, CMcu & mcu); +void opErase(CUserConfig & uc, CMcu & mcu); +void opWrite(CUserConfig & uc, CMcu & mcu); + +vector<uint8_t> readDataFile(const string fpath); +void writeDataFile(const string fpath, vector<uint8_t> data); + +// Global variable to be accessed in signal handler +unique_ptr<CSerialPort> sp; + +// Uvolnime zdroje pri ukonceni na signal +void +signalHandler(int dummy) +{ + CLogger::info("Exiting on signal"); + sp->close(); + exit(EXIT_MAIN_SIGNAL); +} + +int +main(int argc, char **argv) +{ + // Set signal handler + signal(SIGINT, signalHandler); + + CSerialPortFactory serialPortFactory; + sp = serialPortFactory.getSerialPort(); + + try { + // Parse user command line configuration + CUserConfig uc(argc, argv); + // Configure logging + if (uc.isVerboseModeSet()) + CLogger::setLogInfo(true); + // Execute selected operation + if (uc.isHelpSet()) { + cout << uc.getHelpMessage(string(argv[0])); + } else if (uc.isVersionSet()) { + cout << PROGRAM_NAME << " " << PROGRAM_VERSION << endl; + } else if (uc.isSpeedsSet()) { + opSpeeds(uc); + } else if (uc.isIdentSet() || uc.isEraseSet() || uc.isReadSet() || uc.isWriteSet()) { + // Open serial port + sp->open(uc.getSerialPortName(), uc.getSerialSpeed()); + // Get MCU model + unique_ptr<CMcu> mcu(new CMcu(*sp, uc.getMcuFrequency())); + // Execute requested operation + if (!uc.isIdentSet()) { + if (uc.isReadSet()) + opRead(uc, *mcu); + else if (uc.isEraseSet()) + opErase(uc, *mcu); + else if (uc.isWriteSet()) + opWrite(uc, *mcu); + } else { + cout << mcu->ident() << endl; + } + } else { + CLogger::error("No operation requested. To get help type: " + string(argv[0]) + " help" , EXIT_MAIN_NOOP); + } + + sp->close(); + return 0; + } catch (CExitException & e) { + return e.getReturnValue(); + } +} + +void +opSpeeds(CUserConfig & uc) +{ + + string s = sp->getSpeeds(uc.getSerialPortName()); + cout << "Baudrates supported by serial port " << uc.getSerialPortName() << ":" << endl; + cout << s; +} + +void +opRead(CUserConfig & uc, CMcu & mcu) +{ + CLogger::info("Reading memory"); + + int rl = uc.getReadLength(); + vector<uint8_t> r; + + if (rl == -1) + r = mcu.read(uc.isPrintProgressSet()); + else + r = mcu.read(rl, uc.isPrintProgressSet()); + // Write data file musi dostat spravnu hodnotu + writeDataFile(uc.getReadOutputFname(), r); +} + +void +opErase(CUserConfig & uc, CMcu & mcu) +{ + if (uc.getEraseBlockList().size() != 0) { + CLogger::info("Erasing memory by blocks"); + mcu.erase(uc.getEraseBlockList()); + } else { + CLogger::info("Erasing whole memory"); + mcu.erase(); + } +} + +void +opWrite(CUserConfig & uc, CMcu & mcu) +{ + vector<uint8_t> data; + + data = readDataFile(uc.getWriteInputFname()); + + if (uc.getWriteEraseWholeMemory()) { + CLogger::info("Erasing whole memory"); + mcu.erase(); + } else { + CLogger::info("Erasing memory by blocks"); + mcu.erase(0, data.size() - 1); + } + + CLogger::info("Writing memory"); + mcu.write(data, uc.isPrintProgressSet()); + + if (uc.getWriteCheckByRead()) { + CLogger::info("Checking result of write operation by reading"); + + vector<uint8_t> rdata = mcu.read(data.size()); + for (size_t i = 0; i < data.size(); i++) { + if (rdata[i] != data[i]) + CLogger::error("Write operation unsucessful", EXIT_MAIN_PROG_VERIFY); + } + + CLogger::info("Write operation was successful"); + } +} + + +vector<uint8_t> +readDataFile(const string fpath) +{ + FILE *f; + size_t size; +#ifdef UNIX + char mode[3] = "r"; +#else + char mode[3] = "rb"; +#endif + + if ((f = fopen(fpath.c_str(), mode)) == NULL) + CLogger::error("Cannot open file for reading: " + fpath, EXIT_MAIN_FILE_INOUT); + + // Determine file size + fseek(f, 0, SEEK_END); + size = ftell(f); + fseek(f, 0, SEEK_SET); + + vector<uint8_t> data; + data.resize(size); + + size_t r = fread(data.data(), sizeof(uint8_t), size, f); + fclose(f); + + if (r != size) + CLogger::error("Cannot read from file: " + fpath, EXIT_MAIN_FILE_INOUT); + + return data; +} + +void +writeDataFile(const string fpath, vector<uint8_t> data) +{ + FILE *out; +#ifdef UNIX + char mode[3] = "w"; +#else + char mode[3] = "wb"; +#endif + + if ((out = fopen(fpath.c_str(), mode)) == NULL) { + ostringstream os; + os << "Cannot open file for writing: " << fpath << ": " << strerror(errno); + CLogger::error(os.str(), EXIT_MAIN_FILE_INOUT); + } + + size_t r = fwrite(data.data(), sizeof(uint8_t), data.size(), out); + fclose(out); + + if (r != data.size()) + CLogger::error("Cannot write to file: " + fpath, EXIT_MAIN_FILE_INOUT); +} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100755 index 0000000..a457b14 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,41 @@ +set (TestDataDir "${CMAKE_SOURCE_DIR}/tests") + +add_without_config_test (NoOperation "" 1) +add_normal_test (IdentifyMcu "ident" 0) +# Frequency option format. Budeme testovat len format, ostatne nemame +# ako automaticky, pretoze sa to testuje len pri nahravani firmwaru. +add_normal_test (FrequencyFormat1 "ident -f a" 2) +add_normal_test (FrequencyFormat2 "ident -f 2a" 2) +add_normal_test (FrequencyFormat3 "ident -f 2-2" 2) +add_normal_test (FrequencyFormat4 "ident -f 22" 0) +add_normal_test (FrequencyFormat5 "ident -f 22.2" 0) +add_normal_test (FrequencyFormat6 "ident -f 2a2,2" 2) +add_normal_test (FrequencyFormat7 "ident -f 2a2.2" 2) +add_normal_test (FrequencyFormat8 "ident -f -33" 2) +add_normal_test (FrequencyFormat9 "ident -f 0" 2) + +add_normal_test (UnknownOperation "XUnknownOperationX" 2) +add_write_test (MissingInputFile "" 2 "" "") +add_read_test (MissingOutputFile "" 2 "") +add_erase_test (UnknownEraseOption "-?" 2 "" "") +add_read_test (UnknownReadOption "-? read.bin" 2 "") +add_write_test (UnknownWriteOption "-? write.bin" 2 "" "") +add_erase_test (MissingValueForOption1 "-p" 2 "" "") +add_erase_test (MissingValueForOption2 "-s" 2 "" "") +add_erase_test (MissingValueForOption3 "-b" 2 "" "") +add_read_test (ReadOptionFormat "-n -1" 2 "") +add_normal_test (ReadMultipleOutputFilenames "read read.bin read2.bin" 2) +add_normal_test (WriteMultipleInputFilenames "write random.bin random2.bin" 2) +add_read_test (NonExistentSerialPort "-p XNonExistentSerialPortNameX" 7 "read.bin") +add_write_test (CanNotOpenInputFile "" 3 "" "XNonExistentInputFileX") + +# Try to open directory instead of unreadable file +add_normal_test (CanNotOpenOutputFile "read -n 1 SerialPort" 3) +add_erase_test (EraseOptionFormat1 "-b a" 2 "" "") +add_erase_test (EraseOptionFormat2 "-b 1.2" 2 "" "") +add_erase_test (EraseOptionFormat3 "-b 1,a" 2 "" "") +add_erase_test (EraseOptionFormat4 "-b ,1,2" 2 "" "") +add_erase_test (EraseOptionFormat5 "-b 1,2," 2 "" "") +add_erase_test (EraseOptionFormat6 "-b 1,,2" 2 "" "") +add_erase_test (EraseOptionFormat7 "-b -1,2,4,5,-1654" 6 "" "") +add_erase_test (EraseOptionFormat8 "-b 1a" 2 "" "") diff --git a/tests/erase.cmake b/tests/erase.cmake new file mode 100755 index 0000000..1c27cfd --- /dev/null +++ b/tests/erase.cmake @@ -0,0 +1,15 @@ +include (${TestFunctions}) + +if (NOT "${TestFile}" STREQUAL "") + set (WriteArgs "write ${TestConfigOptions} ${TestFile}") + exec_test ("${WriteArgs}" 0) +endif () + +set (TestArgs "erase ${TestConfigOptions} ${TestArgs}") +exec_test ("${TestArgs}" ${TestExitCode}) + +if (NOT "${TestFile}" STREQUAL "" AND NOT "${TestBlessedFile}" STREQUAL "") + set (ReadArgs "read ${TestConfigOptions} erase_read.bin") + exec_test ("${ReadArgs}" 0) + compare_files (erase_read.bin ${TestBlessedFile}) +endif () diff --git a/tests/functions.cmake b/tests/functions.cmake new file mode 100755 index 0000000..e902fa6 --- /dev/null +++ b/tests/functions.cmake @@ -0,0 +1,78 @@ +macro (M_SET_CONFIG_OPTIONS) + if (${SerialPortSpeed}) + set (CONFIG_OPTIONS "${CONFIG_OPTIONS} -s ${SerialPortSpeed}") + endif () + if (${DefaultSerialPortName}) + set (CONFIG_OPTIONS "${CONFIG_OPTIONS} -p ${DefaultSerialPortName}") + endif () + if (NOT "${McuCpuFrequency}" STREQUAL "") + set (CONFIG_OPTIONS "${CONFIG_OPTIONS} -f ${McuCpuFrequency}") + endif () +endmacro () + +macro (M_ADD_TEST SCRIPT) + add_test(NAME ${TestNamespace}${NAME} + CONFIGURATIONS ${TestConfigurations} + COMMAND ${CMAKE_COMMAND} + -DTestFunctions=${CMAKE_SOURCE_DIR}/tests/functions.cmake + -DTestArgs=${ARGS} + -DTestConfigOptions=${CONFIG_OPTIONS} + -DTestExitCode=${EXITCODE} + -DTestBlessedFile=${BLESSEDFILE} + -DTestFile=${FILE} + -P ${SCRIPT} + ) +endmacro () + + +function (ADD_WITHOUT_CONFIG_TEST NAME ARGS EXITCODE) + m_add_test (${CMAKE_SOURCE_DIR}/tests/other_operations.cmake) +endfunction () + +function (ADD_NORMAL_TEST NAME ARGS EXITCODE) + m_set_config_options () + m_add_test (${CMAKE_SOURCE_DIR}/tests/other_operations.cmake) +endfunction () + +function (ADD_ERASE_TEST NAME ARGS EXITCODE BLESSEDFILE FILE) + m_set_config_options () + m_add_test (${CMAKE_SOURCE_DIR}/tests/erase.cmake) +endfunction () + +function (ADD_WRITE_TEST NAME ARGS EXITCODE BLESSEDFILE FILE) + m_set_config_options () + m_add_test (${CMAKE_SOURCE_DIR}/tests/write.cmake) +endfunction () + +function (ADD_READ_TEST NAME ARGS EXITCODE FILE) + m_set_config_options () + m_add_test (${CMAKE_SOURCE_DIR}/tests/read.cmake) +endfunction () + + +# ------------------------------------------------------- + + +function (EXEC_TEST ARGS EXITCODE) + string (REPLACE " " ";" ARGS_LIST "${ARGS}") + execute_process ( + COMMAND ${CMAKE_BINARY_DIR}/main ${ARGS_LIST} + RESULT_VARIABLE MAIN_RESULT + TIMEOUT 120 + ) + if (NOT ${MAIN_RESULT} EQUAL ${EXITCODE}) + message(FATAL_ERROR "Unexpected exit code ${MAIN_RESULT}, expected ${EXITCODE}") + endif() + set (RETVAL ${MAIN_RESULT} PARENT_SCOPE) +endfunction () + + +function(COMPARE_FILES F1 F2) + execute_process ( + COMMAND ${CMAKE_COMMAND} -E compare_files ${F1} ${F2} + RESULT_VARIABLE CMP_RESULT + ) + if(CMP_RESULT) + message(FATAL_ERROR "Files do not match: ${F1} ${F2}") + endif() +endfunction() diff --git a/tests/other_operations.cmake b/tests/other_operations.cmake new file mode 100755 index 0000000..6c47577 --- /dev/null +++ b/tests/other_operations.cmake @@ -0,0 +1,5 @@ +include (${TestFunctions}) + +set (TestArgs "${TestArgs} ${TestConfigOptions}") + +exec_test ("${TestArgs}" ${TestExitCode}) diff --git a/tests/read.cmake b/tests/read.cmake new file mode 100755 index 0000000..4f24101 --- /dev/null +++ b/tests/read.cmake @@ -0,0 +1,12 @@ +include (${TestFunctions}) + +set (TestArgs "read ${TestConfigOptions} ${TestArgs}") +if (NOT "${TestFile}" STREQUAL "") + set (TestArgs "${TestArgs} read.bin") +endif () + +exec_test ("${TestArgs}" ${TestExitCode}) + +if (NOT "${TestFile}" STREQUAL "" AND ${RETVAL} EQUAL 0) + compare_files (read.bin ${TestFile}) +endif () diff --git a/tests/st10f168/CMakeLists.txt b/tests/st10f168/CMakeLists.txt new file mode 100755 index 0000000..aefd7c2 --- /dev/null +++ b/tests/st10f168/CMakeLists.txt @@ -0,0 +1,46 @@ +include (${CMAKE_SOURCE_DIR}/tests/functions.cmake) + +set (TestConfigurations st10f168) +set (SerialPortSpeed 57600) +set (McuCpuFrequency 22.1) +set (TestNamespace 168_) + +add_without_config_test (MissingFrequencyOptionForIdent "ident -s ${SerialPortSpeed}" 0) +add_without_config_test (MissingFrequencyOption "erase -s ${SerialPortSpeed}" 6) + +include (${CMAKE_SOURCE_DIR}/tests/CMakeLists.txt) + +set (TestDataDir "${CMAKE_SOURCE_DIR}/tests/st10f168/erase") + +add_erase_test (EraseWhole "" 0 ${TestDataDir}/ok_ones ${TestDataDir}/zeros) +add_erase_test (EraseBlock0 "-b 0" 0 ${TestDataDir}/ok_b0_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock1 "-b 1" 0 ${TestDataDir}/ok_b1_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock2 "-b 2" 0 ${TestDataDir}/ok_b2_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock3 "-b 3" 0 ${TestDataDir}/ok_b3_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlocks023 "-b 3,0,2" 0 ${TestDataDir}/ok_b023_erased ${TestDataDir}/zeros) + +set (TestDataDir "${CMAKE_SOURCE_DIR}/tests/st10f168/write") + +add_write_test (WriteWhole1 "" 0 ${TestDataDir}/random ${TestDataDir}/random) +add_write_test (WriteZeros "" 0 ${TestDataDir}/zeros ${TestDataDir}/zeros) +add_write_test (Write0B "-e" 6 ${TestDataDir}/ok_ones ${TestDataDir}/0B) +add_write_test (Write1B "" 0 ${TestDataDir}/ok_1B ${TestDataDir}/1B) +# Tests of automatic block erasing +add_write_test (WriteZeros2 "" 0 ${TestDataDir}/zeros ${TestDataDir}/zeros) +add_write_test (Write16K+Progress "-g" 0 ${TestDataDir}/ok_16K ${TestDataDir}/16K) +add_write_test (Write16K_1B "" 0 ${TestDataDir}/ok_16K_1B ${TestDataDir}/16K_1B) +add_write_test (Write64K "" 0 ${TestDataDir}/ok_64K ${TestDataDir}/64K) +add_write_test (Write64K_1B "" 0 ${TestDataDir}/ok_64K_1B ${TestDataDir}/64K_1B) +add_write_test (Write160K "" 0 ${TestDataDir}/ok_160K ${TestDataDir}/160K) +add_write_test (Write160K_1B+Progress "-g" 0 ${TestDataDir}/ok_160K_1B ${TestDataDir}/160K_1B) +# Test of write over size and erasing blocks with mas 0x00 (no block) +add_write_test (Write256K_1B "" 6 ${TestDataDir}/ok_160K_1B ${TestDataDir}/256K_1B) + +set (TestDataDir "${CMAKE_SOURCE_DIR}/tests/st10f168/read") + +add_write_test (ReadWriteRandom "" 0 ${TestDataDir}/random ${TestDataDir}/random) +add_read_test (Read0B "-n 0" 6 "X") +add_read_test (Read256K_1B "-n 262145" 6 "X") +add_read_test (Read1B+Progress "-g -n 1" 0 ${TestDataDir}/ok_1B) +add_read_test (Read100003B "-n 100003" 0 ${TestDataDir}/ok_100003B) +add_read_test (Read262144B+Progress "-g -n 262144" 0 ${TestDataDir}/ok_262144B) diff --git a/tests/st10f168/erase/ok_b023_erased b/tests/st10f168/erase/ok_b023_erased new file mode 100755 index 0000000..d96179f --- /dev/null +++ b/tests/st10f168/erase/ok_b023_erased @@ -0,0 +1 @@ + diff --git a/tests/st10f168/erase/ok_b0_erased b/tests/st10f168/erase/ok_b0_erased new file mode 100755 index 0000000..95e0f78 --- /dev/null +++ b/tests/st10f168/erase/ok_b0_erased @@ -0,0 +1 @@ + diff --git a/tests/st10f168/erase/ok_b1_erased b/tests/st10f168/erase/ok_b1_erased Binary files differnew file mode 100755 index 0000000..7f23cd4 --- /dev/null +++ b/tests/st10f168/erase/ok_b1_erased diff --git a/tests/st10f168/erase/ok_b2_erased b/tests/st10f168/erase/ok_b2_erased Binary files differnew file mode 100755 index 0000000..37b9128 --- /dev/null +++ b/tests/st10f168/erase/ok_b2_erased diff --git a/tests/st10f168/erase/ok_b3_erased b/tests/st10f168/erase/ok_b3_erased Binary files differnew file mode 100755 index 0000000..252a4b1 --- /dev/null +++ b/tests/st10f168/erase/ok_b3_erased diff --git a/tests/st10f168/erase/ok_ones b/tests/st10f168/erase/ok_ones new file mode 100755 index 0000000..7145947 --- /dev/null +++ b/tests/st10f168/erase/ok_ones @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f168/erase/zeros b/tests/st10f168/erase/zeros Binary files differnew file mode 100755 index 0000000..6d23118 --- /dev/null +++ b/tests/st10f168/erase/zeros diff --git a/tests/st10f168/read/ok_100003B b/tests/st10f168/read/ok_100003B Binary files differnew file mode 100755 index 0000000..23885fd --- /dev/null +++ b/tests/st10f168/read/ok_100003B diff --git a/tests/st10f168/read/ok_1B b/tests/st10f168/read/ok_1B new file mode 100755 index 0000000..080c324 --- /dev/null +++ b/tests/st10f168/read/ok_1B @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f168/read/ok_262144B b/tests/st10f168/read/ok_262144B Binary files differnew file mode 100755 index 0000000..2f8fd38 --- /dev/null +++ b/tests/st10f168/read/ok_262144B diff --git a/tests/st10f168/read/random b/tests/st10f168/read/random Binary files differnew file mode 100755 index 0000000..2f8fd38 --- /dev/null +++ b/tests/st10f168/read/random diff --git a/tests/st10f168/write/0B b/tests/st10f168/write/0B new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/tests/st10f168/write/0B diff --git a/tests/st10f168/write/160K b/tests/st10f168/write/160K Binary files differnew file mode 100755 index 0000000..9f1ca19 --- /dev/null +++ b/tests/st10f168/write/160K diff --git a/tests/st10f168/write/160K_1B b/tests/st10f168/write/160K_1B Binary files differnew file mode 100755 index 0000000..897a312 --- /dev/null +++ b/tests/st10f168/write/160K_1B diff --git a/tests/st10f168/write/16K b/tests/st10f168/write/16K Binary files differnew file mode 100755 index 0000000..8642f9c --- /dev/null +++ b/tests/st10f168/write/16K diff --git a/tests/st10f168/write/16K_1B b/tests/st10f168/write/16K_1B Binary files differnew file mode 100755 index 0000000..bd3999a --- /dev/null +++ b/tests/st10f168/write/16K_1B diff --git a/tests/st10f168/write/1B b/tests/st10f168/write/1B new file mode 100755 index 0000000..79b7e4b --- /dev/null +++ b/tests/st10f168/write/1B @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f168/write/256K_1B b/tests/st10f168/write/256K_1B Binary files differnew file mode 100755 index 0000000..a17fc91 --- /dev/null +++ b/tests/st10f168/write/256K_1B diff --git a/tests/st10f168/write/64K b/tests/st10f168/write/64K Binary files differnew file mode 100755 index 0000000..6121083 --- /dev/null +++ b/tests/st10f168/write/64K diff --git a/tests/st10f168/write/64K_1B b/tests/st10f168/write/64K_1B Binary files differnew file mode 100755 index 0000000..c7a82fc --- /dev/null +++ b/tests/st10f168/write/64K_1B diff --git a/tests/st10f168/write/ok_160K b/tests/st10f168/write/ok_160K Binary files differnew file mode 100755 index 0000000..45973ac --- /dev/null +++ b/tests/st10f168/write/ok_160K diff --git a/tests/st10f168/write/ok_160K_1B b/tests/st10f168/write/ok_160K_1B Binary files differnew file mode 100755 index 0000000..16380d7 --- /dev/null +++ b/tests/st10f168/write/ok_160K_1B diff --git a/tests/st10f168/write/ok_16K b/tests/st10f168/write/ok_16K Binary files differnew file mode 100755 index 0000000..045c3b2 --- /dev/null +++ b/tests/st10f168/write/ok_16K diff --git a/tests/st10f168/write/ok_16K_1B b/tests/st10f168/write/ok_16K_1B Binary files differnew file mode 100755 index 0000000..6494471 --- /dev/null +++ b/tests/st10f168/write/ok_16K_1B diff --git a/tests/st10f168/write/ok_1B b/tests/st10f168/write/ok_1B new file mode 100755 index 0000000..6b839e2 --- /dev/null +++ b/tests/st10f168/write/ok_1B @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f168/write/ok_64K b/tests/st10f168/write/ok_64K Binary files differnew file mode 100755 index 0000000..d27151e --- /dev/null +++ b/tests/st10f168/write/ok_64K diff --git a/tests/st10f168/write/ok_64K_1B b/tests/st10f168/write/ok_64K_1B Binary files differnew file mode 100755 index 0000000..7ea0894 --- /dev/null +++ b/tests/st10f168/write/ok_64K_1B diff --git a/tests/st10f168/write/ok_ones b/tests/st10f168/write/ok_ones new file mode 100755 index 0000000..7145947 --- /dev/null +++ b/tests/st10f168/write/ok_ones @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f168/write/random b/tests/st10f168/write/random Binary files differnew file mode 100755 index 0000000..c362624 --- /dev/null +++ b/tests/st10f168/write/random diff --git a/tests/st10f168/write/zeros b/tests/st10f168/write/zeros Binary files differnew file mode 100755 index 0000000..6d23118 --- /dev/null +++ b/tests/st10f168/write/zeros diff --git a/tests/st10f269/CMakeLists.txt b/tests/st10f269/CMakeLists.txt new file mode 100755 index 0000000..677259c --- /dev/null +++ b/tests/st10f269/CMakeLists.txt @@ -0,0 +1,53 @@ +include (${CMAKE_SOURCE_DIR}/tests/functions.cmake) + +set (TestConfigurations st10f269) +set (SerialPortSpeed 230400) +set (TestNamespace 269_) + +include (${CMAKE_SOURCE_DIR}/tests/CMakeLists.txt) + +set (TestDataDir "${CMAKE_SOURCE_DIR}/tests/st10f269/erase") + +add_normal_test (IgnoreFrequencyOpt "ident -f 22.1" 0) + +add_erase_test (EraseWhole "" 0 ${TestDataDir}/ok_ones ${TestDataDir}/zeros) +add_erase_test (EraseBlock0 "-b 0" 0 ${TestDataDir}/ok_b0_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock1 "-b 1" 0 ${TestDataDir}/ok_b1_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock2 "-b 2" 0 ${TestDataDir}/ok_b2_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock3 "-b 3" 0 ${TestDataDir}/ok_b3_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock4 "-b 4" 0 ${TestDataDir}/ok_b4_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock5 "-b 5" 0 ${TestDataDir}/ok_b5_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlock6 "-b 6" 0 ${TestDataDir}/ok_b6_erased ${TestDataDir}/zeros) +add_erase_test (EraseBlocks1246 "-b 2,4,1,6" 0 ${TestDataDir}/ok_b1246_erased ${TestDataDir}/zeros) + +set (TestDataDir "${CMAKE_SOURCE_DIR}/tests/st10f269/write") + +add_write_test (WriteWhole1 "" 0 ${TestDataDir}/random ${TestDataDir}/random) +add_write_test (WriteZeros "" 0 ${TestDataDir}/zeros ${TestDataDir}/zeros) +add_write_test (Write0B "-e" 6 ${TestDataDir}/ok_ones ${TestDataDir}/0B) +add_write_test (Write1B "" 0 ${TestDataDir}/ok_1B ${TestDataDir}/1B) +# Tests of automatic block erasing +add_write_test (WriteZeros2 "" 0 ${TestDataDir}/zeros ${TestDataDir}/zeros) +add_write_test (Write16K "" 0 ${TestDataDir}/ok_16K ${TestDataDir}/16K) +add_write_test (Write16K_1B "" 0 ${TestDataDir}/ok_16K_1B ${TestDataDir}/16K_1B) +add_write_test (Write24K "" 0 ${TestDataDir}/ok_24K ${TestDataDir}/24K) +add_write_test (Write24K_1B "" 0 ${TestDataDir}/ok_24K_1B ${TestDataDir}/24K_1B) +add_write_test (Write32K+Progress "-g" 0 ${TestDataDir}/ok_32K ${TestDataDir}/32K) +add_write_test (Write32K_1B "" 0 ${TestDataDir}/ok_32K_1B ${TestDataDir}/32K_1B) +add_write_test (Write64K "" 0 ${TestDataDir}/ok_64K ${TestDataDir}/64K) +add_write_test (Write64K_1B "" 0 ${TestDataDir}/ok_64K_1B ${TestDataDir}/64K_1B) +add_write_test (Write128K "" 0 ${TestDataDir}/ok_128K ${TestDataDir}/128K) +add_write_test (Write128K_1B+Progress "-g" 0 ${TestDataDir}/ok_128K_1B ${TestDataDir}/128K_1B) +add_write_test (Write192K "" 0 ${TestDataDir}/ok_192K ${TestDataDir}/192K) +add_write_test (Write192K_1B "" 0 ${TestDataDir}/ok_192K_1B ${TestDataDir}/192K_1B) +# Test of write over size and erasing blocks with mas 0x00 (no block) +add_write_test (Write256K_1B "" 6 ${TestDataDir}/ok_192K_1B ${TestDataDir}/256K_1B) + +set (TestDataDir "${CMAKE_SOURCE_DIR}/tests/st10f269/read") + +add_write_test (ReadWriteRandom "" 0 ${TestDataDir}/random ${TestDataDir}/random) +add_read_test (Read0B "-n 0" 6 "X") +add_read_test (Read256K_1B "-n 262145" 6 "X") +add_read_test (Read1B+Progress "-g -n 1" 0 ${TestDataDir}/ok_1B) +add_read_test (Read100003B "-n 100003" 0 ${TestDataDir}/ok_100003B) +add_read_test (Read262144B+Progress "-g -n 262144" 0 ${TestDataDir}/ok_262144B) diff --git a/tests/st10f269/erase/ok_b0_erased b/tests/st10f269/erase/ok_b0_erased new file mode 100755 index 0000000..95e0f78 --- /dev/null +++ b/tests/st10f269/erase/ok_b0_erased @@ -0,0 +1 @@ + diff --git a/tests/st10f269/erase/ok_b1246_erased b/tests/st10f269/erase/ok_b1246_erased Binary files differnew file mode 100755 index 0000000..0c7ec6e --- /dev/null +++ b/tests/st10f269/erase/ok_b1246_erased diff --git a/tests/st10f269/erase/ok_b1_erased b/tests/st10f269/erase/ok_b1_erased Binary files differnew file mode 100755 index 0000000..d19e238 --- /dev/null +++ b/tests/st10f269/erase/ok_b1_erased diff --git a/tests/st10f269/erase/ok_b2_erased b/tests/st10f269/erase/ok_b2_erased Binary files differnew file mode 100755 index 0000000..c6dced9 --- /dev/null +++ b/tests/st10f269/erase/ok_b2_erased diff --git a/tests/st10f269/erase/ok_b3_erased b/tests/st10f269/erase/ok_b3_erased Binary files differnew file mode 100755 index 0000000..19fccaf --- /dev/null +++ b/tests/st10f269/erase/ok_b3_erased diff --git a/tests/st10f269/erase/ok_b4_erased b/tests/st10f269/erase/ok_b4_erased Binary files differnew file mode 100755 index 0000000..ef74ce9 --- /dev/null +++ b/tests/st10f269/erase/ok_b4_erased diff --git a/tests/st10f269/erase/ok_b5_erased b/tests/st10f269/erase/ok_b5_erased Binary files differnew file mode 100755 index 0000000..354977e --- /dev/null +++ b/tests/st10f269/erase/ok_b5_erased diff --git a/tests/st10f269/erase/ok_b6_erased b/tests/st10f269/erase/ok_b6_erased Binary files differnew file mode 100755 index 0000000..8299aa6 --- /dev/null +++ b/tests/st10f269/erase/ok_b6_erased diff --git a/tests/st10f269/erase/ok_ones b/tests/st10f269/erase/ok_ones new file mode 100755 index 0000000..7145947 --- /dev/null +++ b/tests/st10f269/erase/ok_ones @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f269/erase/zeros b/tests/st10f269/erase/zeros Binary files differnew file mode 100755 index 0000000..6d23118 --- /dev/null +++ b/tests/st10f269/erase/zeros diff --git a/tests/st10f269/read/ok_100003B b/tests/st10f269/read/ok_100003B Binary files differnew file mode 100755 index 0000000..23885fd --- /dev/null +++ b/tests/st10f269/read/ok_100003B diff --git a/tests/st10f269/read/ok_1B b/tests/st10f269/read/ok_1B new file mode 100755 index 0000000..080c324 --- /dev/null +++ b/tests/st10f269/read/ok_1B @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f269/read/ok_262144B b/tests/st10f269/read/ok_262144B Binary files differnew file mode 100755 index 0000000..2f8fd38 --- /dev/null +++ b/tests/st10f269/read/ok_262144B diff --git a/tests/st10f269/read/random b/tests/st10f269/read/random Binary files differnew file mode 100755 index 0000000..2f8fd38 --- /dev/null +++ b/tests/st10f269/read/random diff --git a/tests/st10f269/write/0B b/tests/st10f269/write/0B new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/tests/st10f269/write/0B diff --git a/tests/st10f269/write/128K b/tests/st10f269/write/128K Binary files differnew file mode 100755 index 0000000..296125e --- /dev/null +++ b/tests/st10f269/write/128K diff --git a/tests/st10f269/write/128K_1B b/tests/st10f269/write/128K_1B Binary files differnew file mode 100755 index 0000000..c240692 --- /dev/null +++ b/tests/st10f269/write/128K_1B diff --git a/tests/st10f269/write/16K b/tests/st10f269/write/16K Binary files differnew file mode 100755 index 0000000..eb86315 --- /dev/null +++ b/tests/st10f269/write/16K diff --git a/tests/st10f269/write/16K_1B b/tests/st10f269/write/16K_1B Binary files differnew file mode 100755 index 0000000..3e2e673 --- /dev/null +++ b/tests/st10f269/write/16K_1B diff --git a/tests/st10f269/write/192K b/tests/st10f269/write/192K Binary files differnew file mode 100755 index 0000000..aeaad4e --- /dev/null +++ b/tests/st10f269/write/192K diff --git a/tests/st10f269/write/192K_1B b/tests/st10f269/write/192K_1B Binary files differnew file mode 100755 index 0000000..6530b32 --- /dev/null +++ b/tests/st10f269/write/192K_1B diff --git a/tests/st10f269/write/1B b/tests/st10f269/write/1B new file mode 100755 index 0000000..79b7e4b --- /dev/null +++ b/tests/st10f269/write/1B @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f269/write/24K b/tests/st10f269/write/24K Binary files differnew file mode 100755 index 0000000..085be42 --- /dev/null +++ b/tests/st10f269/write/24K diff --git a/tests/st10f269/write/24K_1B b/tests/st10f269/write/24K_1B Binary files differnew file mode 100755 index 0000000..56d5125 --- /dev/null +++ b/tests/st10f269/write/24K_1B diff --git a/tests/st10f269/write/256K_1B b/tests/st10f269/write/256K_1B Binary files differnew file mode 100755 index 0000000..a17fc91 --- /dev/null +++ b/tests/st10f269/write/256K_1B diff --git a/tests/st10f269/write/32K b/tests/st10f269/write/32K Binary files differnew file mode 100755 index 0000000..bf94e24 --- /dev/null +++ b/tests/st10f269/write/32K diff --git a/tests/st10f269/write/32K_1B b/tests/st10f269/write/32K_1B Binary files differnew file mode 100755 index 0000000..29353a3 --- /dev/null +++ b/tests/st10f269/write/32K_1B diff --git a/tests/st10f269/write/64K b/tests/st10f269/write/64K Binary files differnew file mode 100755 index 0000000..a658eda --- /dev/null +++ b/tests/st10f269/write/64K diff --git a/tests/st10f269/write/64K_1B b/tests/st10f269/write/64K_1B Binary files differnew file mode 100755 index 0000000..8eed060 --- /dev/null +++ b/tests/st10f269/write/64K_1B diff --git a/tests/st10f269/write/mod/backup/128K_1B b/tests/st10f269/write/mod/backup/128K_1B Binary files differnew file mode 100755 index 0000000..492a243 --- /dev/null +++ b/tests/st10f269/write/mod/backup/128K_1B diff --git a/tests/st10f269/write/mod/backup/16K_1B b/tests/st10f269/write/mod/backup/16K_1B Binary files differnew file mode 100755 index 0000000..7e46f7f --- /dev/null +++ b/tests/st10f269/write/mod/backup/16K_1B diff --git a/tests/st10f269/write/mod/backup/192K_1B b/tests/st10f269/write/mod/backup/192K_1B Binary files differnew file mode 100755 index 0000000..def4d66 --- /dev/null +++ b/tests/st10f269/write/mod/backup/192K_1B diff --git a/tests/st10f269/write/mod/backup/24K_1B b/tests/st10f269/write/mod/backup/24K_1B Binary files differnew file mode 100755 index 0000000..4dcd1ad --- /dev/null +++ b/tests/st10f269/write/mod/backup/24K_1B diff --git a/tests/st10f269/write/mod/backup/32K_1B b/tests/st10f269/write/mod/backup/32K_1B Binary files differnew file mode 100755 index 0000000..65d9f6d --- /dev/null +++ b/tests/st10f269/write/mod/backup/32K_1B diff --git a/tests/st10f269/write/mod/backup/64K_1B b/tests/st10f269/write/mod/backup/64K_1B Binary files differnew file mode 100755 index 0000000..1a1e997 --- /dev/null +++ b/tests/st10f269/write/mod/backup/64K_1B diff --git a/tests/st10f269/write/mod/ok/ok_128K_1B b/tests/st10f269/write/mod/ok/ok_128K_1B Binary files differnew file mode 100755 index 0000000..2e6b6e5 --- /dev/null +++ b/tests/st10f269/write/mod/ok/ok_128K_1B diff --git a/tests/st10f269/write/mod/ok/ok_16K_1B b/tests/st10f269/write/mod/ok/ok_16K_1B Binary files differnew file mode 100755 index 0000000..af32479 --- /dev/null +++ b/tests/st10f269/write/mod/ok/ok_16K_1B diff --git a/tests/st10f269/write/mod/ok/ok_192K_1B b/tests/st10f269/write/mod/ok/ok_192K_1B Binary files differnew file mode 100755 index 0000000..f732165 --- /dev/null +++ b/tests/st10f269/write/mod/ok/ok_192K_1B diff --git a/tests/st10f269/write/mod/ok/ok_24K_1B b/tests/st10f269/write/mod/ok/ok_24K_1B Binary files differnew file mode 100755 index 0000000..883e4d5 --- /dev/null +++ b/tests/st10f269/write/mod/ok/ok_24K_1B diff --git a/tests/st10f269/write/mod/ok/ok_32K_1B b/tests/st10f269/write/mod/ok/ok_32K_1B Binary files differnew file mode 100755 index 0000000..a6415e4 --- /dev/null +++ b/tests/st10f269/write/mod/ok/ok_32K_1B diff --git a/tests/st10f269/write/mod/ok/ok_64K_1B b/tests/st10f269/write/mod/ok/ok_64K_1B Binary files differnew file mode 100755 index 0000000..e7f7433 --- /dev/null +++ b/tests/st10f269/write/mod/ok/ok_64K_1B diff --git a/tests/st10f269/write/mod/r.bin b/tests/st10f269/write/mod/r.bin Binary files differnew file mode 100755 index 0000000..0a11c71 --- /dev/null +++ b/tests/st10f269/write/mod/r.bin diff --git a/tests/st10f269/write/ok_128K b/tests/st10f269/write/ok_128K Binary files differnew file mode 100755 index 0000000..4b32c68 --- /dev/null +++ b/tests/st10f269/write/ok_128K diff --git a/tests/st10f269/write/ok_128K_1B b/tests/st10f269/write/ok_128K_1B Binary files differnew file mode 100755 index 0000000..2e6b6e5 --- /dev/null +++ b/tests/st10f269/write/ok_128K_1B diff --git a/tests/st10f269/write/ok_16K b/tests/st10f269/write/ok_16K Binary files differnew file mode 100755 index 0000000..247e716 --- /dev/null +++ b/tests/st10f269/write/ok_16K diff --git a/tests/st10f269/write/ok_16K_1B b/tests/st10f269/write/ok_16K_1B Binary files differnew file mode 100755 index 0000000..af32479 --- /dev/null +++ b/tests/st10f269/write/ok_16K_1B diff --git a/tests/st10f269/write/ok_192K b/tests/st10f269/write/ok_192K Binary files differnew file mode 100755 index 0000000..fcd454b --- /dev/null +++ b/tests/st10f269/write/ok_192K diff --git a/tests/st10f269/write/ok_192K_1B b/tests/st10f269/write/ok_192K_1B Binary files differnew file mode 100755 index 0000000..f732165 --- /dev/null +++ b/tests/st10f269/write/ok_192K_1B diff --git a/tests/st10f269/write/ok_1B b/tests/st10f269/write/ok_1B new file mode 100755 index 0000000..6b839e2 --- /dev/null +++ b/tests/st10f269/write/ok_1B @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f269/write/ok_24K b/tests/st10f269/write/ok_24K Binary files differnew file mode 100755 index 0000000..96bf91e --- /dev/null +++ b/tests/st10f269/write/ok_24K diff --git a/tests/st10f269/write/ok_24K_1B b/tests/st10f269/write/ok_24K_1B Binary files differnew file mode 100755 index 0000000..883e4d5 --- /dev/null +++ b/tests/st10f269/write/ok_24K_1B diff --git a/tests/st10f269/write/ok_32K b/tests/st10f269/write/ok_32K Binary files differnew file mode 100755 index 0000000..acec7cb --- /dev/null +++ b/tests/st10f269/write/ok_32K diff --git a/tests/st10f269/write/ok_32K_1B b/tests/st10f269/write/ok_32K_1B Binary files differnew file mode 100755 index 0000000..a6415e4 --- /dev/null +++ b/tests/st10f269/write/ok_32K_1B diff --git a/tests/st10f269/write/ok_64K b/tests/st10f269/write/ok_64K Binary files differnew file mode 100755 index 0000000..a8453c3 --- /dev/null +++ b/tests/st10f269/write/ok_64K diff --git a/tests/st10f269/write/ok_64K_1B b/tests/st10f269/write/ok_64K_1B Binary files differnew file mode 100755 index 0000000..e7f7433 --- /dev/null +++ b/tests/st10f269/write/ok_64K_1B diff --git a/tests/st10f269/write/ok_ones b/tests/st10f269/write/ok_ones new file mode 100755 index 0000000..7145947 --- /dev/null +++ b/tests/st10f269/write/ok_ones @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/tests/st10f269/write/random b/tests/st10f269/write/random Binary files differnew file mode 100755 index 0000000..c362624 --- /dev/null +++ b/tests/st10f269/write/random diff --git a/tests/st10f269/write/zeros b/tests/st10f269/write/zeros Binary files differnew file mode 100755 index 0000000..6d23118 --- /dev/null +++ b/tests/st10f269/write/zeros diff --git a/tests/write.cmake b/tests/write.cmake new file mode 100755 index 0000000..0a164f5 --- /dev/null +++ b/tests/write.cmake @@ -0,0 +1,11 @@ +include (${TestFunctions}) + +set (TestArgs "write ${TestConfigOptions} ${TestArgs} ${TestFile}") +set (ReadArgs "read ${TestConfigOptions} write_read.bin") + +exec_test ("${TestArgs}" ${TestExitCode}) + +if (NOT "${TestFile}" STREQUAL "" AND NOT "${TestBlessedFile}" STREQUAL "") + exec_test ("${ReadArgs}" 0) + compare_files (write_read.bin ${TestBlessedFile}) +endif () diff --git a/utils/xd/CMakeLists.txt b/utils/xd/CMakeLists.txt new file mode 100755 index 0000000..83a6de9 --- /dev/null +++ b/utils/xd/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required (VERSION 3.3) +project (xd) + +add_compile_options (-Wall -Werror -pedantic -g) +add_executable (xd xd.c) diff --git a/utils/xd/xd.c b/utils/xd/xd.c new file mode 100755 index 0000000..5089e30 --- /dev/null +++ b/utils/xd/xd.c @@ -0,0 +1,542 @@ +/* + + Extended dump and load utility + + by John Walker + http://www.fourmilab.ch/ + + This program is in the public domain. + +*/ + +#define Version \ + "1.3 -- September 2000" + + +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#ifdef _WIN32 +#include <fcntl.h> +#include <io.h> +#endif + +#define FALSE 0 +#define TRUE 1 +#define UPPERCASE_LABEL_LENGTH 128 + +#define EOS '\0' + +static char addrformat[80] = "%6X"; +static char scanaddr[80] = "%lx%c"; + +static char dataformat1[80] = "%02X"; +static char scandata[80] = "%x%n%c"; + +static int bytesperline = 16, doublechar = FALSE, + dflen = 2, loading = FALSE, streaming = FALSE; +static unsigned long fileaddr; +static unsigned char lineecho[32]; + +/* OUTLINE -- Edit a line of binary data into the selected output + format. */ + +static void outline(out, dat, len) + FILE *out; + unsigned char *dat; + int len; +{ + char oline[132]; + int i; + + sprintf(oline, addrformat, fileaddr); + strcat(oline, ":"); + for (i = 0; i < len; i++) { + char outedit[80]; + + sprintf(outedit, dataformat1, dat[i]); + strcat(oline, (i == (bytesperline / 2)) ? " " : " "); + strcat(oline, outedit); + } + + if (doublechar) { + char oc[2]; + int shortfall = ((bytesperline - len) * (dflen + 1)) + + (len <= (bytesperline / 2) ? 1 : 0); + + while (shortfall-- > 0) { + strcat(oline, " "); + } + oc[1] = EOS; + strcat(oline, " | "); + for (i = 0; i < len; i++) { + int b = dat[i]; + + /* Map non-printing characters to "." according to the + definitions for ISO 8859/1 Latin-1. */ + + if ((b < ' ') || (b > '~' && b < 160)) { + b = '.'; + } + + /* Many existing systems which support Latin-1 lack + a definition for character 160, the non-breaking + space. Translate this to a space to avoid + confusion. */ + + if (b == 160) { + b = ' '; + } + oc[0] = (char) b; + strcat(oline, oc); + } + } + strcat(oline, "\n"); + fputs(oline, out); +} + +/* INTERPLINE -- Interpret a line of input. */ + +static int interpline(line, lineno, out) + char *line; + int lineno; + FILE *out; +{ + char *cp = line; + char c; + unsigned long lfaddr; + int gfaddr = FALSE; + + /* Scan the line for a possible alternative format information + following a vertical bar and delete it. */ + + while ((c = *cp++) != EOS) { + if (c == '|') { + cp[-1] = EOS; + break; + } + } + + /* Scan the line for a file address terminated by a colon. Save + the file address. */ + + cp = line; + + while ((c = *cp++) != EOS) { + if (c == ':') { + int sa; + char tchar; + + cp[-1] = EOS; + sa = sscanf(line, scanaddr, &lfaddr, &tchar); + if (sa == 0 || (sa > 1 && tchar != EOS)) { + fprintf(stderr, + "Bad file address \"%s\" on line %d:\n", + line, lineno); + return FALSE; + } + gfaddr = TRUE; + cp[-1] = ':'; + break; + } + } + if (!gfaddr) { + cp = line; + } + if (!streaming) { + if (!gfaddr) { + fprintf(stderr, "File address missing on line %d:\n", lineno); + fprintf(stderr, "%s\n", line); + return FALSE; + } + if (lfaddr != fileaddr) { + fprintf(stderr, "File address sequence error on line %d.\n", + lineno); + fprintf(stderr, " Expected "); + fprintf(stderr, addrformat, fileaddr); + fprintf(stderr, ", received "); + fprintf(stderr, addrformat, lfaddr); + fprintf(stderr, ".\n"); + fprintf(stderr, "%s\n", line); + return FALSE; + } + } + + while ((c = *cp++) != EOS) { + if (!isspace(c)) { + int scanl, nscan, dvalue; + char termchar; + + if (((scanl = sscanf(cp - 1, scandata, &dvalue, &nscan, &termchar)) == 0) || + (dvalue < 0) || (dvalue > 255) || + (scanl == 2 && !isspace(termchar))) { + fprintf(stderr, "Improper value, \"%s\" on line %d:\n", + cp - 1, lineno); + fprintf(stderr, "%s\n", line); + fprintf(stderr, "Bytes must be specified as digits separated by white space.\n"); + return FALSE; + } + putc((char) dvalue, out); + fileaddr++; + cp += nscan; + } + } + return TRUE; +} + +void +start_header(FILE *out, char *label, char *cppNameSpace) +{ + int i, j; + char uppercase_label[UPPERCASE_LABEL_LENGTH]; + /* Uppercase label plus "_HPP" */ + char include_guard_label[UPPERCASE_LABEL_LENGTH + 4]; + + if (cppNameSpace[0] == EOS) + cppNameSpace = "UnknownNameSpace"; + + /* Construct upper case label from -d option argument. */ + for (i = strlen(label), j = 0; (j < UPPERCASE_LABEL_LENGTH) && \ + (i >= 0); i--, j++) { + uppercase_label[j] = isalpha(label[j]) ? toupper(label[j]) : label[j]; + } + if (j >= UPPERCASE_LABEL_LENGTH) + j--; + uppercase_label[j] = '\0'; + /* Construct include guard label */ + i = strlen(uppercase_label); + strcpy(include_guard_label, uppercase_label); + strcpy(include_guard_label + i, "_HPP"); + /* Print include guard to the output */ + fprintf(out, "#ifndef %s\n", include_guard_label); + fprintf(out, "#define %s 1\n\n", include_guard_label); + /* Start namespace */ + fprintf(out, "namespace %s {\n\n", cppNameSpace); +} + +void +end_header(FILE *out) +{ + fprintf(out, "}\n\n"); + fprintf(out, "#endif\n"); +} + +/* Main program */ + +int main(argc, argv) + int argc; char *argv[]; +{ + int i, b, bp, cdata = FALSE, tdata = FALSE, f = 0; + char *cp, *clabel, *tlabel, *cppNameSpace, opt; + FILE *in = stdin, *out = stdout; + + if (argc > 1) { + i = strlen(argv[1]); + clabel = argv[1] + i; + tlabel = cppNameSpace = clabel; + } + + for (i = 1; i < argc; i++) { + cp = argv[i]; + if (*cp == '-') { + opt = *(++cp); + if (islower(opt)) { + opt = (char) toupper(opt); + } + switch (opt) { + + case 'A': /* -Af -- Set address format */ + opt = cp[1]; + if (islower(opt)) { + opt = (char) toupper(opt); + } + switch (opt) { + case 'D': + strcpy(addrformat, "%8d"); + strcpy(scanaddr, "%ld%c"); + break; + + case 'H': + case 'X': + strcpy(addrformat, "%6X"); + strcpy(scanaddr, "%lx%c"); + break; + + case 'O': + strcpy(addrformat, "%8o"); + strcpy(scanaddr, "%lo%c"); + break; + + default: + fprintf(stderr, + "Invalid address format '%c'. Must be D, H, or O.\n", cp[1]); + return 2; + } + break; + + case 'C': + doublechar = TRUE; + break; + + case 'D': + cdata = TRUE; + clabel = cp + 1; + break; + + case 'T': + tdata = TRUE; + tlabel = cp + 1; + break; + + case 'P': + cppNameSpace = cp + 1; + break; + + case 'L': + loading = TRUE; + break; + + case 'N': /* -Nf -- Set numeric dump format */ + opt = cp[1]; + if (islower(opt)) { + opt = (char) toupper(opt); + } + switch (opt) { + case 'D': + strcpy(dataformat1, "%3d"); + strcpy(scandata, "%d%n%c"); + break; + + case 'H': + case 'X': + strcpy(dataformat1, "%02X"); + strcpy(scandata, "%x%n%c"); + break; + + case 'O': + strcpy(dataformat1, "%03o"); + strcpy(scandata, "%o%n%c"); + break; + + default: + fprintf(stderr, + "Invalid numeric dump format '%c'. Must be D, H, or O.\n", cp[1]); + return 2; + } + break; + + case 'S': + streaming = TRUE; + break; + + case '?': + case 'H': + case 'U': + fprintf(stderr, "XD -- Extended dump. Call with xd [input [output]]\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " Options:\n"); + fprintf(stderr, " -af Print addresses in f = Decimal, Hex, or Octal\n"); + fprintf(stderr, " -c Dump as ISO characters\n"); + fprintf(stderr, " -dlabel Dump as a C++ header file data declaration\n"); + fprintf(stderr, " -tlabel Dump as a C++ header containing C++ function that\n"); + fprintf(stderr, " receives string argument and returns string. Each\n"); + fprintf(stderr, " line of input file is scanned for a string %%ARG%% which\n"); + fprintf(stderr, " will be replaced by the function argument. String returned"); + fprintf(stderr, " holds text content of the input file."); + fprintf(stderr, " -pname Name of C++ namespace of header file content\n"); + fprintf(stderr, " -l Load file from hex dump\n"); + fprintf(stderr, " -nf Numeric dump in f = Decimal, Hex, or Octal\n"); + fprintf(stderr, " -s Stream load (don't check file addresses)\n"); + fprintf(stderr, " -u Print this message\n"); + fprintf(stderr, "\nBy John Walker, http://www.fourmilab.ch/\n"); + fprintf(stderr, "\nModified by Jan Sucan, <sucanjan@fit.cvut.cz>\n"); + fprintf(stderr,"Version %s_mod\n", Version); + return 0; + } + } else { + switch (f) { + case 0: + + /** Warning! On systems which distinguish text mode and + binary I/O (MS-DOS, Macintosh, etc.) the modes in these + open statements will have to be made conditional based + upon whether an encode or decode is being done, which + will have to be specified earlier. But it's worse: if + input or output is from standard input or output, the + mode will have to be changed on the fly, which is + generally system and compiler dependent. 'Twasn't me + who couldn't conform to Unix CR/LF convention, so + don't ask me to write the code to work around + Apple and Microsoft's incompatible standards. + + This file contains code, conditional on _WIN32, which + sets binary mode using the method prescribed by + Microsoft Visual C 1.52 ("Monkey C"); this may + require modification if you're using a different + compiler or release of Monkey C. */ + + if ((in = fopen(cp, loading ? "r" : "rb")) == NULL) { + fprintf(stderr, "Cannot open input file %s\n", cp); + return 2; + } + f++; + break; + + case 1: + if ((out = fopen(cp, loading ? "wb" : "w")) == NULL) { + fprintf(stderr, "Cannot open output file %s\n", cp); + return 2; + } + f++; + break; + + default: + fprintf(stderr, "Too many file names specified.\n"); + } + } + } + +#ifdef _WIN32 + + /* If input is from standard input and we aren't loading + from a dump file, set the input file mode to binary. */ + + if ((in == stdin) && (!loading)) { + _setmode(_fileno(in), _O_BINARY); + } + + /* If output is to standard output and we're loading a + binary file from a dump, set the output file mode to + binary. */ + + if ((out == stdout) && (loading)) { + _setmode(_fileno(out), _O_BINARY); + } +#endif + + bp = 0; + fileaddr = 0; + + if (loading) { + char in_line[256]; + int lineno = 0; + + while (fgets(in_line, (sizeof in_line) - 2, in)) { + lineno++; + if (!interpline(in_line, lineno, out)) { + fclose(out); + return 2; + } + } + } else { + if (cdata) { + char cout[80]; + int byte_count = 0; + char *label = (clabel[0] == EOS) ? "xd_data" : clabel; + + start_header (out, label, cppNameSpace); + + fprintf(out, "uint8_t %s[] = {\n", label); + strcpy(cout, " "); + + while ((b = getc(in)) != EOF) { + if (strlen(cout) > 72) { + fprintf(out, "%s\n", cout); + strcpy(cout, " "); + } + sprintf(cout + strlen(cout), "%d,", b); + byte_count++; + } + if (strlen(cout) > 4) { + cout[strlen(cout) - 1] = EOS; /* Strip trailing comma */ + fprintf(out, "%s\n", cout); + } + fprintf(out, "};\n\n"); + fprintf(out, "const size_t %s_length = %d;\n\n", label, byte_count); + /* Close namespace */ + end_header(out); + fclose(out); + } else if (tdata) { + int b, c; + char *label = (tlabel[0] == EOS) ? "xd_text" : tlabel; + int lineStarted = FALSE; + int buf_i = 0; + char buf[6]; /* Buffer for scanning for %ARG% string */ + + start_header (out, label, cppNameSpace); + + fprintf(out, "std::string\n"); + fprintf(out, "getText(const std::string & arg)\n"); + fprintf(out, "{\n"); + fprintf(out, " std::ostringstream os;\n\n"); + + while ((b = getc(in)) != EOF) { + if (!lineStarted) { + fprintf(out, " os << \""); + lineStarted = TRUE; + } + + if ((b != '\r') && (b != '\n')) { + /* Printable character */ + if ((b == '%') && (buf_i == 0)) { + buf[buf_i++] = b; + } else if ((b == '%') && (buf_i >= 4)) { + buf[buf_i] = '\0'; + if (!strcmp(buf, "%ARG")) { + /* We have %ARG% string on the line */ + fprintf(out, "\" << arg << \""); + } else { + /* We do not have the string */ + fprintf(out, "%s%c", buf, b); + } + buf_i = 0; + } else if (buf_i > 0) { + buf[buf_i++] = b; + if (buf_i >= 5) { + buf[buf_i] = '\0'; + fprintf(out, "%s", buf); + buf_i = 0; + } + } else { + fprintf(out, "%c", b); + } + } else { + /* End of line on first occurence of CR or LF */ + if (buf_i > 0) { + buf[buf_i] = '\0'; + fprintf(out, "%s", buf); + buf_i = 0; + } + fprintf(out, "\" << std::endl;\n"); + c = getc(in); + if (!((b == '\r') && (c == '\n')) && !((b == '\n') && (c == '\r'))) + ungetc(c, in); + lineStarted = FALSE; + } + } + /* Empty buffer, if there are some cached characters */ + if (buf_i > 0) { + buf[buf_i] = '\0'; + fprintf(out, "%s", buf); + } + fprintf(out, "\n return os.str();\n}\n\n"); + /* Close namespace */ + end_header(out); + fclose(out); + } else { + while ((b = getc(in)) != EOF) { + if (bp >= bytesperline) { + outline(out, lineecho, bp); + bp = 0; + fileaddr += bytesperline; + } + lineecho[bp++] = (char) b; + } + + if (bp > 0) { + outline(out, lineecho, bp); + } + } + } + return 0; +} |
