diff --git a/.gitignore b/.gitignore index 690a1f93a..14ab1c867 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ Debug Release x64 MMDVMHost +RemoteCommand *.o *.opendb *.bak diff --git a/AMBEFEC.cpp b/AMBEFEC.cpp index 864c35d65..03f8ac23f 100644 --- a/AMBEFEC.cpp +++ b/AMBEFEC.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010,2014,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2010,2014,2016,2018,2021 by Jonathan Naylor G4KLX * Copyright (C) 2016 Mathias Weyland, HB9FRV * * This program is free software; you can redistribute it and/or modify @@ -20,6 +20,7 @@ #include "Golay24128.h" #include "Hamming.h" #include "AMBEFEC.h" +#include "Utils.h" #include #include @@ -795,34 +796,31 @@ unsigned int CAMBEFEC::regenerateDStar(unsigned int& a, unsigned int& b) const unsigned int orig_a = a; unsigned int orig_b = b; - unsigned int data = CGolay24128::decode24128(a); - - a = CGolay24128::encode24128(data); + unsigned int data; + bool valid1 = CGolay24128::decode24128(a, data); + if (!valid1) + return 10U; // The PRNG unsigned int p = PRNG_TABLE[data]; b ^= p; - unsigned int datb = CGolay24128::decode24128(b); + unsigned int datb; + bool valid2 = CGolay24128::decode24128(b, datb); + if (!valid2) + return 10U; + a = CGolay24128::encode24128(data); b = CGolay24128::encode24128(datb); b ^= p; - unsigned int errsA = 0U, errsB = 0U; - unsigned int v = a ^ orig_a; - while (v != 0U) { - v &= v - 1U; - errsA++; - } + unsigned int errsA = CUtils::countBits(v); v = b ^ orig_b; - while (v != 0U) { - v &= v - 1U; - errsB++; - } + unsigned int errsB = CUtils::countBits(v); return errsA + errsB; } @@ -832,7 +830,14 @@ unsigned int CAMBEFEC::regenerateDMR(unsigned int& a, unsigned int& b, unsigned unsigned int orig_a = a; unsigned int orig_b = b; - unsigned int data = CGolay24128::decode24128(a); + unsigned int data; + bool valid = CGolay24128::decode24128(a, data); + if (!valid) { + a = 0xF00292U; + b = 0x0E0B20U; + c = 0x000000U; + return 10U; // An invalid A block gives an error count of 10 + } a = CGolay24128::encode24128(data); @@ -847,19 +852,11 @@ unsigned int CAMBEFEC::regenerateDMR(unsigned int& a, unsigned int& b, unsigned b ^= p; - unsigned int errsA = 0U, errsB = 0U; - unsigned int v = a ^ orig_a; - while (v != 0U) { - v &= v - 1U; - errsA++; - } + unsigned int errsA = CUtils::countBits(v); v = b ^ orig_b; - while (v != 0U) { - v &= v - 1U; - errsB++; - } + unsigned int errsB = CUtils::countBits(v); if (errsA >= 4U || ((errsA + errsB) >= 6U && errsA >= 2U)) { a = 0xF00292U; diff --git a/AX25Control.cpp b/AX25Control.cpp new file mode 100644 index 000000000..3b108fcb1 --- /dev/null +++ b/AX25Control.cpp @@ -0,0 +1,252 @@ +/* + * Copyright (C) 2020 Jonathan Naylor, G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "AX25Control.h" +#include "AX25Defines.h" +#include "Utils.h" +#include "Log.h" + +#include +#include +#include +#include + +// #define DUMP_AX25 + +const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; + +#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) +#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) + +CAX25Control::CAX25Control(CAX25Network* network, bool trace) : +m_network(network), +m_trace(trace), +m_enabled(true), +m_fp(NULL) +{ +} + +CAX25Control::~CAX25Control() +{ +} + +bool CAX25Control::writeModem(unsigned char *data, unsigned int len) +{ + assert(data != NULL); + + if (!m_enabled) + return false; + + if (m_trace) + decode(data, len); + + CUtils::dump(1U, "AX.25 received packet", data, len); + + if (m_network == NULL) + return true; + + return m_network->write(data, len); +} + +unsigned int CAX25Control::readModem(unsigned char* data) +{ + assert(data != NULL); + + if (m_network == NULL) + return 0U; + + if (!m_enabled) + return 0U; + + unsigned int length = m_network->read(data, 500U); + + if (length > 0U) + CUtils::dump(1U, "AX.25 transmitted packet", data, length); + + return length; +} + +bool CAX25Control::openFile() +{ + if (m_fp != NULL) + return true; + + time_t t; + ::time(&t); + + struct tm* tm = ::localtime(&t); + + char name[100U]; + ::sprintf(name, "AX25_%04d%02d%02d_%02d%02d%02d.ambe", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); + + m_fp = ::fopen(name, "wb"); + if (m_fp == NULL) + return false; + + ::fwrite("AX25", 1U, 4U, m_fp); + + return true; +} + +bool CAX25Control::writeFile(const unsigned char* data, unsigned int length) +{ + if (m_fp == NULL) + return false; + + ::fwrite(&length, 1U, sizeof(unsigned int), m_fp); + ::fwrite(data, 1U, length, m_fp); + + return true; +} + +void CAX25Control::closeFile() +{ + if (m_fp != NULL) { + ::fclose(m_fp); + m_fp = NULL; + } +} + +void CAX25Control::enable(bool enabled) +{ + m_enabled = enabled; +} + +void CAX25Control::decode(const unsigned char* data, unsigned int length) +{ + assert(data != NULL); + assert(length >= 15U); + + std::string text; + + bool more = decodeAddress(data + 7U, text); + + text += '>'; + + decodeAddress(data + 0U, text); + + unsigned int n = 14U; + while (more && n < length) { + text += ','; + more = decodeAddress(data + n, text, true); + n += 7U; + } + + text += ' '; + + if ((data[n] & 0x01U) == 0x00U) { + // I frame + char t[20U]; + ::sprintf(t, "", (data[n] >> 1) & 0x07U, (data[n] >> 5) & 0x07U); + text += t; + } else { + if ((data[n] & 0x02U) == 0x00U) { + // S frame + char t[20U]; + switch (data[n] & 0x0FU) { + case 0x01U: + sprintf(t, "", (data[n] >> 5) & 0x07U); + break; + case 0x05U: + sprintf(t, "", (data[n] >> 5) & 0x07U); + break; + case 0x09U: + sprintf(t, "", (data[n] >> 5) & 0x07U); + break; + case 0x0DU: + sprintf(t, "", (data[n] >> 5) & 0x07U); + break; + default: + sprintf(t, "", (data[n] >> 5) & 0x07U); + break; + } + + text += t; + LogMessage("AX.25, %s", text.c_str()); + return; + } else { + // U frame + switch (data[n] & 0xEFU) { + case 0x6FU: + text += ""; + break; + case 0x2FU: + text += ""; + break; + case 0x43U: + text += ""; + break; + case 0x0FU: + text += ""; + break; + case 0x63U: + text += ""; + break; + case 0x87U: + text += ""; + break; + case 0x03U: + text += ""; + break; + case 0xAFU: + text += ""; + break; + case 0xE3U: + text += ""; + break; + default: + text += ""; + break; + } + + if ((data[n] & 0xEFU) != 0x03U) { + LogMessage("AX.25, %s", text.c_str()); + return; + } + } + } + + n += 2U; + + LogMessage("AX.25, %s %.*s", text.c_str(), length - n, data + n); +} + +bool CAX25Control::decodeAddress(const unsigned char* data, std::string& text, bool isDigi) const +{ + assert(data != NULL); + + for (unsigned int i = 0U; i < 6U; i++) { + char c = data[i] >> 1; + if (c != ' ') + text += c; + } + + unsigned char ssid = (data[6U] >> 1) & 0x0FU; + if (ssid > 0U) { + text += '-'; + if (ssid >= 10U) { + text += '1'; + text += '0' + ssid - 10U; + } + else { + text += '0' + ssid; + } + } + + if (isDigi) { + if ((data[6U] & 0x80U) == 0x80U) + text += '*'; + } + + return (data[6U] & 0x01U) == 0x00U; +} diff --git a/AX25Control.h b/AX25Control.h new file mode 100644 index 000000000..b4fed2af0 --- /dev/null +++ b/AX25Control.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(AX25Control_H) +#define AX25Control_H + +#include "AX25Network.h" + +#include + +class CAX25Control { +public: + CAX25Control(CAX25Network* network, bool trace); + ~CAX25Control(); + + bool writeModem(unsigned char* data, unsigned int len); + + unsigned int readModem(unsigned char* data); + + void enable(bool enabled); + +private: + CAX25Network* m_network; + bool m_trace; + bool m_enabled; + FILE* m_fp; + + void decode(const unsigned char* data, unsigned int length); + bool decodeAddress(const unsigned char* data, std::string& text, bool isDigi = false) const; + bool openFile(); + bool writeFile(const unsigned char* data, unsigned int length); + void closeFile(); +}; + +#endif diff --git a/AX25Defines.h b/AX25Defines.h new file mode 100644 index 000000000..a0f4c80a6 --- /dev/null +++ b/AX25Defines.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(AX25Defines_H) +#define AX25Defines_H + +const unsigned int AX25_CALLSIGN_TEXT_LENGTH = 6U; +const unsigned int AX25_SSID_LENGTH = 1U; +const unsigned int AX25_CALLSIGN_LENGTH = 7U; + +const unsigned int AX25_MAX_DIGIPEATERS = 6U; + +const unsigned char AX25_PID_NOL3 = 0xF0U; + +const unsigned int AX25_MAX_FRAME_LENGTH_BYTES = 330U; // Callsign (7) + Callsign (7) + 8 Digipeaters (56) + + // Control (1) + PID (1) + Data (256) + Checksum (2) +const unsigned char AX25_KISS_DATA = 0x00U; + +const unsigned char AX25_FEND = 0xC0U; +const unsigned char AX25_FESC = 0xDBU; +const unsigned char AX25_TFEND = 0xDCU; +const unsigned char AX25_TFESC = 0xDDU; + +#endif diff --git a/AX25Network.cpp b/AX25Network.cpp new file mode 100644 index 000000000..d7f876d11 --- /dev/null +++ b/AX25Network.cpp @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "AX25Network.h" +#include "AX25Defines.h" +#include "Defines.h" +#include "Utils.h" +#include "Log.h" + +#include +#include +#include + +const unsigned int BUFFER_LENGTH = 500U; + + +CAX25Network::CAX25Network(const std::string& port, unsigned int speed, bool debug) : +m_serial(port, speed, false), +m_txData(NULL), +m_rxData(NULL), +m_rxLength(0U), +m_rxLastChar(0U), +m_debug(debug), +m_enabled(false) +{ + assert(!port.empty()); + assert(speed > 0U); + + m_txData = new unsigned char[BUFFER_LENGTH]; + m_rxData = new unsigned char[BUFFER_LENGTH]; +} + +CAX25Network::~CAX25Network() +{ + delete[] m_txData; + delete[] m_rxData; +} + +bool CAX25Network::open() +{ + LogMessage("Opening AX25 network connection"); + + return m_serial.open(); +} + +bool CAX25Network::write(const unsigned char* data, unsigned int length) +{ + assert(data != NULL); + + if (!m_enabled) + return true; + + unsigned int txLength = 0U; + + m_txData[txLength++] = AX25_FEND; + m_txData[txLength++] = AX25_KISS_DATA; + + for (unsigned int i = 0U; i < length; i++) { + unsigned char c = data[i]; + + switch (c) { + case AX25_FEND: + m_txData[txLength++] = AX25_FESC; + m_txData[txLength++] = AX25_TFEND; + break; + case AX25_FESC: + m_txData[txLength++] = AX25_FESC; + m_txData[txLength++] = AX25_TFESC; + break; + default: + m_txData[txLength++] = c; + break; + } + } + + m_txData[txLength++] = AX25_FEND; + + if (m_debug) + CUtils::dump(1U, "AX25 Network Data Sent", m_txData, txLength); + + return m_serial.write(m_txData, txLength); +} + +unsigned int CAX25Network::read(unsigned char* data, unsigned int length) +{ + assert(data != NULL); + + bool complete = false; + + unsigned char c; + while (m_serial.read(&c, 1U) > 0) { + if (m_rxLength == 0U && c == AX25_FEND) + m_rxData[m_rxLength++] = c; + else if (m_rxLength > 0U) + m_rxData[m_rxLength++] = c; + + if (m_rxLength > 1U && c == AX25_FEND) { + complete = true; + break; + } + } + + if (!m_enabled) + return 0U; + + if (!complete) + return 0U; + + if (m_rxLength == 0U) + return 0U; + + if (m_rxData[1U] != AX25_KISS_DATA) { + m_rxLength = 0U; + return 0U; + } + + complete = false; + + unsigned int dataLen = 0U; + for (unsigned int i = 2U; i < m_rxLength; i++) { + unsigned char c = m_rxData[i]; + + if (c == AX25_FEND) { + complete = true; + break; + } else if (c == AX25_TFEND && m_rxLastChar == AX25_FESC) { + data[dataLen++] = AX25_FEND; + } else if (c == AX25_TFESC && m_rxLastChar == AX25_FESC) { + data[dataLen++] = AX25_FESC; + } else { + data[dataLen++] = c; + } + + m_rxLastChar = c; + } + + if (!complete) + return 0U; + + if (m_debug) + CUtils::dump(1U, "AX25 Network Data Received", m_rxData, m_rxLength); + + m_rxLength = 0U; + m_rxLastChar = 0U; + + return dataLen; +} + +void CAX25Network::reset() +{ +} + +void CAX25Network::close() +{ + m_serial.close(); + + LogMessage("Closing AX25 network connection"); +} + +void CAX25Network::enable(bool enabled) +{ + m_enabled = enabled; + + if (enabled != m_enabled) { + m_rxLastChar = 0U; + m_rxLength = 0U; + } +} diff --git a/AX25Network.h b/AX25Network.h new file mode 100644 index 000000000..c972ccb41 --- /dev/null +++ b/AX25Network.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef AX25Network_H +#define AX25Network_H + +#if defined(_WIN32) || defined(_WIN64) +#include "UARTController.h" +#else +#include "PseudoTTYController.h" +#endif + +#include +#include + +class CAX25Network { +public: + CAX25Network(const std::string& port, unsigned int speed, bool debug); + ~CAX25Network(); + + bool open(); + + void enable(bool enabled); + + bool write(const unsigned char* data, unsigned int length); + + unsigned int read(unsigned char* data, unsigned int length); + + void reset(); + + void close(); + +private: +#if defined(_WIN32) || defined(_WIN64) + CUARTController m_serial; +#else + CPseudoTTYController m_serial; +#endif + unsigned char* m_txData; + unsigned char* m_rxData; + unsigned int m_rxLength; + unsigned char m_rxLastChar; + bool m_debug; + bool m_enabled; +}; + +#endif diff --git a/CASTInfo.cpp b/CASTInfo.cpp new file mode 100644 index 000000000..1c347ccaa --- /dev/null +++ b/CASTInfo.cpp @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2016,2018,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "CASTInfo.h" + +static bool networkInfoInitialized = false; +static unsigned char passCounter = 0; + +CCASTInfo::CCASTInfo(CModem* modem) : +CDisplay(), +m_modem(modem), +m_ipaddress() +{ +} + +CCASTInfo::~CCASTInfo() +{ +} + +bool CCASTInfo::open() +{ + return true; +} + +void CCASTInfo::setIdleInt() +{ + unsigned char info[100U]; + CNetworkInfo* m_network; + + passCounter++; + if (passCounter > 253U) + networkInfoInitialized = false; + + if (!networkInfoInitialized) { + //LogMessage("Initialize CNetworkInfo"); + info[0]=0; + m_network = new CNetworkInfo; + m_network->getNetworkInterface(info); + m_ipaddress = (char*)info; + delete m_network; + + if (m_modem != NULL) + m_modem->writeIPInfo(m_ipaddress); + + networkInfoInitialized = true; + passCounter = 0; + } +} + +void CCASTInfo::setErrorInt(const char* text) +{ +} + +void CCASTInfo::setLockoutInt() +{ +} + +void CCASTInfo::setQuitInt() +{ +} + +void CCASTInfo::setFMInt() +{ +} + +void CCASTInfo::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) +{ + if (m_modem != NULL) + m_modem->writeDStarInfo(my1, my2, your, type, reflector); +} + +void CCASTInfo::clearDStarInt() +{ +} + +void CCASTInfo::writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type) +{ + if (m_modem != NULL) + m_modem->writeDMRInfo(slotNo, src, group, dst, type); +} + +void CCASTInfo::clearDMRInt(unsigned int slotNo) +{ +} + +void CCASTInfo::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) +{ + if (m_modem != NULL) + m_modem->writeYSFInfo(source, dest, dgid, type, origin); +} + +void CCASTInfo::clearFusionInt() +{ +} + +void CCASTInfo::writeP25Int(const char* source, bool group, unsigned int dest, const char* type) +{ + if (m_modem != NULL) + m_modem->writeP25Info(source, group, dest, type); +} + +void CCASTInfo::clearP25Int() +{ +} + +void CCASTInfo::writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type) +{ + if (m_modem != NULL) + m_modem->writeNXDNInfo(source, group, dest, type); +} + +void CCASTInfo::clearNXDNInt() +{ +} + +void CCASTInfo::writeM17Int(const char* source, const char* dest, const char* type) +{ + if (m_modem != NULL) + m_modem->writeM17Info(source, dest, type); +} + +void CCASTInfo::clearM17Int() +{ +} + +void CCASTInfo::writePOCSAGInt(uint32_t ric, const std::string& message) +{ + if (m_modem != NULL) + m_modem->writePOCSAGInfo(ric, message); +} + +void CCASTInfo::clearPOCSAGInt() +{ +} + +void CCASTInfo::writeCWInt() +{ +} + +void CCASTInfo::clearCWInt() +{ +} + +void CCASTInfo::close() +{ +} diff --git a/TFTSerial.h b/CASTInfo.h similarity index 59% rename from TFTSerial.h rename to CASTInfo.h index 296a4b16d..07401970a 100644 --- a/TFTSerial.h +++ b/CASTInfo.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2018,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,20 +16,21 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#if !defined(TFTSERIAL_H) -#define TFTSERIAL_H +#if !defined(CASTINFO_H) +#define CASTINFO_H #include "Display.h" -#include "Defines.h" -#include "SerialPort.h" #include -class CTFTSerial : public CDisplay +#include "NetworkInfo.h" +#include "Modem.h" + +class CCASTInfo : public CDisplay { public: - CTFTSerial(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness); - virtual ~CTFTSerial(); + CCASTInfo(CModem* modem); + virtual ~CCASTInfo(); virtual bool open(); @@ -40,6 +41,7 @@ class CTFTSerial : public CDisplay virtual void setErrorInt(const char* text); virtual void setLockoutInt(); virtual void setQuitInt(); + virtual void setFMInt(); virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); virtual void clearDStarInt(); @@ -47,7 +49,7 @@ class CTFTSerial : public CDisplay virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void clearFusionInt(); virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); @@ -56,6 +58,9 @@ class CTFTSerial : public CDisplay virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); virtual void clearNXDNInt(); + virtual void writeM17Int(const char* source, const char* dest, const char* type); + virtual void clearM17Int(); + virtual void writePOCSAGInt(uint32_t ric, const std::string& message); virtual void clearPOCSAGInt(); @@ -63,26 +68,8 @@ class CTFTSerial : public CDisplay virtual void clearCWInt(); private: - std::string m_callsign; - unsigned int m_dmrid; - ISerialPort* m_serial; - unsigned int m_brightness; - unsigned char m_mode; - - void clearScreen(); - void setBackground(unsigned char colour); - void setForeground(unsigned char colour); - void setRotation(unsigned char rotation); - void setFontSize(unsigned char size); - void gotoBegOfLine(); - void gotoPosText(unsigned char x, unsigned char y); - void gotoPosPixel(unsigned char x, unsigned char y); - void drawLine(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2); - void drawBox(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bool filled); - void drawCircle(unsigned char x, unsigned char y, unsigned char radius, bool filled); - void displayBitmap(unsigned char x, unsigned char y, const char* filename); - void setBrightness(unsigned char brightness); - void displayText(const char* text); + CModem* m_modem; + std::string m_ipaddress; }; #endif diff --git a/Conf.cpp b/Conf.cpp index 1695f3f0b..ca686dbb9 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,35 +28,40 @@ const int BUFFER_SIZE = 500; enum SECTION { - SECTION_NONE, - SECTION_GENERAL, - SECTION_INFO, - SECTION_LOG, - SECTION_CWID, - SECTION_DMRID_LOOKUP, - SECTION_NXDNID_LOOKUP, - SECTION_MODEM, - SECTION_TRANSPARENT, - SECTION_UMP, - SECTION_DSTAR, - SECTION_DMR, - SECTION_FUSION, - SECTION_P25, - SECTION_NXDN, - SECTION_POCSAG, - SECTION_DSTAR_NETWORK, - SECTION_DMR_NETWORK, - SECTION_FUSION_NETWORK, - SECTION_P25_NETWORK, - SECTION_NXDN_NETWORK, - SECTION_POCSAG_NETWORK, - SECTION_TFTSERIAL, - SECTION_HD44780, - SECTION_NEXTION, - SECTION_OLED, - SECTION_LCDPROC, - SECTION_LOCK_FILE, - SECTION_MOBILE_GPS + SECTION_NONE, + SECTION_GENERAL, + SECTION_INFO, + SECTION_LOG, + SECTION_CWID, + SECTION_DMRID_LOOKUP, + SECTION_NXDNID_LOOKUP, + SECTION_MODEM, + SECTION_TRANSPARENT, + SECTION_DSTAR, + SECTION_DMR, + SECTION_FUSION, + SECTION_P25, + SECTION_NXDN, + SECTION_M17, + SECTION_POCSAG, + SECTION_FM, + SECTION_AX25, + SECTION_DSTAR_NETWORK, + SECTION_DMR_NETWORK, + SECTION_FUSION_NETWORK, + SECTION_P25_NETWORK, + SECTION_NXDN_NETWORK, + SECTION_M17_NETWORK, + SECTION_POCSAG_NETWORK, + SECTION_FM_NETWORK, + SECTION_AX25_NETWORK, + SECTION_TFTSERIAL, + SECTION_HD44780, + SECTION_NEXTION, + SECTION_OLED, + SECTION_LCDPROC, + SECTION_LOCK_FILE, + SECTION_REMOTE_CONTROL }; CConf::CConf(const std::string& file) : @@ -80,6 +85,7 @@ m_logDisplayLevel(0U), m_logFileLevel(0U), m_logFilePath(), m_logFileRoot(), +m_logFileRotate(true), m_cwIdEnabled(false), m_cwIdTime(10U), m_cwIdCallsign(), @@ -87,9 +93,15 @@ m_dmrIdLookupFile(), m_dmrIdLookupTime(0U), m_nxdnIdLookupFile(), m_nxdnIdLookupTime(0U), -m_modemPort(), m_modemProtocol("uart"), -m_modemAddress(0x22), +m_modemUARTPort(), +m_modemUARTSpeed(115200U), +m_modemI2CPort(), +m_modemI2CAddress(0x22U), +m_modemModemAddress(), +m_modemModemPort(0U), +m_modemLocalAddress(), +m_modemLocalPort(0U), m_modemRXInvert(false), m_modemTXInvert(false), m_modemPTTInvert(false), @@ -107,8 +119,12 @@ m_modemDMRTXLevel(50.0F), m_modemYSFTXLevel(50.0F), m_modemP25TXLevel(50.0F), m_modemNXDNTXLevel(50.0F), +m_modemM17TXLevel(50.0F), m_modemPOCSAGTXLevel(50.0F), +m_modemFMTXLevel(50.0F), +m_modemAX25TXLevel(50.0F), m_modemRSSIMappingFile(), +m_modemUseCOSAsLockout(false), m_modemTrace(false), m_modemDebug(false), m_transparentEnabled(false), @@ -116,20 +132,19 @@ m_transparentRemoteAddress(), m_transparentRemotePort(0U), m_transparentLocalPort(0U), m_transparentSendFrameType(0U), -m_umpEnabled(false), -m_umpPort(), m_dstarEnabled(false), m_dstarModule("C"), m_dstarSelfOnly(false), m_dstarBlackList(), +m_dstarWhiteList(), m_dstarAckReply(true), m_dstarAckTime(750U), -m_dstarAckMessage(false), +m_dstarAckMessage(DSTAR_ACK_BER), m_dstarErrorReply(true), m_dstarRemoteGateway(false), m_dstarModeHang(10U), m_dmrEnabled(false), -m_dmrBeacons(false), +m_dmrBeacons(DMR_BEACONS_OFF), m_dmrBeaconInterval(60U), m_dmrBeaconDuration(3U), m_dmrId(0U), @@ -145,13 +160,12 @@ m_dmrSlot2TGWhiteList(), m_dmrCallHang(10U), m_dmrTXHang(4U), m_dmrModeHang(10U), +m_dmrOVCM(DMR_OVCM_OFF), m_fusionEnabled(false), m_fusionLowDeviation(false), m_fusionRemoteGateway(false), m_fusionSelfOnly(false), m_fusionTXHang(4U), -m_fusionSQLEnabled(false), -m_fusionSQL(0U), m_fusionModeHang(10U), m_p25Enabled(false), m_p25Id(0U), @@ -159,25 +173,78 @@ m_p25NAC(0x293U), m_p25SelfOnly(false), m_p25OverrideUID(false), m_p25RemoteGateway(false), +m_p25TXHang(5U), m_p25ModeHang(10U), m_nxdnEnabled(false), m_nxdnId(0U), m_nxdnRAN(1U), m_nxdnSelfOnly(false), m_nxdnRemoteGateway(false), +m_nxdnTXHang(5U), m_nxdnModeHang(10U), +m_m17Enabled(false), +m_m17CAN(0U), +m_m17SelfOnly(false), +m_m17AllowEncryption(false), +m_m17TXHang(5U), +m_m17ModeHang(10U), m_pocsagEnabled(false), m_pocsagFrequency(0U), +m_fmEnabled(false), +m_fmCallsign(), +m_fmCallsignSpeed(20U), +m_fmCallsignFrequency(1000U), +m_fmCallsignTime(10U), +m_fmCallsignHoldoff(1U), +m_fmCallsignHighLevel(35.0F), +m_fmCallsignLowLevel(15.0F), +m_fmCallsignAtStart(true), +m_fmCallsignAtEnd(true), +m_fmCallsignAtLatch(true), +m_fmRFAck("K"), +m_fmExtAck("N"), +m_fmAckSpeed(20U), +m_fmAckFrequency(1750U), +m_fmAckMinTime(5U), +m_fmAckDelay(1000U), +m_fmAckLevel(80.0F), +m_fmTimeout(180U), +m_fmTimeoutLevel(80.0F), +m_fmCTCSSFrequency(88.6F), +m_fmCTCSSHighThreshold(30U), +m_fmCTCSSLowThreshold(20U), +m_fmCTCSSLevel(2.0F), +m_fmKerchunkTime(0U), +m_fmHangTime(7U), +m_fmAccessMode(1U), +m_fmLinkMode(false), +m_fmCOSInvert(false), +m_fmNoiseSquelch(false), +m_fmSquelchHighThreshold(30U), +m_fmSquelchLowThreshold(20U), +m_fmRFAudioBoost(1U), +m_fmMaxDevLevel(90.0F), +m_fmExtAudioBoost(1U), +m_fmModeHang(10U), +m_ax25Enabled(false), +m_ax25TXDelay(300U), +m_ax25RXTwist(6), +m_ax25SlotTime(30U), +m_ax25PPersist(128U), +m_ax25Trace(false), m_dstarNetworkEnabled(false), m_dstarGatewayAddress(), m_dstarGatewayPort(0U), +m_dstarLocalAddress(), m_dstarLocalPort(0U), m_dstarNetworkModeHang(3U), m_dstarNetworkDebug(false), m_dmrNetworkEnabled(false), -m_dmrNetworkAddress(), -m_dmrNetworkPort(0U), -m_dmrNetworkLocal(0U), +m_dmrNetworkType("Gateway"), +m_dmrNetworkRemoteAddress(), +m_dmrNetworkRemotePort(0U), +m_dmrNetworkLocalAddress(), +m_dmrNetworkLocalPort(0U), m_dmrNetworkPassword(), m_dmrNetworkOptions(), m_dmrNetworkDebug(false), @@ -186,8 +253,8 @@ m_dmrNetworkSlot1(true), m_dmrNetworkSlot2(true), m_dmrNetworkModeHang(3U), m_fusionNetworkEnabled(false), -m_fusionNetworkMyAddress(), -m_fusionNetworkMyPort(0U), +m_fusionNetworkLocalAddress(), +m_fusionNetworkLocalPort(0U), m_fusionNetworkGatewayAddress(), m_fusionNetworkGatewayPort(0U), m_fusionNetworkModeHang(3U), @@ -195,16 +262,25 @@ m_fusionNetworkDebug(false), m_p25NetworkEnabled(false), m_p25GatewayAddress(), m_p25GatewayPort(0U), +m_p25LocalAddress(), m_p25LocalPort(0U), m_p25NetworkModeHang(3U), m_p25NetworkDebug(false), m_nxdnNetworkEnabled(false), +m_nxdnNetworkProtocol("Icom"), m_nxdnGatewayAddress(), m_nxdnGatewayPort(0U), m_nxdnLocalAddress(), m_nxdnLocalPort(0U), m_nxdnNetworkModeHang(3U), m_nxdnNetworkDebug(false), +m_m17NetworkEnabled(false), +m_m17GatewayAddress(), +m_m17GatewayPort(0U), +m_m17LocalAddress(), +m_m17LocalPort(0U), +m_m17NetworkModeHang(3U), +m_m17NetworkDebug(false), m_pocsagNetworkEnabled(false), m_pocsagGatewayAddress(), m_pocsagGatewayPort(0U), @@ -212,8 +288,27 @@ m_pocsagLocalAddress(), m_pocsagLocalPort(0U), m_pocsagNetworkModeHang(3U), m_pocsagNetworkDebug(false), +m_fmNetworkEnabled(false), +m_fmNetworkProtocol("USRP"), +m_fmNetworkSampleRate(48000U), +m_fmNetworkSquelchFile(), +m_fmGatewayAddress(), +m_fmGatewayPort(0U), +m_fmLocalAddress(), +m_fmLocalPort(0U), +m_fmPreEmphasis(true), +m_fmDeEmphasis(true), +m_fmTXAudioGain(1.0F), +m_fmRXAudioGain(1.0F), +m_fmNetworkModeHang(3U), +m_fmNetworkDebug(false), +m_ax25NetworkEnabled(false), +m_ax25NetworkPort(), +m_ax25NetworkSpeed(9600U), +m_ax25NetworkDebug(false), m_tftSerialPort("/dev/ttyAMA0"), m_tftSerialBrightness(50U), +m_tftSerialScreenLayout(0U), m_hd44780Rows(2U), m_hd44780Columns(16U), m_hd44780Pins(), @@ -236,17 +331,18 @@ m_oledBrightness(0U), m_oledInvert(false), m_oledScroll(false), m_oledRotate(false), -m_oledCast(false), +m_oledLogoScreensaver(true), m_lcdprocAddress(), m_lcdprocPort(0U), m_lcdprocLocalPort(0U), m_lcdprocDisplayClock(false), m_lcdprocUTC(false), +m_lcdprocDimOnIdle(false), m_lockFileEnabled(false), m_lockFileName(), -m_mobileGPSEnabled(false), -m_mobileGPSAddress(), -m_mobileGPSPort(0U) +m_remoteControlEnabled(false), +m_remoteControlAddress("127.0.0.1"), +m_remoteControlPort(0U) { } @@ -256,569 +352,814 @@ CConf::~CConf() bool CConf::read() { - FILE* fp = ::fopen(m_file.c_str(), "rt"); - if (fp == NULL) { - ::fprintf(stderr, "Couldn't open the .ini file - %s\n", m_file.c_str()); - return false; - } - - SECTION section = SECTION_NONE; - - char buffer[BUFFER_SIZE]; - while (::fgets(buffer, BUFFER_SIZE, fp) != NULL) { - if (buffer[0U] == '#') - continue; - - if (buffer[0U] == '[') { - if (::strncmp(buffer, "[General]", 9U) == 0) - section = SECTION_GENERAL; - else if (::strncmp(buffer, "[Info]", 6U) == 0) - section = SECTION_INFO; - else if (::strncmp(buffer, "[Log]", 5U) == 0) - section = SECTION_LOG; - else if (::strncmp(buffer, "[CW Id]", 7U) == 0) - section = SECTION_CWID; - else if (::strncmp(buffer, "[DMR Id Lookup]", 15U) == 0) - section = SECTION_DMRID_LOOKUP; - else if (::strncmp(buffer, "[NXDN Id Lookup]", 16U) == 0) - section = SECTION_NXDNID_LOOKUP; - else if (::strncmp(buffer, "[Modem]", 7U) == 0) - section = SECTION_MODEM; - else if (::strncmp(buffer, "[Transparent Data]", 18U) == 0) - section = SECTION_TRANSPARENT; - else if (::strncmp(buffer, "[UMP]", 5U) == 0) - section = SECTION_UMP; - else if (::strncmp(buffer, "[D-Star]", 8U) == 0) - section = SECTION_DSTAR; - else if (::strncmp(buffer, "[DMR]", 5U) == 0) - section = SECTION_DMR; - else if (::strncmp(buffer, "[System Fusion]", 15U) == 0) - section = SECTION_FUSION; - else if (::strncmp(buffer, "[P25]", 5U) == 0) - section = SECTION_P25; - else if (::strncmp(buffer, "[NXDN]", 6U) == 0) - section = SECTION_NXDN; - else if (::strncmp(buffer, "[POCSAG]", 8U) == 0) - section = SECTION_POCSAG; - else if (::strncmp(buffer, "[D-Star Network]", 16U) == 0) - section = SECTION_DSTAR_NETWORK; - else if (::strncmp(buffer, "[DMR Network]", 13U) == 0) - section = SECTION_DMR_NETWORK; - else if (::strncmp(buffer, "[System Fusion Network]", 23U) == 0) - section = SECTION_FUSION_NETWORK; - else if (::strncmp(buffer, "[P25 Network]", 13U) == 0) - section = SECTION_P25_NETWORK; - else if (::strncmp(buffer, "[NXDN Network]", 14U) == 0) - section = SECTION_NXDN_NETWORK; - else if (::strncmp(buffer, "[POCSAG Network]", 16U) == 0) - section = SECTION_POCSAG_NETWORK; - else if (::strncmp(buffer, "[TFT Serial]", 12U) == 0) - section = SECTION_TFTSERIAL; - else if (::strncmp(buffer, "[HD44780]", 9U) == 0) - section = SECTION_HD44780; - else if (::strncmp(buffer, "[Nextion]", 9U) == 0) - section = SECTION_NEXTION; - else if (::strncmp(buffer, "[OLED]", 6U) == 0) - section = SECTION_OLED; - else if (::strncmp(buffer, "[LCDproc]", 9U) == 0) - section = SECTION_LCDPROC; - else if (::strncmp(buffer, "[Lock File]", 11U) == 0) - section = SECTION_LOCK_FILE; - else if (::strncmp(buffer, "[Mobile GPS]", 12U) == 0) - section = SECTION_MOBILE_GPS; - else - section = SECTION_NONE; - - continue; - } - - char* key = ::strtok(buffer, " \t=\r\n"); - if (key == NULL) - continue; - - char* value = ::strtok(NULL, "\r\n"); - if (value == NULL) - continue; - - // Remove quotes from the value - size_t len = ::strlen(value); - if (len > 1U && *value == '"' && value[len - 1U] == '"') { - value[len - 1U] = '\0'; - value++; - } - - if (section == SECTION_GENERAL) { - if (::strcmp(key, "Callsign") == 0) { - // Convert the callsign to upper case - for (unsigned int i = 0U; value[i] != 0; i++) - value[i] = ::toupper(value[i]); - m_cwIdCallsign = m_callsign = value; - } else if (::strcmp(key, "Id") == 0) - m_id = m_p25Id = m_dmrId = (unsigned int)::atoi(value); - else if (::strcmp(key, "Timeout") == 0) - m_timeout = (unsigned int)::atoi(value); - else if (::strcmp(key, "Duplex") == 0) - m_duplex = ::atoi(value) == 1; - else if (::strcmp(key, "ModeHang") == 0) - m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = - m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "RFModeHang") == 0) - m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "NetModeHang") == 0) - m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "Display") == 0) - m_display = value; - else if (::strcmp(key, "Daemon") == 0) - m_daemon = ::atoi(value) == 1; - } else if (section == SECTION_INFO) { - if (::strcmp(key, "TXFrequency") == 0) - m_pocsagFrequency = m_txFrequency = (unsigned int)::atoi(value); - else if (::strcmp(key, "RXFrequency") == 0) - m_rxFrequency = (unsigned int)::atoi(value); - else if (::strcmp(key, "Power") == 0) - m_power = (unsigned int)::atoi(value); - else if (::strcmp(key, "Latitude") == 0) - m_latitude = float(::atof(value)); - else if (::strcmp(key, "Longitude") == 0) - m_longitude = float(::atof(value)); - else if (::strcmp(key, "Height") == 0) - m_height = ::atoi(value); - else if (::strcmp(key, "Location") == 0) - m_location = value; - else if (::strcmp(key, "Description") == 0) - m_description = value; - else if (::strcmp(key, "URL") == 0) - m_url = value; - } else if (section == SECTION_LOG) { - if (::strcmp(key, "FilePath") == 0) - m_logFilePath = value; - else if (::strcmp(key, "FileRoot") == 0) - m_logFileRoot = value; - else if (::strcmp(key, "FileLevel") == 0) - m_logFileLevel = (unsigned int)::atoi(value); - else if (::strcmp(key, "DisplayLevel") == 0) - m_logDisplayLevel = (unsigned int)::atoi(value); - } else if (section == SECTION_CWID) { - if (::strcmp(key, "Enable") == 0) - m_cwIdEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "Time") == 0) - m_cwIdTime = (unsigned int)::atoi(value); - else if (::strcmp(key, "Callsign") == 0) { - // Convert the callsign to upper case - for (unsigned int i = 0U; value[i] != 0; i++) - value[i] = ::toupper(value[i]); - m_cwIdCallsign = value; + FILE* fp = ::fopen(m_file.c_str(), "rt"); + if (fp == NULL) { + ::fprintf(stderr, "Couldn't open the .ini file - %s\n", m_file.c_str()); + return false; + } + + SECTION section = SECTION_NONE; + + char buffer[BUFFER_SIZE]; + while (::fgets(buffer, BUFFER_SIZE, fp) != NULL) { + if (buffer[0U] == '#') + continue; + + if (buffer[0U] == '[') { + if (::strncmp(buffer, "[General]", 9U) == 0) + section = SECTION_GENERAL; + else if (::strncmp(buffer, "[Info]", 6U) == 0) + section = SECTION_INFO; + else if (::strncmp(buffer, "[Log]", 5U) == 0) + section = SECTION_LOG; + else if (::strncmp(buffer, "[CW Id]", 7U) == 0) + section = SECTION_CWID; + else if (::strncmp(buffer, "[DMR Id Lookup]", 15U) == 0) + section = SECTION_DMRID_LOOKUP; + else if (::strncmp(buffer, "[NXDN Id Lookup]", 16U) == 0) + section = SECTION_NXDNID_LOOKUP; + else if (::strncmp(buffer, "[Modem]", 7U) == 0) + section = SECTION_MODEM; + else if (::strncmp(buffer, "[Transparent Data]", 18U) == 0) + section = SECTION_TRANSPARENT; + else if (::strncmp(buffer, "[D-Star]", 8U) == 0) + section = SECTION_DSTAR; + else if (::strncmp(buffer, "[DMR]", 5U) == 0) + section = SECTION_DMR; + else if (::strncmp(buffer, "[System Fusion]", 15U) == 0) + section = SECTION_FUSION; + else if (::strncmp(buffer, "[P25]", 5U) == 0) + section = SECTION_P25; + else if (::strncmp(buffer, "[NXDN]", 6U) == 0) + section = SECTION_NXDN; + else if (::strncmp(buffer, "[M17]", 5U) == 0) + section = SECTION_M17; + else if (::strncmp(buffer, "[POCSAG]", 8U) == 0) + section = SECTION_POCSAG; + else if (::strncmp(buffer, "[FM]", 4U) == 0) + section = SECTION_FM; + else if (::strncmp(buffer, "[AX.25]", 7U) == 0) + section = SECTION_AX25; + else if (::strncmp(buffer, "[D-Star Network]", 16U) == 0) + section = SECTION_DSTAR_NETWORK; + else if (::strncmp(buffer, "[DMR Network]", 13U) == 0) + section = SECTION_DMR_NETWORK; + else if (::strncmp(buffer, "[System Fusion Network]", 23U) == 0) + section = SECTION_FUSION_NETWORK; + else if (::strncmp(buffer, "[P25 Network]", 13U) == 0) + section = SECTION_P25_NETWORK; + else if (::strncmp(buffer, "[NXDN Network]", 14U) == 0) + section = SECTION_NXDN_NETWORK; + else if (::strncmp(buffer, "[M17 Network]", 13U) == 0) + section = SECTION_M17_NETWORK; + else if (::strncmp(buffer, "[POCSAG Network]", 16U) == 0) + section = SECTION_POCSAG_NETWORK; + else if (::strncmp(buffer, "[FM Network]", 12U) == 0) + section = SECTION_FM_NETWORK; + else if (::strncmp(buffer, "[AX.25 Network]", 15U) == 0) + section = SECTION_AX25_NETWORK; + else if (::strncmp(buffer, "[TFT Serial]", 12U) == 0) + section = SECTION_TFTSERIAL; + else if (::strncmp(buffer, "[HD44780]", 9U) == 0) + section = SECTION_HD44780; + else if (::strncmp(buffer, "[Nextion]", 9U) == 0) + section = SECTION_NEXTION; + else if (::strncmp(buffer, "[OLED]", 6U) == 0) + section = SECTION_OLED; + else if (::strncmp(buffer, "[LCDproc]", 9U) == 0) + section = SECTION_LCDPROC; + else if (::strncmp(buffer, "[Lock File]", 11U) == 0) + section = SECTION_LOCK_FILE; + else if (::strncmp(buffer, "[Remote Control]", 16U) == 0) + section = SECTION_REMOTE_CONTROL; + else + section = SECTION_NONE; + + continue; } - } else if (section == SECTION_DMRID_LOOKUP) { - if (::strcmp(key, "File") == 0) - m_dmrIdLookupFile = value; - else if (::strcmp(key, "Time") == 0) - m_dmrIdLookupTime = (unsigned int)::atoi(value); - } else if (section == SECTION_NXDNID_LOOKUP) { - if (::strcmp(key, "File") == 0) - m_nxdnIdLookupFile = value; - else if (::strcmp(key, "Time") == 0) - m_nxdnIdLookupTime = (unsigned int)::atoi(value); - } else if (section == SECTION_MODEM) { - if (::strcmp(key, "Port") == 0) - m_modemPort = value; - else if (::strcmp(key, "Protocol") == 0) - m_modemProtocol = value; - else if (::strcmp(key, "Address") == 0) - m_modemAddress = (unsigned int)::strtoul(value, NULL, 16); - else if (::strcmp(key, "RXInvert") == 0) - m_modemRXInvert = ::atoi(value) == 1; - else if (::strcmp(key, "TXInvert") == 0) - m_modemTXInvert = ::atoi(value) == 1; - else if (::strcmp(key, "PTTInvert") == 0) - m_modemPTTInvert = ::atoi(value) == 1; - else if (::strcmp(key, "TXDelay") == 0) - m_modemTXDelay = (unsigned int)::atoi(value); - else if (::strcmp(key, "DMRDelay") == 0) - m_modemDMRDelay = (unsigned int)::atoi(value); - else if (::strcmp(key, "RXOffset") == 0) - m_modemRXOffset = ::atoi(value); - else if (::strcmp(key, "TXOffset") == 0) - m_modemTXOffset = ::atoi(value); - else if (::strcmp(key, "RXDCOffset") == 0) - m_modemRXDCOffset = ::atoi(value); - else if (::strcmp(key, "TXDCOffset") == 0) - m_modemTXDCOffset = ::atoi(value); - else if (::strcmp(key, "RFLevel") == 0) - m_modemRFLevel = float(::atof(value)); - else if (::strcmp(key, "RXLevel") == 0) - m_modemRXLevel = float(::atof(value)); - else if (::strcmp(key, "TXLevel") == 0) - m_modemCWIdTXLevel = m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = m_modemP25TXLevel = m_modemNXDNTXLevel = float(::atof(value)); - else if (::strcmp(key, "CWIdTXLevel") == 0) - m_modemCWIdTXLevel = float(::atof(value)); - else if (::strcmp(key, "D-StarTXLevel") == 0) - m_modemDStarTXLevel = float(::atof(value)); - else if (::strcmp(key, "DMRTXLevel") == 0) - m_modemDMRTXLevel = float(::atof(value)); - else if (::strcmp(key, "YSFTXLevel") == 0) - m_modemYSFTXLevel = float(::atof(value)); - else if (::strcmp(key, "P25TXLevel") == 0) - m_modemP25TXLevel = float(::atof(value)); - else if (::strcmp(key, "NXDNTXLevel") == 0) - m_modemNXDNTXLevel = float(::atof(value)); - else if (::strcmp(key, "POCSAGTXLevel") == 0) - m_modemPOCSAGTXLevel = float(::atof(value)); - else if (::strcmp(key, "RSSIMappingFile") == 0) - m_modemRSSIMappingFile = value; - else if (::strcmp(key, "Trace") == 0) - m_modemTrace = ::atoi(value) == 1; - else if (::strcmp(key, "Debug") == 0) - m_modemDebug = ::atoi(value) == 1; - } else if (section == SECTION_TRANSPARENT) { - if (::strcmp(key, "Enable") == 0) - m_transparentEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "RemoteAddress") == 0) - m_transparentRemoteAddress = value; - else if (::strcmp(key, "RemotePort") == 0) - m_transparentRemotePort = (unsigned int)::atoi(value); - else if (::strcmp(key, "LocalPort") == 0) - m_transparentLocalPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "SendFrameType") == 0) - m_transparentSendFrameType = (unsigned int)::atoi(value); - } else if (section == SECTION_UMP) { - if (::strcmp(key, "Enable") == 0) - m_umpEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "Port") == 0) - m_umpPort = value; - } else if (section == SECTION_DSTAR) { - if (::strcmp(key, "Enable") == 0) - m_dstarEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "Module") == 0) { - // Convert the module to upper case - for (unsigned int i = 0U; value[i] != 0; i++) - value[i] = ::toupper(value[i]); - m_dstarModule = value; - } else if (::strcmp(key, "SelfOnly") == 0) - m_dstarSelfOnly = ::atoi(value) == 1; - else if (::strcmp(key, "BlackList") == 0) { - char* p = ::strtok(value, ",\r\n"); - while (p != NULL) { - if (::strlen(p) > 0U) { - for (unsigned int i = 0U; p[i] != 0; i++) - p[i] = ::toupper(p[i]); - std::string callsign = std::string(p); - callsign.resize(DSTAR_LONG_CALLSIGN_LENGTH, ' '); - m_dstarBlackList.push_back(callsign); - } - p = ::strtok(NULL, ",\r\n"); - } - } else if (::strcmp(key, "AckReply") == 0) - m_dstarAckReply = ::atoi(value) == 1; - else if (::strcmp(key, "AckTime") == 0) - m_dstarAckTime = (unsigned int)::atoi(value); - else if (::strcmp(key, "AckMessage") == 0) - m_dstarAckMessage = ::atoi(value) == 1; - else if (::strcmp(key, "ErrorReply") == 0) - m_dstarErrorReply = ::atoi(value) == 1; - else if (::strcmp(key, "RemoteGateway") == 0) - m_dstarRemoteGateway = ::atoi(value) == 1; - else if (::strcmp(key, "ModeHang") == 0) - m_dstarModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_DMR) { - if (::strcmp(key, "Enable") == 0) - m_dmrEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "Beacons") == 0) - m_dmrBeacons = ::atoi(value) == 1; - else if (::strcmp(key, "BeaconInterval") == 0) - m_dmrBeaconInterval = (unsigned int)::atoi(value); - else if (::strcmp(key, "BeaconDuration") == 0) - m_dmrBeaconDuration = (unsigned int)::atoi(value); - else if (::strcmp(key, "Id") == 0) - m_dmrId = (unsigned int)::atoi(value); - else if (::strcmp(key, "ColorCode") == 0) - m_dmrColorCode = (unsigned int)::atoi(value); - else if (::strcmp(key, "SelfOnly") == 0) - m_dmrSelfOnly = ::atoi(value) == 1; - else if (::strcmp(key, "EmbeddedLCOnly") == 0) - m_dmrEmbeddedLCOnly = ::atoi(value) == 1; - else if (::strcmp(key, "DumpTAData") == 0) - m_dmrDumpTAData = ::atoi(value) == 1; - else if (::strcmp(key, "Prefixes") == 0) { - char* p = ::strtok(value, ",\r\n"); - while (p != NULL) { - unsigned int prefix = (unsigned int)::atoi(p); - if (prefix > 0U && prefix <= 999U) - m_dmrPrefixes.push_back(prefix); - p = ::strtok(NULL, ",\r\n"); - } - } else if (::strcmp(key, "BlackList") == 0) { - char* p = ::strtok(value, ",\r\n"); - while (p != NULL) { - unsigned int id = (unsigned int)::atoi(p); - if (id > 0U) - m_dmrBlackList.push_back(id); - p = ::strtok(NULL, ",\r\n"); - } - } else if (::strcmp(key, "WhiteList") == 0) { - char* p = ::strtok(value, ",\r\n"); - while (p != NULL) { - unsigned int id = (unsigned int)::atoi(p); - if (id > 0U) - m_dmrWhiteList.push_back(id); - p = ::strtok(NULL, ",\r\n"); - } - } else if (::strcmp(key, "Slot1TGWhiteList") == 0) { - char* p = ::strtok(value, ",\r\n"); - while (p != NULL) { - unsigned int id = (unsigned int)::atoi(p); - if (id > 0U) - m_dmrSlot1TGWhiteList.push_back(id); - p = ::strtok(NULL, ",\r\n"); + + char* key = ::strtok(buffer, " \t=\r\n"); + if (key == NULL) + continue; + + char* value = ::strtok(NULL, "\r\n"); + if (value == NULL) + continue; + + // Remove quotes from the value + size_t len = ::strlen(value); + if (len > 1U && *value == '"' && value[len - 1U] == '"') { + value[len - 1U] = '\0'; + value++; + } else { + char *p; + + // if value is not quoted, remove after # (to make comment) + if ((p = strchr(value, '#')) != NULL) + *p = '\0'; + + // remove trailing tab/space + for (p = value + strlen(value) - 1U; p >= value && (*p == '\t' || *p == ' '); p--) + *p = '\0'; + } + + if (section == SECTION_GENERAL) { + if (::strcmp(key, "Callsign") == 0) { + // Convert the callsign to upper case + for (unsigned int i = 0U; value[i] != 0; i++) + value[i] = ::toupper(value[i]); + m_fmCallsign = m_cwIdCallsign = m_callsign = value; + } else if (::strcmp(key, "Id") == 0) + m_id = m_p25Id = m_dmrId = (unsigned int)::atoi(value); + else if (::strcmp(key, "Timeout") == 0) + m_fmTimeout = m_timeout = (unsigned int)::atoi(value); + else if (::strcmp(key, "Duplex") == 0) + m_duplex = ::atoi(value) == 1; + else if (::strcmp(key, "ModeHang") == 0) + m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = m_nxdnNetworkModeHang = m_m17NetworkModeHang = m_fmNetworkModeHang = + m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = m_nxdnModeHang = m_m17ModeHang = m_fmModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "RFModeHang") == 0) + m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = m_nxdnModeHang = m_m17ModeHang = m_fmModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "NetModeHang") == 0) + m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = m_nxdnNetworkModeHang = m_m17NetworkModeHang = m_fmNetworkModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "Display") == 0) + m_display = value; + else if (::strcmp(key, "Daemon") == 0) + m_daemon = ::atoi(value) == 1; + } else if (section == SECTION_INFO) { + if (::strcmp(key, "TXFrequency") == 0) + m_pocsagFrequency = m_txFrequency = (unsigned int)::atoi(value); + else if (::strcmp(key, "RXFrequency") == 0) + m_rxFrequency = (unsigned int)::atoi(value); + else if (::strcmp(key, "Power") == 0) + m_power = (unsigned int)::atoi(value); + else if (::strcmp(key, "Latitude") == 0) + m_latitude = float(::atof(value)); + else if (::strcmp(key, "Longitude") == 0) + m_longitude = float(::atof(value)); + else if (::strcmp(key, "Height") == 0) + m_height = ::atoi(value); + else if (::strcmp(key, "Location") == 0) + m_location = value; + else if (::strcmp(key, "Description") == 0) + m_description = value; + else if (::strcmp(key, "URL") == 0) + m_url = value; + } else if (section == SECTION_LOG) { + if (::strcmp(key, "FilePath") == 0) + m_logFilePath = value; + else if (::strcmp(key, "FileRoot") == 0) + m_logFileRoot = value; + else if (::strcmp(key, "FileLevel") == 0) + m_logFileLevel = (unsigned int)::atoi(value); + else if (::strcmp(key, "DisplayLevel") == 0) + m_logDisplayLevel = (unsigned int)::atoi(value); + else if (::strcmp(key, "FileRotate") == 0) + m_logFileRotate = ::atoi(value) == 1; + } else if (section == SECTION_CWID) { + if (::strcmp(key, "Enable") == 0) + m_cwIdEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Time") == 0) + m_cwIdTime = (unsigned int)::atoi(value); + else if (::strcmp(key, "Callsign") == 0) { + // Convert the callsign to upper case + for (unsigned int i = 0U; value[i] != 0; i++) + value[i] = ::toupper(value[i]); + m_cwIdCallsign = value; } - } else if (::strcmp(key, "Slot2TGWhiteList") == 0) { - char* p = ::strtok(value, ",\r\n"); - while (p != NULL) { - unsigned int id = (unsigned int)::atoi(p); - if (id > 0U) - m_dmrSlot2TGWhiteList.push_back(id); - p = ::strtok(NULL, ",\r\n"); + } else if (section == SECTION_DMRID_LOOKUP) { + if (::strcmp(key, "File") == 0) + m_dmrIdLookupFile = value; + else if (::strcmp(key, "Time") == 0) + m_dmrIdLookupTime = (unsigned int)::atoi(value); + } else if (section == SECTION_NXDNID_LOOKUP) { + if (::strcmp(key, "File") == 0) + m_nxdnIdLookupFile = value; + else if (::strcmp(key, "Time") == 0) + m_nxdnIdLookupTime = (unsigned int)::atoi(value); + } else if (section == SECTION_MODEM) { + if (::strcmp(key, "Protocol") == 0) + m_modemProtocol = value; + else if (::strcmp(key, "UARTPort") == 0) + m_modemUARTPort = value; + else if (::strcmp(key, "UARTSpeed") == 0) + m_modemUARTSpeed = (unsigned int)::atoi(value); + else if (::strcmp(key, "I2CPort") == 0) + m_modemI2CPort = value; + else if (::strcmp(key, "I2CAddress") == 0) + m_modemI2CAddress = (unsigned int)::strtoul(value, NULL, 16); + else if (::strcmp(key, "ModemAddress") == 0) + m_modemModemAddress = value; + else if (::strcmp(key, "ModemPort") == 0) + m_modemModemPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalAddress") == 0) + m_modemLocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_modemLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "RXInvert") == 0) + m_modemRXInvert = ::atoi(value) == 1; + else if (::strcmp(key, "TXInvert") == 0) + m_modemTXInvert = ::atoi(value) == 1; + else if (::strcmp(key, "PTTInvert") == 0) + m_modemPTTInvert = ::atoi(value) == 1; + else if (::strcmp(key, "TXDelay") == 0) + m_ax25TXDelay = m_modemTXDelay = (unsigned int)::atoi(value); + else if (::strcmp(key, "DMRDelay") == 0) + m_modemDMRDelay = (unsigned int)::atoi(value); + else if (::strcmp(key, "RXOffset") == 0) + m_modemRXOffset = ::atoi(value); + else if (::strcmp(key, "TXOffset") == 0) + m_modemTXOffset = ::atoi(value); + else if (::strcmp(key, "RXDCOffset") == 0) + m_modemRXDCOffset = ::atoi(value); + else if (::strcmp(key, "TXDCOffset") == 0) + m_modemTXDCOffset = ::atoi(value); + else if (::strcmp(key, "RFLevel") == 0) + m_modemRFLevel = float(::atof(value)); + else if (::strcmp(key, "RXLevel") == 0) + m_modemRXLevel = float(::atof(value)); + else if (::strcmp(key, "TXLevel") == 0) + m_modemAX25TXLevel = m_modemFMTXLevel = m_modemCWIdTXLevel = m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = m_modemP25TXLevel = m_modemNXDNTXLevel = m_modemM17TXLevel = m_modemPOCSAGTXLevel = float(::atof(value)); + else if (::strcmp(key, "CWIdTXLevel") == 0) + m_modemCWIdTXLevel = float(::atof(value)); + else if (::strcmp(key, "D-StarTXLevel") == 0) + m_modemDStarTXLevel = float(::atof(value)); + else if (::strcmp(key, "DMRTXLevel") == 0) + m_modemDMRTXLevel = float(::atof(value)); + else if (::strcmp(key, "YSFTXLevel") == 0) + m_modemYSFTXLevel = float(::atof(value)); + else if (::strcmp(key, "P25TXLevel") == 0) + m_modemP25TXLevel = float(::atof(value)); + else if (::strcmp(key, "NXDNTXLevel") == 0) + m_modemNXDNTXLevel = float(::atof(value)); + else if (::strcmp(key, "M17TXLevel") == 0) + m_modemM17TXLevel = float(::atof(value)); + else if (::strcmp(key, "POCSAGTXLevel") == 0) + m_modemPOCSAGTXLevel = float(::atof(value)); + else if (::strcmp(key, "FMTXLevel") == 0) + m_modemFMTXLevel = float(::atof(value)); + else if (::strcmp(key, "AX25TXLevel") == 0) + m_modemAX25TXLevel = float(::atof(value)); + else if (::strcmp(key, "RSSIMappingFile") == 0) + m_modemRSSIMappingFile = value; + else if (::strcmp(key, "UseCOSAsLockout") == 0) + m_modemUseCOSAsLockout = ::atoi(value) == 1; + else if (::strcmp(key, "Trace") == 0) + m_modemTrace = ::atoi(value) == 1; + else if (::strcmp(key, "Debug") == 0) + m_modemDebug = ::atoi(value) == 1; + } else if (section == SECTION_TRANSPARENT) { + if (::strcmp(key, "Enable") == 0) + m_transparentEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "RemoteAddress") == 0) + m_transparentRemoteAddress = value; + else if (::strcmp(key, "RemotePort") == 0) + m_transparentRemotePort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalPort") == 0) + m_transparentLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "SendFrameType") == 0) + m_transparentSendFrameType = (unsigned int)::atoi(value); + } else if (section == SECTION_DSTAR) { + if (::strcmp(key, "Enable") == 0) + m_dstarEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Module") == 0) { + // Convert the module to upper case + for (unsigned int i = 0U; value[i] != 0; i++) + value[i] = ::toupper(value[i]); + m_dstarModule = value; + } else if (::strcmp(key, "SelfOnly") == 0) + m_dstarSelfOnly = ::atoi(value) == 1; + else if (::strcmp(key, "BlackList") == 0) { + char* p = ::strtok(value, ",\r\n"); + while (p != NULL) { + if (::strlen(p) > 0U) { + for (unsigned int i = 0U; p[i] != 0; i++) + p[i] = ::toupper(p[i]); + std::string callsign = std::string(p); + callsign.resize(DSTAR_LONG_CALLSIGN_LENGTH, ' '); + m_dstarBlackList.push_back(callsign); + } + p = ::strtok(NULL, ",\r\n"); + } + } else if (::strcmp(key, "WhiteList") == 0) { + char* p = ::strtok(value, ",\r\n"); + while (p != NULL) { + if (::strlen(p) > 0U) { + for (unsigned int i = 0U; p[i] != 0; i++) + p[i] = ::toupper(p[i]); + std::string callsign = std::string(p); + callsign.resize(DSTAR_LONG_CALLSIGN_LENGTH, ' '); + m_dstarWhiteList.push_back(callsign); + } + p = ::strtok(NULL, ",\r\n"); + } + } else if (::strcmp(key, "AckReply") == 0) + m_dstarAckReply = ::atoi(value) == 1; + else if (::strcmp(key, "AckTime") == 0) + m_dstarAckTime = (unsigned int)::atoi(value); + else if (::strcmp(key, "AckMessage") == 0) { + m_dstarAckMessage = (DSTAR_ACK_MESSAGE)::atoi(value); + if (m_dstarAckMessage != DSTAR_ACK_BER && m_dstarAckMessage != DSTAR_ACK_RSSI && m_dstarAckMessage != DSTAR_ACK_SMETER) + m_dstarAckMessage = DSTAR_ACK_BER; + } else if (::strcmp(key, "ErrorReply") == 0) + m_dstarErrorReply = ::atoi(value) == 1; + else if (::strcmp(key, "RemoteGateway") == 0) + m_dstarRemoteGateway = ::atoi(value) == 1; + else if (::strcmp(key, "ModeHang") == 0) + m_dstarModeHang = (unsigned int)::atoi(value); + } else if (section == SECTION_DMR) { + if (::strcmp(key, "Enable") == 0) + m_dmrEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Beacons") == 0) + m_dmrBeacons = ::atoi(value) == 1 ? DMR_BEACONS_NETWORK : DMR_BEACONS_OFF; + else if (::strcmp(key, "BeaconInterval") == 0) { + m_dmrBeacons = m_dmrBeacons != DMR_BEACONS_OFF ? DMR_BEACONS_TIMED : DMR_BEACONS_OFF; + m_dmrBeaconInterval = (unsigned int)::atoi(value); + } else if (::strcmp(key, "BeaconDuration") == 0) + m_dmrBeaconDuration = (unsigned int)::atoi(value); + else if (::strcmp(key, "Id") == 0) + m_dmrId = (unsigned int)::atoi(value); + else if (::strcmp(key, "ColorCode") == 0) + m_dmrColorCode = (unsigned int)::atoi(value); + else if (::strcmp(key, "SelfOnly") == 0) + m_dmrSelfOnly = ::atoi(value) == 1; + else if (::strcmp(key, "EmbeddedLCOnly") == 0) + m_dmrEmbeddedLCOnly = ::atoi(value) == 1; + else if (::strcmp(key, "DumpTAData") == 0) + m_dmrDumpTAData = ::atoi(value) == 1; + else if (::strcmp(key, "Prefixes") == 0) { + char* p = ::strtok(value, ",\r\n"); + while (p != NULL) { + unsigned int prefix = (unsigned int)::atoi(p); + if (prefix > 0U && prefix <= 999U) + m_dmrPrefixes.push_back(prefix); + p = ::strtok(NULL, ",\r\n"); + } + } else if (::strcmp(key, "BlackList") == 0) { + char* p = ::strtok(value, ",\r\n"); + while (p != NULL) { + unsigned int id = (unsigned int)::atoi(p); + if (id > 0U) + m_dmrBlackList.push_back(id); + p = ::strtok(NULL, ",\r\n"); + } + } else if (::strcmp(key, "WhiteList") == 0) { + char* p = ::strtok(value, ",\r\n"); + while (p != NULL) { + unsigned int id = (unsigned int)::atoi(p); + if (id > 0U) + m_dmrWhiteList.push_back(id); + p = ::strtok(NULL, ",\r\n"); + } + } else if (::strcmp(key, "Slot1TGWhiteList") == 0) { + char* p = ::strtok(value, ",\r\n"); + while (p != NULL) { + unsigned int id = (unsigned int)::atoi(p); + if (id > 0U) + m_dmrSlot1TGWhiteList.push_back(id); + p = ::strtok(NULL, ",\r\n"); + } + } else if (::strcmp(key, "Slot2TGWhiteList") == 0) { + char* p = ::strtok(value, ",\r\n"); + while (p != NULL) { + unsigned int id = (unsigned int)::atoi(p); + if (id > 0U) + m_dmrSlot2TGWhiteList.push_back(id); + p = ::strtok(NULL, ",\r\n"); + } + } else if (::strcmp(key, "TXHang") == 0) + m_dmrTXHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "CallHang") == 0) + m_dmrCallHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_dmrModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "OVCM") == 0) { + switch (::atoi(value)) { + case 1: + m_dmrOVCM = DMR_OVCM_RX_ON; + break; + case 2: + m_dmrOVCM = DMR_OVCM_TX_ON; + break; + case 3: + m_dmrOVCM = DMR_OVCM_ON; + break; + case 4: + m_dmrOVCM = DMR_OVCM_FORCE_OFF; + break; + default: + m_dmrOVCM = DMR_OVCM_OFF; + break; + } } - } else if (::strcmp(key, "TXHang") == 0) - m_dmrTXHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "CallHang") == 0) - m_dmrCallHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "ModeHang") == 0) - m_dmrModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_FUSION) { - if (::strcmp(key, "Enable") == 0) - m_fusionEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "LowDeviation") == 0) - m_fusionLowDeviation = ::atoi(value) == 1; - else if (::strcmp(key, "DSQ") == 0 || ::strcmp(key, "DGID") == 0) { - m_fusionSQLEnabled = true; - m_fusionSQL = (unsigned int)::atoi(value); - } else if (::strcmp(key, "RemoteGateway") == 0) - m_fusionRemoteGateway = ::atoi(value) == 1; - else if (::strcmp(key, "SelfOnly") == 0) - m_fusionSelfOnly = ::atoi(value) == 1; - else if (::strcmp(key, "TXHang") == 0) - m_fusionTXHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "ModeHang") == 0) - m_fusionModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_P25) { - if (::strcmp(key, "Enable") == 0) - m_p25Enabled = ::atoi(value) == 1; - else if (::strcmp(key, "Id") == 0) - m_p25Id = (unsigned int)::atoi(value); - else if (::strcmp(key, "NAC") == 0) - m_p25NAC = (unsigned int)::strtoul(value, NULL, 16); - else if (::strcmp(key, "OverrideUIDCheck") == 0) - m_p25OverrideUID = ::atoi(value) == 1; - else if (::strcmp(key, "SelfOnly") == 0) - m_p25SelfOnly = ::atoi(value) == 1; - else if (::strcmp(key, "RemoteGateway") == 0) - m_p25RemoteGateway = ::atoi(value) == 1; - else if (::strcmp(key, "ModeHang") == 0) - m_p25ModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_NXDN) { - if (::strcmp(key, "Enable") == 0) - m_nxdnEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "Id") == 0) - m_nxdnId = (unsigned int)::atoi(value); - else if (::strcmp(key, "RAN") == 0) - m_nxdnRAN = (unsigned int)::atoi(value); - else if (::strcmp(key, "SelfOnly") == 0) - m_nxdnSelfOnly = ::atoi(value) == 1; - else if (::strcmp(key, "RemoteGateway") == 0) - m_nxdnRemoteGateway = ::atoi(value) == 1; - else if (::strcmp(key, "ModeHang") == 0) - m_nxdnModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_POCSAG) { - if (::strcmp(key, "Enable") == 0) - m_pocsagEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "Frequency") == 0) - m_pocsagFrequency = (unsigned int)::atoi(value); - } else if (section == SECTION_DSTAR_NETWORK) { - if (::strcmp(key, "Enable") == 0) - m_dstarNetworkEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "GatewayAddress") == 0) - m_dstarGatewayAddress = value; - else if (::strcmp(key, "GatewayPort") == 0) - m_dstarGatewayPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "LocalPort") == 0) - m_dstarLocalPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "ModeHang") == 0) - m_dstarNetworkModeHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "Debug") == 0) - m_dstarNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_DMR_NETWORK) { - if (::strcmp(key, "Enable") == 0) - m_dmrNetworkEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "Address") == 0) - m_dmrNetworkAddress = value; - else if (::strcmp(key, "Port") == 0) - m_dmrNetworkPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "Local") == 0) - m_dmrNetworkLocal = (unsigned int)::atoi(value); - else if (::strcmp(key, "Password") == 0) - m_dmrNetworkPassword = value; - else if (::strcmp(key, "Options") == 0) - m_dmrNetworkOptions = value; - else if (::strcmp(key, "Debug") == 0) - m_dmrNetworkDebug = ::atoi(value) == 1; - else if (::strcmp(key, "Jitter") == 0) - m_dmrNetworkJitter = (unsigned int)::atoi(value); - else if (::strcmp(key, "Slot1") == 0) - m_dmrNetworkSlot1 = ::atoi(value) == 1; - else if (::strcmp(key, "Slot2") == 0) - m_dmrNetworkSlot2 = ::atoi(value) == 1; - else if (::strcmp(key, "ModeHang") == 0) - m_dmrNetworkModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_FUSION_NETWORK) { - if (::strcmp(key, "Enable") == 0) - m_fusionNetworkEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "LocalAddress") == 0) - m_fusionNetworkMyAddress = value; - else if (::strcmp(key, "LocalPort") == 0) - m_fusionNetworkMyPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "GatewayAddress") == 0) - m_fusionNetworkGatewayAddress = value; - else if (::strcmp(key, "GatewayPort") == 0) - m_fusionNetworkGatewayPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "ModeHang") == 0) - m_fusionNetworkModeHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "Debug") == 0) - m_fusionNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_P25_NETWORK) { - if (::strcmp(key, "Enable") == 0) - m_p25NetworkEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "GatewayAddress") == 0) - m_p25GatewayAddress = value; - else if (::strcmp(key, "GatewayPort") == 0) - m_p25GatewayPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "LocalPort") == 0) - m_p25LocalPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "ModeHang") == 0) - m_p25NetworkModeHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "Debug") == 0) - m_p25NetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_NXDN_NETWORK) { - if (::strcmp(key, "Enable") == 0) - m_nxdnNetworkEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "LocalAddress") == 0) - m_nxdnLocalAddress = value; - else if (::strcmp(key, "LocalPort") == 0) - m_nxdnLocalPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "GatewayAddress") == 0) - m_nxdnGatewayAddress = value; - else if (::strcmp(key, "GatewayPort") == 0) - m_nxdnGatewayPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "ModeHang") == 0) - m_nxdnNetworkModeHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "Debug") == 0) - m_nxdnNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_POCSAG_NETWORK) { - if (::strcmp(key, "Enable") == 0) - m_pocsagNetworkEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "LocalAddress") == 0) - m_pocsagLocalAddress = value; - else if (::strcmp(key, "LocalPort") == 0) - m_pocsagLocalPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "GatewayAddress") == 0) - m_pocsagGatewayAddress = value; - else if (::strcmp(key, "GatewayPort") == 0) - m_pocsagGatewayPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "ModeHang") == 0) - m_pocsagNetworkModeHang = (unsigned int)::atoi(value); - else if (::strcmp(key, "Debug") == 0) - m_pocsagNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_TFTSERIAL) { - if (::strcmp(key, "Port") == 0) - m_tftSerialPort = value; - else if (::strcmp(key, "Brightness") == 0) - m_tftSerialBrightness = (unsigned int)::atoi(value); - } else if (section == SECTION_HD44780) { - if (::strcmp(key, "Rows") == 0) - m_hd44780Rows = (unsigned int)::atoi(value); - else if (::strcmp(key, "Columns") == 0) - m_hd44780Columns = (unsigned int)::atoi(value); - else if (::strcmp(key, "I2CAddress") == 0) - m_hd44780i2cAddress = (unsigned int)::strtoul(value, NULL, 16); - else if (::strcmp(key, "PWM") == 0) - m_hd44780PWM = ::atoi(value) == 1; - else if (::strcmp(key, "PWMPin") == 0) - m_hd44780PWMPin = (unsigned int)::atoi(value); - else if (::strcmp(key, "PWMBright") == 0) - m_hd44780PWMBright = (unsigned int)::atoi(value); - else if (::strcmp(key, "PWMDim") == 0) - m_hd44780PWMDim = (unsigned int)::atoi(value); - else if (::strcmp(key, "DisplayClock") == 0) - m_hd44780DisplayClock = ::atoi(value) == 1; - else if (::strcmp(key, "UTC") == 0) - m_hd44780UTC = ::atoi(value) == 1; - else if (::strcmp(key, "Pins") == 0) { - char* p = ::strtok(value, ",\r\n"); - while (p != NULL) { - unsigned int pin = (unsigned int)::atoi(p); - m_hd44780Pins.push_back(pin); - p = ::strtok(NULL, ",\r\n"); + } else if (section == SECTION_FUSION) { + if (::strcmp(key, "Enable") == 0) + m_fusionEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "LowDeviation") == 0) + m_fusionLowDeviation = ::atoi(value) == 1; + else if (::strcmp(key, "RemoteGateway") == 0) + m_fusionRemoteGateway = ::atoi(value) == 1; + else if (::strcmp(key, "SelfOnly") == 0) + m_fusionSelfOnly = ::atoi(value) == 1; + else if (::strcmp(key, "TXHang") == 0) + m_fusionTXHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_fusionModeHang = (unsigned int)::atoi(value); + } else if (section == SECTION_P25) { + if (::strcmp(key, "Enable") == 0) + m_p25Enabled = ::atoi(value) == 1; + else if (::strcmp(key, "Id") == 0) + m_p25Id = (unsigned int)::atoi(value); + else if (::strcmp(key, "NAC") == 0) + m_p25NAC = (unsigned int)::strtoul(value, NULL, 16); + else if (::strcmp(key, "OverrideUIDCheck") == 0) + m_p25OverrideUID = ::atoi(value) == 1; + else if (::strcmp(key, "SelfOnly") == 0) + m_p25SelfOnly = ::atoi(value) == 1; + else if (::strcmp(key, "RemoteGateway") == 0) + m_p25RemoteGateway = ::atoi(value) == 1; + else if (::strcmp(key, "TXHang") == 0) + m_p25TXHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_p25ModeHang = (unsigned int)::atoi(value); + } else if (section == SECTION_NXDN) { + if (::strcmp(key, "Enable") == 0) + m_nxdnEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Id") == 0) + m_nxdnId = (unsigned int)::atoi(value); + else if (::strcmp(key, "RAN") == 0) + m_nxdnRAN = (unsigned int)::atoi(value); + else if (::strcmp(key, "SelfOnly") == 0) + m_nxdnSelfOnly = ::atoi(value) == 1; + else if (::strcmp(key, "RemoteGateway") == 0) + m_nxdnRemoteGateway = ::atoi(value) == 1; + else if (::strcmp(key, "TXHang") == 0) + m_nxdnTXHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_nxdnModeHang = (unsigned int)::atoi(value); + } else if (section == SECTION_M17) { + if (::strcmp(key, "Enable") == 0) + m_m17Enabled = ::atoi(value) == 1; + else if (::strcmp(key, "CAN") == 0) + m_m17CAN = (unsigned int)::atoi(value); + else if (::strcmp(key, "SelfOnly") == 0) + m_m17SelfOnly = ::atoi(value) == 1; + else if (::strcmp(key, "AllowEncryption") == 0) + m_m17AllowEncryption = ::atoi(value) == 1; + else if (::strcmp(key, "TXHang") == 0) + m_m17TXHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_m17ModeHang = (unsigned int)::atoi(value); + } else if (section == SECTION_POCSAG) { + if (::strcmp(key, "Enable") == 0) + m_pocsagEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Frequency") == 0) + m_pocsagFrequency = (unsigned int)::atoi(value); + } else if (section == SECTION_FM) { + if (::strcmp(key, "Enable") == 0) + m_fmEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Callsign") == 0) { + // Convert the callsign to upper case + for (unsigned int i = 0U; value[i] != 0; i++) + value[i] = ::toupper(value[i]); + m_fmCallsign = value; + } else if (::strcmp(key, "CallsignSpeed") == 0) + m_fmCallsignSpeed = (unsigned int)::atoi(value); + else if (::strcmp(key, "CallsignFrequency") == 0) + m_fmCallsignFrequency = (unsigned int)::atoi(value); + else if (::strcmp(key, "CallsignTime") == 0) + m_fmCallsignTime = (unsigned int)::atoi(value); + else if (::strcmp(key, "CallsignHoldoff") == 0) + m_fmCallsignHoldoff = (unsigned int)::atoi(value); + else if (::strcmp(key, "CallsignHighLevel") == 0) + m_fmCallsignHighLevel = float(::atof(value)); + else if (::strcmp(key, "CallsignLowLevel") == 0) + m_fmCallsignLowLevel = float(::atof(value)); + else if (::strcmp(key, "CallsignAtStart") == 0) + m_fmCallsignAtStart = ::atoi(value) == 1; + else if (::strcmp(key, "CallsignAtEnd") == 0) + m_fmCallsignAtEnd = ::atoi(value) == 1; + else if (::strcmp(key, "CallsignAtLatch") == 0) + m_fmCallsignAtLatch = ::atoi(value) == 1; + else if (::strcmp(key, "RFAck") == 0) { + // Convert the ack to upper case + for (unsigned int i = 0U; value[i] != 0; i++) + value[i] = ::toupper(value[i]); + m_fmRFAck = value; + } else if (::strcmp(key, "ExtAck") == 0) { + // Convert the ack to upper case + for (unsigned int i = 0U; value[i] != 0; i++) + value[i] = ::toupper(value[i]); + m_fmExtAck = value; + } else if (::strcmp(key, "AckSpeed") == 0) + m_fmAckSpeed = (unsigned int)::atoi(value); + else if (::strcmp(key, "AckFrequency") == 0) + m_fmAckFrequency = (unsigned int)::atoi(value); + else if (::strcmp(key, "AckMinTime") == 0) + m_fmAckMinTime = (unsigned int)::atoi(value); + else if (::strcmp(key, "AckDelay") == 0) + m_fmAckDelay = (unsigned int)::atoi(value); + else if (::strcmp(key, "AckLevel") == 0) + m_fmAckLevel = float(::atof(value)); + else if (::strcmp(key, "Timeout") == 0) + m_fmTimeout = (unsigned int)::atoi(value); + else if (::strcmp(key, "TimeoutLevel") == 0) + m_fmTimeoutLevel = float(::atof(value)); + else if (::strcmp(key, "CTCSSFrequency") == 0) + m_fmCTCSSFrequency = float(::atof(value)); + else if (::strcmp(key, "CTCSSThreshold") == 0) + m_fmCTCSSHighThreshold = m_fmCTCSSLowThreshold = (unsigned int)::atoi(value); + else if (::strcmp(key, "CTCSSHighThreshold") == 0) + m_fmCTCSSHighThreshold = (unsigned int)::atoi(value); + else if (::strcmp(key, "CTCSSLowThreshold") == 0) + m_fmCTCSSLowThreshold = (unsigned int)::atoi(value); + else if (::strcmp(key, "CTCSSLevel") == 0) + m_fmCTCSSLevel = float(::atof(value)); + else if (::strcmp(key, "KerchunkTime") == 0) + m_fmKerchunkTime = (unsigned int)::atoi(value); + else if (::strcmp(key, "HangTime") == 0) + m_fmHangTime = (unsigned int)::atoi(value); + else if (::strcmp(key, "AccessMode") == 0) + m_fmAccessMode = ::atoi(value); + else if (::strcmp(key, "LinkMode") == 0) + m_fmLinkMode = ::atoi(value) == 1; + else if (::strcmp(key, "COSInvert") == 0) + m_fmCOSInvert = ::atoi(value) == 1; + else if (::strcmp(key, "NoiseSquelch") == 0) + m_fmNoiseSquelch = ::atoi(value) == 1; + else if (::strcmp(key, "SquelchThreshold") == 0) + m_fmSquelchHighThreshold = m_fmSquelchLowThreshold = (unsigned int)::atoi(value); + else if (::strcmp(key, "SquelchHighThreshold") == 0) + m_fmSquelchHighThreshold = (unsigned int)::atoi(value); + else if (::strcmp(key, "SquelchLowThreshold") == 0) + m_fmSquelchLowThreshold = (unsigned int)::atoi(value); + else if (::strcmp(key, "RFAudioBoost") == 0) + m_fmRFAudioBoost = (unsigned int)::atoi(value); + else if (::strcmp(key, "MaxDevLevel") == 0) + m_fmMaxDevLevel = float(::atof(value)); + else if (::strcmp(key, "ExtAudioBoost") == 0) + m_fmExtAudioBoost = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_fmModeHang = (unsigned int)::atoi(value); + } else if (section == SECTION_AX25) { + if (::strcmp(key, "Enable") == 0) + m_ax25Enabled = ::atoi(value) == 1; + else if (::strcmp(key, "TXDelay") == 0) + m_ax25TXDelay = (unsigned int)::atoi(value); + else if (::strcmp(key, "RXTwist") == 0) + m_ax25RXTwist = ::atoi(value); + else if (::strcmp(key, "SlotTime") == 0) + m_ax25SlotTime = (unsigned int)::atoi(value); + else if (::strcmp(key, "PPersist") == 0) + m_ax25PPersist = (unsigned int)::atoi(value); + else if (::strcmp(key, "Trace") == 0) + m_ax25Trace = ::atoi(value) == 1; + } else if (section == SECTION_DSTAR_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_dstarNetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "GatewayAddress") == 0) + m_dstarGatewayAddress = value; + else if (::strcmp(key, "GatewayPort") == 0) + m_dstarGatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalAddress") == 0) + m_dstarLocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_dstarLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_dstarNetworkModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "Debug") == 0) + m_dstarNetworkDebug = ::atoi(value) == 1; + } else if (section == SECTION_DMR_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_dmrNetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Type") == 0) + m_dmrNetworkType = value; + else if (::strcmp(key, "RemoteAddress") == 0) + m_dmrNetworkRemoteAddress = value; + else if (::strcmp(key, "RemotePort") == 0) + m_dmrNetworkRemotePort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalAddress") == 0) + m_dmrNetworkLocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_dmrNetworkLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "Password") == 0) + m_dmrNetworkPassword = value; + else if (::strcmp(key, "Options") == 0) + m_dmrNetworkOptions = value; + else if (::strcmp(key, "Debug") == 0) + m_dmrNetworkDebug = ::atoi(value) == 1; + else if (::strcmp(key, "Jitter") == 0) + m_dmrNetworkJitter = (unsigned int)::atoi(value); + else if (::strcmp(key, "Slot1") == 0) + m_dmrNetworkSlot1 = ::atoi(value) == 1; + else if (::strcmp(key, "Slot2") == 0) + m_dmrNetworkSlot2 = ::atoi(value) == 1; + else if (::strcmp(key, "ModeHang") == 0) + m_dmrNetworkModeHang = (unsigned int)::atoi(value); + } else if (section == SECTION_FUSION_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_fusionNetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "LocalAddress") == 0) + m_fusionNetworkLocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_fusionNetworkLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "GatewayAddress") == 0) + m_fusionNetworkGatewayAddress = value; + else if (::strcmp(key, "GatewayPort") == 0) + m_fusionNetworkGatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_fusionNetworkModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "Debug") == 0) + m_fusionNetworkDebug = ::atoi(value) == 1; + } else if (section == SECTION_P25_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_p25NetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "GatewayAddress") == 0) + m_p25GatewayAddress = value; + else if (::strcmp(key, "GatewayPort") == 0) + m_p25GatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalAddress") == 0) + m_p25LocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_p25LocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_p25NetworkModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "Debug") == 0) + m_p25NetworkDebug = ::atoi(value) == 1; + } else if (section == SECTION_NXDN_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_nxdnNetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "LocalAddress") == 0) + m_nxdnLocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_nxdnLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "GatewayAddress") == 0) + m_nxdnGatewayAddress = value; + else if (::strcmp(key, "GatewayPort") == 0) + m_nxdnGatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_nxdnNetworkModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "Debug") == 0) + m_nxdnNetworkDebug = ::atoi(value) == 1; + } else if (section == SECTION_M17_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_m17NetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "LocalAddress") == 0) + m_m17LocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_m17LocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "GatewayAddress") == 0) + m_m17GatewayAddress = value; + else if (::strcmp(key, "GatewayPort") == 0) + m_m17GatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_m17NetworkModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "Debug") == 0) + m_m17NetworkDebug = ::atoi(value) == 1; + } else if (section == SECTION_POCSAG_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_pocsagNetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "LocalAddress") == 0) + m_pocsagLocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_pocsagLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "GatewayAddress") == 0) + m_pocsagGatewayAddress = value; + else if (::strcmp(key, "GatewayPort") == 0) + m_pocsagGatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_pocsagNetworkModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "Debug") == 0) + m_pocsagNetworkDebug = ::atoi(value) == 1; + } else if (section == SECTION_FM_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_fmNetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Protocol") == 0) + m_fmNetworkProtocol = value; + else if (::strcmp(key, "SampleRate") == 0) + m_fmNetworkSampleRate = (unsigned int)::atoi(value); + else if (::strcmp(key, "SquelchFile") == 0) + m_fmNetworkSquelchFile = value; + else if (::strcmp(key, "LocalAddress") == 0) + m_fmLocalAddress = value; + else if (::strcmp(key, "LocalPort") == 0) + m_fmLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "GatewayAddress") == 0) + m_fmGatewayAddress = value; + else if (::strcmp(key, "GatewayPort") == 0) + m_fmGatewayPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "PreEmphasis") == 0) + m_fmPreEmphasis = ::atoi(value) == 1; + else if (::strcmp(key, "DeEmphasis") == 0) + m_fmDeEmphasis = ::atoi(value) == 1; + else if (::strcmp(key, "TXAudioGain") == 0) + m_fmTXAudioGain = float(::atof(value)); + else if (::strcmp(key, "RXAudioGain") == 0) + m_fmRXAudioGain = float(::atof(value)); + else if (::strcmp(key, "ModeHang") == 0) + m_fmNetworkModeHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "Debug") == 0) + m_fmNetworkDebug = ::atoi(value) == 1; + } else if (section == SECTION_AX25_NETWORK) { + if (::strcmp(key, "Enable") == 0) + m_ax25NetworkEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Port") == 0) + m_ax25NetworkPort = value; + else if (::strcmp(key, "Speed") == 0) + m_ax25NetworkSpeed = (unsigned int)::atoi(value); + else if (::strcmp(key, "Debug") == 0) + m_ax25NetworkDebug = ::atoi(value) == 1; + } else if (section == SECTION_TFTSERIAL) { + if (::strcmp(key, "Port") == 0) + m_tftSerialPort = value; + else if (::strcmp(key, "Brightness") == 0) + m_tftSerialBrightness = (unsigned int)::atoi(value); + else if (::strcmp(key, "ScreenLayout") == 0) + m_tftSerialScreenLayout = (unsigned int)::atoi(value); + } else if (section == SECTION_HD44780) { + if (::strcmp(key, "Rows") == 0) + m_hd44780Rows = (unsigned int)::atoi(value); + else if (::strcmp(key, "Columns") == 0) + m_hd44780Columns = (unsigned int)::atoi(value); + else if (::strcmp(key, "I2CAddress") == 0) + m_hd44780i2cAddress = (unsigned int)::strtoul(value, NULL, 16); + else if (::strcmp(key, "PWM") == 0) + m_hd44780PWM = ::atoi(value) == 1; + else if (::strcmp(key, "PWMPin") == 0) + m_hd44780PWMPin = (unsigned int)::atoi(value); + else if (::strcmp(key, "PWMBright") == 0) + m_hd44780PWMBright = (unsigned int)::atoi(value); + else if (::strcmp(key, "PWMDim") == 0) + m_hd44780PWMDim = (unsigned int)::atoi(value); + else if (::strcmp(key, "DisplayClock") == 0) + m_hd44780DisplayClock = ::atoi(value) == 1; + else if (::strcmp(key, "UTC") == 0) + m_hd44780UTC = ::atoi(value) == 1; + else if (::strcmp(key, "Pins") == 0) { + char* p = ::strtok(value, ",\r\n"); + while (p != NULL) { + unsigned int pin = (unsigned int)::atoi(p); + m_hd44780Pins.push_back(pin); + p = ::strtok(NULL, ",\r\n"); + } } + } else if (section == SECTION_NEXTION) { + if (::strcmp(key, "Port") == 0) + m_nextionPort = value; + else if (::strcmp(key, "Brightness") == 0) + m_nextionIdleBrightness = m_nextionBrightness = (unsigned int)::atoi(value); + else if (::strcmp(key, "DisplayClock") == 0) + m_nextionDisplayClock = ::atoi(value) == 1; + else if (::strcmp(key, "UTC") == 0) + m_nextionUTC = ::atoi(value) == 1; + else if (::strcmp(key, "IdleBrightness") == 0) + m_nextionIdleBrightness = (unsigned int)::atoi(value); + else if (::strcmp(key, "ScreenLayout") == 0) + m_nextionScreenLayout = (unsigned int)::strtoul(value, NULL, 0); + else if (::strcmp(key, "DisplayTempInFahrenheit") == 0) + m_nextionTempInFahrenheit = ::atoi(value) == 1; + } else if (section == SECTION_OLED) { + if (::strcmp(key, "Type") == 0) + m_oledType = (unsigned char)::atoi(value); + else if (::strcmp(key, "Brightness") == 0) + m_oledBrightness = (unsigned char)::atoi(value); + else if (::strcmp(key, "Invert") == 0) + m_oledInvert = ::atoi(value) == 1; + else if (::strcmp(key, "Scroll") == 0) + m_oledScroll = ::atoi(value) == 1; + else if (::strcmp(key, "Rotate") == 0) + m_oledRotate = ::atoi(value) == 1; + else if (::strcmp(key, "LogoScreensaver") == 0) + m_oledLogoScreensaver = ::atoi(value) == 1; + } else if (section == SECTION_LCDPROC) { + if (::strcmp(key, "Address") == 0) + m_lcdprocAddress = value; + else if (::strcmp(key, "Port") == 0) + m_lcdprocPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "LocalPort") == 0) + m_lcdprocLocalPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "DisplayClock") == 0) + m_lcdprocDisplayClock = ::atoi(value) == 1; + else if (::strcmp(key, "UTC") == 0) + m_lcdprocUTC = ::atoi(value) == 1; + else if (::strcmp(key, "DimOnIdle") == 0) + m_lcdprocDimOnIdle = ::atoi(value) == 1; + } else if (section == SECTION_LOCK_FILE) { + if (::strcmp(key, "Enable") == 0) + m_lockFileEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "File") == 0) + m_lockFileName = value; + } else if (section == SECTION_REMOTE_CONTROL) { + if (::strcmp(key, "Enable") == 0) + m_remoteControlEnabled = ::atoi(value) == 1; + else if (::strcmp(key, "Port") == 0) + m_remoteControlPort = (unsigned short)::atoi(value); } - } else if (section == SECTION_NEXTION) { - if (::strcmp(key, "Port") == 0) - m_nextionPort = value; - else if (::strcmp(key, "Brightness") == 0) - m_nextionIdleBrightness = m_nextionBrightness = (unsigned int)::atoi(value); - else if (::strcmp(key, "DisplayClock") == 0) - m_nextionDisplayClock = ::atoi(value) == 1; - else if (::strcmp(key, "UTC") == 0) - m_nextionUTC = ::atoi(value) == 1; - else if (::strcmp(key, "IdleBrightness") == 0) - m_nextionIdleBrightness = (unsigned int)::atoi(value); - else if (::strcmp(key, "ScreenLayout") == 0) - m_nextionScreenLayout = (unsigned int)::atoi(value); - else if (::strcmp(key, "DisplayTempInFahrenheit") == 0) - m_nextionTempInFahrenheit = ::atoi(value) == 1; - } else if (section == SECTION_OLED) { - if (::strcmp(key, "Type") == 0) - m_oledType = (unsigned char)::atoi(value); - else if (::strcmp(key, "Brightness") == 0) - m_oledBrightness = (unsigned char)::atoi(value); - else if (::strcmp(key, "Invert") == 0) - m_oledInvert = ::atoi(value) == 1; - else if (::strcmp(key, "Scroll") == 0) - m_oledScroll = ::atoi(value) == 1; - else if (::strcmp(key, "Rotate") == 0) - m_oledRotate = ::atoi(value) == 1; - else if (::strcmp(key, "Cast") == 0) - m_oledCast = ::atoi(value) == 1; - } else if (section == SECTION_LCDPROC) { - if (::strcmp(key, "Address") == 0) - m_lcdprocAddress = value; - else if (::strcmp(key, "Port") == 0) - m_lcdprocPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "LocalPort") == 0) - m_lcdprocLocalPort = (unsigned int)::atoi(value); - else if (::strcmp(key, "DisplayClock") == 0) - m_lcdprocDisplayClock = ::atoi(value) == 1; - else if (::strcmp(key, "UTC") == 0) - m_lcdprocUTC = ::atoi(value) == 1; - else if (::strcmp(key, "DimOnIdle") == 0) - m_lcdprocDimOnIdle = ::atoi(value) == 1; - } else if (section == SECTION_LOCK_FILE) { - if (::strcmp(key, "Enable") == 0) - m_lockFileEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "File") == 0) - m_lockFileName = value; - } else if (section == SECTION_MOBILE_GPS) { - if (::strcmp(key, "Enable") == 0) - m_mobileGPSEnabled = ::atoi(value) == 1; - else if (::strcmp(key, "Address") == 0) - m_mobileGPSAddress = value; - else if (::strcmp(key, "Port") == 0) - m_mobileGPSPort = (unsigned int)::atoi(value); } - } - ::fclose(fp); + ::fclose(fp); - return true; + return true; } std::string CConf::getCallsign() const @@ -916,6 +1257,11 @@ std::string CConf::getLogFileRoot() const return m_logFileRoot; } +bool CConf::getLogFileRotate() const +{ + return m_logFileRotate; +} + bool CConf::getCWIdEnabled() const { return m_cwIdEnabled; @@ -951,19 +1297,49 @@ unsigned int CConf::getNXDNIdLookupTime() const return m_nxdnIdLookupTime; } -std::string CConf::getModemPort() const +std::string CConf::getModemProtocol() const { - return m_modemPort; + return m_modemProtocol; } -std::string CConf::getModemProtocol() const +std::string CConf::getModemUARTPort() const { - return m_modemProtocol; + return m_modemUARTPort; +} + +unsigned int CConf::getModemUARTSpeed() const +{ + return m_modemUARTSpeed; +} + +std::string CConf::getModemI2CPort() const +{ + return m_modemI2CPort; +} + +unsigned int CConf::getModemI2CAddress() const +{ + return m_modemI2CAddress; +} + +std::string CConf::getModemModemAddress() const +{ + return m_modemModemAddress; +} + +unsigned short CConf::getModemModemPort() const +{ + return m_modemModemPort; } -unsigned int CConf::getModemAddress() const +std::string CConf::getModemLocalAddress() const { - return m_modemAddress; + return m_modemLocalAddress; +} + +unsigned short CConf::getModemLocalPort() const +{ + return m_modemLocalPort; } bool CConf::getModemRXInvert() const @@ -1051,16 +1427,36 @@ float CConf::getModemNXDNTXLevel() const return m_modemNXDNTXLevel; } +float CConf::getModemM17TXLevel() const +{ + return m_modemM17TXLevel; +} + float CConf::getModemPOCSAGTXLevel() const { return m_modemPOCSAGTXLevel; } +float CConf::getModemFMTXLevel() const +{ + return m_modemFMTXLevel; +} + +float CConf::getModemAX25TXLevel() const +{ + return m_modemAX25TXLevel; +} + std::string CConf::getModemRSSIMappingFile () const { return m_modemRSSIMappingFile; } +bool CConf::getModemUseCOSAsLockout() const +{ + return m_modemUseCOSAsLockout; +} + bool CConf::getModemTrace() const { return m_modemTrace; @@ -1081,12 +1477,12 @@ std::string CConf::getTransparentRemoteAddress() const return m_transparentRemoteAddress; } -unsigned int CConf::getTransparentRemotePort() const +unsigned short CConf::getTransparentRemotePort() const { return m_transparentRemotePort; } -unsigned int CConf::getTransparentLocalPort() const +unsigned short CConf::getTransparentLocalPort() const { return m_transparentLocalPort; } @@ -1096,16 +1492,6 @@ unsigned int CConf::getTransparentSendFrameType() const return m_transparentSendFrameType; } -bool CConf::getUMPEnabled() const -{ - return m_umpEnabled; -} - -std::string CConf::getUMPPort() const -{ - return m_umpPort; -} - bool CConf::getDStarEnabled() const { return m_dstarEnabled; @@ -1126,6 +1512,11 @@ std::vector CConf::getDStarBlackList() const return m_dstarBlackList; } +std::vector CConf::getDStarWhiteList() const +{ + return m_dstarWhiteList; +} + bool CConf::getDStarAckReply() const { return m_dstarAckReply; @@ -1136,7 +1527,7 @@ unsigned int CConf::getDStarAckTime() const return m_dstarAckTime; } -bool CConf::getDStarAckMessage() const +DSTAR_ACK_MESSAGE CConf::getDStarAckMessage() const { return m_dstarAckMessage; } @@ -1161,7 +1552,7 @@ bool CConf::getDMREnabled() const return m_dmrEnabled; } -bool CConf::getDMRBeacons() const +DMR_BEACONS CConf::getDMRBeacons() const { return m_dmrBeacons; } @@ -1241,6 +1632,11 @@ unsigned int CConf::getDMRModeHang() const return m_dmrModeHang; } +DMR_OVCM_TYPES CConf::getDMROVCM() const +{ + return m_dmrOVCM; +} + bool CConf::getFusionEnabled() const { return m_fusionEnabled; @@ -1266,16 +1662,6 @@ bool CConf::getFusionSelfOnly() const return m_fusionSelfOnly; } -bool CConf::getFusionSQLEnabled() const -{ - return m_fusionSQLEnabled; -} - -unsigned char CConf::getFusionSQL() const -{ - return m_fusionSQL; -} - unsigned int CConf::getFusionModeHang() const { return m_fusionModeHang; @@ -1311,6 +1697,11 @@ bool CConf::getP25RemoteGateway() const return m_p25RemoteGateway; } +unsigned int CConf::getP25TXHang() const +{ + return m_p25TXHang; +} + unsigned int CConf::getP25ModeHang() const { return m_p25ModeHang; @@ -1341,11 +1732,46 @@ bool CConf::getNXDNRemoteGateway() const return m_nxdnRemoteGateway; } +unsigned int CConf::getNXDNTXHang() const +{ + return m_nxdnTXHang; +} + unsigned int CConf::getNXDNModeHang() const { return m_nxdnModeHang; } +bool CConf::getM17Enabled() const +{ + return m_m17Enabled; +} + +unsigned int CConf::getM17CAN() const +{ + return m_m17CAN; +} + +bool CConf::getM17SelfOnly() const +{ + return m_m17SelfOnly; +} + +bool CConf::getM17AllowEncryption() const +{ + return m_m17AllowEncryption; +} + +unsigned int CConf::getM17TXHang() const +{ + return m_m17TXHang; +} + +unsigned int CConf::getM17ModeHang() const +{ + return m_m17ModeHang; +} + bool CConf::getPOCSAGEnabled() const { return m_pocsagEnabled; @@ -1356,6 +1782,216 @@ unsigned int CConf::getPOCSAGFrequency() const return m_pocsagFrequency; } +bool CConf::getFMEnabled() const +{ + return m_fmEnabled; +} + +std::string CConf::getFMCallsign() const +{ + return m_fmCallsign; +} + +unsigned int CConf::getFMCallsignSpeed() const +{ + return m_fmCallsignSpeed; +} + +unsigned int CConf::getFMCallsignFrequency() const +{ + return m_fmCallsignFrequency; +} + +unsigned int CConf::getFMCallsignTime() const +{ + return m_fmCallsignTime; +} + +unsigned int CConf::getFMCallsignHoldoff() const +{ + return m_fmCallsignHoldoff; +} + +float CConf::getFMCallsignHighLevel() const +{ + return m_fmCallsignHighLevel; +} + +float CConf::getFMCallsignLowLevel() const +{ + return m_fmCallsignLowLevel; +} + +bool CConf::getFMCallsignAtStart() const +{ + return m_fmCallsignAtStart; +} + +bool CConf::getFMCallsignAtEnd() const +{ + return m_fmCallsignAtEnd; +} + +bool CConf::getFMCallsignAtLatch() const +{ + return m_fmCallsignAtLatch; +} + +std::string CConf::getFMRFAck() const +{ + return m_fmRFAck; +} + +std::string CConf::getFMExtAck() const +{ + return m_fmExtAck; +} + +unsigned int CConf::getFMAckSpeed() const +{ + return m_fmAckSpeed; +} + +unsigned int CConf::getFMAckFrequency() const +{ + return m_fmAckFrequency; +} + +unsigned int CConf::getFMAckMinTime() const +{ + return m_fmAckMinTime; +} + +unsigned int CConf::getFMAckDelay() const +{ + return m_fmAckDelay; +} + +float CConf::getFMAckLevel() const +{ + return m_fmAckLevel; +} + +unsigned int CConf::getFMTimeout() const +{ + return m_fmTimeout; +} + +float CConf::getFMTimeoutLevel() const +{ + return m_fmTimeoutLevel; +} + +float CConf::getFMCTCSSFrequency() const +{ + return m_fmCTCSSFrequency; +} + +unsigned int CConf::getFMCTCSSHighThreshold() const +{ + return m_fmCTCSSHighThreshold; +} + +unsigned int CConf::getFMCTCSSLowThreshold() const +{ + return m_fmCTCSSLowThreshold; +} + +float CConf::getFMCTCSSLevel() const +{ + return m_fmCTCSSLevel; +} + +unsigned int CConf::getFMKerchunkTime() const +{ + return m_fmKerchunkTime; +} + +unsigned int CConf::getFMHangTime() const +{ + return m_fmHangTime; +} + +unsigned int CConf::getFMAccessMode() const +{ + return m_fmAccessMode; +} + +bool CConf::getFMLinkMode() const +{ + return m_fmLinkMode; +} + +bool CConf::getFMCOSInvert() const +{ + return m_fmCOSInvert; +} + +bool CConf::getFMNoiseSquelch() const +{ + return m_fmNoiseSquelch; +} + +unsigned int CConf::getFMSquelchHighThreshold() const +{ + return m_fmSquelchHighThreshold; +} + +unsigned int CConf::getFMSquelchLowThreshold() const +{ + return m_fmSquelchLowThreshold; +} + +unsigned int CConf::getFMRFAudioBoost() const +{ + return m_fmRFAudioBoost; +} + +float CConf::getFMMaxDevLevel() const +{ + return m_fmMaxDevLevel; +} + +unsigned int CConf::getFMExtAudioBoost() const +{ + return m_fmExtAudioBoost; +} + +unsigned int CConf::getFMModeHang() const +{ + return m_fmModeHang; +} + +bool CConf::getAX25Enabled() const +{ + return m_ax25Enabled; +} + +unsigned int CConf::getAX25TXDelay() const +{ + return m_ax25TXDelay; +} + +int CConf::getAX25RXTwist() const +{ + return m_ax25RXTwist; +} + +unsigned int CConf::getAX25SlotTime() const +{ + return m_ax25SlotTime; +} + +unsigned int CConf::getAX25PPersist() const +{ + return m_ax25PPersist; +} + +bool CConf::getAX25Trace() const +{ + return m_ax25Trace; +} + bool CConf::getDStarNetworkEnabled() const { return m_dstarNetworkEnabled; @@ -1366,12 +2002,17 @@ std::string CConf::getDStarGatewayAddress() const return m_dstarGatewayAddress; } -unsigned int CConf::getDStarGatewayPort() const +unsigned short CConf::getDStarGatewayPort() const { return m_dstarGatewayPort; } -unsigned int CConf::getDStarLocalPort() const +std::string CConf::getDStarLocalAddress() const +{ + return m_dstarLocalAddress; +} + +unsigned short CConf::getDStarLocalPort() const { return m_dstarLocalPort; } @@ -1391,19 +2032,29 @@ bool CConf::getDMRNetworkEnabled() const return m_dmrNetworkEnabled; } -std::string CConf::getDMRNetworkAddress() const +std::string CConf::getDMRNetworkType() const +{ + return m_dmrNetworkType; +} + +std::string CConf::getDMRNetworkRemoteAddress() const { - return m_dmrNetworkAddress; + return m_dmrNetworkRemoteAddress; } -unsigned int CConf::getDMRNetworkPort() const +unsigned short CConf::getDMRNetworkRemotePort() const { - return m_dmrNetworkPort; + return m_dmrNetworkRemotePort; } -unsigned int CConf::getDMRNetworkLocal() const +std::string CConf::getDMRNetworkLocalAddress() const { - return m_dmrNetworkLocal; + return m_dmrNetworkLocalAddress; +} + +unsigned short CConf::getDMRNetworkLocalPort() const +{ + return m_dmrNetworkLocalPort; } std::string CConf::getDMRNetworkPassword() const @@ -1446,14 +2097,14 @@ bool CConf::getFusionNetworkEnabled() const return m_fusionNetworkEnabled; } -std::string CConf::getFusionNetworkMyAddress() const +std::string CConf::getFusionNetworkLocalAddress() const { - return m_fusionNetworkMyAddress; + return m_fusionNetworkLocalAddress; } -unsigned int CConf::getFusionNetworkMyPort() const +unsigned short CConf::getFusionNetworkLocalPort() const { - return m_fusionNetworkMyPort; + return m_fusionNetworkLocalPort; } std::string CConf::getFusionNetworkGatewayAddress() const @@ -1461,7 +2112,7 @@ std::string CConf::getFusionNetworkGatewayAddress() const return m_fusionNetworkGatewayAddress; } -unsigned int CConf::getFusionNetworkGatewayPort() const +unsigned short CConf::getFusionNetworkGatewayPort() const { return m_fusionNetworkGatewayPort; } @@ -1486,12 +2137,17 @@ std::string CConf::getP25GatewayAddress() const return m_p25GatewayAddress; } -unsigned int CConf::getP25GatewayPort() const +unsigned short CConf::getP25GatewayPort() const { return m_p25GatewayPort; } -unsigned int CConf::getP25LocalPort() const +std::string CConf::getP25LocalAddress() const +{ + return m_p25LocalAddress; +} + +unsigned short CConf::getP25LocalPort() const { return m_p25LocalPort; } @@ -1511,12 +2167,17 @@ bool CConf::getNXDNNetworkEnabled() const return m_nxdnNetworkEnabled; } +std::string CConf::getNXDNNetworkProtocol() const +{ + return m_nxdnNetworkProtocol; +} + std::string CConf::getNXDNGatewayAddress() const { return m_nxdnGatewayAddress; } -unsigned int CConf::getNXDNGatewayPort() const +unsigned short CConf::getNXDNGatewayPort() const { return m_nxdnGatewayPort; } @@ -1526,7 +2187,7 @@ std::string CConf::getNXDNLocalAddress() const return m_nxdnLocalAddress; } -unsigned int CConf::getNXDNLocalPort() const +unsigned short CConf::getNXDNLocalPort() const { return m_nxdnLocalPort; } @@ -1541,6 +2202,41 @@ bool CConf::getNXDNNetworkDebug() const return m_nxdnNetworkDebug; } +bool CConf::getM17NetworkEnabled() const +{ + return m_m17NetworkEnabled; +} + +std::string CConf::getM17GatewayAddress() const +{ + return m_m17GatewayAddress; +} + +unsigned short CConf::getM17GatewayPort() const +{ + return m_m17GatewayPort; +} + +std::string CConf::getM17LocalAddress() const +{ + return m_m17LocalAddress; +} + +unsigned short CConf::getM17LocalPort() const +{ + return m_m17LocalPort; +} + +unsigned int CConf::getM17NetworkModeHang() const +{ + return m_m17NetworkModeHang; +} + +bool CConf::getM17NetworkDebug() const +{ + return m_m17NetworkDebug; +} + bool CConf::getPOCSAGNetworkEnabled() const { return m_pocsagNetworkEnabled; @@ -1551,7 +2247,7 @@ std::string CConf::getPOCSAGGatewayAddress() const return m_pocsagGatewayAddress; } -unsigned int CConf::getPOCSAGGatewayPort() const +unsigned short CConf::getPOCSAGGatewayPort() const { return m_pocsagGatewayPort; } @@ -1561,7 +2257,7 @@ std::string CConf::getPOCSAGLocalAddress() const return m_pocsagLocalAddress; } -unsigned int CConf::getPOCSAGLocalPort() const +unsigned short CConf::getPOCSAGLocalPort() const { return m_pocsagLocalPort; } @@ -1576,6 +2272,96 @@ bool CConf::getPOCSAGNetworkDebug() const return m_pocsagNetworkDebug; } +bool CConf::getFMNetworkEnabled() const +{ + return m_fmNetworkEnabled; +} + +std::string CConf::getFMNetworkProtocol() const +{ + return m_fmNetworkProtocol; +} + +unsigned int CConf::getFMNetworkSampleRate() const +{ + return m_fmNetworkSampleRate; +} + +std::string CConf::getFMNetworkSquelchFile() const +{ + return m_fmNetworkSquelchFile; +} + +std::string CConf::getFMGatewayAddress() const +{ + return m_fmGatewayAddress; +} + +unsigned short CConf::getFMGatewayPort() const +{ + return m_fmGatewayPort; +} + +std::string CConf::getFMLocalAddress() const +{ + return m_fmLocalAddress; +} + +unsigned short CConf::getFMLocalPort() const +{ + return m_fmLocalPort; +} + +bool CConf::getFMPreEmphasis() const +{ + return m_fmPreEmphasis; +} + +bool CConf::getFMDeEmphasis() const +{ + return m_fmDeEmphasis; +} + +float CConf::getFMTXAudioGain() const +{ + return m_fmTXAudioGain; +} + +float CConf::getFMRXAudioGain() const +{ + return m_fmRXAudioGain; +} + +unsigned int CConf::getFMNetworkModeHang() const +{ + return m_fmNetworkModeHang; +} + +bool CConf::getFMNetworkDebug() const +{ + return m_fmNetworkDebug; +} + +bool CConf::getAX25NetworkEnabled() const +{ + return m_ax25NetworkEnabled; +} + +std::string CConf::getAX25NetworkPort() const +{ + return m_ax25NetworkPort; +} + +unsigned int CConf::getAX25NetworkSpeed() const +{ + return m_ax25NetworkSpeed; +} + +bool CConf::getAX25NetworkDebug() const +{ + return m_ax25NetworkDebug; +} + std::string CConf::getTFTSerialPort() const { return m_tftSerialPort; @@ -1586,6 +2372,11 @@ unsigned int CConf::getTFTSerialBrightness() const return m_tftSerialBrightness; } +unsigned int CConf::getTFTSerialScreenLayout() const +{ + return m_tftSerialScreenLayout; +} + unsigned int CConf::getHD44780Rows() const { return m_hd44780Rows; @@ -1691,9 +2482,9 @@ bool CConf::getOLEDRotate() const return m_oledRotate; } -bool CConf::getOLEDCast() const +bool CConf::getOLEDLogoScreensaver() const { - return m_oledCast; + return m_oledLogoScreensaver; } std::string CConf::getLCDprocAddress() const @@ -1701,12 +2492,12 @@ std::string CConf::getLCDprocAddress() const return m_lcdprocAddress; } -unsigned int CConf::getLCDprocPort() const +unsigned short CConf::getLCDprocPort() const { return m_lcdprocPort; } -unsigned int CConf::getLCDprocLocalPort() const +unsigned short CConf::getLCDprocLocalPort() const { return m_lcdprocLocalPort; } @@ -1741,18 +2532,17 @@ std::string CConf::getLockFileName() const return m_lockFileName; } -bool CConf::getMobileGPSEnabled() const +bool CConf::getRemoteControlEnabled() const { - return m_mobileGPSEnabled; + return m_remoteControlEnabled; } -std::string CConf::getMobileGPSAddress() const +std::string CConf::getRemoteControlAddress() const { - return m_mobileGPSAddress; + return m_remoteControlAddress; } -unsigned int CConf::getMobileGPSPort() const +unsigned short CConf::getRemoteControlPort() const { - return m_mobileGPSPort; + return m_remoteControlPort; } - diff --git a/Conf.h b/Conf.h index c3a2d3829..2cd756b2a 100644 --- a/Conf.h +++ b/Conf.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -54,6 +54,7 @@ class CConf unsigned int getLogFileLevel() const; std::string getLogFilePath() const; std::string getLogFileRoot() const; + bool getLogFileRotate() const; // The CW ID section bool getCWIdEnabled() const; @@ -69,9 +70,15 @@ class CConf unsigned int getNXDNIdLookupTime() const; // The Modem section - std::string getModemPort() const; std::string getModemProtocol() const; - unsigned int getModemAddress() const; + std::string getModemUARTPort() const; + unsigned int getModemUARTSpeed() const; + std::string getModemI2CPort() const; + unsigned int getModemI2CAddress() const; + std::string getModemModemAddress() const; + unsigned short getModemModemPort() const; + std::string getModemLocalAddress() const; + unsigned short getModemLocalPort() const; bool getModemRXInvert() const; bool getModemTXInvert() const; bool getModemPTTInvert() const; @@ -89,37 +96,38 @@ class CConf float getModemYSFTXLevel() const; float getModemP25TXLevel() const; float getModemNXDNTXLevel() const; + float getModemM17TXLevel() const; float getModemPOCSAGTXLevel() const; + float getModemFMTXLevel() const; + float getModemAX25TXLevel() const; std::string getModemRSSIMappingFile() const; + bool getModemUseCOSAsLockout() const; bool getModemTrace() const; bool getModemDebug() const; // The Transparent Data section bool getTransparentEnabled() const; std::string getTransparentRemoteAddress() const; - unsigned int getTransparentRemotePort() const; - unsigned int getTransparentLocalPort() const; + unsigned short getTransparentRemotePort() const; + unsigned short getTransparentLocalPort() const; unsigned int getTransparentSendFrameType() const; - // The UMP section - bool getUMPEnabled() const; - std::string getUMPPort() const; - // The D-Star section bool getDStarEnabled() const; std::string getDStarModule() const; bool getDStarSelfOnly() const; std::vector getDStarBlackList() const; + std::vector getDStarWhiteList() const; bool getDStarAckReply() const; unsigned int getDStarAckTime() const; - bool getDStarAckMessage() const; + DSTAR_ACK_MESSAGE getDStarAckMessage() const; bool getDStarErrorReply() const; bool getDStarRemoteGateway() const; unsigned int getDStarModeHang() const; // The DMR section bool getDMREnabled() const; - bool getDMRBeacons() const; + DMR_BEACONS getDMRBeacons() const; unsigned int getDMRBeaconInterval() const; unsigned int getDMRBeaconDuration() const; unsigned int getDMRId() const; @@ -135,6 +143,7 @@ class CConf unsigned int getDMRCallHang() const; unsigned int getDMRTXHang() const; unsigned int getDMRModeHang() const; + DMR_OVCM_TYPES getDMROVCM() const; // The System Fusion section bool getFusionEnabled() const; @@ -142,8 +151,6 @@ class CConf bool getFusionRemoteGateway() const; bool getFusionSelfOnly() const; unsigned int getFusionTXHang() const; - bool getFusionSQLEnabled() const; - unsigned char getFusionSQL() const; unsigned int getFusionModeHang() const; // The P25 section @@ -153,6 +160,7 @@ class CConf bool getP25SelfOnly() const; bool getP25OverrideUID() const; bool getP25RemoteGateway() const; + unsigned int getP25TXHang() const; unsigned int getP25ModeHang() const; // The NXDN section @@ -161,25 +169,83 @@ class CConf unsigned int getNXDNRAN() const; bool getNXDNSelfOnly() const; bool getNXDNRemoteGateway() const; + unsigned int getNXDNTXHang() const; unsigned int getNXDNModeHang() const; + // The M17 section + bool getM17Enabled() const; + unsigned int getM17CAN() const; + bool getM17SelfOnly() const; + bool getM17AllowEncryption() const; + unsigned int getM17TXHang() const; + unsigned int getM17ModeHang() const; + // The POCSAG section bool getPOCSAGEnabled() const; unsigned int getPOCSAGFrequency() const; + // The AX.25 section + bool getAX25Enabled() const; + unsigned int getAX25TXDelay() const; + int getAX25RXTwist() const; + unsigned int getAX25SlotTime() const; + unsigned int getAX25PPersist() const; + bool getAX25Trace() const; + + // The FM Section + bool getFMEnabled() const; + std::string getFMCallsign() const; + unsigned int getFMCallsignSpeed() const; + unsigned int getFMCallsignFrequency() const; + unsigned int getFMCallsignTime() const; + unsigned int getFMCallsignHoldoff() const; + float getFMCallsignHighLevel() const; + float getFMCallsignLowLevel() const; + bool getFMCallsignAtStart() const; + bool getFMCallsignAtEnd() const; + bool getFMCallsignAtLatch() const; + std::string getFMRFAck() const; + std::string getFMExtAck() const; + unsigned int getFMAckSpeed() const; + unsigned int getFMAckFrequency() const; + unsigned int getFMAckMinTime() const; + unsigned int getFMAckDelay() const; + float getFMAckLevel() const; + unsigned int getFMTimeout() const; + float getFMTimeoutLevel() const; + float getFMCTCSSFrequency() const; + unsigned int getFMCTCSSHighThreshold() const; + unsigned int getFMCTCSSLowThreshold() const; + float getFMCTCSSLevel() const; + unsigned int getFMKerchunkTime() const; + unsigned int getFMHangTime() const; + unsigned int getFMAccessMode() const; + bool getFMLinkMode() const; + bool getFMCOSInvert() const; + bool getFMNoiseSquelch() const; + unsigned int getFMSquelchHighThreshold() const; + unsigned int getFMSquelchLowThreshold() const; + unsigned int getFMRFAudioBoost() const; + float getFMMaxDevLevel() const; + unsigned int getFMExtAudioBoost() const; + unsigned int getFMModeHang() const; + // The D-Star Network section bool getDStarNetworkEnabled() const; std::string getDStarGatewayAddress() const; - unsigned int getDStarGatewayPort() const; - unsigned int getDStarLocalPort() const; + unsigned short getDStarGatewayPort() const; + std::string getDStarLocalAddress() const; + unsigned short getDStarLocalPort() const; unsigned int getDStarNetworkModeHang() const; bool getDStarNetworkDebug() const; // The DMR Network section bool getDMRNetworkEnabled() const; - std::string getDMRNetworkAddress() const; - unsigned int getDMRNetworkPort() const; - unsigned int getDMRNetworkLocal() const; + std::string getDMRNetworkType() const; + std::string getDMRNetworkRemoteAddress() const; + unsigned short getDMRNetworkRemotePort() const; + std::string getDMRNetworkLocalAddress() const; + unsigned short getDMRNetworkLocalPort() const; std::string getDMRNetworkPassword() const; std::string getDMRNetworkOptions() const; bool getDMRNetworkDebug() const; @@ -190,42 +256,76 @@ class CConf // The System Fusion Network section bool getFusionNetworkEnabled() const; - std::string getFusionNetworkMyAddress() const; - unsigned int getFusionNetworkMyPort() const; + std::string getFusionNetworkLocalAddress() const; + unsigned short getFusionNetworkLocalPort() const; std::string getFusionNetworkGatewayAddress() const; - unsigned int getFusionNetworkGatewayPort() const; + unsigned short getFusionNetworkGatewayPort() const; unsigned int getFusionNetworkModeHang() const; bool getFusionNetworkDebug() const; // The P25 Network section bool getP25NetworkEnabled() const; std::string getP25GatewayAddress() const; - unsigned int getP25GatewayPort() const; - unsigned int getP25LocalPort() const; + unsigned short getP25GatewayPort() const; + std::string getP25LocalAddress() const; + unsigned short getP25LocalPort() const; unsigned int getP25NetworkModeHang() const; bool getP25NetworkDebug() const; // The NXDN Network section bool getNXDNNetworkEnabled() const; + std::string getNXDNNetworkProtocol() const; std::string getNXDNGatewayAddress() const; - unsigned int getNXDNGatewayPort() const; + unsigned short getNXDNGatewayPort() const; std::string getNXDNLocalAddress() const; - unsigned int getNXDNLocalPort() const; + unsigned short getNXDNLocalPort() const; unsigned int getNXDNNetworkModeHang() const; bool getNXDNNetworkDebug() const; + // The M17 Network section + bool getM17NetworkEnabled() const; + std::string getM17GatewayAddress() const; + unsigned short getM17GatewayPort() const; + std::string getM17LocalAddress() const; + unsigned short getM17LocalPort() const; + unsigned int getM17NetworkModeHang() const; + bool getM17NetworkDebug() const; + // The POCSAG Network section bool getPOCSAGNetworkEnabled() const; std::string getPOCSAGGatewayAddress() const; - unsigned int getPOCSAGGatewayPort() const; + unsigned short getPOCSAGGatewayPort() const; std::string getPOCSAGLocalAddress() const; - unsigned int getPOCSAGLocalPort() const; + unsigned short getPOCSAGLocalPort() const; unsigned int getPOCSAGNetworkModeHang() const; bool getPOCSAGNetworkDebug() const; + // The FM Network section + bool getFMNetworkEnabled() const; + std::string getFMNetworkProtocol() const; + unsigned int getFMNetworkSampleRate() const; + std::string getFMNetworkSquelchFile() const; + std::string getFMGatewayAddress() const; + unsigned short getFMGatewayPort() const; + std::string getFMLocalAddress() const; + unsigned short getFMLocalPort() const; + bool getFMPreEmphasis() const; + bool getFMDeEmphasis() const; + float getFMTXAudioGain() const; + float getFMRXAudioGain() const; + unsigned int getFMNetworkModeHang() const; + bool getFMNetworkDebug() const; + + // The AX.25 Network section + bool getAX25NetworkEnabled() const; + std::string getAX25NetworkPort() const; + unsigned int getAX25NetworkSpeed() const; + bool getAX25NetworkDebug() const; + // The TFTSERIAL section std::string getTFTSerialPort() const; unsigned int getTFTSerialBrightness() const; + unsigned int getTFTSerialScreenLayout() const; // The HD44780 section unsigned int getHD44780Rows() const; @@ -254,12 +354,12 @@ class CConf bool getOLEDInvert() const; bool getOLEDScroll() const; bool getOLEDRotate() const; - bool getOLEDCast() const; + bool getOLEDLogoScreensaver() const; // The LCDproc section std::string getLCDprocAddress() const; - unsigned int getLCDprocPort() const; - unsigned int getLCDprocLocalPort() const; + unsigned short getLCDprocPort() const; + unsigned short getLCDprocLocalPort() const; bool getLCDprocDisplayClock() const; bool getLCDprocUTC() const; bool getLCDprocDimOnIdle() const; @@ -268,10 +368,10 @@ class CConf bool getLockFileEnabled() const; std::string getLockFileName() const; - // The Mobile GPS section - bool getMobileGPSEnabled() const; - std::string getMobileGPSAddress() const; - unsigned int getMobileGPSPort() const; + // The Remote Control section + bool getRemoteControlEnabled() const; + std::string getRemoteControlAddress() const; + unsigned short getRemoteControlPort() const; private: std::string m_file; @@ -296,6 +396,7 @@ class CConf unsigned int m_logFileLevel; std::string m_logFilePath; std::string m_logFileRoot; + bool m_logFileRotate; bool m_cwIdEnabled; unsigned int m_cwIdTime; @@ -307,9 +408,15 @@ class CConf std::string m_nxdnIdLookupFile; unsigned int m_nxdnIdLookupTime; - std::string m_modemPort; std::string m_modemProtocol; - unsigned int m_modemAddress; + std::string m_modemUARTPort; + unsigned int m_modemUARTSpeed; + std::string m_modemI2CPort; + unsigned int m_modemI2CAddress; + std::string m_modemModemAddress; + unsigned short m_modemModemPort; + std::string m_modemLocalAddress; + unsigned short m_modemLocalPort; bool m_modemRXInvert; bool m_modemTXInvert; bool m_modemPTTInvert; @@ -327,33 +434,35 @@ class CConf float m_modemYSFTXLevel; float m_modemP25TXLevel; float m_modemNXDNTXLevel; + float m_modemM17TXLevel; float m_modemPOCSAGTXLevel; + float m_modemFMTXLevel; + float m_modemAX25TXLevel; std::string m_modemRSSIMappingFile; + bool m_modemUseCOSAsLockout; bool m_modemTrace; bool m_modemDebug; bool m_transparentEnabled; std::string m_transparentRemoteAddress; - unsigned int m_transparentRemotePort; - unsigned int m_transparentLocalPort; + unsigned short m_transparentRemotePort; + unsigned short m_transparentLocalPort; unsigned int m_transparentSendFrameType; - bool m_umpEnabled; - std::string m_umpPort; - bool m_dstarEnabled; std::string m_dstarModule; bool m_dstarSelfOnly; std::vector m_dstarBlackList; + std::vector m_dstarWhiteList; bool m_dstarAckReply; unsigned int m_dstarAckTime; - bool m_dstarAckMessage; + DSTAR_ACK_MESSAGE m_dstarAckMessage; bool m_dstarErrorReply; bool m_dstarRemoteGateway; unsigned int m_dstarModeHang; bool m_dmrEnabled; - bool m_dmrBeacons; + DMR_BEACONS m_dmrBeacons; unsigned int m_dmrBeaconInterval; unsigned int m_dmrBeaconDuration; unsigned int m_dmrId; @@ -369,14 +478,13 @@ class CConf unsigned int m_dmrCallHang; unsigned int m_dmrTXHang; unsigned int m_dmrModeHang; + DMR_OVCM_TYPES m_dmrOVCM; bool m_fusionEnabled; bool m_fusionLowDeviation; bool m_fusionRemoteGateway; bool m_fusionSelfOnly; unsigned int m_fusionTXHang; - bool m_fusionSQLEnabled; - unsigned char m_fusionSQL; unsigned int m_fusionModeHang; bool m_p25Enabled; @@ -385,6 +493,7 @@ class CConf bool m_p25SelfOnly; bool m_p25OverrideUID; bool m_p25RemoteGateway; + unsigned int m_p25TXHang; unsigned int m_p25ModeHang; bool m_nxdnEnabled; @@ -392,22 +501,77 @@ class CConf unsigned int m_nxdnRAN; bool m_nxdnSelfOnly; bool m_nxdnRemoteGateway; + unsigned int m_nxdnTXHang; unsigned int m_nxdnModeHang; + bool m_m17Enabled; + unsigned int m_m17CAN; + bool m_m17SelfOnly; + bool m_m17AllowEncryption; + unsigned int m_m17TXHang; + unsigned int m_m17ModeHang; + bool m_pocsagEnabled; unsigned int m_pocsagFrequency; + bool m_fmEnabled; + std::string m_fmCallsign; + unsigned int m_fmCallsignSpeed; + unsigned int m_fmCallsignFrequency; + unsigned int m_fmCallsignTime; + unsigned int m_fmCallsignHoldoff; + float m_fmCallsignHighLevel; + float m_fmCallsignLowLevel; + bool m_fmCallsignAtStart; + bool m_fmCallsignAtEnd; + bool m_fmCallsignAtLatch; + std::string m_fmRFAck; + std::string m_fmExtAck; + unsigned int m_fmAckSpeed; + unsigned int m_fmAckFrequency; + unsigned int m_fmAckMinTime; + unsigned int m_fmAckDelay; + float m_fmAckLevel; + unsigned int m_fmTimeout; + float m_fmTimeoutLevel; + float m_fmCTCSSFrequency; + unsigned int m_fmCTCSSHighThreshold; + unsigned int m_fmCTCSSLowThreshold; + float m_fmCTCSSLevel; + unsigned int m_fmKerchunkTime; + unsigned int m_fmHangTime; + unsigned int m_fmAccessMode; + bool m_fmLinkMode; + bool m_fmCOSInvert; + bool m_fmNoiseSquelch; + unsigned int m_fmSquelchHighThreshold; + unsigned int m_fmSquelchLowThreshold; + unsigned int m_fmRFAudioBoost; + float m_fmMaxDevLevel; + unsigned int m_fmExtAudioBoost; + unsigned int m_fmModeHang; + + bool m_ax25Enabled; + unsigned int m_ax25TXDelay; + int m_ax25RXTwist; + unsigned int m_ax25SlotTime; + unsigned int m_ax25PPersist; + bool m_ax25Trace; + bool m_dstarNetworkEnabled; std::string m_dstarGatewayAddress; - unsigned int m_dstarGatewayPort; - unsigned int m_dstarLocalPort; + unsigned short m_dstarGatewayPort; + std::string m_dstarLocalAddress; + unsigned short m_dstarLocalPort; unsigned int m_dstarNetworkModeHang; bool m_dstarNetworkDebug; bool m_dmrNetworkEnabled; - std::string m_dmrNetworkAddress; - unsigned int m_dmrNetworkPort; - unsigned int m_dmrNetworkLocal; + std::string m_dmrNetworkType; + std::string m_dmrNetworkRemoteAddress; + unsigned short m_dmrNetworkRemotePort; + std::string m_dmrNetworkLocalAddress; + unsigned short m_dmrNetworkLocalPort; std::string m_dmrNetworkPassword; std::string m_dmrNetworkOptions; bool m_dmrNetworkDebug; @@ -417,38 +581,69 @@ class CConf unsigned int m_dmrNetworkModeHang; bool m_fusionNetworkEnabled; - std::string m_fusionNetworkMyAddress; - unsigned int m_fusionNetworkMyPort; + std::string m_fusionNetworkLocalAddress; + unsigned short m_fusionNetworkLocalPort; std::string m_fusionNetworkGatewayAddress; - unsigned int m_fusionNetworkGatewayPort; + unsigned short m_fusionNetworkGatewayPort; unsigned int m_fusionNetworkModeHang; bool m_fusionNetworkDebug; bool m_p25NetworkEnabled; std::string m_p25GatewayAddress; - unsigned int m_p25GatewayPort; - unsigned int m_p25LocalPort; + unsigned short m_p25GatewayPort; + std::string m_p25LocalAddress; + unsigned short m_p25LocalPort; unsigned int m_p25NetworkModeHang; bool m_p25NetworkDebug; bool m_nxdnNetworkEnabled; + std::string m_nxdnNetworkProtocol; std::string m_nxdnGatewayAddress; - unsigned int m_nxdnGatewayPort; + unsigned short m_nxdnGatewayPort; std::string m_nxdnLocalAddress; - unsigned int m_nxdnLocalPort; + unsigned short m_nxdnLocalPort; unsigned int m_nxdnNetworkModeHang; bool m_nxdnNetworkDebug; + bool m_m17NetworkEnabled; + std::string m_m17GatewayAddress; + unsigned short m_m17GatewayPort; + std::string m_m17LocalAddress; + unsigned short m_m17LocalPort; + unsigned int m_m17NetworkModeHang; + bool m_m17NetworkDebug; + bool m_pocsagNetworkEnabled; std::string m_pocsagGatewayAddress; - unsigned int m_pocsagGatewayPort; + unsigned short m_pocsagGatewayPort; std::string m_pocsagLocalAddress; - unsigned int m_pocsagLocalPort; + unsigned short m_pocsagLocalPort; unsigned int m_pocsagNetworkModeHang; bool m_pocsagNetworkDebug; + bool m_fmNetworkEnabled; + std::string m_fmNetworkProtocol; + unsigned int m_fmNetworkSampleRate; + std::string m_fmNetworkSquelchFile; + std::string m_fmGatewayAddress; + unsigned short m_fmGatewayPort; + std::string m_fmLocalAddress; + unsigned short m_fmLocalPort; + bool m_fmPreEmphasis; + bool m_fmDeEmphasis; + float m_fmTXAudioGain; + float m_fmRXAudioGain; + unsigned int m_fmNetworkModeHang; + bool m_fmNetworkDebug; + + bool m_ax25NetworkEnabled; + std::string m_ax25NetworkPort; + unsigned int m_ax25NetworkSpeed; + bool m_ax25NetworkDebug; + std::string m_tftSerialPort; unsigned int m_tftSerialBrightness; + unsigned int m_tftSerialScreenLayout; unsigned int m_hd44780Rows; unsigned int m_hd44780Columns; @@ -474,11 +669,11 @@ class CConf bool m_oledInvert; bool m_oledScroll; bool m_oledRotate; - bool m_oledCast; + bool m_oledLogoScreensaver; std::string m_lcdprocAddress; - unsigned int m_lcdprocPort; - unsigned int m_lcdprocLocalPort; + unsigned short m_lcdprocPort; + unsigned short m_lcdprocLocalPort; bool m_lcdprocDisplayClock; bool m_lcdprocUTC; bool m_lcdprocDimOnIdle; @@ -486,9 +681,9 @@ class CConf bool m_lockFileEnabled; std::string m_lockFileName; - bool m_mobileGPSEnabled; - std::string m_mobileGPSAddress; - unsigned int m_mobileGPSPort; + bool m_remoteControlEnabled; + std::string m_remoteControlAddress; + unsigned short m_remoteControlPort; }; #endif diff --git a/DMRCSBK.cpp b/DMRCSBK.cpp index de7320d93..ad02b0bcb 100644 --- a/DMRCSBK.cpp +++ b/DMRCSBK.cpp @@ -1,5 +1,6 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2021,2022 by Jonathan Naylor G4KLX + * Copyright (C) 2019 by Patrick Maier DK5MP * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,7 +34,8 @@ m_bsId(0U), m_srcId(0U), m_dstId(0U), m_dataContent(false), -m_CBF(0U) +m_CBF(0U), +m_OVCM(false) { m_data = new unsigned char[12U]; } @@ -80,6 +82,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; m_dataContent = false; m_CBF = 0U; + m_OVCM = (m_data[2U] & 0x04U) == 0x04U; CUtils::dump(1U, "Unit to Unit Service Request CSBK", m_data, 12U); break; @@ -89,6 +92,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; m_dataContent = false; m_CBF = 0U; + m_OVCM = (m_data[2U] & 0x04U) == 0x04U; CUtils::dump(1U, "Unit to Unit Service Answer Response CSBK", m_data, 12U); break; @@ -110,6 +114,48 @@ bool CDMRCSBK::put(const unsigned char* bytes) CUtils::dump(1U, "Negative Acknowledge Response CSBK", m_data, 12U); break; + case CSBKO_CALL_ALERT: + m_GI = false; + m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; + m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; + m_dataContent = false; + m_CBF = 0U; + CUtils::dump(1U, "Call Alert CSBK", m_data, 12U); + break; + + case CSBKO_CALL_ALERT_ACK: + m_GI = false; + m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; + m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; + m_dataContent = false; + m_CBF = 0U; + CUtils::dump(1U, "Call Alert Ack CSBK", m_data, 12U); + break; + + case CSBKO_RADIO_CHECK: + m_GI = false; + if (m_data[3U] == 0x80) { + m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; + m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; + CUtils::dump(1U, "Radio Check Req CSBK", m_data, 12U); + } else { + m_srcId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; + m_dstId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; + CUtils::dump(1U, "Radio Check Ack CSBK", m_data, 12U); + } + m_dataContent = false; + m_CBF = 0U; + break; + + case CSBKO_CALL_EMERGENCY: + m_GI = true; + m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; + m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; + m_dataContent = false; + m_CBF = 0U; + CUtils::dump(1U, "Call Emergency CSBK", m_data, 12U); + break; + default: m_GI = false; m_srcId = 0U; @@ -149,6 +195,23 @@ unsigned char CDMRCSBK::getFID() const return m_FID; } +bool CDMRCSBK::getOVCM() const +{ + return m_OVCM; +} + +void CDMRCSBK::setOVCM(bool ovcm) +{ + if (m_CSBKO == CSBKO_UUVREQ || m_CSBKO == CSBKO_UUANSRSP) { + m_OVCM = ovcm; + + if (ovcm) + m_data[2U] |= 0x04U; + else + m_data[2U] &= 0xFBU; + } +} + bool CDMRCSBK::getGI() const { return m_GI; diff --git a/DMRCSBK.h b/DMRCSBK.h index 5dc62a07d..52f16d235 100644 --- a/DMRCSBK.h +++ b/DMRCSBK.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2021,2022 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,13 +22,17 @@ #include "DMRDefines.h" enum CSBKO { - CSBKO_NONE = 0x00, - CSBKO_UUVREQ = 0x04, - CSBKO_UUANSRSP = 0x05, - CSBKO_CTCSBK = 0x07, - CSBKO_NACKRSP = 0x26, - CSBKO_BSDWNACT = 0x38, - CSBKO_PRECCSBK = 0x3D + CSBKO_NONE = 0x00, + CSBKO_UUVREQ = 0x04, + CSBKO_UUANSRSP = 0x05, + CSBKO_CTCSBK = 0x07, + CSBKO_CALL_ALERT = 0x1F, + CSBKO_CALL_ALERT_ACK = 0x20, + CSBKO_RADIO_CHECK = 0x24, + CSBKO_NACKRSP = 0x26, + CSBKO_CALL_EMERGENCY = 0x27, + CSBKO_BSDWNACT = 0x38, + CSBKO_PRECCSBK = 0x3D }; class CDMRCSBK @@ -45,6 +49,10 @@ class CDMRCSBK CSBKO getCSBKO() const; unsigned char getFID() const; + // Set/Get the OVCM bit in the supported CSBKs + bool getOVCM() const; + void setOVCM(bool ovcm); + // For BS Dwn Act unsigned int getBSId() const; @@ -69,6 +77,7 @@ class CDMRCSBK unsigned int m_dstId; bool m_dataContent; unsigned char m_CBF; + bool m_OVCM; }; #endif diff --git a/DMRControl.cpp b/DMRControl.cpp index a9d82e660..576108083 100644 --- a/DMRControl.cpp +++ b/DMRControl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX + * Copyright (C) 2015-2021 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ #include #include -CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector& prefixes, const std::vector& blacklist, const std::vector& whitelist, const std::vector& slot1TGWhitelist, const std::vector& slot2TGWhitelist, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter) : +CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector& prefixes, const std::vector& blacklist, const std::vector& whitelist, const std::vector& slot1TGWhitelist, const std::vector& slot2TGWhitelist, unsigned int timeout, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter, DMR_OVCM_TYPES ovcm) : m_colorCode(colorCode), m_modem(modem), m_network(network), @@ -38,7 +38,7 @@ m_lookup(lookup) // Load black and white lists to DMRAccessControl CDMRAccessControl::init(blacklist, whitelist, slot1TGWhitelist, slot2TGWhitelist, selfOnly, prefixes, id); - CDMRSlot::init(colorCode, embeddedLCOnly, dumpTAData, callHang, modem, network, display, duplex, m_lookup, rssi, jitter); + CDMRSlot::init(colorCode, embeddedLCOnly, dumpTAData, callHang, modem, network, display, duplex, m_lookup, rssi, jitter, ovcm); } CDMRControl::~CDMRControl() @@ -122,3 +122,17 @@ void CDMRControl::clock() m_slot1.clock(); m_slot2.clock(); } + +bool CDMRControl::isBusy() const +{ + if (m_slot1.isBusy()) + return true; + + return m_slot2.isBusy(); +} + +void CDMRControl::enable(bool enabled) +{ + m_slot1.enable(enabled); + m_slot2.enable(enabled); +} diff --git a/DMRControl.h b/DMRControl.h index 01179b48c..914419443 100644 --- a/DMRControl.h +++ b/DMRControl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ class CDMRControl { public: - CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector& prefixes, const std::vector& blacklist, const std::vector& whitelist, const std::vector& slot1TGWhitelist, const std::vector& slot2TGWhitelist, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter); + CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector& prefixes, const std::vector& blacklist, const std::vector& whitelist, const std::vector& slot1TGWhitelist, const std::vector& slot2TGWhitelist, unsigned int timeout, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter, DMR_OVCM_TYPES ovcm); ~CDMRControl(); bool processWakeup(const unsigned char* data); @@ -44,10 +44,14 @@ class CDMRControl { void clock(); + bool isBusy() const; + + void enable(bool enabled); + private: unsigned int m_colorCode; CModem* m_modem; - CDMRNetwork* m_network; + IDMRNetwork* m_network; CDMRSlot m_slot1; CDMRSlot m_slot2; CDMRLookup* m_lookup; diff --git a/DMRDefines.h b/DMRDefines.h index 5b53c33d0..839f76429 100644 --- a/DMRDefines.h +++ b/DMRDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/DMRDirectNetwork.cpp b/DMRDirectNetwork.cpp new file mode 100644 index 000000000..ba36a6938 --- /dev/null +++ b/DMRDirectNetwork.cpp @@ -0,0 +1,644 @@ +/* + * Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "DMRDirectNetwork.h" + +#include "SHA256.h" +#include "Utils.h" +#include "Log.h" + +#include +#include + +const unsigned int BUFFER_LENGTH = 500U; + +const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; + + +CDMRDirectNetwork::CDMRDirectNetwork(const std::string& address, unsigned short port, const std::string& localAddress, unsigned short localPort, unsigned int id, const std::string& password, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug) : +m_address(address), +m_port(port), +m_addr(), +m_addrLen(0U), +m_id(NULL), +m_password(password), +m_duplex(duplex), +m_version(version), +m_debug(debug), +m_socket(localAddress, localPort), +m_enabled(false), +m_slot1(slot1), +m_slot2(slot2), +m_hwType(hwType), +m_status(WAITING_CONNECT), +m_retryTimer(1000U, 10U), +m_timeoutTimer(1000U, 60U), +m_buffer(NULL), +m_streamId(NULL), +m_salt(NULL), +m_rxData(1000U, "DMR Network"), +m_options(), +m_random(), +m_callsign(), +m_rxFrequency(0U), +m_txFrequency(0U), +m_power(0U), +m_colorCode(0U), +m_latitude(0.0F), +m_longitude(0.0F), +m_height(0), +m_location(), +m_description(), +m_url(), +m_beacon(false) +{ + assert(!address.empty()); + assert(port > 0U); + assert(id > 1000U); + assert(!password.empty()); + + m_buffer = new unsigned char[BUFFER_LENGTH]; + m_salt = new unsigned char[sizeof(uint32_t)]; + m_id = new uint8_t[4U]; + m_streamId = new uint32_t[2U]; + + m_id[0U] = id >> 24; + m_id[1U] = id >> 16; + m_id[2U] = id >> 8; + m_id[3U] = id >> 0; + + std::random_device rd; + std::mt19937 mt(rd()); + m_random = mt; + + std::uniform_int_distribution dist(0x00000001, 0xfffffffe); + m_streamId[0U] = dist(m_random); + m_streamId[1U] = dist(m_random); +} + +CDMRDirectNetwork::~CDMRDirectNetwork() +{ + delete[] m_streamId; + delete[] m_buffer; + delete[] m_salt; + delete[] m_id; +} + +void CDMRDirectNetwork::setOptions(const std::string& options) +{ + m_options = options; +} + +void CDMRDirectNetwork::setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url) +{ + m_callsign = callsign; + m_rxFrequency = rxFrequency; + m_txFrequency = txFrequency; + m_power = power; + m_colorCode = colorCode; + m_latitude = latitude; + m_longitude = longitude; + m_height = height; + m_location = location; + m_description = description; + m_url = url; +} + +bool CDMRDirectNetwork::open() +{ + if (CUDPSocket::lookup(m_address, m_port, m_addr, m_addrLen) != 0) { + LogError("DMR, Could not lookup the address of the DMR Network"); + return false; + } + + LogMessage("Opening DMR Network"); + + m_status = WAITING_CONNECT; + m_timeoutTimer.stop(); + m_retryTimer.start(); + + return true; +} + +void CDMRDirectNetwork::enable(bool enabled) +{ + if (!enabled && m_enabled) + m_rxData.clear(); + + m_enabled = enabled; +} + +bool CDMRDirectNetwork::read(CDMRData& data) +{ + if (m_status != RUNNING) + return false; + + if (m_rxData.isEmpty()) + return false; + + unsigned char length = 0U; + m_rxData.getData(&length, 1U); + m_rxData.getData(m_buffer, length); + + // Is this a data packet? + if (::memcmp(m_buffer, "DMRD", 4U) != 0) + return false; + + unsigned char seqNo = m_buffer[4U]; + + unsigned int srcId = (m_buffer[5U] << 16) | (m_buffer[6U] << 8) | (m_buffer[7U] << 0); + + unsigned int dstId = (m_buffer[8U] << 16) | (m_buffer[9U] << 8) | (m_buffer[10U] << 0); + + unsigned int slotNo = (m_buffer[15U] & 0x80U) == 0x80U ? 2U : 1U; + + // DMO mode slot disabling + if (slotNo == 1U && !m_duplex) + return false; + + // Individual slot disabling + if (slotNo == 1U && !m_slot1) + return false; + if (slotNo == 2U && !m_slot2) + return false; + + FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO_USER_USER : FLCO_GROUP; + + data.setSeqNo(seqNo); + data.setSlotNo(slotNo); + data.setSrcId(srcId); + data.setDstId(dstId); + data.setFLCO(flco); + + bool dataSync = (m_buffer[15U] & 0x20U) == 0x20U; + bool voiceSync = (m_buffer[15U] & 0x10U) == 0x10U; + + if (dataSync) { + unsigned char dataType = m_buffer[15U] & 0x0FU; + data.setData(m_buffer + 20U); + data.setDataType(dataType); + data.setN(0U); + } else if (voiceSync) { + data.setData(m_buffer + 20U); + data.setDataType(DT_VOICE_SYNC); + data.setN(0U); + } else { + unsigned char n = m_buffer[15U] & 0x0FU; + data.setData(m_buffer + 20U); + data.setDataType(DT_VOICE); + data.setN(n); + } + + return true; +} + +bool CDMRDirectNetwork::write(const CDMRData& data) +{ + if (m_status != RUNNING) + return false; + + unsigned char buffer[HOMEBREW_DATA_PACKET_LENGTH]; + ::memset(buffer, 0x00U, HOMEBREW_DATA_PACKET_LENGTH); + + buffer[0U] = 'D'; + buffer[1U] = 'M'; + buffer[2U] = 'R'; + buffer[3U] = 'D'; + + unsigned int srcId = data.getSrcId(); + buffer[5U] = srcId >> 16; + buffer[6U] = srcId >> 8; + buffer[7U] = srcId >> 0; + + unsigned int dstId = data.getDstId(); + buffer[8U] = dstId >> 16; + buffer[9U] = dstId >> 8; + buffer[10U] = dstId >> 0; + + ::memcpy(buffer + 11U, m_id, 4U); + + unsigned int slotNo = data.getSlotNo(); + + // Individual slot disabling + if (slotNo == 1U && !m_slot1) + return false; + if (slotNo == 2U && !m_slot2) + return false; + + buffer[15U] = slotNo == 1U ? 0x00U : 0x80U; + + FLCO flco = data.getFLCO(); + buffer[15U] |= flco == FLCO_GROUP ? 0x00U : 0x40U; + + unsigned int slotIndex = slotNo - 1U; + + std::uniform_int_distribution dist(0x00000001, 0xfffffffe); + unsigned char dataType = data.getDataType(); + if (dataType == DT_VOICE_SYNC) { + buffer[15U] |= 0x10U; + } else if (dataType == DT_VOICE) { + buffer[15U] |= data.getN(); + } else { + if (dataType == DT_VOICE_LC_HEADER) + m_streamId[slotIndex] = dist(m_random); + + if (dataType == DT_CSBK || dataType == DT_DATA_HEADER) + m_streamId[slotIndex] = dist(m_random); + + buffer[15U] |= (0x20U | dataType); + } + + buffer[4U] = data.getSeqNo(); + + ::memcpy(buffer + 16U, m_streamId + slotIndex, 4U); + + data.getData(buffer + 20U); + + buffer[53U] = data.getBER(); + + buffer[54U] = data.getRSSI(); + + write(buffer, HOMEBREW_DATA_PACKET_LENGTH); + + return true; +} + +bool CDMRDirectNetwork::writeRadioPosition(unsigned int id, const unsigned char* data) +{ + if (m_status != RUNNING) + return false; + + unsigned char buffer[20U]; + + ::memcpy(buffer + 0U, "DMRG", 4U); + + buffer[4U] = id >> 16; + buffer[5U] = id >> 8; + buffer[6U] = id >> 0; + + ::memcpy(buffer + 7U, data + 2U, 7U); + + return write(buffer, 14U); +} + +bool CDMRDirectNetwork::writeTalkerAlias(unsigned int id, unsigned char type, const unsigned char* data) +{ + if (m_status != RUNNING) + return false; + + unsigned char buffer[20U]; + + ::memcpy(buffer + 0U, "DMRA", 4U); + + buffer[4U] = id >> 16; + buffer[5U] = id >> 8; + buffer[6U] = id >> 0; + + buffer[7U] = type; + + ::memcpy(buffer + 8U, data + 2U, 7U); + + return write(buffer, 15U); +} + +bool CDMRDirectNetwork::isConnected() const +{ + return (m_status == RUNNING); +} + +void CDMRDirectNetwork::close(bool sayGoodbye) +{ + LogMessage("Closing DMR Network"); + + if (sayGoodbye && (m_status == RUNNING)) { + unsigned char buffer[9U]; + ::memcpy(buffer + 0U, "RPTCL", 5U); + ::memcpy(buffer + 5U, m_id, 4U); + write(buffer, 9U); + } + + m_socket.close(); + + m_retryTimer.stop(); + m_timeoutTimer.stop(); +} + +void CDMRDirectNetwork::clock(unsigned int ms) +{ + m_retryTimer.clock(ms); + if (m_retryTimer.isRunning() && m_retryTimer.hasExpired()) { + switch (m_status) { + case WAITING_CONNECT: + if (m_socket.open(m_addr.ss_family)) { + if (writeLogin()) { + m_status = WAITING_LOGIN; + } + } + break; + case WAITING_LOGIN: + writeLogin(); + break; + case WAITING_AUTHORISATION: + writeAuthorisation(); + break; + case WAITING_OPTIONS: + writeOptions(); + break; + case WAITING_CONFIG: + writeConfig(); + break; + case RUNNING: + writePing(); + break; + default: + break; + } + + m_retryTimer.start(); + } + + sockaddr_storage address; + unsigned int addrlen; + int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, addrlen); + if (length < 0) { + LogError("DMR, Socket has failed, retrying connection to the master"); + close(false); + open(); + return; + } + + if (length > 0) { + if (!CUDPSocket::match(m_addr, address)) { + LogMessage("DMR, packet received from an invalid source"); + return; + } + + if (m_debug) + CUtils::dump(1U, "DMR, Network Received", m_buffer, length); + + if (::memcmp(m_buffer, "DMRD", 4U) == 0) { + if (m_enabled) { + unsigned char len = length; + m_rxData.addData(&len, 1U); + m_rxData.addData(m_buffer, len); + } + } else if (::memcmp(m_buffer, "MSTNAK", 6U) == 0) { + if (m_status == RUNNING) { + LogWarning("DMR, Login to the master has failed, retrying login ..."); + m_status = WAITING_LOGIN; + m_timeoutTimer.start(); + m_retryTimer.start(); + } else { + /* Once the modem death spiral has been prevented in Modem.cpp + the Network sometimes times out and reaches here. + We want it to reconnect so... */ + LogError("DMR, Login to the master has failed, retrying network ..."); + close(false); + open(); + return; + } + } else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) { + switch (m_status) { + case WAITING_LOGIN: + LogDebug("DMR, Sending authorisation"); + ::memcpy(m_salt, m_buffer + 6U, sizeof(uint32_t)); + writeAuthorisation(); + m_status = WAITING_AUTHORISATION; + m_timeoutTimer.start(); + m_retryTimer.start(); + break; + case WAITING_AUTHORISATION: + LogDebug("DMR, Sending configuration"); + writeConfig(); + m_status = WAITING_CONFIG; + m_timeoutTimer.start(); + m_retryTimer.start(); + break; + case WAITING_CONFIG: + if (m_options.empty()) { + LogMessage("DMR, Logged into the master successfully"); + m_status = RUNNING; + } else { + LogDebug("DMR, Sending options"); + writeOptions(); + m_status = WAITING_OPTIONS; + } + m_timeoutTimer.start(); + m_retryTimer.start(); + break; + case WAITING_OPTIONS: + LogMessage("DMR, Logged into the master successfully"); + m_status = RUNNING; + m_timeoutTimer.start(); + m_retryTimer.start(); + break; + default: + break; + } + } else if (::memcmp(m_buffer, "MSTCL", 5U) == 0) { + LogError("DMR, Master is closing down"); + close(false); + open(); + } else if (::memcmp(m_buffer, "MSTPONG", 7U) == 0) { + m_timeoutTimer.start(); + } else if (::memcmp(m_buffer, "RPTSBKN", 7U) == 0) { + m_beacon = true; + } else { + CUtils::dump("DMR, Unknown packet from the master", m_buffer, length); + } + } + + m_timeoutTimer.clock(ms); + if (m_timeoutTimer.isRunning() && m_timeoutTimer.hasExpired()) { + LogError("DMR, Connection to the master has timed out, retrying connection"); + close(false); + open(); + } +} + +bool CDMRDirectNetwork::writeLogin() +{ + unsigned char buffer[8U]; + + ::memcpy(buffer + 0U, "RPTL", 4U); + ::memcpy(buffer + 4U, m_id, 4U); + + return write(buffer, 8U); +} + +bool CDMRDirectNetwork::writeAuthorisation() +{ + size_t size = m_password.size(); + + unsigned char* in = new unsigned char[size + sizeof(uint32_t)]; + ::memcpy(in, m_salt, sizeof(uint32_t)); + for (size_t i = 0U; i < size; i++) + in[i + sizeof(uint32_t)] = m_password.at(i); + + unsigned char out[40U]; + ::memcpy(out + 0U, "RPTK", 4U); + ::memcpy(out + 4U, m_id, 4U); + + CSHA256 sha256; + sha256.buffer(in, (unsigned int)(size + sizeof(uint32_t)), out + 8U); + + delete[] in; + + return write(out, 40U); +} + +bool CDMRDirectNetwork::writeOptions() +{ + char buffer[300U]; + + ::memcpy(buffer + 0U, "RPTO", 4U); + ::memcpy(buffer + 4U, m_id, 4U); + ::strcpy(buffer + 8U, m_options.c_str()); + + return write((unsigned char*)buffer, (unsigned int)m_options.length() + 8U); +} + +bool CDMRDirectNetwork::writeConfig() +{ + const char* software; + char slots = '0'; + if (m_duplex) { + if (m_slot1 && m_slot2) + slots = '3'; + else if (m_slot1 && !m_slot2) + slots = '1'; + else if (!m_slot1 && m_slot2) + slots = '2'; + + switch (m_hwType) { + case HWT_MMDVM: + software = "MMDVM"; + break; + case HWT_MMDVM_HS: + software = "MMDVM_MMDVM_HS"; + break; + case HWT_MMDVM_HS_DUAL_HAT: + software = "MMDVM_MMDVM_HS_Dual_Hat"; + break; + case HWT_NANO_HOTSPOT: + software = "MMDVM_Nano_hotSPOT"; + break; + default: + software = "MMDVM_Unknown"; + break; + } + } else { + slots = '4'; + + switch (m_hwType) { + case HWT_MMDVM: + software = "MMDVM_DMO"; + break; + case HWT_DVMEGA: + software = "MMDVM_DVMega"; + break; + case HWT_MMDVM_ZUMSPOT: + software = "MMDVM_ZUMspot"; + break; + case HWT_MMDVM_HS_HAT: + software = "MMDVM_MMDVM_HS_Hat"; + break; + case HWT_MMDVM_HS_DUAL_HAT: + software = "MMDVM_MMDVM_HS_Dual_Hat"; + break; + case HWT_NANO_HOTSPOT: + software = "MMDVM_Nano_hotSPOT"; + break; + case HWT_NANO_DV: + software = "MMDVM_Nano_DV"; + break; + case HWT_D2RG_MMDVM_HS: + software = "MMDVM_D2RG_MMDVM_HS"; + break; + case HWT_MMDVM_HS: + software = "MMDVM_MMDVM_HS"; + break; + default: + software = "MMDVM_Unknown"; + break; + } + } + + char buffer[400U]; + + ::memcpy(buffer + 0U, "RPTC", 4U); + ::memcpy(buffer + 4U, m_id, 4U); + + char latitude[20U]; + ::sprintf(latitude, "%08f", m_latitude); + + char longitude[20U]; + ::sprintf(longitude, "%09f", m_longitude); + + unsigned int power = m_power; + if (power > 99U) + power = 99U; + + int height = m_height; + if (height > 999) + height = 999; + + ::sprintf(buffer + 8U, "%-8.8s%09u%09u%02u%02u%8.8s%9.9s%03d%-20.20s%-19.19s%c%-124.124s%-40.40s%-40.40s", m_callsign.c_str(), + m_rxFrequency, m_txFrequency, power, m_colorCode, latitude, longitude, height, m_location.c_str(), + m_description.c_str(), slots, m_url.c_str(), m_version, software); + + return write((unsigned char*)buffer, 302U); +} + +bool CDMRDirectNetwork::writePing() +{ + unsigned char buffer[11U]; + + ::memcpy(buffer + 0U, "RPTPING", 7U); + ::memcpy(buffer + 7U, m_id, 4U); + + return write(buffer, 11U); +} + +bool CDMRDirectNetwork::wantsBeacon() +{ + bool beacon = m_beacon; + + m_beacon = false; + + return beacon; +} + +bool CDMRDirectNetwork::write(const unsigned char* data, unsigned int length) +{ + assert(data != NULL); + assert(length > 0U); + + if (m_debug) + CUtils::dump(1U, "DMR Network Transmitted", data, length); + + bool ret = m_socket.write(data, length, m_addr, m_addrLen); + if (!ret) { + LogError("DMR, Socket has failed when writing data to the master, retrying connection"); + close(false); + open(); + return false; + } + + return true; +} diff --git a/DMRDirectNetwork.h b/DMRDirectNetwork.h new file mode 100644 index 000000000..5d6a9598f --- /dev/null +++ b/DMRDirectNetwork.h @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(DMRDirectNetwork_H) +#define DMRDirectNetwork_H + +#include "DMRNetwork.h" +#include "UDPSocket.h" +#include "Timer.h" +#include "RingBuffer.h" +#include "DMRData.h" + +#include +#include +#include + +class CDMRDirectNetwork : public IDMRNetwork +{ +public: + CDMRDirectNetwork(const std::string& remoteAddress, unsigned short remotePort, const std::string& localAddress, unsigned short localPort, unsigned int id, const std::string& password, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug); + virtual ~CDMRDirectNetwork(); + + virtual void setOptions(const std::string& options); + + virtual void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url); + + virtual bool open(); + + virtual void enable(bool enabled); + + virtual bool read(CDMRData& data); + + virtual bool write(const CDMRData& data); + + virtual bool writeRadioPosition(unsigned int id, const unsigned char* data); + + virtual bool writeTalkerAlias(unsigned int id, unsigned char type, const unsigned char* data); + + virtual bool wantsBeacon(); + + virtual void clock(unsigned int ms); + + virtual bool isConnected() const; + + virtual void close(bool sayGoodbye); + +private: + std::string m_address; + unsigned short m_port; + sockaddr_storage m_addr; + unsigned int m_addrLen; + uint8_t* m_id; + std::string m_password; + bool m_duplex; + const char* m_version; + bool m_debug; + CUDPSocket m_socket; + bool m_enabled; + bool m_slot1; + bool m_slot2; + HW_TYPE m_hwType; + + enum STATUS { + WAITING_CONNECT, + WAITING_LOGIN, + WAITING_AUTHORISATION, + WAITING_CONFIG, + WAITING_OPTIONS, + RUNNING + }; + + STATUS m_status; + CTimer m_retryTimer; + CTimer m_timeoutTimer; + unsigned char* m_buffer; + uint32_t* m_streamId; + unsigned char* m_salt; + + CRingBuffer m_rxData; + + std::string m_options; + + std::mt19937 m_random; + std::string m_callsign; + unsigned int m_rxFrequency; + unsigned int m_txFrequency; + unsigned int m_power; + unsigned int m_colorCode; + float m_latitude; + float m_longitude; + int m_height; + std::string m_location; + std::string m_description; + std::string m_url; + bool m_beacon; + + bool writeLogin(); + bool writeAuthorisation(); + bool writeOptions(); + bool writeConfig(); + bool writePing(); + + bool write(const unsigned char* data, unsigned int length); +}; + +#endif diff --git a/DMREMB.cpp b/DMREMB.cpp index f60c7be9d..7b62cbae3 100644 --- a/DMREMB.cpp +++ b/DMREMB.cpp @@ -44,11 +44,11 @@ void CDMREMB::putData(const unsigned char* data) DMREMB[1U] = (data[18U] << 4) & 0xF0U; DMREMB[1U] |= (data[19U] >> 4) & 0x0FU; - CQR1676::decode(DMREMB); + unsigned char code = CQR1676::decode(DMREMB); - m_colorCode = (DMREMB[0U] >> 4) & 0x0FU; - m_PI = (DMREMB[0U] & 0x08U) == 0x08U; - m_LCSS = (DMREMB[0U] >> 1) & 0x03U; + m_colorCode = (code >> 4) & 0x0FU; + m_PI = (code & 0x08U) == 0x08U; + m_LCSS = (code >> 1) & 0x03U; } void CDMREMB::getData(unsigned char* data) const diff --git a/DMRGatewayNetwork.cpp b/DMRGatewayNetwork.cpp new file mode 100644 index 000000000..5dd55b51c --- /dev/null +++ b/DMRGatewayNetwork.cpp @@ -0,0 +1,450 @@ +/* + * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "DMRGatewayNetwork.h" + +#include "Utils.h" +#include "Log.h" + +#include +#include +#include +#include + +const unsigned int BUFFER_LENGTH = 500U; + +const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; + + +CDMRGatewayNetwork::CDMRGatewayNetwork(const std::string& address, unsigned short port, const std::string& localAddress, unsigned short localPort, unsigned int id, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug) : +m_addressStr(address), +m_addr(), +m_addrLen(0U), +m_port(port), +m_id(NULL), +m_duplex(duplex), +m_version(version), +m_debug(debug), +m_socket(localAddress, localPort), +m_enabled(false), +m_slot1(slot1), +m_slot2(slot2), +m_hwType(hwType), +m_buffer(NULL), +m_streamId(NULL), +m_rxData(1000U, "DMR Network"), +m_beacon(false), +m_random(), +m_callsign(), +m_rxFrequency(0U), +m_txFrequency(0U), +m_power(0U), +m_colorCode(0U), +m_pingTimer(1000U, 10U) +{ + assert(!address.empty()); + assert(port > 0U); + assert(id > 1000U); + + if (CUDPSocket::lookup(m_addressStr, m_port, m_addr, m_addrLen) != 0) + m_addrLen = 0U; + + m_buffer = new unsigned char[BUFFER_LENGTH]; + m_id = new uint8_t[4U]; + m_streamId = new uint32_t[2U]; + + m_id[0U] = id >> 24; + m_id[1U] = id >> 16; + m_id[2U] = id >> 8; + m_id[3U] = id >> 0; + + std::random_device rd; + std::mt19937 mt(rd()); + m_random = mt; + + std::uniform_int_distribution dist(0x00000001, 0xfffffffe); + m_streamId[0U] = dist(m_random); + m_streamId[1U] = dist(m_random); +} + +CDMRGatewayNetwork::~CDMRGatewayNetwork() +{ + delete[] m_buffer; + delete[] m_streamId; + delete[] m_id; +} + +void CDMRGatewayNetwork::setConfig(const std::string & callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url) +{ + m_callsign = callsign; + m_rxFrequency = rxFrequency; + m_txFrequency = txFrequency; + m_power = power; + m_colorCode = colorCode; +} + +void CDMRGatewayNetwork::setOptions(const std::string& options) +{ +} + +bool CDMRGatewayNetwork::open() +{ + if (m_addrLen == 0U) { + LogError("Unable to resolve the address of the DMR Network"); + return false; + } + + LogMessage("DMR, Opening DMR Network"); + + bool ret = m_socket.open(m_addr); + if (ret) + m_pingTimer.start(); + + return ret; +} + +void CDMRGatewayNetwork::enable(bool enabled) +{ + if (!enabled && m_enabled) + m_rxData.clear(); + + m_enabled = enabled; +} + +bool CDMRGatewayNetwork::read(CDMRData& data) +{ + if (m_rxData.isEmpty()) + return false; + + unsigned char length = 0U; + m_rxData.getData(&length, 1U); + m_rxData.getData(m_buffer, length); + + // Is this a data packet? + if (::memcmp(m_buffer, "DMRD", 4U) != 0) + return false; + + unsigned char seqNo = m_buffer[4U]; + + unsigned int srcId = (m_buffer[5U] << 16) | (m_buffer[6U] << 8) | (m_buffer[7U] << 0); + + unsigned int dstId = (m_buffer[8U] << 16) | (m_buffer[9U] << 8) | (m_buffer[10U] << 0); + + unsigned int slotNo = (m_buffer[15U] & 0x80U) == 0x80U ? 2U : 1U; + + // DMO mode slot disabling + if (slotNo == 1U && !m_duplex) + return false; + + // Individual slot disabling + if (slotNo == 1U && !m_slot1) + return false; + if (slotNo == 2U && !m_slot2) + return false; + + FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO_USER_USER : FLCO_GROUP; + + data.setSeqNo(seqNo); + data.setSlotNo(slotNo); + data.setSrcId(srcId); + data.setDstId(dstId); + data.setFLCO(flco); + + bool dataSync = (m_buffer[15U] & 0x20U) == 0x20U; + bool voiceSync = (m_buffer[15U] & 0x10U) == 0x10U; + + if (dataSync) { + unsigned char dataType = m_buffer[15U] & 0x0FU; + data.setData(m_buffer + 20U); + data.setDataType(dataType); + data.setN(0U); + } else if (voiceSync) { + data.setData(m_buffer + 20U); + data.setDataType(DT_VOICE_SYNC); + data.setN(0U); + } else { + unsigned char n = m_buffer[15U] & 0x0FU; + data.setData(m_buffer + 20U); + data.setDataType(DT_VOICE); + data.setN(n); + } + + return true; +} + +bool CDMRGatewayNetwork::write(const CDMRData& data) +{ + unsigned char buffer[HOMEBREW_DATA_PACKET_LENGTH]; + ::memset(buffer, 0x00U, HOMEBREW_DATA_PACKET_LENGTH); + + buffer[0U] = 'D'; + buffer[1U] = 'M'; + buffer[2U] = 'R'; + buffer[3U] = 'D'; + + unsigned int srcId = data.getSrcId(); + buffer[5U] = srcId >> 16; + buffer[6U] = srcId >> 8; + buffer[7U] = srcId >> 0; + + unsigned int dstId = data.getDstId(); + buffer[8U] = dstId >> 16; + buffer[9U] = dstId >> 8; + buffer[10U] = dstId >> 0; + + ::memcpy(buffer + 11U, m_id, 4U); + + unsigned int slotNo = data.getSlotNo(); + + // Individual slot disabling + if (slotNo == 1U && !m_slot1) + return false; + if (slotNo == 2U && !m_slot2) + return false; + + buffer[15U] = slotNo == 1U ? 0x00U : 0x80U; + + FLCO flco = data.getFLCO(); + buffer[15U] |= flco == FLCO_GROUP ? 0x00U : 0x40U; + + unsigned int slotIndex = slotNo - 1U; + + std::uniform_int_distribution dist(0x00000001, 0xfffffffe); + unsigned char dataType = data.getDataType(); + if (dataType == DT_VOICE_SYNC) { + buffer[15U] |= 0x10U; + } else if (dataType == DT_VOICE) { + buffer[15U] |= data.getN(); + } else { + if (dataType == DT_VOICE_LC_HEADER) + m_streamId[slotIndex] = dist(m_random); + + if (dataType == DT_CSBK || dataType == DT_DATA_HEADER) + m_streamId[slotIndex] = dist(m_random); + + buffer[15U] |= (0x20U | dataType); + } + + buffer[4U] = data.getSeqNo(); + + ::memcpy(buffer + 16U, m_streamId + slotIndex, 4U); + + data.getData(buffer + 20U); + + buffer[53U] = data.getBER(); + + buffer[54U] = data.getRSSI(); + + write(buffer, HOMEBREW_DATA_PACKET_LENGTH); + + return true; +} + +bool CDMRGatewayNetwork::writeRadioPosition(unsigned int id, const unsigned char* data) +{ + unsigned char buffer[20U]; + + ::memcpy(buffer + 0U, "DMRG", 4U); + + buffer[4U] = id >> 16; + buffer[5U] = id >> 8; + buffer[6U] = id >> 0; + + ::memcpy(buffer + 7U, data + 2U, 7U); + + return write(buffer, 14U); +} + +bool CDMRGatewayNetwork::writeTalkerAlias(unsigned int id, unsigned char type, const unsigned char* data) +{ + unsigned char buffer[20U]; + + ::memcpy(buffer + 0U, "DMRA", 4U); + + buffer[4U] = id >> 16; + buffer[5U] = id >> 8; + buffer[6U] = id >> 0; + + buffer[7U] = type; + + ::memcpy(buffer + 8U, data + 2U, 7U); + + return write(buffer, 15U); +} + +bool CDMRGatewayNetwork::isConnected() const +{ + return (m_addrLen != 0); +} + +void CDMRGatewayNetwork::close(bool sayGoodbye) +{ + LogMessage("DMR, Closing DMR Network"); + + m_socket.close(); +} + +void CDMRGatewayNetwork::clock(unsigned int ms) +{ + m_pingTimer.clock(ms); + if (m_pingTimer.isRunning() && m_pingTimer.hasExpired()) { + writeConfig(); + m_pingTimer.start(); + } + + sockaddr_storage address; + unsigned int addrLen; + int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, addrLen); + if (length <= 0) + return; + + if (!CUDPSocket::match(m_addr, address)) { + LogMessage("DMR, packet received from an invalid source"); + return; + } + + if (m_debug) + CUtils::dump(1U, "DMR Network Received", m_buffer, length); + + if (::memcmp(m_buffer, "DMRD", 4U) == 0) { + if (m_enabled) { + unsigned char len = length; + m_rxData.addData(&len, 1U); + m_rxData.addData(m_buffer, len); + } + } else if (::memcmp(m_buffer, "DMRP", 4U) == 0) { + ; + } else if (::memcmp(m_buffer, "DMRB", 4U) == 0) { + m_beacon = true; + } else { + CUtils::dump("DMR, unknown packet from the DMR Network", m_buffer, length); + } +} + +bool CDMRGatewayNetwork::writeConfig() +{ + const char* software; + char slots = '0'; + if (m_duplex) { + if (m_slot1 && m_slot2) + slots = '3'; + else if (m_slot1 && !m_slot2) + slots = '1'; + else if (!m_slot1 && m_slot2) + slots = '2'; + + switch (m_hwType) { + case HWT_MMDVM: + software = "MMDVM"; + break; + case HWT_MMDVM_HS: + software = "MMDVM_MMDVM_HS"; + break; + case HWT_MMDVM_HS_DUAL_HAT: + software = "MMDVM_MMDVM_HS_Dual_Hat"; + break; + case HWT_NANO_HOTSPOT: + software = "MMDVM_Nano_hotSPOT"; + break; + default: + software = "MMDVM_Unknown"; + break; + } + } else { + slots = '4'; + + switch (m_hwType) { + case HWT_MMDVM: + software = "MMDVM_DMO"; + break; + case HWT_DVMEGA: + software = "MMDVM_DVMega"; + break; + case HWT_MMDVM_ZUMSPOT: + software = "MMDVM_ZUMspot"; + break; + case HWT_MMDVM_HS_HAT: + software = "MMDVM_MMDVM_HS_Hat"; + break; + case HWT_MMDVM_HS_DUAL_HAT: + software = "MMDVM_MMDVM_HS_Dual_Hat"; + break; + case HWT_NANO_HOTSPOT: + software = "MMDVM_Nano_hotSPOT"; + break; + case HWT_NANO_DV: + software = "MMDVM_Nano_DV"; + break; + case HWT_D2RG_MMDVM_HS: + software = "MMDVM_D2RG_MMDVM_HS"; + break; + case HWT_MMDVM_HS: + software = "MMDVM_MMDVM_HS"; + break; + case HWT_OPENGD77_HS: + software = "MMDVM_OpenGD77_HS"; + break; + case HWT_SKYBRIDGE: + software = "MMDVM_SkyBridge"; + break; + default: + software = "MMDVM_Unknown"; + break; + } + } + + unsigned int power = m_power; + if (power > 99U) + power = 99U; + + char buffer[150U]; + + ::memcpy(buffer + 0U, "DMRC", 4U); + ::memcpy(buffer + 4U, m_id, 4U); + ::sprintf(buffer + 8U, "%-8.8s%09u%09u%02u%02u%c%-40.40s%-40.40s", + m_callsign.c_str(), m_rxFrequency, m_txFrequency, power, m_colorCode, slots, m_version, + software); + + return write((unsigned char*)buffer, 119U); +} + +bool CDMRGatewayNetwork::wantsBeacon() +{ + bool beacon = m_beacon; + + m_beacon = false; + + return beacon; +} + +bool CDMRGatewayNetwork::write(const unsigned char* data, unsigned int length) +{ + assert(data != NULL); + assert(length > 0U); + + if (m_debug) + CUtils::dump(1U, "DMR Network Transmitted", data, length); + + bool ret = m_socket.write(data, length, m_addr, m_addrLen); + if (!ret) { + LogError("DMR, socket error when writing to the DMR Network"); + return false; + } + + return true; +} diff --git a/DMRGatewayNetwork.h b/DMRGatewayNetwork.h new file mode 100644 index 000000000..160dc5102 --- /dev/null +++ b/DMRGatewayNetwork.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(DMRGatewayNetwork_H) +#define DMRGatewayNetwork_H + +#include "DMRNetwork.h" +#include "UDPSocket.h" +#include "Timer.h" +#include "RingBuffer.h" +#include "DMRData.h" +#include "Defines.h" + +#include +#include +#include + +class CDMRGatewayNetwork : public IDMRNetwork +{ +public: + CDMRGatewayNetwork(const std::string& remoteAddress, unsigned short remotePort, const std::string& localAddress, unsigned short localPort, unsigned int id, bool duplex, const char* version, bool slot1, bool slot2, HW_TYPE hwType, bool debug); + virtual ~CDMRGatewayNetwork(); + + virtual void setOptions(const std::string& options); + + virtual void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url); + + virtual bool open(); + + virtual void enable(bool enabled); + + virtual bool read(CDMRData& data); + + virtual bool write(const CDMRData& data); + + virtual bool writeRadioPosition(unsigned int id, const unsigned char* data); + + virtual bool writeTalkerAlias(unsigned int id, unsigned char type, const unsigned char* data); + + virtual bool wantsBeacon(); + + virtual void clock(unsigned int ms); + + virtual bool isConnected() const; + + virtual void close(bool sayGoodbye); + +private: + std::string m_addressStr; + sockaddr_storage m_addr; + unsigned int m_addrLen; + unsigned short m_port; + uint8_t* m_id; + bool m_duplex; + const char* m_version; + bool m_debug; + CUDPSocket m_socket; + bool m_enabled; + bool m_slot1; + bool m_slot2; + HW_TYPE m_hwType; + unsigned char* m_buffer; + uint32_t* m_streamId; + CRingBuffer m_rxData; + bool m_beacon; + std::mt19937 m_random; + std::string m_callsign; + unsigned int m_rxFrequency; + unsigned int m_txFrequency; + unsigned int m_power; + unsigned int m_colorCode; + CTimer m_pingTimer; + + bool writeConfig(); + + bool write(const unsigned char* data, unsigned int length); +}; + +#endif diff --git a/DMRIds.dat b/DMRIds.dat index 0b9cac995..b3b01b17f 100644 --- a/DMRIds.dat +++ b/DMRIds.dat @@ -1,8 +1,6 @@ 1023001 VE3THW Wayne 1023002 VA3ECM Mathieu 1023003 VE3QC Guy -1023004 VE3LDY Louella -1023005 VE3JFN Jeffrey 1023006 VA3UZ Allan 1023007 VA3BOC Hans 1023008 VE3JMR @@ -17,7 +15,6 @@ 1023019 VA3BTQ Jacqualine 1023020 VE3ZXN Denis 1023021 VE3ZXN Denis -1023022 VE3EM Don 1023023 VA3TDG Douglas 1023024 VA3MRJ David 1023025 VA3ZDX Gregory @@ -37,8 +34,6 @@ 1023039 VA3API Kevin 1023040 VA3GCB George 1023041 VE3CSB David -1023042 VE3BB John -1023043 VE3BB John 1023044 VE3MTS Frederick 1023045 VE3EUK Ralph 1023046 VE3OVO John @@ -49,7 +44,6 @@ 1023051 VE3DCC Richard 1023052 VA3FNI Aaron 1023053 VE3SJV John -1023054 VE3FAH Rod 1023055 VA3HT Teddy 1023056 VE3DLH Kevin 1023057 VA3AGX Richard @@ -62,7 +56,6 @@ 1023064 VA3CQB Stephen 1023065 VE3OTL Brent 1023066 VA3RHW Norman -1023067 VE3LGD Lawrence 1023068 VE3RBO Ruth 1023069 VE3LJL Luc 1023070 VA3GHI Bogdan @@ -98,7 +91,6 @@ 1023106 VE3BRA Bowmanville 1023107 VE3KLY Erin 1023108 VE3RJ Rolland -1023109 VA3KHS Haksoo 1023110 VA3EMG Eugene 1023111 VA3CEF Greg 1023112 VE3SJU Brian @@ -116,7 +108,6 @@ 1023125 VE3ADS Doug 1023126 VA3DUQ Lee 1023127 VE3RIX -1023128 VA3RDO Mark 1023129 VE3TAV Brandon 1023130 VE3KR Klaus 1023131 VE3WBE Ronald @@ -146,10 +137,8 @@ 1023156 VE3IPC Michael 1023157 VE3GPF Fernand-Pierre 1023158 VA3JXP Paulo -1023159 VE3NPI Gilles 1023160 VE3ZTZ S 1023161 VA3XY Scott -1023162 VA3BNR Luc 1023163 VA3BGW Brad 1023164 VE3NV Harrison 1023165 VE3TTT Sort @@ -170,7 +159,6 @@ 1023184 VA3YSN Mark 1023185 VE3TWM Tracy 1023186 VE3RZU Rudolph -1023187 VE3NPI Gilles 1023188 VE3ZC Rob 1023189 VA3MYL Michel 1023190 VA3JHQ Jacob @@ -195,7 +183,6 @@ 1023216 VE3ISD Charles 1023217 VA3OJT Les 1023218 VE3NUE David -1106001 KK6YLW Robert 1106002 K6FED Frank 1106003 K6IJ Frederic 1106004 N7BAR Raul @@ -248,7 +235,7 @@ 1106052 KR6BZ Lewis 1106053 KM6DAC Cameron 1106054 K6SCC Brian -1106055 KF6MSK +1106055 KF6MSK Patrick 1106056 K6PWR Robert 1106057 W6ZM William 1106058 KD6FIL David @@ -332,8 +319,6 @@ 1106138 AA6PP Antonis 1106139 N6RAW Raul 1106140 KC6YYM David -1106141 KM6ASJ James -1106142 KM6ASJ James 1106144 KC6UHM Betsy 1106145 KN6CZ Uktaylor 1106146 KM6DSO Jason @@ -384,14 +369,13 @@ 1106191 KK6FBN Vadym 1106192 AD1U Angel 1106193 KG6QDI Alberto -1106194 KF6MSK +1106194 KF6MSK Patrick 1106195 K6PKL William 1106196 N2TAX David 1106197 KA6PNL Edwin 1106198 KM6CNU Eric 1106199 N6CAV Craig 1106200 W6YJ Ed -1106201 KK6YLW Robert 1106202 W6IRC Sam 1106203 KG6PHK George 1106204 WA6KBP Mark @@ -401,7 +385,7 @@ 1106209 KF6ZKL Jerald 1106210 KJ6OUG Christopher 1106211 KI6VIN Michael -1106212 W6VVM Michael +1106212 W6VVM David 1106213 AB6IS Rudy 1106214 W2GMD Greg 1106215 KM6AYR Kellianne @@ -501,7 +485,7 @@ 1106309 KK6MTG Michael 1106310 K6RJF Robert 1106311 KM6FRL Richard -1106312 KB6BOB Donald +1106312 KB6BOB Don 1106313 W6NEV Marty 1106314 AA6IT Walter 1106315 WQ1K David @@ -586,7 +570,6 @@ 1106395 K6GRH Gwendolyn 1106396 KF6NTX Wilhelm 1106397 KK6GSI Joseph -1106398 KM6JEE Keith 1106399 KW5X Hugh 1106400 KM6AR Ruben 1106401 KM6JOP Hiva @@ -645,7 +628,7 @@ 1106455 KE6IIB George 1106456 N1PDN Paul 1106457 N2BJC Brendan -1106458 KG6QEJ Joel +1106458 KG6QEJ Justin 1106459 KK6PE Phil 1106460 KM6JCL Joshua 1106461 KI6IWK Dick @@ -667,7 +650,7 @@ 1106477 K6JUN Joseph 1106478 AK6RF Matthew 1106479 KK6MTG Michael -1106480 N6KDT Kenneth +1106480 N6KEN Kenneth 1106481 KC2GNV Brian 1106482 KZ6B Alan 1106483 KK6HVT Robert @@ -698,7 +681,7 @@ 1106509 N6KAO Joe 1106510 KB6SUP Jeff 1106511 KJ6K John -1106512 KF7VE William +1106512 AC6SP William 1106513 W6DAF David 1106514 KK6AYK Gregory 1106515 W6RIP Kevin @@ -756,7 +739,7 @@ 1106568 K6VNY Mark 1106569 WA6ECH Peter 1106570 KM6KVF Marty -1106571 N6ASM Arnold +1106571 N6AY Arnold 1106572 AI6OU David 1106573 KK6WJA John 1106574 KN6OE David @@ -772,10 +755,9 @@ 1106584 K5CAW Charles 1106585 KE6JPM Peter 1106586 KJ6EZY Terry -1106587 KM6IRY Vincent 1106588 W6FRQ James 1106589 N6MSY Pierrot -1106590 K8DLL D +1106590 K8DLL 1106591 KD6KOI Michael 1106592 KJ6YRS Graydon 1106593 KM6BEI Tammy @@ -792,7 +774,6 @@ 1106604 AF6JA Alfred 1106605 AB6UI William 1106606 KM6LDA Sun -1106608 KK6KD Jorge 1106609 KF6TRU Ronald 1106610 KJ6LNX David 1106611 K1BOY Jaturong @@ -807,7 +788,7 @@ 1106620 WN6LNZ Murray 1106622 KF6CQT Bruce 1106623 WB6PQM Scott -1106624 K6TZ SBARC +1106624 K6TZ 1106625 K6MA Terence 1106626 K6UDA Robert 1106627 KM6IDA James @@ -816,7 +797,6 @@ 1106631 KM6BEH Dakota 1106632 KM6BEJ Joseph 1106633 KF6OVV Ramon -1106634 AG9J Yodsapon 1106635 AG9J Yodsapon 1106636 KM6ITB Zach 1106637 KI6OZK Mariano @@ -855,7 +835,6 @@ 1106673 KK6ORZ Timothy 1106674 KM6YYZ Henry 1106675 KB6WSD Randy -1106676 KM6IRY Vincent 1106679 WA2KWR Frank 1106680 W6PAW Carson 1106681 AG6ST Ron @@ -871,7 +850,7 @@ 1106691 N6CU Sandra 1106692 AE6SH Thomas 1106693 K9KBX James -1106694 N6ASM Arnold +1106694 N6AY Arnold 1106695 KK6YYZ Theo 1106696 KJ6YWW Timothy 1106697 K6ATW Scott @@ -893,7 +872,6 @@ 1106714 KM6KIP Gael 1106715 KB6ZYJ Scott 1106716 KJ6RWB Joshua -1106717 W6IPS John 1106718 KG7EOA Michael 1106719 KG7EOA Michael 1106721 KJ6SGF Alan @@ -904,7 +882,7 @@ 1106727 KF6WSH Jack 1106728 N6CAL Lee 1106729 KK6KD Jorge -1106730 KE6NFO Dohyun +1106730 KE6NFO Calvin 1106731 W6COP Steven 1106732 AB6BN Cesar 1106733 K6ZZO Mark @@ -1002,7 +980,7 @@ 1106838 KM6CBO Brent 1106839 AB6IS Rudy 1106840 AB9A Clay -1106842 K6ERC Eric +1106842 N6HX Eric 1106843 K6DSO Dorothy 1106844 N2BMW Bobby 1106845 K6JFE James @@ -1060,7 +1038,6 @@ 1106901 KC6UEO Luis 1106902 KF5DFW James 1106903 KI6FXY Charles -1106904 KI6WMS Rolf 1106905 KM6AHP Cameron 1106906 KK6TEW Todd 1106907 WL7COO Sjv @@ -1078,7 +1055,6 @@ 1106919 KF6KXG Michael 1106920 AI6ME Allie 1106921 N0XXX Jim -1106922 W6MW Mark 1106923 KM6ERG Joseph 1106924 AE6GR Gene 1106925 WA6FEQ Jeremy @@ -1101,10 +1077,8 @@ 1106942 K6BLH Brandon 1106943 WE6ER Dale 1106944 KM6SP Steven -1106945 KJ6CZS Steve 1106946 W6YW Young 1106947 KM6NC -1106948 KJ6CZS Steve 1106949 W6TUX David 1106950 KC6GMI Anthony 1106951 KE6HHM Thomas @@ -1136,7 +1110,6 @@ 1106980 AA6JA John 1106981 K9DOJ Richard 1106983 N0XXX Jim -1106985 AK6EJ Eugene 1106986 KK6TXG Brian 1106987 KK6CUL Brian 1106988 KM6LMP Lance @@ -1144,7 +1117,6 @@ 1106991 N5LFU Dane 1106992 W6TTM Tony 1106993 KM6MSY Joel -1106994 K6ET Jay 1106995 KE6TVM Douglas 1106996 KI6SJB Thomas 1106997 KB6DXN James @@ -1200,7 +1172,6 @@ 1107051 KJ6DXT Terry 1107053 KM6MYD Katalin 1107054 WB6PIH Barbara -1107055 KM6BNR Kyle 1107056 KM6MIZ Reginald 1107057 AI6ZA Patrick 1107058 W9TFD John @@ -1225,7 +1196,6 @@ 1107077 WA6HXG Ryan 1107078 AD6DM Dennis 1107079 KK6IKW Juan -1107080 W6BSD Fred 1107081 KK6PVU 1107082 K6YUA Steve 1107083 K6CTX Robert @@ -1233,7 +1203,7 @@ 1107085 AI6GP Raphael 1107086 KE6UCX John 1107087 KK6TEM Woohyung -1107088 KF7VE William +1107088 AC6SP William 1107089 KC6ESW Michael 1107090 NI6S Edward 1107091 KM6CSP Douglas @@ -1308,7 +1278,6 @@ 1107165 KB6MYR Krista 1107166 N3QG Samuel 1107167 AE6HD -1107168 KD6ELK Fred 1107170 WB6ZNK Harold 1107171 KB6MYR Krista 1107173 KM6IRZ John @@ -1317,7 +1286,7 @@ 1107176 WD4VE David 1107177 W6AXM Gardner 1107178 KG6HRE Roland -1107179 KM6NAP Vincent +1107179 KM2W Vincent 1107180 N6TBX Oscar 1107182 WE6R Keith 1107183 KU6L Edwin @@ -1326,8 +1295,6 @@ 1107186 KM6IDX Paul 1107187 KE6BXT Donald 1107188 W6AKB Alan -1107189 AC6OT Salvador -1107190 N5PSM David 1107191 KE6BXT Donald 1107192 AF6AQ James 1107193 N6GYY Charles @@ -1343,7 +1310,6 @@ 1107203 KJ6SCG Ronald 1107204 N6ORB David 1107205 WG6R Harry -1107206 N5PSM David 1107207 KM6ACJ David 1107208 AE6RD David 1107209 KK6DF David @@ -1363,7 +1329,7 @@ 1107223 KE6LEV Marcus 1107224 KK6CUG Jeffry 1107225 AE6KH Bonifacio -1107227 KM6NAP Vincent +1107227 KM2W Vincent 1107228 KM6LYU Willaim 1107229 KC6CQD Dennis 1107230 K6BEC Rebecca @@ -1379,7 +1345,6 @@ 1107240 KD6KDY Rose 1107241 N6UTX Bob 1107242 KK6GST Arturo -1107243 KB5LCR Nancy 1107244 K6RIN Ronald 1107245 K6RIN Ronald 1107247 W1REI Rei @@ -1424,7 +1389,6 @@ 1107289 KI6LKD Ray 1107290 N6TCE Robert 1107292 AF6GX Wayne -1107293 KM6JEE Keith 1107294 K6VE Richard 1107296 KJ6PWV Julie 1107297 KJ6VGW Cvarc @@ -1452,6 +1416,7 @@ 1107323 W6JMJ Jose 1107324 AG6XL Richard 1107325 W6ESD Elvin +1107326 W9ZZ Jonas 1107327 K6ODS Eric 1107328 KK6VJH David 1107329 KD6JBL Gerald @@ -1472,14 +1437,13 @@ 1107347 KF6UKH Abe 1107349 KC6YBV Paul 1107350 WQ6I Moody -1107351 KU9COR Randy 1107352 W6EDX Edison 1107353 N1VLA Alvin 1107354 N0DBL Don 1107355 K6LPS Lernel 1107356 K6KBM Larry 1107357 KK6KXE Cesar -1107358 KC6RZY Steven +1107358 KC6RZY Steve 1107359 KN6UP Allen 1107360 K6TS Duane 1107362 N1VLA Alvin @@ -1492,7 +1456,7 @@ 1107369 KK6TSB Kenton 1107370 KK6TSB Kenton 1107371 KK6QEE Erick -1107372 AK6BR Peter +1107372 AK6PW Peter 1107373 WD6CDN Michael 1107374 WI6Y Roselito 1107375 W6ECB Eddie @@ -1512,13 +1476,11 @@ 1107390 N6DTE Travis 1107391 WW6JR Graciano 1107392 KI6AUK Ramon -1107393 WO6Y Eugene 1107394 K6RQV Michael 1107395 K6TTL Edward 1107396 WW6JR Graciano 1107397 KK6ZVQ John 1107398 AA6QP Rowel -1107399 KF6ITC Jose 1107400 WA6YOP Kenneth 1107401 AA6QP Rowel 1107402 W6ELI Eli @@ -1531,14 +1493,10 @@ 1107410 KG6SQN Gregory 1107411 KK6VYA Bill 1107413 K7ANQ Jerry -1107414 KM6KXS Orlando -1107415 KM6OHW Elizabeth 1107416 K6MNY Marianito 1107418 N6JCS John -1107419 K6RGR Robert 1107420 W6ZK Kenneth 1107421 K6DPY Daniel -1107422 KM6AVT Melissa 1107423 AD6KG Fabian 1107425 KM6NB Eric 1107426 KM6HIB Miguel @@ -1548,7 +1506,6 @@ 1107430 KI6GJV Montree 1107431 N6PET Pet 1107432 AG6VV Kenneth -1107433 KE6YEP Marcelino 1107434 KM6OKH Robert 1107435 KK6CZA James 1107436 KM6OKW Bruce @@ -1559,7 +1516,7 @@ 1107441 KK6TLN Gregory 1107442 N6NX Ken 1107443 KK6TNX Jennifer -1107444 KJ6SJY Daniel +1107444 KI6KU Daniel 1107445 KM6OKW Bruce 1107447 W6RIA Ria 1107448 KG6GCG Berj @@ -1595,7 +1552,7 @@ 1107484 KN6B Eduardo 1107485 N6MWA Ole 1107486 KJ6OOV Frederick -1107487 KF6OHN Thomas +1107487 KF6TAG Thomas 1107488 KJ6HBL Tyler 1107489 KJ6HBL Tyler 1107490 KD6RLA Cynthia @@ -1621,7 +1578,6 @@ 1107511 AF6GL Timothy 1107512 WB6YWL Alan 1107513 K6TPK Timothy -1107514 AI6ZE Joseph 1107515 W6AAJ James 1107516 AA6QX Antonio 1107517 KB6IXD Jon @@ -1691,7 +1647,7 @@ 1107588 KK6NVI Kerri 1107589 KM6OZI Donny 1107590 AD6KG Fabian -1107591 KM6JUW Lance +1107591 W6TVQ Lance 1107592 KD6CIO Ryan 1107593 KK6SFK Sean 1107596 KM6CIY Brett @@ -1745,7 +1701,7 @@ 1107644 KM6PNV Mike 1107645 K6LK William 1107646 KM6BDE Earle -1107647 N2QYF Scott +1107647 K6QYF Scott 1107648 W6TKD Jeremy 1107649 KM6ABF Scott 1107650 KE6HKP Chris @@ -1796,7 +1752,7 @@ 1107701 K6WHC Scott 1107702 KM6EXT Daniel 1107703 KM6PKW Durrell -1107704 N6ZOZ Edward +1107704 N6ZOZ Ned 1107705 KM6EXT Daniel 1107706 KG6PMW Cheryl 1107708 KK6EIW Gale @@ -1809,7 +1765,7 @@ 1107716 N6RLZ Robert 1107717 KM6OKZ Clement 1107718 KJ6MRG Brent -1107719 KK6DSN Ildefonso +1107719 W6BVI Ildefonso 1107720 N6VCW John 1107721 N6FLO Florentin 1107723 W6MJK Michael @@ -1836,7 +1792,7 @@ 1107748 KK6KCH Michael 1107749 KM6MHS David 1107750 KJ6BUA Christian -1107751 W6CX +1107751 W6CX Mt 1107752 K6JAB Jeff 1107753 KI6QWQ Barry 1107754 KE6HKP Chris @@ -1845,13 +1801,11 @@ 1107757 KF6S James 1107758 KI6NAZ Josh 1107759 KM6PKM Paul -1107760 KM6EOL Tamara 1107761 K0XYZ Satpal -1107762 KE6MTF Kirk 1107763 W6IW Richard 1107764 KC6NTV William 1107765 W6ALB Andrew -1107766 NS6Q Michael +1107766 NS6Q 1107767 K6ATV Walter 1107768 WB6YQT John 1107769 WA6MEM Gary @@ -1900,7 +1854,6 @@ 1107819 KJ5PA Ver 1107820 KM6POS James 1107821 KD6AJG Anthony -1107822 K6DUX Irving 1107823 KD6WQF Benjamin 1107824 KK6DPN Charles 1107825 KG6USN Karen @@ -1912,7 +1865,6 @@ 1107831 KC1CLR Matthew 1107832 KI6CSA Christopher 1107833 N6UG Birton -1107834 AF6FB Michael 1107836 KB6PLH Nathan 1107837 AJ6BE Adrian 1107838 N7PRT Paul @@ -1923,7 +1875,6 @@ 1107843 W6NIT Ron 1107844 KE6MON Bonifacio 1107845 KN6IQ Larry -1107846 KM6PTU Julian 1107847 N6MAC Miguel 1107848 KE6HEP Conrad 1107849 KI6UOV Richard @@ -1954,15 +1905,14 @@ 1107876 N6KEL Kel 1107877 KA6BFB David 1107878 W6ZDR Audie -1107879 KN6NK Nicholas -1107880 K6WST Wilfredo +1107880 K6WST Will 1107881 KJ6SZP Dale 1107882 N6VHF Neil 1107883 KF6LYF Steven 1107884 K6BP Bruce 1107885 N6DJI Douglas -1107886 K6WST Wilfredo -1107887 KM6QEB Daniel +1107886 K6WST Will +1107887 N6VET Daniel 1107888 KG6LVT Alex 1107889 K6CES Charles 1107890 AG6JA Gordon @@ -1983,19 +1933,16 @@ 1107906 AB8ET Alberto 1107907 KK6LDS Douglas 1107908 KM6PRC Rosa -1107909 KF6EKC Jose 1107910 W6LNT Mauricio 1107911 W6LNT Mauricio 1107913 W6ROD Rodney 1107914 KK6KUC Blaine 1107916 KJ6MFU Don 1107917 KK6YCS Franklin -1107918 KQ6A Shinichi 1107919 N6ITE Christopher 1107920 KE6JAY Jacob 1107921 KI6ZXU Larry 1107922 KJ6DDS Kevin -1107923 AC6OT Salvador 1107924 W6SMK Steven 1107925 KI6VFM Daniel 1107926 AK6Q Scott @@ -2013,7 +1960,6 @@ 1107941 KK6QIC Kris 1107942 WE6EE David 1107943 KM6QPK Peter -1107944 KF6EKC Jose 1107945 KG6URM Allen 1107946 K6WMH William 1107947 WB6OUJ David @@ -2026,7 +1972,6 @@ 1107954 K6VZK Glenn 1107955 KJ6DFN Cecelia 1107956 K6VZK Glenn -1107957 KE6MTF Kirk 1107958 W6CDA Chris 1107959 KG7SPS Michael 1107960 KI6UOV Richard @@ -2044,7 +1989,6 @@ 1107973 WA6TIP Curt 1107974 WA6TIP Curt 1107975 KM6QXE John -1107976 W6DVI Reynaldo 1107978 KK6KLU William 1107980 W6KPX Stewart 1107981 KA6DRE Andre @@ -2059,10 +2003,8 @@ 1107990 K6SEZ Wilson 1107991 K6GKM Grant 1107992 KI6FGQ Richard -1107993 W6HP William 1107994 KM6RCJ Arion 1107995 WB6ASQ Harry -1107996 NY6X James 1107997 KM6QCT Paula 1107998 K6GVW Gerald 1107999 KC6WPK Ernest @@ -2076,8 +2018,6 @@ 1108008 K0MGL Greg 1108009 N0AES Starr 1108010 N0ABC Dennis -1108011 KE0GLA Thomas -1108012 KE0GLA Thomas 1108013 N4SJW John 1108014 KD7MRJ Adam 1108015 KE0MCT Andrew @@ -2107,7 +2047,6 @@ 1108040 AA0FK Forrest 1108041 KB0RVE Jon 1108042 K0CVH Carol -1108043 N2MED John 1108044 KD0SSP Denver 1108045 W0EEL Duwayne 1108046 W0DSR Denise @@ -2147,16 +2086,16 @@ 1108081 KC0BID Johnny 1108082 KE0JWG Troy 1108083 KD0MRY Neil -1108084 KO6RM Jeremy +1108084 N0AW Jeremy 1108085 KD0MRY Neil -1108086 KO6RM Jeremy -1108087 W0RBF Ralph +1108086 N0AW Jeremy +1108087 AB0Z Ralph 1108088 KE0LLH Bradley 1108089 KE5LTG Kenneth 1108090 KE0GUZ Gary 1108091 KD0ZQH Kenneth 1108092 KB0PVB Edmund -1108093 W0FGG Curt +1108093 KC0VFO Curt 1108094 KC0JCC Joseph 1108095 KT0AM Mark 1108096 W4PRG Newell @@ -2169,8 +2108,7 @@ 1108103 KE0JYZ 1108104 W5WCA Wendell 1108105 KE0BBB David -1108106 W6BLO Jonathon -1108107 KC0CNI Patrick +1108107 KC0CNI Pat 1108108 KA0Z Anthony 1108109 KB0OCA James 1108110 KE0JBF Antonio @@ -2188,7 +2126,6 @@ 1108122 AF0W Bryan 1108123 KD4JCR Damon 1108124 KD0QVT Emma -1108125 W0DFU Dan 1108126 KE0CJY Sadiah 1108127 WN7ANT Everett 1108128 N0GLH Gleason @@ -2201,12 +2138,10 @@ 1108135 KE0HAO John 1108136 N0RVN Melissa 1108137 N0WLF Daniel -1108138 K1RMR Rick 1108139 KE0CNT Gene 1108140 KG4DNE David 1108141 KD0MFT Stephen 1108142 KG0HM Loren -1108143 N0DT Jeffrey 1108145 KE0HAO John 1108146 N0OUW Gerald 1108147 N6UA Douglas @@ -2271,7 +2206,6 @@ 1108216 K1KAD Kari 1108217 K0DNS Joseph 1108218 N0MKV Marco -1108219 KD0EXG George 1108220 KE0OET Andrew 1108221 W0GJT Michael 1108222 KD0UGQ Troy @@ -2285,8 +2219,7 @@ 1108231 KE0TWC Traci 1108232 KE0DAQ Michael 1108233 KE0NYR Dennis -1108234 N0JMC John -1108235 N0JMC John +1108235 ND5F John 1108236 KE0HIF Bradley 1108237 KE0OGQ Oli 1108238 KC0FVY Christopher @@ -2302,7 +2235,6 @@ 1108248 WD0C Charles 1108249 WB0HBJ Dwight 1108250 N0JST John -1108251 KE0NRZ Benjamin 1108252 WB5PJB Gary 1108253 N5VFM Debbie 1108255 KD5LWU Johnny @@ -2385,7 +2317,6 @@ 1108338 KB0ZCO Brent 1108339 KE0DQW Jason 1108340 KD0CXB Merrick -1108341 KC0HAJ Steven 1108343 KC0ZXN Nathan 1108344 KE0BMX Michael 1108345 KC0WOT Eric @@ -2456,12 +2387,12 @@ 1108413 KE0IPX John 1108414 N0HGV Steve 1108415 W0DMH Douglas -1108417 KD0YQP +1108417 KD0YQP Thomas 1108418 KE0ADK Emilio 1108419 N0JJK Todd 1108420 N0BN Daniel 1108421 KH2CZ Armando -1108422 KC0UFO Brian +1108422 AA0BF Brian 1108423 W0MTM Scott 1108424 W0CKL Christopher 1108425 KD0BVM Jonah @@ -2474,7 +2405,6 @@ 1108432 KD0DUG William 1108433 K0AWS Percy 1108434 W0HVM Harvey -1108435 K0ITP Charles 1108436 KC0LBF Robert 1108437 KD0WKW Aaron 1108438 K9LMH Joe @@ -2540,7 +2470,7 @@ 1108501 K0HIB Henry 1108502 KE0MBU Christopher 1108503 KE0PNV Erin -1108504 KD6GAU Joseph +1108504 N0WYX Joseph 1108505 KE0IPX John 1108506 WB0ECV Lawrence 1108507 KE0INR Michael @@ -2548,7 +2478,6 @@ 1108509 AB1KR Adam 1108510 K0ETT Greg 1108511 N2COL Paul -1108512 N0XVB Gerald 1108513 KE0G Don 1108514 K0MLA Michael 1108515 WB4CIW Frank @@ -2558,7 +2487,6 @@ 1108519 KE0JYZ 1108520 W5FRQ Brad 1108521 N0KMO Jeremiah -1108522 K1RMR Rick 1108523 N0KMO Jeremiah 1108524 KT4QD John 1108525 KD0WXN Robert @@ -2575,14 +2503,11 @@ 1108536 KC0YFH David 1108537 KC0EST Charles 1108538 AD0OZ Blake -1108539 KE0QKE Troy 1108540 KD0FDS Stephen 1108541 N5GRY Steven -1108542 K4RNY Ronnie 1108543 WB0ECV Lawrence 1108544 N5XYX Erik 1108545 KE0QCI Robin -1108546 KE0DAN Brandon 1108547 K0BH Brandon 1108548 K0SSI William 1108549 KI0PF Mark @@ -2600,11 +2525,8 @@ 1108563 WA6VPS 1108564 W0BBR Daniel 1108565 WE0MLK Misty -1108566 KE0QOF Keith 1108567 NQ0E Edward -1108568 KE0PVY Jeff 1108569 KE0OOY Eric -1108570 KE0QOF Keith 1108571 KE0NXQ Daniel 1108572 W7DEN Denver 1108573 W7DEN Denver @@ -2615,11 +2537,9 @@ 1108578 W7DEN Denver 1108579 K0FEI Frank 1108580 KC0FIC Edward -1108581 N0KAI Jeffery +1108581 AB0L Jeffery 1108582 KC1FFG Jacob -1108583 KE0RET Chris 1108584 W0AOK Mark -1108585 KE0RER Jody 1108586 K0SU Patrick 1108587 KE0RES Nathan 1108588 K0DRJ Donald @@ -2658,7 +2578,7 @@ 1108626 KE0ONS Oem 1108627 WA0RSX William 1108628 KB0UBZ Ben -1112001 KI4ZWE Bobby +1112001 KI4BOB Bobby 1112002 WA4ECT Michael 1112003 PU2TAW Agnaldo 1112004 WD4LEE Lee @@ -2669,12 +2589,10 @@ 1112009 W4WAG William 1112010 K4NJM Noel 1112011 AI4ZR Gregory -1112012 N4RJJ Robert 1112013 KG4VIA Steven 1112014 W1MDS Mike 1112015 KJ4ET Kevin 1112016 KK4GPU Edward -1112017 N4RJJ Robert 1112018 KE4RSL Ellis 1112019 W1MDS Mike 1112020 KC4MHH James @@ -2694,7 +2612,6 @@ 1112034 W4GB James 1112035 K4UAW Mark 1112036 N1FLH Martin -1112037 KP4TR Ramon 1112038 W2YS Michael 1112039 N1UBB Matthew 1112040 KB4BJM Kenneth @@ -2704,7 +2621,7 @@ 1112044 KJ4REF Gary 1112045 W4HAG David 1112046 KM4XQ David -1112047 KT4WX James +1112047 KT4WX Darrell 1112048 AD4DZ David 1112049 WB4OQF Donald 1112050 KK4GGJ Jan @@ -2733,7 +2650,7 @@ 1112076 NC2H Craig 1112077 KA7NOO Michael 1112078 KM4TUV Anthony -1112079 KM4QNW George +1112079 K4GJN George 1112080 W0FVK Fredric 1112081 WA2IYC Ruben 1112082 N4RD Peter @@ -2750,7 +2667,6 @@ 1112093 KM4DSG Eric 1112094 W4BSP Bryan 1112095 KW4MD Andrew -1112096 W4JMF Jason 1112097 KK4THE Eric 1112098 KM4ABV Alexander 1112099 KK4INP William @@ -2812,7 +2728,7 @@ 1112155 KM4IPM Jerald 1112156 W7RCW Robert 1112157 WA3OYW Gerald -1112158 KW4RG +1112158 KW4RG Jon 1112159 WB4TCH Teresa 1112160 WB4OQF Donald 1112161 KM4TTS Andrew @@ -2835,7 +2751,7 @@ 1112178 K4WME Wesley 1112179 KF4OBP Alicia 1112180 KM4VTN Calvin -1112181 KM4VIG Thomas +1112181 KM4VIG Tom 1112182 W4GFQ Donald 1112183 K4DKK Chris 1112184 W1WCN Joe @@ -2896,7 +2812,7 @@ 1112239 KM4WCP Timothy 1112240 KM4WCP Timothy 1112241 WX4WW Oliver -1112242 KK4TBJ Joseph +1112242 KK4TBJ Joe 1112243 W4SLD Joseph 1112244 KM4TRE Philip 1112245 KK4JJR Derrick @@ -2909,7 +2825,6 @@ 1112252 KK4RDB Ronald 1112253 N3OS Gary 1112254 W4SLD Joseph -1112255 N4PSK Robert 1112256 WD4CJB Christopher 1112257 K4SAT Joseph 1112258 K4BQN Edwin @@ -2933,9 +2848,7 @@ 1112276 W4TIX John 1112277 N1QFH John 1112278 KV4WV Sean -1112279 KK4RAJ Ruth 1112280 KM4RMK Richard -1112281 N4DWM David 1112282 KA9ZRZ Mike 1112283 KM4QNR Richard 1112284 KM4RHC Pedro @@ -2957,7 +2870,7 @@ 1112300 KD4UUN Sally 1112301 N6YCM Gerald 1112302 N6YCM Gerald -1112303 KM4VIG Thomas +1112303 KM4VIG Tom 1112304 KM4JVE Ana 1112305 WJ2N Andres 1112306 KC2LXV Paul @@ -2973,18 +2886,16 @@ 1112316 N3GLV Jeff 1112317 KG4TRV Alex 1112318 KM4YDO Andrew -1112319 KM4VGY Clifford 1112320 W3FOY Joseph 1112321 WK3P Robert 1112322 W4EE James 1112323 KG4ZVW Phillip -1112325 NK4DX Ezequiel +1112325 NK4DX Ez 1112326 AB4JO Joseph 1112327 WA2NLC Rick 1112328 KM4DAJ Dominique -1112329 KM4WUD +1112329 KM4WUD Motodmr 1112330 K7RMD Rex -1112331 KJ4IYZ Kevin 1112332 KB0ZNU Daniel 1112333 WA4PAM Frank 1112334 N0CAS Craig @@ -2996,7 +2907,7 @@ 1112340 K4ZAS Dennis 1112341 KS4WA Stephen 1112342 N4SAR James -1112343 K4ZXR Joel +1112343 AB4U Joel 1112344 K9TUT M 1112345 WS4K Eric 1112346 N3GLV Jeff @@ -3005,7 +2916,6 @@ 1112349 N4HBM Harry 1112350 KM4WXH Carole 1112351 N1US Brian -1112352 KM4YLN Andrew 1112353 NU2B Timothy 1112354 KN2D Kenneth 1112355 KM4DIF Bernard @@ -3017,9 +2927,7 @@ 1112361 K2BWA Paul 1112362 KK4KOQ Charles 1112363 K4KXX John -1112364 AG8R Brandon 1112365 KM4RYM Richard -1112366 W4IEE Thomas 1112367 KG4QIV Ronnie 1112368 KK4GBD Richard 1112369 KA2SEY Philip @@ -3029,9 +2937,7 @@ 1112373 KM4MNZ Jerry 1112374 AJ4WD Rachel 1112375 N4UMS Bill -1112376 W4MDD Michael 1112377 WX4JCW Jason -1112378 W4MDD Michael 1112379 N2HAY Hayden 1112380 K4GFD Norman 1112381 K4SIP Byron @@ -3048,7 +2954,6 @@ 1112392 KM4YZP Herbert 1112393 VE3NGW Chris 1112394 WP2AGO Sandra -1112395 KF4DDY Terry 1112396 W1AVV Frank 1112397 W2JKD James 1112398 WA2V Jeff @@ -3074,7 +2979,6 @@ 1112419 N4KIZ Kenneth 1112420 WB8CLQ Robert 1112421 N4JTS James -1112422 KC4JVE Gustavo 1112423 KA1VRF Wayne 1112424 AC4ZM Mark 1112425 KJ4LHI Eleanor @@ -3087,7 +2991,6 @@ 1112432 KC6PVG James 1112433 KM4VGW John 1112434 N3CMH Wesley -1112435 KM4SM Michael 1112436 N8MW Gregory 1112437 K8BWE Richard 1112438 KC4DAN Daniel @@ -3133,7 +3036,6 @@ 1112478 KM4ECQ Ryan 1112479 N9GKO Jack 1112480 WA4PAW Paul -1112481 KM4SM Michael 1112482 W4LNA Frederick 1112483 W4LNA Frederick 1112484 NI4CK Nick @@ -3198,7 +3100,7 @@ 1112547 NG2F Michael 1112548 KK4ZMZ David 1112549 WG4K David -1112550 AC7HU Elixander +1112550 W7HU Elixander 1112551 AD1I Brian 1112552 W4LWZ Lawrence 1112553 W4FFW Dan @@ -3286,8 +3188,7 @@ 1112637 KA0CZW William 1112638 KA9JYO Carlos 1112639 KA9JYO Carlos -1112641 W4JMF Jason -1112642 KM4KME +1112642 KM4KME Headley 1112643 KI4WPY Michael 1112644 W9TAB Thomas 1112647 KK4EDB Antonio @@ -3318,7 +3219,6 @@ 1112672 KD4AAA Allan 1112673 W2HI Robert 1112674 WD5CKN Lawrence -1112675 K4MKH Michael 1112676 N9HV Richard 1112677 W4KMR Michael 1112678 KJ4VQO Harry @@ -3419,7 +3319,6 @@ 1112775 N0VOM William 1112776 AA4GT George 1112777 KM4VLC Chris -1112778 W1MIT Dennis 1112779 N3EA Alan 1112780 W4SOX Eric 1112781 WD4MAN Daryl @@ -3443,7 +3342,7 @@ 1112799 W7WJY James 1112800 KK4YXR Franklin 1112801 N1XAU Bridget -1112803 N4USI The +1112803 N4USI AO-27 1112804 WW4AS Alberto 1112805 WW4AS Alberto 1112806 KB4MKW Lloyd @@ -3496,7 +3395,7 @@ 1112854 KD4IDQ Donald 1112855 AC4JK John 1112856 N9EC Marjorie -1112857 KJ4JM John +1112857 KJ4JM 1112858 KM4OYP Kenneth 1112859 KE4FDE Jeffrey 1112860 KB2THD James @@ -3515,7 +3414,6 @@ 1112873 WN4SLB Joe 1112874 AA4FB Frank 1112875 W9TTS Theodore -1112876 AI4JI David 1112877 AI4JI David 1112878 KA4UAG Dean 1112879 N4WSK Henry @@ -3523,7 +3421,6 @@ 1112882 K4JZ William 1112883 KK4YXR Franklin 1112884 NI4CK Nick -1112885 YV4WC Winkock 1112886 WB4UHW John 1112887 W4AAE Gordon 1112888 WB8PAF Robert @@ -3546,7 +3443,6 @@ 1112905 KG4YRS Armando 1112906 N4MJN Herbert 1112908 W4TYD Ty -1112909 KC3Z Lance 1112910 N4XUX 1112911 N4XUX 1112912 N4TRN Keith @@ -3603,7 +3499,7 @@ 1112966 KC2AEB Cathy 1112967 KA4OPM James 1112968 W4JKJ John -1112969 AA0NO James +1112969 W4WWJ James 1112970 KM4GLM Lee 1112971 K1CE Richard 1112972 KM4OUU Ruben @@ -3620,12 +3516,11 @@ 1112983 KF4HVT Richard 1112984 K4KFF Brian 1112985 WD4VR Vicente -1112986 KD0USA Barry 1112987 K4ISR Michael 1112988 W1ZFL James 1112989 WB0MMZ Joseph 1112990 KM4SAC Loren -1112991 KG4HBN Karl +1112991 K4HBN Karl 1112992 AA2SR Eugene 1112993 KM4MQI Robert 1112994 KP4Y Roberto @@ -3660,7 +3555,7 @@ 1117024 N9IGP John 1117025 W9ZED Maurice 1117026 WD9CIR Stephen -1117027 N9SSC Mike +1117027 N9MIC Mike 1117028 NF9D William 1117029 KC9TWR Mike 1117030 NR9Q Christopher @@ -3712,7 +3607,6 @@ 1117079 KF9IO David 1117080 NE9MA Communications 1117081 WD9GHK Bruce -1117082 W9JGH 1117083 KD9BVU Brian 1117084 W9BBB Wayne 1117085 K9SPP Scott @@ -3768,9 +3662,7 @@ 1117137 KC9YAH Dominic 1117138 W9ARX Nathan 1117139 KD9GNX Matthew -1117140 KB9TZS Richard 1117141 KJ6TZ Inwoo -1117142 N9DNR Daniel 1117143 KC9YIJ Mark 1117144 K9EMA Noble 1117145 KC9KXF Javier @@ -3780,7 +3672,7 @@ 1117149 W9FE Carlos 1117150 KC9FQT Jonathan 1117151 KD9DPW Richard -1117152 N9SRS Richard +1117152 NM9X Richard 1117153 KB9KLC Gregory 1117154 KD9EAJ Mark 1117155 KD9BAU Victoria @@ -3803,7 +3695,6 @@ 1117175 KA9HHH Bob 1117176 KD9EGI Duane 1117177 AI8A James -1117178 N9CWF John 1117179 KD9MAC Gordon 1117180 KD9MAC Gordon 1117182 KD9MAC Gordon @@ -3821,7 +3712,7 @@ 1117194 KD9ITO Cary 1117195 N9FDJ Fred 1117196 WX9SVR Christopher -1117197 N9SSC Mike +1117197 N9MIC Mike 1117198 N9PLM James 1117199 KJ4EG Johnnie 1117200 K7QLL John @@ -3881,7 +3772,7 @@ 1117264 KC9EPR Julie 1117265 W9FOH Michael 1117266 KB9VRW C -1117267 KD9IKQ Jeremy +1117267 W9JWF Jeremy 1117268 N9MUF Daniel 1117269 KC9VRX Raymond 1117270 KD9HVU Dushan @@ -3907,7 +3798,7 @@ 1117295 N9SW Gene 1117296 KC9FJN William 1117297 KD9IDD Robert -1117298 N9QGW Jaye +1117298 W9CY Jaye 1117299 KC9UFB James 1117300 N9IVM James 1117301 KD9JKG David @@ -3927,7 +3818,7 @@ 1117316 WB9WOZ Bruce 1117317 KA9MHW Keith 1117318 N9DH Robert -1117320 WC9V Ralph +1117320 W9NW Ralph 1117321 N0YHH Steven 1117322 WW9WW William 1117323 W0LEN Lynton @@ -3959,7 +3850,6 @@ 1117353 N9KGH James 1117354 AE9AM Gavin 1117355 KD9JUU Michael -1117356 KD9GVA Jack 1117357 KD9JUP Anthony 1117358 KC9PTX James 1117359 KD9ITF Michael @@ -3974,7 +3864,6 @@ 1117368 KD9JQX David 1117369 N9RNT Kenneth 1117370 KC9YJN Robert -1117371 WX9CAH Craig 1117372 KD9IGB Matthew 1117373 KA3HSW George 1117374 W9IK Stephen @@ -4006,7 +3895,6 @@ 1117402 KD9DLL Michael 1117403 N9ZBI Gerald 1117404 WD9GVU Jeffrey -1117405 KB0SAN Veca 1117406 N9WRP William 1117407 K9ARA Ryan 1117408 W9CIB Dennis @@ -4033,13 +3921,12 @@ 1117429 KD9IQY Richard 1117430 AA9JS Gary 1117431 KD9IWZ Jonathan -1117432 W9FED Frederick 1117433 KC9ZLL Andy 1117434 KD9GLB Timothy 1117435 KC9QKD Robbin 1117436 KB9YZI Jeremy 1117437 KD9EWR Slawomir -1117438 W9FED Frederick +1117438 W9FED Daniel 1117441 KB9SXC Bartlomiej 1117442 KB9JLO Danny 1117443 KB9KFI James @@ -4064,12 +3951,12 @@ 1117464 KE9SJ Thomas 1117465 KD9EPZ Allen 1117466 KA9KBG John -1117467 W9MO Robert +1117467 W9MO Bob 1117469 KC9FQI Matthew 1117470 W9PFD David 1117471 KC9TVE Gary 1117472 KD9JQZ John -1117473 KC9JYF Tom +1117473 NR9E Tom 1117474 KD9KLG Anthony 1117475 KC9NLA John 1117476 KC9RFJ Tamme @@ -4099,7 +3986,6 @@ 1117502 W9POL Rafal 1117503 KC9HBB Thomas 1117504 KD9INK Dale -1117505 N9DRF George 1117506 KD9LIU Edward 1117507 KD9JQZ John 1117508 KE4FGT Jeffrey @@ -4114,7 +4000,7 @@ 1118005 KC9AOM Michael 1118006 N9SYI William 1118007 NA6Q David -1118008 KD9GDV William +1118008 K9WJM William 1118009 WA9MTH Richard 1118010 KC9LZI Neal 1118011 K9JRC Jon @@ -4140,12 +4026,11 @@ 1118034 KD9BVN Charles 1118036 KD9HYF William 1118037 KB8GG Lance -1118038 KC9TKJ Christopher 1118039 KD9ISO Thomas -1118040 KD9IXC Philip +1118040 K9PMA Philip 1118041 KC9EOD James 1118042 KD9GYG David -1118043 KC9TQY Ryan +1118043 N9RVB Ryan 1118044 KD9CPH Keith 1118045 KM4RMM Mary 1118046 K9SGA Daniel @@ -4184,12 +4069,11 @@ 1118080 KB9BVN Brian 1118081 KD9GZJ Jermaine 1118082 KD9EXN John -1118083 KB9OFA Trevor +1118083 W9TMS Trevor 1118084 KB9RRN Dennis 1118085 KA9KWH Daniel 1118086 KD9HWI Larry 1118087 N9RFP Ben -1118088 KD9HYO 1118089 AA9EG William 1118090 AA9EG William 1118091 AA9EG William @@ -4212,9 +4096,7 @@ 1118110 N9HDO Leonard 1118111 NJ9U Phillip 1118112 KD9HCJ Michael -1118113 KD9HCI Mitchell 1118114 KC9ZYE John -1118115 KD9HCI Mitchell 1118117 W4RCP Robert 1118118 N1AAE Curtis 1118119 KD9HAX John @@ -4237,7 +4119,7 @@ 1118139 KD0TNB Dennis 1118140 KC9UHU Robert 1118141 KC9CAU Christopher -1118142 KD9DWV Jason +1118142 N9CRT Jason 1118143 KC9JBR John 1118144 KD9HLG Robert 1118145 KC9RTI Jeff @@ -4247,7 +4129,7 @@ 1118149 KB3GYM Joseph 1118150 KC9IPP Jim 1118151 W9WLS John -1118152 N9QEX Steven +1118152 W9SDH Steven 1118153 K9DLB Donnie 1118154 WB3LNY George 1118155 KC9LWJ Richard @@ -4256,7 +4138,7 @@ 1118158 KC9VRA Carl 1118159 KC8UBC William 1118160 W1TOD James -1118161 KC9HKT Matthew +1118161 K9GE Matthew 1118162 KC9JOY Nicholas 1118163 N9EVM Norman 1118164 N9EHK Bradley @@ -4283,7 +4165,6 @@ 1118185 W9CTB Jerry 1118186 K9WZZ Jack 1118187 KA9LRE John -1118188 W6JKL Justin 1118189 W9RJD Robert 1118190 KJ4FKC Michael 1118191 N9CDA Craig @@ -4309,7 +4190,6 @@ 1118212 WB0HTW Carl 1118213 N9XNJ Cecil 1118214 WA9RN K9nzf -1118215 AI9E John 1118216 K9CJC Christopher 1118217 K9CJC Christopher 1118218 KA9CCN Tim @@ -4330,7 +4210,7 @@ 1118233 W9RWR Richard 1118234 KD9CVF 1118236 KD9FBC Wilson -1118237 KN6VK David +1118237 K4BKM David 1118238 N9RNV Robert 1118239 KC9WJR Robert 1118240 KC9LZJ Michael @@ -4346,7 +4226,7 @@ 1118250 K9HIX Vincent 1118252 W9LW Jay 1118253 W3CAZ Jacob -1118254 N9NGB Keith +1118254 AC9UK Keith 1118255 N9NDS Brad 1118256 KA9Z Thomas 1118257 KD9KEH Edward @@ -4359,7 +4239,6 @@ 1118264 W9ART Arthur 1118265 KC9ZKM James 1118266 W9PAR Prepper -1118267 W9GCM Gordon 1118268 KB9MGG Richard 1118269 KG6FD Michael 1118270 KG6FD Michael @@ -4386,7 +4265,6 @@ 1118293 K9INX John 1118294 KG6ONC Jason 1118295 KG6ONC Jason -1118296 KB9RZ Michael 1118297 KA9TSD Paul 1118300 KC9BWH Christopher 1118301 WA9I Ed @@ -4508,7 +4386,6 @@ 1126068 KE8AVN Kory 1126069 N9UXU David 1126070 N8XOG Paul -1126071 KE8DXX John 1126072 KR8U Dennis 1126073 KC8DCO Jeffery 1126074 N8QVQ Justin @@ -4524,7 +4401,6 @@ 1126084 AJ8W Charles 1126085 W8YFL Bruce 1126086 N8QVQ Justin -1126087 N8XP Scott 1126088 N4IYL Ulysses 1126089 AB8OJ Edward 1126090 KC8SSK James @@ -4563,7 +4439,6 @@ 1126123 N8NBZ Michael 1126124 KG8WF Vincenzo 1126125 KC8WWP Rebecca -1126126 N8JY 1126127 W8TMS Thomas 1126128 KD8DXQ William 1126129 K8SRH Laurence @@ -4572,7 +4447,6 @@ 1126132 KD8VDX Brandon 1126133 KE8GJZ Chris 1126134 KE8GCU Anthony -1126135 N8RXG Stephen 1126136 W8WDW Delos 1126137 K8AGN Larry 1126138 N8AYY Gary @@ -4605,8 +4479,6 @@ 1126166 KE8GCV Mitchell 1126167 WY8P Alan 1126168 KE8GRC Zachary -1126169 N8JJB Jeremy -1126170 N8JJB Jeremy 1126171 KD8SLS Douglas 1126172 KB8UNX Mark 1126173 KB8YGA William @@ -4675,7 +4547,6 @@ 1126246 KB8DWI Michael 1126247 N8HLN Mike 1126248 KD8KBH Philip -1126249 K8FBI FBI 1126250 N8XOI David 1126251 KD8RMQ Levi 1126252 N9UV Roger @@ -4698,7 +4569,6 @@ 1126271 KC0NOS Sally 1126272 K8SEW Susan 1126273 KD8IFI -1126274 K8UPE Reginald 1126275 N8WVN John 1126276 W8GPR Gary 1126277 AC8DZ Robert @@ -4758,7 +4628,7 @@ 1126333 KA8UHG Steven 1126334 KE8HMJ Daniel 1126336 KE8HQZ Michael -1126337 KC8JQM Alan +1126337 W8AEG Alan 1126338 KI8A Rod 1126339 W8GMD Garry 1126340 KA8EAO Brian @@ -4782,7 +4652,6 @@ 1126361 KE8CHW Benjamin 1126362 N8JI John 1126363 KE8JVO John -1126364 KD8ROT James 1126365 K8JVW Eric 1126366 K8RCZ Robert 1126367 KE8EXY Chance @@ -4817,10 +4686,8 @@ 1126401 K9TRV George 1126404 KE8FAZ Justin 1126408 W8TUF Ted -1126409 AD8BV John 1126410 W8ILL William 1126411 W8ILL William -1126413 KA8QML John 1126414 KE8IDU Jason 1126415 K8RKO Robert 1126416 N8HDJ Michael @@ -4890,7 +4757,6 @@ 1126495 KE8ICM Alexander 1126496 NQ8C Benjamin 1126497 NQ8C Benjamin -1126498 W8TJO Thomas 1126499 W8WLC Randall 1126500 W8ARU Arun 1126501 N9OKL Floyd @@ -4921,7 +4787,6 @@ 1126526 N8EAT James 1126527 W8CZ Richard 1126528 W8FZY Matt -1126529 KD8FAL Kevin 1126531 K8DHH John 1126532 KE8HOM Amirhossein 1126533 KD8DEV Eric @@ -4932,7 +4797,7 @@ 1126538 W8ATE Stanley 1126539 N8GRU Gayathri 1126540 KE8ITV Thomas -1126541 N8QQS Nicholas +1126541 N8QQS Nick 1126542 K1JWJ Jeffrey 1126543 KC8GTE Kelly 1126545 KD8VXV Brian @@ -4950,7 +4815,7 @@ 1126559 KD8ZYW Tim 1126560 WD8NNW Eugene 1126561 KE8IYA Michael -1126562 KE8IUJ Darrell +1126562 KD8ATC Darrell 1126563 KI7UTE Grace 1126564 KD8NLL Norman 1126565 KD8ZVY Leah @@ -4966,15 +4831,12 @@ 1126575 KB8TAR Kevin 1126576 KD8PPH Joseph 1126577 KE8CYD Jere -1126578 KE8GRY Eric 1126579 W8JRT Joseph 1126580 KD8PPH Joseph 1126581 KE8BNK John 1126582 KD8DXV Monroe 1126583 W8CRH Stephen 1126584 AC8OR Charles -1126586 AB8NG Thomas -1126587 AB8NG Thomas 1126589 K8WM William 1126590 K8RWM Richard 1126591 W8FSA Mark @@ -4988,7 +4850,6 @@ 1126599 K8VSV Scott 1126600 AC8FW Philip 1126602 WD8MWD Marc -1126604 K8KCH Kenneth 1126605 N8JCC John 1126606 K8RDS Richard 1126607 KB8M Doug @@ -4998,7 +4859,6 @@ 1126614 N8JCC John 1126615 KE8GYH Robert 1126616 N8ACK Andreas -1126617 AD8BV John 1126618 KJ8DO Keith 1126619 KE8LEB Laurence 1126620 KE8IUL Brett @@ -5022,7 +4882,6 @@ 1126639 KA8DUY David 1126640 KE8JMI Rye 1126641 W8HD Kim -1126642 AB8FX Roger 1126643 K8CLH Christian 1126646 W6AQT James 1126647 KE8JMA Bruce @@ -5037,7 +4896,6 @@ 1126660 AB8VS Michael 1126661 N8LUF Perry 1126662 KE8DHS John -1126663 KE8BYJ Michael 1126664 KC9CJL Neil 1126665 KE8JRD Brandon 1134001 NV2R Manuel @@ -5059,7 +4917,6 @@ 1134017 KD2NYC Jeffrey 1134018 WA2FPB Kenneth 1134019 N2UUS Seymour -1134020 W2GJW Garrett 1134021 N2UZD Naphtali 1134022 W2AGP Arthur 1134024 KD2OYQ Evan @@ -5102,7 +4959,7 @@ 1134063 KC2ESD Richard 1134064 KD2OOF Edward 1134065 N2IEE John -1134066 KD2MCG NJECT +1134066 NJ2CT NJECT 1134067 KD2IOK Cynthia 1134068 WO2T Alfonse 1134069 KD2GPR Veronica @@ -5142,8 +4999,6 @@ 1134107 KC2NIE Robert 1134108 KN1CKC Nicholas 1134109 KF2EE Allan -1134110 K2ATX Harry -1134111 K2ATX Harry 1134112 KC2CQO Stephen 1134113 N2VGS Roberts 1134114 N2EIM Robert @@ -5167,7 +5022,6 @@ 1136006 KC2TUZ Jaclyn 1136007 KD2FPM Kevin 1136008 KD2JWC Matthew -1136010 KD2IVF Nikolaos 1136011 KD2LLV Wylie 1136012 KC2UAJ John 1136013 KD2D Walter @@ -5191,7 +5045,7 @@ 1136031 KD2CJP Jose 1136032 KC2DEP Charles 1136033 N2YP John -1136034 KD2LOI Hiroto +1136034 W2SAK Hiroto 1136035 W2RJR Raymond 1136036 KD2PFD Christopher 1136037 W2SMM Scott @@ -5200,14 +5054,14 @@ 1136040 N4YKE Peter 1136041 W2HYP Joseph 1136042 KD2AZ Joseph -1136043 AC2TF Jeffery +1136043 AC2TF 1136044 KB2VQS Michael 1136045 KC2EAZ John 1136046 K2GOG Steve 1136047 KD0CFW -1136048 W2CYK Robert +1136048 W2CYK Bob 1136049 N2WUT William -1136050 KD2JMV Robert +1136050 W2RWS Robert 1136051 N2TVP Donald 1136052 N2TVP Donald 1136053 KB2SIN William @@ -5218,7 +5072,6 @@ 1136058 WA2HP Herold 1136059 KD2CAV Doron 1136060 N2YDC Arnold -1136061 N2HSP Shawn 1136062 KB2WZT Larry 1136063 KD2IHY Charles 1136064 KD2GBA Keino @@ -5231,7 +5084,6 @@ 1136071 AA2VI Howard 1136072 KB2SGD Al 1136073 KC2ZNB Paolo -1136074 N2YGI Sakis 1136075 KD2JVL Brett 1136076 KD2JVL Brett 1136077 N1NDN Bernard @@ -5250,14 +5102,11 @@ 1136091 KD2LMR David 1136092 KC2PTG Marc 1136093 KC2SBO Berge -1136094 KB2WWG Ruben -1136095 N2USB Ruben 1136096 KD2LMR David 1136097 KC2YKV Roger 1136098 K2PMS Paul 1136099 KD2GRS Robert 1136100 AC2HE Andrew -1136101 N2WNU Jamieson 1136102 KD2CYQ Paul 1136103 N2JVE Henry 1136104 W2DDY J @@ -5273,7 +5122,7 @@ 1136114 WB2ZII HT1 1136115 KD2BHN Jonathan 1136116 W2WDD David -1136117 W2LMT Lee +1136117 K2LT Lee 1136118 W2WDD David 1136119 W2PJS Philip 1136120 KD2LTR Robert @@ -5289,7 +5138,6 @@ 1136131 N2NTX Jeffrey 1136132 KD2LWB Mark 1136133 N2HPO Jeffrey -1136134 N2WNU Jamieson 1136135 N2MCI Peter 1136136 KQ2A Victor 1136137 KC2WJD Josue @@ -5306,7 +5154,6 @@ 1136148 KC2SBO Berge 1136149 KD2MEA Justin 1136150 KC2ZWX Cris -1136151 N2WNU Jamieson 1136153 KC2ZWX Cris 1136154 KC2ZOQ Yun 1136155 N2FXC Ruth @@ -5317,7 +5164,7 @@ 1136160 WB2ZII HT1 1136161 W2PDX Craig 1136162 KD2KOL Melanie -1136163 N2KLC James +1136163 N2KLC Jim 1136164 N2WOD John 1136165 KD2MDO Colin 1136166 AG2AA Steven @@ -5339,7 +5186,7 @@ 1136182 N2ORG Johnny 1136183 KR2JB Robert 1136184 KC2KCL Karl -1136185 WK9K Joseph +1136185 K2OL Joseph 1136186 KC2YFX Marvin 1136187 KD2MHI Scott 1136188 KD2JTT Richard @@ -5366,7 +5213,6 @@ 1136209 KC2YEL Eddy 1136210 KC2LAL Randy 1136211 KD2MDP Brian -1136212 WB2RCB Ronald 1136213 WA2HKT Michael 1136214 KA2RWA Richard 1136215 KB2HAP Daniel @@ -5412,15 +5258,13 @@ 1136255 KD2CJP Jose 1136256 N2NCS Pete 1136257 AG2AA Steven -1136258 KB2BJ Philip 1136259 KC2PRZ Bryan 1136260 KC2RQO Kyle 1136261 KD2HDZ Glenn -1136262 KD2EHW Brett 1136263 KA2MMX Albert 1136264 W2KCH Kevin 1136265 WA2CW Barry -1136266 W2CYK Robert +1136266 W2CYK Bob 1136267 W2UIS Mark 1136268 KC2BUD Bud 1136269 KD2FZJ Corey @@ -5431,7 +5275,7 @@ 1136274 KD2FKH George 1136275 KD2CAV Doron 1136276 AC2ML John -1136277 KC2NBE Arnolfo +1136277 K2ECO Arnolfo 1136278 KD2GAG Joseph 1136279 KD2KNH Charles 1136280 K2GC Mike @@ -5449,7 +5293,7 @@ 1136292 WZ2Y Eddie 1136293 N2TRX David 1136294 KM6CG Edward -1136295 KD2LQE Simon +1136295 K2FH Simon 1136296 KD2AVW Michael 1136297 KC2CYH Demetrios 1136298 KD2HQZ Jose @@ -5461,7 +5305,6 @@ 1136304 KD2BYJ Michael 1136305 KD2HQZ Jose 1136306 KD2MRN Origen -1136307 N2SNY John 1136308 KD2LFE Jeffrey 1136309 KF2OG Gary 1136310 KD2IVQ David @@ -5492,7 +5335,7 @@ 1136335 KC2WSS Michael 1136336 WA2SSF Bruce 1136337 N2NUR Frank -1136338 KD2JPL Merrick +1136338 K2TAX Merrick 1136339 AB2MS Todd 1136340 K2BAG John 1136341 KD2MYP Mikel @@ -5515,7 +5358,6 @@ 1136358 WB2YMC Brian 1136359 KD2DVA Joseph 1136360 KD2DVA Joseph -1136361 K2ZS Gordon 1136362 N9DAK Peter 1136363 KD2MZG Michelle 1136364 KA2Y Carlton @@ -5543,7 +5385,7 @@ 1136386 KC2WQS Matthew 1136387 KD2AMZ Michail 1136388 KM2JAX Jonathan -1136389 N2YGI Sakis +1136389 N2YGI Dionysios 1136390 K2DHC Donald 1136391 KD2AMZ Michail 1136392 K2HOY Hoy @@ -5557,7 +5399,6 @@ 1136400 KD2HUK Christopher 1136401 N2MKT Jeffrey 1136402 KD2NED Ronnie -1136403 WA2ZEG John 1136404 WU1B Mikel 1136405 KF2UR John 1136407 N2BPU David @@ -5592,7 +5433,7 @@ 1136436 KD2NFK Andrew 1136437 WA2UUS Joel 1136438 KD2EDX James -1136439 KD2NIR +1136439 KD2NIR Joseph 1136440 KD2LHQ Michael 1136441 KC2TOM Nymeca 1136442 WB2DRS Frank @@ -5601,7 +5442,6 @@ 1136445 WA2OUZ John 1136446 W2TMD Vincent 1136447 KB2AQW Michael -1136448 KD2FRD Don 1136449 KD2EWM Paul 1136450 KD2ESY Andrew 1136451 WN7R Alan @@ -5609,13 +5449,11 @@ 1136453 KD2IGI Kevin 1136454 KB2QZK Ken 1136455 WA2NAN Kerry -1136456 W2TXB Jerome 1136457 KD2MOY Daniel 1136458 N2CHP Robert 1136459 N2YSG Ronald 1136460 KD2JPK Thomas 1136461 KD2ESY Andrew -1136462 K2ZS Gordon 1136463 KD2NKF Rawhi 1136464 NA3E Erich 1136465 KD2MNZ Ronald @@ -5631,7 +5469,6 @@ 1136476 N2HVR Nicholas 1136477 KA2PJM Kenneth 1136478 KC2TAG Jeremiah -1136479 W1TFK Tom 1136481 KC2WI Peter 1136482 KD2NJO Benjamin 1136483 K2ALS Stephen @@ -5640,7 +5477,7 @@ 1136486 KD2MZH Forrest 1136487 KC2TCK Thomas 1136489 WA2EZ Donald -1136490 KC2NYU Jack +1136490 KC2MYU Jack 1136491 KD2ABK Howard 1136493 KD2NJA Richard 1136495 K2GTV George @@ -5659,6 +5496,7 @@ 1136508 KC2IQV Charles 1136509 KY2T Dima 1136510 W3AAP Anthony +1136512 YT2DT Dusan 1136514 KD2EQH Johnny 1136515 WB2KDG Stephen 1136517 KD2EQH Johnny @@ -5702,7 +5540,6 @@ 1136557 KD2CFE Michael 1136558 KD2JOX Daniel 1136559 K2KC Kenneth -1136560 KD2IVF Nikolaos 1136561 WB2BOB Robert 1136562 K2KC Kenneth 1136563 WB2ONZ Wayne @@ -5763,7 +5600,6 @@ 1136623 N2NFI William 1136624 N2NFI William 1136625 KC2DZJ Dante -1136626 AC2VY Michael 1136627 K2GPR Glenn 1136628 KC2KKX Peter 1136630 KD2IQM Robert @@ -5793,7 +5629,6 @@ 1136662 W2RTO Christopher 1136663 K2LRV Louis 1136666 W2NTV Scott -1136667 KD2FRD Don 1136668 KJ6KEE Richard 1136669 KG2RY David 1136670 NF2Q Emanuel @@ -5820,7 +5655,6 @@ 1136693 K2JLV William 1136694 KD2DFD Peter 1136695 N2ZNC George -1136696 KC2REY Kenneth 1136697 W2OOD Carl 1136698 K2VHF Andrew 1136699 W2LMM Louis @@ -5877,7 +5711,6 @@ 1136753 WC2OEM Nyc 1136754 N2YGW Noel 1136755 N2WES Wesley -1136756 KD2EWE William 1136757 KD2CHE Jill 1136758 W2NET Anthony 1136759 K3NYC NYC @@ -5953,10 +5786,8 @@ 1136832 W2ABC Bears 1136833 W2ABC Bears 1136834 W2ABC Bears -1136836 W2JTF Jeffrey 1136837 KD2NSB Robert -1136838 KC2YKM Todd -1136839 KC2YXU Ian +1136838 N2TOD Todd 1136840 KD2KOW Darlene 1136841 W2CST Corey 1136842 KD2OVW Christopher @@ -5966,21 +5797,18 @@ 1136846 N2RES Dean 1136847 KD2ALW Derrick 1136848 N2PQJ Steven -1136849 KD2EHW Brett 1136850 KB2ZYH Michael 1136851 N2ODP James 1136852 KD2KKE Jonathan 1136853 W2ZZA Dex 1136854 K9CHP Amir 1136855 K1AMF Tony -1136856 W2KYM James 1136857 KB2QEI Michael 1136858 KB2QEI Michael 1136859 KD2IBT Lewis 1136861 W2DXL David 1136862 KD2NSB Robert 1136863 KB2NYH Peter -1136864 KD2NTX Joseph 1136865 WA8BIT David 1136866 KD2KUB Andriy 1136867 WB2MLY Raymond @@ -6018,12 +5846,10 @@ 1136900 N4KHZ John 1136901 AA2XX John 1136902 W2CPS Christopher -1136903 W2JTF Jeffrey 1136904 N2YXW Bill 1136905 AC2UQ Paul 1136906 KD2CYZ Glenn 1136907 KC2PUD Timothy -1136908 W1TFK Tom 1136909 KD2CDC Reno 1136910 W2MEK Michael 1136911 KG2KB Miguel @@ -6035,7 +5861,7 @@ 1136917 N2TMG Juan 1136918 W2ARD Justin 1136919 W2QZ Allen -1136920 KF4KPF Terrence +1136920 KD2RLX Terry 1136921 N2LDY Donald 1136922 N2SZS Michael 1136923 G0JKN Nigel @@ -6057,7 +5883,7 @@ 1136940 KC2KOO David 1136941 KB2FMD Paul 1136942 NO3NO Thomas -1136943 KD2NTX Joseph +1136943 K2NTX Joseph 1136944 AE2JM Josh 1136945 N2RTG Warren 1136947 W2CSW Christopher @@ -6082,7 +5908,6 @@ 1136967 N2TPI Gil 1136968 KC2RRJ Michael 1136969 N2DES David -1136970 NE2Z Joseph 1136971 N2AMB Alwyn 1136972 AF2NY Ronald 1136973 KD2KML Robert @@ -6139,7 +5964,7 @@ 1137031 W4EWH Ernest 1137032 K4TRP Terence 1137033 KK4ADX David -1137034 NC4GR George +1137034 W4ZW George 1137035 NC1NC Wally 1137036 KM4ENB Leeman 1137037 N4IOH Larry @@ -6168,22 +5993,22 @@ 1137061 KM4RAW James 1137062 KD1AB Yo-Yoon 1137063 N4IOH Larry -1137064 NC4GR George +1137064 W4ZW George 1137065 W3GYK Wayne 1137066 KM4NVD Matthew 1137067 KK4TWW Jerry 1137068 KK4TWX Karen 1137069 KK4VCO Raymond 1137070 N4NIN James -1137071 W4FFX Scott +1137071 W4FFX 1137072 KW4SQ Gregory -1137074 W4FFX Scott +1137074 W4FFX 1137075 N4PLC Philip 1137076 K4SGR John 1137077 AA9QF James 1137078 KM4UCD Chris 1137079 KJ4IGZ David -1137080 KB4SFP Timothy +1137080 N4TRG Timothy 1137081 K3IRV Irv 1137082 W4MBD Robert 1137083 K4SGR John @@ -6192,7 +6017,6 @@ 1137086 WW4H Eric 1137087 KN4SGR Sarah 1137088 KJ4ZEF Charles -1137089 W4RSS Dick 1137090 KM4TNB Heather 1137091 N4ZHM Jeffrey 1137092 WD4DDC David @@ -6227,12 +6051,10 @@ 1137121 WA4BRW Lynn 1137122 K4SGW David 1137123 K4NYS Charles -1137124 K4KGM Kevin 1137125 KJ4TEI Jeffrey 1137126 K4PLP Perry 1137127 KI4FVO Todd 1137128 KT4V Ken -1137129 ND4L Scott 1137130 KM4OIS Phillip 1137131 AF5LB Dennis 1137132 K2UCU Thomas @@ -6264,7 +6086,6 @@ 1137159 KG4WCU Matthew 1137160 KD4MBC Timothy 1137161 W4DCR John -1137162 N4CWZ Dave 1137163 W4ZWO William 1137164 NU9Z Scott 1137165 KD4KTO Arthur @@ -6303,7 +6124,6 @@ 1137198 KN4AQ Gary 1137199 KX4T Grady 1137200 KK4NBN Richard -1137201 N0SYS George 1137202 N4DAJ David 1137203 KD8I John 1137204 KG4HEM Donald @@ -6312,7 +6132,6 @@ 1137207 KF4IXM Michael 1137208 KK4UZS Billy 1137209 KM4TOJ Frederick -1137210 N0SYS George 1137211 W4RSE Richard 1137212 K4WEJ William 1137213 KD4KMK Barry @@ -6327,7 +6146,7 @@ 1137222 KM4FTP Lee 1137223 AF3M Michael 1137224 KC4WQY Les -1137225 N3FQ Benjamin +1137225 K4ME Benjamin 1137226 KF4ZZP William 1137227 KM4UOB Jonathan 1137228 N2JWC John @@ -6366,7 +6185,7 @@ 1137261 N5CCM Riley 1137262 W4RJF Ronald 1137263 KK4JRW Les -1137264 K6RD Ronald +1137264 K6RD Ron 1137265 N3PHT Gregory 1137266 KG4ISP Kim-Hoa 1137267 W8EFW Rickey @@ -6445,14 +6264,12 @@ 1137341 KG4TWS Jeffrey 1137342 WD4KPX Skip 1137343 NC4AB Paul -1137344 KE4CWN Johnny 1137345 KJ4AKB Samuel 1137346 K3CON Gerald 1137347 W4FYT Jon 1137348 KF4PHG Brenda 1137349 KJ4VAF Hugh 1137350 KM4VAY Amber -1137351 KI4TUY Chad 1137352 KI4ZTP Leland 1137353 KM4VZA Kenneth 1137354 KE4ZDZ Nelson @@ -6510,7 +6327,7 @@ 1137406 W4CRG Craig 1137407 KG4PLU Devin 1137408 KK4WJF Ray -1137409 KD4ZWJ Kenneth +1137409 KE4KEN Kenneth 1137410 KM4ZBZ Jesse 1137411 AK4NC Jesse 1137412 NG4D Donald @@ -6530,7 +6347,6 @@ 1137426 KJ4CRT William 1137427 WA1VJH Garnet 1137428 KM4JTO Ronnie -1137429 KG4AWW Gary 1137430 KG4KDZ Anthony 1137431 W4RHB Robert 1137432 KI4BKE Rob @@ -6538,7 +6354,6 @@ 1137434 KN4ZZ Wiley 1137435 KF4YSP Tony 1137436 WX4ACO David -1137437 K4ILX Todd 1137438 KN4AHX Wayne 1137439 KI4HOT Stuart 1137440 KG4IOD Jamey @@ -6658,7 +6473,6 @@ 1137554 K1CY Mr 1137555 KW4UA Kenneth 1137556 KG4CJL Dave -1137557 KN4CKZ Allen 1137558 AF4YM Richard 1137559 AC4ZO Jeff 1137560 AF4TD Thomas @@ -6699,7 +6513,6 @@ 1137595 W4TZA William 1137596 KG4PCR Pete 1137597 N4TAF Robert -1137598 KI4UDZ Ray 1137599 KD4NMI Richard 1137600 AF1US Brian 1137601 KN4CAR William @@ -6749,7 +6562,7 @@ 1137649 N2JSP Jeffrey 1137650 W9HAT Michael 1137651 WA2CHJ Scott -1137652 K4PC Christopher +1137652 K4PC Chris 1137653 KM4DWQ Kenneth 1137654 WJ4DSP Clark 1137655 N8LVR Michael @@ -6838,7 +6651,6 @@ 1137740 KM4WDK Sam 1137741 KN4EIA Timothy 1137742 KM4SLQ Bruce -1137745 KN4EFZ Brian 1137746 KM4YYW Joseph 1137747 KM4YZI Christopher 1137748 KM4LLX Zachary @@ -7013,8 +6825,8 @@ 1137924 W4HOH Frank 1137925 KJ4ZTV John 1137926 KN4CLA Jeffery -1137927 KI4DUR -1137928 KI4DUR +1137927 KI4DUR Ricky +1137928 KI4DUR Ricky 1137929 W4JJO John 1137930 N4USB Larry 1137931 AJ4NX Adrian @@ -7035,7 +6847,6 @@ 1137948 KN4IBU Adam 1137949 KD4KEN Kendall 1137950 KK4KLA Robert -1137951 KE0KII Charles 1137953 K4KKT Charles 1137954 KU4DD Christopher 1137955 KM4SFU Randall @@ -7061,7 +6872,7 @@ 1137975 KN4INM Alexandra 1137976 KK4TYZ Richard 1137978 N2TEC Christopher -1137979 N4WBT William +1137979 N4WBT Brian 1137980 N8NPM Marvin 1137981 KN4DPX Michael 1137982 KN4FNP Jamie @@ -7084,7 +6895,6 @@ 1139001 N8TFD Steven 1139002 NE8X Matthew 1139003 N3VGX Martin -1139004 KE8FSY Richard 1139006 N8JAF Stephen 1139007 N8XSF Steven 1139008 WA4WGA Ray @@ -7116,7 +6926,6 @@ 1139034 WD8DYO William 1139035 WV9N Randy 1139036 K8RL Robert -1139037 NU8H David 1139038 W8IRC Irc 1139039 WD8OAJ James 1139040 N8AHS Frederick @@ -7167,7 +6976,7 @@ 1139085 N8QQ Bradford 1139086 N3VGX Martin 1139087 WD8LF Lawrence -1139088 KE8ANS Terry +1139088 KI8N Terry 1139089 KD8ZQK Alexander 1139090 N8UCL James 1139091 W8HJR Henry @@ -7193,7 +7002,7 @@ 1139111 N8NAY Raymond 1139112 W8AVI Timothy 1139113 KC8RDJ Michael -1139114 N8EMA Link +1139114 N8EMA Jeff 1139115 N8RIT Nathaniel 1139116 W8EZT Frank 1139117 W8TAR Thomas @@ -7212,7 +7021,6 @@ 1139130 KD8TJY William 1139131 W8TER Stephen 1139132 WB8JHD Jarrid -1139133 N8JSW Joshua 1139134 KD8UHO Zachary 1139135 N8KM William 1139136 K8JRH James @@ -7264,7 +7072,7 @@ 1139183 W8RMF Roger 1139184 WD8SAB William 1139185 N8OPA Allen -1139186 KB8SSH Roy +1139186 KB8SSH Michael 1139187 W8PEN Donald 1139188 W8CRO Robert 1139189 KB8RUW Michael @@ -7279,7 +7087,6 @@ 1139198 KD8OOB Cesidio 1139199 KE8GFX Dan 1139200 N8MRX Richard -1139201 N8ASH Theodore 1139202 K8GLC Gib 1139203 KB8RYA Donald 1139204 N8MRX Richard @@ -7310,7 +7117,6 @@ 1139230 KD8LLS Gary 1139231 WB8SJQ Terry 1139232 WB8TNF Mike -1139233 N8TWU Kenneth 1139234 W8CPL Christopher 1139235 KD8ICR Don 1139236 KC8OKW David @@ -7324,7 +7130,6 @@ 1139244 WD8AYC Richard 1139245 N8WD Bryan 1139246 KC8BPE Kenneth -1139247 K8JTD Jeff 1139248 W3CDG Cory 1139249 N3BSN Laura 1139250 K8MPX Matt @@ -7375,7 +7180,6 @@ 1139295 KE8GSP Justin 1139296 KD8K John 1139297 K8BCI Grant -1139298 KB8TGK John 1139299 KC8DUK Ricahrd 1139300 N8JDS John 1139301 N8AML Aaron @@ -7396,7 +7200,7 @@ 1139316 W8UY Terrance 1139317 KB8UBQ Harry 1139318 WB8WB Harold -1139319 KE8GKI Rex +1139319 KE8REX Rex 1139320 KE8FOL Eric 1139321 KE8BWA Andrew 1139322 W8JCB John @@ -7454,7 +7258,7 @@ 1139374 KE8BJA Ben 1139375 K8LAA Lee 1139376 K1MDM Mark -1139378 W8RLL Richard +1139378 W8RLL Dick 1139379 K8DMB David 1139380 KE8ECT William 1139381 WD8LEI Eric @@ -7467,7 +7271,7 @@ 1139389 K8WJW William 1139390 KE8BCR Kim 1139391 N8VES Andrew -1139392 WB8LEA +1139392 WB8LEA Gary 1139393 N8DRG Greg 1139394 W5KBW Robert 1139395 W8ASA Kenneth @@ -7536,7 +7340,6 @@ 1139459 KJ8R Allen 1139460 W8AZB Michael 1139461 KC8DDV John -1139462 W1WMJ Howard 1139463 N8CEY Michael 1139464 KD8VGY David 1139465 KD8JRB John @@ -7565,7 +7368,7 @@ 1139488 AA8BN Steven 1139489 N8SJS Randy 1139490 N8QXF Robert -1139491 N8EMA Link +1139491 N8EMA Jeff 1139492 N8MXX Jon 1139493 WD8MDF Daniel 1139494 KE8EZF Brian @@ -7577,14 +7380,11 @@ 1139500 KD8RFD Kathleen 1139501 WA9ABB Jimmy 1139502 N8AWG William -1139504 N8JDM Jason 1139505 KC8PGR Kaci 1139506 KC8PGR Kaci 1139507 AB8FU Thomas 1139508 KE8ZZ Edward 1139509 N0OBD Douglas -1139510 WD8CCZ Kenneth -1139511 W8VFD Mike 1139512 WA2MNA Daniel 1139513 W8ULT Leonard 1139514 KE8ANW Brian @@ -7612,7 +7412,7 @@ 1139541 K8NDM Dale 1139542 KD8GPG Robert 1139543 K8TOL Melvin -1139544 W8ATS Joseph +1139544 W8ATS 1139545 W8AXE Ben 1139546 KE8FRL Robert 1139547 W8GBL Carl @@ -7629,7 +7429,6 @@ 1139560 KC9BER Christopher 1139561 KA8YTS John 1139562 WB8OVQ Robert -1139563 KS8Z Jeffrey 1139564 KC8PDR William 1139565 KM8AM Kenneth 1139566 KM8Q Karen @@ -7673,7 +7472,7 @@ 1139604 KB8PSL Donald 1139605 KB8PSO James 1139606 W8RCH Richard -1139607 KE8HDE Dennis +1139607 W8ILD Dennis 1139608 KC0OOP Aaron 1139609 KC0OOP Aaron 1139610 KE8HHI Angela @@ -7767,7 +7566,7 @@ 1139702 WB8JIM James 1139703 KD8MFX Jody 1139704 WB8MVR Thomas -1139705 N8FWY Christopher +1139705 W8FWY Christopher 1139706 KD8QAC Elmer 1139707 KD8PLB Ronald 1139709 K8YIO Richard @@ -7790,7 +7589,6 @@ 1139726 N8YSF Joe 1139727 KB8ARL Brian 1139728 KE8DRK Philip -1139729 W8WDH Willard 1139730 WB8AIF Eric 1139731 KC8DEO Bennie 1139732 W8IXI John @@ -7818,7 +7616,6 @@ 1139754 KE8DBI Corey 1139755 KC8ZVR Lloyd 1139756 K8TDN Terry -1139757 N8RMS Richard 1139758 N8PVC John 1139759 N8WSU Stephanie 1139760 N8WSV Joshua @@ -7832,7 +7629,6 @@ 1139768 K8ERW Eric 1139769 KZ8TJW Tyler 1139770 N8XYM Michael -1139771 N8RMS Richard 1139772 W8AJS Arthur 1139773 N9FIJ Charles 1139775 KR0SIV Harold @@ -7869,7 +7665,7 @@ 1139814 KC8WBG Dawnn 1139815 KD8ATD Thomas 1139816 N8YFQ David -1139817 KB8LKH Daniel +1139817 KB8LKH 1139818 N8WOB Dan 1139819 KB8UBQ Harry 1139820 W8BUZ Roland @@ -7902,7 +7698,7 @@ 1139847 N8VDE Vickie 1139848 KD8WZL Fred 1139849 N8MLK Michael -1139850 W8WPP Joseph +1139850 W8WPP Joe 1139851 N8NSD Carl 1139853 KD8RGV Douglas 1139854 KD8WZL Fred @@ -7923,7 +7719,6 @@ 1139870 KC8OQI Jeffry 1139871 KC8WEB David 1139872 K8PEX Jeff -1139873 WA8UET Joseph 1139874 W8MCL Michael 1139875 KE8REH Robert 1139876 WD8AMJ Daniel @@ -7946,10 +7741,8 @@ 1139893 N8CUX Robert 1139894 KE8ECU Daniel 1139895 W8PRG Phil -1139896 NK8J Bradford 1139897 WW8TF Club 1139898 KB8WTA Daniel -1139899 NK8J Bradford 1139900 W8XR Mark 1139901 KD8CEC Seongho 1139902 KB6ZNS David @@ -8018,7 +7811,6 @@ 1139967 NG8Y Neal 1139968 KE8EKW Bobby 1139969 N9LBW John -1139970 KE8IFN Robert 1139971 WA8DWA Lynn 1139972 WA8LUC Gerald 1139973 KE8BKI Stephanie @@ -8065,7 +7857,6 @@ 1142016 W3IIY Christopher 1142017 N3BEK Brian 1142018 W3PNM William -1142019 KC3LEE Lee 1142020 NO3U Otto 1142021 KB3BUZ Tim 1142022 KB3OYN Matthew @@ -8075,7 +7866,6 @@ 1142027 W3DRV George 1142028 KC3EUV Christine 1142029 KC3JYK Jonathan -1142030 N3OKU Sandy 1142031 N3IGO James 1142032 W1FKB George 1142033 W3JPA Jose @@ -8110,7 +7900,6 @@ 1142062 NC3O John 1142063 WB3AVZ K 1142064 AC3OM Osiris -1142065 KB3TJP Kurt 1142066 W3HMS John 1142067 KC2RFZ Charles 1142068 KJ3K David @@ -8122,15 +7911,15 @@ 1142074 N3GWR J 1142075 WB3GZE Robert 1142076 KC3FSQ Nicholas -1142077 KC3KKN Craig -1142078 N3PNF Thomas +1142077 K3CRG Craig +1142078 N3PNF Tom 1142079 KB3WLV Juan 1142080 WA2CCN Henry 1142081 KB3WLV Juan 1142083 KB3KUM William 1142085 K3ZRT Jeremy 1142087 KC3FZA Mark -1142088 KC3DHB Jared +1142088 N3GMP Jared 1142089 AB3ME William 1142090 KC3FUN David 1142091 KC3JOI Victor @@ -8142,8 +7931,6 @@ 1142097 KC0QJX Gordon 1142098 KA2BRH Joseph 1142099 K4SC Charles -1142100 KC3IQQ Brad -1142101 K1NRA Paul 1142102 KC3ERD William 1142103 WB2HJQ Kenneth 1142104 KB3DJW Mark @@ -8170,7 +7957,7 @@ 1142125 N3YGW Joseph 1142126 KE3RG Bill 1142127 KC2OVW William -1142128 KC3ENT James +1142128 W2JRW James 1142129 KS3X Enoch 1142130 KC3EUJ William 1142131 N3GTO Stephen @@ -8184,31 +7971,26 @@ 1142140 AI3N Donald 1142141 WA3LBR Lee 1142142 KC3HJP Curtis -1142143 KC3LEE Lee 1142144 KB3FCJ Timothy 1142145 KC3JIG Michael 1142146 KC3DKU Joseph -1142147 W3DDS Michael +1142147 W3DDS 1142148 K3JCS Jim 1142149 N3PIA Louise -1142150 W3DDS Michael -1142152 KC8BV Robert +1142150 W3DDS +1142152 N1DT Robert 1142153 KB3Z Mark -1142154 K3IHI Luis -1142156 NF3Q John -1142157 N3JOX Edward 1142158 KB3SWW Bradly 1142159 W3II Mark 1142160 N3GTK Allan -1142161 KC3KPE Dewey +1142161 N3CNC Dewey 1142162 N3TAY Jeffrie 1142163 KB3SKD Stephen -1142164 KC3KPE Dewey +1142164 N3CNC Dewey 1142165 KE3AAR -1142166 KB3SBC Walter 1142167 KE3RT Keith 1142168 K3HLJ Harold -1142171 KC3KSB Michael +1142171 K3KSB Michael 1142172 KC3KUB Joseph 1142173 W3ADC John 1142174 KC3KVC Matthew @@ -8280,11 +8062,10 @@ 1142247 N1MCY Matthew 1142248 KA3NBS Douglas 1142249 KA3NBS Douglas -1142250 KS3M Warren 1142251 K1BIX Rusty 1142252 AA3EI Hani -1142253 N3PNF Thomas -1142254 KC3LAW Ryan +1142253 N3PNF Tom +1142254 N3RWX Ryan 1142255 KA3MPP Jon 1142256 N3OMA Andrew 1142257 KB3JLU Casey @@ -8312,7 +8093,6 @@ 1142279 KE3DL William 1142280 KA3RAO Joseph 1142281 KB3ZQJ Joseph -1142282 KB3ZQJ Joseph 1142284 KC2LEB James 1142285 KC3LDF Micah 1142286 WA3YTE Charles @@ -8342,7 +8122,7 @@ 1142312 N3PVZ Christopher 1142313 KC3HAZ Glenn 1142314 KB1EAR Kristian -1142315 KD5CEU Daniel +1142315 KD3CEU Daniel 1142316 KC3LFP Brian 1142318 KB3MOX Margaret 1142319 AB3WX Titus @@ -8367,13 +8147,12 @@ 1147018 W4MF Jimmy 1147019 N4KFD James 1147020 N4KAB Bryan -1147021 W4NWT Bobby 1147026 KJ4BOR Jmcgh 1147027 WA4VSC James 1147028 KW4IJ Victor 1147029 KV4LF Edward 1147030 KI4BSL Jeremy -1147033 KN4LGI Benjamin +1147033 WI1LOW Benjamin 1147034 KN4LCS James 1147035 KK4BLU Nicholas 1147036 KN4LCT Phillip @@ -8389,14 +8168,12 @@ 1147049 KD4ZDZ Charles 1147050 KA9VAU Paul 1147051 KK4LTK Christopher -1147052 KI4FYQ Jeremy 1147053 W4APX Michael 1147056 KJ4ZXW 1147057 KJ4ZXW 1147058 KJ4IML Allen 1147059 KJ4IML Allen 1147061 W4LKZ Sumner -1147062 WB4SLI 1147063 KD9HDQ James 1147064 WB4BLY Joe 1147065 KM4SYN James @@ -8442,7 +8219,7 @@ 1148039 K5TBN Thomas 1148040 KB5JTJ Dexter 1148041 WM5L James -1148042 W5HTA Michael +1148042 W5MW Michael 1148043 KC5LAA John 1148044 W5GXL Dean 1148045 KC5FAZ Hiley @@ -8482,7 +8259,7 @@ 1148081 N5JLD Jon 1148082 KD5QQX Bryan 1148083 KG5PLQ Gary -1148084 KF5YHP Ravi +1148084 N5OL Ravi 1148085 KG5MFG Joe 1148086 N5ALF John 1148087 KF5MG Mark @@ -8513,7 +8290,6 @@ 1148112 N5BOC David 1148113 W5TCD Thomas 1148114 KE5Q James -1148115 KC5DHM William 1148116 K8KC David 1148117 N5ECP Jeffery 1148118 KC4CMX William @@ -8551,7 +8327,7 @@ 1148150 WE5K Stephen 1148151 KC5HS George 1148152 WA5MD Timothy -1148153 K5MSI Dennis +1148153 W1BUB Dennis 1148154 K5QFI Dennis 1148155 N5OAH Daniel 1148156 AG5IR Remi @@ -8578,7 +8354,7 @@ 1148177 KG5QAD Samuel 1148178 W5WN James 1148179 KG5ZEP Christanya -1148180 K2BSA K2bsa +1148180 K2BSA K2BSA 1148181 N2DZL W 1148182 K4UKB Marshall 1148183 K7DAM Douglas @@ -8665,7 +8441,6 @@ 1148264 N5ZRU Kenneth 1148265 KE5PPH Mark 1148266 KE5ZPP Richard -1148267 WB5RVV Joe 1148268 W5HEX Terry 1148269 AA5WX Michael 1148270 KC5ORU Anthony @@ -8686,7 +8461,6 @@ 1148285 W5NJK Scott 1148286 KG5RKD Steven 1148287 KG5RYL Steven -1148288 N1VQM Dirk 1148289 KF4X Berwin 1148290 KG5TBQ James 1148291 KD9EPV Gina @@ -8709,7 +8483,6 @@ 1148308 KC5COF Chris 1148309 KG5CJI Robert 1148310 KG5EBI Joshua -1148311 KD8YYA James 1148312 WB5LJO Martin 1148313 N5FAZ Paul 1148314 KF5BRL Roland @@ -8744,9 +8517,7 @@ 1148343 KK6IKW Juan 1148344 KG5TBR Rodney 1148345 K5TTB Lois -1148346 W5DTB Daren 1148347 KC5TSU Heath -1148348 WB5CTQ Charles 1148349 KF4X Berwin 1148350 N6CCB Christine 1148351 W0ZOE Zoey @@ -8754,7 +8525,6 @@ 1148353 W5BV Bill 1148354 N5APW Andrew 1148355 KD5VMF Adam -1148356 KA5TRQ John 1148357 K0JMB Joshua 1148358 KJ6KRW Jose 1148359 KG5TBO Jason @@ -8838,8 +8608,6 @@ 1148443 AD5ZP George 1148444 KE5PCC Tuan 1148445 N5SDD Stephen -1148446 N5GI Richard -1148447 KE5PIP Gloria 1148448 KF5EPF Melissa 1148449 KF5LJD Cecil 1148450 KG5TRG William @@ -8917,18 +8685,15 @@ 1148525 N5YIZ Preston 1148527 KF5WVW Brandon 1148528 KG5SYN Michael -1148529 WA5DKW James 1148530 W5PFG Clayton 1148531 W5CEH Charles 1148532 K5LA Floyd -1148533 KB6JYF Michael 1148534 WA5JV Jimmie 1148535 WM5U Charles 1148536 KG5UDQ Ray 1148537 KG5UDQ Ray 1148539 KG5RKM Thomas 1148540 KE5ICX Thomas -1148541 KG5UBV Jason 1148542 K5GH George 1148543 KF5LW Joseph 1148544 K5GH George @@ -8942,11 +8707,11 @@ 1148554 KE5NCI Cory 1148555 N5EN Neal 1148556 K5SVV Steve -1148557 KA1GMN Philip +1148557 W1ZOT Philip 1148559 WM5U Charles 1148560 KF5GGS Linda 1148563 KD5VMF Adam -1148564 KG5TNK Ryan +1148564 K4TXN Ryan 1148565 KD5BYN Gary 1148566 KG5CC Alan 1148568 KG5EJJ Christopher @@ -8960,7 +8725,7 @@ 1148577 KG4CEW Cody 1148578 KG5CEW Cody 1148580 KB5DRJ David -1148581 KG5UIL Tim +1148581 KK5TIM Tim 1148582 KF5TSK Birl 1148583 AF5QX Ollie 1148584 KE5EUR Marvin @@ -9018,10 +8783,9 @@ 1148636 K5GU Leland 1148637 K1SAT Jerry 1148639 KE5JPM Thresa -1148640 KI5LP Brian +1148640 WS5H Brian 1148641 K5DLQ Darryl 1148642 KG5VT Guy -1148643 KG5UBV Jason 1148644 W5LL Lyndon 1148645 W5AGM Jeffery 1148646 W5KEY Jon @@ -9046,7 +8810,6 @@ 1148665 KD5ZBB Derek 1148666 K5HDW Harold 1148667 KG5JVN Eric -1148668 KG5MNT Daniel 1148669 KG5SNT Eric 1148670 KG5UUK Russell 1148671 KB5RUR Stacey @@ -9057,11 +8820,10 @@ 1148676 KF5BAU Carl 1148677 W5BNW Clifford 1148678 KE5BAP Steven -1148679 KG5IEF Pat 1148680 KO5RP Robert 1148681 N6ELF Ben 1148682 N5JLW Jack -1148683 W5TUX David +1148683 W5TUX Rick 1148684 N5DZO Leo 1148685 W5FRN Lee 1148686 KE5GTW Charles @@ -9140,7 +8902,7 @@ 1148761 N5JLP Gerald 1148762 K0MEB Michael 1148763 KB5YYK Johnny -1148764 KG5VDH Myron +1148764 AA5MY Myron 1148765 K5JC Jerry 1148766 N5SME James 1148767 WD5KAL Michael @@ -9150,7 +8912,6 @@ 1148772 WA9POK Robert 1148773 N5ALF John 1148774 KG5VGM Matthew -1148775 N1QDG Wayne 1148777 K5YJE Thomas 1148778 N5TQ Walter 1148779 K5RPW Robert @@ -9182,6 +8943,7 @@ 1148805 N5GG Colin 1148806 K5VOM Dan 1148807 KC5TOO George +1148808 KE5EN Eric 1148809 KG5LQL Kenneth 1148810 W5ZIT James 1148811 KG5VHM Frank @@ -9268,7 +9030,6 @@ 1148895 KG5BFI Trevor 1148896 N5JHP Gary 1148897 KM5BG Stephen -1148898 KG5TVX Brian 1148900 KG5TRL Paul 1148901 WX5ATX Tyler 1148902 WN5TL Thomas @@ -9278,7 +9039,6 @@ 1148906 KC5CZC Thomas 1148907 WB5KSD Jonathan 1148908 W5KZP Kenneth -1148909 K5CAP Craig 1148910 WB5UGT Steven 1148911 N5BIG Curtis 1148912 KF5YWU Rogelio @@ -9320,14 +9080,12 @@ 1148949 K5HJ Charles 1148950 AD5CA Mark 1148951 KG5WCZ Ty -1148952 WB6RQN Brian 1148953 KG5QVV Patrick 1148954 KC5FFK Stephen 1148955 KF5SNL John 1148957 W5NLP Lance 1148958 J79BPL Brian 1148959 K5YDD Henry -1148960 KA5TRQ John 1148961 KA5KEH Ferrell 1148962 KD5CEV Willie 1148963 AE5YS Thomas @@ -9421,7 +9179,6 @@ 1151062 N8VH Dennis 1151063 N8VH Dennis 1151064 WA4KP Kenneth -1151065 KM4COG John 1151066 AF4WR Michael 1151067 KG4OTJ Christine 1151068 N4JOW Joseph @@ -9434,7 +9191,6 @@ 1151076 KC4YLX Edward 1151077 KI8GM Carl 1151078 KF4RGH Helen -1151079 KN4FYR Dan 1151080 KM4MDB Daniel 1151081 W4JOR Jason 1151082 W4JOR Jason @@ -9494,7 +9250,7 @@ 1151137 KK4OWU Michael 1151138 KG4VEA Brad 1151139 KE4PKR Clyde -1151140 KK4MWO Ray +1151140 WT4B Ray 1151141 WA4ESI Thomas 1151142 WB9HGZ Paul 1151143 N4TRQ Arthur @@ -9507,8 +9263,8 @@ 1151150 N3HD Robert 1151151 K4CUE Richard 1151152 KM4WNS Fengping -1151153 KD4FIK Brian -1151154 KD4FIK Brian +1151153 K4IJ Brian +1151154 K4IJ Brian 1151155 N4AIX Ray 1151156 K0KMR Kevin 1151157 N3HD Robert @@ -9519,7 +9275,7 @@ 1151162 KK4MJB Bruce 1151163 N4PDY Michael 1151164 WF7B John -1151165 N4GGB Gerald +1151165 N4KR Gerald 1151166 KD4MLP Mary 1151167 WF7B John 1151168 KJ4CNN Jorg @@ -9547,7 +9303,6 @@ 1151190 NO5RM Norman 1151191 KD4LEM Jason 1151192 N4RQZ Edward -1151193 NU3H Donald 1151194 KN4EAR Michael 1151195 KK4UZA Seth 1151196 W4KRL Karl @@ -9556,7 +9311,6 @@ 1151199 KM4KAQ Eric 1151200 KA1UGM John 1151201 WA4MAS Manning -1151203 W4KVB John 1151204 KM4CXD Joshua 1151205 W3CN Carroll 1151206 KK4RAO Daniel @@ -9570,7 +9324,6 @@ 1151214 KI4ECY Carlos 1151216 KR4FS William 1151217 K4EBS John -1151218 WD4KHP Edward 1151219 N3EVT Gerald 1151220 KM4WUP Alvin 1151221 K4CVA Richard @@ -9592,10 +9345,10 @@ 1151239 KM4RTF Troy 1151240 K4CMQ Paul 1151241 K4CMQ Paul -1151242 W4DSH Richard +1151242 NS6S Richard 1151244 KN4LJG Gary 1151245 KN4LJG Gary -1151246 W4DSH Richard +1151246 NS6S Richard 1151247 KM4RDR Scott 1151249 KG7HJG Richard 1151250 W4PCK Paul @@ -9651,7 +9404,7 @@ 1157034 W4MIG Marvin 1157035 KC4DEA Chris 1157036 WB4IMT Michael -1157037 KA2OOR Joseph +1157037 N4ADI Joseph 1157038 KC4UUM Donald 1157039 KN4LUK Marc 1157040 KM3GIR Mauricio @@ -9839,7 +9592,7 @@ 2021177 SV1KXS Perseas 2021178 SV1FJM SPYROS 2021179 SY1BVU VELOS -2021180 SV1BCV SV1BCV +2021180 SV1BCV CHRISTOS 2021181 SV1QA NIKOLAS 2021182 SY1BRY MICHALIS 2021183 SV1EKV Michael @@ -9861,12 +9614,12 @@ 2021199 SV1LJX SV1LJX 2021200 SV1GGY GEORGE 2021201 SV1SEA Theodore -2021202 SV1GAN SV1GAN +2021202 SV1GAN Nikos 2021203 SY1AKP KYRIAKOS 2021204 SV1AMH Dimitris 2021205 SV1IWL JIM 2021206 SV1EJA Dimitris -2021207 SV8GTM GEORGE +2021207 SV1SJL IOANNIS 2021208 SV1KML CHRISTOS 2021209 SV1FXF Manolis 2021210 SV1CJA VASILIS @@ -9899,7 +9652,7 @@ 2021237 SV1RZX SV1RZX 2021238 SY1BRU SY1BRU-LTE 2021239 SV1SAW KONSTANTINOS -2021240 SY1ABW GERASIMOS +2021240 SY1ABW NIKOLAOS 2021241 SV1MNX KOSTAS 2021242 SY1CJH MIKATSAN 2021243 SY1CTF Nikos @@ -9915,7 +9668,218 @@ 2021253 SV1FKI Vanggelis 2021254 SV1ALX VanAlex 2021255 SV1ELI SV1ELI +2021256 SV1GAZ ANTONIS 2021257 SY1CCW TASOS +2021258 SV1SAF YIANIS +2021259 SY1CRP Nikolaos +2021260 SV1JRD Vagelis +2021261 SV1EII PAVLOS +2021262 SV1COK Georgios +2021263 SV1FMT Thanasis +2021264 SV1KLU GREGORY +2021265 SY1BMI KONSTANTINOS +2021266 SV1HFD THODORIS +2021267 SV1FZI NIKOLAOS +2021268 SV1EXC ILIAS +2021269 SV1KYZ NIKOS +2021270 SV1GRV GIORGOS +2021271 SV1DKJ VASILIS +2021272 SV1FKA KOSTAS +2021273 SV1DES SV1DES +2021274 SV1QVZ KONSTANTINOS +2021275 SV1EQE Konstantinos +2021276 SV1SGT SV1SGT +2021277 SV1ENJ Yiannis +2021278 SV1EGN SOKRATIS +2021279 SY1BWC Georgios +2021280 SW1NZF Nikos +2021281 SY1BFJ Christos +2021282 SV1KSH Lampros +2021283 SY1BMB MANOUSOS +2021284 SY1BMC Harris +2021285 SV1QEO Aggelos +2021286 SV1EAG GEORGE +2021287 SV1LIP Vasilis +2021288 SY1CTM 007pcservice.gr +2021289 SV1EOI ANDREAS +2021290 SY1CTE Artemios +2021291 SV1NQK ARISBEAR +2021292 SV1EFO ELIAS +2021293 SV1BKE Manolis +2021294 SV1AAW JOHN +2021295 SV1HBS DIMITRIS +2021296 SY1CTX MANOS +2021297 SV1ONV Michalis +2021298 SV1PMG Michael +2021299 SV1JAB Chris +2021300 SV4NYZ Avraam +2021301 SV1FTP TRYFONAS +2021302 SV1JSX Vangelis +2021303 SV1SGA NIKOLAOS +2021304 SV1LF ALEX +2021305 SY1CDK NIKOLAS +2021306 SV8CYW AeOouu +2021307 SV1LHZ JIM +2021308 SV1KWN YIANNIS +2021309 SV1MRW KOSTAS +2021310 SV1EUK VAGGELIS +2021311 SV1BPH DIMITRIS +2021312 SV1UL KONSTANTINOS +2021313 SV1RYL Michail +2021314 SV0CY NICOLAS +2021315 SV1SEE Athina +2021316 SY1CHI Mairylin +2021317 SV1GGD Vasilis +2021318 SV1SEB Giannis +2021319 SV0XBY Phil +2021320 SV1BLD SV1BLD +2021321 SV1CNS Vasilis +2021322 SV1KWA GRIGORIS +2021323 SV1PIB SV1PIB +2021324 SV1BPA THEOFILOS +2021325 SV1SGC IOANNIS +2021326 SY1BLU Aris +2021327 SY1BVW ANGELOSEFTH +2021328 SV1OML Ioannis +2021329 SV1IWP SV1IWP +2021330 SV1RK MIKE +2021331 SV1SDD Fotis +2021332 SV1GZE Christos +2021333 SY1AKF Paul +2021334 SV1OBT Dsap +2021335 SV1SCU Tommy +2021336 SV1SIM Stratos +2021337 SV1QXX THODORIS +2021338 SY1CXM Michalis +2021339 SV1RRG Nikos +2021340 SY1CVL NIKOS +2021341 SV1RVP Alexandros +2021342 SY1CVS Dionysios +2021343 SV1BPP VASPAN +2021344 SV1SJD Dimitrios +2021345 SV1QXU GEORGIA +2021346 SY1CEA DIONYSIS +2021347 SY1CVR JIM +2021348 SV1OCA LEONIDAS +2021349 SV1XY DINO +2021350 SY1CXB Gregory +2021351 SY1BMJ CHRIS +2021352 SV1PDY Petros +2021353 SV1SJP DIMITRIOS +2021354 SY1CXJ Neo +2021355 SV1RVD GEORGIOS +2021356 SV1AAU Stelios +2021357 SV1AHX ANDREAS +2021358 SV1SHL Nikolaos +2021359 SV1LJJ Apostolos +2021360 SY1COE Christos +2021361 SV1SHX Kostas +2021362 SV1NK SV1NK +2021363 SY1CRR THEODOROS +2021364 SV1SJJ SV1SJJ +2021365 SV1SLF Panos +2021366 SV1SLE MANOS +2021367 SV1BTL Emmanuel +2021368 SV1AMY Dimitris +2021369 SV8GGL Yioryos +2021370 SV1BPU THEO +2021371 SY1CNH GEORGE +2021372 SV1SEG PANAGIOTIS +2021373 SV8CRJ ACHILLEFS +2021374 SV1BDO SOTIRIS +2021375 SV5FRI Yiannis +2021376 SY1ALD Thanasis +2021377 SV1EGS SPYROS +2021378 SV1IWD PANTELIS +2021379 SV1ABB YIANNIS +2021380 SV1GCH KOSTAS +2021381 SV1PMZ SPIROS +2021382 SV1SDA DIMITRIOS +2021383 SV1EEZ Yiannis +2021384 SY1ABN Antonis +2021385 SV1FMT Thanasis +2021386 SV1KP Natasha +2021387 SV8KMY Dionysis +2021388 SY1CVQ Yiannis +2021389 SV1BGM Fanis +2021390 SV1OMD EFROSINOS +2021391 SY1AGO GEORGE +2021392 SV1EGM DIMITRIS_EGM +2021393 SV1OBF Fotis +2021394 SV1SFZ Yannis +2021395 SV1GFG MICHAIL +2021396 SV1SBA Anestis +2021397 SY1CIX GG +2021398 SV1DAT Dimitris +2021399 SY1AXB Antonios +2021400 SV1EEY IOANNIS +2021401 SV1RVI GEORGE +2021402 SV1IUY APOSTOLOS +2021403 SY1CRU CHRISTOS +2021404 SV1GFM VASILI +2021405 SV3QUY KONSTANTINOS +2021406 SV1FJ IOANNIS +2021407 SV1CRN GiannopoulosN +2021408 SV1CIK SPYROS +2021409 SV1JCQ JOHN +2021410 SY1CXN Electrion +2021411 SY1ACD PANAGIOTHS +2021412 SV1QVY Peter +2021413 SV1QZV SV1QZV +2021414 SY1CIS SY1CIS +2021415 SV2GQM KOSTAS +2021416 SV1QFK DIMITRIOS +2021417 SV1OME GEORGIOS +2021418 SV1QZH VALERGIANOS +2021419 SV1RSP SV1RSP +2021420 SV1OCO Fotis +2021421 SV1NPP KATERINA +2021422 SY1CNU LEFTERIS +2021423 SY1CRT SY1CRT +2021424 SV1FTU BILL +2021425 SV1PLP NIKOS +2021426 SY1BSG PANOS +2021427 SV1NJJ Manolis +2021429 SY1CTL Fauda +2021430 SV1PBQ IOANNIS +2021431 SV1GGB ATHANASIOS +2021432 SY1APS DIMITRIOS +2021433 SV1CDY GEORGE +2021434 SY1ACK AGGELOS +2021435 SV1SLC MANOS +2021436 SV1SLF Panos +2021438 SY1ADC DIMITRIOS +2021439 SV1JTP PETROS +2021440 SY1DAK Giannis +2021441 SV1GRA Nikos +2021442 SY1DBG KOSTAS +2021443 SY1DBS Panagiotis +2021444 SV1SLO Panagiotis +2021445 SV1LJS Thanasis +2021446 SY1DBR MANOS +2021447 SV1NQV Theo +2021448 SV0DR Dimitri +2021449 SV1JSC Sofos +2021450 SV1SLN DIONYSIOS +2021451 SV1SLR Dimitris +2021452 SV1DEC NIK +2021453 SV1AHE Paris +2021454 SZ1SV RAAG +2021455 SV1GAN NIKOS +2021456 SV2BZM DIMITRIS +2021457 SV1EKB MICHALIS +2021458 SV1KLN Giannis +2021460 SY1CXO Evangelos +2021461 SV1OUH Sv1ouh +2021462 SV1SHP NIKOS +2021463 SV1EKA TAKHS +2021464 SZ1GGPP KEPP/GGPP +2021465 SV1PDB KONSTANTINOS +2021466 SV1QEL IOANNIS +2021467 SV1JFS ANDREAS +2021468 SV1PMT VYZANTIOS +2021469 SY1ABT ANESTHS +2021470 SV1EKF ALEXANDOS 2022001 SV2XI Kleanthis 2022002 SV2RGC Konstantinos 2022003 SV2LLJ Giannis @@ -9940,7 +9904,7 @@ 2022022 SV2GQN Aris 2022023 SV2HOQ Aikaterini 2022024 SV2HPH Konstantinos -2022025 SV7CUD Panagiotis +2022025 SY2CEO Dimitris 2022026 SV2AYW Andrew 2022027 SY2CCN Lefteris 2022028 SV2BXZ Fotis @@ -9982,7 +9946,7 @@ 2022064 SV2YJ PANOS 2022065 SV2TX PAUL 2022066 SV2CBS Fokion -2022067 SV2EVS SX +2022067 SV2EVS Spiros 2022068 SV2ESW Pantelis 2022069 SV2CQC John 2022070 SY2CAK ALEXANDROS @@ -10035,9 +9999,95 @@ 2022117 SV2CVA VASILEIOS 2022118 SV7LNG Dimitris 2022119 SV7OPI George +2022120 SV7OON Vasilis +2022121 SV2GWY DIMITRIOS +2022122 SV2RCV GEORGE +2022123 SY2CCM Antoleno +2022124 SY2BOG SY2BOG +2022125 SV2ROC TONY +2022126 SY2CCO Antonios +2022127 SV2HWL STAVROS +2022128 SV2SET Tsaff +2022129 SV2HNG George +2022130 SV2GNJ Sei +2022131 SY2CLK Sokrates +2022132 SW2HZZ PANAGIOTIS +2022133 SV2HSH SAVVAS +2022134 SV2SEQ BUKAS +2022135 SV2HRG PAS +2022136 SV2QQT Dimosthenis +2022137 SY2AAN DAMIANOS +2022138 SV2CTV Athanasios +2022139 SV2XI Sv2xi +2022140 SY2CRH Gewrgios +2022141 SV2GWS Apostolos +2022142 SV2DCB GEORGIOS +2022143 SV2SBG Aris950 +2022144 SV2HRY STAVROS +2022145 SV2KGF Giorgos +2022146 SV2HRT Pablo +2022147 SV2RPV CHRISTOFYLLIS +2022148 SY2CWL MAKIS +2022149 SV2CWV KONSTANTINOS +2022150 SV2FPM Nikolas +2022151 SY2CWI Theo-m +2022152 SY2CWM Tasos +2022153 SV2DFT SV2DFT +2022154 SV2RWX FASTMIDIS +2022155 SY2CPI Dimitris +2022156 SY2CWJ Angelos +2022157 SY2CXQ ANASTASIA +2022158 SV2HSG ARISTOGEITON +2022159 SV7ERB VANGELIS +2022160 SY2BXO Kostas +2022161 SV2HRU Alexandros +2022162 SV2RMV Mpampis +2022163 SV2OIP PATER +2022164 SV2RNY Ioannis +2022165 SY2BYE Father +2022166 SV2HTJ PANAGIOTIS +2022167 SV2DFT SV2DFT +2022168 SY2BDF Mike +2022169 SV2SIG KONSTANTINOS +2022170 SY2AVI Dimitris +2022172 SV2HQJ VASILIS +2022173 SY2CGP Thomas +2022174 SV2ESR KOSTANTINOS +2022176 SW2HYF Makis +2022177 SV2OEA DIMITRIS +2022178 SY2CYZ Saimon +2022179 SV2HYH STRATOS +2022180 SV2HYB DIMITRIS +2022181 SY2CKF Lazaros +2022182 SV2SHA Vangelis +2022183 SV0EG ALEX +2022184 SV2HZC ALEKOS +2022185 SV2EVS Sv2evsHotSpot +2022186 SV2RSL Ernest +2022188 SV2SGZ Maria +2022189 SV2EWG George +2022190 SV2QQR SV2QQR +2022191 SY2BKJ Baloo +2022192 SV2SLA Lazaros +2022193 SV2DGB Anastasios +2022194 SV2GNL STAMATIS +2022195 SY2CRJ Sakis +2022196 SV2RLV ARIS +2022197 SV2AOK TASOS +2022198 SV2RBC Panagiotis +2022199 SV2DSJ PANOS-SV2DSJ +2022200 SV2RGG George +2022201 SV2GNX Triantafyllos +2022203 SV2AJX PACO +2022204 SV2FLG GEORGIOS +2022205 SV2IPX Christos +2022206 SV2MAK KONSTANTINOS +2022207 SV2NUB Mixalis +2022208 SV2CXU GEORGE +2022209 SV2HRW Iosif 2023001 SV3BSF Nick 2023002 SY3BOQ Thanos -2023003 SV3BEO Beo +2023003 SV3BEO Spiros 2023004 SV3MGU Nikos 2023005 SV3RNJ Piotr 2023006 SY3ABH Stathis @@ -10067,6 +10117,55 @@ 2023030 SY3CSX GOMEZ 2023031 SY3BUC IOANNIS 2023032 SV1GCB Dimitris +2023033 SV3MYJ SV3MYJ +2023034 SY3BDX STELIOS +2023035 SY3CRC SY3CRC +2023036 SV3DVK Kaitsas +2023037 SV3CYL Kostas +2023038 SV3QUB George +2023039 SV3SFK George +2023040 SV3DVW Nasos +2023041 SV3IVF Eizo +2023042 SV3ORE Theotokis +2023043 SV3SFJ Athanasios +2023044 SV3GKU ASTRALEKOS +2023045 SV3QUG Aieae +2023046 SY3BEJ Georgios +2023047 SV3IBF KOSTAS +2023048 SV3SFH GEORGIOS +2023049 SV3GOE Dimitris +2023050 SV3QUD Adreas +2023051 SV3QUG Theodoros +2023052 SV3FUP ARISTIDIS +2023053 SV3GOG SV3GOG +2023054 SV3RJT Nikos +2023055 SZ3P E.R.DY.P +2023056 SV3IEG Dinos +2023057 SV3BEF Xenofon +2023058 SV3RZK Babis +2023059 SV3QUP George +2023060 SY3CMV PARASKEVAS +2023061 SY3BEQ DIMITRIS +2023062 SY3CGR Stergios +2023063 SV1EEF STEVE +2023064 SV3GOW Ioannis +2023065 SV3MGO Paulos +2023066 SV3ARF Sv3arf +2023067 SV3CNM Anastasios +2023068 SV3DVO MANOLIS +2023069 SV3BEL GEORGE +2023070 SZ3PMBG SZ3PMBG19 +2023071 SY3ADB GIORGOS +2023072 SY3AZH NIKOS +2023073 SY3BEL Asimakis +2023074 SV3IDB Gerasimos +2023075 SV3SKM Dimtris +2023076 SV3GLI COSTAS +2023078 SV3IRN Giorgos +2023079 SV3CHF Akis +2023080 SV3NQG ALEXANDROS +2023081 SY3BEM PETROS +2023083 SY3CJZ Vassilis 2024001 SV4QXF Efthimios 2024002 SV4LRX Asot 2024003 SV4IKA Ikas @@ -10100,15 +10199,60 @@ 2024031 SV4RJY Dinos 2024032 SV7JWY Tsopi 2024033 SY4CHT PANOS +2024034 SV4BPG GEORGIOS +2024035 SV4NLT NIKOLAOS +2024036 SV4JER VASILIS +2024037 SV4JYP Valantis +2024038 SV4MZT AGGELOS +2024039 SV4MZI FOTIS +2024040 SV4SAT VASILIOS +2024041 SV4LAV Apostolis +2024042 SY4CTU ILIAS +2024043 SY4CLZ VAIOS +2024044 SV4QXI AacAe +2024045 SV4DDM SPYROS +2024046 SV4FFL Costas +2024047 SV2GJV GEORGIOS +2024048 SY4CCD Bill +2024049 SV4SLQ Tom +2024050 SV4KZO EVANGELOS +2024051 SY4AIR GEORGIOS +2024052 SV4RHJ IOANNIS +2024053 SV4NLD Giorgos +2024054 SV4LAH Chris 2025001 SV5KKU Lakis 2025002 SV5KJT TASO 2025003 SV5KKU Lakis 2025004 SY5ARO Dimitris 2025005 SV5BYP Lefteris +2025006 SV5PFO MANOLIS +2025007 SV5RW Dimitris +2025009 SV5KJS Spyros +2025010 SY5CHO PAPAVASILEIOU +2025011 SV5AZK Panos +2025012 SV5CJK FILOLAOS +2025013 SV5SAK MINAS +2025014 SV5SKH DIMOS +2025015 SV5SKI Thanos +2025016 SV5DDT CHRIS +2025017 SV5BOP ROSS +2025018 SY5COS Kyriakos +2025019 SV5AZP Bill +2025020 SV5SHK PANOS +2025021 SY5ARU Sevastos +2025022 SV5SAL Mixalis_Poulios +2025023 SV5QNF Fotis +2025024 SV5QNA Stefanos +2025025 SV5AZK Panos +2025026 SV5BYR Mike +2025027 SV5ADL Michail +2025028 SV5KKA DIMITRIOS +2025029 SV5SKG Vassilis +2025030 SV5AJJ VASILIS 2026001 SV6RDR Konstantinos 2026002 SV6GIK Arispyl 2026003 SV2HQL Asteris -2026004 SV7LWW BIL +2026004 SV6LWW BIL 2026005 SV6DBG Golfis 2026006 SV6RDK Jimmy 2026007 SY6AZC George @@ -10146,6 +10290,19 @@ 2026039 SV6JUD Chris 2026040 SV6BAT Tasos 2026041 SV6CZR DIMITRIS +2026042 SY6CUT Dimitris_M +2026043 SV1EPC MANOS +2026044 SV6LWW VASILIS +2026045 SV6GMR THEO-SV6GMR +2026046 SV6HEF Takis +2026047 SV6EXM Tolios +2026048 SV6GIL Mihalis +2026049 SV6JUN KOSTAS +2026050 SV6RDW ANGELOS +2026051 SV6JUV TIMOS +2026052 SV6HMD Sv6hmd +2026053 SZ6ARTA SZ6ARTA +2026054 SV6NOL Rena 2027001 SV7GBI Kostas 2027002 SV7DHC SOFIANOS 2027003 SV7JKL Dimitris @@ -10183,17 +10340,46 @@ 2027036 SV2SFG SerresFox 2027037 SV7BVL Kostas 2027038 SV7RNI Giorgos +2027039 SV7NHN Jim +2027040 SV7CFK Panos +2027041 SV7SEW Petros +2027042 SV7JJY George +2027043 SV7CUL Spiros +2027044 SV7JLU ELENI +2027045 SV2HSM Stelios +2027046 SV7JXN Berry +2027047 SV7JXN Dimitris +2027048 SV7OWA Kostis +2027049 SV7APQ ACHILLES +2027050 SV7LYG George +2027051 SY7CVF Georgios +2027052 SY7CVE Pantelis_Chaviaras +2027053 SV7GX NICK +2027055 SV7JAX GEORGE +2027056 SY7AHL VALLI +2027057 SV2HTY IOSIF +2027058 SV7BOX Apostolos +2027059 SV7JLC Sokratis +2027060 SV7JKV OCK +2027061 SV7GBY NATASA +2027062 SV7DMG Andreas +2027064 SV7LFB Vasilis +2027065 SY7CFZ IREK +2027066 SV7KDU KDU +2027067 SV7BZC Panagiotis +2027068 SV7NHL GIORGOS +2027069 SV7SMJ Andrikos 2028001 SV8KOA Nikos 2028002 SV8FMY Ilias 2028003 SV8BUR Perry 2028004 SV8AWD Dimitris 2028005 SY8BGZ Antonios -2028006 SW8GTH SPYROS +2028006 SV8GTH SPYROS 2028007 SV8FCC SV8FCC 2028008 SV8GTR Sv8gtr 2028009 SV8PKF LEFTERIS 2028010 SY8ACX NIKOS -2028011 SV8FEE BULLET +2028011 SV8FEE GEORGE 2028012 SY8CLF KILOWATT 2028013 SV8JVA Vasilis 2028014 SZ8NX NaxosDxClub @@ -10210,6 +10396,46 @@ 2028025 SV8FEI MATHEOS 2028026 SV8KUN IOANNIS 2028027 SY8CLI MILTOS +2028028 SV1GZG KONSTANTINOY +2028029 SV1GZG Konstantinou +2028030 SV8GTC Nikos +2028031 SV8LMA George +2028032 SV8RYH DMANT +2028033 SV8LMQ DIMITRIOS +2028034 SY8PEK GPACHIS-KERKYRA +2028035 SV8GTD Andreas +2028036 SV8RSX Jim +2028037 SV8SIU Makis +2028038 SV8GTF Konstantinos +2028039 SV8BEV KONSTANTINOS +2028040 SZ8CFU SZ8CFU +2028041 SV8GXQ Isidoros +2028042 SV1EUS SV1EUS +2028043 SV8OVP Panagiotis +2028044 SV8SIV Makis +2028045 SY8PEL S.kontis +2028046 SY8PEJ S.leftheriotis +2028047 SY8BEB IOANNIS +2028048 SV8SLI N.PAGKRATIS +2028049 SV8SKA N.SOUPIONIS +2028050 SV8NBI S. +2028051 SV8JVH Elias +2028052 SV8IIS DIMITRIS +2028053 SV8GTX SPIRIDON +2028054 SV8GTL SKORPIOS +2028055 SV8KUV Mixalis +2028056 SV8SLJ N.SKIADOPOULOS +2028057 SV8GTB LAERTIS +2028058 SY8CLA A.MORAITIS +2028059 SV8GTM George +2028060 SV8FCA GEORGIOS +2028061 SY8CLJ STEFANOS +2028062 SY8BHQ CHRIS +2028063 SV8FEZ Nikos +2028064 SV8SJZ GOULENIS +2028065 SV8CYP MANOLIS +2028066 SV8IWJ EYAGGELOS +2028068 SY8DCZ PRITANIS 2029001 SV9DKB Ioannis 2029002 SV9AFG Dimitrios 2029003 SV9RPL Philip @@ -10253,6 +10479,60 @@ 2029041 SY9BDJ CHRISTOS 2029042 SY9AIB NIKOS 2029043 SV9QCF IOANNIS +2029044 SY9AAE Dimitris +2029045 SV9RJK Yiannis-Heraklion +2029046 SV9IOR Nektarios +2029047 SV9KIK MANOLIS +2029048 SV9KIH GIANNIS +2029049 SY9CGZ Vagelis +2029050 SV9SFE PANTELIS +2029051 SV9RUT GEORGE +2029052 SV9RKX CHRYSI +2029053 SY9CKV Antonis +2029054 SY9CFR SATSAKIS +2029055 SY9BUF Nikos +2029056 SV9ADY MANOUSOS +2029057 SV9MBJ Manolis +2029058 SV9KIT Manos +2029059 SV9KNA PANTELIS +2029060 SV9QCT Frank +2029061 SV9SHS MANOLIS +2029062 SY9ANL Hronisx +2029063 SY9CXA SY9CXA +2029064 SV9IWK TASOS +2029065 SV9KIL ANTONIS +2029066 SV9ABL ManolisSV9ABL +2029067 SV9KIA PANAGIOTIS +2029068 SV9SEZ ARIS +2029069 SV9LHS SISANOS +2029070 SY9CQY Manos +2029071 SV9OAN Antony +2029072 SV9SIT CHRISTOS +2029073 SV9BMJ SV9BMJ +2029074 SV9BMG STELIOS +2029075 SV9SFA Michael +2029076 SV9RJI Leyteris +2029077 SY9CFP TASOS +2029078 SY9CKW Ioannis +2029079 SY9BIT MANOLIS +2029080 SV9GPW GIANNIS +2029081 SY9AAC STELIOS +2029082 SV9QWC Vasilisgreta +2029083 SV9RKN AMVROSIOS +2029085 SY9CBL George +2029087 SV9SBX SV9SBX +2029088 SV9SHR PAPAJOHN +2029089 SY9CVY CHRISTOFER +2029090 SY9CVW IAGGELAKIS +2029091 SY9CVX MAGGELAKI +2029092 SV9QCW MANOS +2029095 SV9BMH Nikos +2029096 SV9DJR Fragiskos +2029097 SY9CHA NIKOS +2029098 SV9ANC GIORGOS +2029099 SY9AAB Lefteris +2029100 SY9CRA THODORIS +2029101 SV9CAC MANIATISGEORGIOS 2041001 PD2ML Mark 2041002 PD2ML Mark 2041003 PA2JM Joop @@ -10270,7 +10550,6 @@ 2041016 PD0LVS Lucas 2041017 PA0WBB Wim 2041018 PD0JB Jos -2041019 PA3CUU Hein 2041020 PE1ER Ed 2041021 PA3CPI Peter 2041022 PD7HM Herman @@ -10317,7 +10596,7 @@ 2041066 PA3CDS Jan 2041067 PA3UAV Jasper 2041068 PH0BOS Imre -2041069 PA7O Jan +2041069 PA0NON Jan 2041070 PA1DR Dick 2041071 PE1BGQ Pieter 2041072 PE1AQL Hans @@ -10337,7 +10616,7 @@ 2041086 PD1HPB Peter 2041087 PD0VOS Hans 2041088 PD1WA Wout -2041090 PD2G Gaston +2041090 PD2G Casper 2041091 PD4HB Hildo 2041092 PD9T Tim 2041093 PD5DJ Bjorn @@ -10359,7 +10638,6 @@ 2041110 PA3FRI Martin 2041111 PE1PTM Ron 2041112 PA3GMG Louis -2041113 PD1FW Frans 2041114 PE1BRV Joop 2041115 PE1NNQ Arjan 2041116 PD5RK Robert @@ -10407,7 +10685,6 @@ 2041163 PE1AMZ Aad 2041164 PD0HOF Milan 2041165 PA3DLK Rob -2041166 PD0JMG Willem 2041167 PA5WIL Wil 2041168 PA9D Andor 2041169 PD0HKS Roel @@ -10466,7 +10743,7 @@ 2041224 PA1CW Theo 2041225 PE1KWE Dirk 2041226 PG8PJC John -2041227 PD0NYI Leo +2041227 PD0LEO Leo 2041228 PD1ADM Maarten 2041229 PD0LEO Leo 2041230 PD0IIT Fred @@ -10493,6 +10770,46 @@ 2041251 PA4LEO Leo 2041252 PD3B Bart 2041253 PD3RR Patrick +2041254 PD0OQD Dirk +2041255 PD1AGF Ton +2041256 PE1RMG Paul +2041257 PE1NSQ Rick +2041258 PD7RV Ruud +2041259 PD1APQ Peter +2041260 PA3KOE Ed +2041261 PD1G Martien +2041262 PD1MAI Maikel +2041263 PD5TA Ted +2041264 PA3DLX Fred +2041265 PA0PRI Rolf +2041266 PE7M Maarten +2041267 PA9JOO Joop +2041268 PE1PRB Frans +2041269 PC4MAR Martin +2041270 PA3DYR Ab +2041271 PD2LB Rob +2041272 PA1EM Emmie +2041273 PD3BOE Suus +2041274 PA2JER Jeroen +2041275 PD7MLS Benno +2041276 PD2HAB Hennie +2041277 PD9JFP Frank +2041278 PD9DCD Cor +2041279 PE1CHV Ferdinand +2041280 PA1MUS PA1MUS +2041281 PA2MUL Ruud +2041282 PD7FBK Fkohler +2041283 PE1BTK Joop +2041284 PA0OCD Paulus +2041285 PA1MC Marcel +2041286 PA4GS Gerard +2041287 PA3GG Marco +2041288 PA0MRV Martin +2041289 PE1RVJ Egbert +2041290 PD7R Roel +2041291 PA3FCE Cees +2041292 PA0JAG Eb +2041293 PB0MV M. 2042001 PA0HTW Henk 2042002 PA0HTW Henk 2042003 PA3DFN Philip @@ -10555,7 +10872,7 @@ 2042063 PA1F Frank 2042064 PD7JK Jan 2042065 PE1CCN Frans -2042066 PD3ADN Arno +2042066 PA3ADN Arno 2042067 PA3FTT Quirijn 2042068 PA3CGE Bob 2042069 PD5RD Rene @@ -10600,7 +10917,7 @@ 2042108 PD1WAT Ton 2042109 PD3SWO Sander 2042110 PA3GUV Jan -2042111 PD3ADN Arno +2042111 PA3ADN Arno 2042112 PA7J Jan 2042113 PA0GPE Gilles 2042114 PD2OT Ombry @@ -10796,7 +11113,7 @@ 2042313 PD0ZA Michel 2042314 PD4IDF PAul 2042315 PE2OND Aad -2042316 PD4MSW Monica +2042316 PD0MSW Monica 2042317 PD0ILD Harry 2042318 PD2ATG Andre 2042319 PD0SDR Elmar @@ -10868,6 +11185,57 @@ 2042386 PD8JK John 2042387 PA0GVE Gerard 2042388 PA2CMW Christiaan +2042390 PD1ACF Ronald +2042391 PD4L Luke +2042392 PD0MBR Martin +2042393 PE1DGH Simon +2042394 PD2JCB Jan +2042395 PD0MV MV +2042396 PA3D Henk +2042397 PD0EKO Maarten +2042398 PD5HM Seal +2042399 PD8JH Jur +2042400 PD9AIR Michael +2042401 PD5MSV Harrie +2042403 PD9F Frans +2042404 PD4LYN Lynette +2042405 PA1PA Chris +2042406 PD3JCW Harrie +2042407 PD1MA Dimitri +2042408 PD5NN Johannes +2042409 PD2AVE Arend +2042410 PA3GGY Klaas +2042411 PA7RG Robert +2042412 PA3GXL Nico +2042413 PD1TA Timothy +2042414 PD7EDI Edi +2042415 PD7ELL Ellen +2042416 PD2RAL Richard +2042417 PD1AKD Edwin +2042418 PD2NM Nico +2042419 PA8NPT Andy +2042420 PD2X Johnny +2042421 PA1FRA Francesco +2042422 PD1LSH AvH +2042423 PE3FVU Franz +2042424 PD4PBR Peter +2042425 PA3DSJ Huib +2042426 PA3CQF Rene +2042427 PD1K Roy +2042428 PA3DPJ Jan +2042429 PD1RVR Ruud +2042430 PE1KGL Willem +2042431 PA1RFC Andre +2042432 PE1JDB Chris +2042433 PD2MVM Martin +2042434 PD3LPA Louwrens +2042435 PA3GR Cees +2042436 PA3GXJ Pa3gxj +2042437 PA7CE Henk +2042438 PA0QRS Piet +2042440 PI4HGL Sbrh +2042441 PA3DEX Theo +2042442 PE1MFU Robert 2043001 PA1MOS Marco 2043002 PA1GF Gerjan 2043003 PE1NWR Tineke @@ -10901,6 +11269,7 @@ 2043032 PD2PW Peter 2043033 PA3GYM Jaap 2043034 PE1HCB Hans +2043035 PD7X 2043036 PA0VDB Kees 2043038 PA3OZB John 2043039 PE1MPZ Evert @@ -11072,6 +11441,39 @@ 2043209 PD2FPB Frank 2043210 PD0Z Remko 2043211 PD7LMR Marco +2043212 PD1RLA Rob +2043213 PA3GBK Aeilko +2043215 PE18KA Ab +2043216 PD1FRD Fred +2043217 PI4UTR VERON +2043218 PD9HK Hans +2043219 PE1LGX Luc +2043220 PD4JH Jaap +2043221 PD0NL Marco +2043222 PA3TK Teun +2043223 PD0BW Bert +2043224 PD0ABR Ab +2043225 PD0ZEE Ko +2043226 PA3CW Dick +2043227 PD0RE Rene +2043228 PA5ABW Albert +2043229 PD0W Joeri +2043230 PA1DAN Dan +2043231 PE1MQM Douwe +2043232 PA3GLH Rinus +2043233 PA3DZK Hans +2043234 PE1BAP Theo +2043235 PE1ION PE1ION +2043236 PH3GB Glenn +2043237 PD3DRM Dirkarie +2043238 PA0RLM Peter +2043239 PD1HVR HENK-NIEUWEGEIN +2043240 PA2RG Roel +2043241 PA3Y Nico +2043242 PD0NWO Gijs +2043243 PD4EDN Eduard +2043244 PA5KBL Nico +2043245 PI4RCB RadioClub 2044001 PD4RS Ruud 2044002 PD4RS Ruud 2044003 PA7DVM Duncan @@ -11140,7 +11542,7 @@ 2044067 PD5B Jan 2044068 PA3DZA Martien 2044069 PD5LB Leo -2044070 PD7S Santino +2044070 PD7SM Santino 2044071 PA3GDS Math 2044072 PE9GRC Maurice 2044073 PA3BEY Jef @@ -11158,7 +11560,7 @@ 2044085 PE3BB Bart 2044086 PD5GB Ger 2044087 PE1RLN Thijs -2044088 PD4RA Ren +2044088 PC3E Rene 2044089 PD1RO Rolf 2044090 PE1ISS Ton 2044091 PA5DB Patrick @@ -11205,7 +11607,7 @@ 2044133 PD0BVD Bram 2044134 PA3CWV Bert 2044135 PD4MM Marcel -2044136 PD1WL Wouter +2044136 PB1WL Wouter 2044137 PA3GEO Robert 2044138 PA2EDV Eelco 2044139 PA3HFJ Wijnand @@ -11230,7 +11632,30 @@ 2044158 PA0BEY Jef 2044159 PD1RON Ron 2044160 PD3X Roderic -2044161 PD1WVD Wim +2044161 PE1WVD Wim +2044162 PI4RSL Hein +2044163 PA1HGM Harry +2044164 PA0C Henk +2044165 PD9B Bas +2044166 PE2BEN Ben +2044167 PA3EPM Jo +2044168 PA3ASP Wim +2044169 PH9X Huub +2044170 PD1PK Paul +2044171 PA3TEO Theo +2044172 PD3A Andre +2044173 PD1JOL John +2044174 PD0MYH Arnold +2044175 PA3PWR Jochem +2044176 PA3GKY Albert +2044177 PE9TIG Martin +2044178 PD5DEK Marcel +2044179 PD4JD Jeroen +2044180 PA1FZH Dan +2044181 PI4WAL VERON +2044182 PD0KPB Gerda +2044183 PA2LEO Leo +2044184 PE1NDB Richard 2045003 PA0RTU Klaas 2045004 PA0HWB Hans 2045005 PE1DGW Ad @@ -11281,7 +11706,7 @@ 2045053 PE1MSZ Ruud 2045054 PA1PXL Ton 2045055 PE0PLE Walther -2045056 PA2U Cees +2045056 PA0WLP Cees 2045057 PD1PME Paul 2045058 PE5YES Christ 2045059 PA3DP Dijo @@ -11380,7 +11805,7 @@ 2045153 PA4AGO Peter 2045154 PA2LP Louis 2045155 PA0GTB Cor -2045156 PA3AJI Wim +2045156 PA0VAM Wim 2045157 PA1FM Frank 2045158 PA0TRT Rien 2045159 PA0JEN Han @@ -11441,6 +11866,51 @@ 2045216 PD2WIL Wilbert 2045217 PD0H Haico 2045218 PA1SAT Ad +2045219 PE1NBI Jean +2045220 PA0FLY Peter +2045221 PD2CSD Chris +2045222 PD2LEO Leo +2045223 PD2JGP Jan +2045224 PA7H Hans +2045225 PA0X Hans +2045226 PD0RD Rene +2045227 PA7TWX Leendert +2045228 PA3AZM Rob +2045230 PD0HVL Jorith +2045231 PD8H Hennie +2045232 PC4ED Ed +2045233 PD0BEK Roberto +2045234 PD2LVB LVB +2045235 PD1BU Henny +2045236 PD5M Marcel +2045237 PA3GDI Wil +2045238 PA2CAL Pascal +2045239 PE1KLT Peter +2045240 PD1HVS Stephan +2045241 PI4ZA VERON +2045242 PB5X Roberto +2045243 PD1SDF Carlos +2045244 PA3GRX PA3GRX +2045245 PE5PVB PE5PVB +2045246 PD4RF Toon +2045247 PD7EK ELLEN +2045248 PA3MAO Ben +2045249 PA1JER Jeroen +2045250 PD7JW Joost +2045251 PA4HW Herman +2045252 PE1NLU Peter +2045253 PA6SJB Peter +2045254 PH1D Dennis +2045255 PH0R Robert +2045256 PF3X Laurens +2045257 PE1RYX Rob +2045258 PA5LS Leo +2045259 PA0VTM Vincent +2045260 PD9PB Peter +2045261 PD7RAD Ronald +2045262 PD1HD Henk +2045263 PA3HBY Martien +2045264 PD2SVA PD2SVA 2046001 PD2WGN Walter 2046002 PA1WW Walther 2046003 PD0PVL Robert @@ -11494,7 +11964,7 @@ 2046054 PD2M Mario 2046055 PA0RWD Rens 2046056 PD2JMS Johan -2046057 PA4JAN Jan +2046057 PA0JCN Jan 2046058 PD0HCV Gert 2046059 PD5CVK Cees 2046060 PD1ES Erik @@ -11553,9 +12023,8 @@ 2046115 PD0RT Raymond 2046117 PD1RJ Rene 2046119 PH4TAA PH4TAA -2046120 PA9I Daaf -2046121 PA1NYM Henk -2046122 PA5VK Henk +2046120 PA3DPX Daaf +2046121 PE0H Henk 2046123 PE1RES Jan 2046124 PD0RB Rene 2046125 PA9BT Erik @@ -11658,6 +12127,7 @@ 2046226 PD0DNA Dirk 2046227 PE1NGM Andries 2046228 PA3EDR Hans +2046229 PE0VT Vitus 2046230 PC0M Pascal 2046231 PE1DH Danny 2046232 PF18NAW PF18NAWAKA @@ -11665,6 +12135,46 @@ 2046234 PE9E Berry 2046235 PA1HM Henk 2046236 PD0GO Gerard +2046237 PE1MOT Frank +2046238 PD0WAG Herman +2046239 PA3T Tonny +2046240 PD4A Rob +2046241 PE1CSV Hans +2046242 PE1NMC Klaas +2046243 PE1PHN Johan +2046244 PD3KE Stef +2046245 PA1CWI HansM +2046246 PA0RBI Rob +2046247 PD1AW Toni +2046248 PA2WCB Willem +2046249 PA0JED Jan +2046250 PD2DMA David +2046251 PA3AYB Bert +2046252 PD0SBJ Han +2046253 PA1WBU Wilko +2046254 PA75OMG PA75OMG +2046255 PD3JBK JOHN +2046256 PA75BTF Veron +2046257 PA3GOK Joop +2046258 PD0TX Jaco +2046259 PE1MHG Frank +2046260 PD1LTV Edwin +2046261 PE0V Ezra +2046262 PD3EVT Erwin +2046263 PD1BVV Berto +2046264 PA3FUA Paul +2046266 PD0RAA Daan +2046267 PE2J Johan +2046268 PA1MER Merhart +2046269 PD3BOL Henk +2046270 PA3MI Michel +2046271 PA1EZ Erwin +2046272 PD1ABO PD1ABO +2046273 PD7HW PD7HW +2046274 PE1MYB Henk +2046275 PD1AQM Roy +2046276 PD1AMF Henk +2046277 PA3JVM Jeroen 2047001 PD0ZWL Marcel 2047002 PD0ZWL Marcel 2047003 PA3ANG Johan @@ -11752,7 +12262,6 @@ 2047090 PD3KLV Klaas 2047091 PD0VDL Tinus 2047092 PD3BW Bonne -2047093 PA3CXB Jan 2047094 PD9BN Janko 2047095 PD0AVE Arthur 2047096 PA3DZX Eric @@ -11786,14 +12295,14 @@ 2047124 PD7DX Raymond 2047125 PD2GVE Gerrit 2047126 PA2HK Pa2hk -2047127 PH1JB PH1JB +2047127 PH1JB Henk-Jan 2047128 PD7RW Rene 2047129 PA3FS Frank 2047130 PE5JW Joeri 2047131 PE1ROX Guido 2047132 PD0ONX Kees 2047133 PA3FNT Foeke -2047134 PD1PJ Peter +2047134 PD7LMV Peter 2047136 PA2PME Peter 2047137 PD0JDF Danny 2047138 PE0RVA Reinout @@ -11816,10 +12325,9 @@ 2047156 PD2JH Joost 2047158 PD0HOD Tom 2047159 PA1SW Wim -2047160 PD8H Hennie 2047161 PA5HF Frank 2047162 PA5PS Peter -2047163 PD4S David +2047163 PC4K David 2047164 PA7RAY Raymond 2047165 PD7RON Ron 2047166 PA3AXA Rens @@ -11839,7 +12347,6 @@ 2047180 PA9CC Herman 2047181 PA3ESI Eric 2047182 PE1HGY Willem -2047183 PB1WB Willy 2047184 PD5MRF Marcel 2047185 PA3FBX Benno 2047186 PA5G George @@ -11873,6 +12380,49 @@ 2047214 PD0NNY Hilbert 2047215 PH1RB Ruud 2047216 PA3ETM Fred +2047217 PA3AEZ Jef +2047218 PD1GDR Gerald +2047219 PE2RPS Richard +2047220 PB0AOK Abraham +2047221 PA0JBX Jan +2047222 PA2FN Frank +2047223 PA3GQL Tom +2047224 PA0DB Django +2047225 PC2L Laurens +2047226 PD2RM Rudy +2047227 PD3OLD Marinus +2047228 PD0ZZ Martin +2047229 PD7JSV John +2047230 PD3JH Johan +2047231 PD0ORE Cor +2047232 PE1RNU Dijkerman +2047233 PA3DAT Aloys +2047234 PA3DWK Femma +2047235 PA3GJX Jan +2047236 PE1JSI Dirk +2047237 PD1LX Marcel +2047238 PD7JAC Jacco +2047239 PA0GHK Gerrit +2047240 PA0RHZ Rene +2047241 PA0TBS Teun +2047242 PD1RVB Rene +2047243 PD5MH Marco +2047244 PA1PM Piet +2047245 PE2HHN Henk +2047246 PD5Z Marvin +2047247 PA2ELF Frank +2047248 PE1NGD Henny +2047249 PA1ES Ernst +2047250 PA7HS Hans +2047251 PE1DGP Henk +2047252 PH2LB Lex +2047253 PA90HHG HHG +2047254 PD1JWM Jaap +2047255 PE1ORF Harm +2047256 PA1RP Rennee +2047257 PE1RZU John +2047258 PE1HVH Hans +2047259 PD0PJF HvM 2048001 PD1ASH Rolf 2048002 PD1ALW Andre 2048003 PE1PWF Edwin @@ -11894,7 +12444,6 @@ 2048019 PD0ADC Auk 2048020 PD4DX Jelle 2048021 PE1CIK Piet -2048022 PD2HVS Harm 2048024 PE1CIK Piet 2048025 PD2AWD Auke 2048026 PA4DEN Dennis @@ -11982,7 +12531,7 @@ 2048115 PA3FSA Johnny 2048116 PA3ANT Anton 2048117 PD1SCH Gosse -2048118 PD1JAS Jan +2048118 PA9JAS Jan 2048119 PE1RYN Jan 2048120 PE1PDX Mark 2048121 PD1TM Theo @@ -12005,7 +12554,6 @@ 2048139 PD0JMO Ton 2048140 PA2TN Teade 2048141 PA3FUO Sietze -2048142 PA3GXX Abe 2048143 PA2HD Hendrik 2048144 PD2B Bert 2048145 PA2KV Koert @@ -12073,7 +12621,7 @@ 2048207 PD2FM Freddy 2048208 PA3DII Mario 2048209 PE1DQT Gerrit -2048210 PD0PT Pieter +2048210 PD1EE Pieter 2048211 PE1SBK Chris 2048212 PA3HCI Frits 2048213 PA0ROB Rob @@ -12086,15 +12634,17 @@ 2048220 PD2UM Udo 2048221 PD3ECM Elkan 2048222 PB1S Bertwin -2048223 PD0YCW Yorian +2048223 PE0YCW Yorian 2048224 PD1ARV Ruud 2048225 PI4ECC Hamecc2018 2048226 PC1TK Sjohnie 2048227 PI4FRG Friese +2048228 PD1APT Jan 2048229 PD4AD Anton 2048230 PG4R Roel +2048231 PA0U Gerard 2048232 PD1BAS Bastiaan -2048233 PA5ON Richard +2048233 PE0M Richard 2048234 PC4AD Anton 2048235 PD1RH Reijndert 2048236 PA3CFD Teun @@ -12102,6 +12652,36 @@ 2048238 PD3LOU 2048239 PD0GGB Lammert 2048240 PA3VZ Vincent +2048241 PD0BHZ Henk +2048242 PA3NOR Harmen +2048243 PA3FM Freddy +2048244 PC5K Ronald +2048245 PA0AER Ger +2048246 PA3GPU Gerd +2048247 PD0JN John +2048248 PD3Z PD3Z +2048249 PA0KBG Ronald +2048250 PE1RWP Freddy +2048251 PA7N Erwin +2048252 PD0EG Erwin +2048253 PA1HRM Harm +2048254 PD4EB Els +2048255 PD0PXX Bert +2048256 PA3AWH Jan +2048257 PD9JK Johannes +2048258 PD0MAW Henry +2048259 PD0AN Albert +2048260 PB4S Bastiaan +2048261 PD0AT PatrickB +2048262 PD0GKB Bert +2048263 PC1PD Paul +2048264 PE1PQX Andre +2048265 PD0AFK Jeroen +2048266 PE1TCH Jan +2048267 PE1RWL Johan +2048268 PE1HJP Tjeabele +2048269 PA1BK Bert +2048270 PD1NSR Remko 2060001 ON4AIM Aime 2060002 ON3AN Ann 2060003 ON2WIK Marc @@ -12137,17 +12717,16 @@ 2060033 ON5AWE Erik 2060034 ON3VJI Jeannick 2060035 ON3FBL Philip -2060036 ON3FBL Philip 2060037 ON3MVJ Nancy 2060038 ON4DKM Nico 2060039 ON4GPS Rik 2060040 ON5KDJ Koen -2060042 ON3ULM Fabien +2060042 ON8MB Marc 2060043 ON4DRX Ronny 2060044 ON7HLU Hakim 2060045 ON7ATV Alain 2060046 ON8SD Didier -2060047 ON2ALI Robert +2060047 ON7XX Jallewaert 2060048 ON4WZ Geert 2060049 ON3YH Yentel 2060050 ON8ODK Serge @@ -12244,7 +12823,7 @@ 2060142 ON7UO Dvdkerck 2060143 ON3JMD Jan 2060144 ON3DEB Dieter -2060145 ON3SU On3su +2060145 ON3LG Johannes 2060146 ON5RA Pascal 2060147 ON8MB Marc 2060148 ON8CQ Walter @@ -12253,8 +12832,8 @@ 2060151 ON8PI Jan 2060152 ON3TMF Yvan 2060153 ON8VL Leo -2060154 ON3AD Jeffrey -2060155 ON3AZ Michel +2060154 ON2PJ Peter +2060155 ON4MDB Marc 2060156 ON8PI Jan 2060157 ON4CAB Bart 2060158 ON4BNC Yves @@ -12276,13 +12855,13 @@ 2060174 ON4CKY Etienne 2060175 ON3DNS On3dns 2060176 ON4BHZ Ludwig -2060177 ON7XD Rvdk +2060177 ON7XD Rik 2060178 ON3PI Patrick 2060179 ON8DM Mich 2060180 ON4VC Michel -2060181 ON3LVD Lugy +2060181 ON3JCA Johan 2060182 ON4DTP Krist -2060183 ON3CGC Ivan +2060183 ON3HZ ON3HZ 2060184 ON4CFI Reginald 2060185 ON6DV Daniel 2060186 ON5SM Marc @@ -12297,9 +12876,44 @@ 2060195 ON4OPA JEAN 2060196 ON6YP Gregory 2060197 ON3BV Rik -2060198 ON3CV Carine +2060198 ON8LVD Lugy 2060199 ON3TG Tom 2060200 ON3MPH Philippe +2060201 ON3AA Liesbeth +2060202 ON8SU Erik +2060203 ON3HEL Helmut +2060204 ON5ALI Robert +2060205 ON7DKE Bob +2060206 ON7DG Gino +2060207 ON4AKG Rudy +2060208 ON6MX Martin +2060209 ON5AA Marc +2060210 ON6NT Tony +2060211 ON4CGC Ivan +2060212 ON4ACF Wilfried +2060213 ON8AD Jeffrey +2060214 ON6IG Jaak +2060215 ON5MD Eddy +2060216 ON3ELS Gino +2060217 ON7AJ Jacques +2060218 ON2BID Andre +2060219 ON3PQ Ronny +2060220 ON7ULM Fabien +2060221 ON3NDW Niven +2060222 ON8FR Frederik +2060223 ON7ABT Michel +2060224 ON7BA Andy +2060225 ON3GBH Geert +2060226 ON2FCB Willy +2060227 ON4CV Carine +2060228 ON3VR Rik +2060229 ON3XSI Peter +2060230 ON3MEM Georges +2060231 ON3EMG Marleen +2060232 ON8LW Walter +2060233 ON3PJN Pieter-Jan +2060234 ON6PJ Jelle +2060235 ON3AY Danny 2061001 ON8SVH Stijn 2061002 ON8SI Simon 2061003 ON5LUC Luc @@ -12475,7 +13089,7 @@ 2061174 ON4CCI Hugo 2061175 ON3JM Jacques 2061176 ON3JM Jacques -2061177 ON3ABR Snoeppie +2061177 ON3ABR Rik 2061178 ON3ISA Isabel 2061179 ON3BRT Bart 2061180 ON8DYL Bodijn @@ -12545,10 +13159,10 @@ 2061244 ON4IVU Ivo 2061245 ON6OE Eddy 2061246 ON3LD Yes -2061247 ON1RC Link +2061247 ON1RC Christian 2061248 ON6YN Stefaan 2061249 ON6OM Rene -2061250 ON3CE Christophe +2061250 ON7EC ERIK 2061251 ON6VI On6vi 2061252 ON4CFB Patrick 2061253 ON2VR Rudy @@ -12564,7 +13178,7 @@ 2061263 ON3JVD Jdooren 2061264 ON3PGB Gerrit 2061265 ON4ALY Xavier -2061266 ON3HRL Frank +2061266 ON4ADK Eric 2061267 ON3EC Peter 2061268 ON3DSJ Jds 2061269 ON4JN Jos @@ -12593,7 +13207,27 @@ 2061292 ON3HIL Hilde 2061293 ON4VEL Peter 2061294 ON3RX Philippe +2061295 ON3SRC Robby 2061296 ON1GPS Pieter +2061297 ON4CE Christophe +2061298 ON3EKV Kevin +2061299 ON7ASN Patrick +2061300 ON3DBA Danny +2061301 ON5WN Wim +2061302 ON3TNT Marnik +2061303 ON7KEC Luc +2061304 ON7HX Alain +2061305 ON1JDM ON1JDM +2061306 ON8KW Kurt +2061307 ON7TAR Patrick +2061308 ON3KS Jan +2061309 ON3CDV ERIK +2061310 ON4JP Eric +2061311 ON3FDE Filippe +2061312 ON3NH Nico +2061313 ON7AC Frank +2061314 ON3FD Franky +2061316 ON3TC Jino 2062001 ON7DS Dirk 2062002 ON2DMT Martine 2062003 ON7PDW Peter @@ -12606,7 +13240,7 @@ 2062010 ON2ARP Ronny 2062011 ON5RZ Raf 2062012 ON2RON Ron -2062013 ON3DMR Dieter +2062013 ON2ZZT FRANK 2062014 ON3AND Luc 2062015 ON2RVM Rudiger 2062016 ON4CF Hugo @@ -12657,7 +13291,7 @@ 2062061 ON3XD Luc 2062062 ON3ITA Carlo 2062063 ON4AFW Wilfried -2062064 ON3MD Aristo +2062064 ON3MD Marc 2062065 ON5DM Herbert 2062066 ON3HGD Georges 2062067 ON3GN Geert @@ -12684,12 +13318,12 @@ 2062088 ON7YZ Mario 2062089 ON6MJ Jean 2062090 ON3AND Luc -2062091 ON3RBJ Roberto +2062091 ON4AHS Herwig 2062092 ON6LY Cis 2062093 ON4TAI Robert 2062094 ON3BBG Gerrit 2062095 ON3DMB Brent -2062096 ON3PH Pieter +2062096 ON4CAD Robert 2062097 OP4A Cis 2062098 ON3DDP Peter 2062099 ON2RON Ron @@ -12735,6 +13369,28 @@ 2062139 ON3JNS Jonas 2062140 ON3CQ Pat 2062141 ON5NV Alex +2062142 ON6PH Pieter +2062143 ON3HF Alex +2062144 ON3SXY Gert +2062145 ON8JJ Robert +2062146 ON4CKE Tony +2062147 ON6EM Manu +2062148 ON3RUD RUDI +2062149 ON4ADE Erwin +2062150 ON5PER Peri +2062151 ON3RS Regi +2062152 ON6GJO Geert +2062153 ON4MX ErikV +2062154 ON9DJ Dieter +2062155 ON3MDK Mike +2062156 ON7IVO Ivo +2062157 ON4VT Danny +2062158 ON3GFL August +2062159 ON3BFF Koen +2062160 ON3JCL Jonas +2062161 ON6FL Geert +2062162 ON3HLI Herbert +2062163 ON3BVB Bruno 2062999 ON4DBC GeertB 2063001 ON6BB Pieter 2063002 ON4BDC Gunther @@ -12831,6 +13487,21 @@ 2063093 ON9CPM Peter 2063094 ON3VU Marc 2063095 ON5CAT Anne-Marie +2063096 ON8GVT Guy +2063097 ON8JO Jo +2063098 ON3SOW Stefan +2063099 ON4BYV Didier +2063100 ON5XX Joel +2063101 ON4RP Rene +2063102 ON3WMP Wilfried +2063103 ON5FOX Rene +2063104 ON3GRR Geert +2063105 ON3DTZ Tillo +2063106 ON3WIP William +2063107 ON3SBL SAM +2063108 ON2LUC Luc +2063109 ON9SG Stefan +2063110 ON8GL GLENN 2064001 ON4AZP Dominic 2064002 ON2PCO Paul 2064003 ON8RAT Marco @@ -12925,7 +13596,7 @@ 2064092 ON3ZWP Ronnie 2064093 ON5IA Frederik 2064094 ON8SGA Gennaro -2064095 ON3KW Dennis +2064095 ON3BPE Ben 2064096 ON4DCT Axel 2064097 ON3EVO Ben 2064098 ON9AIR Michael @@ -12934,7 +13605,7 @@ 2064101 ON3BEN BEN 2064102 ON4ENL On4enl 2064103 ON4ANM Marc -2064104 ON7SE Eric +2064104 ON6EB Erik 2064105 ON3LPY Serge 2064106 ON5JF Piet 2064107 ON4AMP Pieter @@ -12951,6 +13622,27 @@ 2064118 ON4AJG Erwin 2064119 OP4M Gert 2064120 ON7DY Marcel +2064121 ON7MN Eric +2064122 ON4EH Luc +2064123 ON4ABR Danny +2064124 ON5WAL Walter +2064125 ON7JW LUDO +2064126 ON4SSB Paul +2064127 ON1BUX Danny +2064128 ON1WIL ON1WIL +2064129 ON3SDR Stef +2064130 ON1KW Dennis +2064131 ON5VN Noel +2064132 ON5WLA Alfons +2064133 ON3GUY Guy +2064134 ON2TRK OZKAN +2064135 ON3VBS StevenVB +2064136 ON3LDB Lambert +2064137 ON4CFC Pascal +2064138 ON4MXA Marc +2064139 ON3HJX Johan.h +2064140 ON3JMK Jef +2064142 ON5ADL Jurgen 2065001 ON4REC REEC 2065002 ON3XBS Serge 2065003 ON3CCM Moreno @@ -12976,7 +13668,7 @@ 2065023 ON4KMM Michel 2065024 ON4JPS Jean-Pierre 2065025 ON7ZB BRUNO -2065026 ON3VA Dominique +2065026 ON8MJ ON8MJ 2065027 ON3ILG ON3ILG 2065028 ON3IBZ BRW 2065029 ON7JV Jacques @@ -12992,6 +13684,8 @@ 2065039 ON4LDT STEVE 2065040 ON4SM STEVE 2065042 ON8BD Benoit +2065043 ON5DVA Dominique +2065044 ON6NS ROLAND 2066001 ON6PU De 2066002 ON7GE Eddy 2066003 ON4KTU Jean-Marie @@ -13061,7 +13755,7 @@ 2066069 ON5VLG Guillaume 2066070 ON3MR Gonalves 2066071 ON3DN Didier -2066072 ON3SVB Sbastien +2066072 ON3MT Jerome 2066073 ON4KHG Gaetan 2066074 ON4OW Olivier 2066075 ON4BZ Michel @@ -13084,36 +13778,72 @@ 2066093 ON4LGL Graziano 2066094 ON3MA PASCAL 2066095 ON3MF Gillette -2066096 ON7GPR GERARD +2066096 ON7GPR Pascal 2066097 ON4MHO Arnold 2066098 ON3TW Willydp 2066099 ON4LEX Marc -2066100 ON4LJA GiGi +2066100 ON4LJA Jean-Jacques 2066101 ON6JPJ Jlm 2066102 ON4LBF Albert 2066103 ON4NT Alain +2066104 ON4NAL Jacques +2066105 ON3JEV Jeremy +2066106 ON5SN Serge +2066107 ON4LAP JEAN-LUC +2066108 ON3XAV Xavier +2066109 ON2RVQ Roger +2066110 ON2VHF Laurent +2066111 ON3PC CORDARO +2066112 ON4CPN Section +2066113 ON3VEG Gilles +2066114 ON3XMU Xavier +2066115 ON3MAC Michel +2066116 ON3GMC Claudiusse1 +2066117 ON5MU Bernard +2066118 ON3WP SERGE +2066119 ON3ZG Gino +2066120 ON6RM Radio +2066121 ON3ES Philippe +2066122 ON3GI Michel +2066123 ON4KZF Francis +2066124 ON2OD Olivier +2066125 ON4ZO Olivier +2066126 ON7ER Jean-Michel +2066127 ON5BC Andre +2066128 ON2JM Jacques +2066129 ON4KAJ JEANMI +2066130 ON4MGV Jack +2066131 ON4LFP Roger +2066132 ON3YE CLAUDE +2066133 ON4LAM Michel 2067001 ON5UC Olivier 2067002 ON5WB Yves 2067003 ON6NR Radio 2067004 ON5PT Jean-Claude 2067005 ON4PB Erik 2067006 ON4WS Philippe -2067008 ON8HH Hugues +2067007 ON4LAU Michel +2067008 ON2PT Pol 2067009 ON4LS Jean-Luc 2067010 ON3PCB Tonton 2067011 ON8QRP Frederic 2067012 ON6WC Bebert 2067013 ON6KQ Jean-Raymond 2067014 ON3MGA Michel +2067015 ON3VST Samuel 2067016 ON4LTW Thierry 2067017 ON7YF Freddy -2067018 ON3LCE Cedric +2067018 ON3NR Pascal 2067019 ON8MG Le 2067020 ON4LFO Pol 2067021 ON6JE Philippe 2067022 ON4RD Rene 2067023 ON4KNN Pierre -2067025 ON6GX GBX +2067024 ON6QZ Leon +2067025 ON6CA Michel +2067026 ON3SQ Serge +2067027 ON4WCJ Pascal +2067028 ON5HH Hugues 2068001 ON5VDK Tjardick 2068002 ON5VDK Tjardick 2068003 ON4LRG Robert @@ -13163,6 +13893,16 @@ 2068047 ON3HMT MARTIAL 2068048 ON4EZJ ON4EZJ 2068049 ON4IJ Jean-Francois +2068050 ON3BQ Michel +2068051 ON6GL Louis +2068052 ON3DEX Julien +2068053 ON4LGY Yves +2068054 ON3BLS Fabian +2068055 ON3JEF JF +2068056 ON3OLI Olivier +2068057 ON5AM Albert +2068058 ON1YH Yannick +2068059 ON6CV Eric 2069001 ON3WR MANU 2069002 ON7PC Pierre 2069003 ON4MAX Max @@ -13198,7 +13938,7 @@ 2069034 ON4YCE Yves 2069035 ON7LU Radio 2069036 ON5YN Alphonse -2069037 ON3KDP Philippe +2069037 ON6RVD Rene 2069038 ON4PX Jean-Claude 2069039 ON4KVI Renauld 2069040 ON5XA BruCap @@ -13223,6 +13963,16 @@ 2069059 ON5KX Roger 2069060 ON3OH Hanonoli 2069061 ON7QZ Yves +2069062 ON3XLA Xavier +2069063 ON5LAE Laurent +2069064 ON2KDP Philippe +2069065 ON6SO Daniel +2069066 ON7MJB Michel +2069067 ON4CG Laurein +2069068 OR5V ON5AV +2069069 ON5BGO Benjamin +2069070 ON3ATK Freddy +2069071 ON4KBU JOS 2069999 ON3BDM Bjorn 2080001 F5NVG Pascal 2080002 F1HBG Jose @@ -13450,7 +14200,7 @@ 2080226 F4HLI Jean 2080227 F4EIT Roger 2080228 F8FJH FBT -2080229 F4HVQ Sbastien +2080229 F4HVQ Sebastien 2080230 F5TMB Franck 2080231 F1ETB Bernard 2080232 TK5GF Ignace @@ -13465,10 +14215,78 @@ 2080241 F4BWT Laurent 2080242 F1VFJ LIMA 2080243 F1PHL Charles +2080244 F4IDY Jerome 2080245 F5PLS Thierry 2080246 F1GPN Patrice 2080247 F5KTR Radioclub 2080248 F1PAR Christian +2080249 F4BOH Marc +2080250 F4HGF Laurent +2080251 F5BLR Jean-Francois +2080252 F5OQO Jean-Michel +2080253 F8RME Jean-Yves +2080254 F8VOO Anatol +2080255 F4GOR Dominique +2080256 F4IEH Youcef +2080257 F6KRK RC +2080258 F4IEL Jose +2080259 F5PNP Pascal +2080260 F1NSU Patrice +2080261 F6EEJ Jean +2080262 F6CBE PATRICK +2080263 F4IEW Franck +2080264 F4GFK ARGOS +2080265 F5DMD Jean +2080266 F8CRH Franck +2080267 F5LUX Christian +2080268 F1SEG Olivier +2080269 F1TDG Jean +2080270 TK1PM Michel +2080271 F4HBC Maryse +2080272 F4IEY Jules +2080273 F1SQW Philippe +2080274 F5NDA Eric +2080275 F6HFH Patrick +2080276 F5PIO Joel +2080277 F4BTY BERNARD +2080278 F5GSJ Christian +2080279 F4CKF Ivan +2080280 F1GRE ROGER +2080281 F1LFJ Michel +2080282 F1OAT Frederic +2080283 F6GFF Jean-Pierre +2080284 F8BPA Jean-Luc +2080285 F5PMF Bernard +2080286 F4ICK Romain +2080287 F8KSM ADRASEC +2080288 F5NBW Pierre +2080289 F1RFI Jean-Marc +2080290 F1CSC Georges +2080291 F5GPO Gilles +2080292 F5PZQ Christophe +2080293 F4IGG Eric +2080294 F4IEH Youcef +2080295 F5TOZ Regis +2080296 F1BDQ Christophe +2080297 F5NZY Stephane +2080298 F4GJC Christian +2080299 F1RZV Ludovic +2080300 TK8RR Xavier +2080301 F4FPR BENJAMIN +2080302 F4IJJ Herve +2080303 F6BNA Yvon +2080304 F6IGX Bernard +2080305 TK5MW Xavier +2080306 F1JGA Dominique +2080307 TK5JJ Jean +2080308 F5LTR Edouard +2080309 F5NAR Alain +2080310 TK8QY Dominique +2080311 F1SHS Pierre +2080313 F4HGN Fabrice +2080314 F1JWJ Joel +2080315 F4WCP Yves +2080316 F5TAO OLIVIER 2081001 F1UOT Olivier 2081002 F4ACD Romain 2081003 F1TDI Daniel @@ -13609,6 +14427,61 @@ 2081138 F2VH Jean 2081139 F5NVS JEAN 2081140 F4LKG GERARD +2081141 F4IDX Joachim +2081142 F6FSO Lucien +2081143 F5PXD Claude +2081144 F1HVU MICHEL +2081145 F4SMX Patrick +2081146 F4OKC Herve +2081147 F6CFZ Jean +2081148 F5IHD Edgar +2081149 F1HLX JEAN +2081150 F1MHL SERGE +2081151 F4AVW Gerald +2081152 F5VBL PANTELIS +2081153 F4IFB Salim +2081154 F1RCH Christian +2081155 F4CLS Olivier +2081156 F1TIN Henri +2081157 F4HJA David +2081158 F6ENV Christian +2081159 F2NY Yvon +2081160 F4HKF Dimitri +2081161 F4CHY Eliseo +2081162 F4GKL Raymond +2081163 F5ISG Luc +2081164 F8TRT Pascal +2081165 F1IIM Marc +2081166 F1FII JOEL +2081167 F4PCM THIERRY +2081168 F1FEI Bernard +2081169 F6KLN RC +2081170 F1EMA Jean-Paul +2081171 F2FG Gerard +2081172 F6FEH Laurent +2081173 F4EDR Jean-Michel +2081174 F6JKW JEAN-LUC +2081175 F1NNY Gerard +2081176 F6AQS Andre +2081177 F4VSQ Maciek +2081178 F4COX Georges +2081179 F1GAZ Andre +2081180 F6BKT Jean-Claude +2081181 F6HTH Francis +2081182 F4AHI Didier +2081183 F4HOC Olivier +2081184 F5OWL Philippe +2081185 F1BEK ANTOINE +2081186 F4IKE Christian +2081187 F1FXC Stephane +2081188 F6FXL Christian +2081189 F4IFB Salim +2081190 F5OKB Pierre +2081191 F8AGD Daniel +2081192 F8FUR Eric +2081193 F8DSI Romain +2081194 F1BEH Jean-Paul +2081195 F6CEH Michel 2082001 F4FUL Cyril 2082002 F5VIN Heiko 2082003 F1AGU Charles-Henri @@ -13781,7 +14654,7 @@ 2082170 F5RRT Pierre 2082171 F4BND Nanard 2082172 F5PUY F5PUY -2082173 F1CXG F1CXG +2082173 F1CXG Thierry 2082174 F4GSP F4GSP 2082175 F4TUG Yann 2082176 F6HIH Pierre @@ -13812,6 +14685,47 @@ 2082201 F1FQN PATRICK 2082202 F5RVV Lilian 2082203 F1GCX JACQUES +2082204 F1HBT Jacques +2082205 F1NNE Pierre +2082206 F4HJT Francois +2082207 F6DNL ANDRE +2082208 F4ABL Andre +2082209 F4DGP Aime +2082210 F5TWZ Henri +2082211 F5MDM HENRI +2082212 F5IOG Michel +2082213 F1GIY Alain +2082214 F5VIN Heiko +2082215 F5GZD MICHEL +2082216 F5BJT Lysiane +2082217 F1NUU Dominique +2082218 F4IGC Philippe +2082219 F6DXG Bernard +2082220 F6KEZ RC +2082221 F6DQV Jean +2082222 F1FEK Paul +2082223 F4IHB Loic +2082224 F4IHA Olivier +2082225 F4WAG Paul +2082226 F5TTO Renaud +2082227 F5AOF Nicolas +2082228 F6BNL JEAN +2082229 F5OWB Stephane +2082230 F4IIF Renaud +2082231 F5RRR Eric +2082232 F1MNF Raymond +2082233 F4FIR Michel +2082234 F5RVG PIERRE +2082235 F4IIL Alexis +2082236 F1IBO Jean-Pierre +2082237 F6BIJ Jean-Dominique +2082238 F4IJC Frederic +2082239 F5JCE Jean-Paul +2082240 F8CJB Djamal +2082241 F5PQL Jean-Luc +2082242 F4IEN Joss +2082243 F3PI Michel +2082244 F4IHD Frederic 2083001 F1IZL Jean-Yves 2083002 F4GEM Arnaud 2083003 F1BBG Gerard @@ -13851,7 +14765,7 @@ 2083037 F5PDQ Gilbert 2083038 F4VOB BIJL 2083039 F4FEM Camille341 -2083040 F5SHD Aucun +2083040 F5SHD PHIL 2083041 F5BSF Stephan 2083042 F4ILX Thomas 2083043 F5EGG Claude @@ -13864,7 +14778,7 @@ 2083050 F4HAB Sbouzet 2083051 F5ZZ F5zz 2083052 F4GYX Adrien -2083053 F5SHD Phil +2083053 F5SHD PHIL 2083054 F4HWB Christophe 2083055 F6FLM Bob 2083056 F1FNT Guy @@ -13886,6 +14800,31 @@ 2083072 F5UKO Eric 2083073 F5RVI Claude 2083074 F4FFA Bernard +2083075 F5GN Yves +2083076 F5GJG Christian +2083077 F5USV Francis +2083078 F5NXB Bernard +2083079 F5RGH Eric +2083080 F6GSP Jean-Marie +2083081 F4ICU Jean-Michel +2083082 F5OYC Bernard +2083083 F1RPZ Frederic +2083084 F5NHJ Jean +2083085 F8NHA Christian +2083086 F8WBE Maurice +2083087 F8ASG Marcel +2083088 F2IG Robert +2083089 F1EVE CHARLES +2083090 F6FWI Roland +2083091 F5NDP Francis +2083092 F4EDN Didier +2083093 F5JEV Jean-Pierre +2083094 F1THK Michel +2083095 F1LRZ JEAN-MARC +2083096 F4IGT Mikael +2083097 F4IAX Jean-Francois +2083098 F5SIZ Michel +2083099 F4CHS PIERRE 2084001 F4EEZ Nicolas 2084002 F4AVI Fabrice 2084003 F5LTM Pierre @@ -13976,7 +14915,24 @@ 2084088 F5SKG Jean 2084089 F1SIR Yves 2084090 F5UJA Michel -2085001 F1HBG Jose +2084091 F4IDV Patrick +2084092 F4HCV Jean-Pierre +2084093 F4IAW Eric +2084094 F5SCC Jean-Francois +2084095 F6APU ANDRE +2084096 F5RZU Gabriel +2084097 F5NFF Michel +2084098 F1FMB Serge +2084099 F5OWJ Patrick +2084100 F5SVP Jean-Bernard +2084101 F1HIU Fabien +2084102 F4DHG Jean-Luc +2084103 F1LOO Philippe +2084104 F5JYA David +2084105 F6GDC Yves +2084106 F5VGR Bernd +2084107 F1GWO DENIS +2084108 F6HDP Christian 2085002 F5ILB Philippe 2085003 F4CQA Christophe 2085004 F1BOC Paul @@ -14061,10 +15017,45 @@ 2085083 F1AMA Claude 2085084 F1PSX Jean-Yves 2085085 F5HNQ LIONEL +2085086 F6HBW Jean-Marie 2085087 F4IAD Thierry 2085088 F1IEH Guillaume 2085089 F6HER Andre 2085090 F4GDG Benoit +2085091 F4HNV Thierry +2085092 F5RQX Joel +2085093 F4GSM Eric +2085094 F5JDJ Henri +2085095 F5LEY Jacky +2085096 F4HNO Bernard +2085097 F1AHT Bernard +2085098 F6GNR Marc +2085099 F4HEX Pat +2085100 F4DCB Thierry +2085101 F8AJD Philippe +2085102 F5PJE Eric +2085103 F5RKY Chistian +2085104 F1BQS Christian +2085105 F5LFN Didier +2085106 F1CTT Guy +2085107 F1FEB GERALD +2085108 F4AKO Gerald +2085109 F4FMB Claude +2085110 F1JXW GILLES +2085111 F4GZC OLIVIER +2085112 F5VMB Roger +2085113 F6HXR Georges +2085114 F4HTD Jean-Pierre +2085115 F4EIF Ludovic +2085116 F4IHO F4IHO +2085117 F1PGZ ALAIN +2085118 F5FCH Philippe +2085119 F4SNF Jean-michel +2085120 F4IKQ Jean-Noel +2085121 F8TIW Philippe +2085122 F4FSB Jerome +2085123 F4WBR Bedri +2085125 F4DNS Bruno 2086001 F5DZZ Albert 2086002 F5JGK Regin 2086003 F5NSL Eric @@ -14085,7 +15076,7 @@ 2086018 F5PSJ Claude 2086019 F4HPE Bruno 2086020 F5OZF F5OZF -2086021 F5GXX Francisco +2086021 F5GXX Francois 2086022 F4BSN Cedric 2086023 F4CVH F4cvh 2086024 F6IFG Jean-Bertrand @@ -14116,7 +15107,7 @@ 2086049 F1RXF F1RXF 2086050 F1GBJ Jean 2086051 F8KHC Radio -2086052 F5SHG Liste +2086052 F5SHG Laurent 2086053 F6HSM Patrick 2086054 F4HUB Jean 2086055 F1AFT Bernard @@ -14155,6 +15146,77 @@ 2086088 F8ARK Frederic 2086089 F1USN Georges 2086090 F5FLN Michel +2086091 F1BLQ Joel +2086092 F1BLT Francois +2086093 F4DFQ JOEL +2086094 F6BGW Francis +2086095 F5OZP Jean +2086096 F6IIT Patrick +2086097 F5PUS Jean +2086098 F4UJU Gilles +2086099 F4CQK Jean +2086100 F4HGO Robert +2086101 F9SV Maurice +2086102 F4HEH Nicolas +2086103 F6GPT Jean-Marc +2086104 F4API GUY +2086105 F5NSX Philippe +2086106 F5EFR BRUNO +2086107 F5OPV Pierre +2086108 F1ILA LAURENT +2086109 F5LSG Marc +2086110 F4IFA Ludovic +2086111 F4HZN Laurent +2086112 F5OUD Jacky +2086113 F9FL Guy +2086114 F6FPI GILLES +2086115 F4EIM Jean-Claude +2086116 F5NOX HENRI-LOUIS +2086117 F5TMR Jean +2086118 F1FWE Jean-pierre +2086119 F1TNF DANIEL +2086120 F1GIC PASCAL +2086121 F4BHS Sebastien +2086122 F4HNC Marc +2086123 F4GMT Francis +2086124 F6CBA ETIENNE +2086125 F1RUN Raphael +2086126 F8PKP Roger +2086127 F5SMP Georges +2086128 F5IVR JACQUES +2086129 F4GIS Michel +2086130 F4IBP Michel +2086131 F4DAJ Jean-marc +2086132 F6HCM Pascal +2086133 F6ESD Alain +2086134 F5JGL CLAUDE +2086135 F1MWV JEAN-PIERRE +2086136 F4AYW Rene +2086137 F6HRF Pierre-andre +2086138 F4IGA Daniel +2086139 F5LKO Edouard +2086140 F4IFY Anthony +2086141 F6HFY Yves +2086142 F4IQT Pierre +2086143 F4ACR Antoine +2086144 F4GFY Yannick +2086145 F4IIJ Jean-Paul +2086146 F5LNH Didier +2086147 F5SMO Daniel +2086148 F4DNU Denis +2086149 F6JEF Jean +2086150 F4VRU Arjan +2086151 F4AJK Guillaume +2086152 F1USN Georges +2086153 F5RMQ Jean-Charles +2086154 F1CAY Alex +2086155 F8DWH Bruno +2086156 F1UCM Laurent +2086157 F6DBP Jean +2086158 F1FBO Jean-Louis +2086159 F5IRO FREDDY +2086160 F4WCK Patrick +2086161 F1NNM Jacques 2087001 F6HTJ Michel 2087002 F8BSY Xavier 2087003 F5UPV Samuel @@ -14218,7 +15280,7 @@ 2087061 F8HCU Xavier 2087062 F6BES Raymond 2087063 F1PNX JACK -2087064 F1DMG Dmg +2087064 F1DMG GUY 2087065 F4KKJ Radio 2087066 F6FAS Claude 2087067 F5FTQ F5FTQ @@ -14242,8 +15304,36 @@ 2087085 F8AXO Olivier 2087086 F1UPC Patrick 2087087 F5PDT Christophe +2087088 F5IRY Alain 2087089 F4HSQ Jean-Louis 2087090 F1LYV Jean-philippe +2087091 F5LLE Jean-Louis +2087092 F5JP Jean-Pierre +2087093 F5HAA Patrick +2087094 F1ERT Nicole +2087095 F1GNH Jean-Paul +2087096 F6KKA RC +2087097 F6HAB Raoul +2087098 F4HHA Christian +2087099 F1TUV Yannick +2087100 F8WAZ Arthur +2087101 F5UPV Samuel +2087102 F1EUU MARTINE +2087103 F9ZY Yves +2087104 F4AWT Dominique +2087105 F1EKY Laurent +2087106 F4FOM Dominique +2087107 F1QM Jean-Claude +2087108 F4EGW Olivier +2087109 F5RQY PAUL +2087110 F4VTG Jordi +2087111 F4DOU Claude +2087112 F5ISQ Joseph +2087113 F8IFR Norbert +2087114 F1RXP Jean-paul +2087115 F4GEE Robert +2087116 F4CEO Olivier +2087117 F1GZS Paul-emmanuel 2088001 F1VEO Felix 2088002 F8FKD Nicolas 2088003 F8FKD Nicolas @@ -14261,7 +15351,7 @@ 2088015 F4EJW Eric 2088016 F6DLE Jean 2088017 F4HQE Julien -2088018 F4GSD Sunfast3 +2088018 F4GSD JACKY 2088019 F5GNR Bbobiet 2088020 F8FTY PHILIPPE-JEROME 2088021 F1BWT Jean @@ -14276,6 +15366,17 @@ 2088030 F1TZO Michel 2088031 F4WCE Mario 2088032 F1GMV Alain +2088033 F4HTW Jean +2088034 F6CIU Maurice +2088035 F1RHX Marc +2088036 F1GMX Andre +2088037 F4IGV Yoann +2088038 F5VLX Alan +2088039 F5JDZ Yvonnick +2088040 F5CBU YVES +2088041 F8BUZ Francois +2088042 F4GTP MICKAEL +2088043 F5VHP Willi 2089001 F1MIJ Pascal 2089002 F1MIJ Pascal 2089003 F4GFR Mohamed-Hazim @@ -14398,7 +15499,7 @@ 2089120 F6FZU FZU 2089121 F1EMM F1EMM 2089122 F4GLF Winny50 -2089123 F5SGC Tm241e +2089123 F5SGC Andre 2089124 F1SBK Eric 2089125 F4EXC Olivier 2089126 F5KBM RC @@ -14506,7 +15607,7 @@ 2089228 F1SAL Philippe 2089229 F5DMY Gerard 2089230 F4BMK Fabrice -2089231 F5HFA La +2089231 F5HFA Jeannot 2089232 F4HJG Antoine 2089233 F4HDR Alexandre 2089234 F4HRX Damien @@ -14534,7 +15635,7 @@ 2089256 F4FCE Pierre-Marie 2089257 F4DBC Lucien 2089258 F4ETA Gerard -2089259 F4KKB Radio +2089259 F4DZK Jacques 2089260 F4KJV Radio-Club 2089261 F4FHY F4FHY 2089262 F5PP BEN @@ -14632,9 +15733,9 @@ 2089354 F1PIV Guy 2089355 F1MEK Heracles 2089356 F5IDK Brdany -2089357 F5NWL Damien +2089357 F5NWL Nicolas 2089358 F5NLU Jean-Francois -2089359 F4GTP F4GTP +2089359 F4GTP Mickael 2089360 F4DBA FELICIANO 2089361 F4CKW Thibault 2089362 F5SSM ERIC @@ -14685,8 +15786,114 @@ 2089407 F4IBU Matthieu 2089408 F4UJU Gilles 2089409 F4JGR Philippe +2089410 F4GBZ Stephane +2089411 F4HDX Jean-Paul +2089412 F5OKL Armindo +2089413 F4DJG Didier +2089414 F5IUX Guy +2089415 F4GLL DIDIER +2089416 F4HZH Nicolas +2089417 F5VD Dominique +2089418 F4FTJ Thomas +2089419 F6BAZ Henri +2089420 F4IEI Sebastien +2089421 F5FV Francis +2089422 F5NMK Alain +2089423 F6EGK Jean-Roger +2089424 F4IEJ Philippe +2089425 F5SSL Sebastien +2089426 F5IBM DOMINIQUE +2089427 F6BAZ Henri +2089428 F1OMR Jean-Jacques +2089429 F1HCN Roger +2089430 F8FLK Thierry +2089431 F4DJF Djf +2089432 F6CNO Patrick +2089433 F6DEB LMOREAU +2089434 F5JDX Jean +2089435 F4GKP Jacques +2089436 F4CWO Jlonga +2089437 F5JVD Plg +2089438 F4HSR CHRISTOPHE +2089439 F4HQM Cedric +2089440 F5THW Luis +2089441 F4CYH Yannick +2089442 F8BRL Sylvain +2089443 F5PCL BERNARD +2089444 F4FNU Jean +2089445 F5PEU Olivier +2089446 F6ITT Jean +2089447 F1TZF Fabien +2089448 F1JMJ JOEL +2089449 F4ACU Matthieu +2089450 F6ITT Jean +2089451 F4BVC Sebastien +2089452 F6CYK Pierre-Antoine +2089453 F4GNA Guy +2089454 F4CGA Lucien +2089455 F4ENU Ludovic +2089456 F6CHZ Georges +2089457 F8KGK Radioclub +2089458 F4VSZ Jacobus +2089459 F1TWQ Gilles +2089460 F1TWQ Gilles +2089461 F4CQW Frederic +2089462 F6FBE Jean +2089463 F1OON F1OON +2089464 F5LGW Stephane +2089465 F8GPP Bernard +2089466 F8BPZ FREDERIC +2089467 F6KOH RC +2089468 F4MXI Jacky +2089469 F1NYO Gilles +2089470 F4CIR Stephane +2089471 F5OQS RAYMOND +2089472 F8DQY Frederic +2089473 F5IBM Dominique +2089474 F4FDQ Marc +2089475 F4HDB Frank +2089476 F1UQR Christophe +2089477 F1LTE GEORGES +2089478 F4FTW Nicolas +2089479 F4EQW Marc +2089480 F4HSX Patrick +2089481 F4VTL Antonius +2089482 F1LPT Patrick +2089483 F4IJN Olivier +2089484 F5CMO Jean +2089485 F4IGB Michel +2089486 F4IGI Cyrille +2089487 F5FIM Jean-Paul +2089488 F4CHA Stanislas +2089489 F4IKZ Gianni +2089490 F4TBD Salvatore +2089491 F4IKU Sebastien +2089492 F1LKT JF +2089493 F1SGR Vincent +2089494 F1GXY Alain +2089495 F1GZG Stephane +2089496 F1VFR Ken +2089497 F1OLE Laurent +2089498 F4IJW PATRICK +2089499 F4ICT Philippe +2089500 F4AGZ Frederic +2089501 F4ESZ Patrice +2089502 F5RKG Eric +2089503 F5TXA Philippe +2089504 F4FYE Christophe +2089505 F4IBT Jose +2089506 F4IBV Michel +2089507 F4ACD Romain +2089508 F4GOP Denis +2089509 F5IHZ Didier +2089510 F5MYQ Jean +2089511 F5ROW Eric +2089512 F4DNP Bruno +2089513 F4IDZ Pierre +2089514 F1HSB Philippe 2120001 3A2NG Roro 2120002 3A2MA Jean +2120003 3A2NH JANO 2130001 C31AR Anibal 2130002 C33EP Enric 2130003 C31VC Larry @@ -14709,6 +15916,10 @@ 2130020 C31PS Ramon 2130021 C37URA URA 2130022 C31BO Archi +2130023 C37NL URA +2130024 C33MP Jaume +2130025 C31JS Josep +2130026 C31ZM David 2141001 EB1CU Andoni 2141002 EA1DBB Adolfo 2141003 EB1CU AXPE @@ -14736,7 +15947,7 @@ 2141025 EA1AIW Jose 2141026 EA1ITM Josep 2141027 EA1CI Jose -2141028 EA1RKG Asociacin +2141028 EA1WO Antonio 2141029 EA1DBB Adolfo 2141030 EA1EZ Miguel 2141031 EA1GFF FERNANDO @@ -14779,7 +15990,7 @@ 2141068 EA1LN Secundino 2141069 EA1HTW Ea1htw 2141070 EA1GIZ Eamon -2141071 EA1HDI Cerqueiras +2141071 EA1HDI Jose 2141072 EA1ICR Jon 2141073 EA1IC RUBEN 2141074 EA1HZG Alex @@ -14821,7 +16032,7 @@ 2141110 EA1AGM Baltasar 2141111 EA1IST EA1IST 2141112 EA1ILP Miguel -2141113 EB1ANA Emilio +2141113 EB1ANA Martin 2141114 EA1IDQ Vicente 2141115 EA1AHP Laureano 2141116 EA1IUF JUANPEREDI @@ -15002,7 +16213,7 @@ 2141291 EA1GTF AEX 2141292 EA1GEE Alfonso 2141293 EB1AIR Rodio -2141294 EA1IVQ Pinon +2141294 EA1IVQ Angel 2141295 EA1FDL ANGELES 2141296 EA1URO EA1URO 2141297 EA1HM EA1HM @@ -15050,7 +16261,7 @@ 2141339 EB1IJK Eb1ijk 2141340 EA1AYP EA1AYP 2141341 EA1QW Ronzon -2141342 EA1HSP SHATOMARGO +2141342 EA1HSP Julien 2141343 EA1IVQ Angel 2141344 EB1FMN Fandio 2141345 EB1BFN Aurelio @@ -15173,7 +16384,7 @@ 2141462 EA1EWF Venancio 2141463 EA1IZJ Ea1izj 2141464 EA1IIF EA1IIF -2141465 EA1IPN Paco +2141465 EA1FU Paco 2141466 EA1RX Carlos 2141467 EA1DII Juanjo 2141468 EA1IVT CRISTOBAL @@ -15232,8 +16443,8 @@ 2141521 EA1FP Ea1fp 2141522 EA1IVW EA1IVW 2141523 EA1HIN EA1HIN -2141524 EA1GTX Martinez -2141525 EA1IYF Estevez +2141524 EA1GTX Carlos +2141525 EA1IYF Patricia 2141526 EA1IYV NACHO 2141527 EA1DZR JOSE 2141528 EA1HFV Ramon @@ -15269,7 +16480,7 @@ 2141558 EA1GIG Jesus 2141559 EB1EEY EB1EEY 2141560 EA1DMP IGLESIAS -2141561 EA1IYL Marer +2141561 EA1IYL Manuel 2141562 EA1XR Fer 2141563 EB1APO Jose 2141564 EA1CGI JOSE @@ -15300,7 +16511,7 @@ 2141589 EA1HDN JOSE 2141590 EA1ISP Lorenzo 2141591 EA1IAI David -2141592 EA1MU EA1MU +2141592 EA1MU Pablo 2141593 EA1ITG EA1ITG 2141594 EB1CAR Javier 2141595 EA1HOI Marcos @@ -15318,7 +16529,7 @@ 2141607 EA1IKB Aquilino 2141608 EA1IMW EUGENIO 2141609 EA1GGH Fernando -2141610 EA1IPN Paco +2141610 EA1FU Paco 2141611 EA1ITG Gustavo 2141612 EA1CFF Antonio 2141613 EB1FOO Asier @@ -15463,9 +16674,216 @@ 2141752 EA1IKW JOSE 2141753 EA1ISN GELIN 2141754 EA1HFP EA1HFP +2141755 EC1AER Juanjo 2141756 EB1EXT JUAN 2141757 EA1IXX Enrique 2141758 EA1BUP Raimundo +2141759 EA1RD Vicente +2141760 EB1FFB JOSE +2141761 EA1QA EA1QA +2141762 EA1JBN Alejandro +2141763 EA1GSQ PACO +2141764 EA1JBM Enrique +2141765 EA1IJK Valentn +2141766 EA1EHW Juan +2141767 EA1IJL Miguel +2141768 EB1FDX Eb1fdx +2141769 EA1IKE Jose +2141770 EA1AAY JUAN +2141771 EA1WD URE +2141772 EA1DHZ Ea1dhz +2141773 EA1IIZ JUANPI +2141774 EA1IMX Vicente +2141775 EA1CDC Luis +2141776 EA1JBT Marcos +2141777 EA1IZK Frank +2141778 EA1JAR ALFREDO +2141779 EA1GDE JOSE +2141780 EA1IOK MIGUEL +2141781 EA1CRK Charls +2141782 EA1AFQ Jesus +2141783 EA1EZD Tochi +2141784 EA1GII JL +2141785 EA1DFP Quique +2141786 EA2BVA Amaro +2141787 EA1QL EA1QL +2141788 EA1JAT Juan +2141789 EA1CNH AGUSTIN +2141790 EB1BIY Alejandro +2141791 EA1KU Jose +2141792 EA1GIS ANTONIO +2141793 EA1DGF Julio +2141794 EA1JBX J +2141795 EA1HCE Joaquin +2141796 EA1HL Juan +2141797 EC1DNN Victor +2141798 EA1JCQ JOSE +2141799 EA1GSF Michel +2141800 EA1JBD Jose +2141801 EA1JBT Marcos +2141802 EA1SAL Justi +2141803 EA1JBX Jose +2141804 EA1IUK Joaquin +2141805 EA1JAV Antonio +2141806 EB1BQB Edi +2141807 EA1AAP FERNANDO +2141808 EA1IPA Francisco +2141809 EA1VT Jose +2141810 EB1BLX Javier +2141811 EA1IXY Ivan +2141812 EA1ISJ Jorge +2141813 EA1JCC Samuel +2141814 EA1JBW JOSE +2141815 EA1ENH PEDRO +2141816 EA1IZL Luis +2141817 EA1GHF Jose +2141818 EA1IUX HECTOR +2141819 EA1JCE Jose +2141820 EA1DNT Jorge +2141821 EA1GJK JOSE +2141822 EA1EAR RAMON +2141823 EB1KT Manolo +2141824 EA1ACI MARIA +2141825 EA1GHG Fernando +2141826 EA1RCP EA1RCP +2141827 EA1HTA Miguel +2141828 EA1EI CARLOS +2141829 EB1BFA Eduardo +2141830 EA1ZT ANGEL +2141831 EA1GXV Juan +2141832 EA1CC Jose +2141833 EB1EKV Jose +2141834 EA1DQ Jose +2141835 EA1IRQ Roman +2141836 EA1CM Miguel +2141837 EA1JBU Angel +2141838 EA1HMT IGNACIO +2141839 EA1HBW Manuel +2141840 EA1IDT Manuel +2141841 EA1JCN Hector +2141842 EA1EE Carlos +2141843 EA1GY Mariano +2141844 EA1JAV Antonio +2141845 EA1HVN Manuel +2141846 EA1ARB Vicente +2141847 EC1ADD Cesar +2141848 EB1FCO LUIS +2141849 EA1ISS Carlos +2141850 EA1TI VICENTE +2141851 EA1JCR Juan +2141852 EA1DXB Jesus +2141853 EA1JCS BENJAMIN +2141854 EA1JAH LUIS +2141855 EA1EPG Jesus +2141856 EA1IYK Michel +2141857 EA1HWD Carlos +2141858 EA1JCT LUIS +2141859 EA1JCU JUAN +2141860 EA1GKE ANTONIO +2141861 EA1JCR Juan +2141862 EA1IYT Berto +2141863 EA1IVF Jose +2141864 EA1IKX Roberto +2141865 EA1IRN DANIEL +2141866 EA1ICU Chus +2141867 EA1GMG Angel +2141868 EA1HHP Manolo +2141869 EA1CQ David +2141870 EA1ISE Iban +2141871 EA1HE MERCEDES +2141872 EA1IWC Roberto +2141873 EA1IEH ELOY +2141874 EA1FBG Javier +2141875 EA1ACI MARIA +2141876 EA1EH Jorge +2141877 EA1HPM Rafael +2141878 EB1HPD Jose +2141879 EA1GOU Luisma +2141880 EB1GQC Emiliano +2141881 EA1IN SALAH +2141882 EA1FBR Miguel +2141883 EA1FBQ CARLOS +2141884 EA1NI Alberto +2141885 EB1AEP Alberto +2141886 EA1URU Asoc. +2141887 EA1HVZ Jose +2141888 EB1EAC Jm2al@hotmail.com +2141889 EA1JCV VICTOR +2141890 EA1JDB Chus +2141891 EA1HPY Angel +2141892 EA1GFO Silvia +2141893 EA1FBW SALVA +2141894 EA1FBZ Juan +2141895 EA1FBP Salvador +2141896 EA1AER Juan +2141897 EA1HG ISMAEL +2141898 EA1HHI JOAQUiN +2141899 EA1IVX Txema +2141900 EA1HAR Jorge +2141901 EA1BAF Juan +2141902 EA1HLX Jaime +2141903 EA1GPE MARILUZ +2141904 EA1GPF MARIANO +2141905 EA1TZ PABLO +2141906 EB1AST PAULINO +2141907 EA1BZU Antonio +2141908 EB1HRW Javier +2141909 EA1JBM Enrique +2141910 EA1IVI Jose +2141911 EA1INV Luis +2141912 EA1DMJ VICTOR +2141913 EA1GWY Maria +2141914 EA1GZO Jose +2141915 EB1ACH FERNANDO +2141916 EA1HTT Manuel +2141917 EB1ILQ Gustavo +2141918 EA1FCX Pablo +2141919 EA1FDG Pedro +2141920 EA1IPP ROBERTO +2141921 EA1JDA Jos +2141922 EA1CF RAMON +2141923 EB1MM JOAQUIN +2141924 EA1FGJ Juan +2141925 EA1EOZ Roberto +2141926 EA1IZT Jose +2141927 EA1FCB Arturo +2141928 EA1GLL Sergio +2141929 EA1ERQ Miguel +2141930 EA1FA Fernando +2141931 EA1GXQ Felix +2141932 EA1HTE Jorge +2141933 EA1JBS Luis +2141934 EA1MW DAVID +2141935 EA1HFN Angel +2141936 EA1FBT David +2141937 EB1FWS MANUEL +2141938 EA1FCU Beatriz +2141939 EA1XY Tomas +2141940 EA1IZZ Manuel +2141941 EA1HG Ismael +2141942 EB1EYP YURI +2141943 EB1DSZ ROBERTO +2141944 EA1INF Ivan +2141945 EA1ISQ Jos +2141946 EA1GZB Agustino +2141947 EA1ERF MIGUEL +2141948 EA1DWZ JESUS +2141949 EA1FBW Salva +2141950 EB1ACH FERNANDO +2141951 EA1AQK Jos +2141952 EA1FDK Javier +2141953 EA1EWS Jose +2141954 EA1FDT Paco +2141955 EA1JBL Jose +2141957 EA1JBJ Javier +2141958 EA1BYC Marci +2141959 EA1EAS Jesus +2141960 EB1HXI ELISEO +2141961 EA1FEA MANUEL +2141963 EA1IQH Rafa +2141965 EA1DKM JUAN +2141966 EA1GSV Angela +2141967 EA1RCL Radio 2142001 EA2IP Jesus 2142002 EA2IV Alex 2142003 EA2FT Juan @@ -15483,7 +16901,7 @@ 2142015 EA2RY Roberto 2142016 EA2CYT Jose 2142017 EA2COA Luis -2142018 EA2EBX Cruz +2142018 EA2AQ Cruz 2142019 EA2ANS Ruben 2142020 EA2AM Hilario 2142021 EA2AVH Francisco @@ -15803,7 +17221,7 @@ 2142335 EA2EGL JAVIER 2142336 EA2AYW GOITIBERA 2142337 EA2ELK Jon -2142338 EA2EBX Cruz +2142338 EA2AQ Cruz 2142339 EA2DOW Felix 2142340 EA2EKO EA2EKO 2142341 EA2AFZ EA2AFZ @@ -15811,7 +17229,7 @@ 2142343 EA2CLO Jesus 2142344 EA2DQN Bikendi 2142345 EA2WM Jmd -2142346 EA2RKS Arsa +2142346 EA2RKS A.R.S.A. 2142347 EA2CXV Roberto 2142348 EA2CSK Eladio 2142349 EA2EIM Lude @@ -15826,7 +17244,7 @@ 2142358 EC2ADC EC2ADC 2142359 EA2BLV IXAKA 2142360 EA2PI Ban -2142361 EC2BAD EC2BAD +2142361 EC2BAD Santiago 2142362 EB2DRL Assys 2142363 EG2YOTA YOTA 2142364 EA2CSL Santiago @@ -15962,9 +17380,141 @@ 2142494 EA2EOR Laureano 2142495 EA2DOL ALFREDO 2142496 EA2GJ Jose +2142497 EA2DLR LUIS 2142498 EA2BJX Alberto 2142499 EA2DBI Ignacio 2142500 EA2ZM JOSE +2142501 EA2CSG EA2CSG +2142502 EA2AYX Maip +2142503 EB2EOG JESUS +2142504 EA2EQA EA2EQA +2142505 EA2DRD Ali +2142506 EA2DPZ EA2DPZ +2142507 EA2DNV BERNAD +2142508 EA2BJR ANGEL +2142509 EA2EJC EA2EJC +2142510 EA2ATV INIGO +2142511 EA2EPR Emiliano +2142512 EA2EQG Ruben +2142513 EA2CSG Alberto +2142514 EA2EOP Angel +2142515 EA2EKF Pedro +2142516 EA2DWL Josu +2142517 EB2GFJ KAKI +2142518 EB2BUS Eduardo +2142519 EA2DPQ JOSe +2142520 EB2AXJ Adolfo +2142521 EA2CNL Txema +2142522 EA2IP Jesus +2142523 EA2UM Santi +2142524 EA2CSH EA2CSH +2142525 EA2EJC Jose +2142526 EB2BOP Benjamin +2142527 EB2RI IGNACIO +2142528 EB2CYH JAVI +2142529 EA2EFZ Manu +2142530 EC2UW Jon +2142531 EA2ATB Pedro +2142532 EB2GUH RAFAEL +2142533 EA2DGY Antonio +2142534 EB2BNT Jose +2142535 EA2QG PEDRO +2142536 EA2BIS JESUS +2142537 EA2ABG Juanma +2142538 EA2BQU Rafael +2142539 EB2BE Fran +2142540 EB2BOP Benjamin +2142541 EA2EEL Alberto +2142542 EA2EQT Juan +2142543 EB2AFP Javier +2142544 EA2XB Jose +2142545 EA2DVT Alejandro +2142546 EA2AIV Nacho +2142547 EA2CDQ Ramon +2142548 EA2HK Antonio +2142549 EB2EUJ ANDRES +2142550 EA2ERG Raul +2142551 EA2DDH Jesus +2142552 EA2ABG Juanma +2142553 EA2DMO GONZALO +2142554 EA2EQM Xabi +2142555 EC2ABH PATXI +2142556 EB2BJL Josep +2142557 EA2DIU Jose +2142558 EA2EQN FERNANDO +2142559 EA2URZ EA2URZ +2142560 EA2RKA ASOC. +2142561 EA2EIT Carlos +2142562 EA2CJR Fernando +2142563 EA2ERC Imanol +2142564 EA2EQP MIKEL +2142565 EB2DPC Placido +2142566 EA2EQQ Javier +2142567 EA2CBT Andoni +2142568 EA2TU Javier +2142569 EA2EER Juan +2142570 EA2OSK Aitor +2142571 EA2SG Francisco +2142572 EA2EQV Luis +2142573 EA2AWP JESUS +2142574 EA2BMT Tomas +2142575 EA2EQX Angel +2142576 EA2EQY Jesus +2142577 EB2FEJ ELOY +2142578 EA2FBG Miguel +2142579 EA2EFV LUIS +2142580 EA2AJR Juan +2142581 EA2EGC Javier +2142582 EB2GAD ANTONIO +2142583 EA2DVN Txemi +2142584 EA2DPK Lino +2142585 EB2GTO Blas +2142586 EA2ERT LORENZO +2142587 EA2DVG INAKI +2142588 EA2KB Enry +2142589 EC2ATM Julen +2142590 EA2EFV LUIS +2142591 EB2GTO Blas +2142592 EA2ERO Alvaro +2142593 EA2AOW Javier +2142594 EA7DY DANIEL +2142595 EA2EOK Kokolotxo +2142596 EA2ERU Manuel +2142597 EA2WX Marcial +2142598 EA2ERX JOSEBA +2142599 EA2DMH Juan +2142600 EA2BBF JUAN +2142601 EA2ERV Manuel +2142602 EA2ERQ Borja +2142603 EA2DGP EA2DGP +2142604 EA2ERW Emilio +2142605 EA2CCX Emilio +2142606 EA2CBF Alejo +2142607 EA2ERN JUAN +2142608 EA2ERK JAVIER +2142609 EA2EQM Xabi +2142610 EA2ERB Oscar +2142611 EA2DAN Jaime +2142612 EA2ESA Alfredo +2142613 EA2EPO Juan +2142614 EB2BPF FC +2142615 EA2EFG Alfonso +2142616 EB2AAG Sendoa +2142617 EA2EPL Jesus +2142618 EA2ERH Miguel +2142619 EA2EQX Ngel +2142620 EA2BZT Luis +2142621 EA2EAS NICOLAS +2142622 EA2EPC Asier +2142623 EA2DZQ LUIS +2142624 EA2ANF Jose +2142625 EA2ZN VICTOR +2142626 EA2EQN Fernando +2142627 EA2ESI EA2ESI +2142628 EA2EOB Javier +2142629 EA2EAG Javier +2142630 EA2EPJ Juanma +2142631 EA2KK Julio 2143001 EA3DKP Ricardo 2143002 EA3DKP Ricardo 2143003 EA3DKP Ricardo @@ -16060,7 +17610,7 @@ 2143093 EA3BFF EA3BFF 2143094 EA3GPL Ea3gpl 2143095 EA3COZ Ea3coz -2143096 EA3HXH Namky +2143096 EA3HXH Javier 2143097 EA3GVJ Francisco 2143098 EA3GYS EA3GYS 2143099 EA3AZF EA3AZF @@ -16193,7 +17743,7 @@ 2143226 EA3EOT Ramon 2143227 EA3FB Miquel 2143228 EA3ARB Joan -2143229 EA3EW Ea3ew +2143229 EA3EW Jose 2143230 EA3HZU Diogo 2143231 EA3GMD Antonio 2143232 EA3BIJ Antonio @@ -16229,7 +17779,7 @@ 2143262 EA3IAI Andreu 2143263 EA3RKD CRC 2143264 EA3BIJ Antonio -2143265 EA3HCV Coke +2143265 EA3HCV Tomas 2143266 EB3BOK JORGE 2143267 EA3FBP Manuel 2143268 EB3DMA Manolo @@ -16307,7 +17857,7 @@ 2143340 EA3XD BUITRAGO 2143341 EA3EUO Ramon 2143342 EA3FIQ Ferran -2143343 EA3CAZ Esque +2143343 EA3CAZ Josep 2143344 EA3FUD Oriol 2143345 EA3BIG Manel 2143346 EA3AIZ EA3AIZ @@ -16329,7 +17879,7 @@ 2143362 EA3IK Enric 2143363 EA3TK EA3TK 2143364 EA3HLC Mart -2143365 EA3IAF EA3IAF +2143365 EA3IAF SERGIO 2143366 EA3GYZ Juan 2143367 EB3CES Ivan 2143368 EA3GOM Jose @@ -16380,7 +17930,7 @@ 2143413 EA3BAE Juan 2143414 EA3AXM Luis 2143415 EA3BA RAMON -2143416 EA3CAZ Esque +2143416 EA3CAZ Josep 2143417 EA3CUE Jordi 2143418 EA3GRC FELIPE 2143419 EA3FKP SANTIAGO @@ -16564,12 +18114,12 @@ 2143598 EA3EGP IGNACIO 2143599 EA3ICV David 2143600 EC3DAY Ramon -2143601 EA3GEO Ea3geo +2143601 EA3GEO Daniel 2143602 EA3RCI Jaime 2143603 EA3GTS Juanjo 2143604 EB3CPN Toni 2143605 EA3ICX Antonio -2143606 EA3HYN EA3HYN +2143606 EA3HYN Jose 2143607 EA3IDF Javi 2143608 EA3IDD Joan 2143609 EA3PA Albert @@ -16620,6 +18170,178 @@ 2143654 EA3IDP EA3IDP 2143655 EA3DYB JUAN 2143656 EA3HRT Oscar +2143657 EB3GML EB3GML +2143658 EA3FIR JOAQUIN +2143659 EB3FMU Daniel +2143660 EA3EJT Bernab +2143661 EB3CFV Luis +2143662 EA3EDK Juan +2143663 EA3HRD Angel +2143664 EA3HIH Ppalazon +2143665 EC3AIA Jordi +2143666 EA3HMT Angel +2143667 EB3EHZ EB3EHZ +2143668 EA3ICY VICTOR +2143669 EA3EJT Bernab +2143670 EA3ICQ Enrique +2143671 EA3GID Josep +2143672 EA3IAB TONI +2143673 EC3TV Bogdan +2143674 EA3HYW Javier +2143675 EB3EUH Ernesto +2143676 EA3BFU Toni +2143677 EA3FO Kim +2143678 EA3HTY Jose +2143679 EA3CIL JAIME +2143680 EA3FAX Jaume +2143681 EA3DW Jaume +2143682 EB3CPR Vicente +2143683 EA3IDV Salva +2143684 EB3TA Juan +2143685 EA3AXZ Josep +2143686 EA3URA Seccion +2143687 EB3CYB Juan +2143688 EA3GSF Lluis +2143689 EA3DUI MARTIN +2143690 EA3LX Juan +2143691 EA3GMP CARMEN +2143692 EA3TV RAMON +2143693 EA3KS Josep +2143694 EA3TB Cosme +2143695 EA3ICK Gus +2143696 EA3BMU Julio +2143697 EA3API Gaspar +2143698 EA3GIL Francesc +2143699 EB3DWQ Xavier +2143700 EA3FYN JOSE +2143701 EA3HLK JOAQUIN +2143702 EA3CQW Carlos +2143703 EB3FTZ Boni +2143704 EA3HYS Javichu +2143705 EA3JT JORDI +2143706 EA3FN AGUSTIN +2143707 EB3EMD Fernando +2143708 EA3EA JAIME +2143709 EA3HZL MANUEL +2143710 EA3IEM RADO +2143711 EA3JSM JOAN +2143712 EA3GZN Manuel +2143713 EA3IEH MANUEL +2143714 EA3GMM Francisco +2143715 EA3IEQ Aleix +2143716 EA3IEO Jordi +2143717 EA3IEI ESTEBAN +2143718 EA3IDY EA3IDY +2143719 EA3IEF JORDI +2143720 EA3GLE Arturo +2143721 EA3HRC Manuel +2143722 EB3BTB XAVI +2143723 EA3HJU Juan +2143724 EA3HBB DAVID +2143725 EA3HK Pete +2143726 EA3HDZ JEAN +2143727 EA3HYH SERGIO +2143728 EA3IEW Juan +2143729 EB3GCP XAVI +2143730 EA3IFA MARCELO +2143731 EA3URP ASOC. +2143732 EA3EL Eugenio +2143733 EA3HXT DAVID +2143734 EA3HXV Ramon +2143735 EA3AVS Albert +2143736 EA3KR SANTIAGO +2143737 EA3HTI Toni +2143738 EA3HWA Rafael +2143739 EA3IFH Andreu +2143740 EA3IFE David +2143741 EA3GBQ Pep +2143742 EC3CKN JOSE +2143743 EA3HWY JORGE +2143744 EA3GHO MANUEL +2143745 EA3BH Antonio +2143746 EA3API Gaspar +2143747 EA3HJA CARME +2143748 EA3IFJ Pablo +2143749 EA3IEX Jose +2143750 EB3CWN Luis +2143751 EB3CFH Joaquin +2143752 EA3HEL Jose +2143753 EA3IFO Quique +2143754 EA3IGJ MIGUEL +2143755 EB3GFH Javi +2143756 EB3GFC Javier +2143757 EA3IO Manuel +2143758 EG3HAM MercaHam +2143759 EA3AJ Ivan +2143760 EA3HMJ Jose +2143761 EA3ICE Pere +2143762 EA3MT JORDI +2143763 EA3IFZ JOSE +2143764 EA3GXZ Joan +2143765 EA3IFU Vicente +2143766 EA3IGH Isaac +2143767 EA3OA Josep +2143768 EA3IGD Jose +2143769 EA3HAQ Jose +2143770 EA3IGB Pau +2143771 EA3RCK Radio +2143772 EA3IFX Sisco +2143773 EA3IFU Vicente +2143774 EA3IAO Ricardo +2143775 EA3IDX Oriol +2143776 EA3QK JUAN +2143777 EA3DMN Francisco +2143778 EA3FRZ JOSEP +2143779 EA3IFW Luis +2143780 EA3ANX IGNACIO +2143781 EA3ICD Joan +2143782 EA3IGM CARLOS +2143783 EB3DWG MANOLO +2143784 EA3IEA Jordi +2143785 EA3IGQ Ricard +2143786 EA3NE Jimmuns +2143787 EA3DUF Diego +2143788 EA3IGO Socrates +2143789 EA3DB Toni +2143790 EA3PB Albert +2143791 EA3ARO Pablo +2143792 EA3IFH Andreu +2143793 EA3AEY Jose +2143794 EA3GOS Javier +2143795 EA3IGA Jordi +2143796 EA3AID Albert +2143797 EA3IES DAVD +2143798 EA3NP Juan +2143799 EA3GYH Josep +2143800 EA3FXS Josep +2143802 EA3IGV EA3IGV +2143803 EA3CSX Toni +2143804 EA2ATH Carlos +2143805 EA3IFC JOSEP +2143806 EA3HAP FRANCISCO +2143807 EA3IGZ Rafa +2143808 EA3IGY EA3IGY +2143809 EA3EBJ Salvador +2143810 EA3IEY MONTSE +2143812 EA3IHB Angel +2143813 EA3IHC Francisco +2143815 EA3IT Francisco +2143816 EB3GLV Joaqun +2143817 EB3BKW Mario +2143818 EA3HZW JORDI +2143819 EB3DZC JUAN +2143821 EA3IHH Toni +2143822 EA3IGN HELIOS +2143823 EA3ESZ Juan +2143824 EA3IGS EA3IGS +2143825 EA3HPE Lluis +2143826 EA3IFM OSCAR +2143827 EA3IHI David +2143828 EA3CSX Toni +2143829 EA3AAW RAMON +2143830 EA3HKC DAVID +2143831 EA3ASP JOSEP +2143832 EA3VO Javier 2144001 EA4FVK Humphrey 2144002 EA4GQW Pablo 2144003 EA4AAE Javier @@ -16656,7 +18378,7 @@ 2144034 EA4ALX Jorge 2144035 EA4DDL David 2144036 EC4DA Dani -2144037 EA4EQU Ea4equ +2144037 EA4EQU Antonio 2144038 EA4GRN Tagra 2144039 EA4EQG Joaquin 2144040 EA4GRR Teo @@ -16673,7 +18395,7 @@ 2144051 EA4FCO Ea4fco 2144052 EA4GUX Fernando 2144053 EB4FJN JAVIER -2144054 EA4EZW EA4EZW +2144054 EA4EZW VICENTE 2144055 EA4FFI EA4FFI 2144056 EA4GIL EA4GIL 2144057 EA4GVR TONY @@ -16681,7 +18403,7 @@ 2144059 EA4GHN Ea4GHN 2144060 EA4DR EA4DR 2144061 EA4DAT Juan -2144062 EA4EVH EA4EVH +2144062 EA4EVH Fernando 2144063 EA4EAG Luis 2144064 EA4GTY Fran 2144065 EA4BHK EA4BHK @@ -16689,7 +18411,7 @@ 2144067 EA4TN EA4TN 2144068 EA4GVA EA4GVA 2144069 EA4ALK Luis -2144070 EA4GPW EA4GPW +2144070 EA4GPW Angel 2144071 EA4EWR EA4EWR 2144072 EA4MZ Mo 2144073 EA4GVX Ea4gvxfabian @@ -16758,9 +18480,9 @@ 2144136 EA4FMF Sagitario 2144137 EB4FBZ EB4FBZ 2144138 EA4FHY JC -2144139 EA4GFC Cosme +2144139 EA4GFC Santi 2144140 EA4GUY JOSE -2144141 EA4GSL Lucas +2144141 EA4AW Lucas 2144142 EA4IV EA4IV_Miguel 2144143 EA4RCR REM 2144144 ED4YAO Miguel @@ -16773,8 +18495,8 @@ 2144151 EA4DGY Jesus 2144152 EA4AWE Ea4awe 2144153 EA4GWA Baltasar -2144154 EA4GSF Totoro -2144155 EA4FVU Ea4fvu +2144154 EA4GSF Tomas +2144155 EA4FVU Tito 2144156 EA4GRX FRANCISCO 2144157 EA4GAY Angel 2144158 EA4CM Angel @@ -16822,7 +18544,7 @@ 2144200 EA4AIV JOSE 2144201 EA1GHW Edmundo 2144202 EA4GH JOSE -2144203 EA4AOJ EA4AOJ +2144203 EA4AOJ JOSE 2144204 EA4GWY Eloy 2144205 EB4EYD VICENTE 2144206 EA4GXC Javi @@ -16941,7 +18663,7 @@ 2144319 EA4FP EA4FP 2144320 EA4PS Pablo 2144321 EA4XW EA4XW -2144322 EA4GVL Llanero +2144322 EA4GVL Antonio 2144323 EA4CZM Andres 2144324 EA4FPT M.Carmen 2144325 EB4EDN Bascuana @@ -17008,7 +18730,7 @@ 2144386 EA4DNC JJN 2144387 EA4GZY Sergio 2144388 EA4GYJ Omitron -2144389 EA4GAP Ea4gap +2144389 EA4GAP JUAN 2144390 EA4GIS EA4GIS 2144391 EA4DWS Carlos 2144392 EA4BUH Jose @@ -17037,7 +18759,7 @@ 2144415 EC4AML G-CH 2144416 EA4GIB Fran 2144417 EA4GTC ALVAREZ -2144418 EA4EZW EA4EZW +2144418 EA4EZW Vicente 2144419 EA4HAK Jose 2144420 EA4ALN Alberto 2144421 EA4HAI Armando @@ -17184,9 +18906,188 @@ 2144562 EB4DSP ANTONIO 2144563 EA4BDL Carlos 2144564 EA4GRR Teo +2144565 EA4HCT ARMANDO 2144566 EA4FTR Leonardo 2144567 EA4HAM Ntsuba 2144568 EA4FUS ALEJANDRO +2144569 EA4HCN ANGRODRI +2144570 EA4BJV Pablo +2144571 EA4HT Jose +2144572 EA4HAT Ea4hat +2144573 EA4GDA Jose +2144574 EA4GDB Fernando +2144575 EA4BUI Esteban +2144576 EA4AAZ Tomis +2144577 EA4EYF EA4EYF +2144578 EC4ACH DAVID +2144579 EA4GUG Manuel +2144580 EA4FEG Juan +2144581 EA4ZH MARIANO +2144582 EA4CFT PABLO +2144583 EA4CK Gonzalo +2144584 EA4HCW LUIS +2144585 EA4HCX Oscar +2144586 EA4FVG EMILIO +2144587 EA4EKH Raul +2144588 EA4HAY Marcos +2144589 EA4GW Eloy +2144590 EA4HDA Fer +2144591 EA4ERZ Marcos +2144592 EA4GCQ Angel +2144593 EA4FFX Jose +2144594 EA4ETM EA4ETM +2144595 EA4FJD Jose +2144596 EA4FFF Chema +2144597 EA4EVB Jose +2144598 EB4ENZ Camello +2144599 EA4HDB Oscarmh +2144600 EA4HDD EA4HDD +2144601 EA4FLZ Lorenzo +2144602 EA4GIN ANGEL +2144603 EA4GND Sergio +2144604 EA4BQG Guillermo +2144605 EA4FFF Chema +2144606 EA4FFA Manuel +2144607 EA4GRG Victor +2144608 EA4HCA ALFREDO +2144609 EA4YX Carlos +2144610 EA4CAX Rodolfo +2144611 EA4FPF DAVID +2144612 EA4HBM Mario +2144613 EA4DOC Pedro +2144614 EA4GAC David +2144615 EA4EIU Manuel +2144616 EA4HDJ Alex +2144617 EA4EYU Antonio +2144618 EA4KM PEDRO +2144619 EA4HDF Javier +2144620 EA4GGZ Pedro +2144621 EA4GJM ALEJANDRO +2144622 EA1PR Paco +2144623 EB4CGR Tomas +2144624 EA4FZZ Jose +2144625 EA4HDO Juan +2144626 EB4ECD Raul +2144627 EA4HDM Sergio +2144628 EA4PI Gonzalo +2144629 EA4HDO JUAN +2144630 EA4HDL Rafael +2144631 EA4ERZ Marcos +2144632 EA4BDI Emilio +2144633 EA4NR Luis +2144634 EA4HDY Borja +2144635 EA4JM Juan +2144636 EA4HDD JOSE +2144637 EB4HDI Jose +2144638 EB4ASV Francisco +2144639 EA4HDG Blanca +2144640 EA4GSE JUAN +2144641 EA4PB Pedro +2144642 EA4XD Mario +2144643 EA4HDX Paco +2144644 EA4HDP DAVID +2144645 EA4GPW Angel +2144646 EA4FGX JULIO +2144647 EA4HCU Jose +2144648 EA4EOB Rafa +2144649 EA4EWR FERNANDO +2144650 EA4FSF Javier +2144651 EA4HDR Simon +2144652 EA4EWW Jose +2144653 EA4XW JOSE +2144654 EA4HEJ Javi +2144655 EB4FBS PABLO +2144656 EA4HEA Jorge +2144657 EA4DDR RAFAEL +2144658 EA4CRS Miguel +2144659 EA4OV Julio +2144660 EA4BBN JOSE +2144661 EA4BVU PEPE +2144662 EA4GOD RICARDO +2144663 EA4FHF Jose +2144664 EA4HES Pedro +2144665 EB4AGE Gonzalo +2144666 EA4DAU JAVIER +2144667 EA4HEK David +2144668 EA4HER Victor +2144669 EA4GIE Marius +2144670 EA4GTJ Juan +2144671 EA5IXB Pedro +2144672 EA4SN Sole +2144673 EA4HEZ JOSE +2144674 EA4EPI MIGUEL +2144675 EA4FWO Javier +2144676 EA4HAK Jose +2144677 EB4AVN Juan +2144678 EB4DB Susana +2144679 EB4FRS Sergio +2144680 EB4FRH Marcos +2144681 EA4CU RAFA +2144682 EA4HCS Gallegojaime +2144683 EA4HET Carlos +2144684 EA4DDW Marcelino +2144685 EA7KGH Jesus +2144686 EA4HBS David +2144687 EA4EPV Raul +2144688 EA4FIT Antonio +2144689 EA4GGY Fernando +2144690 EA4ESU Jose +2144691 EA4HDN Gus +2144692 EC4AFV Javier +2144693 EA4HFD JOSE +2144694 EA4BJT Javier +2144695 EA4GXK Carlos +2144696 EA4GTP EA4GTP +2144697 EA4GOH Miguel +2144698 EA4BIZ JUAN +2144699 EA4BYI Angel +2144700 EA4AHF Alfonso +2144701 EA4BCI MAXI +2144702 EA4HFC Carlos +2144703 EA4FFZ RAMON +2144704 EB4AKF Fernando +2144705 EA4HFF Cesar +2144706 EA4FEP Juanjo +2144707 EA4ENN Domingo +2144708 EA4FTQ Jorge +2144709 EA4GCJ Diego +2144710 EA4GNQ Carlos +2144711 EA4GHP Perico +2144712 EA4GIR JOSE +2144713 EA4BDJ Angel +2144714 EA4GGL Angel +2144715 EA5IJF JOSE +2144716 EA4HFR Sergio +2144717 EB4DYL Carlos +2144718 EA4HGA RAUL +2144719 EA4FMZ LUIS +2144720 EA4HFX Gonzalo +2144721 EA4KM Pedro +2144722 EB4AGN MAYP +2144723 EA4HEW Oscar +2144724 EA4FVU TITO +2144725 EA4GPP Miguel +2144726 EA4GJA German +2144727 EB4AVN Juan +2144728 EA4ENG EA4ENG +2144730 EA4GVC Jose +2144731 EA4HDP David +2144732 EA4ESU Jose +2144733 EB4GDB David +2144734 EA4GYQ Angel +2144735 EA4HCZ Manuel +2144736 EA4HDW Enrique +2144737 EA4GTS Tomas +2144738 EA4HFO Jorge +2144739 EA4AT Marcelino +2144740 EA4DNW Carlos +2144741 EA4FRK Chaparro +2144742 EA4HES Perico +2144743 EA4HGF Paco +2144746 EA4HGA EA4HGA +2144747 EA4GXG Jose +2144748 EA4AOR Alexis +2144749 EA4HGI Pablo 2145001 EA5AWM Vicente 2145002 EA5AWM Vicente 2145003 EA5HJX Alex @@ -17227,7 +19128,7 @@ 2145038 EA5GTU DIEGO 2145039 EA5GXU JOSE 2145040 EA4FVB Pablo -2145041 EA5HNH ANDRES +2145041 EA5GK ANDRES 2145042 EA5ASE FRANCISCO 2145043 EA5HYC Alex 2145044 EB5TC Paco @@ -17314,7 +19215,7 @@ 2145125 EA5BI Carlos 2145126 EA5AQB Salvador 2145127 EA5ERC Rodriguez -2145128 EA5SW EA5SW +2145128 EA5SW Jose 2145129 EA5IDR FRANCISCO 2145130 EA5URB EA5URB 2145131 EA5IHR Alfredo @@ -17341,8 +19242,8 @@ 2145152 EA5IIB LOPEZ 2145153 EA5WO Andreu 2145154 EA5DHO Jose -2145155 EA5ILA EA5ILA -2145156 EA5KE EA5KE +2145155 EA5ILA RAFA +2145156 EA5KE Paco 2145157 EC5CIA Daniel 2145158 EA5IAO Marcos 2145159 EA5IV Jos @@ -17389,7 +19290,7 @@ 2145200 EA5EMY Eugenio 2145201 EA5IIN Soledad 2145202 EB5ENQ JOSE -2145203 EA5HSP GARCIA +2145203 EA5HSP PEDRO 2145204 EA5FO Fortunado 2145205 EA5JOE EDUARDO 2145206 EA5CLH Pasqual @@ -17398,7 +19299,7 @@ 2145209 EA5IIE Joaquin 2145210 EA5FWW Paco 2145211 EA5IRN Metratiko -2145212 EA5IJG ANGEL +2145212 EA5JN ANGEL 2145213 EB5FRK EB5FRK 2145214 EA5IRI CRESPO 2145215 EA5EV Pepe @@ -17458,7 +19359,7 @@ 2145269 EB5EP Esteban 2145270 EA5BMT Paco 2145271 EA5FVX Javi -2145272 EA5CT Jimmy +2145272 EA5CT Jimi 2145273 EA5ES Jos 2145274 EA5IKG Juan 2145275 EA5IHI Alberto @@ -17495,7 +19396,7 @@ 2145306 EA5XM Ea5xm 2145307 EA5ABE Jesus 2145308 EA5IAW Toni -2145309 EA5BB EA5BB +2145309 EA5BB Salva 2145310 EA5GMB Miguel 2145311 EA5IRU RAMON 2145312 EA1NY Vick @@ -17652,7 +19553,7 @@ 2145463 EA5ICV Josue 2145464 EA5WF Valentin 2145465 EA5DN Joaquin -2145466 EA5WM ANTONIO +2145466 EA5WM TONI 2145467 EA5ITS MARCOS 2145468 EA5EVV Ricardo 2145469 EA5GUR Gonzalez @@ -17757,8 +19658,8 @@ 2145568 EB5CEN JAVIER 2145569 EA5ISK Carmelo 2145570 EA5IOU RAUL -2145571 EB5GDM EB5GDM -2145572 EA5HXT EA5HXT +2145571 EB5GDM Rafael +2145572 EA5HXT Javier 2145573 EA5TVE JOSE 2145574 EA5CTD Bartolom 2145575 EA5IUT Oscar @@ -17806,7 +19707,9 @@ 2145617 EA5HVL CORTIJOS 2145618 EA5HSK PEDRO 2145619 EA5ILG EA5ILG +2145620 EA5AJZ EA5AJZ 2145621 EA5HXM LUISA +2145622 EA5DGP Gutierrez 2145623 EA5JOE Eduardo 2145624 EA5ST MANUEL 2145625 EA5HT Jesus @@ -17818,6 +19721,203 @@ 2145631 EA5ETS German 2145632 EA5HLU LUTE 2145633 EA5HDT GREGORIO +2145634 EA5HB PACO +2145635 EA5JD Jose +2145636 EB5AQG Manuel +2145637 EA5GTF PACO +2145638 EA2BA EA2BA +2145639 EA5EZ LUIS +2145640 EA5HYP Dakar +2145641 EA5HZR Pepe +2145642 EB5AYV JUAN +2145643 EA5IUW Dave +2145644 EA5GHD Fernando +2145645 EA5IVK GREGORIO +2145646 EA5URR EA5URR +2145647 EA5CM Jose +2145648 EA5IVP Vicente +2145649 EA5HPJ KIKO +2145650 EA5IPP Juan +2145651 EA5IVN Feliciano +2145652 EA5IKQ Pablo +2145653 EB5ILJ Evaristo +2145654 EA5HRX Pedro +2145655 EA5HGE Andres +2145656 EA5IVY FRANCISCO +2145657 EA5HZH Jose +2145658 EA5GV Marco +2145659 EA5EQR EMILIO +2145660 EB5EWM ZARZO +2145661 EA5NB EA5NB +2145662 EA5BU Chimo +2145663 EA5HTK RUBEN +2145664 EA5IQI Andres +2145665 EB5ILI JULIO +2145666 EA5ZM Pedro +2145667 EA5ABE Jesus +2145668 EA5IVZ TONY +2145669 EB5IVY Francisco +2145670 EA5UR Hector +2145671 EA5INF MANUEL +2145672 EA5HLA Jose +2145673 EA5IWC Jose +2145674 EA5ISX Salvador +2145675 EA5ELX Seccion +2145676 EA5IUE RAMON +2145677 EA5HZY MIGUEL +2145678 EA5HPJ KIKO +2145679 EB5AYE Jose +2145680 EA5HUR JUAN +2145681 EA5AZI JESUS +2145682 EB5JRL Manu +2145683 EA5LG Lope +2145684 EA5AIA Jorge +2145685 EA5ICX Tomas +2145686 EB5CVH Jose +2145687 EA5IFA VICENTE +2145688 EA5LH Juan +2145689 EC5AJU RAFAEL +2145690 EA5HX FRANCISCO +2145691 EA5EES Miguel +2145692 EA5IBJ Juan +2145693 EA5IPO JOSE +2145694 EA5DF Toni +2145695 EA5DNO Ramon +2145696 EA5UI Jose +2145697 EA5ICY JOSE +2145698 EA5DUF PACO +2145699 EA5ERA Salvador +2145700 EA5AAR Manuel +2145701 EB5HJY RAFAEL +2145702 EA5CB FIDEL +2145703 EB5FOJ Victor +2145704 EA5AYJ Arturo +2145705 EB5HUO JUAN +2145706 EA5IX FRANCISCO +2145707 EA5BG BLAS +2145708 EA5AEL MANUEL +2145709 EA5GLZ Paco +2145710 EA5DNO Ramon +2145711 EA5INZ Paco +2145712 EA5HND Ramon +2145713 EA5ITW JOSE +2145714 EA5VL Vicente +2145715 EA5AJB PACO +2145716 EA5IKX Hector +2145717 EB5HAH Jose +2145718 EA4DW MANUEL +2145719 EA5BZ Ruben +2145720 EA5IKU Gabriel +2145721 EA5TK Joaqun +2145722 EB5BSH Pedro +2145723 EA5GM CARLOS +2145724 EA5IMU JAVIER +2145725 EA5HIG Juanjo +2145726 EA5AGN Paco +2145727 EA5MJ Julian +2145728 EB5DZC Juan +2145729 EA5BET Toni +2145730 EA5ECS LUIS +2145731 EA5HLH PEPE +2145732 EB5IQW Manolo +2145733 EA5ETT Jose +2145734 EB5DPI Carlos +2145735 EA5IWS Angel +2145736 EA5AK Juan +2145737 EC5RCA RC.Digital +2145738 EB5GSU Miguel +2145739 EB5IYM MANOLO +2145740 EA5DVI Ismael +2145741 EA5HJP MANOLO +2145742 EA5IWV SEVERIANO +2145743 EA5IKA GERMAN +2145744 EA5IXE Daniel +2145745 EA5IWW ANDRES +2145746 EA5BCO Dionisio +2145747 EA5IWP Pablo +2145748 EA5HFD David +2145749 EA5URM Union +2145750 EB5ECA Ramon +2145751 EB5AJB JOSE +2145752 EA5BXA Ramon +2145753 EB5KT Elias +2145754 EA5HJ Jose +2145755 EA5IXA Quico +2145756 EA5GO Vicente +2145757 EA5HFB SERGIO +2145758 EA5IXH Juan +2145759 EC5AEG Antonio +2145760 EA5AEG ANTONIO +2145761 EA5IVY FRANCISCO +2145762 EB5DDC Jose +2145763 EA5IQR XIMO +2145764 EA5HFD DAVID +2145765 EA5HZP Donato +2145766 EA5JI RAFAEL +2145767 EA5URG A.C.R.P. +2145768 EA5IWQ FRANCISCO +2145769 EA5BRF Jose +2145770 EB5BZM Luis +2145771 EB5JZZ Jose +2145772 EA5IXG Jose +2145773 EA5IXI Vicent +2145774 EA5HBD Pedro +2145775 EB5FPJ JOSE +2145776 EA5ZL NICETO +2145777 EA5IXK David +2145778 EB5DDC Soset1 +2145779 EB5EGK RICKY +2145780 EA5CU Pedro +2145781 EA5ANU Jose +2145782 EA5ITD Vicente +2145783 EA5IIL Enrique +2145784 EA5DBV Rafa +2145785 EB5EWB Jose +2145786 EA5INM JUAN +2145787 EB5DEA Miguel +2145788 EA5HTE JOSE +2145789 EA5DQR Tony +2145790 EA5IYG ToniT +2145791 EA5AHR Javier +2145792 EA5HBS Fernando +2145793 EA5EF Paco +2145794 EA5HJA Javier +2145795 EA5ACG Vicente +2145796 EA5FAS OLIVER +2145797 EA5RCD RADIO +2145798 EB5BZM Luis +2145799 EA5HMX SERGIO +2145800 EA5HKY RAUL +2145801 EB5JHB JUAN +2145802 EA5IJM Miguel +2145803 EA5BCQ JOSE +2145804 EA5DT Joaquin +2145805 EA5IWI Gustavo +2145806 EA5IVI Agustin +2145807 EA5DKX JOSE +2145808 EB5FKD MODESTO +2145809 EA5HDM Jose +2145810 EC5AEI JUAN +2145811 EA5DIF Enrique +2145812 EA5CWC Vicente +2145813 EA5IYB SEBAS +2145814 EA5AZ JOSE +2145815 EA5GP Claudio +2145816 EA5AIA Jorge +2145817 EA5WZ Carlos +2145818 EA5IYE Juan +2145819 EA5HTH Juan +2145820 EA5IVL Joaquin +2145821 EA5DNN Damian +2145822 EB5IVP Jose +2145823 EA5HBA MIGUEL +2145824 EB5JFJ Antonio +2145825 EA5GYE JOSE +2145826 EA5IVT Hector +2145828 EA5ISJ CARLOS +2145829 EA5BFT Pedro +2145830 EA5IID Guillermo +2145831 EA5GSA Jose 2146001 EA6AFZ Antonio 2146002 EA6AID Ana 2146003 EA6AFZ Antonio @@ -17848,7 +19948,7 @@ 2146028 EA6TF Cometa 2146029 EA6AGB Paulino 2146030 EA6FS Franc -2146031 EB6PZ Orion +2146031 EB6PZ Enrique 2146032 EB6AOK Enric 2146033 EB6ABQ Miquel 2146034 EA6GK Mitos @@ -17858,7 +19958,7 @@ 2146038 EA6AKL LINARES 2146039 EA6SB ALBERTO 2146040 EA3GYP Xavier -2146041 EA6AMR EA6AMR +2146041 EA6AMR Jose 2146042 EA6ALW Javier 2146043 EA6AIH Julian 2146044 EA6OI Lopez @@ -17878,6 +19978,20 @@ 2146058 EA6TC John 2146059 EB6MU JAIME 2146060 EA6AGT Santi +2146061 EA6AMV Juanmi +2146062 EA6GC Julio +2146063 EA6ACX Enrique +2146064 EA6AKD Toni +2146065 EA6ANA ROBERTUX +2146066 EB6WS Genis +2146067 EA6LD Vicente +2146068 EA6ANF MATEU +2146069 EA6NP Juan +2146070 EA6ANA Roberto +2146071 EA6OK Tony +2146072 EA6ALS Ubaldo +2146073 EB6ACD Pedro +2146074 EA6ANJ TONI 2147001 EA7UW Rafael 2147002 EA7CRA Jose 2147003 EA7JRS Manuel @@ -17983,7 +20097,7 @@ 2147103 EA7JRE EA7JRE 2147104 EA7AJV EA7AJV 2147105 EA7HCL EA7HCL -2147106 EA7BZO PENDON +2147106 EA7BZO JOSE 2147107 EA7IWD LOLO 2147108 EB7BPN Eb7bpn 2147109 EB7FUF PACO @@ -18051,7 +20165,7 @@ 2147171 EA7JMO Cano 2147172 EA7KI DAVID 2147173 EA7JTR Bernabe -2147174 EA7GVZ Majide +2147174 EA7GVZ Manuel 2147175 EA7AYT Fernando 2147176 EA7JKJ EA7JKJ 2147177 EA7JTW Miguel @@ -18075,7 +20189,7 @@ 2147195 EA7IXY Selu 2147196 EA7JQU LAZARO 2147197 EA7JMF Yeyus -2147198 EB7BFP EB7BFP +2147198 EB7BFP Angel 2147199 EA7AHG Francisco 2147200 EA7BS Salvatore 2147201 EA7RIY Alanchap @@ -18099,7 +20213,7 @@ 2147219 EA7BHR Paco 2147220 EA7AYS Pedro 2147221 EA7BRQ Gines -2147222 EA7CTL Ea7ctl +2147222 EA7CTL Manuel 2147223 EA7GWD Pepe 2147224 EA7JYO Denis 2147225 EA7JTL EA7JTL @@ -18175,16 +20289,16 @@ 2147296 EA7JWE Topo 2147297 EA7EKS Jess 2147298 EC7AAV EC7AAV -2147299 EA7GBH Antonio +2147299 EA7BF Antonio 2147300 EA7JCU EA 2147301 EA7OC EA7OC 2147302 EA5AD EA5AD -2147303 EA7JGM Cruz -2147304 EA7HCV Jaferbe +2147303 EA7JGM Antonio +2147304 EA7BE Francisco 2147305 EA7HBM Ea7hbm 2147306 EA7JSE JUAN 2147307 EB7DHL EB7DHL -2147308 EA7YV EA7YV +2147308 EA7YV JUAN 2147309 EA7GSP Rafael 2147310 EA7EVA Manuel 2147311 EA1HES Slatymer @@ -18233,7 +20347,7 @@ 2147354 EA4FRL JOSE 2147355 EA7IVC Antonio 2147356 EA7YA Andres -2147357 EA7ZZ EA7ZZ +2147357 EA7ZZ Manuel 2147358 EA7FLY RODRIGUEZ 2147359 EA7AAF Ea7aaf 2147360 EA7HMJ Claudio @@ -18286,7 +20400,7 @@ 2147407 EA7AVH Mora 2147408 EA7EN JESUS 2147409 EA7IOA EA7IOA -2147410 EA7GXH JorgeGon +2147410 EA7GXH Jorge 2147411 EA7CVL Mateo 2147412 EA7IQW Jebomu 2147413 EA7JM Vilches @@ -18366,9 +20480,9 @@ 2147487 EA7JZT Pedro 2147488 EA7JYD MANOLO 2147489 EB7AGT EB7AGT -2147490 EA7HHG EA7HHG +2147490 EA7HHG HECTOR 2147491 EA7HZY FERNANDO -2147492 EB9AAL EB9AAL +2147492 EB9AAL Jose 2147493 EA7GZV Joraes 2147494 EA7GAS Juan 2147495 EC7AJP Cristbal @@ -18379,7 +20493,7 @@ 2147500 EA7JLP Miguel 2147501 EA7JVU JM 2147502 EA7IAO Vicente -2147503 EA7JQJ Ruben +2147503 EA7BL Ruben 2147504 EA7HQL Andres 2147505 EA7FVH MANUEL 2147506 EA7HUZ EA7HUZ @@ -18394,12 +20508,12 @@ 2147515 EA7JVM MANUEL 2147516 EA7AYU Juan 2147517 EA7EPL SAENZ -2147518 EA7IBT Martin +2147518 EA7IBT Domingo 2147519 EA7JPM JESUS 2147520 EA7JB Pea 2147521 EA7ZC PACO 2147522 EA7KDM PEPE -2147523 EA7JW Rico +2147523 EA7JW David 2147524 EA7HT RAFAEL 2147525 EA7KCO FRANCISCO 2147526 EA7KEF Acamac1 @@ -18438,7 +20552,7 @@ 2147559 EB7ERZ Juanlu 2147560 EA7EF PACO 2147561 EA7HPB Paul -2147562 EB7EDI JESUS +2147562 EA7KHM JESUS 2147563 EA7AC GERMAN 2147564 EA7ITL Sergio 2147565 EA7JLH Jose @@ -18470,6 +20584,7 @@ 2147591 EA7HQF ANTONIO 2147592 EA7KFH MVNET 2147593 EA7KFF JUAN +2147594 EA7KBP Jose 2147595 EA7GUB LOPEZ 2147596 EA7CC BLANQUEZ 2147597 EA7JUJ EA7JUJ @@ -18481,40 +20596,253 @@ 2147603 EA7GAH Jose 2147604 EA7KFJ Angel 2147605 EA7KFL Antonio -2148001 EA8YAT Alfred +2147606 EA7KFJ Angel +2147607 EA7JFR Alejandro +2147608 EA7IVW MANUEL +2147609 EA7KFO Alberto-Granada +2147610 EA7GAH Jose +2147611 EA7JLE Ea7jle +2147612 EA7AFT SEPULVEDA +2147613 EA7JUE M +2147614 EA7JIB JOSE +2147615 EA7KDZ DIEGO +2147616 EA7BPO BERNARDO +2147617 EA7IYD MIGUEL +2147618 EA7JNL EA7JNL +2147619 EA7KFR JOSE +2147620 EA7JHX Rafael +2147621 EA7KDR Lizaro +2147622 EA7NK Francisco +2147623 EC7ZT Manu +2147624 EA7IGU Juan +2147625 EA7MED Mario +2147626 EA7JRG Jose +2147627 EA7JAN Jose +2147628 EB7FNH Alfonso +2147629 EA7AZH CMilla +2147630 EA7JDR JUAN +2147631 EA7FWR ANTONIO +2147632 EA7JCM JOSE +2147633 EA7KFV Leo +2147634 EA7KFT Antonio +2147635 EA7CFO Serafin +2147636 ED7YBB ED7YBB +2147637 EA7IKY PACO +2147638 EA7JTO Borja +2147639 EA7JRU Angel +2147640 EA7AUZ MIGUEL +2147641 EA7KFW Jose +2147642 EA7AAE Daniel +2147643 EA7JYU Andres +2147644 EA7GTK FRANCISCO +2147645 EA7KGD Jorge +2147646 EA7FRQ RAMON +2147647 EA7HMY Jose +2147648 EA7JIC Jacinto +2147649 EA1JJO IOREST +2147650 EA7INN Francisco +2147651 EA7HPY FRANCISCO +2147652 EA7GGA Ramon +2147653 EC7ZV Miguel +2147654 EA7KGJ DAVID +2147655 EA7JHP Hector +2147656 EA7JSV RAFAEL +2147657 EA7DZB Horacio +2147658 EA7KFB Jesus +2147659 EA3HCV Tomas +2147660 EB7BFP Angel +2147661 EA7GA Lorenzo +2147662 EA7KCB Rafael +2147663 EA7JFX Miguel +2147664 EA7EER JOSE +2147665 EA7HGW Francisco +2147666 EC7AJT JUAN +2147667 EA7JKM Manuel +2147668 EA7MLR Manuel +2147669 EA7FWG IGNACIO +2147670 EA7HMK Pepe +2147671 EA7HXL Alberto +2147672 EB7BFG Antonio +2147673 EA7HMZ Jose +2147674 EA7KBY RAFAEL +2147675 EA7JXU Juan +2147676 EA7HGC Tomas +2147677 EA7IZQ Pedro +2147678 EA7AMN Miguel +2147679 EA7IAP Alejandro +2147680 EA7KC Miguel +2147681 EA7KEK Jesus +2147682 EA7JLN MANU +2147683 EB7CIA Juan +2147684 EA7RKB CLUB +2147685 EA7KCA JOSE +2147686 EA7BPQ LUIS +2147687 EB7CJQ Jose +2147688 EA7GGI Quino +2147689 EA7KGL BARTOLOME +2147690 EB7GGF Juan +2147691 EA7KGA Agustin +2147692 EA7BDA Manolo +2147693 EA7DNE Bernabe +2147694 EA1JJO ETSERO +2147695 EB7BNC Alfonso +2147696 EA7IUS Alberto +2147697 EB7DLN MIGUEL +2147698 EA7WJ JOSE +2147699 EA7KGO JAVIER +2147700 EA7KAU JUSTO +2147701 EA7FDO Jose +2147702 EB7ERZ Juanlu +2147703 EA7GC Enrique +2147704 EA7HNF SERAFIN +2147705 EA7IUS Alberto +2147706 EA7KFZ Joaquin +2147707 EA7KGT Fede +2147708 EA7JTX Antonio +2147709 EA7KDW Jon +2147710 EA7HFW Manuel +2147711 EA7KGW Jose +2147712 EA7YM ANTONIO +2147713 EA7IWT Luis +2147714 EC7DGD MIGUEL +2147715 EA7JIZ LUIS +2147716 EA7IVD DAVID +2147717 EA7KU Pepe +2147718 EA7DHT Charlie +2147719 EA7FDO Jose +2147720 EA7JGA MANUEL +2147721 EA7JFZ JOSE +2147722 EA7JRV RODRIGO +2147723 EA7KHD Jaime +2147724 EA7XJ Bartolome +2147725 EA7AJG Antonio +2147726 EA7JWZ MARIANO +2147727 EB7HMS ANTONIO +2147728 EA7APF PEPE +2147729 EA7BSK Antonio +2147730 EA7FEG Ricardo +2147731 EA7JMJ Angel +2147732 EA7JMK Antonio +2147733 EA7KHQ Pedro +2147734 EA7KHK Carlos +2147735 EA7JFJ Manuel +2147736 EA7JLC Juan +2147737 EA7DHT CARLOS +2147738 EA7JCP MANOLO +2147739 EB7HNP JOSE +2147740 EA7JLT MANOLO +2147741 EA7RF Jose +2147742 EA7CTV RAFAEL +2147743 EA7JBK Jose +2147744 EA7IRW MARIANO +2147745 EA7FTX CARLOS +2147746 EA7URA URA +2147747 EA7KGR Virtudes +2147748 EA7HJW Carlos +2147749 EB7DQN Jose +2147750 EA7EZR Jose +2147751 EB7ATD MANOLO +2147752 EA7OT JOSE +2147753 EA7JKS Jose +2147754 EA7HLE CLAUDIO +2147755 EA5EPU FRANCISCO +2147756 EA7ICA Fernando +2147757 EA7KHR Juan +2147758 EA7HHW Juan +2147759 EB7COL Jose +2147760 EA7IZG Octavio +2147761 EA7KHX Martin +2147762 EA7KGV Jose +2147763 EA7KHN Miguel +2147764 EA7KIA Francisco +2147765 EA7QC Francisco +2147766 EA7KBS Jesus +2147767 EA7HAZ Manuel +2147768 EA7FHJ EUFRASIO +2147769 EA7ZY SALVA +2147770 EA7FDR JOSE +2147771 EA7KFY FRANCISCO +2147772 EA7JZZ JUAN +2147773 EA7DUB Juan +2147774 EA7KIB Ignacio +2147775 EA7KFM RAUL +2147776 EA7KIG Victor +2147777 EA7KHZ JOSE +2147778 EA7SF Juan +2147779 EA7KIE Juan +2147780 EA7KIF Frank +2147781 EA7KII Juan +2147782 EA7HZR Francisco +2147783 EA3NF Juan +2147784 EA7JXM Francisco +2147785 EA7IYP Daniel +2147786 EA7CCC Jorge +2147787 EA7HTE Paco +2147788 EB7CAK Ramon +2147789 EA7KIL Pepe +2147790 EA7KID PabloGR +2147791 EA7FWH AURE +2147792 EA7JCR Juanma +2147793 EA7KIM Antonio +2147794 EA7KHA Carlos +2147795 EA7JFN Antonio +2147796 EA7AEV Paco +2147797 EA7KIK Francisco +2147798 EA7SN Jose +2147799 EA7IIG Miguel +2147800 EA7AWC Manuel +2147801 EA7HS Antonio +2147802 EA7DA Julio +2147803 EA7KIP Mike +2147804 EA7FVP Fermin +2147805 EA7AQR EA7AQR +2147806 EA7IUU Pascual +2147807 EA7JTV Manuel +2147808 EA7KFQ Alvaro +2147809 EA7LG Encarni +2147810 EA7KIX ISIDORO +2147811 EA7IRU MANUEL +2147813 EA7KHW Jose +2147814 EA7KIY Santiago +2147816 EB7HHT ANTONIO +2147817 EA7JSC Pepe +2147818 EA7KGG Jose +2147819 EA7WE Antonio +2147820 EA7IUJ ENRIQUE +2148001 EA8II Edu 2148002 EA8EE Jose 2148003 EA8EE Jose 2148004 EA8CWF Jose 2148005 EA8CXV Aridane 2148006 ED8ZAB Jose -2148007 EA8CVN Valentn +2148007 EA8CVN Valentin 2148008 EA8AAG Paco 2148009 EA8DAM ALVARO 2148010 EA8ADH ANTONIO 2148011 EA8DAE Reimar 2148012 EA8OM Heinz 2148013 EA8CEK Cesar -2148014 EA8CEK CESAR -2148015 EA8IE EA8IE -2148016 EA8DG EA8DG -2148017 EA8CWB EA8CWB +2148014 EA8CEK Cesar +2148015 EA8IE Alejandro +2148016 EA8DG Jaime +2148017 EA8CWB Eduardo 2148018 EA8CTB Gerry 2148019 EA8CSG Roman 2148020 EA8CSG Roman -2148021 EA8CWB EA8CWB -2148022 EA8DR Hoplita -2148023 EA8TK EA8TK +2148021 EA8CWB Eduardo +2148022 EA8DR Anibal +2148023 EA8TK Rafa 2148024 EA8CTB Gerry 2148025 EA8OG CHANO -2148026 EA8CQT Dalxebek +2148026 EA8CQT Miguel 2148027 EA8CAZ Carmelo 2148028 EA8FO Celso 2148029 EA8CIA Santiago -2148030 EA8CHY Bacallado -2148031 EA8TU Jos -2148032 EA8CQW Ea8cqw +2148030 EA8CHY Elicio +2148031 EA8TU Jose +2148032 EA8CQW Oscar 2148033 EA8CBB Tomas -2148034 EA8II Eduardo +2148034 EA8II Edu 2148035 EA8TV Juan 2148036 EA8BQU TONY 2148037 EA8AQI ROGELIO @@ -18522,72 +20850,72 @@ 2148039 EA8XT JOSE 2148040 EA8CPM JUAN 2148041 EA8BKB GERMAN -2148042 EA8CAY TONI-EA8CAY +2148042 EA8CAY TONI 2148043 EA8AIH Tini -2148044 EA8DEP EduardoFalcon +2148044 EA8DEP Eduardo 2148045 EA8AWK JOSE -2148046 EB8ALF EB8ALF +2148046 EB8ALF Jose 2148047 EA8URE URE 2148048 EA8CJ Javier 2148049 EA8AIP JUAN 2148050 EA8CYT Florencio 2148051 EA8EK Airam 2148052 EA8URV U.R.V.O. -2148053 EA8DEC EA8DEC +2148053 EA8DEC Miguel 2148054 EA8KG Jacinto 2148055 EA8CDF Saul 2148056 EA8BYW Cheo 2148057 EA8OA Oliver 2148058 EA8CWZ Santiago -2148059 EA8CXN EA8CXN -2148060 EA8CFB Tunera -2148061 EA8DEB EA8DEB -2148062 EA8DD Dani8dd -2148063 EA8DFD JORGE76 +2148059 EA8CXN Cesar +2148060 EA8CFB Salvador +2148061 EA8DEB Valerio +2148062 EA8DD Dani +2148063 EA8DFD JORGE 2148064 EA8CZM Jose 2148065 EA8CJ Javi 2148066 EA8RH Roman -2148067 EA8RCF EA8EE +2148067 EA8RCF Radio 2148068 EA8DSB David 2148069 EA8DFH Enrique -2148070 EA8DFI Sosa +2148070 EA8DFI MIGUEL 2148071 EA8DBR Saul -2148072 EA8II EA8II +2148072 EA8II Edu 2148073 EA8EC Juan -2148074 EA8CIQ EA8CIQ +2148074 EA8CIQ JOSE 2148075 EA8OR Emilio 2148076 EA8DEY Domingo 2148077 EC8BO Fco -2148078 EA8CZE CABRERA -2148079 EA8AJX EA8AJX -2148080 EA8MGB EA8MGB +2148078 EA8CZE ORLANDO +2148079 EA8AJX Lorenzo +2148080 EA8MGB MANUEL 2148081 EA8CQA Paco 2148082 EA8CGI Pedro -2148083 EA8BKY CCarmona -2148084 EA8CMP EA8CMP +2148083 EA8BKY Candido +2148084 EA8CMP Javier 2148085 EA8EC JUAN 2148086 EA8CLO Jose -2148087 EA8CTW Britodelafuente -2148088 EA8DFZ Lorenzito_78 +2148087 EA8CTW Adrian +2148088 EA8DFZ Lorenzo 2148089 EA8XNX Abel 2148090 EA8DGC Elias 2148091 EA8CSB Javier 2148092 EA8CSR Ivan 2148093 EA8CBY JOSE -2148094 EA8DFB SantiEA8 -2148095 EA8DGK MIGUEL +2148094 EA8DFB Santiago +2148095 EA8DGK ALONSO 2148096 EA8CKM Jose 2148097 EA8DAR JOSE 2148098 EA8OW Candido 2148099 EA8HS AGUSTIN -2148100 EA8CQT EA8CQT +2148100 EA8CQT Miguel 2148101 EA8CIG Enrique 2148102 EA8BUW Francisco 2148103 EA8DCA EA8DCA 2148104 EA8FJ Ea8fj 2148105 EA8DGN LucasMDR 2148106 EA8ML ANTONIO -2148107 EA8DGL Ejbs +2148107 EA8DGL Esteban 2148108 EA8DDU El 2148109 EA8ZG ANTONIO 2148110 EA8BRD Tomas @@ -18634,7 +20962,7 @@ 2148151 EA8RCT RADIO 2148152 EA8DGR Rafael 2148153 EA8CDM Manuel -2148154 EA8BYO EA8BYO +2148154 EA8BYO ROMANO 2148155 EA8BYZ Jose 2148156 EA8CXW Alberto 2148157 EA8CGS JOSE @@ -18649,6 +20977,90 @@ 2148166 EA8DDW NORBERTO 2148167 EA8BOZ PEDRO 2148168 EA8URE URE +2148169 EA8HQ VICTOR +2148170 EA8RH Roman +2148171 EA8CSZ ALDO +2148172 EA8URV URVO +2148173 EB8BPX Marcos +2148174 EA8TH Tomas +2148175 EA8CCL Manuel +2148176 EA8AIN AURELIO +2148177 EA8OA OLIVER +2148178 EB8CRM Javier +2148179 EA8DHS Eduardo +2148180 EA8CZV JOAQUIN +2148181 EA8CBF Pedro +2148182 EA8URU URVAG +2148183 EA8DHU JUAN +2148184 EA8BYC Antonio +2148185 EB8CRP Jose +2148186 EA8YV TOMAS +2148187 EA8DGO David +2148188 EB8CTT JOSE +2148189 EA8IM Tony +2148190 EA8BMG Luis +2148191 EA8CDG Francisco +2148192 EA8TN Jose +2148193 EA8URG Club +2148194 EA8AMR Ramon +2148195 EA8BF Ricardo +2148196 EA8CQL Andres +2148197 EA8CQR JOSE +2148198 EA8AMY ANDRES +2148199 EA8DHA Wolfram +2148200 EA8CVV Kike +2148201 EA8GT Loli +2148202 EA8KV Jose +2148203 EA8DEG ROSSANO +2148204 EA8TK Rafael +2148205 EA8DIF Luis +2148206 EA8PD Manuel +2148207 EA8YV TOMAS +2148208 EA8AWL Manuel +2148209 EA8SR Rodolfo +2148210 EA8CTW Adrian +2148211 EA8AYM CHAGO +2148212 EA8AHC LALO +2148213 EA8BPV Bienvenido +2148214 EA8AQK Pepe +2148215 EA8DEJ Jose +2148216 EA8DID Gregorio +2148217 EA8CB MICHEL +2148218 EB8CUS GUSTAVO +2148219 EA8CKF Narciso +2148220 EA8VJ Juan +2148221 EA8DIH Sergii +2148222 EA8CZX ORLANDO +2148223 EA8CVB Juan +2148224 EA8CDW SIXTO +2148225 EA8DAQ ALEXIS +2148226 EA8ANS GREG +2148227 EA8AIP Juan +2148228 EA8DDS ANTONIO +2148229 EA8NB Manolo +2148230 EA8DII ZENI +2148231 EA8CKR ANDRES +2148232 EA8DHW SANTIAGO +2148233 EA8DGA Isidro +2148234 EA8CXR Antonio +2148235 EA8AV Julio +2148236 EA8CWC Tomas +2148237 EA8DIM Heraclio +2148238 EA8DHO Leo +2148239 EA8DIP Juergen +2148240 EA8DII ZENI +2148241 EA8BQE Luis +2148242 EA8DFX PEDRO +2148243 EA8DAK Javier +2148244 EA8CUF Juan +2148245 EA8DGB SUSO +2148246 EA8NE Andres +2148247 EA8DGH Roberto +2148248 EA8RP RAFA +2148249 EA8ALD Miguel +2148250 EA8DFC Trev +2148251 EC8AVE EDUARDO +2148253 EA8DIV CELSO 2149001 EA9PE Alvaro 2149002 EB9PB Alejandro 2149003 EA9AAD Lara @@ -18684,6 +21096,14 @@ 2149033 EA9FY Joaquin 2149034 EA9SV Juan 2149035 EA9AK JOSE +2149036 EB9NA JULIAN +2149037 EA9ACT ISMAEL +2149038 EB9PH Jorge +2149039 EB9OH JUAN +2149040 EA9ACS RAFA +2149041 EA9AAA Francisco +2149042 EA9AAA FRANCISCO +2149043 EA9HWL Tony 2160002 HA4XA Istvan 2160003 HA5KSP Karl 2161001 HA2TO Arpad @@ -18756,6 +21176,22 @@ 2161068 HA1ZW Jozsef 2161069 HA1YA Gabi 2161070 HG1RPJ Peti +2161071 HA2MV SANYI +2161072 HA1DW Janos +2161073 HA1DAN Harry +2161074 HA1WEB Lars +2161075 HA1GE Gergo +2161076 HA8XP Heinz +2161077 HA1FS Sam +2161078 HG9XT Gabor +2161079 HA1DAT Tibor +2161080 HA8XP Heinz +2161081 HA1GSY Zoli +2161082 HA4KZ HA4KZ +2161083 HA1KF Tapsiful +2161084 HA1RL Gyorgy +2161085 HA1TAM Tamas +2161086 HA2YZ Kalman 2163001 HG3GG Gabor 2163002 HG3GG Gabor 2163003 HA3KZ Zoltan @@ -18813,7 +21249,14 @@ 2163055 HA3JK Dezso 2163056 HA3JD Jani 2163057 HA5SI Gyula -2163058 HA3FIC FICI +2163058 HA3FIC Gyorgy +2163059 HG3FEL Imre +2163060 HA3YA Janos +2163061 HA3OU Joco +2163063 HA3RM Reiner +2163064 HG2YL Orsi +2163065 HA3FUQ Pal +2163066 HA3MG JOCO 2165001 HA5CJN Ivan 2165002 HA5BHX Gabor 2165003 HG5OHT Tuende @@ -18934,6 +21377,18 @@ 2165118 HG5OGZ Zoltan 2165119 HG5OAJ Janos 2165120 HA5AUJ Jozsef +2165121 HA5BLK Sandor +2165122 HA5BL Levente +2165123 HA7DOT Dominik +2165124 HG5OFU Zoltan +2165125 HA8HL Lajos +2165126 HG5CTQ Gyuri +2165127 HG5OPB Peter +2165128 HG5OG Gabor +2165129 HA1ES Laci +2165130 HA5KO MCTS +2165131 HA5SZI Szentgyoergyi +2165132 HA5VQ PISTA 2167001 HG7JML Otto 2167002 HA5OGR Lajos 2167003 HA7TP Peter @@ -19034,7 +21489,7 @@ 2167098 HG7REM Frank 2167099 HG9MFT Tom 2167100 HG9MFZ Zoli -2167101 HA5BWK Egresi +2167101 HA5BWK Peter 2167102 HA6QE Gazsi 2167103 HA6FPN L 2167104 HA6QZ Zsolt @@ -19045,6 +21500,21 @@ 2167109 HA7JNI Imre 2167110 HG7JUZ Tamas 2167111 HG7JVJ Jozsef +2167112 HG7JDM Sanyi +2167113 HG6IFU Istvan +2167114 HG9PD Imre +2167115 HA7TM Tibi +2167116 HG7JMZ Zicsi +2167117 HG5AAU Takits +2167118 HA7MR Pista +2167119 HA7KFE Istvan +2167120 HA7AT Lajos +2167121 HA5UO Gabor +2167122 HG6FGE Gabor +2167123 HA7BLT Zsolt +2167124 HA7JSJ Istvn +2167125 HA7BJA Jozsi +2167126 HA7KFE Pista 2168001 HA3TL Laszlo 2168002 HA0BW Imre 2168003 HA0DR Lajos @@ -19087,7 +21557,7 @@ 2168040 HA9BL Gyula 2168041 HA0UC Imre 2168042 HA8LOX JANI -2168043 HG0RUA Imi +2168043 HG8LKN Jimmi 2168044 HA8KCK Jozsef 2168045 HA8EE Laci 2168046 HG8IT Gyuri @@ -19109,6 +21579,21 @@ 2168062 HA8CSY Csinos 2168063 HA8GB Jeno 2168064 HG8LOL Laci +2168065 HA0CAT Zsolt +2168066 HG0NAZ Viktor +2168067 HG0NBI Pista +2168068 HG8LGH Jzsef +2168069 HA0TOM Tom +2168070 HA8FQ Kalman +2168071 HA8BQ Michael +2168072 HA8KU Bela +2168073 HA8AP Toni +2168074 HA8LNU UnyaZoli +2168075 HG8LNR Pali +2168076 HG8LMK Feri +2168077 HA8LWT Tamas +2168079 HA8AW Joska +2168080 HA0NGT GABOR 2180001 E74OF Pedja 2180002 E73JN Nenad 2180003 E74NK Nail @@ -19117,7 +21602,7 @@ 2180006 E75FM Mesud 2180007 E70SIC Radio 2180008 E73SSB Rade -2180009 E73ADM Admir +2180009 E70BA Admir 2180010 E77XX Miro 2180011 E76NK Nikica 2180012 E77EE Vuiko @@ -19162,7 +21647,7 @@ 2180051 E73ZOA E73ZOA 2180052 E73HAK Haris 2180053 E78FK Faruk -2180054 E71MIS Mirad +2180054 E70MI Mirad 2180055 E74KZZ ZeljkoK 2180056 E73VSV Samir 2180057 E78HSI Hare @@ -19172,6 +21657,103 @@ 2180061 E71EXA RK 2180062 E75DDD Demir 2180063 E74TM Muhidin +2180064 E77CG Senad +2180065 E73SJ Sanel +2180066 E74NL Sejo +2180067 E74OF Pedja +2180068 E75SK Aemso +2180069 E75NET Eldin +2180070 E73EDX RK +2180071 E70AK Abdul +2180072 E72SN Nermin +2180073 E73EAG Radio +2180074 E79MK John +2180075 E77RV Vjeko +2180076 E72MIA Muamer +2180077 E74KS Samim +2180078 E75HM Mirza +2180079 E74EJ Sejo +2180080 E74NI Meho +2180081 E74HI E74HI +2180082 E72DD Seval +2180083 E72HH HULE +2180084 E74LH Hamdija +2180085 E77MW Zilhad +2180086 E71JC Amer +2180087 E73NE Nedim +2180088 E77WB Mirko +2180089 E75LM Miro +2180090 E73BSM BAJO +2180091 E72SKB Bahudin +2180092 E75ANA Adnan +2180093 E76ELS Enzo0605 +2180094 E75AHZ Adnan +2180095 E78CNC Tehnicarka +2180096 E73VSV SAMIR +2180097 E72RXC Sanel +2180098 E76TMT Mario +2180099 E77VI Vlado +2180100 E78AX Boris +2180101 E77A Slaven +2180102 E74MD Emir +2180103 E75ESO Eso +2180104 E74T Aljo +2180105 E76KHS Safet +2180106 E75MN Ahmed +2180107 E74CMN Radio +2180108 E75CD Dzevad +2180109 E73HEM ELMIR +2180110 E77RR Zdenko +2180111 E77ANM Mile +2180112 E74E Enver +2180113 E71CQ Emin +2180114 E75SO Seki +2180115 E71SS E71SS- +2180116 E73PDH E73PDH- +2180117 E73JO Joco +2180118 E73TOP Stojan +2180119 E73MPD Pedja +2180120 E73EPD KOZARA +2180121 E73AX Alex +2180122 E71AR Ruvex +2180123 E74KZZ Zk-hotspot +2180124 E71HD Harun +2180125 E73RS ZORAN +2180126 E77WA Frano +2180127 E75SA Azem +2180128 E78ATP Tuva +2180129 E77YL Nina +2180130 E70BA Admir +2180131 E70MI Mirad +2180132 E77LSB Safet +2180133 E73PET Petar +2180134 E78DMS Dejan +2180135 E73DP Pajo +2180136 E78ART Alen +2180137 E73ZZ Zeljko +2180139 E73SAJ Sinisa +2180140 E74EB EMIR +2180141 E71AP Almir +2180142 E73TAD Dule +2180143 E77VR Vinko +2180144 E76MB E76mb +2180145 E73EAM Emir +2180146 E77XL Jakov +2180147 E75SDC Esmin +2180148 E72KB Bahudin +2180149 E72RQW Avdulah +2180150 E77VN Vlado +2180151 E78MIM Ivan +2180152 E76BM Mico +2180153 E78DMV Vlado +2180154 E73EK Keko +2180155 E73PD Darko +2180156 E75SDC KADUSIC +2180157 E75JD JUSO +2180158 E72LAV JASMIN +2180159 E78BJD Jure +2180160 E75IG Ibro +2180161 E75RIO Ido 2190001 9A5PH Richard 2190002 9A5DW Johann 2190003 9A0W Ivan @@ -19275,13 +21857,124 @@ 2190101 9A5DKZ Drazenko 2190102 9A3BUB 9A3BUB 2190103 9A3ZA 9a3za +2190104 9A3XK Ivan +2190105 9A3BZI Zuna +2190106 9A7GA Tiho +2190107 9A5BJT Jozo +2190108 9A6NTK Tihomir +2190109 9A6DVE Pero +2190110 9A7LRC Zeljko +2190111 9A6CC IVAN +2190112 9A3AJU Jura +2190113 9A3MED Edy +2190114 9A3DXX Kiki +2190115 9A5BPM Pop +2190116 9A6BOC Walter +2190117 9A7PSJ Josip +2190118 9A6RMI Boris +2190119 9A5BWT Mario +2190120 9A7PSB DADO +2190121 9A7KFF Marijo +2190122 9A7PSD DARKO +2190123 9A2GB Ivan +2190124 9A7DI IVAN +2190125 9A3CGJ Juraj +2190126 9A3BSM Santo +2190127 9A3RAK Dane +2190128 9A5IVA Ivan +2190129 9A4TV Tomica +2190130 9A3GKZ Zeljko +2190131 9A8PDA Darko +2190132 9A3DST Slavek +2190133 9A3HAP 9A3HAP +2190134 9A3CGB Bojan +2190135 9A8PDA Darko +2190136 9A7IUY Ica +2190137 9A3GBU Buljubasic +2190138 9A7PEP Emil +2190139 9A3TN Boris +2190140 9A3COT Tom-Slatina +2190141 9A3DVE Zvonko +2190142 9A5AIH Ivan +2190143 9A2YF Tiko +2190144 9A3GPZ Pero +2190145 9A3DSU Stjepan +2190146 9A7IUY Ica +2190147 9A6NTZ Slavonac +2190148 9A3GPC Daniel_zg +2190149 9A2XI Mihovil +2190150 9A2HI Zdenko +2190151 9A1CMV RK +2190152 9A3AAN Niko +2190153 9A4DY Josef +2190154 9A5AJT Boris +2190155 9A1FAB RK +2190156 9A3EIW Max +2190157 9A5ADI Ivan +2190158 9A7ALZ Drazen +2190159 9A0DPE 9A0DPE +2190160 9A1KN Nikola +2190161 9A9HI Ivan +2190162 9A4CS Ivo +2190163 9A3ALY Kresimir +2190164 9A3EJJ Josip +2190165 9A6RZC Darko +2190166 9A7KYZ Zeljka +2190167 9A3JY Zak +2190168 9A2FO Vlado +2190169 9A3AKF Aleks +2190170 9A1MI Ivan +2190171 9A3EME Jerko +2190172 9A6AUJ Nino +2190173 9A5AVL VLADO +2190174 9A3DPS Stjepan +2190175 9A3DJG Jura +2190176 9A5DGZ Luka +2190177 9A6KEB Bumby +2190178 9A3GBS Josip +2190179 9A6RYG Zeljko +2190180 9A4T Tom +2190181 9A3TKK Karlo +2190182 9A3ETT Pero +2190183 9A5RY Miki +2190184 9A3CRG Robert +2190185 9A3LJ Goran +2190186 9A3HUS Hus +2190187 9A7PET Lima +2190188 9A3PAJ Tomislav +2190189 9A7RBM Ruzica +2190190 9A7AOF Darko +2190191 9A2R Zeljko +2190192 9A3BKR Kris +2190193 9A3GOS Goran +2190194 9A6GSD Sakib +2190195 9A3AGE Danijel +2190196 9A7PLP Luka +2190197 9A3BCV Vladimir +2190198 9A4BP 9A4BP +2190199 9A3GDR Darko +2190200 9A3BCZ Zlatko +2190201 9A5AMH Marijan +2190202 9A3AQH Stevo +2190203 9A3DVL Vlasta +2190204 9A6A Petar +2190205 9A4FS Franjo +2190206 9A1KK Kreso +2190207 9A6T Zdravko +2190208 9A3AFR Keko +2190209 9A7BCP Sasabcp +2190210 9A7PLS Stjepan +2190211 9A7KXP Hristo +2190212 9A3KBD Buljubasicka +2190213 9A3CCF Vedran +2190215 9A2US Milan 2200001 YT2CQ Mili 2200002 YU1VI Slobodan 2200003 YU5JZI Jonca 2200004 YU5RDK Darko 2200005 YU3ZZ Zoran 2200006 YU1AM Dule -2200007 YT3CCB Goran +2200007 YT5TX Goran 2200008 YT1BAL Bilja 2200009 YT5AVZ Sale 2200010 YT3GTI Vlada @@ -19294,7 +21987,7 @@ 2200017 YT1MYA Mica 2200018 YT1ZMZ Zoki 2200019 YT1ASN Suzi -2200020 YU4MES Floki +2200020 YT5DMR Floki 2200021 YT5OTC Bozo 2200022 YT5ZEC Nix 2200023 YT2LB Bogica @@ -19321,7 +22014,7 @@ 2200044 YU4EAX Aleks 2200045 YU7XAA Dado 2200046 YT8PSV Slavko -2200047 YT1NIV Ivan +2200047 YT3NIV Ivan 2200048 YT3NR Raki 2200049 YU3ZZ Zoran 2200050 YT5ZEC Nix @@ -19344,7 +22037,7 @@ 2200067 YU1OS Dule 2200068 YT3MN Nikola 2200069 YT1ASM Slavisa -2200070 YU4MES Floki +2200070 YT5DMR Floki 2200071 YT1ZTA Pedja 2200072 YU7RAY Igor 2200073 YT1TMK Kubanac @@ -19388,10 +22081,10 @@ 2200111 YU5SBA Bane 2200112 YU4MST Mickey 2200113 YT5AAA V.Nik -2200114 YT1NIV Ivan +2200114 YT3NIV Ivan 2200115 YT3NR Raki -2200116 YT3ADA Epi -2200117 YT7VBA Zika +2200116 YT1DX Zepi +2200117 YU1SX Sinisa 2200118 YU2MS MOSPA 2200119 YT1NNN Gotovcevic 2200120 YU4DHM Dado @@ -19457,7 +22150,7 @@ 2200180 YU2FMS Sale 2200181 YU7XW Mpavlica 2200182 YU7RIM Rikac -2200183 YU4HOK Marko +2200183 YT5HOK Marko 2200184 YU4ZED Zsteva 2200185 YU2DJJ DJORDJE 2200186 YT1EAV Dragan @@ -19465,6 +22158,60 @@ 2200188 YU1EW YU1EW 2200189 YU1ZMZ Zika 2200190 YU4RNR VELJKO +2200191 YU5RM Mile +2200192 YU5AKI Marko +2200193 YU1VIP Boki +2200194 YT1EB Filja +2200195 YU3MRX Mile +2200196 YU2PX Djoka +2200197 YT1RB Bobi +2200198 YT1EB Filja +2200199 YU7RBB Robi +2200200 YT2FON Milan +2200201 YU4RNR VELJA +2200202 YU1HT Dejan +2200203 YT1TKM Mike +2200204 YU1NIK Nikola +2200205 YU4NTT YU4NTT +2200206 YT2SMS Bojan +2200207 YU7RHZ Zolee +2200208 YU7RAA Dejan +2200209 YU4MLM Milos +2200210 YT3ACA Aca +2200211 YU4QRE Pancevac +2200212 YU7SPS Shilja +2200213 YU7MM Dejan +2200214 YU4DDA Dragan +2200215 YT1TT Bozo +2200216 YU4PEG Pega +2200217 YU7MIK Miroslav +2200218 YU1TTN Filip +2200219 YU4MON Eli +2200220 YU1PAB @cikus +2200221 YU7AC Stan +2200222 YT5HOK Marko +2200223 YT1JDN Nikola +2200224 YT1PQG Zoran +2200225 YT7UF Igor +2200226 YU4UKP Djordje +2200227 YU7PXH Milan +2200228 YU4DGK DARE +2200229 YU7SVA Vlada +2200230 YT1MK Misko +2200231 YU4ABA Buca +2200232 YT1NMT Nebojsa +2200233 YU4BBV Nidza +2200234 YT1SJ Doki +2200235 YU2ADP Mladjo +2200236 YT7MPB Misko +2200237 YU4ZDJ Djole +2200238 YU4IDS Stefanko +2200239 YU4INI Bole +2200240 YU7NSC YU7NSC +2200241 YU7RMR Milan +2200242 YU7WW Mirko +2200243 YU3EEA Janko +2200244 YU2NPC Nele 2220001 IK0YYY Luca 2220002 IK0YYY Luca 2220003 IW0BEC Eugenio @@ -19509,7 +22256,7 @@ 2220042 IW0GAC Vito 2220043 IK0PRC Bruno 2220044 IZ0HSE Massimo -2220045 IZ0IIL Roberto +2220045 IZ0BEC Barth 2220046 IZ0YHO Paolo 2220047 IU0AXK Alessandro 2220048 IW0HKS Gabriele @@ -19530,7 +22277,6 @@ 2220063 IW0EBM Claudio 2220064 IW0DER Arturo 2220065 IZ0VXJ Carlo -2220066 IZ0MAG Antonio 2220067 IW0GZP Erasmo 2220068 IW0AHI Danilo 2220069 IW0CPK Francesco @@ -19599,7 +22345,7 @@ 2220135 IZ0RIM Roberto 2220136 IZ0GWI Augusto 2220137 IZ0VOW Roberto -2220138 IK0NEP Luciano +2220138 IU0JMX IU0JMX 2220139 IK0ATD Giovanni 2220140 IW0RQJ Roberto 2220141 IU0DZQ Delfino @@ -19651,7 +22397,7 @@ 2220187 IZ0CWW Francesco 2220188 IZ0BNU Giancarmine 2220189 IS0UYN Diego -2220190 IZ0IIL Roberto +2220190 IZ0OWL Stefano 2220191 IK0TRV Riccardo 2220192 IZ0SBL Stefano 2220193 IU0FOA Rino @@ -19746,7 +22492,7 @@ 2220283 IZ0WHJ iz0whj 2220284 IW0QLT IW0QLT 2220285 IZ0VZS Iz0vzs -2220286 IW0AV Hermes +2220286 IW0AV Giulio 2220287 IW0AUA Panda 2220288 IK0PCL IK0PCL 2220289 IK0DDP IK0DDP @@ -19789,7 +22535,7 @@ 2220326 IZ0PSF Leo 2220327 IU0FCX Francesco 2220328 IK0TLK Lorenzo -2220329 IZ0ANF Iz0anf +2220329 IZ0ANF Emanuele 2220330 IU0AYL Andrea 2220331 IU0HFV Ragle 2220332 IZ0TTD UMBERTO @@ -19856,7 +22602,7 @@ 2220393 I0OOZ Mau 2220394 IZ0HEI Luigi 2220395 IU0HNM IU0HNM -2220396 IS0FMW IS0FMW +2220396 IS0FMW Antonio 2220397 IU0GGZ IU0GGZ 2220398 IZ0QRF IZ0QRF 2220399 IZ0EMZ Iz0emz @@ -19956,7 +22702,7 @@ 2220493 IS0HME Paolo 2220494 IU0FLF Alessandro 2220495 IW0HEP BIG -2220496 IZ0BNT La +2220496 IZ0BNT Sergio 2220497 IU0CPN CLETO 2220498 IW0HMM Hamradio 2220499 IK0XFD Jordan @@ -20032,7 +22778,7 @@ 2220569 I0CMD I0CMD 2220570 IU0CPP IU0CPP 2220571 IK0ELN Giovanni -2220572 IK0TLJ Icaro +2220572 IK0TLJ Francesco 2220573 IW0DQO GIORGIO 2220574 IW0QMX Sponty 2220575 IZ0VLL IZ0VLL @@ -20089,7 +22835,7 @@ 2220626 IK0URZ IK0URZ 2220627 IS0FFD IS0FFD 2220628 IW0ROG Iw0rog -2220629 IK0XWV Bilo +2220629 IK0XWV Andrea 2220630 IU0JLG Francesco 2220631 IU0DLH IU0DLH 2220632 IU0CDM Paoloms @@ -20144,7 +22890,7 @@ 2220681 IK0IBI Angra 2220682 IS0CVH Is0cvh 2220683 IZ0PPZ Paolo -2220684 IK0XBQ Ik0xbq +2220684 IK0XBQ Maurizio 2220685 IZ0LRJ IZ0LRJ 2220686 IS0HHA Tony 2220687 IS0RKM Tonio @@ -20300,7 +23046,7 @@ 2220837 IK0TOM Alessandro 2220838 IU0GHU MAGGIOLO 2220839 IS0HMY IS0 -2220840 IS0FSL Mpodda +2220840 IS0FSL Mauro 2220841 IW0FPY DANILO 2220842 IK0MMI Andrea 2220843 IU0LGK Antonio @@ -20319,6 +23065,47 @@ 2220856 IZ0XYX Cristiano 2220857 IW0HKR Iw0hkr 2220858 IU0KNM Riccardo +2220859 IS0DKG Giampiero +2220860 IZ0PEA Emilio +2220861 IK0NWA Giulio +2220862 IK0SRL LUCIANO +2220863 IS0HNA Giampietro +2220864 IU0LFT IU0LFT +2220865 IU0LES IU0LES +2220866 IZ0FYM Lino +2220867 IW0BZD Pino +2220868 IZ0VXK PIETRO +2220869 IU0JGA ALARICO +2220870 IZ0KOQ Mirko +2220871 IU0IPD Giampietro +2220872 IW0FUX Lorenzo +2220873 IZ0ORE Cristiano +2220874 IU0DUO Mirko +2220875 IZ0ZWR Fausto +2220876 IK0RNU Ulisse +2220877 IU0GZO Mauro +2220878 IW0BIM Iw0bim +2220879 IU0JVD Maxalias +2220880 IU0NDL Dommy +2220881 IW0HMG Giancarlo +2220882 IZ0DZX Alberto +2220883 IW0FAZ IW0FAZ +2220884 IU0LHT Umas +2220885 IS0FXZ Paolo +2220886 IU0LKZ Veronica +2220887 IS0FRV Alessandro +2220888 IU0LJU FABER +2220889 IS0CHY Giorgio +2220890 IZ0UIJ RdS +2220891 IS0GFT Paolo +2220892 IZ0JOH Rgpg025 +2220893 IZ0ZBG Paolo +2220894 IS0CLO Antioco +2220895 IW0HAA Cristiano +2220896 IW0HLX IW0HLX +2220897 IU0JZJ DARIO +2220898 IK0TIX Max +2220899 IZ0GYH BRUNO 2220900 IW0UIF Natale 2220901 IS0XDA Gianni 2220902 IS0AYI Paolo @@ -20332,6 +23119,94 @@ 2220910 IS0AMW Antonello 2220911 IS0ANU Stefano 2220912 IW0UQF Mario +2220913 IS0FYB Alessandro +2220914 IZ0VQU Mirko +2220915 IS0AJW GIANNETTO +2220916 IU0ITX IU0ITX +2220917 IK0DMS MICHELE +2220918 IU0DSI IU0DSI +2220919 IZ0EVK Iz0evk +2220920 IU0LSF GIANLUCA +2220921 IU0KDN IU0KDN +2220922 IU0LPR Marco +2220923 IS0SLH Omar +2220924 IS0SLM Omar +2220925 IZ0FVE Francesco +2220926 IS0GQX Is0gqx +2220927 IZ0VXL Fred +2220928 IW0DPJ Cap.Ninny +2220929 IW0HKW FLQ +2220930 IU0KCF Giovanni +2220931 IK0TLI Claudio +2220932 IU0LSH IU0LSH +2220933 IZ0AON Michele +2220934 IU0GDR BIAGIO +2220935 IZ0NHZ Max +2220936 IZ0MFI MARCO +2220937 IS0YXL Andrea +2220938 IZ0CAT Gattone1965 +2220939 IZ0TTG Oirad211269 +2220940 IU0LTQ Tigre +2220941 IS0FMQ Giampaolo +2220942 IW0HJD Mario +2220943 IZ0PEZ Radioam +2220944 IZ0MPO Raffaele +2220945 IK0PET Aldo +2220946 IU0AWH IU0AWH +2220947 IS0DZM Stefano +2220948 IS0XCU Carlo +2220949 IK0EIA LUIGI +2220950 IZ0UNB Claudio +2220951 IS0QLX Stefano +2220952 IW0UOI Maurizio +2220953 IS0FWY SERGIO +2220954 IZ0OHF PIO +2220955 IK0PAW Mauro +2220956 IU0LLA Tolmino +2220957 IZ0FSE Sergio +2220958 IW0CFW Ettore +2220959 IM0FMP Gabriele +2220960 IS0SCB Tony +2220961 IK0OFF Roberto +2220962 IZ0TTG Dario +2220963 IS0DKF Marcantonio +2220964 IS0GVH Luca +2220965 IZ0VAT Fabio +2220966 IK0JML Antonio +2220967 IZ0INJ MARIO +2220968 IS0GGA Massimo +2220969 IS0BWM Christian +2220970 IK0VXT Francesco +2220971 I0RKV Tony +2220972 IZ0OWN Alessandro +2220973 IU0EZV Salvatore +2220974 IU0AKL Francesco +2220975 IZ0TPJ ENRICO +2220976 IQ0GH ARI +2220977 IU0EMW Raffaele +2220978 IS0HXM Lorenzo +2220979 IZ0VXV Storm +2220980 I0IEN ENZO +2220981 IW0EMC IW0EMC +2220982 IU0LTY Gian +2220983 IZ0HCC IZ0HCC +2220984 IZ0RJR FRANCO +2220985 IS0HZA Lucio +2220986 IS0HZE Luca +2220987 IS0HYZ Giovanni +2220988 IU0LSQ Estenat +2220989 IK0SGX Valdo +2220990 IU0MJE Riccardo +2220991 IS0HZG Giuseppe +2220992 IU0HXV Cherokee +2220993 IS0HYW Paolo +2220994 IU0MUN Mario +2220995 IZ0WEH CATENA +2220996 IZ0POG Nicknet84 +2220997 IZ0BNQ PIERO +2220998 IU0MVT IU0MVT +2220999 IU0MVS Nando +2221000 IZ0UNH NicolaDL 2221001 IZ1JKW Corrado 2221002 IZ1SCR Christian 2221003 IZ1SCR Christian @@ -20451,7 +23326,7 @@ 2221117 IW1RIM Carlo 2221118 IW1PRT Alberto 2221119 IZ1MLT Luca -2221120 IZ1MEU Sobrero +2221120 IZ1MEU Roberto 2221121 IZ1OAC Andrea 2221122 IZ1ZJV Alessandro 2221123 IK1MUA Vinicio @@ -20570,7 +23445,7 @@ 2221236 IZ1DFJ Beppe 2221237 I1KDO LoreBarba 2221238 IK1WHN Ik1whn -2221239 IZ1JKF Briciola +2221239 IZ1JKF Angelo 2221240 IK1HJT IK1HJT-1 2221241 IK1NET IK1NET_DMR 2221242 IW1BYG IW1BYG @@ -20812,18 +23687,18 @@ 2221478 IW1CLF Marcodalco 2221479 IZ1UMH Claude@58 2221480 IZ1GEA Maurizio -2221481 IU1CRV IU1CRV +2221481 IU1CRV Gian 2221482 IZ1DBU DBU 2221483 IU1GJE IU1GJE 2221484 IZ1RWF IZ1RHY 2221485 IZ1JKE Emanuela 2221486 IZ1FHG Alessandro 2221487 IZ1MHY IZ1MHY -2221488 IW1DTU Slim +2221488 IW1DTU Ferruccio 2221489 IZ1NGS Iz1ngs 2221490 IZ1PMS IZ1PMS 2221491 IK1WJL Liuk -2221492 IZ1JYZ Antonio +2221492 IZ1JYZ Ilario 2221493 IU1HIE IU1HIE 2221494 IK1ZOE ZOE 2221495 IZ1JZD IZ1JZD @@ -20912,14 +23787,14 @@ 2221578 IZ1JJA DYLAN 2221579 IU1EQV IU1EQV 2221580 IU1KGS Carlo -2221581 IU1INZ Skinoku +2221581 IU1INZ Lorenzo 2221582 IZ1REW Iz1rew 2221583 IW1GHE Iw1ghe 2221584 IZ1JZX Obilankenoby 2221585 IU1DWF IU1DWF 2221586 IK1INX Fabio 2221587 IZ1KEF IZ1KEF -2221588 IU1HZC Gimmetta +2221588 IU1HZC Sandro 2221589 IU1HGT Bob4x4 2221590 IK1MJJ Mjj 2221591 IZ1UHC Dragun @@ -20959,7 +23834,7 @@ 2221625 IZ1OST Skylab 2221626 IZ1BWB IZ1BWB 2221627 IZ1YCQ Sagitter -2221628 IK1AIL Non +2221628 IK1AIL Giovanni 2221629 IU1FFQ IU1FFQ 2221630 IU1CVM Dany 2221631 IU1GSQ Enrico @@ -20971,7 +23846,7 @@ 2221637 IW1QLH Claudio 2221638 IU1HHR Massimo 2221639 IK1QAD VALTER -2221640 IK1MAP IK1MAP +2221640 IK1MAP Gianni 2221641 IZ1UIA IZ1UIA 2221642 IZ1UBM IZ1UBM 2221643 IU1JCZ IU1JCZ @@ -21021,7 +23896,7 @@ 2221687 IU1HJL CHRISTIAN 2221688 IW1BPU Giuseppe 2221689 IU1ASL IU1ASL -2221690 IU1LAY Guarik +2221690 IU1LAY Riccardo 2221691 IU1JTE Omar 2221692 IU1JRS Lorenzo 2221693 IZ1FBC Carlo @@ -21033,11 +23908,201 @@ 2221699 IZ1LBA IZ1LBA 2221700 IZ1MNE IZ1MNE-MORENO 2221701 IZ1CQN Iz1cqn -2221702 IZ1QWZ Marval +2221702 IZ1QWZ Mario 2221703 IZ1AWE Federico +2221704 IU1LLE Fabrizio 2221705 IZ1MLI Nekomar 2221706 IU1JST GIANNI 2221707 IK1EVM Enzo +2221708 IU1IFZ IU1IFZ +2221709 IU1IEJ Ema +2221710 IK1HJS IK1HJS +2221711 IZ1XVY Servid +2221712 IZ1DNG IMCO +2221713 IK1IFP IK1IFP +2221714 IZ1YQL Michela +2221715 IZ1YPP Gianni +2221716 IU1AKG IU1AKG +2221717 IK1BBC Gian +2221718 IU1LCO Guido +2221719 IK1JUN Vincenzo +2221720 IW1FGN IW1FGN +2221721 IU1LIL IU1LIL +2221722 IZ1CQS Elius +2221723 IZ1XXX IZ1XXX +2221724 IZ1TMD Pier +2221725 IZ1GYI IZ1GYI +2221726 IW1FGN IW1FGN +2221727 IU1AWL Franz +2221728 IZ1ATK LUCIO +2221729 IZ1YFQ Sergio +2221730 IU1JFF GIANLUCA +2221731 I1VPJ I1VPJ +2221732 IU1KWK Bottix +2221733 IW1BWQ Claudio +2221734 IZ1DAA Paolo +2221735 IU1LMR Pragma +2221736 IZ1ZPX Oscar +2221737 IK1QFJ Ik1qfj +2221738 IU1LQF Jacopo +2221739 IU1BNO Tiziano +2221740 IZ1CIS SANDRO +2221741 IK1FEM Mario +2221742 IZ1SAG Iz1sag +2221743 IZ1LIA IZ1LIA +2221744 IW1GGL Snoopy +2221745 IK1FSD Costantino +2221746 IZ1AEM IZ1AEM +2221747 IU1KVL Alberto +2221748 IU1IMH Alberto +2221749 IU1EEA IU1EEA +2221750 IU1BEL Giunpy79 +2221751 IW1FLF IW1FLF +2221752 IZ1DXV IZ1DXV +2221753 IZ1MMG IZ1MMG +2221754 IW1DBJ IW1DBJ +2221755 IZ1EGU Simone +2221756 IK1MNK Alessandro +2221757 IK1PXP Luciano +2221758 IK1NDD Carlo +2221759 IZ1TSP IZ1TSP +2221760 IZ1VVS Vvsradio +2221761 IW1GAK IW1GAK +2221762 IZ1PHT Omar +2221763 IZ1GWF FABIO +2221764 IU1LSD Sergio +2221765 IZ1PHR Tia +2221766 IU1LFE IU1LFE +2221767 IU1LDO Iu1ldo +2221768 IW1BTX Giovanni +2221769 IW1QGV Max +2221770 IU1LTK IU1LTK +2221771 IU1LSA MrMerlo +2221772 I1MDQ Nino +2221773 IU1LQL Willy +2221774 IU1MCR IU1MCR +2221775 IZ1HKE Alessandro +2221776 IW1FWB Domenico +2221777 IW1ANK Mario +2221778 IZ1NOK IZ1NOK +2221779 IU1LWV IU1LWV +2221780 IZ1LGF PIERGIORGIO +2221781 IU1LHW Giovanni +2221782 IX1FNI Alessandro +2221783 IU1LCD Maurizio +2221784 IK1MAJ Bruno +2221785 IW1GFW Walter +2221786 IU1JXT Cassy +2221787 IK1IMH IK1IMH +2221788 IZ1ZNH Paolo +2221789 IZ1HHG IZ1HHG +2221790 IU1KAZ Marco +2221791 IQ1LY CISAR +2221792 IU1LCP Lucio +2221793 IU1IFT Fabio +2221794 IK1JUT Alberto +2221795 IU1JDE IU1JDE +2221796 IU1LST Enzo +2221797 IK1OOM RobbiOne +2221798 IK1CER Gianni +2221799 IZ1RHG EDGAR +2221800 IZ1PTA Parni +2221801 IZ1POP Daniele +2221802 I1PNI Sergio +2221803 IU1MJU IULIAN +2221804 IU1MJF CARLA +2221805 IU1GXY Mario +2221806 IZ1KGY Carlo +2221807 I1DWQ Dakota +2221808 IK1NES Leo +2221809 I1SKV Vito +2221810 IK1DKF GIOVANNI +2221811 IZ1GLE Fabrizio +2221812 IU1MLQ Michele +2221813 IK1VDO PATRIZIO +2221814 IZ1UUJ Nino +2221815 IW1RGP Iw1rgp +2221816 I1JXC Guido +2221817 IU1JSF Enrico +2221818 IU1MLI Cristian +2221819 IU1LOX Lori +2221820 IU1KWK Bottix +2221821 IU1MQK Carlos +2221822 IU1MOZ Mauro +2221823 IZ0WKP IZ0WKP +2221824 IZ0MII GIOVANNI +2221825 IK1ICF Claudio +2221826 IZ1KGA Manuel +2221827 IU1MRS Gian +2221828 IW1DFU IW1DFU +2221829 IZ1RDH Alessio +2221830 IU1LDX Alessandro +2221831 IK1VQO GIANLUCA +2221832 IZ1QVQ Fabio +2221833 IZ1ANY Ivan +2221834 IU1MVI Nerosdmf +2221835 IU1JVO Giuliano +2221836 IZ1MGZ Skelm +2221837 IU1MSM Nonno_Sandro +2221838 IU1MWN Alessandro +2221839 IU1MCR Eugenio +2221840 IU1MQZ Marco +2221841 IW1QBR EDO +2221842 IS0HZB Mikimo +2221843 IK0AIH Filippo +2221844 IU1DPE Alessio +2221845 IZ1ONW Giulio +2221846 IW0FSY Frangal +2221847 IZ1WWQ Sandro +2221848 IK1JXW ANGELO +2221849 IU0MYP Giuseppe +2221850 IU0MWC Mauro +2221851 IU1FLA Davide +2221852 IK0XKP IK0XKP +2221853 IZ1LAT Claudio +2221854 IZ1TMO Paolo +2221855 IZ0AYD Giuseppe +2221856 IU1FZZ Andrea +2221857 IK0RNR Massimo +2221858 IZ1LBA Biagio +2221859 IU1MRI Massimiliano +2221860 IZ0HWR ALBERTO +2221861 IU0MUX IU0MUX +2221862 IU0LIR Pierluigi +2221863 IU0MVW Moreno +2221864 IQ1CQ ARI +2221865 IZ0MQS Iz0mqs +2221866 IW1DVX MARCO +2221867 IZ0XZD IZ0XZD +2221868 IK0QNZ FRANCO +2221869 IZ1JXZ ROBERTO +2221870 IK0SEP IKOSEP +2221871 IZ1YWD Maurizio +2221872 IU1JXE Gio +2221873 IU1MRH Roby +2221874 IU1MSG Bebo +2221875 IW0FTA Fabrizio +2221876 IU1CZH Giuseppe +2221877 IZ1ZJA Elvis +2221878 IZ1UKT Ivano +2221879 IW1QMJ FPalazzo +2221880 IW1DQS IW1DQS +2221881 IU1KIZ Roberto +2221882 IK1XVO Marco +2221883 IQ1JP Sezione +2221884 IU1CBD Federico +2221885 IU1CZD Remo +2221887 IZ1YFE IZ1YFE +2221888 IZ1HVD IZ1HVD +2221889 IK0QKR Riccardo +2221890 IS0XGL IS0XGL +2221891 IU0AXI Noemi +2221892 IW0DYI Dario +2221893 IU0MUQ Alberto +2221894 IZ1ZFC Lelioscin +2221895 IK1MSO LUCA +2221896 IZ0MIK StefCo +2221897 IK1XVO IK1XVO 2222001 IW2DCK Germano 2222002 IW2BCF Roberto 2222003 IZ2JGB Giorgio @@ -21341,7 +24406,7 @@ 2222303 IU2EKA IU2EKA 2222304 IZ2UUF Iz2uuf 2222305 IK2OVN IK2OVN -2222306 IK2MLT Ik2mlt +2222306 IK2MLT Giuseppe 2222307 IZ2JNN Iz2jnn 2222308 IZ2LSJ iz2lsj 2222309 IW2EHH IW2EHH @@ -21473,7 +24538,7 @@ 2222435 IW2NTF Andrea 2222436 IW2DIW Iw2diw 2222437 IW2KWV Ezio -2222438 IZ2ZRJ IZ2ZRJ +2222438 IZ2ZRJ Gianluigi 2222439 IW2LZC Davide 2222440 IW2CYS GIANNI 2222441 IZ2LPH IZ2LPH @@ -21505,7 +24570,7 @@ 2222467 IZ2NSY Mark 2222468 IW2ERZ Luciano 2222469 IW2FPI Augusto -2222470 IW2END IW2END +2222470 IW2END Francesco 2222471 IW2LFD Luciano 2222472 IU2FIN EFFEBI 2222473 IW2NXE Gian @@ -21677,7 +24742,7 @@ 2222639 IK2WAS Emilio 2222640 IW2NCH NCH 2222641 IU2IOC IU2IOC -2222642 IU2IEQ RadioNostalgia +2222642 IU2IEQ Paolo 2222643 IU2EAJ IU2EAJ 2222644 IK2IQU Ciro 2222645 IU2DXM Stefano @@ -21705,7 +24770,7 @@ 2222667 IW2GHD Nino 2222668 IU2HYN IU2HYN 2222669 IU2CBI IU2CBI -2222670 IU2IJZ StratocasterDG +2222670 IU2IJZ Francesco 2222671 IZ2QDO Carlo 2222672 IZ2KTJ Massimiliano 2222673 IW2JFU GIANLUCA @@ -21767,7 +24832,7 @@ 2222729 IK2TTO Ik2tto 2222730 IK2MLU Teo 2222731 IZ2SNM Canguro -2222732 IW2NRA Maxprao +2222732 IW2NRA Massimo 2222733 IU2GDV IU2GDV 2222734 IU2GID Luigi 2222735 IU2ERG IU2ERG @@ -21836,7 +24901,7 @@ 2222798 IK2WRS Mauro 2222799 IZ2DJP IZ2DJP 2222800 IZ2BMH Adriano -2222801 IU2EYB Daniel +2222801 IU2LXQ EMANUELE 2222802 IU2IFI Giovanni 2222803 IW2FFT Maurino 2222804 IZ2FOS Mendilor @@ -21868,7 +24933,7 @@ 2222830 IZ2LSD IZ2LSD 2222831 IZ2BKC REMCOITA 2222832 IK2GZU Ik2gzu -2222833 IU2IVN IU2IVN +2222833 IU2IVN Diego 2222834 IU2JZS Flavio 2222835 IW2JKC IW2JKC 2222836 IU2JXL JEAN @@ -21884,7 +24949,7 @@ 2222846 IW2NZZ LKRYU 2222847 IU2IZX IU2IZX 2222848 IW2FHV Ben -2222849 IW2HSM Zebra +2222849 IW2HSM Bruno 2222850 IU2IIV Francesco 2222851 IU2JVW Iu2jvw 2222852 IK2VTJ Piero @@ -22311,7 +25376,7 @@ 2223273 IU3EGY IU3EGY 2223274 IN3FPY Edel 2223275 IZ3WTP Firefox84 -2223276 IZ3WZQ LHC +2223276 IZ3WZQ Roberto 2223277 IZ3VEL iz3vel 2223278 IZ3VDO Brunocammozzo 2223279 IW3IET Santana4 @@ -22363,7 +25428,7 @@ 2223325 IU3GMC Alessio 2223326 I3ZNI I3ZNI 2223327 IZ3WWF Mauro -2223328 IV3NFC iv3nfc +2223328 IV3NFC Dario 2223329 IU3EGO Luca 2223330 IZ3ZLE Antonio_Sorgato 2223331 IZ3KUY IZ3KUY @@ -22403,8 +25468,8 @@ 2223365 IZ3SPQ Tizi 2223366 IW3RPW Dario 2223367 IK3OUB Bruno -2223368 IZ3NWP Iz3nwp -2223369 IN3LOY In3loy +2223368 IU3LYA Riccardo +2223369 IN3LOY Marco 2223370 IU3HQB IU3HQB 2223371 IW3IPB Teo 2223372 IK3QAO IK3QAO @@ -22534,7 +25599,7 @@ 2223496 IK3RIQ Brown 2223497 IZ3WWK Kris 2223498 IZ3ZUS IZ3ZUS -2223499 IZ3VDA Iz3vda +2223499 IZ3VDA Donato 2223500 IZ3VCN Iz3vcn 2223501 IN3GYF Mauro1961 2223502 IZ3QCH IZ3QCH @@ -22564,7 +25629,7 @@ 2223526 IU3EIF Steve 2223527 IV3AQU Iv3aqu 2223528 IU3EEL Manuel -2223529 IK3IUE Hama +2223529 IK3IUE Fulvio 2223530 IV3WSV IV3WSV 2223531 I3ZYW Piero 2223532 IZ3DEB Iz3ddeb @@ -22598,7 +25663,7 @@ 2223560 IK3DQU Ste 2223561 IU3ILN IU3ILN 2223562 IU3ELP IU3ELP -2223563 IZ3LCI D-Star +2223563 IZ3LCI Angelo 2223564 IW3FCI Claudio 2223565 IW3HJG Dario 2223566 IU3GOL Silvia @@ -22707,7 +25772,7 @@ 2223669 IU3GOW Emanuele 2223670 IW3HOU Cesare 2223671 I3SZT TIT -2223672 IZ3NWP IZ3NWP +2223672 IK2LHR DANTE 2223673 IU3IOP Anita 2223674 IU3BQP Gabriele 2223675 IW3SOF IW3SOF @@ -22841,7 +25906,7 @@ 2223803 IU3IPE DB 2223804 IK3XTW Fassina 2223805 IU3GPH IU3GPH -2223806 IV3HJB IV3HJB +2223806 IV3HJB Michele 2223807 IK3FPR IK3FPR 2223808 IZ3TJC Peter 2223809 IN3MBS Marco @@ -22850,6 +25915,7 @@ 2223812 IU3IPY IU3IPY 2223813 IW3RJT Giuseppe 2223814 IZ3SIK Nicola +2223815 IZ3BUS IZ3BUS 2223816 IW3SGN Giobatta 2223817 IW3GMU Enzo 2223818 IW3BTW Georg @@ -22957,8 +26023,84 @@ 2223920 IW3IGD Vito 2223921 IV3ZMZ Giorgio 2223922 IN3UKJ Fritz +2223923 IU3GKJ Rick69 2223924 IU3GOS Iu3gos +2223925 IU3IOU GIORGIO +2223926 IU3GOC CLAUDIO +2223927 IU3GOM ENRICO +2223928 IU3GKU Claudio +2223929 IK2ADP VALTER +2223930 IZ3ZLB Chrys +2223931 IU3GKP Valter +2223932 IK2DUV GIORGIO +2223933 IW2CZG Luca +2223934 IU2CQO AlePe +2223935 IK3YKV Paolo +2223936 IV3AWB IV3AWB +2223937 IW2MJQ Steven +2223938 IK2AUK Giorgio +2223939 IZ2SOG Luca +2223940 IZ2SVN Gianluigi +2223941 IU3IOV Alessandro +2223942 IZ2QDJ ALBERTO +2223943 IZ3QRP IZ3QRP +2223944 IZ3CAQ Giuseppe +2223945 IZ2LPO Iz2LPO +2223946 IV3HQP Iv3hqp +2223947 IZ3WYR RAVADJ +2223948 IV3LAR Pietro +2223949 IK2ZJU Marco +2223950 IU3BUL IU3BUL +2223951 IW2CBH Gsarcl +2223952 IU2FCV IU2FCV +2223953 IW3IJJ FrancescoLM +2223954 IK2SGP Como +2223955 IW3BWH Simon +2223956 IK3NWU FRANCO +2223957 IZ2ZPL Iz2zpl +2223958 IU3ILR Maurizio +2223959 IZ2UUK IZ2UUK +2223960 IN3FQE Freddisan +2223961 IW2GAQ ALP +2223962 IZ2BKN Ezio +2223963 IU3EGN Maverik +2223964 IV3GNR Marco +2223965 IU3KUD Ricepes +2223966 IV3WQA IV3WQA +2223967 IW3IPN Fabio +2223968 IZ3KUP Stefano +2223969 IU3GOA IUuGOA +2223970 IZ3SVM Iz3svm +2223971 IW3GXA IW3GXA +2223972 IW2DZI IW2DZI +2223973 IK2JTU IK2JTU +2223974 IW2MIR Iw2mir +2223975 IW2IZF Aldo +2223976 I2JDQ Mau +2223977 IZ3HLW IZ3HLW +2223978 IW3AFH Ernst +2223979 IU2GGN Stefano +2223980 IZ3SQX IZ3SQX +2223981 IV3RIK Stefano +2223982 IU3HUK STEFANO +2223983 I2GVK Giordano +2223984 IN3MWE Elmar +2223985 IZ2BMK Tommaso +2223986 IW2FPE Pasquale +2223987 IV3HQP NICOLA +2223988 IN3ECS Gabriel +2223989 IU2LFP Alberto +2223990 IV3AOX Cristian +2223991 IN3ESP Karl +2223992 IU2GLC IU2GLC +2223993 IN3AQH Walter +2223994 IU2BXX Davide +2223995 IN3AMG Franz +2223996 IV3VSL Marco +2223997 IK2EGQ Giovanni +2223998 IV3HVP IV3HVP 2223999 IK3HHP FRANCESCO +2224000 IZ3GFZ IZ3GFZ 2224001 IZ4RDT Monica 2224002 IZ4YEP Alex 2224003 IW4BVN Paolo @@ -23098,7 +26240,7 @@ 2224137 IZ4BKK Andrea 2224138 IZ4DPS Franco 2224139 IU4DKB Alessandro -2224140 IZ4HUF Alessandro +2224140 IN3EMI Gablar 2224141 IW4EGH Iw4egh 2224142 IW4DGS Iw4dgs 2224143 IZ4RWP Giancarlo @@ -23159,7 +26301,7 @@ 2224198 IU4DAC Davide 2224199 IU4FMX GM 2224200 IU4HFG Iu4hfg -2224201 IW4CPU Alex1965 +2224201 IW4CPU Alessandro 2224202 IW4BFF IW4BFF 2224203 IZ4VMA IZ4VMA 2224204 IU4ICB Stefano @@ -23238,7 +26380,7 @@ 2224277 IU4DTT IU4DTT 2224278 IZ4BEI Ste 2224279 IZ4BOV Lam -2224280 IZ4SJB Chicco +2224280 IZ4SJB Massimiliano 2224281 IK4RUI Giuse 2224282 IU4HMS Passatore 2224283 IZ4MUG Angelo @@ -23328,7 +26470,7 @@ 2224367 IK8JIA TONY 2224368 IW4ANC Cicino 2224369 IW4AQZ Ummarc -2224370 IK4IDF Ik4idf +2224370 IK4IDF Lele 2224371 IW4EON IW4EON 2224372 IZ4VUF VINICIO 2224373 IU4KEV Via.rocca.30 @@ -23383,6 +26525,423 @@ 2224422 IU4BIU Claudio 2224423 IK4JQQ IK4JQQ 2224424 IU4JIR PAOLO +2224425 IW4BUZ IW4BUZ +2224426 IU2HOR Giuseppe +2224427 IQ4JO Cisar +2224428 IW4EAV IW4EAV +2224429 IZ4HVU Francesco +2224430 IZ4UBC IZ4UBC +2224431 IU4LCV IU4LCV +2224432 IV3CQE Sergio +2224433 IU4LGT Matteo +2224434 IU4FMD Marco +2224435 IZ4UAR PENTA +2224436 IU4HRY Marco +2224437 IW4EPA Iw4epa +2224438 IU4FJK IU4FJK +2224439 IZ4OSF IZ4OSF +2224440 IK4CDJ Roberto +2224441 I3GXC Claudio +2224442 IU3IAH ITIS +2224443 IV3GOW Ervino +2224444 IN3GYZ Hubert +2224445 IZ2GNT IZ2GNT +2224446 IU2KIN Nizzo +2224447 IZ2UVO IZ2UVO +2224448 IU2KZI Luigi +2224449 IN3FOA Daniel +2224450 IZ2TEV Tova +2224451 IW2JIE Danilo +2224452 IW2KGW Antonio +2224453 IW3HTT LPR +2224454 IW3FVQ Mirco +2224455 IW4EGP Paolo +2224456 IZ4JWY Alfio +2224457 IK2RZV ELIO +2224458 IW2KVC Marco +2224459 I2MIP Mgpiaia +2224460 IW2HNN IW2HNN +2224461 IW3AIB Alexius +2224462 IW4EIB IW4EIB +2224463 IU4DIN Antonio +2224464 IU2LNM BERTO2018 +2224465 IW3IPS IW3IPS +2224466 IK2UCJ Giuseppe +2224467 IK2SAI Tibi +2224468 IU2LOM IU2LOM +2224469 IW4CFZ RAF +2224470 IK4SWW IK4SWW +2224471 IZ3XNJ IZ3XNJ +2224472 IZ3DVM IZ3DVM +2224473 IW4CFN Bob +2224474 IZ2GLU IZ2GLU +2224475 IV3EXN Giorgio +2224476 IU4JBX Mars +2224477 IZ3PYE MAX +2224478 IW2JMO Mauro +2224479 IU2LGL IU2LGL +2224480 IK2EXI Roberto +2224481 IU2JHH IU2JHH +2224482 IU3COO Osvaldo +2224483 IV3BVK Paolo +2224484 IU2GEA Gea +2224485 IU2LPP Yuri +2224486 IZ3JKA ANTONIO +2224487 IU2CCX Giancarlo +2224488 IK4IDH IK4IDH +2224489 I2HTT Flyline +2224490 IU3EHS Mauro +2224491 IV3HIJ Davide +2224492 IK4UOS Caio63 +2224493 IW2GIY Iw2giy +2224494 IN3HTY Juergen +2224495 IU2ARQ Sergio +2224496 IW2KWX Rox +2224497 IN3EHE IN3-EHE +2224498 IQ3CW IQ3CW +2224499 IZ3DVP Giulio +2224500 I2HIZ OSCAR +2224501 IZ3ZXE Gian +2224502 IK2TDR Vittorio +2224503 IU4LAU IU4LAU +2224504 IU2KJQ IU2KJQ +2224505 IZ3KNS Rossano +2224506 IW2KUY Strappadenti +2224507 IU2HXT Paolo +2224508 IU4FIF IU4FIF +2224509 IZ4HBH HBH +2224510 IU2LZT KANTOIS +2224511 IU2IKT Paolo +2224512 IV3VSC VSC +2224513 IZ4PNN Mirko +2224514 IZ3LQS Marco +2224515 IW3INX CLAUDIO +2224516 IV3HRO Maurizio +2224517 IZ2VTO Leonardo +2224518 I2NUS Pino +2224519 IZ2LQK Mac +2224520 IV3BAZ Fabio +2224521 IV3VFR ANDREA +2224522 IU2JYV Iu2jyv +2224523 IU3IQY Mauro +2224524 I3MRV I3MRV +2224525 IW3INT Gianni +2224526 IW3GBD MICHELE +2224527 IZ3WTX Massimo +2224528 IW3EVO Iw3evo +2224529 IU3BAE DVR3 +2224530 IZ2ZQF GIULIO +2224531 IU4HCF IU4HCF +2224532 IZ4VTV IZ4VTV +2224533 IW2NOO MG@74 +2224534 IW4EIL Iw4eil +2224535 IU2EBG IU2EBG +2224536 IU3LXX Francesco +2224537 IV3FMG Giovanni +2224538 IW4DNS Miki4G +2224539 IN3ACO Luigi +2224540 IV3TGU IV3TGU +2224541 IU3LZN Alessio +2224542 IU3HGA Aca +2224543 IW2ED Adele +2224544 IU3MAZ Alessandro +2224545 IU2LTO Fraray +2224546 IN3GIR STEFANO +2224547 IK2UTQ Alessandro +2224548 IZ2LRX Stefano +2224549 IU3GMA Andrea +2224550 IU3MBF Davide +2224551 IZ4FEI Mario +2224552 IU4FJK Marco +2224553 IU3MBB Giaguar +2224554 IW3BVV IW3BVV +2224555 IW2NFJ Paolo +2224556 IV3SVS Maurizio +2224557 IU4LEG Iu4leg +2224558 IU4CZV Flavio +2224559 IU2LYK Sax +2224560 IW2CEQ IW2CEQ +2224561 IU3LZL IU3LZL +2224562 IW4ELT Giancarlo +2224563 IU2LXM Alberto +2224564 IU3KOB Kezi +2224565 IW2JYU Iw2jyu +2224566 IU3MCI FRANCO +2224567 IU2LUO Paolo +2224568 IU3MCM IU3MCM +2224569 IU3MAD IU3MAD +2224570 IU3MCK IU3MCK +2224571 IW3ION Iw3ion +2224572 I3RXJ Gianfranco +2224573 IU2JCX Rocco +2224574 IW3IMV Rinaldo +2224575 IW2GAL Luca +2224576 IZ2ZSH Luca +2224577 IU3MCU Davide +2224578 IU2LXU Gian +2224579 IW3SSD Andrea +2224580 IU3LPS Arth +2224581 IN3EQU Understone +2224582 IZ4TOL ALESSANDRO +2224583 IK2ZDV Felice +2224584 IU2LXO GENNA +2224585 IW4EME IW4EME +2224586 IV3CVE Davide +2224587 IU2KUZ Kenzo +2224588 IN3HKZ Hannes +2224589 IV3HQC Green.Pixel +2224590 IU2MAH Carlo +2224591 IN3HUT Oskar +2224592 IU2LUH Giuliano +2224593 IZ3WUV KROM +2224594 IW3SSD Andrea +2224595 IK4FDS Paolo +2224596 IU4LAH Natale +2224597 IU2MCV Paolo +2224598 IW4CUV Daniele +2224599 IV3DXW Claudio +2224600 IZ2USH IZ2USH +2224601 IU3MCF IU3MCF +2224602 IZ3KNX Adriano +2224603 IW3FMP Claudio +2224604 IU2LXS Lele +2224605 IZ3XEN Piergiorgio +2224606 IZ2PIZ Davidely88 +2224607 IW2NPQ Roger +2224608 IZ3VCM Giuseppe +2224609 IU3LZP Nico +2224610 IU3MHL Andrea +2224611 IU2LXJ GIUSEPPE +2224612 IN3HUS Achim +2224613 IU3IQA JANGY +2224614 IW2LDI GIANNI +2224615 IN3HVA Manuel +2224616 IK2YVK Angelo +2224617 IW2HMT Francesco +2224618 IZ3PFE Paolo +2224619 IU2LXG Stefano +2224620 IU2FRZ LUCCIO +2224621 IU2EFL Gianmario +2224622 IU4MHP IU4MHP +2224623 IW3QBM PIETRO +2224624 IK4FDS Paolo +2224625 IZ3YPS GUIDO +2224626 IU4LQZ Alessandro +2224627 IU2LOG Ebar +2224628 IZ3JJD IZ3JJD +2224629 IZ2KYH Cosimo +2224630 IV3MTU Stefano +2224631 IK2TTT MIchele +2224632 IV3XLS LIVIO +2224633 IU3LZP NIcola +2224634 IK3ZBD Antonio +2224635 IZ2HFI Giuseppe +2224636 IU2KBC Egidio +2224637 IV3WHP Piero +2224638 IK3MUL IK3MUL +2224639 IW2GGK Fabio +2224640 IV3NGF Igor +2224641 IV3HRO Maurizio +2224642 IU2KBC Egidio +2224643 IU2LTC Fabio +2224644 IU3MBY Jhonny +2224645 IW4DLK Aciduloz +2224646 IU4MKF Paolo +2224647 IU2ECT ENZO +2224648 IU3MBX Franco +2224649 IW2GXC ANTONIO +2224650 IV3GRM Alex +2224651 IV3HQN Matteo +2224652 IU3LZL Tiziano +2224653 IV3XEI MARCO +2224654 IU4JII Bruno +2224655 IZ2FLY Ernesto +2224656 IU3MJB Raffaele +2224657 IZ2ZQP ROY +2224658 IK2WZL Gino +2224659 IU2KCV Bill +2224660 IZ2GMF ANGELO +2224661 IW3HTJ Norberto +2224662 IW3BXO Markus +2224663 IZ3DRO Giancarlo +2224664 IU3MDI Luca +2224665 IZ4NTC Mario +2224666 IU3EGM Andrea +2224667 IW3GHZ DIMITRI +2224668 IW2NQM Michele +2224669 I3BQC I3bqc +2224670 IU2CBF Marco +2224671 IU2LKJ IU2LKJ +2224672 IK4UNQ Ik4unq +2224673 IW3ICH Marco +2224674 IU3MKA Umberto +2224675 I2NOY I2NOY +2224676 IU2IIP Betty +2224677 IU3IOR IU3IOR +2224678 IU2MCH Lello +2224679 IW3HTY IW3HTY +2224680 IW2LAT GIUSEPPE +2224681 IZ2QDL IgorCastelli +2224682 IV3CUJ IV3CUJ +2224683 IW4CIQ MAURY66 +2224684 IU2ILS Pietro +2224685 IV3GIQ Silpit +2224686 IZ3SUG IZ3SUG +2224687 IK2LQZ Osvald +2224688 IV3RVO Ciro +2224689 IU3IVK IU3IVK +2224690 IU3LYA RICCARDO +2224691 IW2KLR Diego +2224692 IU3LYJ Emanuele +2224693 IU3LZE Alessandro +2224694 IK4HLV Alfonso +2224695 IU3MEU Raffaele +2224696 IZ4CCO Iz4cco +2224697 IU2LXT Sergio +2224698 IZ3VFK IZ3VFK +2224699 IZ3STA Ilaario +2224700 IZ4HUF Alessandro +2224701 IU4MMI Roberto +2224702 IU4HLZ Lorenzo +2224703 IU2JUB MGA +2224704 IU2GHT Massimo +2224705 IU4HMH Ivo +2224706 IU4LBV Luca +2224707 IZ3QVB Alextorello +2224708 I2ORX Giampaolo +2224709 IK2CCB Gian +2224710 IZ4BZJ IZ4BZJ +2224711 IK4QIA Laverdure +2224712 IU4LIG MAX +2224713 IW2ELY Luigi +2224714 IU4MNN Marcop +2224715 IU2MKE Beppe +2224716 IU3MCN IU3MCN +2224717 IZ2QDA Roberto +2224718 IU2GLG Nicoletta +2224719 IV3ATT Ale +2224720 IZ3AYQ Fabio +2224721 IZ2SXQ Alfavictor +2224722 IV3HTM IV3HTM +2224723 IU2EBR Mauro +2224724 IV3CQY Alessandro +2224725 IU4LHK Cristiano +2224726 IW3FOR Vascaval +2224727 IK3XNQ Roberto +2224728 IW3HOD Alberto +2224729 IZ3LSV Cristiano +2224730 IU4JTV Daniele +2224731 IW3QRM Gianni +2224732 IU2KBY Emanuele +2224733 IU2IPV MColombo79 +2224734 IU3MLW Vincenzo +2224735 IZ3SQT Corrado +2224736 IV3HZL IV3HZL +2224737 IW3FLD Paolo +2224738 IU2EBM Andrea +2224739 IU4MUC Fabiano +2224740 IZ3HGL Moris +2224741 IZ2ZQG Andrea +2224742 IV3HZI Egidio +2224743 IZ2VMM Attilio +2224744 I4YMB Nick +2224745 IU2MLY IU2MLY +2224746 IU3MRX IU3MRX +2224747 IK4RTS Pasquale +2224748 IK4JQP GIULIANO +2224749 IU4MSC Ralf_75 +2224750 IV3IEA VINI +2224751 IU3KKD Christian +2224752 IK3ZAL Paolo +2224753 IU2DGV IU2DGV +2224754 IU4MTU Sancio +2224755 IU4MVR FLORIAN +2224756 IU4MTI Stefano +2224757 IZ4VTA IZ4VTA +2224758 IN3LFL Luciano +2224759 IU3MUO Andrea +2224760 IW2LSY Corrado +2224761 IU2MIR IU2MIR +2224762 IK3OTW Roberto +2224763 IZ4BQY Nicola +2224764 IK2GAO Alberto +2224765 IU4MPL Andrea +2224766 IU2MQD Fulvio +2224767 IV3FVG Francesco +2224768 IK2ILJ IK2ILJ +2224769 IZ2WMD Efrem +2224770 IV3HHQ ToioBoio +2224771 IV3GWK ROBERTO +2224772 IV3XSP Radiodiver +2224773 IK4OLQ Andrea +2224774 IU4EBH Giancarlo +2224775 IV3NLG IV3NLG +2224776 IZ2XYA Ivano +2224777 IU2LWA IU2LWA +2224778 IU2MWK MARIO +2224779 IZ3GOM IZ3GOM +2224780 IU3MEY IU3MEY +2224781 IV3ATH Livius +2224782 IU2GBH Marcello +2224783 IN3GYS MICHELE +2224784 IZ2ZMN Remo +2224785 IV3IBE ADRI +2224786 IU4MVL Giorgio +2224787 IV3IBH Claude +2224788 IK2HNG Andrea +2224789 IZ2QQI TADDEO +2224790 IN3HIV Helmuth +2224791 IQ2BJ ARI +2224792 IZ2PFV Stefano.boldrini +2224793 IU4MUV Riccardo +2224794 IW2CKM Ckm +2224795 IZ3QFI Mari +2224796 IN3IDQ Matteo +2224797 IZ3DBB Davide +2224798 IZ2ZRT Moreno +2224799 IZ2QDC Gianpaolo +2224800 IV3IBN IV3IBN +2224801 IZ2RJH Lorenzo +2224802 IU2MZM Marco +2224803 IU2MZL MasNeoTek +2224804 IZ3ZOF IZ3ZOF +2224805 IW4DXL Gianni +2224806 IW2HNA Khikko +2224807 IN3XAT Aurelio +2224808 IW2DFH Stefano +2224809 IU4MSI Max +2224810 IZ2ADA Marcello +2224811 IW2NKO Cesare +2224812 IU3IIN Gabriele +2224813 IW2GPM STEFANO +2224814 IV3HZR Iztok +2224815 IK3GLF Nicola +2224816 IU2NAF Diego +2224817 IU2MYY LUIGI +2224818 IZ2LSQ Iz2lsq +2224819 IV3XHF Dario +2224820 IV3DXW Claudio +2224821 IV3OAL Delta +2224822 IK3ITZ Emilio +2224823 IZ2IKB IZ2IKB +2224824 IZ3ENH Steve +2224825 IZ2NBD Luciano +2224826 IU2LWW Ccerfo +2224827 IU2MUW Leonida +2224828 IK2LRF ALESSANDRO +2224829 IK2WYJ IK2WYJ +2224830 IU2IHY IU2IHY +2224832 IU2KAU Matteo +2224833 IU4JZT PAUL +2224834 IU2NBZ Fabrizio +2224835 IK2YYN Massimo +2224836 IZ2CPO PIETRO +2224837 IZ3LES IZ3LES +2224838 IW4BKY Dario +2224839 IZ3QJF Giovanni +2224840 IZ2KOW Konfa +2224841 IZ2MYB Guido +2224843 IZ2MAJ RINO 2225001 IZ5IOM Renzo 2225002 IZ5HRO Emanuele 2225003 IZ5YLV Valentina @@ -23480,7 +27039,7 @@ 2225095 I5OYY i5oyy 2225096 IW5CI ANDREA-CI 2225097 IZ5FHP iz5fhp -2225098 I5EKX i5ekx +2225098 I5EKX Alessandro 2225099 IZ5TQW iz5tqk 2225100 IZ5ILH iz5ilh 2225101 IZ5IOV IZ5IOV @@ -23494,7 +27053,7 @@ 2225109 IK5MIC Ik5mic 2225110 IK5SQS Daniele 2225111 IU5ATN Massimo -2225112 I5KBS I5kbs +2225112 I5KBS Grazio 2225113 IZ5IVU MARCELLA 2225114 IZ5ILE Marcello 2225115 IU5HJU Mike @@ -23542,12 +27101,12 @@ 2225157 IK5BCM JOHN 2225158 IZ5MJQ Iz5mjq 2225159 IU5FXW Flavio -2225160 IZ5TRO FISHERMAN +2225160 IZ5EIS Pietro 2225161 IW5EFM IW5EFM 2225162 IZ5RFW IZ5RFW 2225163 IU5FHF Robybenjy 2225164 IW5ECS Marco -2225165 IZ5EAF IZ5EAF +2225165 IZ5EAF Paolo 2225166 IU5CON IU5CON 2225167 IU5BKB IU5BKB 2225168 IU5DBT IU5DBT @@ -23603,9 +27162,9 @@ 2225218 IU5EXV IU5EXV 2225219 IU5JIG Montecetona 2225220 IZ5VSL Francesco -2225221 IU5JAE Antodmr +2225221 IU5JAE Antonio 2225222 IW5DRI IW5DRI -2225223 IU5BJV Sparviero +2225223 IU5BJV Gerardo 2225224 IZ5TID IZ5TID 2225225 IZ5RKX FiloRoma 2225226 IA5DIR IA5DIR @@ -23617,9 +27176,9 @@ 2225232 IZ5RKS ZARA 2225233 IU5JIV Alessandro 2225234 IU5JIP Max -2225235 IU5JIM Clickhunt +2225235 IU5JIM Luca 2225236 IW5BPV IW5BPV -2225237 IZ5RKL IZ5RKL +2225237 IZ5RKL Matteo 2225238 I5FIP Pierofirenze 2225239 IZ5YDY IZ5YDY 2225240 IZ5WSR Salvatore @@ -23659,7 +27218,7 @@ 2225274 IA5FYI Stefy 2225275 IK5PWO Mauro 2225276 IW5EJD Malto -2225277 IZ5RZI ROCCO +2225277 IZ5FDM Pietro 2225278 IW5EKI ******** 2225279 IZ5UXP Koolcat6666 2225280 IA5GPY Roccoventri @@ -23702,7 +27261,7 @@ 2225317 IZ5RKM RANDELLO 2225318 IW5BUI Maurizio 2225319 IU5FFW Pierluigi -2225320 IU5AVH IU5AVH +2225320 IU5AVH Sauro 2225321 IK5HGL IK5HGL 2225322 IW5DGQ Riccardo 2225323 IK5FXZ Lanfranco @@ -23732,9 +27291,121 @@ 2225347 IZ5HNI IZ5HNI 2225348 IZ5PJD Gabriele 2225349 IU5HIQ Francesco -2225350 IW5CHW IW5CHW +2225350 IW5CHW Maurizio 2225351 IK5ZAF Matteo 2225352 IK5VLP IK5VLP +2225353 IW5AOM Giorgio +2225354 IU5KZG IU5KZG +2225355 IW5CSJ Roberto +2225356 IW5EKE Billy +2225357 IK5JAM Radiojam +2225358 IW5EAW IW5EAW +2225359 IK5WWP Aradio +2225360 IU5DJV IU5DJV +2225361 IK5ZVE Denis +2225362 IU5DVQ IU5DVQ +2225363 IZ5IOF Andrea +2225364 IZ5IMB Rino +2225365 IU5JLR Stefano +2225366 IU5LCC Alessandro +2225367 IK5SLA Carlo +2225368 IU5ICD Iu5icd +2225369 IZ5DKI Stefano +2225370 IZ5RKZ Leo +2225371 IZ5ZCH IZ5ZCH +2225372 IU5DDS IU5DDS +2225373 IU5HJK Franco +2225374 IU5IFM Massimo +2225375 IZ5VVO ANDREA +2225376 I5JCP Corrado +2225377 IU5ITU Giancarlo +2225378 IZ5TJI Daniele +2225379 IZ5VTJ Giovanni +2225380 IA5EEK IA5EEK +2225381 IZ5IYD David +2225382 IU5JJL Alberto +2225383 IU5KHP NN +2225384 IU5LBO Piero +2225385 IU5JJF Simar +2225386 IU5IBA Ginko +2225387 IZ5TIX NUNZIO +2225388 I5ZQY Romano +2225389 IU5LAD IU5LAD +2225390 IU5HXP Salva +2225391 IA5HTC Carmine +2225392 IU5KZT Luigi +2225393 IU5JOP Carlo +2225394 IW5DSI Mirco +2225395 IW5CAO CARLOALBERTO +2225396 IU5FFO Giampaolo +2225397 IK5UIK Piero +2225398 IW5ECI Federico +2225399 IW5EHO IW5EHO +2225400 IU5KZG Stefano +2225401 IK5YMH Tom +2225402 IZ5RKF Massimiliano +2225403 IK5ZQC Francesco +2225404 IU5LVN Marco +2225405 IZ5CLJ IZ5CLJ +2225406 IW5DF FEDERICO +2225407 IU5LBR Ero +2225408 IK5ORY Alfa56 +2225409 IK5DET Guglielmo +2225410 IK5YZM Alessandro +2225411 IW5CFN OperationOne +2225412 IA5DKK ALFA +2225413 IZ5NFB SIMONE +2225414 IZ5BYH Stefano +2225415 IU5BSW Bart +2225416 IK5NWZ Vittorio +2225417 IW5AOR Paolo +2225418 IU5ICH Luca +2225419 IK5EDW Giuliano +2225420 IU5LKK IU5LKK +2225421 IW5BCY Marco +2225422 IW5ACL Marcello +2225423 IZ5XOQ Nicola +2225424 IU5LAF PAOLO +2225425 IU5MGQ Gabriele +2225426 IZ5IPC RENATO +2225427 I5PYR Riccardo +2225428 IU5ESF Vico +2225429 IU5GKO Valentino +2225430 IZ5DRL Maurizio +2225431 IU5MIZ Prisco +2225432 IU5HKK Nicola +2225433 IU5IBV Samuele +2225434 IZ5OTC Filippo +2225435 IU5AVO Maurizio +2225436 IU5KZL IU5KZL +2225437 IU5FFL Enrico +2225438 IZ5YEM Giovanni +2225439 IK5HJF Angelo +2225440 IZ5TJF Renato +2225441 IW5CCK Dixi +2225442 IK5JRZ Carlo +2225443 IK5ZTY Alessandro +2225444 IW5EFX Leo +2225445 IU5LQS MIKE +2225446 IU5JIJ VIRAY +2225447 IZ5TLA Lerry +2225448 IU5MPV Maurizio +2225449 IU5MPK GIAN +2225450 I5YAN Varo +2225451 IK5BMH IK5BMH +2225452 IW5CSK Ivoare +2225453 IU5MTM Ettore +2225454 IU5KZP Samuele +2225455 IU5MRL Nello +2225456 IZ5VTE Paolo +2225457 IZ5IOT Claudio +2225458 IU5MPO TASCAPANE +2225459 IU5MMN IU5MMN +2225460 IZ5PIM Gabriele +2225461 IK5PWA Massimo +2225462 IK5DIT LINO +2225463 IK5GUS Guglielmo +2225464 IZ5WSE Stefano 2225555 IW5CGM IW5CGM 2226001 IZ6FGP Mario 2226002 IK6TTE Plinio @@ -23868,7 +27539,7 @@ 2226132 I6QFZ i6qfz 2226133 IK6GVA IK6GVA 2226134 IW6CHN IW6CHN -2226135 IZ6OUF iz6ouf +2226135 IZ6OUF Francesco 2226136 IZ6PVB iz6pvb 2226137 IZ6XTC iz6xtc 2226138 IK6XJZ ik6xjz @@ -23896,7 +27567,7 @@ 2226160 IZ6EJY Marco 2226161 IK6GBO IK6GBO 2226162 IK6PSM Ik6psm -2226163 IK6TUV IK6TUV +2226163 IK6TUV Emidio 2226164 IU6EPG Iu6epg 2226165 IU6EAX IU6EAX 2226166 IU6DWP IU6DWP @@ -23921,7 +27592,7 @@ 2226185 IK6BGJ Justin 2226186 IK6VEM DAVIDE 2226187 IW6PUA JumboPilot -2226188 IK6RJU Ares +2226188 IK6RJU Carlo 2226189 IZ6YLU Stefano 2226190 IZ6VBE Panagiotis 2226191 IU6BSB IU6BSB @@ -24054,7 +27725,7 @@ 2226318 IU6KLC SMAX 2226319 IZ6GVC Rastakhan 2226320 IK6FVE Igor_61 -2226321 IW6BFH IW6BFH +2226321 IW6BFH Alessandro 2226322 IZ6PWL PAOLO 2226323 IK6HLN Jack 2226324 IW6BQC IW6BQC @@ -24086,6 +27757,52 @@ 2226350 IZ6MZV Carla 2226351 IU6LFD IU6LFD 2226352 IW6NRY Carlo +2226353 IK6OUS Ago +2226354 IK6IHP Walter +2226355 IZ6OKE IZ6OKE +2226356 IW6PWC Iw6pwc +2226357 IZ6CZV AntonioIZ6CZV +2226358 IZ6BEA LUCIANO +2226359 IZ6HDE Franco +2226360 I6QFZ Franco +2226361 IW6NTW IW6NTW +2226362 IZ6XYR Lukemat74 +2226363 IK6LMB Massimo +2226364 IZ6RQW IZ6RQW +2226365 IZ6FXF Angelo +2226366 IZ6BTO Sauro +2226367 IK6UBS Enrico +2226368 IK6OSZ Saverio +2226369 IZ6MPZ IZ6MPZ +2226370 IZ6IXC Giovanni +2226371 IK6ELS Vinicio +2226372 IU6LDQ IU6LDQ +2226373 IU6LRT Andrea +2226374 IZ6PBT FOXTANGO +2226375 IW6PQS IW6PQS +2226376 IU6EYB Dan54 +2226377 IW6PGA MORGANTE +2226378 IU6MEM Rocco +2226379 IW6CTU Alfredo +2226380 IW6NTQ Andrea +2226381 IW6MHO Sandro +2226382 IZ6NQF Salvo +2226383 I6IQX Graziano +2226384 IU6LOH Danilo +2226385 IK6IHL Enzo +2226386 IZ6CFL Massimo +2226387 IU6MPC Lisa +2226388 IZ6NLH Germano +2226389 IU6LWQ Kishore +2226390 IU6KFF Riccio +2226391 IW6NSG Aldo +2226392 IW6MGL Giuseppe +2226393 IZ6NAL Alberto +2226394 IZ6PVY Pino +2226395 IW6MCX Pietro +2226396 IK6WHU Claudio +2226397 IZ6NQL Sergio +2226400 IZ6RJQ Fabrizio 2227001 IZ7OIX Domingo 2227002 IZ7GLL Massimo 2227003 IZ7ZFT Silvio @@ -24127,6 +27844,7 @@ 2227039 IU7CPI Gianluca 2227040 IZ7DJV Tony 2227041 IK7YTQ Luigi +2227042 IW7DIG Claudio 2227043 IZ7DOS Pasquale 2227044 IZ7UOR Angelo 2227045 IU8CTC Eugenio @@ -24237,14 +27955,14 @@ 2227150 IZ7BJS Claudio 2227151 IU7GRJ Nicola 2227152 IK7GVB FRACCHIOLLA -2227153 IZ7SIA Jean -2227154 IU7CUU IU7CUU +2227153 IU7GUV Qrp +2227154 IZ7JYG Nicola 2227155 IZ8ZKT IZ8ZKT 2227156 IU7GQZ Pino 2227157 IK7XLG Lino 2227158 IZ7WCK IZ7WCK 2227159 IZ7BAR Gene -2227160 IW7EGX IW7EGX +2227160 IW7EGX Vittorio 2227161 IK7WPE IK7WPE 2227162 I7JDL I7JDL 2227163 IW7ECC Tonio @@ -24269,7 +27987,7 @@ 2227182 IZ7BAS VITO 2227183 IU7IGU Makarow 2227184 IU7BYP Mario -2227185 IZ7XIT Biancaneve +2227185 IZ7XIT Amedeo 2227186 IK7FPV Ik7fpv 2227187 IZ7NMA Michele 2227188 IZ7GWZ Maurizio @@ -24293,13 +28011,13 @@ 2227206 IZ7UEE ASCANIO 2227207 IU7IQS Marco 2227208 I7TTV Tamburrano -2227209 IU7IGC Linkel +2227209 IU7IGC Fedele 2227210 IK7HPG GIUSEPPE 2227211 IU7CUD Sassa 2227212 IZ7ETO Nico 2227213 IU7GST SuperDee 2227214 IU7IGJ Il -2227215 IK7XTA IK7XTA +2227215 IK7XTA Domenico 2227216 IZ7XCD IZ7XCD 2227217 IK7EOT Big 2227218 IZ7UNK . @@ -24370,7 +28088,7 @@ 2227283 IZ8LKC Iz8lkc 2227284 IZ7UNW Gianmarco 2227285 IW7EHP IW7EHP -2227286 IW7EHM Supergenio1 +2227286 IW7EHM Luigi 2227287 IW7EAP Iw7eap 2227288 IZ7DOH IZ7DOH 2227289 IK7CNX Mt500dx @@ -24414,7 +28132,7 @@ 2227327 IK7MXF Francesco 2227328 IW7DIE MatMan75 2227329 IU7GYY Frank -2227330 IK7ZLU LARSER +2227330 IK7ZLU Umberto 2227331 IU7ACY Schinaia 2227332 IW7EEQ Luca 2227333 IZ7ZHF IZ7ZHF @@ -24495,6 +28213,116 @@ 2227408 IZ7CRY Fabio 2227409 I7IYE Giuseppe 2227410 IW7EDH MARCO +2227411 IU7KHT PASQUALE +2227412 IW7EGQ MICHELE +2227413 IK7NNX IK7NNX +2227414 IW8ZDI Army +2227415 IU7COC IU7COC +2227416 IZ7FUL Nicola +2227417 IW7BFN IW7BFN +2227418 IU7GSU Pietro +2227419 IK7OGD Ik7OGD +2227420 IU7EDS IU7EDS-HS +2227421 IU7ISR Francesco +2227422 IU7KXW IU7KXW +2227423 IZ7JWX IZ7JWZ +2227424 IZ7QED Francoalo1 +2227425 IZ7QNV Michele +2227426 IK7JGO Gianni +2227427 IZ7LFR Leonardo +2227428 IZ8IFL Salvatore +2227429 IZ7UIT GIROLAMOPARISI +2227430 IU7IMD Lucio +2227431 IK7DTM Isidoro +2227432 IK7XTA Domenico +2227433 IZ7NPU GIOVANNI +2227434 IU7LOB Iu7lob +2227435 IU7JNQ LINX79 +2227436 IW7DQR IW7DQR +2227437 IZ7DOW Rossano +2227438 IW7DIL Giovanni +2227439 IQ7YU IQ7YU +2227440 I7NNX Domenico +2227441 IK7XNF Cesare +2227442 I7TNV Viti +2227443 IW7ECU Beppe +2227444 IU7BOJ Lino +2227445 IK7YZI ENRICO +2227446 IK7TFX Angelo +2227447 IU7LTM Riccardo +2227448 IW7EFH Leo +2227449 IU7BSO ANGELO +2227450 IU7LUB IU7LUB +2227451 IU7LWF Ciro +2227452 IW7EEG Andrea +2227453 IZ7PDX Luigi +2227454 IK7LSE Nicolo +2227455 IU7KLY Cosimo +2227456 IU7LMX IU7LMX +2227457 IK7PTX IK7PTX +2227458 IZ7XSI Giuseppe +2227459 IU7ESV Pasqualino +2227460 IU7LUU Antonio +2227461 IK7TIU Fptac +2227462 IU7LUY Luca +2227463 IZ7SGV Giovanni +2227464 I7CDL Ignazio +2227465 IU7LWU Marco +2227466 I7MCJ Manlio +2227467 IU7KKK Duca +2227468 IU7LTX Enzo +2227469 IZ7UML Brindisi1 +2227470 I7IGX Piero +2227471 I7STE Eliseo +2227472 IK7ZRM Fabio +2227473 IW7EGY F.L +2227474 IK7UAF GAETANO +2227475 IU7LUB Antonio +2227476 IZ7QPS IZ/QPS +2227477 IK8VNM Mauro +2227478 IU7KKK Duca +2227479 IZ7RJY ILEOP +2227480 I7XUW EDOARDO +2227481 IZ7HZU Vito +2227482 IU7LVA Andrea +2227483 IU7IGO IU7IGO +2227484 IZ7YKW Vincenzo +2227485 IU7BSH Iu7bsh +2227486 IU7EDW Nicol +2227487 IZ7TZG Angelo +2227488 IZ7ULA Maurizio +2227489 IK7FBK IK7FBK +2227490 IZ7OHH Giovanni +2227491 IU7GXL IU7GXL +2227492 IK7DAS Piero +2227493 IZ7XZJ Rocco +2227494 IW7AZG Lorenzo +2227495 IK7YZB Antonio +2227496 IK7QME Domenico +2227497 IU7MLJ Fabio +2227498 IU7MGL Gianfranco +2227499 IK7EEO Eusebio +2227500 IU7HPT Mike +2227501 IK7XGH Michele +2227502 IK7WUI Angelo +2227503 IZ7JWW Vito +2227504 IZ7MKN Michele +2227505 IZ7JXO Enzo +2227506 IZ7UMB VINCINI +2227507 IZ7UMT Gianluca +2227508 IK7MCM IK7MCM +2227509 IZ8OYV DANIELE +2227510 IZ7JXW Saverio +2227511 IU7DQB RICCARDO +2227512 IW7BFZ Francesco +2227513 IW7EFE Dan +2227514 IU7MFT LUCA +2227515 IZ7LUL Carlo +2227516 IU7MKN Francesco +2227517 IU7NAJ Savio +2227519 I8KQK Rocco +2227520 IU7MNK IU7MNK +2227521 IK7BEF ANTONIO 2228001 IZ8IYJ Nicola 2228002 IW8XQP Elio 2228003 IZ8XSS Federico @@ -24607,7 +28435,7 @@ 2228110 IZ8KQZ iz8kqz 2228111 IU8CPT iu8cpt 2228112 IK8VRQ ik8vrq -2228113 IZ8MZD Iz8mzd +2228113 IZ8MZD Ciro 2228114 IZ8QIF iz8qif 2228115 IK8URY ik8ury 2228116 IU8CPQ Iu8cpq @@ -24618,7 +28446,7 @@ 2228121 IW8FCL iw8fcl 2228122 IU8CTC iu8ctc 2228123 IK8TOA ik8toa -2228124 IZ8GDO IZ8GDO +2228124 IZ8GDO Pasquale 2228125 IW8XEF Iw8xef 2228126 IZ8WRX Iz8wrx 2228127 IZ8YWE iz8ywe @@ -24753,7 +28581,7 @@ 2228257 IK8PGH Emerson 2228258 IZ8FMX IZ8FMX 2228259 IU8HAS Teresa -2228260 IU8HNE Iu8hne +2228260 IU8HNE Claudio 2228261 IZ8IBF Ibf 2228262 IZ8FMH IZ8FMH 2228263 IK8EQG Gianni @@ -24794,7 +28622,7 @@ 2228298 IZ8STL IZ8STL 2228299 IC8UOH IC8UOH 2228300 IZ8GCP Maurizio -2228301 IC8VYG Ic8vyg +2228301 IC8VYG Giovanni 2228302 IU8AMU 64kappa 2228303 IZ8AWQ Giuliano 2228304 IU8IZH Francesco @@ -24819,7 +28647,7 @@ 2228323 IW8RFH ANTONIO 2228324 IW8ROE Iw8roe 2228325 IZ8EDI Iz8edi -2228326 IZ8WMQ Iz8wmq +2228326 IZ8WMQ Luigi 2228327 IW8BVN Iw8bvn 2228328 IZ8EQA IZ8EQA 2228329 IU8CEH Prot. @@ -24867,8 +28695,8 @@ 2228371 IU8JTA GIUSEPPE 2228372 IU8JSQ IU8JSQ 2228373 IU8HAO Maestro -2228374 IZ8UZK THE -2228375 IU8JKN IU8JKN +2228374 IZ8UZK Franco +2228375 IU8JKN Nino 2228376 I8GMG Nick 2228377 IC8HGL Carmine 2228378 IZ8SKE IZ8SKE @@ -24949,7 +28777,7 @@ 2228453 IU8IZR Antonio 2228454 IZ8UQP Gab 2228455 IZ8OFN Nicola -2228456 IZ8CIB Eternity +2228456 IZ8CIB Massimo 2228457 IZ8CFH Rocco 2228458 IU8GVN Tony 2228459 IU8JMJ Francesco @@ -24989,6 +28817,199 @@ 2228493 IU8KYW Roberto 2228494 IU8LDF IU8LDF 2228495 IK8BIJ Ik8bij +2228496 IU8LND Armando +2228497 IZ8PPJ BRUNO +2228498 IU8KSA Francesco +2228499 IU8LML Franco +2228500 IU8GVZ FRANCESCO +2228501 IZ8NVJ Vincenzo +2228502 IW8FFT Catello +2228503 IZ8OFC Giuseppe +2228504 IW8PGT Francesco +2228505 IU8LLP Vincenzo +2228506 IU8LLU Angelo +2228507 IW8XBJ Iw8xbj +2228508 IU8LMC Martino +2228509 IK8PDU Tonino +2228510 IW8XFB Lucio +2228511 IK8ZKV Roberto +2228512 IK8GYC Eliano +2228513 IW8XCM Aldo +2228514 IW8XET Angelo +2228515 IW8XES Giovanni +2228516 IW8XPM Peppino +2228517 IZ8TKY Mik +2228518 I8IOY Antonio +2228519 IW8XFH Renato +2228520 IZ8PUQ Alfredo +2228521 IZ8IEV Francesco +2228522 IW8XDB SERAFINO +2228523 IZ8YMJ VINCENZO +2228524 IW8YML DONATO +2228525 IZ8YML DONATO +2228526 IU8LIF Gianluca +2228527 IU8GVZ FRANCESCO +2228528 IU8JBM Carmine +2228529 IU8LNA Guglielmo +2228530 IZ8SFC Lucio +2228531 IU8LOR CIRO +2228532 IU8KRX ANTONIO +2228533 IU8AEB VALERIO +2228534 IU7GRM Luigi +2228535 IU8JPN Caporale +2228536 IK8HYD Francesco +2228537 IZ8CPZ Tommy +2228538 IZ8STJ Mario +2228539 IK8FZD Salvatore +2228540 IU8AFD ALESSANDRO +2228541 IZ8JCW Fabio +2228542 IZ8ZEW Vittorio +2228543 IK8GUA Pinuccio +2228544 IZ8OCU Maurizio +2228545 IK8ENU Gianni +2228546 IZ8MPC Giuseppe +2228547 IW8DPM IW8DPM +2228548 IW8RNK ROBERTO +2228549 IZ8OFO CARLO +2228550 IZ8BIB Iz8bib +2228551 IZ8AXJ FERY +2228552 IW8PQU Francesco +2228553 IC8FJX CAMILLO +2228554 IK8VKW Francesco +2228555 IU8LQW Damiano +2228556 IZ8ZZH Iz8zzh +2228557 IZ8VKF ANTONIO +2228558 IZ8EQA Antonino +2228559 IZ8VKU Raffaele +2228560 IZ8KMJ Giulio +2228561 IZ8LYR Gennaro +2228562 IZ8EGF Salvo +2228563 IU8JYL Renato +2228564 IZ8FQQ Giuseppe +2228565 IK8YJS Agostino +2228566 IZ8YNA Mario +2228567 IK8TMV Enzo +2228568 IU8FQJ Antonio +2228569 IZ8OFE Olilu74 +2228570 IU8LSW SIMONE +2228571 IK8SDF Geppino +2228572 IU8LME IU8LME +2228573 IU8HSE IU8HSE +2228574 IU8FUU MICHELE +2228575 IU8IAA Maurizio +2228576 IZ8IDU ALESSANDRO +2228577 IZ8QMV SUSY +2228578 IZ8QMW LUCIA +2228579 IZ8SNW IZ8SNW +2228580 IZ8OFH Catello +2228581 IZ8JVF Giuseppe +2228582 IZ8QMK Annamaria +2228583 IU8BRR Antonio +2228584 IZ8GFC IZ8GFC +2228585 IU8AHQ Roberto +2228586 IZ8EUW Peppino +2228587 IU8HAO GIANNI +2228588 IZ8OEU Umby +2228589 IZ8FRH ENZO +2228590 IU8GBG IU8GBG +2228591 IZ8QAC IZ8QAC +2228592 IK8HBU Biagio +2228593 IK8HCM IK8HCM +2228594 IU8AHL ALFONSO +2228595 IK8HCK Dora +2228596 IU8LDG MACRI +2228597 IU8GWH Maria +2228598 IZ8XLI Alessandro +2228599 IK8DUA FELICE +2228600 IQ8JW U.R.I. +2228601 IZ8VHN ANTONIO +2228602 IZ8VDY ANTONIO +2228603 IZ8SEB Antonio +2228604 IZ8QLF Jerri +2228605 IK8IPL Giulio +2228606 IZ8XUB VITTORIO +2228607 IZ8XTO Gennaro +2228608 IZ8XWH Gerardo +2228609 IK8XAQ Severino +2228610 IZ8STQ Giuseppe +2228611 IU8JRX Franco +2228612 IZ8XOO GIORGIO +2228613 IU8LMM ENZO +2228614 IU8CKP Domenico +2228615 IU8MHY SALVATORE +2228616 IC8DVG E14 +2228617 IW8ENL Francesco +2228618 IU8DFD Sara +2228619 IZ8DWN Luigi +2228620 IU8MIC PASQUALE +2228621 IU8LDF Sandra +2228622 IU8MHJ Mimmo +2228623 IZ8EQI Stanislao +2228624 IW8FEA Rosario +2228625 IU8FTL Vincenzo +2228626 IW8AHG Domenico +2228627 IK8OAM Ermanno +2228628 IZ8KKS Enrico +2228629 IC8LPE IC8LPE +2228630 IU8CDQ LUCA +2228631 IZ8VHV Iz8vhv +2228632 IU8MJL Giulio +2228633 IK8CEP MICHELE +2228634 IU8EOJ Annibale +2228635 IZ8QIM Ciro +2228636 IZ8EUZ Iz8euz +2228637 IZ8EDJ Oreste +2228638 IK8TWY Maurizio +2228639 IK8JNV GIULIANO +2228640 IZ8VHV Gianluca +2228641 IU8ACM Binario +2228642 IU8JPG Ciro +2228643 IU8FXZ IU8FXZ +2228644 IQ8WA Giorgio +2228645 IZ8TFB Gennaro +2228646 IU8LTP Cosimo +2228647 IK8YSW Errico +2228648 IU8HPE Andrea +2228649 IZ8GPB FRANCO +2228650 IZ8EWB Hamradio +2228651 IZ8SZY Iz8szy +2228652 IW8EHK Sandro +2228653 IU8FWT Toty +2228654 IW8RSW Peppe +2228655 IZ8GEX ANGELO +2228656 IU8AQN Salvatore +2228657 IW8RVY Francesco +2228658 IU8LDB Emanuele +2228659 IK8OCW Guglielmo +2228660 IU8CGJ Vincenzo +2228661 IU8LEX Mario +2228662 IU8FYM IU8FMY +2228663 IK8IOZ NINO +2228664 IK8WJZ IK8WJZ +2228665 IU8MOA Enzo +2228666 IU8MXU IU8MXU +2228667 IK8RKH Umberto +2228668 IZ8EGE GIUSEPPE +2228669 IZ8UYS Rino +2228670 IU8EQT Luca +2228671 IQ8BI Ari +2228672 IZ8HXG LEOPOLDO +2228673 IZ8UVS Augusto +2228674 IZ8FBU Carlo +2228675 IK8WCL Ernesto +2228676 IZ8TPV Carmine +2228677 IU8MLC Corrado +2228678 IU8IVV RAFFAELE +2228679 IZ8FOM Gaetano +2228680 IZ8GFB Massimo +2228681 IU8MNU Vincenzo +2228682 IU8GUE Luigi +2228683 IZ8LLH IZ8LLH-Luca +2228684 IZ8EOY ATENIESE +2228685 IZ8FZN Francesco +2228686 IU8AGP Ciriaco +2228687 IU8FWN Attilio +2228688 IZ8RPH Daniele 2229001 IT9YFO Andrea 2229002 IT9ZON Francesco 2229003 IT9UUT Salvo @@ -25081,7 +29102,7 @@ 2229092 IT9GQB Igor 2229093 IT9SWH Alfredo 2229094 IT9HFQ Silvio -2229095 IT9EJE IT9EJE +2229095 IT9EJE Calogero 2229096 IT9MUF IT9MUF 2229097 IT9CZM IT9CZM 2229098 IT9WNU IT9WNU @@ -25145,7 +29166,7 @@ 2229156 IT9SBE RICO 2229157 IT9FBN IT9FBN 2229158 IW9GDC Manny -2229159 IT9ISS Skylive82 +2229159 IT9ISS Salvatore 2229160 IT9UVX Lupenbit 2229161 IW9DAF Enzo 2229162 IW9FI Carmelo @@ -25171,7 +29192,7 @@ 2229182 IW9HPF IW9HPF 2229183 IT9RYJ NuccioRYJ 2229184 IT9AOO It9aoo -2229185 IT9XVU IT9XVU +2229185 IT9XVU Nino 2229186 IT9CLG It9clg 2229187 IT9XGU Salvo 2229188 IT9DGZ Pietro @@ -25192,7 +29213,7 @@ 2229203 IW9HRR Savinoleo 2229204 IT9VKY Emartin 2229205 IQ9GF ERA-AG -2229206 IW9GMF IW9GMF +2229206 IW9GMF Vincenzo 2229207 IT9JJE Fabry 2229208 IW9CHH Tony 2229209 IT9DZJ Peppe @@ -25284,12 +29305,159 @@ 2229295 IT9HOD Giuseppe1127 2229296 IT9NTE IT9NTE 2229297 IT9AAK SALVATORE +2229298 IT9RID IT9RID 2229299 IT9GCC Giiulio 2229300 IT9HDX Vincenzo 2229301 IW9BJU Gianni 2229302 IW9HOE Francesco 2229303 IT9GIU EMANUELE 2229304 IT9XJM Gerlando +2229305 IT9GHL SERGIO90 +2229306 IT9ITI Pino +2229307 IT9LEW Giovanni +2229308 IW9GIA Madcat +2229309 IQ9IL ARC +2229310 IT9CIF IT9CIF +2229311 IT9TUL Andrea +2229312 IT9BCW Gaetano +2229313 IT9BOV Enzo +2229314 IW9EG Damiano +2229315 IT9GAK Gaspare +2229316 IW9FVH Mario +2229317 IT9NDW Francesco +2229318 IT9HKK Enzo +2229319 IT9FNG Argentieri +2229320 IT9SJF Saverio +2229321 IW9HRH Eugenio +2229322 IW9EOQ Francesco +2229323 IT9BLZ Nino +2229324 IW9FBX Franco +2229325 IT9YKJ Daniele +2229326 IT9YHN Gaetano +2229327 IT9HRE Salvo +2229328 IT9JGS IT9JGS +2229329 IT9AAD Andrea +2229330 IT9LCP Stefano +2229331 IW9HPK Antonellp +2229332 IT9TSC PIETRO +2229333 IT9QKU Francesco +2229334 IT9GMB Luca +2229335 IT9CNG IT9CNG-Roberto +2229336 IT9CXD GABRI65 +2229337 IT9HQZ Concy +2229338 IT9HOU Mario +2229339 IT9ARC Antonino +2229340 IT9COR Salvatore +2229341 IT9BWZ Franco +2229342 IT9AYG Diego +2229343 IW9GXO Claudio +2229344 IT9TTY Alberto +2229345 IW9DED Peppe +2229346 IW9BSI Michele +2229347 IT9GBY GIOVANNI +2229348 IW9BGV Michele +2229349 IW9FIR Francesco +2229350 IT9OZS It9ozs +2229351 IT9YTK PUCCIO +2229352 IT9DUT Carmelo +2229353 IT9HAF Massimo +2229354 IT9CRA Antonio +2229355 IT9FGG Santo +2229356 IT9JAM FRANCESCO +2229357 IT9GXS IT9 +2229358 IW9CJO Salvo +2229359 IT9AKQ IT9AKQ +2229360 IT9VAL Antonio +2229361 IT9GAY Giuseppe +2229362 IT9AOR FABIO +2229363 IT9GTS Pippo +2229364 IT9FDF ANTONIO +2229365 IT9HSE IT9HSE +2229366 IT9VHP Giuseppe +2229367 IW9HME Giovanni +2229368 IT9NKT Riccardo +2229369 IW9AOG FRANCESCO +2229370 IW9CJC Giuseppe +2229371 IT9VHP GIUSEPPE +2229372 IT9AWE Umberto +2229373 IQ9OW Iq9ow +2229374 IT9MEW Marco +2229375 IT9VXS It9vxs +2229376 IT9BGY Salvatore +2229377 IW9FDD VITO +2229378 IT9DIX IT9DIX +2229379 IW9EDP Enzo +2229380 IT9NJA Claudio +2229381 IT9IZC ANDREA +2229382 IT9GXT Giovanni +2229383 IT9CUA Simone +2229384 IT9WMB RENZO +2229385 IT9CNP Antonino +2229386 IW9GYK Franco +2229387 IT9GBT MASSIMO +2229388 IT9SJY ALESSANDRO +2229389 IT9OER Giancarlo +2229390 IT9XSX Paolo +2229391 IT9AZU Elio +2229392 IT9GBL Mimmo +2229393 IT9DPY Savio +2229394 IT9HXN GAETANO +2229395 IW9EUF FABIO +2229396 IT9UMH WENDAFACE +2229397 IT9HMB Mimmo +2229398 IW9HMB Mimmo +2229399 IT9HTV Gabriele +2229400 IT9DRG Marcello +2229401 IH9YMC Raffaele +2229402 IT9CKO Gabriele +2229403 IT9COG Peppino +2229404 IT9PKO Giovanni +2229405 IT9LIZ Pietro +2229406 IW9BHQ NINO +2229407 IT9HZO IT9HZO +2229408 IT9QPQ Francesco +2229409 IT9DQC Vincenzo +2229410 IT9GZY LORENZO +2229411 IT9BEC Carmelo +2229412 IW9FCW Salvo +2229413 IT9YTC Sebastiano +2229414 IT9DEA Salvatore +2229415 IT9DEH GUGLIELMO +2229416 ID9HFU Francesco +2229417 IT9HVU CALKALOS +2229418 IT9GUF Carlo +2229419 IT9HOV Tonino67 +2229420 IT9ICZ Ruger +2229421 IW9HRA IW9HRA +2229422 IT9LED CALOGERO +2229423 IT9DWF Domenico +2229424 IW9HMQ Maurizio +2229425 IT9IDG GIUSEPPE +2229426 IT9ICT GIUSEPPE +2229427 IT9ICJ Serena +2229428 IT9ICG Luca +2229429 IT9DGS ROSARIO +2229430 IT9IBQ Gianpiero +2229431 IT9SUQ Salvo +2229432 IT9IDH GIUSEPPE +2229433 IT9DBF It9dbf +2229434 IT9IDW Giuseppe +2229435 IT9NAN GIUSEPPE +2229436 IT9IDR MasterChef +2229437 IT9CQN Gino +2229438 IW9CHX Filippo +2229439 IT9VPC Enzo +2229440 IT9BIJ Corrado +2229441 IT9BFD Vincenzo +2229442 IT9GHB Giovanni +2229443 IT9BRY Amerigo +2229444 IT9AJI Max +2229445 IT9HQH IT9HQH +2229446 IT9GND Giuseppe +2229447 IT9ICN PAOLO +2229448 IT9DNM PASQUALINO +2229449 IT9MRB Vincenzo +2229450 IT9ICR It9icr 2260001 YO5DSG Denis 2261001 YO3GTS Dan 2262001 YO2LOJ Marius @@ -25337,6 +29505,29 @@ 2262043 YO2MIM Mihai 2262044 YO2MKG Karl 2262045 YO2MPL VOICU-CATALIN +2262046 YO2DNO Noni +2262047 YO2LLQ Dan +2262048 YO2OCP Mihai +2262049 YO2BHP NELU +2262050 YO2LEV Levente +2262051 YO2LBV EMIL +2262052 YO2ONH Imre +2262053 YO2LRI Carmen +2262054 YO2ACK David +2262055 YO2MBV Ion +2262056 YO2MPW Mio +2262057 YO2LC Yo2lc +2262058 YO2LFO Vali +2262059 YO2LQA Zoli +2262060 YO2CIP CIPRI +2262061 YO2BCS Ati +2262062 YO2MMJ Paul +2262063 YO2XYL Nely +2262064 YO2MPV MARIUS +2262065 YO2LWS Nelu +2262066 YO2LIG Ionut +2262067 YO2LYN Yo2lyn +2262068 YO2LSR ALEX 2263000 YO3KSR ASRR 2263001 YO3GTS Dan 2263002 YO3HJV Adrian @@ -25392,7 +29583,7 @@ 2263052 YO3IVB Adrian 2263053 YO3IVC Timofti 2263054 YO3IIR Eduard -2263055 YO3IBE Angelescu +2263055 YO3IBE Stefan 2263056 YO3NMF Maria-Nicole 2263057 YO3GEJ Mateiescu 2263058 YO3GSK Campeanu @@ -25439,7 +29630,7 @@ 2263099 YO3IEZ Radu 2263100 YO3CLD Paul 2263101 YO3ITI Miron -2263102 YO3FWL YO3FWL +2263102 YO3FWL Cristi 2263103 YO3VLX L 2263104 YO3VTH Vlad-Theodor 2263105 YO3IMM Mihai @@ -25455,7 +29646,23 @@ 2263115 YO3ICW George 2263116 YO3CAT YO3CAT 2263117 YO3AAU Dragos +2263118 YO3IPE ANDONE 2263119 YO3ABT Ciprian +2263120 YO6GEA Adrian +2263121 YO3INP YO3INP +2263122 YO3WSP Sorin +2263123 YO3DEL DAN +2263124 YO3GJC YO3GJC +2263125 YO3APJ ADRIAN +2263126 YO3IPB Marian +2263127 YO3ABJ Florin +2263128 YO3BCN Costin +2263130 YO3YLY Andreea +2263131 YO3DIU Marian +2263133 YO3CPR Mihai +2263134 YO3IMR Marius +2263135 YO3IJ Soyhan +2263136 YO3HPC Petru 2263333 YO3IFO CORNEL 2264001 YO6FWI Nagy 2264002 YO4FRF Constantin @@ -25480,6 +29687,13 @@ 2264021 YO4RKN Romeo 2264022 YO4RHY Yo4rhy 2264023 YO4RIH Fane +2264024 YO4FZV Laur +2264025 YO4ROV COSTEL +2264026 YO4FSV Vali +2264027 YO4XPF Florin +2264028 YO4SIA IONUT +2264029 YO4GKP Edy +2264030 YO4OMG OITA 2265000 YO5DSG Denis 2265001 YO2MPH Ciurdarescu 2265002 YO5ATL Attila @@ -25498,10 +29712,10 @@ 2265015 YO5OAI Lali 2265016 YO5PIV Attila 2265017 YO5OHH Radu -2265018 YO5KFG Cafe -2265019 YO5KDS Cafe +2265018 YO5KFG www.cafegratis.club +2265019 YO5KDS www.cafegratis.club 2265020 YO5PSE Gabi -2265021 YO5KDS Cafe +2265021 YO5KDS www.cafegratis.club 2265022 YO5OQZ Bandi 2265023 YO5ONJ Babi 2265024 YO5OQZ Bandi @@ -25513,7 +29727,7 @@ 2265030 YO5DSG Denis 2265031 YO5POP Alin 2265032 YO5PTS Tibi -2265033 YO6VEB Erno +2265033 YO5VEB Erno 2265034 YO5AAA Ovidiu 2265035 YO5HIN Iulian 2265036 YO5PSP Gabi @@ -25524,8 +29738,18 @@ 2265041 YO5BER George 2265042 YO5NDA DORA 2265043 YO5OSE Constantinus -2265044 YO5PBO Yo5pbo -2265555 YO5KFG Cafe +2265044 YO5PBO Laszlo +2265045 YO5OVY Nelu +2265046 YO5PVJ Andrei-Radu.Pop +2265047 YO5MDA Dumi +2265048 YO5OUT Dan +2265049 YO5MDA Dumi +2265050 YO5PCB Calin +2265051 YO5VEB Erno +2265052 YO5PCB Calin +2265053 YO5DSS STELIAN +2265054 YO5PCX PETER +2265555 YO5KFG www.cafegratis.club 2266001 YO6HDJ Iulian 2266002 YO6IKC Carla 2266003 YO6HEG Marosyi @@ -25535,6 +29759,7 @@ 2266007 YO6FWM Cosmin 2266008 YO6IOG Sergiu 2266009 YO6IOG Sergiu +2266010 YO6HDJ Iulian 2266011 YO6IBL Benta 2266012 YO6NAM Razvan 2266013 YO6HVU Amarica @@ -25589,12 +29814,12 @@ 2266062 YO6JBG Csilla 2266063 YO6ITR Cristi 2266064 YO6FPW Lucilius -2266065 YO6AL Alexandru +2266065 YO6AL Alex 2266066 YO6KEK PROMETHEUS 2266067 YO6ORO Vivi 2266068 YO6PTX MELI -2266069 YO6AL Sanyi -2266070 YO6AL Sanyi +2266069 YO6AL Alex +2266070 YO6AL Alex 2266071 YO6FPW Lucilius 2266072 YO6PVL Bogdan 2266073 YO6GBD ADI @@ -25609,6 +29834,14 @@ 2266082 YO6FOR Hunor 2266083 YO6KGS YO6KGS 2266084 YO6KGS YO6KGS +2266085 YO6KXQ C.S.R. +2266086 YO6CDC YO6CDC +2266087 YO6PNX SANDOR +2266088 YO6IBM Bogdan +2266089 YO6ITR Stan +2266090 YO6OAS MARIN +2266091 YO6IBO Domi +2266092 YO6IKG Codin 2267001 YO7GQZ Catalin 2267002 YO7GTM Adrian 2267003 YO7IIY Florin @@ -25622,6 +29855,12 @@ 2267011 YO7HIJ Oprea 2267012 YO7GQZ Catalin 2267013 YO7MSJ OVIDIU +2267014 YO7HKR Adi +2267015 YO7GC Toma +2267016 YO7GDB Relu +2267017 YO7HKM Dana +2267018 YO7CW Miki +2267019 YO7HJM Marian 2268001 YO8TEH Izzy 2268002 YO8RCM Teodor 2268003 YO8TES Edy @@ -25666,11 +29905,20 @@ 2268042 YO8RZP Fanica 2268043 YO8RSN Bog 2268044 YO8SHK Dan +2268045 YO3OT Paul +2268046 YO8ESO Sergiu +2268047 YO8RSQ DORU +2268048 YO5DSG Denis +2268049 YO8YW Iulian +2268050 YO8CVY NICU +2268051 YO8RPU Marius +2268052 YO8STB Bogdan +2268053 YO8NUT YO8NUT 2269001 YO9ION Ionut 2269002 YO9ION Ionut 2269003 YO9MB Mitica 2269004 YO9MB Mitica -2269005 YO9IMR Marius +2269005 YO3IMR Marius 2269006 YO9IRB Irinel 2269007 YO9IRB Irinel 2269008 YO9IBC Edi @@ -25683,6 +29931,9 @@ 2269015 YO9HOW Edy 2269016 YO9HGP Mircea 2269017 YO9GWW ADRIAN +2269018 YO9HHH Alin +2269019 YO9HHH Alinbbc +2269020 YO9BNP BOGDAN 2280001 4U1ITU IARC 2281001 HB3YNV Cedric 2281002 HB3YNV Cedric @@ -25770,7 +30021,7 @@ 2281084 HB9FEP Patrick 2281085 HB9ADJ Charles 2281086 HB4FL AFVCR -2281087 HB9RAR Club +2281087 HB9RAR Radio 2281088 HB3YRS Boboss 2281089 HB9FRG Montalvao 2281090 HB9ULG Martial @@ -25846,7 +30097,7 @@ 2281160 HB9VD HB9VD 2281161 HB3YBG Thierry 2281162 HB9IAJ Ati -2281163 HB3YSD Jose-Antonio +2281163 HB3GYR Jose-Antonio 2281164 HB3YBO Nathanael 2281165 HB9S World 2281166 HB9DUW Tino @@ -25854,8 +30105,8 @@ 2281168 HB3YOE Fantuz 2281169 HB3YAP Pascal 2281170 HB9FDC Vitor -2281171 HB3YCE Emilie -2281172 HB3YSD JAB +2281171 HB9HBE Emilie +2281172 HB9GYR JAB 2281173 HB3YCY Loick 2281174 HB3YFZ Guy 2281175 HB9FXY Jan @@ -25885,8 +30136,23 @@ 2281199 HB9IAM Pierre 2281200 HB3XRN Samuel 2281201 HB9G Radio +2281202 HB9GIC Alexandre 2281203 HB9GUR Beruberu 2281204 HB9GVX Patrick +2281205 HB9GKZ Myrr +2281206 HB9RAR Radio +2281207 HB3MAS Stphane +2281208 HB9GXP Marc +2281209 HB9VCM RezaFF +2281210 HB3YCB Yves +2281211 HB9GYR HB9GYR +2281212 HB9GYM Keops +2281213 HB9HBY Loick +2281214 HB9HBZ Alexandre +2281215 HB9GYR HB9GYR +2281216 HB9HBE HB9HBE +2281217 HB9TWU Gregoire +2281218 HB9DSB Popov 2282001 HB9OOI Stephan 2282002 HB9BEI Bruno 2282003 HB9EZV Michel @@ -25920,7 +30186,10 @@ 2282031 HB9GSK HB9GSK 2282032 HB3XRF Ferdi 2282033 HB9COS URS +2282034 HB3YMM CHRISTOPHE 2282035 HB9FML Matthias +2282036 HB3YNP Phil +2282037 HB9FXW Francois 2283001 HB9DUU Christian 2283002 HB9DUU Christian 2283003 HB9DUU Christian @@ -26089,7 +30358,7 @@ 2283167 HB9GAS Andre 2283168 HB9GAA Roland 2283169 HB9DTV Bjoern -2283170 HB3YEB Markus +2283170 HB9HBL Markus 2283171 HB3YVC Ruedi 2283172 HB9DNF Georg 2283173 HB9FIW Regina @@ -26098,6 +30367,25 @@ 2283176 HB9PRH Heinz 2283177 HB9TTE Sam 2283178 HB9FZD Arnold +2283179 HB9GXK Godi +2283180 HB3YRX Matthias +2283181 HB3YBS Monty +2283182 HB9GHC Bruno +2283183 HB3YRU Mark +2283184 HB3YZD Pascal +2283185 HB9GZQ Peter +2283186 HB3XRE Peter +2283187 HB9OAD Gianpaolo +2283188 HB9BJL Christian +2283189 HB3XSY Christoph +2283190 HB9CZV Werner +2283191 HB3XSX Martin +2283192 HB3YWL Michael +2283193 HB9EWH Hansjoerg +2283194 HB9RNP Peter +2283195 HB9HBH Simon +2283196 HB9FEA Joaquim +2283197 HB9CWK Hans-Ulrich 2284001 HB9EMQ Andy 2284002 HB9EMQ Andy 2284003 HB9EMQ Andy @@ -26213,7 +30501,7 @@ 2284113 HB9COP Fritz 2284114 HB9NFB Clubstation 2284115 HB9FRQ German -2284116 HB9DLF Sergio +2284116 HB3YCS MARKUS 2284117 HB9SXD Daniel 2284118 HB9DFP Bruno 2284119 HB9ECH Dieter @@ -26285,6 +30573,36 @@ 2284185 HB9EBS Andreas 2284186 HB9TQP Martin 2284187 HB9EBX Angelo +2284188 HB9BLV Viktor +2284189 HB9SNC Rene +2284190 HB9GXA Susu +2284191 HB9GXV Adrian +2284192 HB3YUR Charless +2284193 HB9FRK Andi +2284194 HB3YPO Zsolt +2284195 HB9EDW Daniel +2284196 HB9CYX Fritz +2284197 HB9NCZ Roland +2284198 HB9ECS Charly +2284199 HB3YNT Andreas +2284200 HB9DIO HB9DIO +2284201 HB3YOS Stefan +2284202 HB9GXV Adi +2284203 HB9GXW Carlos +2284204 HB9GKH HB9GKH +2284205 HB9GXA Susu +2284206 HB9GZX Daniel +2284207 HB9HBC HB9HBC +2284208 HB9HBB Michael +2284209 HB9GSY Philipp +2284210 HB9TXZ Bernhard +2284211 HB3XTN Remo +2284212 HB9NCS Leopold +2284213 HB9FZQ Nicolas +2284214 HB3YHG Peter +2284215 HB3XTL Beatrice +2284216 HB9OMP Roland +2284217 HB9BZG Kurt 2285001 HB9CNT Paul 2285002 HB9CNT Paul 2285003 HB9CNT Paul @@ -26343,6 +30661,11 @@ 2285056 HB9GNI Thomas 2285057 HB9GSN Juerg 2285058 HB9RWF Heinz +2285059 HB3YLY Adrian +2285060 HB3XRG Raphael +2285061 HB9RTJ Robert +2285062 HB9ROP Juerg +2285064 HB9CTU Herbert 2286001 HB9BMC Robert 2286002 HB9CPY Peter 2286003 HB3YVK Luca @@ -26543,7 +30866,7 @@ 2286199 HB9DNU Karlheinz 2286200 HB9CXZ Luigi 2286201 HB9GWS Markus -2286202 HB3XPQ Ivan +2286202 HB9GZI Ivan 2286203 HB9FPR Ricky 2286204 HB3YVG Gaia 2286205 HB9GWZ Ivan @@ -26551,7 +30874,40 @@ 2286207 HB9DWL Leo 2286208 HB9OAB Franco 2286209 HB9GVN Dario -2286210 HB9FBK Via +2286210 HB9FBK Flavio +2286211 HB9DDW Roger +2286212 HB9PHA Bernardo +2286213 HB9OBD Luca +2286214 HB9GFW Marco +2286215 HB9GNW Urs +2286216 HB3YGD Dani +2286217 HB9SYO Fabiano +2286218 HB9FAL Steve +2286219 HB9GUD Christoph +2286220 HB3YVO Beat +2286221 HB9DDW Roger +2286222 HB3YCD Thomas +2286223 HB9TQQ Judith +2286224 HB9FEX Mirko +2286225 HB9AJM Ivo +2286226 HB9JBQ Manuel +2286227 HB9GZS Sergio +2286228 HB9GZI Ivan +2286229 HB3XSS Sam +2286230 HB9GZN Nicola +2286231 HB9GWM Martin +2286232 HB9GZT Tiz +2286233 HB9GZL Gabriele +2286234 HB9FIF Roger +2286235 HB9HCE Roland +2286236 HB9PUE Mauro +2286237 HB9FAB Patrick +2286238 HB3XST HB3XST +2286239 HB9GZP Patrick +2286240 HB9TXB Branko +2286241 HB9FBD Andrea +2286242 HB9PLW Peter +2286244 HB9EHU Fabian 2287001 HB9FPO Stefano 2287002 HB9HAN Roland 2287003 HB9FPO Stefano @@ -26584,6 +30940,9 @@ 2287030 HB3XPV Martha 2287031 HB3XRK Werner 2287032 HB9GKX Tobias +2287033 HB9GYA Mauro +2287034 HB9GNO Chrigi +2287035 HB9GPO Franco 2288001 HB3YEJ Andreas 2288002 HB9WOF Reto 2288003 HB9WOF Reto @@ -26693,7 +31052,7 @@ 2288109 HB9ETR Rob 2288110 HB9BUC Marcel 2288111 HB9MXU Urs -2288112 HB3YUI Roland +2288112 HB9GZY Roland 2288113 HB3YFY Renzo 2288114 HB9BXR Reto 2288115 HB9SEM Emil @@ -26710,7 +31069,7 @@ 2288126 HB9RMW Leander 2288127 HB9DNI Stefano 2288128 HB9WNM Paul -2288129 HB9DTK Caroppo +2288129 HB9DTK Luigi 2288130 HB9PZM Hanspeter 2288131 HB9TSO Rolf 2288132 HB9DC ZH-SEE @@ -26759,7 +31118,7 @@ 2288175 HB9GIN Christian 2288176 HB3YCM Domjullier 2288177 HB3YVB Rolf -2288178 HB3YDL Martin +2288178 HB9FIH Erich 2288179 HB3YGH Fabian 2288180 HB9PJT Peter 2288181 HB9IQY Dani @@ -26785,7 +31144,7 @@ 2288202 HB3YPI Silvio 2288203 HB9FGX Lukas 2288204 HB9EGA Marcin -2288205 HB3YUI Roland +2288205 HB9GZY Roland 2288206 HB9TQD Stefan 2288207 HB3YGT Rene 2288208 HB3YLG Lilian @@ -26807,7 +31166,7 @@ 2288224 HB9RLO Erhard 2288225 HB9DPC Heinz 2288226 HB9FDT HB9FDT -2288227 HB9FSE HB9FSE +2288227 HB9FSE Edy 2288228 HB9LFP Werner 2288229 HB3YMW Rolf 2288230 HB9GNC Ramon @@ -26856,6 +31215,43 @@ 2288273 HB9GXD HB9GXD 2288274 HB9MDP Walter 2288275 HB9JNX Thomas +2288276 HB9DSC FRANK +2288277 HB3YTX Stefan +2288278 HB9GVR Roberto +2288279 HB9FIY Christopher +2288280 HB9GXQ Manuela +2288281 HB3YVB Rolf +2288282 HB9AK SWISS-ARTG +2288283 HB9GKP Petru +2288284 HB9LAE Bruno +2288285 HB9JNA Giuseppe +2288286 HB9FON Milan +2288287 HB9ALR Willy +2288288 HB3XRV Rene +2288289 HB3YHM Roger +2288290 HB9CUZ Roland +2288291 HB9FLX Felix +2288292 HB9MTN Edi +2288293 HB9GZA Joe +2288294 HB9AHL Mofi +2288295 HB9GZA Joe +2288296 HB9PRQ Urs +2288297 HB9DOK Thomas +2288298 HB3XRV Rene +2288299 HB9WNN Thomas +2288300 HB9THY Hans +2288301 HB9RFU Andreas +2288302 HB9ZGL Bruno +2288303 HB3XTK Urs +2288304 HB9GUF Ernie +2288305 HB9REY Markus +2288306 HB9BRW Hans-Peter +2288307 HB3XTQ Marcel +2288308 HB9GZV Marcus +2288309 HB9GVF Fabian +2288310 HB3XTO Paul +2288311 HB9HBI Marco +2288312 HB3XUC Chris 2288424 HB9EPF Peter 2288542 HB9ANF Hans-Joerg 2288822 HB9SDB Rolf @@ -26889,9 +31285,9 @@ 2289026 HB9ZGZ Cyrill 2289027 HB9BEE Ernst 2289028 HB9TIO Harald -2289029 HB3YON Jan +2289029 HB9GWQ Jan 2289030 HB3YVZ Erwin -2289031 HB9SWR HB9SWR-1 +2289031 HB9SWR Werner 2289032 HB9KNY Christian 2289033 HB9DKG Thomas 2289034 HB9MTJ Walter @@ -26946,6 +31342,20 @@ 2289083 HB9TUT Michael 2289084 HB3YBF Patrick 2289085 HB9DWK Fiorello +2289086 HB9TRO Roland +2289087 HB9CVE Andy +2289088 HB9PLK Ueli +2289089 HB9ZAP Edwin +2289090 HB9EVD Jack +2289091 HB9ZGZ Cyrill +2289092 HB9GYB Patrick +2289093 HB9DKC Rudolf +2289094 HB9BEF Wilfried +2289095 HB3YJZ Markus +2289096 HB9DXB Sven +2289097 HB9HBF Beat +2289098 HB9DKC Ruedi +2289099 HB9ENE Michael 2301001 OK9DTZ David 2301002 OK3ZB Zdenek 2301003 OK1MX Milan @@ -27053,6 +31463,38 @@ 2301105 OK1ID Dan 2301106 OK1VCN Jiri 2301107 OK1JVK Frantisek +2301108 OK6AD Josef +2301109 OK1SOK Standa +2301110 OK2AWA Zdenek +2301111 OK5AJA Vojta +2301112 OK1HPX Petr +2301113 OK1SB Standa +2301114 OK1RIX Jiri +2301115 OK5KV Carloss +2301116 OK1DTE Daniel +2301117 OK4RM Jindra +2301118 OK1DNV Vaclav +2301119 OK1VIP Jirka +2301120 OK1PRD Prd +2301121 OK1NJI Jiri +2301122 OK1BOR Borys +2301123 OK1XQ Jiri +2301124 OK9WAN Martin +2301125 OK1HBP Mira +2301126 OK1VWK Vwk +2301127 OK1BNJ Tomas +2301128 OK2IHP Pavel +2301129 OK1UDA Ludek +2301130 OK1GEN Gen +2301131 OK2MDC Michal +2301132 OK1IBM Petr +2301133 OK4JIN Sobtik +2301134 OK1DWF Ok1dwf +2301135 OK1PPO Charlie +2301136 OK1SUN Tomas +2301137 OK1SGI Michal +2301138 OK1PT Pavel +2301139 OK1DRV Ruda 2302001 OK8APJ Torsten 2302002 OK1BLG Peter 2302003 OK1VHB Martin @@ -27093,6 +31535,19 @@ 2302038 OK1ACE Vaclav 2302039 OK1PZ Petr 2302040 OK5MVI Michal +2302041 OK1KUH Radioklub +2302042 OK1ZRD Rudolf +2302043 OK9HTA Honza +2302044 OK3BR Bohumil +2302045 OK1SH Standa +2302046 OK1HRD ROMAN +2302047 OK1WN Standa +2302048 OK1LST Libor +2302049 OK1KPI Klub +2302050 OK1MQA Radek +2302051 OK1TRJ Michal +2302052 OK1LB Libor +2302053 OK1NMJ Jiri 2303001 OK1UDI Bedrich 2303002 OK1SLA Vaclav 2303003 OK1IKP Karel @@ -27116,6 +31571,17 @@ 2303021 OK1VVT Vasek 2303022 OK1SDR Tonda 2303023 OK3RS OK3RS +2303024 OK1MPO OK1MPO +2303025 OK1TZL Martin +2303026 OK1XPA Petr +2303027 OK1XFM Martin +2303028 OK1TPC Pepa +2303029 OK1VKQ Vaclav +2303030 OK1GAL Fabien +2303031 OK5DM Majk +2303032 OK4GAN OK4GAN +2303033 OK4DAN Dan +2303034 OK5KDN Nikola 2304001 OK1ZOO Martin 2304002 OK7US Miroslav 2304003 OK1TPG Vladimir @@ -27134,7 +31600,7 @@ 2304016 OK1OPS Andrej 2304017 OK1IWA Ales 2304018 OK1TEB Pavel -2304020 OK1LPO Libor +2304020 OK4AM Libor 2304021 OK3UQ Mra 2304022 OK2JDI Divis 2304023 OK5MF Michal @@ -27145,6 +31611,24 @@ 2304028 OK1JRZ Ruda 2304029 OK1FUN Jan 2304030 OK1JIL Mirek +2304031 OK1IWA Ales +2304032 OK1JHR Jaroslav +2304033 OK1MRM Miroslav +2304034 OK1FFI Rudolf +2304035 OK1IF OK1IF +2304036 OK1USP Josef +2304037 OK1FHG PETR +2304038 OK7OKT TommyKratochvil +2304039 OK1DU Libor +2304040 OK1MJS Mirek +2304041 OK2MTW Martin +2304042 OK1LK Stano +2304043 OK1KEP OK1KEP +2304044 OK1CPF OK1CPF +2304045 OK1UFI Josef +2304046 OK1FFF Jaroslav +2304047 OK1PCO OK1PCO +2304048 OK1XGH Pavel 2305001 OK1MSU Martin 2305002 OK2MIB Silvestr 2305003 OK1BF Roman @@ -27185,6 +31669,16 @@ 2305038 OK2WKW Karel 2305039 OK1JGC Jaroslav 2305040 OK1HDX Jan +2305041 OK2JIQ Jirka +2305042 OK8NWO David +2305043 OK2BPV Standa +2305044 OK2XSZ Zdenek +2305045 OK2PLM Martin +2305046 OK1PFE Petr +2305047 OK1NVJ Jirka +2305048 OK1MRU Tomas +2305049 OK9DAT Melisek +2305050 OK1PZK Petr 2306001 OK2BKR Jiri 2306002 OK4PS Pavel 2306003 OK2MKM Marcel @@ -27256,7 +31750,21 @@ 2306070 OK2HOL Niki 2306071 OK2HH Jakub 2306072 OK9TRZ Tomas +2306073 OK5KO Kobla 2306074 OK9TMZ OK9TMZ +2306075 OK2FBJ MIROSLAV +2306076 OK4KOP David +2306077 OK2SDE Petr +2306078 OK9DTZ David +2306079 OK2USF Franta +2306080 OK2MSH Marian +2306081 OK2PAV PAVel +2306082 OK9DAL Tomas +2306083 OK2BBV Mirek +2306084 OK2JRQ Jaroslav +2306085 OK2TRN Bleky +2306086 OK2CTS Jarek +2306087 OK2YM Marian 2307001 OK2MZS Zdenek 2307002 OK6CX Ivo 2307003 OK2JKD Dalibor @@ -27292,6 +31800,28 @@ 2307033 OK2SRO Honza 2307034 OK2BOZ Ondrej 2307035 OK2PA Janus +2307036 OK2ZK Zbynek +2307037 OK2UKX Jarda +2307038 OK3JS Jiri +2307039 OK2JGI Jan +2307040 OK7JK Jan +2307041 OK2VWH Tomas +2307042 OK2IPZ Petr +2307043 OK2MCT Miroslav +2307044 OK2VWH Tomas +2307045 OK2XGD Kamil +2307046 OK2YLQ Martina +2307047 OK2MOP Pavel +2307048 OK2XY Pavel +2307049 OK2SR Ruda +2307050 OK2TSV Ladislav +2307051 OK2TSG Kuba +2307052 OK2VMW Eva +2307053 OK2VMV Jarek +2307054 OK2MEB EDUARD +2307055 OK2XLH Jiri +2307056 OK2IPW Adam +2307057 OK2KFM Vlastik 2311001 OM1ATS Daniel 2311002 OM1AEG Anton 2311003 OM1EI Marian @@ -27318,6 +31848,10 @@ 2311024 OM1CI Jozef 2311025 OM1ARI Marcel 2311026 OM6AND Oliver +2311027 OM1AFX Marian +2311028 OM8ARD Dodo +2311029 OM1AMB Michal +2311030 OM1AKM Matus 2312001 OM4TN Rastislav 2312002 OM4AVG Mojmir 2312003 OM4AJO Juraj @@ -27340,6 +31874,12 @@ 2312020 OM3WUC Ppsota 2312021 OM4EX Ondrej 2312022 OM2MO Miroslav +2312023 OM5AZS Pet +2312024 OM2JU JanU +2312025 OM4DP Dan +2312026 OM3TSR Marian +2312027 OM2AMS Marek +2312028 OM3CLT Bmb 2313001 OM6AXE Jan 2313002 OM6ADQ Erik 2313003 OM7TW Dusan @@ -27382,6 +31922,21 @@ 2313040 OM6ASP Peter 2313041 OM7ATD Tibor 2313042 OM7ASA OM7ASA +2313043 OM6AA Rasto +2313044 OM6AMR Michal +2313045 OM6CM Fero +2313046 OM7AJL Jin +2313047 OM7AFH Frantisek +2313048 OM6LP Lojzo +2313049 OM7AVC Vilo +2313050 OM7JN Jarda +2313051 OM7AHL LAHU +2313052 OM6ABR Ivan +2313053 OM7ATC Tomas +2313054 OM6ADK OM6ADK +2313055 OM7ATD Ing. +2313056 OM7ADN Domco +2313057 OM7TEK Tekk 2314001 OM8AIB Stefan 2314002 OM8AKX Peter 2314003 OM8KT Martin @@ -27422,6 +31977,16 @@ 2314038 OM6LL OM6LL 2314039 OM8AIK Michal 2314040 OM0AWW Tom +2314041 OM0XA Duro +2314042 OM0HGP Milan +2314043 OM0AJA Jozef +2314044 OM0AYZ Jaro +2314045 OM0AGP Peter +2314046 OM0WT OM0WT +2314047 OM8AMV MarekV +2314048 OM0ATE Marcel +2314049 OM0AAJ Jan +2314112 OM3KLL EmComm 2320010 OE1XAR Datengateway 2321001 OE1KBC Kurt 2321002 OE1KBC Kurt @@ -27485,7 +32050,7 @@ 2321060 OE1KLM Herwig 2321061 OE1ROB Rupert 2321062 OE1JXS OE1JXs -2321063 OE1JTB OE1JTB +2321063 OE1JTB Alex 2321064 OE1VHS OE1VHS 2321065 OE1OEA Andreas 2321066 OE1VGC Gregor @@ -27606,10 +32171,50 @@ 2321181 OE1NMA Markus 2321182 OE1MKA Manfred 2321183 OE1HLB Hans +2321184 OE1JAH Herbert +2321185 OE1RFU Fritz +2321186 OE1GXK Gerhard +2321187 OE1ARX Alexander +2321188 OE1RQH Roman +2321189 OE1MCA Martin +2321190 OE1LON Roland +2321191 OE1WKC Wolfgang +2321192 OE1MOO Oliver +2321193 OE1HLT Thadeus +2321194 OE1ABV Armin +2321195 OE1UKB Kurt +2321196 OE1KDW Karl +2321197 OE1GLB Gottfried +2321198 OE1MQT Thomas +2321199 OE1HGA Gerald 2321200 OE1XVC Clubstation 2321201 OE1NDB Norbert +2321202 OE1AKA Markus +2321203 OE1PFC Franz +2321204 OE1CLC Richard 2321205 OE1NDB Norbert +2321206 OE1CSR Christopher +2321207 OE1IAH Arnold +2321208 OE1EQW Enrico +2321209 OE1NHK Rainer +2321210 OE1IAH Arnold 2321211 OE1KEB Karl +2321212 OE1TOA Oezcan +2321213 OE1GOA Gregor +2321214 OE1LYA Martin +2321215 OE1KCR Chris +2321216 OE1DZW Dietmar +2321217 OE1EWA WOOlfi +2321218 OE1EAX Bert +2321219 OE1PIM Markus +2321220 OE1GXK Gerhard +2321221 OE1MSX Martin +2321222 OE1TWW Thorsten +2321223 OE1LYK Oliver +2321224 OE1TKW Helmut +2321225 OE1SSB Hans +2321226 OE1DZW Dietmar +2321227 OE1SCS Stefan 2321301 OE1BAD Andy 2321302 OE1PNS Peter 2321303 OE1MCU Michael @@ -27644,6 +32249,25 @@ 2322025 OE2TXO Tom 2322026 OE2XAL Klubstation 2322027 OE2ANP Andreas +2322028 OE2KTO Tadej +2322029 OE2KTO Tadej +2322030 OE2GXL Gilbert +2322031 OE2AYM Alois +2322032 OE2XOD Alois +2322033 OE2ROL Roland +2322034 OE2KGO Gerhard +2322035 OE2EZM Robert +2322036 OE2TST Torsten +2322037 OE2JKN Hannes +2322038 OE2RXN Wilfried +2322039 OE2FGP Florian +2322040 OE2HIT Charly +2322041 OE2TXO Tom +2322042 OE2YYL Andrea +2322043 OE2CRP Markus +2322044 OE2FEP Fridolin +2322045 OE2FAO Arno +2322046 OE2CRT Archie 2323001 OE3OLU Robert 2323002 OE3OLU Robert 2323003 OE3RGB Rainer @@ -27831,7 +32455,7 @@ 2323185 OE3MEN Werner 2323186 OE3HGB Heinz 2323187 OE3ZJC Mauro -2323188 OE3JTB Josef +2323188 OE3JTB Alex 2323189 OE3OZA Werner 2323190 OE3DZW Dietmar 2323191 OE3RFA Rudolf @@ -27888,6 +32512,58 @@ 2323242 OE3WXW Wolfgang 2323243 OE3GBC Guido 2323244 OE3IFB Florian +2323245 OE3OPA Peter +2323246 OE3CQB Christian +2323247 OE3AGH Andreas +2323248 OE3CVR Cornelius +2323249 OE3CQS Christian +2323250 OE3YJM Julia +2323251 OE3VPA Mario +2323252 OE3YHC Nadine +2323253 OE3MVW Markus +2323254 OE3WYC Willy +2323255 OE3CQJ Chris +2323256 OE3APM Andi +2323257 OE3KPC Christian +2323258 OE3GWW Guenter +2323259 OE3TFL Thomas +2323260 OE3JKA Hans +2323261 OE3KAI Erwin +2323262 OE3RPR Robert +2323263 OE3BCB Christoph +2323264 OE3LKB Helmut +2323265 OE3ABA Alfred +2323266 OE3PCB Christian +2323267 OE3DOS Robert +2323268 OE3GWC Gerhard +2323269 OE3AGH Andreas +2323270 OE3WRB Wolfgang +2323271 OE3AJA Jo +2323272 OE3YMB Jutta +2323273 OE3DOS DOS +2323274 OE3MES Martin +2323275 OE3MLC Ludwig +2323276 OE3BRU Rupert +2323277 OE3DES Stefan +2323278 OE3SAD Daniel +2323279 OE3CHA Harald +2323280 OE3ODF Patrik +2323281 OE3HAU Herwig +2323282 OE3GEW Ewald +2323283 OE3KNS Klaus +2323284 OE3CDA Christian +2323285 OE3JSI Hans +2323286 OE3HCA Wolfgang +2323287 OE3WWC Werner +2323288 OE3RZT Robert +2323289 OE3URW Helmut +2323290 OE3MYR Maex +2323291 OE3NHW Hans +2323292 OE3AEA Johann +2323293 OE3RQF Roman +2323294 OE3XRC AMRS +2323295 OE3KDC Bernhard +2323296 OE3UZA Guenter 2323300 OE3DNA Andreas 2323311 OE3EMC Martin 2323312 OE3YSC Marion @@ -27951,6 +32627,13 @@ 2324027 OE4SZS Stefan 2324028 OE4VIE Jo 2324029 OE4GZZ Goran +2324030 OE4KZU Karl +2324031 OE4CHZ Christian +2324032 OE4ENU Ewald +2324033 OE4GTU Gerhard +2324034 OE4RUM Philipp +2324035 OE4VNA Arne +2324036 OE4AZU Petr 2324101 OE4KMU Klaus 2324102 OE4RLC Rainer 2324103 OE4MUB Martin @@ -28059,9 +32742,58 @@ 2325095 OE5FRL Raphael 2325096 OE5MKL Michael 2325097 OE5GJN Gerald +2325098 OE5MKE Mario +2325099 OE5ASO Alex +2325100 OE5CGL Hermann 2325101 OE5GOL Robert +2325102 OE5ELL Joe +2325103 OE5LOH Lothar +2325104 OE5SLS Stefan +2325105 OE5HNF Grey +2325106 OE5AGM Andreas +2325107 OE5KNE Koni +2325108 OE5ADO Alexander +2325109 OE5JWO Josef +2325110 OE5MUT Martin +2325111 OE5JSM Hans +2325112 OE5BAN Andreas +2325113 OE5DOM Michael +2325114 OE5SZN Siegfried +2325115 OE5KCO Chris +2325116 OE5HRN Walter +2325117 OE5HCE Christian +2325118 OE5ESO Sigi +2325119 OE5SZN Sigi +2325120 OE5HAR Hermann +2325121 OE5VBM Martin +2325122 OE5MBP Manfred +2325123 OE5ANN MSc +2325124 OE5SLE Sabine +2325125 OE5CSL Norbert +2325126 OE5RPP Peter +2325127 OE5OZL OTTO +2325128 OE5JJC Joerg +2325129 OE5HRN Walter +2325130 OE5ITH Daniel +2325131 OE5FME Herbert +2325132 OE5PWO Wolfgang +2325133 OE5OOA Florian +2325134 OE5RSE Richard +2325135 OE5NIP Juergen +2325136 OE5AGP Alexandra +2325137 OE5AOO Michael +2325138 OE5IUM Guenther +2325139 OE5EIR Philipp 2325140 OE5BWN Wolfgang 2325141 OE5ERN Erwin +2325142 OE5ANO Franz +2325143 OE5FSQ Franz +2325144 OE5YAP Andrea +2325145 OE5SKE Stefan +2325146 OE5ANL Hans +2325147 OE5HPM Hannes +2325148 OE5PJN Philipp +2325149 OE5LEP Heinz 2325151 OE5UNO Johannes 2325152 OE5UNO Johannes 2325153 OE5DRO Rene @@ -28222,7 +32954,44 @@ 2326149 OE6UIG Martin 2326150 OE6BYD Simone 2326151 OE6HOE Horst +2326152 OE6RNT Andreas +2326153 OE6KGD Karl +2326154 OE6WIG Franz +2326155 OE6ARD Alfred +2326156 OE6RCD Roland +2326157 OE6JTD Josef +2326158 OE6KVG Folker +2326159 OE6GBG Gerald +2326160 OE6PJG Paul +2326161 OE6FEG Matthew +2326162 OE6WMG Manfred +2326163 OE6JGE Joerg +2326164 OE6HHE Helmut +2326165 OE6GUE Guenther +2326166 OE6KUD Klaus +2326167 OE6ARG Arnulf +2326168 OE6WNG Werner +2326169 OE6BZD Nico +2326170 OE6UPG Johann +2326171 OE6BKG Klaus +2326172 OE6MMD Ron +2326173 OE6TTF Eric +2326174 OE6JGE Joerg +2326175 OE6CGD Gerhard +2326176 OE6SPY Spyro +2326177 OE6RZE Richard +2326178 OE6MDW Manfred +2326179 OE6MEH Markus +2326180 OE6FEF Florian 2326181 OE6DRG Gerhard +2326182 OE6SLG Lothar +2326183 OE6JDG Josef +2326184 OE6UXS OE6UXS +2326185 OE6XRX Realfunk +2326186 OE6BKQ Bernhard +2326187 OE6JMF Joerg +2326188 OE6AGD Rupert +2326189 OE6ADE Andy 2326201 OE6OLD Heimo 2326221 OE6KWD Wolfgang 2326222 OE6JFG Franz @@ -28288,7 +33057,7 @@ 2327042 OE7JRT Josef 2327043 OE7XWI Clubstation 2327044 OE7MWH Michael -2327045 OE7TTT Michael +2327045 OE7TTT Mike 2327046 OE7XWI Markus 2327047 OE7YHI Beate 2327048 OE7BRT Rainer @@ -28401,6 +33170,25 @@ 2327155 OE7XKJ ADL707 2327156 OE7GMT Guenter 2327157 OE7NHT Niki +2327158 OE7ECH Christian +2327159 OE7AYH Alex +2327160 OE7BFT Franco +2327161 OE7UTI Ulf +2327162 OE7SPI Peter +2327163 OE7SBH Stefan +2327164 OE7GWT Guenther +2327165 OE7BOE Boerdi +2327166 OE7CAI Chris +2327167 OE7HKJ Heinz +2327168 OE7AAT Alfred +2327169 OE7FWJ Franz +2327170 OE7KIR Markus +2327171 OE7SAE Alexander +2327172 OE7TSJ Stefan +2327173 OE7LKT LUKE +2327174 OE7AZO Alexander +2327175 OE7GKH Kathrin +2327176 OE7CSM Martin 2327232 OE7OST Thomas 2328001 OE8AGK Alfred 2328002 OE8DDK David @@ -28466,7 +33254,26 @@ 2328063 OE8HSF Hermann 2328064 OE8FSE Franz 2328065 OE8IBK Bernhard +2328066 OE8NDR Fritz +2328067 OE8APO Peter +2328068 OE8CKK Chris +2328069 OE8MFQ Martin +2328070 OE8ARK Gerhard +2328071 OE8ASR Andre +2328072 OE8DUT Boris +2328073 OE8NWQ Hannes +2328074 OE8PJQ Johann +2328075 OE8WV Leon +2328076 OE8AED Thomas +2328077 OE8ADF Werner +2328078 OE8ACQ Luca +2328079 OE8ANK Raimund +2328080 OE8JPQ Philipp 2328081 OE8KTR Gerhard +2328082 OE8MVG Michael +2328083 OE8JWK Sepp +2328084 OE8ACD StefanJB +2328085 OE8AEE Helmut 2328212 OE8LBK Helmut 2328502 OE8WLK Wolf 2328503 OE8BCK Christof @@ -28540,7 +33347,7 @@ 2329045 OE9CBV Christoph 2329046 OE9IMJ Carsten 2329047 OE9EZI Ernesto -2329048 OE9TEV OE9TEV +2329048 OE9TEV Tobias 2329049 OE9PBV OE9PBV 2329050 OE9KBV Matthias 2329051 OE9STG Martin @@ -28590,6 +33397,18 @@ 2329095 OE9SVJ Sven 2329096 OE9ERC Erich 2329097 OE9GWV Guntram +2329098 OE9GZH Helmut +2329099 OE9XXV Dieter +2329100 OE9VVV Dieter +2329101 OE9DBI Bianca +2329102 OE9DAI Alex +2329103 OE9OBV IGOR +2329104 OE9ASJ Murat +2329105 OE9EFJ Edwin +2329106 OE9BRH Rainer +2329107 OE9MHV Mario +2329108 OE9MSI Matthias +2329109 OE9CPV Christoph 2341001 G0RDI Iain 2341002 G4NEY Jonathan 2341003 M6NAE Neil @@ -28669,7 +33488,7 @@ 2341077 M0EUY Tony 2341078 G0DHL Martin 2341079 M0TEF Alistair -2341080 M6TCI STEVE +2341080 2E0TDN Steve 2341081 G6UYG Stephen 2341082 2E0ZRT TIM 2341083 M3VZP Salvatore @@ -28970,8 +33789,8 @@ 2341379 M3BMI Diane 2341380 G7UXW Kevin 2341381 M0MTA Ted -2341382 G7MSC Noddy -2341383 G4JUH Podge +2341382 G7MSC Barry +2341383 G4JUH Roger 2341384 2E0SYN Matthew 2341385 M0NEY Dave 2341386 2E0GDM Gez @@ -29194,7 +34013,7 @@ 2341609 M0PLY Ron 2341610 M0VGA David 2341611 G4FAP Roger -2341612 2E0YSB Paul +2341612 M0PYB Paul 2341613 G3UMV Paul 2341614 G4LDD Peter 2341615 G4LZV Keith @@ -29284,7 +34103,6 @@ 2341699 G7ODT Badger 2341700 G0WYA Nick 2341701 G0SCF G0SCF -2341702 G4YUV Heinz 2341703 G8HKN Roger 2341704 2E0GNC Brian 2341705 M0TTS Kim @@ -29345,9 +34163,9 @@ 2341760 2E0CRU Redders 2341761 M0VYN Martin 2341762 2E0FAQ Gaz1969uk -2341763 G7OKI G7OKI-Wayne +2341763 G7OKI Wayne 2341764 G1PMR Paul -2341765 M6KKO Terry +2341765 2E0KKO Terry 2341766 M6PZW Mark 2341767 G7NRH Brett 2341768 G7EZH Paul @@ -29442,6 +34260,8 @@ 2341857 M0AUV Bigphil69 2341858 2E0KIL Kermitkkills 2341859 M0MVB Steve +2341860 M6YRA Peter +2341861 M0APC M0APC 2341862 2E0JLC Chris 2341863 G7LMF Graham 2341864 2E0FNQ Jmason1 @@ -29527,7 +34347,7 @@ 2341944 2E0SXR Daz 2341945 G0VIQ Eugene 2341946 G8VZZ Pat -2341947 2E0JSK WoW +2341947 M0PDA Paul 2341948 2E0DOZ Dorianlogan 2341949 G6AOH Richard 2341950 2E0SLX John @@ -29681,7 +34501,7 @@ 2342098 G0UON Jim 2342099 G1FJH Paul 2342100 2E0PSD Alchamist -2342101 M3HSY Topman1969 +2342101 M3HSY Gary 2342102 M3OLG Jennie 2342103 2E0JZA Jez 2342104 G8KUW Steve @@ -29904,13 +34724,13 @@ 2342321 M1VPN M1VPN 2342322 G6COB John 2342323 G7PZQ Phillip -2342324 G4YKE Villagething +2342324 G4YKE Keith 2342325 M3GTI Ken 2342326 2E0DEM Craig 2342327 G7NPW Dominic 2342328 G1LVH Speedy-Diesel 2342329 G1BQQ John -2342330 M6JXK John +2342330 2E0EXV John 2342331 G0NMY Mark 2342332 M3BDL Stephen 2342333 G8NSD Frank @@ -29940,7 +34760,7 @@ 2342357 G7PEB John 2342358 M6AOJ JOHN 2342359 G0VQH Jennyb -2342360 M6AXK Ian +2342360 2E0IWS Ian 2342361 M6NYY Ironhead76 2342362 M6VWE Chris 2342363 2E0DWQ Kristopher @@ -30014,7 +34834,7 @@ 2342431 G7VIE John 2342432 M6NCX Nick 2342433 M0DDM Del -2342434 M3PAJ M3PAJ +2342434 2E0PUK Pete 2342435 G1OAH DAVID 2342436 GB5ULA SULA 2342437 M0MRP Matt @@ -30127,7 +34947,7 @@ 2342544 M0MLY M0MLY 2342545 G8MFI Steve 2342546 2E0MRZ Jab -2342547 M0KYW MF +2342547 M0KYW Manuel 2342548 2E0SIB Darren 2342549 2E0DZT John 2342550 M5DZH Jon @@ -30148,7 +34968,7 @@ 2342565 M3UNI Djneilb 2342566 M0REV Jim 2342567 G6OUA Bob -2342568 G7KDZ Beatles +2342568 G7KDZ Joe 2342569 2E0CFY Crow 2342570 M6UKW Jerry 2342571 M0ECB KEN @@ -30171,7 +34991,7 @@ 2342588 G1FGB Colin 2342589 G7VRI Jon 2342590 G2DGB George -2342591 M6TRW Tractor +2342591 M6TRW Tom 2342592 G0BGD CJ 2342593 G4CKS DAVID 2342594 G0TNC G0TNC @@ -30393,7 +35213,7 @@ 2342810 G7PAJ Kenneth 2342811 G1OXD Simonand 2342812 M6HWR AWOL -2342813 M0TTL Hullblinds +2342813 M0TTL Andy 2342814 G3UQW Alantheball 2342815 M0XBS Bruce 2342816 2E0TVM Tom @@ -30405,7 +35225,7 @@ 2342822 G0SLJ Peps 2342823 M3UYF Martin 2342824 2E0RXN Ronnie -2342825 M6MQN Josh +2342825 2E0IEW Josh 2342826 G0AOO Keith 2342827 G0GSJ DAVID 2342828 2E0CPP 2E0CPP @@ -30448,7 +35268,7 @@ 2342865 G4GBC Pete 2342866 2E0VVE Bulldog 2342867 M3KHE Nutty -2342868 M6IIL Liam +2342868 M0ILL Liam 2342869 M3YPR Pam 2342870 M0PCF M0pcf 2342871 M0TFG Dennis @@ -30507,7 +35327,7 @@ 2342924 G8WBI Tony 2342925 M0RTP Rael 2342926 G0CAS Neil -2342927 2E0OFP Dave +2342927 M0UPM Dave 2342928 2E0HUN Alison 2342929 G4ENC Peter 2342930 G8EUV Christine @@ -30774,7 +35594,7 @@ 2343191 M6SCN Stowpirate 2343192 2E0EZT Carl 2343193 G3ZKI Alan -2343194 2E0NJI Nick +2343194 M0NJI Nick 2343195 M6PUK Carltoncdx 2343196 M6IPK Terry 2343197 M1CXJ Des @@ -30838,7 +35658,7 @@ 2343255 G0PBF Jim 2343256 2E0MYE David 2343257 G0RVU 2 -2343258 M0VAF Jake +2343258 M0VAF Archie 2343259 G0OFC Dave 2343260 M6FZS Matt 2343261 G8IFF NigelGunn @@ -31025,7 +35845,7 @@ 2343442 G6YBV Steveh3 2343443 M1BRR PeteAJ 2343444 M6TZU BRUMMIE1959 -2343445 M6IGG Commandosqueak +2343445 2E0EXF Ashley 2343446 G7OBF Ted 2343447 G7RRF John 2343448 M6ANY Mitch @@ -31099,7 +35919,7 @@ 2343516 M3NVV Craig 2343517 M0GGW Taffy 2343518 G0GOO G0GOO -2343519 G4UKO Internix +2343519 G4UKO Nick 2343520 G4JNW Les 2343521 M6IYR Ian 2343522 2E0BHP Gary @@ -31108,7 +35928,7 @@ 2343525 M0OFX Phil 2343526 2E0WCC Pops 2343527 2E0KPD Paul -2343528 2E0SSI M6ISX +2343528 2E0SSI Steve 2343529 M6UJR Jon 2343530 2E0NHJ Nick 2343531 G4IRX Nick @@ -31182,9 +36002,9 @@ 2343599 G7PWS Chris 2343600 MB6IBO Simone 2343601 G6LEB Timlc -2343602 M6IZJ Snagsanger +2343602 2E0IZJ Snagsanger 2343603 G0FGX Bob -2343604 2E0BFN 2E0BFN +2343604 2E0BFN Wayne 2343605 G0ABV David 2343606 G4UIX UIX 2343607 G4WDR WDR @@ -31206,7 +36026,7 @@ 2343623 G7NGZ SMUDGE 2343624 2E0SJQ Steven 2343625 M6TTZ Steve -2343626 M6HVR MALCOLM +2343626 2E0EYY Malcolm 2343627 M6JUJ Bill 2343628 G7FHN Wally 2343629 G8YHS JohnH @@ -31258,7 +36078,7 @@ 2343675 M0IYA Clara 2343676 G1HUW Jim 2343677 M6VGB Bazzmo -2343678 G1YRV BikerRob +2343678 G1YRV Rob 2343679 M6JVS Chas 2343680 2E0JVD Jay 2343681 2E0GGQ Gary @@ -31274,7 +36094,7 @@ 2343691 G1HEH G1HEH 2343692 2E0EKX Andrew 2343693 2E0EPP Peter -2343694 M6PZT Rick +2343694 M0PZS Rick 2343695 G8XQQ John 2343696 M1HVJ ALAN 2343697 M6UKF Fin @@ -31347,7 +36167,7 @@ 2343764 M3TEC Alan 2343765 M5PYE EDDY 2343766 G0OOD Tim -2343767 2E0WWT Walls1 +2343767 2E0WWT Allan 2343768 M0DXV Mike 2343769 M3LEN Len 2343770 M6WGU GrazyH @@ -31397,7 +36217,7 @@ 2343814 G4RQK Andy 2343815 G8ZYR Phil 2343816 M6RLX Ralph -2343817 G8PJC JPMCD +2343817 G8PJC John 2343818 M6DHH Gary 2343819 M6OZR Ianp 2343820 2E1FHO 2E1FHO @@ -31423,7 +36243,7 @@ 2343840 GX6MHY Radio 2343841 G3NN Charley 2343842 G6HPE Paul -2343843 M6TBV Rog +2343843 M6TBV Roger 2343844 M6LSX Mr 2343845 M6IRO RIchard 2343846 M6JZM Dreammaster4 @@ -31569,7 +36389,7 @@ 2343986 M6HWN JOHN 2343987 G8WPL Don 2343988 M6MXH Moz -2343989 M6IFZ Banjax +2343989 M6IFZ Ian 2343990 G1FXE PgCam 2343991 G0TUP NIGE 2343992 M0TVX Ray @@ -31583,7 +36403,7 @@ 2344000 M0TLT Cmsxtlt 2344001 G0HEU G0HEU 2344002 M6WMS Mark -2344003 G7ENA G7ENA +2344003 G7ENA Daphne 2344004 M6XCX Tony 2344005 M0RET Rich 2344006 M0IKX Henry @@ -31614,7 +36434,7 @@ 2344031 M1DBB Peter 2344032 M0SWG Lorraine 2344033 M6OCN M6OCN-Angie -2344034 2E0SOR Shaun +2344034 M0SOR Shaun 2344035 M1AIF M1AIF-Dean 2344036 2E0EWH Mick 2344037 M5GHT George @@ -31707,7 +36527,7 @@ 2344124 M0DIT Josh 2344125 M0IEM M0IEM 2344126 M3CRJ Craig -2344127 M6RRF Tom +2344127 2E0MTA Tom 2344128 M0TZR M0TZR-PAUL 2344129 M3INO Gareth 2344130 G7VTU KEITH @@ -31850,7 +36670,7 @@ 2344267 G0COA Phil 2344268 M0MFC MIKE 2344269 M0RKA Morka -2344270 G1IKF Advanced-diver +2344270 G1IKF Roy 2344271 G4ZYH Mike 2344272 G0KEI DerekG0KEI 2344273 G4HDS PaulU @@ -31861,6 +36681,7 @@ 2344278 M6LUZ Sonic2 2344279 G6LJF Chalkie 2344280 G0DIH Paul +2344281 G7JHU Steveb 2344282 M0GYU M0GYU 2344283 M0ETA NivagSwerdna 2344284 M0HPD Paul @@ -31930,7 +36751,7 @@ 2344348 G6FDK Steve 2344349 M6JYS M6JYS 2344350 M6VUD Andrew -2344351 M6WZZ Andi +2344351 2E0GGX Andi 2344352 2E0LGP Polly 2344353 M0MCD Trev 2344354 G4JIX . @@ -31977,20 +36798,20 @@ 2344395 G7LRR Andy 2344396 M6IHN NGOOD 2344397 M1AZQ Turkuss -2344398 M0RWL Broncolane -2344399 M3LOX Daz +2344398 M0RWL Bob +2344399 2E0LXY Daz 2344400 M6IRB Redmire 2344401 M0HHP M0HHP 2344402 M6OUG Karl 2344403 M0DRP Wayne 2344404 G3ZNH BOB -2344405 M0CLN Vitty +2344405 2E0PST Rich 2344406 M6ISE M6ISE 2344407 2E0LFK Lenny 2344408 G7MMJ Steve 2344409 G3VMT Terry 2344410 2E0EOR DUNCAN -2344411 2E0XMD Robneill +2344411 2E0XMD Rob 2344412 G0UFP Chris 2344413 2E0SXH Caroline 2344414 M0DFD Steve @@ -32135,7 +36956,7 @@ 2344553 G0NIG Nidge 2344554 2E1WWD Edd 2344555 2E0JVK Keith -2344556 M6VMK Richard +2344556 2E0VMK Richard 2344557 M6PEU Graham 2344558 G6MAR Graham 2344559 M1EMI Deborah @@ -32211,7 +37032,7 @@ 2344629 M6GLS Dean 2344630 G1MPD Melvin 2344631 G8LYB Stephen -2344632 G7APD Stephen +2344632 G7APD Rugby 2344633 G1GTX Phil 2344634 2E0CIN Allan 2344635 M1GAS Peter @@ -32557,7 +37378,7 @@ 2344975 G6TVX Mike 2344976 G8ZQO Steve 2344977 M0YDC Dennis -2344978 2E0PQA Pablo +2344978 M0PQA Pablo 2344979 M6NWS Stephen 2344980 M0XBE Carl 2344981 2E0RSD Stephane @@ -32587,7 +37408,7 @@ 2345005 2E0HVM Paul 2345006 M3CBY Dave 2345007 2E0TEX Tex -2345008 M6PZT Rick +2345008 M0PZS Rick 2345009 2E0ZUA Ray 2345010 G8NDD Richard 2345011 M0TXK Mo @@ -32712,7 +37533,7 @@ 2345130 G1BJE Tony 2345131 M6QFG Fred 2345132 GB0APS GB0APS -2345133 M6IZJ Andrew +2345133 G4ZRL Harry 2345134 2E1TWB Tony 2345135 G7JAV Tony 2345136 G6OPY Roger @@ -32737,8 +37558,8 @@ 2345155 M0KFI Scott 2345156 G7IDJ Michael 2345157 G0VCL KEITH -2345158 M6UHV Stu -2345159 M6OGQ Peter +2345158 2E0UHV Stuart +2345159 2E0FPH Peter 2345160 M1CJZ Tonyr2 2345161 G4ICI Roger 2345162 G8FQW Phil @@ -32780,7 +37601,7 @@ 2345198 G0ODP Paul 2345199 M0KJV Neil 2345200 M6LSC Jake -2345201 2E0MSZ Mark +2345201 M0WMS Mark 2345202 M0NUX Julian 2345203 M6RKJ Richard 2345204 G4SSE Black @@ -32918,7 +37739,6 @@ 2345336 G6EXC Paul 2345337 2E1HAT Syd 2345338 M6NVY Michael -2345339 M6EBV DARRYL 2345340 G6JNZ Bill 2345341 G7HXS Frank 2345342 2E0VWB JPR @@ -32965,7 +37785,7 @@ 2345383 M0XPX Mat 2345384 G7BHQ Ray 2345385 2E0EVN Eve -2345386 2E0YRG Gary +2345386 M5YRG Gary 2345387 M6JXR Jenny 2345388 2E0BNS Andy 2345389 G1SQI John @@ -32989,7 +37809,7 @@ 2345407 M0XJL William 2345408 G3ZVN Graham 2345409 G3BXF Rugby -2345410 2E0KKQ William +2345410 M7GWH Jon 2345411 M6RKK Bob 2345412 G6HSW Les 2345413 M6OWG Dietmar @@ -33091,7 +37911,7 @@ 2345509 M6OUY Ian 2345510 M6TKN Jimmy 2345511 M6OYP Mick -2345512 M6OYQ Andy +2345512 2E0OYQ Andy 2345513 M6ATJ Martin 2345514 G1ITL David 2345515 G3ZJZ John @@ -33113,7 +37933,7 @@ 2345531 2E0NVD Richard 2345532 G7HPI Colin 2345533 M6XXO D -2345534 G0FVT G0FVT +2345534 G0FVT David 2345535 M0PDF Alien 2345536 M5CMO Brian 2345537 2E0EXT Fishingpete @@ -33204,7 +38024,7 @@ 2345622 M0XII Pat 2345623 G4EID Mark 2345624 2E0TFN Callum -2345625 M6NLLP Foresy +2345625 G0MEJ Nigel 2345626 M0JDS M0jds 2345627 M6KRQ Mally 2345628 M0JTD David @@ -33229,6 +38049,7 @@ 2345647 M0VVK Paul 2345648 M6YCE Ste 2345649 2E0CMS CSpice +2345650 2E0XMC MartC 2345651 2E1DGL Paul 2345652 M6YPM James 2345653 G8UGS Paul @@ -33245,27 +38066,36 @@ 2345664 M0YNY Neil 2345665 M0RXG Robbo 2345666 M6PNI Martin +2345667 M6VNE Matt +2345668 2E0LFB Leslie 2345669 M0XQX Tsvet 2345670 M0PEX David 2345671 M6PKQ PaulR 2345672 G6DGK Gavin 2345673 G4MQB MartinP 2345674 G0WPB Geoff +2345675 M0MLS M0MLS(Andy) 2345676 M0WBM ANDY 2345677 2E0CHP Mick +2345678 G0DXC Noz +2345679 G8NFZ Steve 2345680 M0GMU Paul +2345681 2E0OGZ Gary 2345682 2E0PYE Tim 2345683 G8XCH Stuart 2345684 M0OLS Andrew +2345685 G8ALS Mike 2345686 G4XEX Pete 2345687 M0PMH PAUL 2345688 2E0XPD Perry 2345689 G8URG Phil 2345690 G8BOS Bruce +2345691 M1DOX Nik 2345692 G7HXM Morris 2345693 G8XVV Philip 2345694 G0RMG Roy 2345695 M0VWD VANCE +2345696 2E0BFA John 2345697 G0LPO Edwin 2345698 M6PPF Steve 2345699 G7PXM Jon @@ -33278,15 +38108,29 @@ 2345706 GB2EPP GB2EPP 2345707 2E0VRO GRAHAM 2345708 2E0MHG Jamie +2345709 G7MFE Simon +2345710 G4RHD Mick +2345711 G8XRS Graham +2345712 2E0LVL Mike +2345713 M6KDU Andrea 2345714 G1XJM Rob 2345715 2E0SQB Slade +2345716 G0DCR Jim +2345717 G4VKC Dave +2345718 G0AZQ Audio +2345719 M6GYS IanM6 2345720 G6ZYZ Patrick +2345721 G4ZEJ Robert 2345722 M6PGO Jake +2345723 M6OUN Mike 2345724 MB6JP James 2345725 2E1HOL Dave 2345726 2E0MHQ Chris 2345727 M6YJB Julie +2345728 G4AIB Paul 2345729 M6OQU M6OQU +2345730 G0BUB Mick +2345731 M6PTW STEVE 2345732 G1TEX Tex 2345733 M0VLK Vaughn 2345734 M6JVU Les @@ -33294,12 +38138,19 @@ 2345736 G7ILG Ian 2345737 M0LDF Faz 2345738 MB6ML MB6ML +2345739 G8IXM ROY 2345740 M0JWB Jim +2345741 G6LJC Garry +2345742 G6OIH RICHARD +2345743 M0LMK Matt +2345744 M6OZV Michael 2345745 2E0LYN Andy +2345746 G7PKF Dean 2345747 G8JWT G8JWT 2345748 G8IXM ROY 2345749 2E0OZC Craig 2345750 G0JED Paddy +2345751 G4JES Mike 2345752 G4ZGE Terry 2345753 G8UDI Paul 2345754 M6KFX M6KFX @@ -33311,13 +38162,1797 @@ 2345760 M0ORY Ben 2345761 G7SOE Michael 2345762 G7IVR Clive_G7IVR +2345763 G4ORC Oldham 2345764 2E0YMW Mark 2345765 M0HDJ David +2345766 M6PQV Barry 2345767 M6NYT James -2345768 M3HKU Sam -2345769 M3HME EDDY +2345768 2E0HKU Sam +2345769 2E0HME Eddy 2345770 G7MHF Rob +2345771 2E0SPS John 2345772 M0FHN M0fhn +2345773 M6OSP Daniel +2345774 G4JBC JBC +2345775 G7UHE Geoff +2345776 G1SGZ Paul +2345777 G7BRZ Christopher +2345778 G6SBF Garry +2345779 G6DRG Terry +2345780 M6UUN Stefan +2345781 G4PZE Andy +2345782 G7CCL Steve +2345783 M0NWE Andrew +2345784 GB1NDS NDS +2345785 G7RUQ MothWingthane +2345786 G0TUO Mike +2345787 MB6IBS Maurice +2345788 G7UHN Andy +2345789 G1ETZ Chris +2345790 G0SZS Steve +2345791 M0VCS Victor +2345792 M3VMV Rod +2345793 2E0VMV Rod +2345794 G3RED Dave +2345795 M6OQQ Ricky +2345796 2E0EVQ Grahame +2345797 M6NRN Dave +2345798 2E0SBT Tom +2345799 2E0CIQ JulianC +2345800 G0KUX PK +2345801 M0SCO Simon +2345802 G6CW ARCON +2345803 M6VHR Philip +2345804 2E0IGP Jeremy +2345805 M6XPH Richard +2345806 2E0RZS Richard +2345807 M1XJC John +2345808 G1OVA Peter +2345809 M3RTX Dougie +2345810 M6HSH Michael +2345811 2E0EOZ Joe +2345812 M0ZDE Denkirk +2345813 2E0EYN Jimmy +2345814 G0RDG George +2345815 G8OMB Dave +2345816 G3YJE Peter +2345817 M6YJB Julie +2345818 M0UKF Francis +2345819 M6VNT Vincent +2345820 G7JMZ John +2345821 G8VBE Clive +2345822 G7RXX Spencer +2345823 G4KZY Paul +2345824 2E0VCP Colin +2345825 G4JDS Elanor +2345826 G7MZY Ian +2345827 M0IRO Jose +2345828 G1ORC OARC +2345829 G6SRS StARS +2345830 G7HIF Stuart +2345831 M0HUZ Cliff +2345832 M6NUN Peter +2345833 2E0RLT James +2345834 MB6IRX Nick +2345835 G6LFN Steve +2345836 M7CON Darren +2345837 G6RAQ Stuart +2345838 2E0VLL Lisa +2345839 M7SAV Shaun +2345840 G4LPP Phil +2345841 M0VPL Matthew +2345842 M6MKD Dorian +2345843 G7PNM Jetranger +2345844 G0HRS Ian +2345845 G8KZJ Ted +2345846 2E0EQN David +2345847 M6SDL John +2345848 M0MBP Colin +2345849 M0JKQ Christopher +2345850 G7VAB Matt +2345851 M6HKW Helen +2345852 G1AMS John +2345853 M7AFH Hasan +2345854 2E0FYR 2E0FYR +2345855 2E0EYN Jimmy +2345856 2E0MXD 2E0MXD +2345857 M0MFP Christopher +2345858 MB6IHZ Barney +2345859 MB7IHZ Barney +2345860 M7ABB Paul +2345861 2E0RBE Robert +2345862 M0DSO Robert +2345863 M7ELH ERROL +2345864 G1DZC G1DZC +2345865 2E0UBM Brad +2345866 G1OJL John +2345867 M0LCX Louis +2345868 2E0KWD KELLY +2345869 2E0XGX JOHN +2345870 2E0YCS Colm +2345871 G0EZY Terry +2345872 G8CDV Terry +2345873 G4MSA Dave +2345874 M7SJL Simon +2345875 M0VUB Shane +2345876 G8ZMH Kevin +2345877 M0RXW Reuben +2345878 G0AEN Stewart +2345879 M6OWP M6owp +2345880 M6DTW Tom +2345881 G8RLJ GRAHAMC +2345882 M0MNM Paul +2345883 G3TMD Ted +2345884 M6UBM Brad +2345885 2E0WDI Ian +2345886 G0WRS Warc +2345887 G0IIF John +2345888 M0YDA Derek +2345889 G8GMU Brian +2345890 GB1BNF BNF +2345891 G6TME G6TME +2345892 M3JGI Jeffrey +2345893 M7RIC Rich +2345894 2E0GBJ Brian +2345895 M6MQM MIKE +2345896 M0OET Brian +2345897 G6KV Kev +2345898 M7WJI IanH +2345899 M6ICC Roger +2345900 G1YJI PK +2345901 M0TAM Wolfbass +2345902 M7MIG Ian +2345903 G7GHA Rob +2345904 M6JHO John +2345905 G8AEN Peter +2345906 M3JFF Jim112 +2345907 2E0FDN Nigel +2345908 M1CNX Stephen +2345909 2E0KDI Lawrence. +2345910 G0OYR NOEL +2345911 M0HXE Richard +2345912 2E0XHX Matt +2345913 2E0EYI Ron +2345914 G7VAG Greg +2345915 G6TJS Mike +2345916 M7ABM C +2345917 2E1GVS 2E1GVS +2345918 2E0ICC Ian +2345919 M0ITB MARC +2345920 M3WLD Billy +2345921 M6UML Mark +2345922 GB3RN RNARS +2345923 M7MCJ Mark +2345924 M0HHG Gary +2345925 2E0HEF Dave +2345926 M6BOK Vic +2345927 M6NYU Darren +2345928 M7DLH DAVE +2345929 G1WYA Rick +2345930 MB6IHH David +2345931 M6FYH Colin +2345932 M6UKO Les +2345933 G6EFO Keith +2345934 2E0FBQ Robin +2345935 G0JZW Andy +2345936 G0AWY Roger +2345937 M6XUT Dean +2345938 M7PAB Dtazzz +2345939 2E0KDS Kingsly +2345940 M7ATS Tony +2345941 M0XCL M0XCL +2345942 2E0VBG Lezion +2345943 M7JAS Jas +2345944 M7STU Stu +2345945 M3EHJ Simon +2345946 M1CDQ Roger +2345947 G8PCB FRANK +2345948 2E0SRO Steve +2345949 M6MTR Paul +2345950 M7DSH Dave +2345951 M6LIY Howard +2345952 M7AND Andre +2345953 M7LES Leslie +2345954 M7ENP Darren +2345955 M7ABR Drew +2345956 M7AJG M7AJG +2345957 M6KZB Chris +2345958 M7WTF Dave +2345959 G1IBX Nigel +2345960 M0KRI Shabu +2345961 M7CLZ Paul +2345962 G4UTM Brian +2345963 M6AHW TONY +2345964 M7MWM Michael +2345965 2E0MRR Mark +2345966 M7BUS Giuseppe +2345967 M0JKE Jake +2345968 G8LTY Tony +2345969 2E0MRC David +2345970 M1MCL Martyn +2345971 M0PTB PeteS +2345972 2E0FSD Daniel +2345973 G4VVT Amoss +2345974 GX7ASF CARS +2345975 G4TDS Jim +2345976 2E0OWG Dietmar +2345977 M6PQT Richard +2345978 2E0FWK Nick +2345979 2E0FBZ Ian +2345980 G0OYR NOEL +2345981 G4HND Alan +2345982 2E0SCD John +2345983 M6KCC Kenneth +2345984 G0VQK Steve +2345985 M6IXG Pgretts +2345986 G0WSM Mike +2345987 M3GFO Nidge +2345988 2E0GAI George +2345989 G4EKM Steve +2345990 G6MRJ Derek +2345991 M7ONE M7ONE +2345992 M7DMR Simon +2345993 G3XIG Clive +2345994 2E0LHE Les +2345995 2E0JPY Keith +2345996 G7NFK Jon +2345997 M7MCJ Mark +2345998 M0MOI Mcafzap +2345999 G6HFI ChrisB +2346000 M7JZN John +2346001 M0IKV Phil +2346002 M0TCF Lin +2346003 M0TDY Andrew +2346004 G7BYN Dave +2346005 M6NML Kevin +2346006 M6YMZ Derek +2346007 M6FKW Alan +2346008 M0DVV David +2346009 G1RRG G1RRG +2346010 2E0DIS Al +2346011 G4VWF Reginald +2346012 M7EDL Edlongnz +2346013 2E1AXD Andy +2346014 2E0USM Joe +2346015 M6GFZ Gerry +2346016 2E0MNG Neal +2346017 G6CTX Malc +2346018 G1PJR Jeff +2346019 M7LES Leslie +2346020 M6VLH Duncan +2346021 2E0NCV Gary +2346022 G4NRF Harold +2346023 G0MTR Mid +2346024 M6GLZ Gerald +2346025 M7BUL Nick +2346026 G4ANS John +2346027 G0KSC Justin +2346028 M0IQL Haydn +2346029 M7DFM David +2346030 M0ONH Andrew +2346031 M0JFK Peterm0jfk +2346032 G0AWW David +2346033 G0DAM Bob +2346034 G7MZL Neil +2346035 G8WIO Alan +2346036 M3GCA Alan +2346037 G4MTQ Tony +2346038 G0POQ Dave +2346039 M0SLH Jim +2346040 G4AWP Richard +2346041 G7BXU Steven +2346042 M7ABP M7ABP +2346043 M6SXJ JJ +2346044 M7OOO Adam +2346045 M7DAZ Darren +2346046 G4SPE Gerry +2346047 G4GZS Keith +2346048 G4AUR Jeff +2346049 2E0EFA Mark +2346050 G4ZMF Peter +2346051 M0GUC Mark +2346052 M7TNY Tony +2346053 M0LXG Chris +2346054 M7AFI Nickie +2346055 G4AFI Andrew +2346056 M6OYM M6OYM +2346057 G0GCL G0GCL +2346058 M7OLY Orlando +2346059 2E0TYH Tim +2346060 2E0LIW Bill +2346061 M7WIS William +2346062 M3AOM Roger +2346063 M7LAX Dan +2346064 M7TLM Tim +2346065 2E0FDA Richard +2346066 G0CEG Pete +2346067 G4WQL Mike +2346068 G7AIS GEOF +2346069 M7FKU Simon +2346070 G4TKO John +2346071 M6KZB Chris +2346072 M0XDV Alessandro +2346073 M0JZX John +2346074 2E0RBK 2E0RBK +2346075 G8DZW Ron +2346076 2E1HWE Oscar +2346077 M7LPD Liam +2346078 G0VNP Bob +2346079 M6VNT Vincent +2346080 M0UDL Dudley +2346081 M6HTW Chris +2346082 M7CLT Craig +2346083 M0NCY Nick +2346084 M6XAY Aaron +2346085 M0XZS Andy +2346086 M6IDU Michael +2346087 M3OAN Rodney +2346088 M7SSE Sarah +2346089 M6JMO James +2346090 2E0KUK Andy +2346091 M0CLN Paul +2346092 2E0SHD James +2346093 M0SGG TONY +2346094 M0JFE John +2346095 G4KXG Ken +2346096 M0YYA Geoff +2346097 G7OCK Brian +2346098 G4PMS Phil. +2346099 M6JGJ John +2346100 M6UKZ Dave +2346101 G1BED Sparkgap +2346102 M3XYY Alan +2346103 G7FCT Rick +2346104 G4VII John +2346105 M7RGR Richard +2346106 M0ITJ Eddie +2346107 M0WID David +2346108 M0YOB Dave +2346109 G0RKN Harry +2346110 M3UZB Simon +2346111 M0GMQ Paul +2346112 M0SHW Alex +2346113 M0XMX Mike +2346114 M7SJH Steve +2346115 M7ACE Vince +2346116 M1AFY Scot +2346117 G4DTM Pete +2346118 M0NDU John +2346119 M7ACN Miles +2346120 2E0EJY Kevin +2346121 G3SNA Stuart +2346122 G8VVY Robin-G8VVY +2346123 G6SDW Mark +2346124 2E0TJY Jon +2346125 G6ZET Dave +2346126 M6NXW Adam +2346127 M3XMJ Sean +2346128 2E0NAF Nigel +2346129 G4TAD Mervyn +2346130 G4OST Peter +2346131 M0JLS Adrian +2346132 M0VGH Raymond +2346133 2E0AKU Dick +2346134 2E0NPL Andrew +2346135 2E0HLD DAVE +2346136 M0RUF Rufus +2346137 M7IKD Ian +2346138 G1WSZ Vic +2346139 G4KXQ Mike +2346140 G1HHU Norman +2346141 2E0JNC Jamie +2346142 M0XQS Phil +2346143 2E0PKH Paul +2346144 M7HIG Mike +2346145 2E0NMK Simon +2346146 G8JSM C +2346147 M0KFU Binaryfive +2346148 M0KRE Kerry +2346149 2E0KZA Ben +2346150 M7BTK Bartosz +2346151 G8SZP David +2346152 M6HNV Sarge001 +2346153 M6EUZ RICHARD +2346154 M6OWF Simon +2346155 M7OMC Vincent +2346156 M6KHD Stuart +2346157 G6DRH DR +2346158 M3NGT Norvil +2346159 M6JGJ M6JGJ +2346160 2E0FEE Walter +2346161 M5SB Stewart +2346162 G6ZFJ John +2346163 2E0FJO Arron +2346164 M3ZPZ Paul +2346165 M5AXA Ian +2346166 M6NQC Rob +2346167 2E0WDK Peter +2346168 2E0HGB Alun +2346169 M0LCX Louis +2346170 G8KOM Douglas +2346171 M0GKG Rob +2346172 2E0EZC Andrew +2346173 M0JHP Dover +2346174 G0FYQ David +2346175 G4HXE Alan +2346176 G0GER Ray +2346177 G0CRB Allen +2346178 2E0HJM Brian +2346179 G1FSH G1FSH +2346180 M7JPL James +2346181 G1WGM Keith +2346182 G6ZYF BAZ +2346183 2E0FRT 2e0frt +2346184 M1AKL Vince +2346185 M6JSA Alan +2346186 M3FBE Duncan +2346187 2E0SBM Mark +2346188 2E0GLL David +2346189 M3RPG Robert +2346190 G7PLY Barry +2346191 G7UKK Greg +2346192 M5BAZ Baz +2346193 M1EKP Dave +2346194 M3UAR Andy +2346195 G8VBW Michael +2346196 G8XGM Paul +2346197 G3SBF Steve +2346198 M0XUE Jonno +2346199 M0OKQ Milan +2346200 M0MCR Malcolm +2346201 G1YOR David +2346202 M6NKZ M6NKZ +2346203 M7PUG Jim +2346204 G0HCP David +2346205 G4AYD Terry +2346206 2E0FJL Frank +2346207 M0PPF Steve +2346208 M3SIW John +2346209 2E0SNS Shaun +2346210 G4WKW Richard +2346211 M7BHP Martin +2346212 G0PPQ G0ppq +2346213 M7PSJ Shirley.jackson1199 +2346214 M3YYO Miles +2346215 G1RGG Philip +2346216 M7SDR M7SDR +2346217 G7FIK Sean +2346218 M1CDU Graham +2346219 G1MTC Andy +2346220 2E1GFL Dennis +2346221 M1CGB Martin +2346222 M7DJM Dave +2346223 G1CQP Tim +2346224 M0MZD Brian +2346225 2E0LDQ Liam +2346226 2E0JKJ JKingdon +2346227 M3PWJ Peter +2346228 G0MQF Steve +2346229 M6VZN Andrew +2346230 M0SRX Bailey +2346231 2E0RAF Andy +2346232 G6PJT Brian +2346233 2E0ETE Andrew +2346234 2E0JYE Ed +2346235 G8FHM Bob +2346236 M5ADI Darren +2346237 2E0OHN Nickholden +2346238 G1JNY Alan +2346239 M7HWO DrHWO +2346240 M6OQT John +2346241 M7JMC John +2346242 M0WMM WMM +2346243 G3WBB TED +2346244 M7KAV Peter +2346245 M6KTA Ken +2346246 G1JFL Mick +2346247 G6VJR Bill +2346248 2E0AAN MARK +2346249 M6IXY Alex +2346250 M0IUE Duncan +2346251 M1AMF Jason +2346252 M0YPJ Paul +2346253 G4RWF Mark +2346254 2E0DEZ Dez +2346255 M7MAS Michael +2346256 M1EJL Pete +2346257 M0PTT Rob +2346258 M6XBV Csomerv +2346259 M0EBP Gena +2346260 G1LHD Mike +2346261 G7IBN Sue +2346262 2E0VBV Vic +2346263 G7TZZ Jon +2346264 M7TWO James +2346265 M7JDM DAVID +2346266 M0VGW COMNET +2346267 G8BXC Richard +2346268 M0NRJ Nick +2346269 M7JSF James +2346270 M7HAM N +2346271 G4VCP Clive +2346272 G0JDL John +2346273 2E0LMK Shaun +2346274 G4UET Jules +2346275 G1OXL Rob +2346276 2E0KXV Antony +2346277 2E0OAU Lee +2346278 2E0XRD Chris +2346279 G4NSZ Mike +2346280 G7LRR Andy +2346281 G8NSZ Mike +2346282 G7BJD BobWard +2346283 2E0HIS Greg +2346284 G0PWR Kevin +2346285 G6FCI Chris +2346286 M7ROB Robert +2346287 G4MUS DAVE999 +2346288 G7DIQ Phill +2346289 2E0FCO Mick +2346290 G7FWL Martin +2346291 G1RWA Carl +2346292 M6JXQ Andrew +2346293 M6EUR Jonathan +2346294 M7TUX Damian +2346295 M7ACY Philip +2346296 G8STW John +2346297 G7MUY Adi +2346298 M6BNK Mike +2346299 M7GBH GARY +2346300 M0YRK Adam +2346301 G1BCG PhilE +2346302 G1VAC Dave +2346303 2E0VVX Jon +2346304 2E0WAE Andy +2346305 2E0EWU Steve +2346306 G4RWI Nigel +2346307 M7ABR Drew +2346308 G7BIM Steve +2346309 M3FIA Anthony +2346310 M7MDG David +2346311 M0TAY Tony +2346312 M0ZCP Chris +2346313 M7MJC MJC +2346314 2E0FIA Ant +2346315 G0WFD MICHAEL +2346316 M6VOG Adam +2346317 M0TTL Andy +2346318 G3OJI Jim +2346319 M3GYY GARETH +2346320 M0JFM John +2346321 G4SGI Simon +2346322 M6ICS Matthew +2346323 M7AGB Allen +2346324 M7AND Andre +2346325 G6DOF CLIVE +2346326 G0FVT David +2346327 M5HFJ JOHN +2346328 G8DKI David +2346329 M3JHQ John +2346330 G0KZT Andy +2346331 G1JDT Graham +2346332 2E1MFC Morris +2346333 G8WBO Steve +2346334 G7WBB Alan +2346335 2E0GNN Alan +2346336 G7OPG Robinpalmer +2346337 G6NLN John +2346338 M7AAJ Faz +2346339 G4NQX Rob +2346340 2E0NCR RCScale +2346341 G7VBN BRYN +2346342 G0ELJ Dave +2346343 G1JTO Andy +2346344 2E0WFY Kaz +2346345 M0HQJ Henry +2346346 G0TOC Marc +2346347 M6SRE Steve +2346348 M6GMU Liam +2346349 M7RJE Robe +2346350 G0GPH Peter +2346351 M6JRL Joe +2346352 G0SJY Dave +2346353 M6EBW Chris +2346354 M6OJZ Jim +2346355 G7SGM Raymond +2346356 M0SYM Simon +2346357 M3BKH Michael +2346358 M0CYJ Denis +2346359 2E0OBP Pete +2346360 M1COQ Matthew +2346361 G1TWY Bryan +2346362 2E0DYQ Paul +2346363 G0OEY Andy +2346364 M7KSD Kev +2346365 G1GXB Keith +2346366 M1CEL Claude +2346367 2E0FEE Walt +2346368 2E0RLZ Simon +2346369 M0NVT Nick +2346370 G4GAK Peter +2346371 M6KXU Barrie +2346372 G0BSJ Bob +2346373 G1IRG Simon +2346374 2E0VGF Patrick +2346375 G7ANK Colin +2346376 2E0KBA James +2346377 M7BUS Giuseppe +2346378 G3VCP Nick +2346379 G4WFW Phil +2346380 G1DTF Andy +2346381 G0FTN Alan +2346382 2E0JSJ Trev +2346383 G8UEU John +2346384 M7ADL Colin +2346385 M7RJL Ron +2346386 M7DOM Dom +2346387 G4ULF Dlake_dmr +2346388 G0AFT Chris +2346389 M6POY Mike +2346390 M6XHB Ben +2346391 M7ISP Ian +2346392 M0MVV Adam +2346393 G1ONQ Fred +2346394 M0IAH M0iah +2346395 M6XAW Andrew +2346396 G6LUE Tom +2346397 2E0EUG Justin +2346398 G3ZSE John +2346399 M7XLT Xlt +2346400 M6STL Steve +2346401 G4MKT Barry +2346402 M0BOB Bob +2346403 M0XCH Clive +2346404 M7OJW Owen +2346405 M0RVX Chrisb +2346406 M0GIB David +2346407 M5STC Steve +2346408 M7NSA Kit +2346409 M7SZY Marek +2346410 M1GPD Glen +2346411 G6ITO Peter +2346412 M0LZH M0LZH +2346413 2E0HRT Alan +2346414 M0VRP Ian +2346415 G4UDT Yves +2346416 M7KEV KEV +2346417 M0LSA Lisa +2346418 M7MVC MARK +2346419 G4GBT IAN +2346420 2E0BFF Tony +2346421 M6OBQ David +2346422 M0KNC Neil +2346423 G0OQK Nick +2346424 G7GCR Matt +2346425 M0LHD Debs +2346426 G0OWA John +2346427 M7XYZ Ian +2346428 M7STU Stuart +2346429 M7SQN Simon +2346430 G0VPY Eric +2346431 2E1EBN Stephen +2346432 M0XRZ Michael +2346433 M0NZO Greg +2346434 2E0BMA Chris +2346435 G0AWY ROGER +2346436 M0PNB Takis +2346437 G1DCU Paul +2346438 G6QA L.V.J. +2346439 G8SCG John +2346440 2E0FVL Pete +2346441 M0EHL Martin +2346442 M3MVF M3MVF +2346443 M0GWC Graham +2346444 2E0KPM NWRG +2346445 M0PUN Eyesandears +2346446 M0DOQ Digiworlduk +2346447 2E0OWJ Graham +2346448 M7JMF Josh +2346449 G7PEB John +2346450 MX5MDX Bernard +2346451 M7OTG M7OTG +2346452 G4GNC Tony +2346453 G0MUN Adrien +2346454 M0IVM Peet +2346455 G4GPY Steve +2346456 G4RCZ Ian +2346457 M0JOJ Joe +2346458 M7UKE Colin +2346459 M7DCP Dave +2346460 M7TYT Josh +2346461 2E0URK Mike +2346462 M7ADV Morjohn +2346463 M7NCM Nigel +2346464 G7GZH Melb +2346465 M0JME Jamie +2346466 G0FUS Graham +2346467 M7DMT M7DMT +2346468 G0CQZ Nigel +2346469 2E0FDE Richard +2346470 2E0LAR Andy +2346471 M0ILQ Andrew +2346472 G7KMT Paul +2346473 G7SCU Dogan +2346474 2E0SXO John +2346475 G7GZH Melb +2346476 2E0UDG Dave +2346477 G3OSI DON +2346478 G0LEF Tommy +2346479 M6KCI Dave +2346480 M3WOV Haydn +2346481 M3LCZ Russell +2346482 M6CNA Malcolm +2346483 2E0GIM Ian +2346484 M6PPS John +2346485 M6YPC Tracie +2346486 2E0DQU Ian +2346487 M6ATK Bob +2346488 M0PRF Jeffrey +2346489 M0GPN Bryn +2346490 M0WJA David +2346491 G0BVD Philip +2346492 M0IWE MAU +2346493 G0SOR Simon +2346494 G0LGD Tony +2346495 M6RTA M6RTA +2346496 G0HJM Bob +2346497 M0IQF M0IQF +2346498 M7DOA Damian +2346499 G7NFK Jon +2346500 M7LLA Neil +2346501 2E0FHU Brian +2346502 G6WUR Trevor +2346503 G4EEL Alan +2346504 G1GDB Derek +2346505 M7CHH Cliff +2346506 M6SFG Chris +2346507 M6SFN Robert +2346508 2E0EGW Dave +2346509 M0JOZ Jo +2346510 G4WIP Alan +2346511 2E0KFO Sean +2346512 M3ZKT Nef +2346513 M0LHD Debs +2346514 M6GSN Glen +2346515 M6HTF STEVE +2346516 M7ABP Rob +2346517 G3NOP Dave +2346518 M7GGM GEOFF +2346519 M0BKJ Paul +2346520 M7ERE M7ERE +2346521 M7AEL Gary +2346522 G0HDZ Ian +2346523 M7ALX Alex +2346524 M0SDE Steve +2346525 M7RUE Rue +2346526 M0IKO Ivo +2346527 M7JMQ M7JMQ +2346528 2E0NKJ Nik +2346529 2E0KJT Ken +2346530 G4ZKQ Jim +2346531 M6BXX Jonathan +2346532 G6MHH Lyndz +2346533 G8JPW Jon +2346534 M0EBU Kelvin +2346535 M0PDS Peter +2346536 M6NXR Mjr693 +2346537 2E0LZI Ian +2346538 G7VJA Kenny +2346539 2E0PYG Paul +2346540 G7MEZ Jeanette +2346541 G0LCX Dave +2346542 M7MVS Andy +2346543 2E0OTQ Marcin +2346544 G4KSD G4ksd +2346545 2E0YRT Colin +2346546 M0RNX Jez +2346547 M7TFG Tom +2346548 M6IQM Andy +2346549 2E0KYX Alec +2346550 G8OZD Andrew +2346551 G7UAY David +2346552 G1LYX Nick +2346553 G4TGV Ian +2346554 G0KHC Dave +2346555 M0RKF Chris +2346556 M7ADV Morjohn +2346557 M0HJF Howard +2346558 2E0EVM Eddie +2346559 M7JRB Justin +2346560 G0EKH Ken +2346561 M1DVJ Chris +2346562 M0IFC Andy +2346563 M7AEY Clarkerz +2346564 G8FKL GeoffT +2346565 G1UXP Harrogate3 +2346566 M7APD Robert +2346567 M6PPY Jasond279 +2346568 MB6IKW Adrian +2346569 G7PWV Peter +2346570 G8ZZL Peter +2346571 G0KKI Steve +2346572 2E0WPL Peter +2346573 G8VLR Roger +2346574 G4MOC Paul +2346575 M0ICG Gary +2346576 G0LXC John +2346577 2E0YPD PaulD +2346578 G6MGQ Adrian +2346579 M1DSR Iain +2346580 G4UXG Jon +2346581 M0MXC Mark +2346582 M0RIU David +2346583 2E0AWM Ian +2346584 G8TMH Henry +2346585 G4JPK Jonpaul +2346586 M6XCC Stefan +2346587 M6KVX Roy +2346588 M7SGF Stan +2346589 2E0XUA Mark +2346590 M0KVB Alan +2346591 M7ECT Ethan +2346592 2E0KAH KimHowe +2346593 2E0PIU Phil +2346594 G4ISN Andy +2346595 M6UIT Alan +2346596 2E1HCG ALAN +2346597 2E0GXQ Simon +2346598 2E0PJG Dr.Pete +2346599 M1DTG MattW93 +2346600 M0IDP Ian +2346601 2E0AXA Kez +2346602 M7PAC PAUL +2346603 M7MFD Martin +2346604 G1AZC Malcolm +2346605 M6CMZ Responder86 +2346606 M6KNB Mukundan +2346607 M0RHR Ruardean +2346608 M7NHS Jim +2346609 M6GMU Liam +2346610 M0CRO Geoff +2346611 G0MOK Robert +2346612 M6EQG Andy +2346613 G6HXI Tim +2346614 M3XQM Al +2346615 2E0GHT Paul +2346616 2E0BLQ Jason +2346617 G3PGA Mike +2346618 M7SCR M7SCR(Stewart) +2346619 G1SCY Rod +2346620 M6KIM Kim +2346621 G6WRB Mark +2346622 GB8OMB Old +2346623 M6COP Charles +2346624 G0WKV Keith +2346625 M6XDV Globetrotter +2346626 M7DAW DawidK +2346627 M7BAT Bart +2346628 2E0NPV Vic +2346629 M7NJD Nigel +2346630 2E1HKO Jason +2346631 G4SUH Paul +2346632 G4BZU Bryan +2346633 G3XEF Mike +2346634 M0RPZ Richard +2346635 M7AZI Slaw +2346636 M6CEB Matthew +2346637 2E0TIZ Zxtiz +2346638 M6JKU Andy +2346639 G6ING Steve +2346640 M7NHS Loan-1 +2346641 M0GOH Peter +2346642 G7EJO Mr +2346643 G4WQS Norman +2346644 G0TBO Paul +2346645 G0MEJ Nigel +2346646 G7LKI Dave +2346647 M0AYO Cheshire +2346648 2E0KKF Andy +2346649 G4AZM COLIN +2346650 G4ABX Bruce +2346651 M6VGC Norman +2346652 G4VHM Mike +2346653 G0NGL Nigel +2346654 G4EQS Simon +2346655 M7PSM Stuart +2346656 G0EHG Adrian +2346657 M6LBI Ian +2346658 M0JNE Jayne +2346659 2E0FPX Martyn +2346660 G0MXU Shaun +2346661 G7RCP David +2346662 M3BJZ Dave +2346663 G0PGA Chuck +2346664 2E0FJD Karl +2346665 G6TET G6tet +2346666 M0HYL Alan +2346667 G7AGB Peter +2346668 G4FBC RON +2346669 M7III Bzb666 +2346670 M6KRV Kev +2346671 2E0LUK Celso +2346672 G1ZEU Stuart +2346673 M7SYD Jeff +2346674 M7TED Steve +2346675 M7RNS Andrew +2346676 M7AYO Ayo +2346677 M0IVC Filipe +2346678 G0EOK Paul +2346679 M7YYY Louise +2346680 2E0FHV Tony +2346681 G4GWV Bluemoon +2346682 2E0XBT Sean +2346683 G0DDJ Tony +2346684 M0UNX Nick +2346685 G3YVY Dennis +2346686 G4VHM Mike +2346687 M0MBN MATT +2346688 M7EGO Manos +2346689 G0HPA Graham +2346690 M0JVY Peter +2346691 M0IWQ Tim +2346692 G8NXD Mike +2346693 M5JSW Steve +2346694 M1EHB Pidsea +2346695 G4YGH Dave +2346696 2E0HTM Alex +2346697 2E0VMK Richard +2346698 M3GHL GEOFF +2346699 M6NXE Paul +2346700 M6DRS Lee +2346701 2E0NNZ John +2346702 G0POY Andy +2346703 M6OXB Leo +2346704 M7SWT Steve +2346705 M7TJC Tanya +2346706 M7NMD Nomad +2346707 G4RCH Steve +2346708 2E0PEA Andy +2346709 G4POP G4POP +2346710 G7GYB Mark +2346711 2E0BNS ANDY +2346712 G7RQD Martin +2346713 G6GLO GCR +2346714 M0RGL GCR +2346715 M0HZV Miro +2346716 2E0DED HEDGEROW +2346717 2E0KPX Danny +2346718 M6FLL Diane +2346719 G7HHI Simon +2346720 M3TCH Roger +2346721 M6LYG David +2346722 G7DWQ Paul +2346723 2E0RWK Ron +2346724 G7AEE Chris +2346725 2E0FJI Andrew +2346726 G7DUC Ben +2346727 M7RBB Robbie +2346728 M6FNI Robert +2346729 G3OQD MARTIN +2346730 M0ASR Dom +2346731 M6GSP Ploddog +2346732 M0WTL Olly +2346733 G7SYT CHRIS +2346734 M6CRY Craig +2346735 G8LVM Andy +2346736 2E0WWD Bob +2346737 M0WOB Derek +2346738 G0UOZ Tony +2346739 M7ALC ANDY +2346740 M7PAB Dtazzz +2346741 M7NJA GRESTYD +2346742 M7PNW Pete +2346743 G6AMY Rachel +2346744 M3LUO David +2346745 2E0DQQ STUART +2346746 M0TXL Pip +2346747 G4YTU KEITH +2346748 2E0FGP Graham +2346749 2E0IME Andrew +2346750 M0OWS Paul +2346751 G4VVP BASIL +2346752 2E0OYQ Andy +2346753 G0OCF Robin +2346754 G0TEO LeslieB +2346755 M7WJQ WILL +2346756 M7VCF Dan +2346757 G7ESY Ian +2346758 2E0EVI Rod +2346759 2E0IBI Alan +2346760 M6VMO M6VMO +2346761 M7AIR AirBoy +2346762 G0NXR Alan +2346763 G7MYR Dave-G7MYR +2346764 G3KOM Pat +2346765 M6LFZ Eddie +2346766 M0LIH Ian +2346767 M7PGH Paul +2346768 2E0OVO Darren +2346769 M7III Bzb666 +2346770 2E0YHF Josh +2346771 M0SLL David +2346772 G1NXT Ken +2346773 G7IUI William +2346774 M0HKH Antonio +2346775 2E0OYY NEIL +2346776 2E0MWU Ian +2346777 M0DUH Stuart +2346778 G0SUB Graham +2346779 2E0KRM Kieran +2346780 M7BSR Brian +2346781 G7TZU Tommy +2346782 GB0MW Mountnessing +2346783 G7LQY Howard +2346784 2E0YOZ Jamie +2346785 2E0RJA ROB +2346786 M7USL Andrew +2346787 2E0WIT Stephen +2346788 2E0OZX Clive +2346789 G3KLV Gord +2346790 2E0NXL Paul +2346791 M7DRB Brian +2346792 2E0EZR Gareth +2346793 M0DGJ Graham +2346794 M0XZL John +2346795 M0TEG David +2346796 M3UTG Stephen +2346797 M6NVL Adam +2346798 G7AEG GCR +2346799 G7AEA GCR +2346800 G7AEB GCR +2346801 G7AEC GCR +2346802 G7AED GCR +2346803 G7AEF GCR +2346804 G7AEH GCR +2346805 2E0VPV Chris +2346806 G0LFP Steve +2346807 2E0FJH John +2346808 M7GMT Rikki +2346809 G0EVA David +2346810 G1DOK ANTHONY +2346811 M3RUK KevinYorkUk +2346812 2E0SSE SARAH +2346813 M0VWT Chris +2346814 G7NBG Lee +2346815 G8GCC BRIAN +2346816 M7PBA Paul +2346817 M6VMO M6VMO +2346818 G4HPW G4HPW +2346819 M3EXE M3EXE +2346820 G1WHP PAUL +2346821 2E0XAL Emperorsin +2346822 M7DEN Den +2346823 G7GJA Pete +2346824 M3ZYX TIMMY-M3ZYX +2346825 M1FBI Stephen +2346826 2E0BWX Bill +2346827 GB2CLG P.Walker +2346828 2E0IGL Paul +2346829 G0FOG Colin +2346830 G4TPA David +2346831 G2BGI Dominic +2346832 M6KVR Dean +2346833 M3LXP Peter +2346834 2E0OFF Giz +2346835 2E0PSO Peter +2346836 G6TJS Mike +2346837 M7STE Stephen +2346838 M6RDZ Robert +2346839 M7BMH Barry +2346840 G7PPB David +2346841 M6HNO Phil +2346842 M6KNZ Peter +2346843 M0CJM Neil +2346844 M0RYO RYO +2346845 M0KJI Matt +2346846 M0JKW John +2346847 G7LTQ John +2346848 M0HYF Gavin +2346849 2E0BFM Andy +2346850 M0RRL Kathleen +2346851 M0SAC Michael +2346852 G0GTN Johng0gtn +2346853 M6OPV Paul +2346854 M6LLN Andy +2346855 G6CGY Bob +2346856 2E0FRL Fr +2346857 M0DFD Steve +2346858 2E0BPY Mark +2346859 M0HXE Richard +2346860 G1FBK Robin +2346861 G0BLB Rich +2346862 G4RWN Fred +2346863 G4SFS Peter +2346864 G8ZZL Peter +2346865 2E0NSX Nigel +2346866 M6IHH Ian +2346867 2E0SWB STEVE +2346868 G8TVH Peter +2346869 G4GNP Steve +2346870 M0SCU Stewart +2346871 2E0TEL Terry +2346872 2E0KBZ Scott +2346873 M0OAU M0OAU +2346874 M6TSU Heather +2346875 M7JPC Jan +2346876 M7AFS Stuart +2346877 M7UHF M7UHF +2346878 G0XAE Mike +2346879 G4VYX BILL +2346880 2E0FJT Andy +2346881 G0SNB John +2346882 M0MSN Mike +2346883 G7WBE DENIS +2346884 M7MCQ M7MCQ-TOM +2346885 M0RDV Roc +2346886 M1NED Dennis +2346887 G0LNI Joe +2346888 M5ET John +2346889 MB6IGP MB6IGP +2346890 M7ENH Ian +2346891 M6KWY John +2346892 G5VZ Chris +2346893 M7AFV Paul +2346894 GB5RAM Ridgewell +2346895 G0WQC John +2346896 M7CKY MICKY +2346897 M6MWV KIERAN +2346898 M7EMS Paul +2346899 M1SKA Dave +2346900 2E0BLF Andrew +2346901 G4WQZ John +2346902 2E0XWM Chris +2346903 M7DYL Daniel +2346904 M3CPX Nigel +2346905 M6NNU DARREN +2346906 2E0RYD Paul +2346907 2E0XDV Charli +2346908 G0JRT Tom +2346909 2E0GUF Andy +2346910 G8GOR Bryan +2346911 2E0PS Paul +2346912 G8NQK Gary +2346913 G4OCO Roger +2346914 M7GFC M7GFC +2346915 M7DFM Dave +2346916 G7GJU Geoff +2346917 M6VGR Ian +2346918 M7RJR Robert +2346919 M7ALS Alan +2346920 M0WYP Josh +2346921 M0XJR Mark +2346922 G8ZWF Bob +2346923 M7VIP Glen +2346924 M7MRX Adrian +2346925 2E0UZA Steve +2346926 G6ZMU Geoff1523 +2346927 2E0DGH David +2346928 2E0OTY Pete +2346929 G0ORL Cliff +2346930 G0WST G +2346931 G7ODZ B +2346932 2E0CWW Andy +2346933 G6HMX Derek +2346934 M0YHS John +2346935 M6NNJ Paul +2346936 G4UMW Rob +2346937 M6AND M6AND +2346938 2E0FGS Mark +2346939 M7GWM GREG +2346940 G3YJZ Allan +2346941 G0HRX Chris +2346942 G1OZU Neil +2346943 G7KTE Peter +2346944 G7IRU Carlo +2346945 M0TRR Ken +2346946 G4FKK Martin +2346947 M0XFL Chris +2346948 2E0WBT Brian +2346949 G0GER RAY +2346950 G4SKH John +2346951 G8TSE Robert +2346952 M7JPS Nigel +2346953 2E0FKJ Richard +2346954 M0VIG Tony +2346955 M1EJX Martin +2346956 M7JAC Jackie +2346957 M0OJR Ade +2346958 M0XSJ GB7SJ.COM +2346959 G0RFD Mike +2346960 M0DEP Russ +2346961 G3ZQC Jim +2346962 M0YNG Christopher +2346963 G0LQC Mr +2346964 G7ANJ Kevin +2346965 G0UXF Carl +2346966 2E0SQA Catherine +2346967 M0XRF James +2346968 M3OFN Chris +2346969 2E0YND Bryan +2346970 M0OAD Steve +2346971 G7IZX Paul.g7izx +2346972 2E0IJJ Ryan +2346973 G8TVC G8TVC +2346974 M0XRE M0XRE +2346975 M6HHC Ken +2346976 2E0PJY 2E0PJY +2346977 M1AEC MARK +2346978 G7SYT Chris +2346979 G0NXR Alan +2346980 MX0VFT Marsham +2346981 G6WLA Kevin +2346982 2E0NXK Gary +2346983 M7TDA Tony +2346984 2E0PPJ 2E0PPJ +2346985 G7PXM JON +2346986 2E0DXE 2E0DXE +2346987 G6ZDP Kevin +2346988 G7PXF MikeP +2346989 M7CRD Carter +2346990 G3TKN Vince +2346991 G4ELD Gary +2346992 G4ROR Derrick +2346993 M7RTK Richard +2346994 M7BPK Stacy +2346995 M7BOS Mark +2346996 G4XUZ Ray +2346997 2E1HJS Roy +2346998 M6ICY Matt +2346999 2E0OZK Marek +2347000 G8SJP Fred +2347001 M7SCU Andy +2347002 2E1CZS Steve +2347003 G8JPJ David +2347004 2E0SVZ Andy +2347005 G0EIG Mick +2347006 G1EUH John +2347007 G7DKE John +2347008 G1XGN Mark +2347009 G6UOD Talib +2347010 G4JBA Jim +2347011 M0IQR Chris +2347012 M6SBE Stephen +2347013 G7JZO Roger +2347014 M7APH M7APH +2347015 G4WJS Bill +2347016 M0IXG Ignacio +2347017 M6XXB Bri +2347018 M7WSP Gayle +2347019 M6YDF Simon +2347020 2E0EPU 2E0EPU +2347021 M6VAW Darren +2347022 G3TZM Bill +2347023 G4MZY David +2347024 M6RZY Bex +2347025 M0TYH Tim +2347026 M0KEA DAN +2347027 M7COP Chris +2347028 M7CWX Chris +2347029 G6NRK Arthur +2347030 M7BVC Alister +2347031 G0NQZ Peter +2347032 2E0MEU Agnes +2347033 G7UFS Simon +2347034 G7TKI Roger +2347035 M7BBC Martin +2347036 G0JCN Martin +2347037 M7UPT Bernard +2347038 G0FHH Phil +2347039 M6VAY Alex +2347040 M3ZVP Ben +2347041 M6GNG Chris +2347042 M7HES Francis +2347043 M7TOC Tainia +2347044 M0LEZ Lez +2347045 2E0WUV Robert +2347046 M7GOG Danny +2347047 M0XZS Andy +2347048 M6OEF Simon +2347049 G0POT Michael +2347050 G1NCI Paul +2347051 M0PAI M0PAI +2347052 M7TMU Dubo2319 +2347053 2E0EPV Kyle +2347054 M0RSX Richard +2347055 M6BMW Brian +2347056 M7BJH Brian +2347057 M7DKS David +2347058 G0LET CPT +2347059 G6BYR TIM +2347060 2E0FHE Ian +2347061 G7RBY Mark +2347062 M7CDR Chaz +2347063 M7GJH CABLEGUYMK +2347064 2E0USS AirBoy +2347065 2E0VUX Fred +2347066 M7CDW Cyril +2347067 M6RFB RIC +2347068 G0IFG Alan +2347069 2E0XXD Steven +2347070 G7BHB Jrms +2347071 G8FXC Maby +2347072 M0XHS Hammersmith +2347073 M7GPO Will +2347074 M7BSA Ben +2347075 MB6MC Morecambe +2347076 M7CDA Colin +2347077 G8BMH Russ +2347078 M0NMA Steve +2347079 2E0EWK Matthew +2347080 M3LQM Deano +2347081 G3BIL Konstantin +2347082 G1PGF Shaun +2347083 G7ODR Dave +2347084 G1DJI John +2347085 G1RSW Ian +2347086 M0CLS Carl +2347087 2E0DZR Paul +2347088 G4ERZ Alan +2347089 2E0IDA Ian +2347090 M7ATA Allan44 +2347091 M7AHA Robin +2347092 2E0FJK Steve +2347093 M6NNW Sam +2347094 G6AGN Dave +2347095 2E0TGY Thefettler +2347096 2E0RZG John +2347097 G8DQX Robin +2347098 G5TV Brent +2347099 M7ATI M7ati +2347100 M7DUK DEAN +2347101 M7REV Paul +2347102 2E0TXE Damian +2347103 M0ROL Andrew +2347104 M0SPZ SeanP +2347105 M3ZPM PBM +2347106 M7AHE Lee +2347107 2E0JEH Jack +2347108 2E0JNH Jay +2347109 M3ENY NIC +2347110 G0BZY G0BZY +2347111 M0AID Kelvin +2347112 2E0XFC Andrew +2347113 M3ZHX Ken +2347114 2E0SIH SiHammond +2347115 M0IXQ Oscar +2347116 M0UKN ANDYMC +2347117 M3DAC DAVE +2347118 G0HBA Roy +2347119 G1KOT Mike +2347120 G4WJJ PETER +2347121 M1DBG GBarrington +2347122 G6DAC MB +2347123 G7JXX Ian +2347124 M7XYL M7XYL +2347125 M7RIG R +2347126 2E0FTS Paul +2347127 M6WIB Rob +2347128 M0RAR Nick +2347129 M7WVM Mark +2347130 M6ZLM Mark +2347131 G7WBY Blake +2347132 M7WBY Phoenix +2347133 2E1HEL 2E1HEL +2347134 2E0ROX Mark +2347135 2E0JCA JamesA +2347136 M7AHK Jonathan +2347137 G2GS Paul +2347138 G4LBJ Lennard +2347139 M0PGN Piotr +2347140 M0ORB Andrew +2347141 MX0PFJ Kristian +2347142 2E0LTA Andrew +2347143 M7AES Rachel +2347144 M0MUU Stephen +2347145 M6KCD KEITH +2347146 M0IIN Mark +2347147 G8TJQ G8tjq +2347148 M0NWF NWFG +2347149 M6CDA Alex +2347150 M1FRH Frank +2347151 M7DIO Krystian +2347152 2E0WHN Will +2347153 G1CQV G1CQV +2347154 G8HKP Michael +2347155 2E0RQO Richard +2347156 M7SES Steve +2347157 G7NLY Stewart +2347158 M5PM Patrick +2347159 2E0VNT Vincent +2347160 G1WWX Paul +2347161 M7DCH David +2347162 M7PWR Stefano +2347163 G1LBU Ray +2347164 M6IVG Nigel +2347165 M7GSX Grant +2347166 M0IXY Andy +2347167 M7DXT Tony +2347168 M7REV M7rev +2347169 2E1DNB Peter +2347170 M7KAY Kay +2347171 M0OHA OHA +2347172 M6FJW Simon +2347173 M7USE John +2347174 G1ERW Tony +2347175 M7MJS Martin +2347176 G8TRY Gerry +2347177 2E0FEV Daz +2347178 G4MLV Leonard +2347179 G4XYR Bill +2347180 M6TWF Toby +2347181 M0MJX Mike +2347182 2E0TXH Tony +2347183 M0NYY Nick +2347184 M6TMY Hotsnot1967 +2347185 2E0YZY Ian +2347186 G6LTI Steve +2347187 M6GYZ Dave +2347188 G8UUR Phil +2347189 M1AWX Stuart +2347190 2E0KJR Brian +2347191 M7NOV M7NOV +2347192 M6LMR Chris +2347193 G1UDS Phil +2347194 G4RZG Peter +2347195 2E0FLV Mark +2347196 M0XBG BADARS +2347197 G6OBA Michal +2347198 M7LMR Chris +2347199 2E0FMZ Charlie +2347200 M0WJA David +2347201 2E0FJJ Richard +2347202 M7HTL Sylwek +2347203 G0NQA Alan +2347204 G8RIM JOHN +2347205 2E0LEK Martyn +2347206 G1SQY Paul +2347208 2E0TBT Nick +2347209 M6PYM DMears +2347210 G7NBE Mike +2347211 2E0LDK LEE +2347212 G1OXD Simon +2347213 M7PTT Martin +2347214 M0BPM David +2347215 M7LIZ Liz +2347216 M7PRA Robert +2347217 MB7IBK Mike +2347218 M5SJM M5SJM +2347219 G7AVU Bob +2347220 2E0FND Liam +2347221 M7MJF Brian +2347222 M7VEN V3NNIE +2347223 G0BUY Reg +2347224 2E0FNJ Chris +2347225 G6JVY Mark +2347226 M0TRD Richard +2347227 G2JP Jani +2347228 M7MLB Lee +2347229 G7UUD KEVEN +2347230 M3ZPE Phil +2347231 M0KIG Karl +2347232 M6EOX Iantopsy +2347233 2E1FMS PaulJ +2347234 M0NAW Neil +2347235 G1DRG Gareth +2347236 M0ODZ Greg +2347237 G0TQY Jay +2347238 G2BC Bacon +2347239 G4CFW Ron +2347240 2E0WER Mick +2347241 M7TLF Tim +2347242 G7KMT Paul +2347243 2E0FNM Matthew +2347244 G4PFF Mike +2347245 G4IJL G4IJL +2347246 G4XTF NIGEL +2347247 M0OBM Daniel +2347248 M3VWU GADGET +2347249 M6MUX Amell +2347250 M6DPP Dan +2347251 2E0FNO Robin +2347252 M7ERV Merv +2347253 G6LTB Pete +2347254 M6CGA Nic +2347255 2E0SWI Ian +2347256 2E0DEC Dec +2347257 G0PEK Kevin +2347258 2E0FKZ Glyn +2347259 2E0OOW Phil +2347260 M7HAZ HIBA +2347261 G0DWD John +2347262 G7SYQ Andy +2347263 M7BOZ Simon +2347264 G1LUC Neil +2347265 M7SYN M7SYN +2347266 M7DDE Steve +2347267 M7BDB Davide +2347268 2E0TQX Matt +2347269 M0TRI Andrew +2347270 M0TUM Richard +2347271 2E0ESZ Ian +2347272 M7FMJ Frankie +2347273 M7GMK Gary +2347274 M0IUR Emmanouil +2347275 M7GBR Eugene +2347276 G0WGQ Dave +2347277 G0KZH Elaine +2347278 G4NBC Mike +2347279 M7JCE Jordan +2347280 M1EAW M1EAW +2347281 2E0FMI Bill +2347282 M7APR M7APR +2347283 M7KGA Andrew +2347284 G7DQC Pete +2347285 2E0KKT Paul +2347286 M6ANN Eric +2347287 G0DMP Dave +2347288 G3JNJ Don +2347289 2E0VVG Allen +2347290 2E0ICX Debbie +2347291 G1EEQ Stuart +2347292 G4YYB Ernie +2347293 GB1WSG Woodmancote +2347294 M5AAW Colin +2347295 M7JAR John +2347296 M7JDW James +2347297 2E0LXC Greg +2347298 M0SDF Paul +2347299 2E0LIU Iain +2347300 G3KRZ John +2347301 M7BMF Barry +2347302 M0IYE Andy +2347303 G1AHW Trev +2347304 M7ONY SPENCER +2347305 M7VAN Andy +2347306 2E0ORE Chris +2347307 M6VBN Derekm123 +2347308 2E0RKJ Richard +2347309 M6LXM Andrew +2347310 2E0KLX ALEX +2347311 2E0RME Martin +2347312 2E0WTO Liz +2347313 2E0XXV Dave +2347314 G0AED Jerry +2347315 M7WTM David +2347316 M0XG BADARS +2347317 M0TKR Christopher +2347318 2E0JPV Jon +2347319 2E0FOA Jim +2347320 G5YL Krystyna +2347321 M0XJM M0XJM +2347322 M0ABH BobT +2347323 M3TOU Theo +2347324 M7DMP Shaun +2347325 M0KRR AlastairM0KRR +2347326 M0TVM Jez +2347327 M7BDK Jim +2347328 G6USG Garycomer +2347329 G7SAI Ellis +2347330 M1TVR MARK +2347331 2E0OBB Owen +2347332 M0AHD M0ahd +2347333 G6MMS Jeffrey +2347334 2E0UNE Neil +2347335 M7SMC M7SMC +2347336 2E0ZIL Liz +2347337 M7HGM Jon +2347338 M0WSP Sean +2347339 G0DZZ Johnny +2347340 M7GJB Gareth +2347341 M0FAQ Martin +2347342 G3ZPB Peter-G3ZPB +2347343 M6NSW Simon +2347344 M7TEC Russ +2347345 2E0BHC Luke +2347346 M7THR John +2347347 MB6FH David +2347348 M3HIM Felim +2347349 M3HER Frances +2347350 2E0NME Jess +2347351 M1DHV GRAHAM +2347352 G4BJD Gary +2347353 M0BOY AirBoy +2347354 M3HXS Matt +2347355 G4VKY Newsham +2347356 M3DCJ Pete +2347357 M1BOP Mark +2347358 2E0BZY Tom +2347359 M0KKA Cris +2347360 M0XKG Ken +2347361 M6YBB LEE +2347362 M0XLR Dan +2347363 G8OPA Philip +2347364 M1BQU Simon +2347365 G3UJB Brian +2347366 G8OQT John +2347367 G1HFS KEN +2347368 M7SJG Steve +2347369 G7NIZ Tony +2347370 M7BJD Brian +2347371 G0DYI Dave +2347372 M3LZM Aaron +2347373 M0TKM M0TKM +2347374 M7NPC Nigel +2347375 GB5CSG Coggeshall +2347376 G8CDG Neville +2347377 M7ROK ROK +2347378 M0WNU Paul +2347379 M6HVD Lyndon +2347380 G7IQJ G7iqj +2347381 2E0NXE Paul +2347382 M7EGG RICHARD +2347383 M6EOH Paul +2347384 2E0HYQ Ninesh +2347385 G4IPE G4IPE +2347386 M0ILU John +2347387 G4UDE Mike +2347388 M7HTL Sylwek +2347389 M0RVD Rob +2347390 G7ODQ Jason +2347391 G1HPD Tony +2347392 2E0FNU Stefano +2347393 M0CHE Che +2347394 G4FFY Ray +2347395 2E0RQO Richard +2347396 G0REP G1YIY +2347397 G7DPV BARONDELEY +2347398 2E0YYB Chris +2347399 G0VEH John +2347400 G1SPA Derek +2347401 M3OQS Brian +2347402 2E0HKA Chris +2347403 G7HVU Stuart +2347404 G3LRC Laindon +2347405 M7OOL Simon +2347406 2E0PLJ Nick +2347407 M0IYV TENNO +2347408 G4GHD G4GHD +2347409 M7ABX RUSS +2347410 G4YWX Allan +2347412 M0AIJ Charlie +2347413 M3GWO Gary +2347414 G4SBD John +2347416 M7RNL Scoggy +2347417 2E0BIC Mark +2347418 G6SSN Kevin +2347419 G1LVW Phil +2347420 M0BND Andy +2347421 M7SMN Si +2347422 G6DGK Gavin +2347423 G6YWX JOHN +2347424 M0IYP Graham +2347425 M6OEZ Charlie +2347426 M0IZH M0IZH +2347427 2E0MTK KEVIN +2347428 M7AHT Steve +2347429 G7RVT Trevor +2347430 M0YIT M0YITDMR +2347431 M6PDJ Peter +2347432 G8IMZ Arthur +2347433 G1NYZ Derek +2347434 2E0OCW Bill +2347436 G1ORP Lexus +2347437 G7HKP David +2347438 G3GHN Steve +2347439 G8APF David +2347440 2E1DRX Richard +2347441 G1LIZ Lizza +2347442 G8PAN Simon +2347443 M6KQK Paul +2347444 M6AEE Steve +2347445 G7FCJ Pat +2347447 2E0DID Dave +2347448 G0WSP Phil +2347449 M6IKK Ian +2347450 GB1FES Bob +2347451 M7AHP Dara +2347452 M7AHP Dara +2347453 G2PY Craig +2347454 G6XDZ Nigelxdz +2347455 GB0NSS NELSON +2347456 2E0HCT Pete +2347457 G7EOL Steve +2347458 M7LTM Lily +2347459 G6MJN Debbie +2347460 M3EUF Brent +2347461 M5IA Iftikhar +2347462 G0PBO Alan +2347463 G7MLC Gary +2347464 MB6NG MB6NG +2347465 M6TOR Darrell +2347466 M7AJV Richard +2347467 M1CVJ Stephanie +2347468 G1PLB Pat +2347469 M0JND Jim +2347470 M6FIZ Richard +2347471 2E0WZR Wes +2347472 G1DDS Denis +2347473 G7KPO Tom +2347474 G0FOZ Simon +2347475 M7APR April +2347477 M0XJN M0XJN +2347478 M0XYZ Ady +2347479 M6GNE Gary +2347480 G3YTW Graham +2347481 M7TOP TPage +2347482 G3MFO Peter +2347483 G0WHO Robert +2347484 M0JIM Jim +2347485 M0OPT Fred +2347486 M0REM Matt +2347487 M0SOM Mike +2347489 M0IZM PHIL +2347490 G4JDC Les +2347491 2E0WAT Ash +2347492 G7EOK G7EOK +2347493 M0VRF JohnB +2347494 M7AJR Graham +2347495 M0SIH M0SIH +2347496 M7SDF Scot +2347497 2E0SVS 2E0SVS +2347498 G4OJD Buddy +2347499 M7TFX TIM +2347502 2E0FJH John +2347503 M0MCT Matt +2347505 MX0MFR Mill +2347506 2E0TFZ Trev +2347507 G4VMR John +2347508 M0YJB David +2347509 2E0JLR Ben +2347510 G4YWX Allan +2347511 2E0FEB Stuart +2347512 M0LIT Clive +2347514 G0RAH Aleks +2347515 M7DVC Matt +2347516 G4IDF Dave +2347517 M7LCC Terry +2347519 M6IIQ Phill +2347520 G1EXK Simon +2347521 G3HEH Eddie +2347522 M7ESD Adrian +2347523 M7DJD Daniel +2347524 M1DED NIGEL +2347525 M7MPL Martin +2347526 M0ICJ Lukasz +2347527 M6HTP M6htp +2347529 G6DPS Martin +2347530 M6KXW Audrey +2347532 M7TAZ Abbie +2347533 M0BOV James +2347534 G7KTL Catie +2347535 M7HTY Sean +2347537 G8BGT Andy +2347538 G6XJZ David +2347539 G6JEF Steve +2347540 2E0MEV 2E0MEV +2347541 G8HCB Chris +2347542 M0PJV Ian +2347543 M0GPN Bryn +2347544 G7LJW Lee +2347545 M7WMM Toby +2347547 M7AKF Victor +2347548 M7AER Kevin +2347549 M0OSH Wojtek +2347550 G4BSC John +2347551 G1XLC Ed +2347552 2E0EHK Johno +2347553 2E1XDJ 21 +2347554 M0LSO Graham +2347555 G1ZPJ Paul +2347557 M0ILW Andy +2347558 G3OPH RICK +2347560 2E0MJN Matt +2347562 M7AFD Tony +2347563 M7MRB MrB589 +2347565 G7UGG Nigel +2347567 G1PRX Peter +2347568 M6RSC Juliet +2347570 G4HTZ Steve +2347571 2E0IJI Paul +2347572 2E0OLA Bart +2347573 G6AQQ Alan +2347574 M0SYL Sylwek +2347577 2E0FQE Drew 2351001 G0PRF John 2351002 G0PRF John 2351003 G7LWT Darren @@ -33385,7 +40020,6 @@ 2351065 M0CFM Andrew 2351066 G8SUG Geoff 2351067 G6VBJ Peter -2351068 G7OFR Barry 2351069 M6CXI Gary 2351070 2E0SDH Scott 2351071 2E0NKF Steven @@ -33662,7 +40296,6 @@ 2351343 2E0JBR Jamie 2351344 M0ZOL Zoli 2351345 M0DWQ Roger -2351346 G1DRA Patrick 2351347 G8ZQA Peter 2351348 2E0BHZ Trevor 2351349 G8ASI Mike @@ -33928,7 +40561,7 @@ 2351630 M3YEU James 2351631 M6EPR Anthony 2351632 G1VGF John -2351633 M3LOX Daren +2351633 2E0LXY Daren 2351634 2E0TNG Mark 2351635 G7UFI Barrie 2351636 M6BZY Inga @@ -33962,7 +40595,6 @@ 2351664 G1ZGZ Richard 2351665 M6SDM Martin 2351666 G1ZGZ Richard -2351667 M0PLO Paul 2351668 M0PME Barry 2351669 M6EWE Chris 2351670 M0XVT Steven @@ -34365,7 +40997,7 @@ 2352069 M0MDA Michael 2352070 G4AQV Karl 2352071 G8GJM Robert -2352072 M3IZB PAUL +2352072 2E0IZB Paul 2352073 M1PAC Philip 2352074 M0HPB Darren 2352075 G1AEQ Derek @@ -34532,7 +41164,7 @@ 2352239 2E0MRV Thomas 2352240 G8YTC Dean 2352241 G0NDF Chris -2352242 2E0JXP Dave +2352242 2E0JXP Jani 2352243 2E0VEK Kevin 2352244 2E0TEI Martyn 2352245 M0RYK Michael @@ -34884,7 +41516,7 @@ 2352592 M1TXI Bill 2352593 G1YHE Denis 2352594 G8FEZ Fraser -2352595 G7ILP Kevin +2352595 G7ILP Kev 2352596 M0IAM Clive 2352597 M6ESV Phil 2352598 2E0DDV Mike @@ -34898,7 +41530,7 @@ 2352606 2E0UMB Michael 2352607 M1BTR John 2352608 M6PFF Simon -2352609 2E0DIZ Stephen +2352609 M0PEL Stephen 2352610 G6KIA Christopher 2352611 G4WRX Dawn 2352612 M0PSD PAULINE @@ -34933,7 +41565,7 @@ 2352641 G0LOZ Ian 2352642 M6LCV Adam 2352643 M3HBI Craig -2352644 G4XYT Arthur +2352644 G4XYT Ian 2352645 M0GLP Garry 2352646 G4NRZ Keith 2352647 G8RBW Chris @@ -34964,7 +41596,7 @@ 2352672 G7RYE Ian 2352673 2E0PDP JOHN 2352674 M6LPI Neil -2352675 M6ORT Gregory +2352675 2E1GW Gregory 2352676 G4WKB John 2352677 M0WJW William 2352678 M0VMX Mark @@ -35314,7 +41946,7 @@ 2353028 GW8MLA Philip 2353029 MW0JHH Jeff 2353030 GW0KAX Petrie -2353031 GW0GVY Chris +2353031 MW0MLP Mark 2353032 MW0ECB Ken 2353033 GW1CUQ Nigel 2353034 2W0MMD David @@ -35559,7 +42191,7 @@ 2353273 GW6NKG BAZ 2353274 GW4AMZ Paulbds 2353275 GW6EWX Nick -2353276 MW0MKG Wizza +2353276 MW0MKG Mark 2353277 GW0DWQ Spud 2353278 GW0FJQ Alun 2353279 GW6BDM Chris @@ -35675,7 +42307,7 @@ 2353389 GW4KJW Gareth 2353390 GW6UMU Tony 2353391 2W0RDD Robert -2353392 MW6LMY Kevin +2353392 2W0NED Kevin 2353393 GW1OIK Chris 2353394 GW1DTA Mark 2353395 GW7AOE Guy @@ -35689,11 +42321,131 @@ 2353403 GW4UWD Peter 2353404 2W0MZS Mike 2353405 MW0TOF Jono101 +2353406 GW3RVG Sedge 2353407 GW6RRL Dave 2353408 GW8ZOE Steve 2353409 MW6PQU MW6PQU- 2353410 MW6YUC Mark 2353411 GW0JWC Paul +2353412 2W0MHQ Chris_Moody +2353413 GW0JWC Paul +2353414 MW0AQZ Wyn +2353415 MW0XDN Alun +2353416 MW0XDN Alun +2353417 2W0MMD DAVID +2353418 MW6VTP Marc +2353419 2W0YMS Mark +2353420 2W0TWE Cameron +2353421 MW0MVM Tony +2353422 GW8SJP Chris +2353423 MW0LQZ Gareth +2353424 MW6IVV Kendl +2353425 2W0NRE Fullbore +2353426 MW6ABC Franz +2353427 2W0OFS Gerald +2353428 MW6JFI Michael +2353429 GW0NPL Stuart +2353430 MW7MPW Marc +2353431 GW8SZL Dave +2353432 MW6SZL Declan +2353433 2W0DOE Chris +2353434 2W0LXT Luke +2353435 MW7NAT Nat +2353436 MW6LNJ Scott +2353437 GW4AMZ Paul +2353438 GW6XRE Brian +2353439 2W0YMS Mark +2353440 MB6IZM Mark +2353441 GW4GJA Ken +2353442 MW0MWZ Andy +2353443 2W0FFI Dai +2353444 GW4ZRW Steve +2353445 MW3XZB Samuel +2353446 MW6OZB David +2353447 MW6GOJ Tim +2353448 MW0SGX John +2353449 MW0LNA Derek +2353450 2W0NED Kevin +2353451 GW7HXF John +2353452 2W0FFN Robert +2353453 2W0RQC Robert +2353454 GW7RKC Andrew +2353455 MW0TJS MW0TJS +2353456 GW0IXK ROBIN +2353457 2W0XLT Billy +2353458 MW0ODY Chris +2353459 2W0SYS Mike +2353460 2W0VTP Marc +2353461 MW7MPM Martin +2353462 GW6BXU Eddie +2353463 GW4XCA Robin +2353464 MW6ORJ Kevin +2353465 2W0RGL Jorge +2353466 M3SOC Neil +2353467 GW0LGN John +2353468 GW4NBY Keith +2353469 MW3MCJ Caroline +2353470 2W0LPU Lee +2353471 2W0DQT ALLAN +2353472 2W0FKO Terry +2353473 MW0HTG Goronwy +2353474 MW3YHX LEVENT +2353475 MW0GBR GordonMWGBR +2353476 MW6PQB Lewys +2353477 MW6PYH Gareth +2353478 MW7PJH Paul +2353479 GW1UMH Rod +2353480 MW7NAT Nat +2353481 2W0NKS Martin +2353482 MB6ICG Steve +2353483 GW7IAK Chris +2353484 GW4PAF John +2353485 MW0ICE Chris +2353486 2W0XBE SHANE +2353487 2W0KLZ Ken +2353488 2W1ADO Ken +2353489 2W1DGM John +2353490 MW0TTF Daryll +2353491 GC0EZQ Llanelli +2353492 MW1BAJ James +2353493 M6PQU Ethan +2353494 GW8VFQ Bob +2353495 2W0FQD Martin +2353496 2W0LLT Lloyd +2353497 2W0GAQ Ifor +2353498 M0IAV ROB +2353499 MW7GNN Simon +2353500 MW6HLG Helene +2353501 GW4JDZ DAVID +2353502 GW4JGW KEN +2353503 GW7CKR Bob +2353504 2W0TUZ Terrence +2353505 MW3YNA Mike +2353506 GW4WND Roger +2353507 MW6GWP Mw6gwp +2353508 MB6IPO Mark +2353509 MW0GCT Stuart +2353510 2W0UAS Colin +2353511 2W0ZAA 2W0ZAA +2353512 MW0CXH Peter +2353513 GW7HOC DARREN +2353514 2W0PQU 2W0PQU- +2353515 2W0RMY Adrian +2353516 MW7CCS Mw7ccs +2353517 MW6JNP Jason +2353518 2W0BTQ Tom +2353519 2W0HMF JP. +2353520 GW2ABJ Gary +2353521 MW7EJJ Emma +2353522 MW7CCS Chris +2353523 MW6TMQ TONY +2353524 MW7OKW Mr +2353525 MW7TMA Tim +2353526 MW3PKC Len +2353527 MW7VHT JohnB +2353528 MW6LTR Christopher +2353529 MW0XGC GOGS +2353530 2W0YUC Mark 2354001 MM0MBK Mark 2354002 MM0MBK Mark 2354003 MM0MBK Mark @@ -36041,7 +42793,7 @@ 2354345 2M0RRS Daz 2354346 MB6PE Jonathan 2354347 GM1YME Scotsbear -2354348 2M0NBW Craig +2354348 MM0NBW Craig 2354349 GM0UDL Andrew 2354350 MM0MOB MM0MOB 2354351 MM6FXN James @@ -36056,7 +42808,7 @@ 2354360 MM6VKO Kevin 2354361 MM3DHN Paul-scotsman 2354362 2M0KHH Brian -2354363 2M0NBW Craig +2354363 MM0NBW Craig 2354364 MM0DXD Jim 2354365 M6VOD Andy 2354366 GM0TQK Kenny @@ -36150,7 +42902,7 @@ 2354454 GM4SJB John 2354455 GM7WJI DCMK 2354456 GM0OTI John -2354457 MM60RU Michael +2354457 MM6ORU Michael 2354458 MM6XCS Cameron 2354459 GM1CUC Howard 2354460 GM0BKS Graeme @@ -36168,7 +42920,7 @@ 2354472 MM1DHU Paddy 2354473 MM6LOY Charlie 2354474 2M0DIB Cathie -2354475 MM6OEJ Robert +2354475 2M0MSU Robert 2354476 MM0RHL EdinHacklab 2354477 GM0CII Bill 2354478 MM6SSI Shane @@ -36195,9 +42947,192 @@ 2354499 GM0PWS Neil_Doherty 2354500 MM0CZK Charlie 2354501 2M0EFD Aidan +2354502 MM0PAZ Stuart 2354503 GM6AOJ Bill 2354504 GM0CXQ Peter 2354505 MM0ILC Steven +2354506 GM7HHB John +2354507 GM0UUB Graham +2354508 MM6LMP Alfie +2354509 MM3YVH JOHN +2354510 GM8KXF Kilmorna +2354511 GM8VAM George +2354512 GM4AOR Ken +2354513 GM6UFJ Andy +2354514 2M0VNW 2m0vnw +2354515 MM7AGC Angus +2354516 GM4WED Nick +2354517 2M0LQF James +2354518 MM0VUV Robert +2354519 MM1BJZ Paul/MM1BJZ +2354520 GM0EDJ Paul +2354521 GM7LSI Johnny +2354522 2M0PIJ Gordon +2354523 MM0XET Garry +2354524 MM6HLV Charlie +2354525 MM6AEB Kevin +2354526 GM1XEA Peter +2354527 GM8LNH Roger +2354528 2M0KTB Ian +2354529 GM4RZW Dave +2354530 MM6JJB JOHN +2354531 MM3VBF Scott +2354532 MM6GYR GREG +2354533 MM1EWA MM1EWA +2354534 2M1DZS Callum +2354535 2M0EZA Ronan +2354536 MM7WGL William +2354537 GM7VZV David +2354538 2M0VUS Chasaman +2354539 GM7MTK Julian +2354540 2M0ETJ Glyn +2354541 MM0JOX Paddy +2354542 GM0CFW Kenneth +2354543 GM7SVK Doug +2354544 MM0GLM James +2354545 2M0XOA Arno +2354546 GM0PHG Dennis +2354547 MM6HEZ William +2354548 MM5XT MM5XT +2354549 2M0MKZ Michael +2354550 MM0AWU G +2354551 2M0IBG Gee +2354552 GM6JIC Leonard +2354553 GM4SQM David +2354554 GM4CXP Del +2354555 MM7CFC Shaun +2354556 GM0SCA Simon +2354557 2M0MMN Bob +2354558 2M0VKO Stuart +2354559 2M0TXY Alan +2354560 2M0RTO Martin +2354561 MB6JD MB6JD +2354562 GM0KDF Robin +2354563 2M1EBJ Derek +2354564 MM0EQE Alan +2354565 GM0LHK Marty +2354566 MM0CWJ Seamus +2354567 MM6TEW Tracey +2354568 GM8UQX Simon +2354569 MM0BAC Col +2354570 2M0FDT STEPHEN +2354571 2M0ODP Dave +2354572 MM0HUF Stewart +2354573 GM4XHH Bob +2354574 MM0HDA Ben +2354575 MS0SIA SIDX +2354576 MM0MZW Mike +2354577 2M0XCS Cameron +2354578 2M0WUE David +2354579 2M0YBC Ben +2354580 MM0BTD Bob +2354581 2M1DHG Garry +2354582 GM7SAK Alistair +2354583 GM0SCA Simon +2354584 MM6VGM Graham +2354585 MM0RDT Robert +2354586 MM0LQF James +2354587 2M0MSU Robert +2354588 MM0XCS Cameron +2354589 MM0IVR Ronan +2354590 MM6BWS Bruce +2354591 GM4NNH Jim +2354592 2M0JST Jon +2354593 2M0RBQ Roberta +2354594 GM0HBF Charles +2354595 GM4KHE Graeme +2354596 GM1MSS IainCoates +2354597 MM7LMM Liam +2354598 2M0AIE Matt +2354599 MM0AAL Alfie +2354600 GM0GFL Tony +2354601 GM6PER GM6PER +2354602 GM4GVJ Gavin +2354603 MM0MMQ Bob +2354604 MM6WEB Jack +2354605 2M1EUV Euan +2354606 2M0MMN Bob +2354607 2M0YTD Tim +2354608 MM7WAB Hairy +2354609 GM0DYU Mike +2354610 MM6DAT Ian +2354611 2M0WEV GEO +2354612 2M0MGM Matt +2354613 MM0YMG Malcolm +2354614 GM8AVM Ian +2354615 MM0GSQ Arthur +2354616 GM0AEG Davidgreatorex@btint +2354617 GM1YRD Jomojo +2354618 2M0LSG Simon +2354619 MM6ELW Paul +2354620 M7CMT Glenn +2354621 MM1DEA Grahme +2354622 MM0ZZB Aeneas +2354623 MM0VBC Ben +2354624 MM0HAR Harry +2354625 GM6ZAK Andy +2354626 MM0KNN CHRISTOPHER +2354627 GM0TKC Tom +2354628 2M0JVR Victor +2354629 GM1XHZ Tom +2354630 MB6EL Garry +2354631 MM1ESW Stuart +2354632 MM0DHQ MM0DHQ +2354633 GM1MLW Colin +2354634 GM5PEB Paul +2354635 MM6ZHC PC +2354636 MM6EJO Bryan +2354637 MM7EHE Elizabeth +2354638 2M0ZBG Phil +2354639 MM6WKV Ian +2354640 MM3ELT Alister +2354641 MM7OWO Logan +2354642 GM4OIJ Brian +2354643 MM7ASP ALAN +2354644 GM7IEU Duncan +2354645 GM7LJE JohnF +2354646 MM0RPP Richard +2354647 GM0VUY Richard +2354648 MM7GEM Kenny +2354649 MM7MCM Archie +2354650 2M0YFY Christopher +2354651 MM6MLT PaulC +2354652 GM6NX Stirling +2354653 MM3TWA Ian +2354654 MM6PMQ Mm6pmq +2354655 MM7ALZ Alan +2354656 MM6IXH Robert +2354657 MM7XRT Richusx +2354658 MM0ROR Iain +2354659 MM0XME Simon +2354660 MM6SSI Shane +2354661 GM1MRS Les +2354662 MM0YSO Ana +2354663 2M0FMU Angus +2354664 MM3GQR Stella +2354665 2M0INM Ian +2354666 MM6LFN Chic +2354667 GM8RTI John +2354668 GM6KDD David +2354669 MM7CEH Clark +2354670 MM6OBU Keven +2354671 2M0FPI MICHAEL +2354672 MM0VIV Bryan +2354673 MM7AJJ Michail +2354674 MM7AJE Paul +2354675 MM7AJI Bartek +2354676 MM0LUP Ally +2354677 GM8JCF Peter +2354678 MM6CBH Colin +2354679 GM4LUD Rod +2354680 GM4UYZ Bob +2354681 GM0EZP Ernie +2354683 MM6JEE James +2354684 GM0WDD Gavin +2354685 MM0PZL JC +2354686 GM0CQV Brendan +2354687 2M0WHX David +2354688 GM7FPN Ali 2355001 MI3WWF Mark 2355002 GI8VKA Roy 2355003 MI0AAZ John @@ -36359,7 +43294,7 @@ 2355160 GI4XSF Mike 2355161 MI0BDX Alex 2355162 MI6GPQ Davy -2355163 GI0LRB Poolshark +2355163 GI0LRB Paul 2355164 MI0OPM DAVID 2355165 GI3ZTL F 2355166 MI6PDY Bigears206 @@ -36435,7 +43370,7 @@ 2355236 MI0HOZ Michael 2355237 GI7FCM NIbiker 2355238 GI4WTT Sandman -2355239 MI0AKU Trevor +2355239 MN0AKU Foyle 2355240 MI3CQR MI3CQR 2355241 GI0FKM Geoff 2355242 MI0DYJ Ronnie @@ -36586,7 +43521,7 @@ 2355388 MI6NQD IAN 2355389 MI3UIW JASON 2355390 MI6OXI Claire -2355391 MI6WGE GREGORY +2355391 2I0WGW Gregory 2355392 GB9RAF Thomas 2355393 GB4SOS Thomas 2355394 MI0TLG William @@ -36611,15 +43546,80 @@ 2355413 MI6XIO Alan 2355414 2I0EUX Steven 2355415 MI0JNR Moore +2355416 GI4SIP John 2355417 MI6OGF Jim 2355418 GI6JMD Jeremy 2355419 MI0JLC Stephen_MI0JLC 2355420 MI3EYB Paddy 2355421 MI6RCV MI6RCV +2355422 GI0RQK Colin 2355423 GI4TMB Mike 2355424 MI5AFK Harper 2355425 MN0VFW MUARC +2355426 MI6UGE Gary 2355427 M6UGE Gary +2355428 MI0JST Victor +2355429 GB1WWC Thomas +2355430 GB0GPF Grey +2355431 MI5KAW David +2355432 2I0HAW Chris +2355433 MI0JPC James +2355434 2I0NYL Lynette +2355435 MI0MOD Thomas +2355436 MI7CAT CATHERINE +2355437 MI7JOE Joe +2355438 MI6IBR Barry +2355439 GI0JPO WILLIAM +2355440 MI0ITQ Steven +2355441 MI0PKO Peter +2355442 GI0VKP BOB +2355443 MI0WHX Brian +2355444 2I0RGV ROBMAC +2355445 MI3RLA ANDREW +2355446 MI3RYJ James +2355447 GI4NFH Ray +2355448 MI0SRR Dave +2355449 GI4RKC Seamus +2355450 MI7AAM Mick +2355451 GI6JPO Herbie +2355452 MI3GAM Graham +2355453 MB6RK Rickie +2355454 MN0OPC Oville +2355455 MI6WGP MI6WGP +2355456 2I0WLG Gary +2355457 MI7BUD Andrew +2355458 MI0PJL Paul +2355459 GI0MSI Eric +2355460 MI7MCS Archie +2355461 MI6PHQ Paul +2355462 GI4MUN Alan +2355463 MI0RMK Ann +2355464 MI6UNC COLIN +2355465 2I0FKF Davy +2355466 GI0BEY Scotty +2355467 GB0OGC British +2355468 GI4OUP Sam +2355469 MI7ABV Marty +2355470 GI7KMC Jonathan +2355471 MI3RBM Bobbie +2355472 MI0MTU Jonny +2355473 MI7RPG Marty +2355474 MI7MHZ Darren +2355475 MI7AJD Davy +2355476 MI6OIG Mick +2355477 MI7LJR Leo +2355478 MI7AIS Anthony +2355479 GI1PBO Piper +2355480 2I0VOQ David +2355481 GI4LVC Jack +2355482 GI0URI Stan +2355483 MI7EMT Nj +2355484 MI3AIN Robert +2355485 GI4DOH Richard +2355486 GI0FZT Peter +2355488 GI0LAM Geoff +2355489 GI4GID JOE +2355490 GI4MJD June 2356001 GD6XHG Ed 2356002 GD6XHG Ed 2356003 GD0NFN John @@ -36662,6 +43662,11 @@ 2356040 GD3ZZN Martyn 2356041 GD3YTE Peter 2356042 GD7KAM Andy +2356043 2D0OMY Mark +2356044 2D0KFF Kim +2356045 MD0OMY Mark +2356046 MD0IOM Justmike +2356047 GD4RVQ Jon 2357001 GJ6WRI Steve 2357003 GJ7LJJ GJ7LJJ 2357004 GJ8PVL GJ8PVL @@ -36670,6 +43675,9 @@ 2357007 GJ7DTA Ant 2357008 G4ING John 2357009 2E0TGK Rich +2357010 MJ6WJG JEG105 +2357011 2E0TGK Rich +2357012 G4YTB Dave 2381001 OZ2CA Soren 2381002 5P4Z Herman 2381003 5P5V Find @@ -36797,6 +43805,18 @@ 2381125 OZ1BYR Jeppe 2381126 OZ1HMN Lars 2381127 OZ1BYR Jeppe +2381128 OZ1DKP Leo +2381129 OZ5CRC Claus +2381130 OZ1PBJ Oz1pbj +2381131 OZ4CK Christian +2381132 OZ1JFK Brian +2381133 OZ0AZ Oz0az +2381134 OZ5VA Willy +2381135 OZ3AAJ Kim +2381136 OZ9HC Henrik +2381137 OZ5XE Poul +2381138 OZ7OU OZ7OU +2381139 OZ7BN Bernd 2382001 OZ6C Kim 2382002 OZ1JN Jesper 2382003 OZ3HP Hardy @@ -36984,7 +44004,52 @@ 2382185 5P2BA Frank 2382186 OZ1JZN OZ1JZN 2382187 OZ8EHP Elisabeth +2382188 OZ1LWT Jens +2382189 OZ2JJO Jesper +2382190 OZ0M Jesper +2382191 OZ1CIM OZ1CIM +2382192 OZ1AZO OZ1AZO +2382193 OZ2EVP Erik +2382194 OZ1KEF Kim +2382195 OZ1IAS Jp +2382196 OZ1DJV Ove +2382197 OZ1GZ Jesper +2382198 OZ1EOR Flemming +2382199 OZ3FMR Frank +2382200 OZ7CK Clauskorsholm +2382201 OV9AA Jakob +2382202 OZ1T Peter +2382203 OZ3MIK Michael +2382204 OZ5ADW Ivan +2382205 OZ8CY Christian +2382206 OZ9NS Smeden +2382207 OZ9RH Robert +2382208 OZ3FRU Torben +2382209 OZ1IAG Henrik +2382210 OZ1KXH Svend +2382211 OZ08HS Henrik +2382212 OZ8HS Henrik +2382213 OZ8AAH Lars +2382214 OZ9HMN Heine +2382215 OU9A Jens +2382216 OZ1EWK Ib +2382217 OZ7JP Jens +2382218 OZ5ACX Jens +2382219 OZ2ACV Jens +2382220 OZ1EEE Erling +2382221 OZ1BXM OZ1BXM-Lars 2382222 OZ2COE Charsten +2382223 OZ3DSS Karup-Radiopejderne +2382224 OZ2ODJ Ole +2382225 OZ8KWB Keld +2382226 OZ3JB Oz3jb +2382227 OZ7MKS OZ7MKS-Michael +2382228 OZ1GBJ OZ1GBJ-Anders +2382229 OZ1BEE Keld +2382230 OZ5EM Ole +2382231 OZ1DKQ Kaj +2382232 OZ7SP OZ7SP/J +2382233 OZ1LHM Paul 2383001 OZ1BM Brian 2383002 OZ1KFY Christian 2383003 OZ3DM Dennis @@ -37244,6 +44309,42 @@ 2383257 OZ6IG Ingemann 2383258 OZ8KC Georg 2383259 OZ1JBI CJF +2383260 OZ9HZ Marc +2383261 OZ1SLN Sune +2383262 OZ3HLF Leif +2383263 OZ3SR Soren +2383264 OZ2BKH Ib +2383265 OZ7HF Harald +2383266 OZ1JRS Carsten +2383267 OZ2JBJ Johnny +2383268 OZ8FF Glen +2383269 OZ2LP Leif +2383270 OZ0JB Jacob +2383271 OZ1FDZ Frank +2383272 OZ3JU Kaj +2383273 OZ5ABY Thorkild +2383274 OZ3LFG Gregersen +2383275 OZ1KBL Claus +2383276 OZ3DTP Dennis +2383277 OZ3ZE Kenny +2383278 OZ1DTA Polle +2383279 OZ4RTX Dennis +2383280 OZ5KSE Karlo +2383281 OZ2MCH Anne +2383282 OZ1BPP Lars +2383283 OZ1M Terje +2383284 OZ1PDE Preben +2383285 OZ7TBE OZ7TBE +2383286 OZ2KZN Kurt +2383287 OZ9HBR Heintje +2383288 OZ2AJJ Aage +2383289 OZ7U Bjarne +2383290 OZ1J4K OZ1J4K +2383291 OZ2BBH BENT +2383292 OZ1KBT Rene +2383293 OZ5JQ Kurt +2383294 OZ1JJX Lars +2383295 OZ6JS Julius 2383666 OZ9XQ Mogens 2384001 OZ3MAJ Martin 2384002 OZ3MAJ Martin @@ -37526,7 +44627,34 @@ 2384280 5Q7IA Joshua 2384281 OZ3KL Kenneth 2384282 OZ1FTG Carsten +2384283 OZ4AA Anders +2384284 OZ1TA Morten +2384285 OZ1FTG OZ1FTG +2384286 OZ9ALH Alfred +2384287 OZ7TN Tino +2384288 OZ8PM OZ8PM +2384289 OZ8PM Meleschko +2384290 OZ4ABR Dkpilot +2384291 OZ6MK Mogens +2384292 OZ5ACI Frank +2384293 OV9PL Poul +2384294 OZ1GRV Poul +2384295 OZ7HDS OZ7HDS +2384296 OZ1LIV Claus +2384297 OZ2D Kim +2384298 OZ7AM Alex +2384299 OZ1GRV Ralf 2384300 OZ9ELS Niels +2384301 OZ5OPK Claus +2384302 OZ92ML Martin +2384303 OZ1JJO Joern +2384304 OZ1GFB OZ1GFB +2384305 OZ3JH Jesper +2384306 OZ1BKK OZ1BKK-David +2384307 5P2Z Jesper +2384308 OZ4BKI Brian +2384309 OZ1NKS Jacob +2384310 OZ1LJA Henrik 2384444 OZ0GC Gifted 2384500 OZ1HWN Einar 2384666 OZ1AFR Find @@ -37777,6 +44905,46 @@ 2385245 OV9ZB Rene 2385246 OZ6LSN Laurits 2385247 OZ3RDH Robert +2385248 OZ3EP Erik +2385249 5P4K Jens +2385250 OZ4PAT George +2385251 OZ4ZG OZ4ZG +2385252 OZ1IDG OZ1IDG +2385253 OZ9ACF OLE +2385254 OZ7IT Jorgen +2385255 OZ1FKU Ole +2385256 OZ2JBR OZ2JBR +2385257 OZ1FKU Ole +2385258 OZ1AFS Ebbe +2385259 OZ2DIV Hans +2385260 OZ2FES Torben +2385261 OZ2ABB Soren +2385262 OZ5KA Ammitz +2385263 OZ0CS Lars +2385264 OZ9P Jes +2385265 OZ9IU Oz9iu +2385266 OZ6ABJ Martin +2385267 OZ1ACH Ove +2385268 OZ2LMS Lone +2385269 OZ1VS Villy +2385270 OZ2JDP Ditlev +2385271 OZ1OVE Ove +2385272 OZ4LR Lene +2385273 OZ0J Joe +2385274 OZ5QK OZ5QK +2385275 OZ1GTX OZ1GTX-Martin +2385276 5P1Q Rolf +2385277 OZ1LVN Lars +2385278 OZ12Q Lone +2385279 OZ2KCH Kasper +2385280 OZ8MJ Morten +2385281 OZ2MC Morten +2385282 OZ1BTZ OZ1BTZ-MICHAEL +2385283 OV1CDX Frank +2385284 OZ1KF Ib +2385285 OZ1HYI OZ1HYI +2385286 OZ1PER Per +2385287 OZ1AQW Ejnerts 2385500 OZ1KONG Hans 2385555 OZ3BB Mogens 2385959 OZ1DR Alex @@ -37794,7 +44962,7 @@ 2400012 SM0WTN Peter 2400013 SA0CCI Mikael 2400014 SA0BFF Bjoern -2400015 SA3BON Mikael +2400015 SA0BON Mikael 2400016 SM0NTM Leif 2400017 SM0WQT Thomas 2400018 SA0CIB Sebastian @@ -37870,7 +45038,7 @@ 2400088 SA0CIP Erik 2400089 SM0VDT Tobbe 2400090 SM0UCC Kurt -2400091 SM0XOH Michael +2400091 SM7XOH Michael 2400092 SA0CLN Nalle 2400093 SM0UAO Bert-Ove 2400094 SA0MCW Magnus @@ -37894,7 +45062,7 @@ 2400112 SM0IFP Jan-Olof 2400113 SK0SSA Foereningen 2400114 SA0CKX Thomas -2400115 SA0BOO Jane +2400115 SA0BOO Janne 2400116 SM0OTX Gunnar 2400117 SM0OTY Nils-olov 2400118 SM0WLL Ulf @@ -38077,8 +45245,86 @@ 2400296 SM0VWM Anders 2400297 SA0AZX Tomas 2400298 SA0KOM Kent +2400299 SA0BKW Stefan +2400300 SA0AZS Carl-Mikael +2400301 SA0BRW Christer +2400302 SA0BSE Ehirwing +2400303 SA0MAR Martin +2400304 SM0TCZ Hakan +2400305 SM0JST Thomas +2400306 SM0OOM Mats +2400307 SA0MTH Thomas +2400308 SA0AZT SA0AZT +2400309 SL0ZAS NackaRA +2400310 SA0SAM Robert +2400311 SA0CPU SA0CPU +2400312 SA0BMV SA0BMV +2400313 SM0IWP Tomas +2400314 SM0RPT Johan +2400315 SM0NEZ Jan +2400316 SM0FGT Keijo +2400317 SM0GBG Johan +2400318 SA0BXD Uno +2400319 SM0BWM Torgny +2400320 SM0AYA Mikael +2400321 SM0BTP Mats +2400322 SM0YPV Janne +2400323 SM0NSJ Matt +2400324 SA0PTT Stellan +2400325 SM0DEL Sune +2400326 SA0DEM Johannes +2400327 SM5DWF Peder +2400328 SM0UQT Robert +2400329 SA0PMA Palle +2400330 SA0BZI Martin +2400331 SM0UJM Martin +2400332 SM0TAE Roberg +2400333 SA0OHT Slotte +2400334 SA0BDC RUDI +2400335 SM0SUQ YOLO +2400336 SA0BSJ SA0BSJ +2400337 SM0PQB Jacek +2400338 SA0LHN Lars +2400339 SA0PDX Stejo +2400340 SA0AAM Kynigos74 +2400341 SM0FDO Lars +2400342 SM0SYQ Ingemar +2400343 SA0HNH Nicholas +2400344 SM0XPK Peder +2400345 SM0OAX Peter +2400346 SK0XW SK0XW +2400347 SM0HCI Olle +2400348 SM0XDB Tarmo +2400349 SA7CNG Alex +2400350 SA0IBO Ingvar +2400351 SM0GBY Erik +2400352 SK0ZA SK0ZA +2400353 SM0WTN Peter +2400354 SA0BUX Lars +2400355 SM0VPE Lennart +2400356 SM0TSE Mikael +2400357 SM0AHH Hans +2400358 SM0TPH Tom +2400359 SA0XXX Peter +2400360 SM0YNP Erik +2400361 SA0BMI Birger +2400362 SC0N Tore +2400363 SM5HF Bjoern +2400364 SA0BOP Johan +2400365 SM0JHB Hakan +2400366 SA0BOP Johan +2400367 SM0NWE Per +2400368 SM0UKG Goeran +2400369 SM0GZF Matte +2400370 SM0KBW Ben +2400371 SM0MMC Mikael +2400372 SA0PAL Christer +2400373 SM0YDE Rolf +2400374 SM0KDG Dag 2401001 SM5IGF Staffan 2401002 SM1NVX Dagge +2401003 SA1CCQ Eddie +2401004 SM1LXX Dag 2402001 SA2CMY Tomas 2402002 SA2BNO Peter 2402003 SA2CJG Mikael @@ -38147,7 +45393,27 @@ 2402066 SM2OWQ Juha 2402067 SM2FQB SM2FQB 2402068 SM2S Kari +2402069 SM2SHX Birger 2402070 SM2YHP Carl-Fredrik +2402071 SA2MAT Mattias +2402072 SM2EKA Rune +2402073 SM2YZY Christer +2402074 SA2BDO Patrik +2402075 SE9FRE Fredrik +2402076 SM2GSR Bjorn +2402077 SK2HG Kalix +2402078 SM2YKA Martin +2402079 SM2IQR Rolf +2402080 SM2YJK Lacrits68 +2402081 SM2FXT Jan +2402082 SA2AXJ Bo +2402083 SA2AXJ Bosse +2402084 SA2BCN Goeran +2402085 SM2VSD Jonas +2402086 SM2PDT SM2PDT +2402087 SM2YUW David +2402088 SM2MTR Per +2402089 SM2MZC Rolf 2403001 SM3XZF Fredrik 2403002 SA3BDE Martin 2403003 SA3BPE Henrik @@ -38244,7 +45510,7 @@ 2403094 SM3WLX Tjatte 2403095 SA3CFY Ulf 2403096 SM3BLW Gus -2403097 SG3BDF Nille2 +2403097 SG3BDF Ola 2403098 SG3VRO Kenneth 2403099 SA3XEL Axel 2403100 SG3P Gunnar @@ -38299,6 +45565,46 @@ 2403149 SM3GQC Bertil 2403150 SM3YBA Soelve 2403151 SM3XLI Peder +2403152 SK3GA SK3GA +2403153 SM3MZY Rune +2403154 SM3FT Lars +2403155 SA3DKA Haakan +2403156 SM3IRD Rolf +2403157 SM7ORA Lasse +2403158 SM3ORA Lars +2403159 SA3BDU Peter +2403160 SM3UXV Marko +2403161 SA3RIT Mick +2403162 SA3PJN Patrik +2403163 SM3HZA Matz +2403164 SM3AXN Sune +2403165 SM3ZCL NORDLUNDHANS +2403166 SA3KUD Daniel +2403167 SM3VRG K-G +2403168 SM3UXP Kalle +2403169 SA3BDM Ove +2403170 SA3BWT Tomas +2403171 SM3GSJ Roger +2403172 SM3GVP Bjoern +2403173 SA3BYC Johan +2403174 SA3OMI Andreas +2403175 SM3XJJ Peter +2403176 SM3FBI Lars +2403177 SM3KHW Jan +2403178 SA3CFT Anders +2403179 SA3CJF Marina +2403180 SM3DTQ Inge +2403181 SA3CDP Ulf +2403182 SM3GQP Gullik +2403183 SM3WTZ Hans +2403184 SM3MLX Kris +2403185 SA3VCC Buffy +2403186 SM3XHT Lars +2403187 SM3GFN Ingvar +2403188 SM3EVR Tord +2403189 SM3YKF Sm3ykf +2403190 SA3BYC Johan +2403191 SA3GGN John 2404001 SM4XBL Christopher 2404002 SM4WOA Claes 2404003 SM4WWO Robert @@ -38399,6 +45705,32 @@ 2404098 SM4VLR Rolf 2404099 SK4AO SK4AO 2404100 SM4SIT Soelve +2404101 SM4KEL Peter +2404102 SM4YPI Emil +2404103 SA4THA Thorbjorn +2404104 SA4AJF AndersE +2404105 SM4YXA Mikael +2404106 SM4XFJ SM4XFJ +2404107 SM4YVU Fredrik +2404108 SL4ZH FRO +2404109 SM4MXN Jan +2404110 SM4LRA Chris +2404111 SM4DJM Kaare +2404112 SM6GZL Leif +2404113 SM4IHY Gunnar +2404114 SM4IPX Hasse +2404115 SA4JOY Johannes +2404116 SM4VWD SM4VWD +2404117 SM4IQA Bo +2404118 SM4LRA Chris +2404119 SM4RHU Terje +2404120 SM4YCW Walter +2404121 SM4PFF Ulf +2404122 SA4AVD Sinclairhacker +2404123 SM4IYF Stefan +2404124 SM4QE Ake +2404125 SK4AV KSA +2404126 SM4BBO Tommy 2405001 SM5OEM Ronny 2405002 SM5BMK Anders 2405003 SM5ULX Morgan @@ -38407,7 +45739,7 @@ 2405006 SM5SIC Goeran 2405007 SM5EZN Birger 2405008 SM5TAH Mats -2405009 SM5SFG Joakim +2405009 SM6SFG Joakim 2405010 SM5UKP Mikael 2405011 SA5BJY Joakim 2405012 SM5BMK Anders @@ -38525,7 +45857,7 @@ 2405124 SA5BZT Ken 2405125 SM5UYV SM5UYV 2405126 SG5RVH Rob -2405127 SA5KBE SA5KBE +2405127 SA5KBE Klas 2405128 SM5XMS Joergen 2405129 SM5WXF Michael 2405130 SM5WGY Sven @@ -38576,6 +45908,66 @@ 2405175 SA5QED David 2405176 SM5NPV Tobbe 2405177 SA5BVH Larsson +2405178 SM5FGQ Jan +2405179 SM5VIH Bengt +2405180 SK5DB Uppsala +2405181 SK5WB EraK +2405182 SL5ZZC FRO +2405183 SL5ZXN FRO +2405184 SM5UFB Goeran +2405185 SI5B Socuter +2405186 SA5SSK Tobias +2405187 SM5ZEI Peter +2405188 SK5WB Enkopings +2405189 SM5WLW Anders +2405190 SM5NUZ SM5NUZ +2405191 SM5VXY Gert +2405192 SM5ZEI Peter +2405193 SM5XGJ Jan +2405194 SA5BGX Nils +2405195 SA5GIN Jacob +2405196 SA7BRK Amer +2405197 SA5BNS Soren +2405198 SM5YJM Joakim +2405199 SA5VOX SA5VOX +2405200 SA5GNO Gunnar +2405201 SA5SSB Iliyan +2405202 SA5DFR Daniel +2405203 SA5GRV Gravkai +2405204 SM5WYH Len +2405205 SA5ROJ BORHAN +2405206 SA5PGR Per +2405207 SM5RN Derek +2405208 SA5DBT Tony +2405209 SA5DBC SA5DBC +2405210 SM5UGF Fritte +2405211 SG5CMG Clarence +2405212 SM5FQQ Jan +2405213 SA5BNU Johan +2405214 SM5LBR Rainer +2405215 SM5PBT Bosse +2405216 SA5TGB Peter +2405217 SA5SEL Stefan +2405218 SA5UTR Andreas +2405219 SA5OBE Urban +2405220 SA6UTR Andreas +2405221 SA5ACR SA5ACR +2405222 SM5SYO Mike +2405223 SM5NZX Thomas +2405224 SM5JBF Peter +2405225 SM5YSM Carl +2405226 SM5KNJ Jan +2405227 SA5FOX Jocke +2405228 SM5LYP Karl +2405229 SA5TTL Bjoern +2405230 SM5PSM Urban +2405231 SM5VOH Thomas +2405232 SA5AGY Lasse +2405233 SA5JOB Joakim +2405234 SM5FMS Thomas +2405235 SA5AVO Herr +2405236 SA5REL Roland +2405237 SA5CAB Fredrik 2406001 SM6TKT Claes 2406002 SM6TKT Claes 2406003 SA6BPC Christian @@ -38834,6 +46226,59 @@ 2406257 SM6GSC Jan 2406258 SM6KIU Clas 2406259 SM6RRP Crister +2406260 SA6BSB Mikael +2406261 SM6NTR Peter +2406262 SM6EXB Soeren +2406263 SA6ROS Dalle +2406264 SM6HJC Tommy +2406265 SM6SIM Bosse +2406266 SA6BSC Robert +2406267 SM6UTB Thomas +2406268 SK6BA M.A.R.K +2406269 SM6LNJ Peter +2406270 SM6BWD Tomas +2406271 SA6JAB Jan +2406272 SA6MCM Tobbe +2406273 SM6NPE Frank +2406274 SA6YLE Michelle +2406275 SA6BTG Lars +2406276 SM6BGP Gunnar +2406277 SM6WGU Morgan +2406278 SM6CYX Gunnar +2406279 SM6SUB Chris +2406280 SM6KOB Bonny +2406281 SA6FWM Cosmin +2406282 SM6VFJ Magnus +2406283 SM6SXJ Erik +2406284 SA6RBI Ragnhild +2406285 SM6CVT Frank +2406286 SA6ZEN Peter +2406287 SM6JVU Anders +2406288 SM6MDC Ulf +2406289 SA6JAW Artur +2406290 SM6VIX Fnord +2406291 SA6DMR Daniel +2406292 SA6HAK Torsten +2406293 SM6MIS Sten +2406294 SM6WLH Anders +2406295 SM6MJW Christer +2406296 SA6LOT Ternis +2406297 SM6YPC Leif +2406298 SA6AQE Roger +2406299 SA6HBR Henrik +2406300 SA6INY ChristerINY +2406301 SA6RIS Jens +2406302 SM6TJB B-O +2406303 SA6AUT SA6AUT +2406304 SM6XSP Henrik +2406305 SM6RZB Sven +2406306 SM6FMB Sven +2406307 SM6YFP Stig +2406308 SA6NFI NFI +2406309 SA6DAZ Darren +2406310 SM6NOC Petter +2406311 SA6DDL Daniel +2406312 SM6UAF Lars 2407001 SM7URN Patrik 2407002 SM7URN Patrik 2407003 SA7BRM Robert @@ -38991,7 +46436,7 @@ 2407156 SA7CMZ Sa7cmz 2407157 SA7PST SA7PST 2407158 SA7LIL Anders -2407159 SA7MWC Hairynoggin +2407159 SA7MWC Martin 2407160 SM7XAA Micke 2407161 SG7CDJ SA7CDJ 2407162 SM7HCE Anders @@ -39061,7 +46506,7 @@ 2407226 SM7NTJ SM7NTJ 2407227 SM7WDU Reidar 2407228 SM7JRZ Roger -2407229 SM7LWL Walle +2407229 SM7LWL Kenth 2407230 SA7FKR SA7FKR 2407231 SA7BSK SA7BSK 2407232 SA7APC Struja @@ -39117,6 +46562,75 @@ 2407282 SM7XFD Stefan 2407283 SA7BGG Peter 2407284 SA7SSE Simonvik +2407285 SA7PGB Per +2407286 SM7UKH Richard +2407287 SM7LFA Bo +2407288 SM7ZDD Kenneth +2407289 SA7CMD TEN +2407290 SM7EIR Stan +2407291 SM7RFI Lars +2407292 SM7JVG Stiffe1962 +2407293 SA7BYQ Morgan +2407294 SM7WNM Jocke +2407295 SA7LOO Hans +2407296 SM7VLL Hakan +2407297 SM7UKH SM7UKH +2407298 SM7LMY Rolf +2407299 SM7SKT Gunnar +2407300 SM7STL Michael +2407301 SA7CIZ Lasse +2407302 SM7EJG Ingvar +2407303 SM7TKR Emil +2407304 SM7DOX Jan +2407305 SA7SOL Jakob +2407306 SM7CAD Curt +2407307 SM7GKB Staffan +2407308 SA7RKN Robban +2407309 SA7BPX Micke +2407310 SM7NJD SM7NJD +2407311 SG7YTC Christian +2407312 SM7XGG Jan +2407313 SM7ZEN Roger +2407314 SA7FMD Karin +2407315 SA7KJB Bosse +2407316 SA7KSE Kbeckmann +2407317 SM7YRY KJB +2407318 SA7CDE Benke +2407319 SA7RKV Kimmo +2407320 SM7RHI SM7RHI +2407321 SA7DSE David +2407322 SM7SHW Anders +2407323 SM7WSE Fricke +2407324 SM7RDX Bengt +2407325 SA7CHT SA7CHT +2407326 SA7FSE Franz +2407327 SM7JNT Henrik +2407328 SM7SHW Anders +2407329 SM7VXT Haakan +2407330 SA7PJ Per +2407331 SM7XQO Joergen +2407332 SM7LZV Gert +2407333 SM7CKM Sven-Ake +2407334 SM7IAN Ola +2407335 SG7WSE Fricke +2407336 SM7YLU Uffe +2407337 SM7RRF Ronny +2407338 SM7NWJ Patrik +2407339 SM7GSA Kurt +2407340 SA7CND SA7CND +2407341 SM7YLT Tony +2407342 SM7BUA Mats +2407343 SM7EHI Claes +2407344 SM7EGM SM7EGM +2407345 SM7LQP Sten +2407346 SM7HUY Mikael +2407347 SA7RSQ Willy +2407348 SM7YSN Bojjan +2407349 SM7KSZ Sune +2407350 SA7KEZ Marianne +2407351 SM7FQX Ulf +2407352 SM7DZD Lasse +2407353 SM7HIA SM7HIA 2420001 LA3RIA Mushtaq 2420002 LA1KP Oivind 2420003 LA4JL Per @@ -39188,6 +46702,15 @@ 2420069 LA5UTA Frederik 2420070 LA6PBA Lars 2420071 LA8JMA Helga +2420072 LA5GRA LA5GRA +2420073 LA1PCA Kristian +2420074 LA4ZUA Geir +2420075 LB5VA Stig +2420076 LA8JMA LA8JMA +2420077 LA9UTA LA9UTA +2420078 LB6EH LB6EH +2420079 LB5IA Terje +2420080 LB6ZI Kevin 2421001 LA6VMA Tommy 2421002 LA7ZKA Arve 2421003 LA2YUA Robin @@ -39240,7 +46763,7 @@ 2421050 LA4PGA Trond 2421051 LA8FTA Bill 2421052 LA4BSA LA4BSA -2421053 LA2TT Graytass +2421053 LA2TT Helge 2421054 LA5FRA LA5FRA 2421055 LA5FRA LA5FRA 2421056 LA8SB Ola @@ -39282,6 +46805,20 @@ 2421092 LA7AT Leif 2421093 LA2UF Per 2421094 LB5EG Johan +2421095 LA4FU Gunnar +2421096 LB4WI Normann +2421097 LA7IU Gunnar +2421098 LB6WH LEIF +2421099 LA2RMA Arnt +2421100 LA2RR OleG +2421101 LB7ZG Bjorn +2421102 LB8DG Lasse +2421103 LA9OSA Frank +2421104 LA8OKA LA8OKA +2421105 LA2PLA LA2PLA +2421106 LA2XNA Magne +2421107 LA7QTA LA7QTA +2421108 LA1HU JAN 2422001 LA3QMA Kai 2422002 LA3QMA Kai 2422003 LA3QMA Kai @@ -39308,8 +46845,8 @@ 2422024 LA2VSA Ivar 2422025 LB1AH Irmantas 2422026 LB1AH Irmis -2422027 LA5NTA Martinhpedersen -2422028 LA5NTA Martinhpedersen +2422027 LA5NTA Martin +2422028 LA5NTA Martin 2422029 LB8TH Sondis 2422030 LB8VH Sander 2422031 LB8OH Ketil @@ -39321,6 +46858,36 @@ 2422037 LA6SRA KjartanA 2422038 LA8OHA Roar 2422039 LB8TH Sondre-W +2422040 LA1ROA La1roa +2422041 LA4FPA Erlingjo +2422042 LB9AH Kjell +2422043 LB2ZG Arild +2422044 LA5QTA Tom +2422045 LB9YG Ole +2422046 LB2MI Bjoern +2422047 LA7CFA OASK +2422048 LA5TLA Svein +2422049 LA1ASK FBK +2422050 LB2AG LB2AG +2422051 LB3LH Niels +2422052 LB6KI Ingve +2422053 LA2BKA Nils +2422054 LA1VNA Johnny +2422055 LB2PI LB2PI +2422056 LA6ODA Jakob +2422057 LB5VG Roar +2422058 LA1TNA Per +2422059 LB2MI Bjrn-Cato +2422060 LB6QI Jan-ove +2422061 LB3SH Frank +2422062 LB9FH Aknappen +2422063 LB6PI Stian +2422064 LB1TG TG +2422065 LB3UH Oddvar +2422066 LA1APA Are +2422067 LB6OI LB6OI +2422068 LB6LI Egon +2422069 LA3YP Alf 2423001 LA9XFA Eivind 2423002 LA3JKA Svein 2423003 LA3JKA Svein @@ -39366,7 +46933,7 @@ 2423043 LA6DRA Rune 2423044 LA9XGA Tor-Atle 2423045 LA2FRA Walter -2423046 LB9WH LB9WH +2423046 LB9WH Sindre 2423047 LA7LSA LA7LSA 2423048 LB3FH TAS 2423049 LB4FH LB4FH @@ -39379,6 +46946,36 @@ 2423056 LA6RJA Rolf 2423057 LB1IF Tommy 2423058 LA3PY Svein +2423059 LA1SFG SFG +2423060 LB9WH Sindre +2423061 LA7MSA Bengt +2423062 LA6IM Hans +2423063 LA1IO Halvor +2423064 LB3GH OWA +2423065 LA1J Jrgruppen +2423066 LA8NRA Johnny +2423067 LA6BH Jakob +2423068 LB3DH Vidar +2423069 LA5OOA Arne +2423070 LA9XGA Tor-Atle +2423071 LA3XTA Njal +2423072 LB2WI Marcin +2423073 LB2GI John +2423074 LB2WI Marker +2423075 LB1IF Tommy +2423076 LB5WI Tor +2423077 LA6UKA Kjell +2423078 LB5YI Lassa +2423079 LA7ZN Jan +2423080 LB3DI Steinar +2423081 LA5GOA Steen +2423082 LB6DI Tommy +2423083 LA1AUA Morten +2423084 LA9ULA Bjornung +2423085 LA7RTA Morten +2423086 LA2LI Thor +2423087 LA6UT Stein +2423088 LA1NNA Trym 2424001 LA7TMA Torstein 2424002 LB3AG Kre 2424003 LA3KL Tore @@ -39397,6 +46994,13 @@ 2424016 LA5YKA LA5YKA 2424017 LA8EMA Haakan 2424018 LB1TI Stian +2424019 LB2VI LB2VI +2424020 LA6GHA Robert +2424021 LB3JH Per +2424022 LA8GU Leif +2424023 LB0VG Kristosh +2424024 LA8GU Leif +2424025 LA3WMA JanB 2425001 LA8IRA Alex 2425002 LA2QAA JOHN 2425003 LB0SG Raymond @@ -39424,6 +47028,12 @@ 2425025 LB1JF Henning 2425026 LB8VG Edvin 2425027 LA6CFA Bjrn +2425028 LB2LH Leif +2425029 LA8WSA Bernt +2425030 LB1HC Bent +2425031 LA8WSA Bernt +2425032 LA6MO Jan +2425033 LB2HG Harald 2426001 LB9VE Magnus 2426002 LB9VE Magnus 2426003 LB9VE Magnus @@ -39547,6 +47157,41 @@ 2426121 LB3LI Haakon 2426122 LB3KI SteinErik 2426123 LB2XI Einar +2426124 LB2YI Haakon +2426125 LB4QI Tom +2426126 LB4SI Joern +2426127 LA3PNA Thomas +2426128 LA4NI Kaare +2426129 LB4QI LB4QI +2426130 LB5CI Christian +2426131 LA7NNA Brede +2426132 LA7MNA Magne +2426133 LA1SNA Per +2426134 LB4NI Kaare +2426135 LA6ZJA Thor +2426136 LA9VOA Marianne +2426137 LA6PTA LA6PTA +2426138 LA3II Rolf +2426139 LA9QDA Ole +2426140 LB5DI Ole +2426141 LB2YG Ole +2426142 LA6CDA Jon +2426143 LA9FLA Bjoern +2426144 LB6BI Ole +2426145 LA3CG Irwin +2426146 LB5IE Vidar +2426147 LB4MG Lb4mg +2426148 LA6USA Ronny +2426149 LA2AOA Ole +2426150 LA5ZJA Ole +2426151 LB5JG Asle +2426152 LA2AOA Ole +2426153 LA2FGA Rolf +2426154 LA1VET Espen +2426155 LA4APA Torbjorn +2426156 LA9ALA Tore +2426157 LA9BM Leif +2426158 LA9GJ Kjell 2427001 LA3VW Odd 2427002 LA4CSA Tarjei 2427003 LA7LW Ole @@ -39579,12 +47224,19 @@ 2427030 LB5OA Kai 2427031 LB2S Tore 2427032 LA8IY Stan -2427033 LB2EH Tommy +2427033 LB2EH Lene 2427034 LA6OJ John 2427035 LB1PI Knut 2427036 LA2DDA Dag 2427037 LA1SFG SFG 2427038 LB3VI Remy +2427039 LA3GL Arve +2427040 LB4PI Anders +2427041 LA8OSA Eivind +2427042 LB6MG Kjell +2427043 LB6CI Jan +2427044 LA6LPA Rune +2427045 LA5VOA TEIGENZOO 2428001 LA9CKA Tom 2428002 LA9CKA Tom 2428003 LA8UU Odd @@ -39631,7 +47283,7 @@ 2428044 LB1ZH Tor 2428045 LA1YDA Helge 2428046 LA1DBA Vidar -2428047 LA8UU Odd2 +2428047 LA8UU Odd 2428048 LA5TSA Sandegutt 2428049 LA8XRA LA8XRA 2428050 LB7LH LB7LH/P @@ -39641,7 +47293,7 @@ 2428054 LB7XH Eivind 2428055 LA9ZF Anken 2428056 LB7LH LB7LB -2428057 LA6LU LA6LU +2428057 LA6LU Geir 2428058 LA1JLA Svein 2428059 LA6MMA Odd 2428060 LB8LG Svein @@ -39662,7 +47314,29 @@ 2428075 LA3VSA Johan 2428076 LB0NG Krzysztof 2428077 LB3UI Fred +2428078 LB6UH Christer +2428079 LB3UI Fred 2428080 LF2E Simarud +2428081 LB1RG Oivind +2428082 LA5ITA Jan +2428083 LA6GIA LA6GIA +2428084 LA7QW Rune +2428085 LA5BBA Kaare +2428086 LA7PRA Fredrik +2428087 LA9IRA Christian +2428088 LA5ITA Jan +2428089 LA6FK Jon +2428090 LB4LI Joakim +2428091 LA4TMA Bjorn +2428092 LA6GIA Hernan +2428093 LA3PMA Kjetil +2428094 LA8LNA Magne +2428095 LB0DH Tor +2428096 LA9LRA LARS +2428097 LA2OSA Ronny +2428098 LA8DOA LA8DOA +2428099 LA5RQ Marco +2428100 LA5FGA KJELL 2429001 LA5LIA Steinar 2429002 LA1PHA Tom 2429003 LA5JK Jan @@ -39760,6 +47434,40 @@ 2429095 LA6VRA Fredrik 2429096 LA8JRA Odd-Halvard 2429097 LA6KMA Jim +2429098 LA1JFA Oddgeir +2429099 LA4ISA Stian +2429100 JW4ZUA Geir +2429101 LA6NNA Frode +2429102 LB1RI Foroysund +2429103 LA3ZK Gunnar +2429104 LA3KTA Geir +2429105 LA3JTA Geir +2429106 LA4FSA Rune +2429107 LA5OAA Bjoern +2429108 LA6ZRA A6ZRA +2429109 LA9JDA Paul +2429110 LB5ZH Geir +2429111 LA2IU Roger +2429112 LA4KQ Borge +2429113 LA4AU Svein +2429114 LA2GTA Robin +2429115 LB6UI Stian +2429116 LA8BSA Tor +2429117 LA3AEA GuPe +2429118 LA9YTA Peder +2429119 LB2OE Roger +2429120 LA7HJ Svein +2429121 LA9FOA Knut +2429122 LA2FTA Orjan +2429123 LA1LF Arne +2429124 LA7OY Terje +2429125 LA4BHA Ronald +2429126 LB7DI Kent +2429127 LA3BEA Roald +2429128 LA3BUA Per +2429129 LA3QUA Yngve +2429130 LA6BBA Kurt +2429131 LA6NEA Gunvor 2440001 OH0CD Mikael 2440002 OH0KCE Leif 2440003 OH0AZX Roland @@ -39776,6 +47484,8 @@ 2440014 OH0JAD Peter 2440015 OH0KXJ Kjell 2440016 OH0AA ARA +2440017 OH0AA ClubStation +2440018 OH0BCW Kim 2441001 OH10AS Ari 2441002 OH1EEZ Jyrki 2441003 OH1SIC Goeran @@ -39824,6 +47534,26 @@ 2441046 OH1FJY Petri 2441047 OH1IU Reijo 2441048 OH1KH Saku +2441049 OH1SDR Janne +2441050 OH1AYF Esko +2441051 OH1MP Matti +2441052 OH1PU Anssi +2441053 OH1HKN Markus +2441054 OH1FPA Simo +2441055 OH8OK Risto +2441056 OH1ELG Hessu +2441057 OH1BOH Jyrki +2441058 OH1FEU Mauri +2441059 OH1JQ Jouni +2441060 OH1BOS AnPa +2441061 OH1ZJ Pekka +2441062 OH1BPK Antti +2441063 OH1EJQ Jussi +2441064 OH1RJ Juhani +2441065 OH1UBO Nuutti +2441066 OH1HAQ Hannu +2441067 OH1EBO Reetta +2441068 OH1NK Jukka 2442001 OH2LAK Erik 2442002 OH2LAK Erik 2442003 OH2LAK Erik @@ -39967,7 +47697,7 @@ 2442142 OH2GIZ Tauno 2442143 OH2FWT Oh2fwt 2442144 OH2BVK Masa -2442145 OH2FXI Micster +2442145 OH2FXI Simo 2442146 OH2FPR OH2FPR 2442147 OH2FLJ Kooee 2442148 OH6HAY Osku @@ -39977,25 +47707,25 @@ 2442152 OH2BAY Antti 2442153 OH7JP Jyri 2442154 OH2UBA TGr -2442155 OH2FPJ Skilla +2442155 OH2FPJ Mikko 2442156 OH2BFE Ilkka 2442157 OH2OSQ Osku 2442158 OH2EPI Olli 2442159 OH2TAS Tassu 2442160 OH2EWK Henri 2442161 OH2NMR Ari -2442162 OH2FOI Tito +2442162 OH2FOI Atle 2442163 OH2MEE Jukka 2442164 OH2KXA Matti 2442165 OH2BJK Antto -2442166 OH2FPL Rimpula +2442166 OH2FPL Olli 2442167 OH2FPC Lassi 2442168 OH1AYG Rami 2442169 OH2LZC Niko 2442170 OH2FTJ Jouni 2442171 OH2MRS Jukkay 2442172 OH2AUS Rami -2442173 OH2BIX OH2BIX +2442173 OH2BIX Jesse 2442174 OH2GIP Mika 2442175 OH2RK Riku 2442176 OH2JIU Jouni @@ -40046,6 +47776,49 @@ 2442221 OH3BY Jorma 2442222 OH2KWY Harri 2442223 OH2EP Elias +2442224 OH2KLN Rainer@gmail.com +2442225 OH2UCI Juha +2442226 OH2BFF Kari +2442227 OH2ABB Porvoo +2442228 OH2HXT Pablo +2442229 OH2GIK Juha +2442230 OH2BAV Lasse +2442231 OH8HBF Tero +2442232 OH2JL Jukka +2442233 OH6JAMI Jami +2442234 OH2JMF Asko +2442235 OH2GLR -Mika- +2442236 OH2HOT Antti +2442237 OH3LWS OH3LWS +2442238 OH2FXS Miika +2442239 OH2UBP Tom +2442240 OH2UBY Markus +2442241 OH2JRJ Jari +2442242 OH2BPF Joona +2442243 OH2BLZ Eric +2442244 OH22AH Atle +2442245 OH2MNI Antti +2442246 OH2EJC Mika +2442247 OH2ZA Sari +2442248 OH2GEZ M_L +2442249 OH2UDQ Iina +2442250 OH2EXE Jari +2442251 OH2HXP Timo +2442252 OH2EWI Matti +2442253 OH2JT Juha +2442254 OH2FHJ Krisu +2442255 OH1JD VilleJD +2442256 OH2LVD Anssi +2442257 OH2UCI Juha +2442258 OH2BRP Joni +2442259 OH2PP Pekka +2442260 OH2RAFU Rafu +2442261 OH1LI Christoph +2442262 OH3ESX Lasse +2442263 OH2BPT Antti +2442264 OH2BB Marko +2442265 OH2BU Jari +2442266 OH6BRO Jami 2443001 OH3FCB Tommi 2443002 OH3KGR Janne 2443003 OH3HWX Toni @@ -40064,7 +47837,7 @@ 2443016 OH3MWY Ramesh 2443017 OH3MJQ Jukka 2443018 OH3NFC Veijo -2443019 OH6MEV IIkka +2443019 OH1CR IIkka 2443020 OH8JXR Jani 2443021 OH3HWX Toni 2443022 OH3KGR Janne @@ -40093,7 +47866,7 @@ 2443045 OH1MKV Matti 2443046 OH3MOT Hannu 2443047 OH6GFR Juha -2443048 OH6MEV Ilkka +2443048 OH1CR Ilkka 2443049 OH1DB Matti 2443050 OH3EUF Tuomas 2443051 OH3INF Seppo @@ -40197,6 +47970,32 @@ 2443149 OH3HMM Simo 2443150 OH3HMM Simo 2443151 OH3JAJ Lasse +2443152 OH7HJX Kari +2443153 OH3KA Ari +2443154 OH3ENM Pauli +2443155 OH3LUK Jussi +2443156 OH3SUS Jukka +2443157 OH3MBC Kimmo +2443158 OH3SRT Suomen +2443159 OH3LCS Vikke +2443160 OH1IX HR +2443161 OH3GFX Janne +2443162 OH3NK Norri +2443163 OH2BTQ Pauli +2443164 OH3PC Harri +2443165 OH3LMM Pasi +2443166 OH3EIT Ville +2443167 OH3MZT Timo +2443168 OH3KP Rane +2443169 OH3EVM Patrick +2443170 OH6HJE Pertti +2443171 OH3BKL Saku +2443172 OH3BPY Akseli +2443173 OH3RL Lauri +2443174 OH3BDS Olli +2443175 OH1MU MASA +2443176 OH3EQY Vesa +2443177 OH3BSG Jarmo 2444001 OH4JP Juha-Pekka 2444002 OH4EA Vesa 2444003 OH4TK Tan @@ -40210,6 +48009,12 @@ 2444011 OH4ERO Juho 2444012 OH4VA Veijo 2444013 OH4AC OH4AC +2444014 OH4ERQ Juce +2444015 OH4SK Tane +2444016 OH4RD Heikki +2444017 OH4MCV Oki +2444018 OH4FSL Martti +2444019 OH4MM Matti 2445001 OH5HCJ Matti 2445002 OH5HCJ Matti 2445004 OH7FDN Kimmo @@ -40260,6 +48065,12 @@ 2445049 OH5BMI Panu 2445050 OH5AG Kouvolan 2445051 OH5BNZ Ville +2445052 OH5EBC Reino +2445053 OH5WY Timo +2445054 OH2GQX Eetu +2445055 OH5UDB Jkullberg +2445056 OH5ESU Tommi +2445057 OH5HVN Janne 2446001 OH6XI Ulf 2446002 OH6NT Thomas 2446003 OH6TX Jari @@ -40299,7 +48110,7 @@ 2446037 OH6JAT Jouni 2446038 OH5GE Vili 2446039 OH6MS Antero -2446040 OH6EYA Zouppen +2446040 OH64K Zouppen 2446041 OH6QB Pekka 2446042 OH8HTY Mikko 2446043 OH2KHZ Tapani @@ -40346,6 +48157,27 @@ 2446084 OH6OX OH6OX 2446085 OH6EKX Rami 2446086 OH6EQC Pena +2446087 OH6ECO Viktor +2446088 OH6CL Ari +2446089 OH3E Johannes +2446090 OH2KQF Erkki +2446091 OH6UCV Aake +2446092 OH6PV Petteri +2446093 OH6KP Jerri +2446094 OH6MTG Juha +2446095 OH6EJD Jerri +2446096 OH6MCZ Petri +2446097 OH6FRR Wiz +2446098 OH6BPL Miika +2446099 OH6O Pete +2446100 OH6KTR Pertti +2446101 OH6PX Jari +2446102 OH6WX Wx +2446103 OH6PV Petteri +2446104 OH6MOS Tapsa +2446105 OH6IH Alf +2446106 OH6V Petteri +2446107 OH6UDU Mikko 2447000 OH3HAM Radio 2447001 OH7EOW Jands 2447002 OH7KFA OH7KFA @@ -40374,6 +48206,11 @@ 2447025 OH7FES Ari 2447026 OH7GIG Hannu 2447027 OH7XS Seppo +2447028 OH7XI Vesa +2447029 OH7BD Arto +2447030 OH7MWM Pave +2447031 OH7EG Unto +2447032 OH7GYD Markku 2448001 OH6NVG Timo 2448002 OH8ETB Ville 2448003 OH8GBO Marko @@ -40451,6 +48288,13 @@ 2448075 OH7XU Timo 2448076 OH8UCE Ida 2448077 OH8EDS Henri +2448078 OH6MR OH6MR +2448079 OH8NLR Ari +2448080 OH8GOU Ilkka +2448081 OH8FCK Jaakko +2448082 OH6BOD Mika +2448083 OH8ENT Tero +2448084 OH8UCB Janne 2449001 OH9LNA Jari 2449002 OH9NGW Markku 2449003 OH9ELA Jones @@ -40468,10 +48312,19 @@ 2449015 OH9MMN Urpo 2449016 OH9ELA Jones2 2449017 OH9AZS Kalervo +2449018 OH9AA OH9AA +2449019 OH9FIV Pekka 2460001 LY4TG Tadas 2460002 LY4NS Natanielius 2460003 LY3NFF Aleks 2460004 LY3PQ Nerijus +2460005 LY3QN LY3QN-Jurijus +2460006 LY3EU P +2460007 LY5VP Egis +2460008 LY1MS Martynas +2460009 LY3FF Vilius +2460010 LY1Z Motiejus +2460011 LY1LB Lukas 2470001 YL3JE Juergen 2470002 YL3GCD Pavels 2470003 YL3EH Arnie @@ -40502,7 +48355,12 @@ 2470028 YL3CAAA Yury 2470029 YL3ALB Udo 2470030 YL3EH Arnis -2480001 ES2AST SiiliOnu +2470031 YL2QN YL2QN +2470032 YL3ALC Anton +2470033 YL3AIL Alexey +2470034 YL3CL YL3CL +2470035 YL2GRC Serge +2480001 ES2AST Marek 2480002 ES2FJR Ivan 2480003 ES1BRD Dmitri 2480004 ES4HTI Taivo @@ -40521,10 +48379,23 @@ 2480017 ES2AST Marek 2480018 ES1KPO Kaido 2480019 ES2BOB Bob -2480020 ES1ZAR Kristjan +2480020 ES1ZR Kristjan 2480021 ES4RM Sergei 2480022 ES1SVAB SergeiV 2480023 ES2ICE Janar +2480024 ES1ZR Kristjan +2480025 ES1KASS Mikk +2480026 ES1KMP Pelgulinn +2480027 ES2ACT Dzinn +2480028 ES8BHR Heiko +2480029 ES1ZB Yasuyuki +2480030 ES1ZB SUZUKI +2480031 ES8TJM Alev +2480033 ES4TIX ES4TIX +2480034 ES3AST Marek +2480035 ES2ADO Eerikhm +2480036 ES2PTT Mommik +2480037 ES2ETAM EDGAR 2500016 RU0AB Anatoly 2500024 R0ADH Gennadyj 2500025 R0AEK Aleksandr @@ -40561,6 +48432,7 @@ 2500063 UB0AIU Aleks 2500064 RE0RAS Amateur 2500065 UB0AIW Andrey +2500066 R0SAS Aleksey 2500067 RV0AMW Nikolay 2500068 R0SAA Evgeny 2500069 R0SM Aleksandr @@ -40576,30 +48448,67 @@ 2500082 R0BB 24DX 2500091 R0AHJ Evgenii 2500093 UB0AJW Ervin -2500097 R0AABQ Mikhail +2500097 R0AHY Mikhail 2500098 UB0AEW Artem +2500099 UB0SAP Oleg +2500100 R0OMV Andrey +2500106 R0AHI Alexey +2500107 UB0ALO Pavel +2500108 R0AHT Alexsandr +2500109 R0ONH Sergey +2500110 RA0SAB Sergey +2500112 UD0LEF Andrey +2500113 UB0AIB Dmitry +2500114 R0AHZ Eugene +2500115 UH0SAC Andrey +2500116 RU0AAX Dmitry +2500117 R0AEM Vladimir +2500122 UB0AIT Alexandr +2500124 UB0ALU Pavel +2500127 R0QAI Vitaly +2500128 UA0LMC Alex +2500129 R0OHG Igor +2500130 R0CBR Sabir +2500133 R0CCS Maxim +2500136 UA0LMC Alex 2501001 UB1AAM Dmitriy 2501002 UA1CDG Vitaliy 2501006 UB1AFM Konstantin 2501007 RA1AMZ Sergey 2501009 UB1AAM Dmitriy 2501010 RD1AS Alex +2501012 UA1ASC Andrey 2501015 UA1CDG Vitaliy 2501022 UA1ABA Roman +2501024 R1ABC Innokentiy 2501025 R1OAL Maxim 2501027 RN1NFQ Andrey 2501029 UA1ZBE Oleg 2501034 R1WBF Eduard 2501037 UA1ADP Andrey 2501038 UB1AFN Vasiliy +2501039 RA1AO Nikita 2501040 RD1AS Alex +2501043 UA1ZBM NIKOLAY 2501045 RN1NEB Oleg +2501046 R1BAT Vladimir 2501051 R1ZA Yuri 2501052 UA1ZPN Viktor 2501053 R1ZBR Sergey 2501055 UB1ANI Evgenii 2501056 R1BFO Rustam 2501058 UB1AFM Konstantin +2501059 UA1AAY Alexandr +2501063 R1TB Aleksey +2501073 R1BAH Sergey +2501074 RN1TU Alexander +2501076 R1TA Alexey +2501078 UB1TAF Vitaliy +2501079 D1DMR Sergei +2501081 R1IK Yakov +2501084 UB1AOM Lazar +2501089 R1IAC Eugeniy +2501091 UA1COA Sergei 2502001 R2AEE Alexey 2502002 R2AAAA Alexey 2502003 R2DFR Mikhail @@ -40611,6 +48520,7 @@ 2502010 R2DFR Mikhail 2502011 R2DFR Mikhail 2502012 RA2FKD Alexander +2502016 R2DLV Anton 2502018 R2ALJ Vitaliy 2502024 RU2FAC Imran 2502027 R2FAF Valentin @@ -40632,6 +48542,25 @@ 2502085 R2DSN Anton 2502087 UB2FCD Tamara 2502090 R2AKT Sergey +2502095 R2AJV Sergei +2502096 R2AUF Sergey +2502097 R2FAQ Andrey +2502098 R2AUB Alexey +2502100 R2AHI Tonya +2502101 R2DID Viktor +2502110 R2AUL Evgeny +2502112 R2DBE Yuri +2502120 R2DLA Alexander +2502121 R2AVH Anton +2502122 R2AKL Pavel +2502124 R2AWF Vladimir +2502125 R2AABB Dmitry +2502127 R2DVS Alexander +2502131 R2DLV Anton +2502133 R2DFB Pavel +2502139 R2AJP Alexey +2502143 R2AWN Alexandr +2502145 R2AWU Aleksey 2503001 R3ABM Artem 2503002 R3ABM Artem 2503003 RK3AQG Ikrom @@ -40647,7 +48576,7 @@ 2503017 RZ3AIQ Alexey 2503018 RZ3AIQ Alexey 2503019 RZ3AIQ Alexey -2503024 R3AAX Evgeniy +2503024 R5CX Evgeniy 2503033 RU3ALM Aleksandr 2503034 RU3DVW Maxim 2503036 RX3AQG Sergey @@ -40658,6 +48587,7 @@ 2503052 R3UAL Sergey 2503053 R3UAE Dmitry 2503056 UA3ARF Sergey +2503058 UA3MLR Dmitry 2503061 UA3USQ Andrey 2503062 RV3DQK Oleg 2503064 RV3ADJ Anton @@ -40674,6 +48604,7 @@ 2503092 UA3ARF Sergey 2503094 RD3WN Andrey 2503095 RW3AVJ Leonid +2503099 R3TO Serge 2503100 UB3DOP Maksim 2503103 RD3ANL Vladimir 2503104 RA3AET Igor @@ -40711,9 +48642,46 @@ 2503175 R3IBC Andrey 2503178 UB3EDM 2503179 UB3KDI Sergey +2503180 UA3IQN Alexander +2503181 UA3DAV Valentin 2503186 RL3BZ Evgeny 2503188 RZ3APG Mikhail 2503194 RD3BL Leonid +2503200 RZ3DHC Timofey +2503202 R3PIJ Pavel +2503206 UB3ASM Mikhail +2503209 RN3ABE Alexey +2503212 RW3DUY Alexandr +2503215 R3ECO Victor +2503218 R2AACF Ivan +2503221 RO2Z Dmitry +2503222 RN3AUZ Kirill +2503224 RX3QBT Pavel +2503226 UB3ZEN Dmitriy +2503233 RW3AR Mike +2503235 RW3ALI Nikolai +2503237 R3TKB Victor +2503238 UB3DPB Ivan +2503240 R3ECO Victor +2503242 UB3AQC Nikolay +2503245 RC3M Dmitry +2503247 RT3M Alex +2503248 RA3TAT Dmitry +2503249 UB3ATI Alexander +2503251 RA3MAG Sergey +2503258 R3TII Sergei +2503261 R3KEC Sergey +2503263 UB3ATF Roman +2503264 UB3ATT Dmitry +2503265 UB3ATT Dmitry +2503266 R3XAR Alexey +2503267 UA3MLU Sergej +2503269 UB3DSU Maxim +2503270 RV3DGS Alexey +2503271 R3UAA Alex +2503273 R3PKG Dmitriy +2503275 R3UAD Ilia +2503276 UB3ZHH Artem 2504002 UD4NAD Alexey 2504011 R4WBI Aleksandr 2504012 R4WACS Dmitry @@ -40722,11 +48690,20 @@ 2504017 UB4PAK Vsevolod 2504019 R4YAF Aleksey 2504023 UD4NAJ Igor +2504027 UA4CTO Vyacheslav +2504028 R4HGC Aleksander +2504030 R4HHH Sergey +2504031 UB4WBS Andrey +2504033 RA4FVC Oleg +2504034 R4SAK Alexey +2504035 UB4WBV Oleg +2504037 UB4HQF Leonid 2505001 R5DK Alexey 2505002 R5ACQ Kirill 2505003 UB5MBG Oleg 2505004 UB5MBK Andrey -2505005 UB5MBE Stas +2505005 R3MBI Stas +2505007 RW5F Igor 2506002 R6LAA Pavel 2506006 R6LAD Dmitry 2506007 R6LAT Sergey @@ -40736,6 +48713,8 @@ 2506018 UC6KHF Andrey 2506019 R6HABN Oleg 2506021 UB6RNA Oleg +2506022 R6LGV Victor +2506025 RN6LME Eugene 2506026 RZ6HDH Igor 2506027 RA6G Ramazan 2506028 UB6LNK Viktor @@ -40747,7 +48726,9 @@ 2506041 RN6LJK Vladimir 2506046 UB6LLS Andrey 2506048 UD6AER Victor +2506050 R6DJO Alexander 2506051 UD6AFD Svetlana +2506055 UA6AHP Evgeniy 2506056 UB6LQM Eduard 2506057 UB6LIN Alexander 2506058 R6RANE Yuriy @@ -40761,6 +48742,7 @@ 2506079 RW6MD Eugene 2506080 R6RANH Sergey 2506081 R6RANI Sergey +2506082 R6DHJ Maxim 2506088 RA6KHO Andrey 2506090 RA6YBN Alexsandr 2506092 R6RANB Dima @@ -40773,6 +48755,7 @@ 2506105 R6AAEV Viktor 2506106 R6DIC Mikhail 2506113 UD6AAX Eduard +2506114 UD6AHF Ilya 2506116 UD6AEV Nikita 2506117 RN6LBB Walera 2506118 R6DGX GENNADIY @@ -40784,6 +48767,21 @@ 2506132 UB6LLR Anton 2506133 R6DAS Anton 2506134 RA6YBN Alexsandr +2506136 R6DJP Alexander +2506138 UB6LPY Aleksandr +2506140 RV6BEU Dmitry +2506143 UB6LSR Roma +2506145 R6JAK Luka +2506148 R6LIT Igor +2506150 RX6FM Jurii +2506151 RA6UK Mikhail +2506154 R6RANA Natali +2506156 R6FX Anatoly +2506158 UB6RND Maksim +2506160 UB6LST Andrey +2506161 RZ6G Mikhail +2506162 R6LIX Dmitry +2506165 RW6MR Victor 2507002 RK7K Yuriy 2507003 RC7LL Igor 2507004 R7RBB Aleksandr @@ -40795,7 +48793,7 @@ 2507010 R7HJ Club 2507011 RZ7RCP Alexandr 2507012 R7RAAR Vladislav -2507016 UB7KAG Maxim +2507016 R7KCS Maxim 2507017 R7DW Sergey 2507020 R7MU Sergey 2507021 UD7RDD Andrey @@ -40820,7 +48818,12 @@ 2507060 R7RAAR Vladislav 2507063 R7KAAE Evgeniy 2507064 R7KAU Oleg +2507065 RG7A Alex 2507067 UB7ROX Dmitry +2507069 R7KEA Server +2507072 R7RAAF Dmitriy +2507074 R7RBB Aleksandr +2507075 UA7TT Nikolai 2508001 R8CZ Pavel 2508002 R8CAV Andrey 2508003 R8KAB Evgenij @@ -40836,6 +48839,7 @@ 2508017 UB8CEC Aleksandr 2508019 R8ABX Ivan 2508021 UB8CDY Andrey +2508024 UB8CFD Alexandr 2508025 R8CBF Aleksandr 2508027 R8DDD Roman 2508028 R8CBG Aleksandr @@ -40860,10 +48864,19 @@ 2508064 UB8CJO Nikolay 2508065 R8CAE Aleksey 2508066 UB8CFB Dmitry +2508067 R8AAY Stanislav 2508069 UB8CJV Andrey 2508071 UB8CJZ Evgeniy 2508072 R8CCI Kostya 2508074 R8CABM Denis +2508075 R8ABL Sergey +2508076 R8ABP Radik +2508077 R8OAO Andrey +2508080 UB8CJV Andrey +2508083 R8AFO Igor +2508085 UB8ADL Vasilij +2508091 R8AFO Igor +2508092 R8ADN Sergi 2509001 R9XU Yakov 2509002 UA9KDF Igor 2509003 R9CIR Ivan @@ -40887,6 +48900,7 @@ 2509036 RV9CPQ Andrey 2509049 RV9CRL Sergey 2509053 RA9CGY Konstantin +2509054 UB9MDL Yuriy 2509055 UB9DMK Konstantin 2509056 RV9CAB Evgeny 2509059 R9OCF Vitaly @@ -40897,7 +48911,7 @@ 2509070 R9MBA Oleg 2509075 UA9CR Alex 2509078 UB9MCL Maksim -2509083 UB9MDY Sergey +2509083 R9MBQ Sergey 2509084 R9CAV Denis 2509085 R9CCC Igor 2509088 RZ9I Vasiliy @@ -40909,8 +48923,20 @@ 2509101 R9WET Sergey 2509102 UB9WBV Svetlana 2509103 UB9WMD Valery +2509104 R9ODS Sergey 2509106 R9OAAZ Stanislav 2509107 R9OAAZ Stanislav +2509108 RX9COZ Ivan +2509109 R9OBQ Aleksandr +2509114 UA9OIA Nikolay +2509115 R9OAAZ Stanislav +2509116 UA9UDO Sergey +2509118 R9ODM Pavel +2509125 RA9LT Denis +2509131 R9OBR Maxim +2509132 R9XBC Aleksandr +2509133 RW9YO Igor +2509134 R9LAU Anton 2550001 UZ5DX Dmytro 2550002 UZ5DU Peter 2550003 UR5DGN Natali @@ -41180,8 +49206,103 @@ 2550269 UT5XQ Vladimir 2550270 UV6QAF Potrov 2550271 UR0FF Slava -2550274 UR6LBY Master +2550272 UR5SFW Anatolii +2550273 UT3ULB Vlad +2550274 UR6LBY Kostya 2550275 UR7IJO Mikhail +2550276 UR5KET Serg +2550277 UT4UEI Vlad +2550278 UR8UR Yura +2550279 UT3XM UT3XM +2550280 UR5GNH Danylo +2550281 UR5FPM Myshechenko +2550282 UR5XFP Serhii +2550283 UR6LGW Nikk +2550284 UY1YU Yurii +2550285 UR3AFE Bogdan +2550286 UT2YR Rostyslav +2550287 UW5ELK Bohdan +2550288 US5WBL Viktor +2550289 UT3ULR Daria +2550290 UR6LGJ Igor +2550291 UR4UPO Sergey +2550292 UX5HY Volodymyr +2550293 UT3UMW Banzay +2550294 UR5FWS CLUB +2550295 UW5ELX Oleksandr +2550296 UW0WU Aleksandr +2550297 US5WDP US5WDP +2550298 UR5YBW Vaxa +2550299 UW5EHB Maxim +2550300 US9IDD Anton +2550301 US8ITC Andy +2550302 UX0DL Ux0dl-dmr1 +2550303 US5WFL Bizzon +2550304 UR5WLF ANDRII +2550305 UR6LOT Oleg +2550306 UR5UFK Pavel +2550307 UW0WU Aleksandr +2550308 UR5WLA UR5WLA +2550309 UT0FC SERG +2550310 UR4UPU Dmi_tri4 +2550311 UR5FTE Volodymyr +2550312 UR5FSZ Ivan +2550313 UW5ELK UW5ELK +2550314 UT5UQD UT5UQD +2550315 UR5DAY MYROSLAV +2550316 UV5EHQ Nikolaevich +2550317 UT2FWF HAMODESSAFAMILY +2550318 UT3WX Andy +2550319 UR5BIG Volodymyr +2550320 US5WAD Vadym +2550321 UR5TLZ UR5TLZ +2550322 UT3UCG Nickolaj +2550323 UR5FNF Anjelika +2550324 UR6LLB Valerii +2550325 UW5EHB Maxim +2550326 UT3UNJ Vitalii +2550327 UT6UW Alex +2550328 UR5TMT Viktor +2550329 UR5WDI Eugene +2550330 UT8IBK Andrew +2550331 UW5EIA Valentyn +2550332 UW5EMA IACA +2550333 UW5ELQ UW5ELQ +2550334 UR5WDP Andrii +2550335 US5WFI Vladimir +2550336 UR5YUR ALEXEY +2550337 UR5BKR NadiaTyshko +2550338 UR5SBG Alex +2550339 UY3UA Andrii +2550340 UR5WFF Yurii +2550341 UW5GG Vik +2550342 UR1CAP Igor +2550343 UT7UV Alexander +2550344 UR4UOO Alex +2550345 UR4UPV Max +2550346 UW5VA Vili +2550347 UR5CQF Peter +2550348 UT2UQ UT2UQ +2550349 UW5EEN Andy +2550350 UR1CAP Igor +2550351 UR5CQV Viktor +2550352 UR3LCO UR3LCO +2550353 UR5DDU Petro +2550354 UR5KDK Roman +2550355 UR5STI Taras +2550356 UT3UKU UT3UKU +2550357 UT4UJY Sergey +2550358 UR4UPZ Denys +2550359 UR5FPF AL671 +2550360 UR5SQQ Yurii +2550361 UT1EL Val +2550362 UR5KEH Volodimerivna +2550363 UR5DDT Timur +2550364 UR5SFP UR5SFP/p +2550365 US6IF Den +2550366 UT9EH Alex +2550367 UR5FLN UR5FLN +2550368 UT5UUU UT5UUU 2570001 EW7AS Vladimir 2570002 EW7AS Vladimir 2570003 EU1ADI Aliaksei @@ -41197,6 +49318,37 @@ 2570013 EU1ADN Andrei 2570014 EW1AEG Ruslan 2570015 EW1ABJ Yury +2570016 EW1BBV Tiger1983 +2570017 EW6X Yuri +2570018 EW1R Reinhard +2570019 EW1BVT Swenum +2570020 EU1MEV Evgeny +2570021 EW7BU Aliaxandr +2570022 EU7WW Aliaxandr +2570023 EW1AEH Nikita +2570024 EU1LR Alexander +2570025 EW1RA Andrei +2570026 EU1ADQ Vyacheslav +2570027 EW1ABI ANDREI +2570028 EW6NN Nikolay +2570029 EU1LR Alexander +2570030 EW7BU Aliaxandr +2570031 EW8SAR Siarhei +2570032 EW1ACE Vyacheslav +2570033 EW1RA Andrei +2570034 EU1ADW George +2570035 EU1ACE MapoBY +2570036 EU7AB Nick +2570037 EW3TT Aliaksandr +2570038 EW1VV Vitali +2570039 EW1AEG Ruslan +2570040 EW3FH Viktor +2570041 EW7DDG DZMITRY +2570042 EW1LN BoJIoc +2570043 EW1AEK Sviatlana +2570044 EU1ADS Siarhei +2570045 EW1AEH Mikita +2570046 EW3ACZ EW3ACZ 2590001 ER1AL Sam 2590002 ER1VOX Dimonstratan 2590003 ER1MSC Serghei @@ -41211,6 +49363,13 @@ 2590012 ER1CAQ Stefan 2590013 ER2MM OLEG 2590014 ER2OZ SERGHEI +2590015 ER1MAX Maxim +2590016 ER1MIR Iurie +2590017 ER1FAB Arina +2590018 ER1AGM Anatol +2590020 ER1XDX Denis +2590021 ER3AQ Dinu +2590022 ER1CW Victor 2601001 SP1XNE Maciek 2601002 SQ1TAO Krzysztof 2601003 SQ1GZG Bogdan @@ -41239,15 +49398,15 @@ 2601026 SP1WSR Andrew 2601027 SQ1SNV Bartosz 2601028 SP1HSE Remik -2601029 SQ1GQN SQ1GQN -2601030 SQ1HMA Sq1hma -2601031 SQ1SNN Robert12341 +2601029 SQ1GQN Marcin +2601030 SQ1HMA Michal +2601031 SQ1SNN Robert 2601032 SP1WSX Tomasz 2601033 SP1N Maciej 2601034 SP1XNJ Malgorzata 2601035 SP1B Lukasz -2601036 SQ1PRA Seawomir -2601037 SP1JT Maverick +2601036 SQ1PRA Slawomir +2601037 SP1JT Wojciech 2601038 SQ1PSD Marek 2601039 SQ1SNN Robert 2601040 HF1RF Remigiusz @@ -41257,32 +49416,32 @@ 2601044 SP1CGT Andrzej 2601045 SQ1FYC Marek 2601046 SQ1BHG Grzegorz -2601047 SQ1GQZ Jedrak -2601048 SP1MWB MarekS +2601047 SQ1GQZ Grzegorz +2601048 SP1MWB Marek 2601049 SP1VDA Roman 2601050 SP1BMW Kamil 2601051 SQ1FYB Andy 2601052 SP1T Lukasz 2601053 SP1MKK Mariusz -2601054 SQ1PRA Sawek -2601055 SP1MVS Rick +2601054 SQ1PRA Slawomir +2601055 SP1MVS Ryszard 2601056 SQ1OHF Edward 2601057 SP1UJW Wojtek 2601058 SQ1GU Andrzej 2601059 SQ1NT Leszek 2601060 SQ1WO Wojciech -2601061 SQ1BHQ Pit -2601062 SP1IT Moorek +2601061 SQ1BHQ Piotr +2601062 SP1IT Tomasz 2601063 SQ1OOS Michal 2601064 SQ1BSY Marek 2601065 SP1TMT Adam -2601066 SQ1OHF SQ1OHF -2601067 SP1WSG PIOTR -2601068 SP1WSR ANDY -2601069 SP1NKF SP1NKF -2601070 SP1JP Junior +2601066 SQ1OHF Edward +2601067 SP1WSG Piotr +2601068 SP1WSR Andy +2601069 SP1NKF Jacek +2601070 SP1JP Krzysztof 2601071 SQ1KSG Patryk -2601072 SO1AAD SO1AAD +2601072 SO1AAD Adrian 2601073 SQ1PSF Marcin 2601074 SQ1PTO Jakub 2601075 SQ1PSG Marcin @@ -41297,13 +49456,41 @@ 2601084 SQ1PRB Piotr 2601085 SP1BMW Kamil 2601086 SQ1FYI Igor -2601087 SP1X SP1X -2601088 HF1T HF1T -2601089 SP1MVS Rick +2601087 SP1X Krzysztof +2601088 HF1T Robert +2601089 SP1MVS Ryszard 2601090 SQ1FYO Marek -2601091 SP1ATOM SP1ATOM +2601091 SP1ATOM Krzysztof 2601092 SP1TILU Krzysztof -2601093 SQ1JGX SQ1JGX +2601093 SQ1JGX Pawel +2601094 SQ1NXO Lukasz +2601095 SP1JT Wojciech +2601096 SP1MT Marek +2601097 SQ1KW Krzysztof +2601098 SP1EC Krzysztof +2601099 SP11A Cezary +2601100 SP1ADT Andrzej +2601101 SP1DX Grzegorz +2601102 SQ1OHD Marek +2601103 SP1ZPL Krzysztof +2601104 SQ1REX Piotr +2601105 SP1ZPL Krzysztof +2601106 SP1WWS Tadeusz +2601107 SQ1KX Daniel +2601108 SP1WWS Tadeusz +2601109 SO1Z Krzysztof +2601110 SQ1M Kamil +2601111 SP1IMJ Szczepan +2601112 SQ1NXP Marcin +2601113 SQ1GQV Karol +2601114 SP1FM Maciej +2601115 SP1HDI Grzegorz +2601116 SP1EPL Pawel +2601117 SP1DRD Krzysztof +2601118 SO1Z Krzysztof +2601119 SQ1GYL Adam +2601120 SQ1MNB Andrzej +2601122 SQ3VAS Sergiusz 2602001 SP2WGN Maciej 2602002 SP2FRN Sebastian 2602003 SP2CA Andrzej @@ -41311,112 +49498,159 @@ 2602005 SP2K Radoslaw 2602006 SP2OFR Jurek 2602007 SQ2HXW Marcin -2602008 SP2GG GRZEGORZ +2602008 SP2GG Grzegorz 2602009 SQ4AFR Daniel 2602010 SQ2OSG Krzysztof 2602011 SQ2LXX Mariusz 2602012 SQ5MBG Wojciech -2602013 SP2FOP Sp2fop +2602013 SP2FOP Piotr 2602014 SQ2PVG Pawel 2602015 SP2GDK Radek 2602016 SQ2KLT Kamil 2602017 SQ2ICT Tomasz 2602018 SP2SWA Arek -2602019 SP2JAR Tomula -2602020 SQ2HFH Chris +2602019 SP2JAR Tomasz +2602020 SQ2HFH Krzysztof 2602021 SP2KMP Marek 2602022 SP2GST Kacper -2602023 SP2AM Arekm +2602023 SP2AM Arek 2602024 SP2MMX Monika 2602025 SP2GG Grzegorz 2602026 SP2GCH Jacek 2602027 SQ2KLO Krzysztof -2602028 SP4KE Jerry +2602028 SP4KE Jarek 2602029 SQ2FRG Marcin 2602030 SQ1GPI Maciej -2602031 SQ2RBY Greg +2602031 SQ2RBY Grzegorz 2602032 SQ2RBR Darek -2602033 SP2XDM Leak +2602033 SP2XDM Michal 2602034 SQ2CDE Marcin 2602035 SP2XDQ Slawek 2602036 SP2PKR Piotr 2602037 SP2PWR Maciej 2602038 SP9MLI Leszek 2602039 SQ2LKH Maciek -2602040 SQ2MKC SQ2MKC +2602040 SQ2MKC Artur 2602041 SP2GPU Maciej -2602042 SQ2WSZ SQ2WSZ -2602043 SQ2CET SQ2CET +2602042 SQ2WSZ Wojciech +2602043 SQ2CET Tadeusz 2602044 SQ2JB Bartek 2602045 SP2TFV Dariusz -2602046 SP2NBH SP2NBH -2602047 SQ2DEF Dfgg -2602048 SP1NQN Sp1nqn +2602046 SP2NBH Andrzej +2602047 SQ2DEF Damian +2602048 SP1NQN Tadeusz 2602049 SP2TFV Dariusz -2602050 SP2QVS Czolg -2602051 SQ2RSK RADEK -2602052 SP2A SP2A -2602053 SP2TMK TOMEK -2602054 SQ2MTG SQ2MTG -2602055 SP2HQP SP2HQP -2602056 SP1NQN Sp1nqn -2602057 SQ2MMP Sq2mmp -2602058 SP2BC Maarc -2602059 SQ2JSJ SQ2JSJ +2602050 SP2QVS Piotr +2602051 SQ2RSK Radek +2602052 SP2A Leszek +2602053 SP2TMK Tomasz +2602054 SQ2MTG Blazej +2602055 SP2HQP Roman +2602056 SP1NQN Tadeusz +2602057 SQ2MMP Mariusz +2602058 SP2BC Marek +2602059 SQ2JSJ Jacek 2602060 SP2AB Przemyslaw -2602061 SQ2DMX SQ2DMX +2602061 SQ2DMX Arkadiusz 2602062 SP2FET Bartek 2602063 SP2OFF Grzegorz 2602064 SQ2HXW Marcin 2602065 SQ2JAN Maciej -2602066 SP2FP Sp2fp +2602066 SP2FP Pawel 2602067 SP2WDB Andrzej -2602068 SP2LPW SP2LPW +2602068 SP2LPW Janusz 2602069 SP2E Edward 2602070 SP2IKP Jaroslaw -2602071 SQ2HC SQ2HC +2602071 SQ2HC Kuba 2602072 SP2ACK Jakub -2602073 SQ2LXR Sq2lxr +2602073 SQ2LXR Roman 2602074 SP2ONG Waldek -2602075 SQ2YC SQ2YC -2602076 SP2FIX Sp2fix -2602077 SQ2OSC SQ2OSC -2602078 SQ2BXL SQ2BXL +2602075 SQ2YC Roman +2602076 SP2FIX Darek +2602077 SQ2OSC Krzysztof +2602078 SQ2BXL Jacek 2602079 SQ2OTR Robert -2602080 SP2KOW Witold_N +2602080 SP2KOW Witold 2602081 SQ2HCZ Slawek 2602082 SQ2KLO Krzysiek -2602083 SP2BRO SP2BRO -2602084 SP2IM SP2IM-ANNA -2602085 SP2TDI SP2TDI-JANUSZ -2602086 SQ2SM SQ2SM-SEBASTIAN -2602087 SP2HSA SP2HSA +2602083 SP2BRO Jerzy +2602084 SP2IM Anna +2602085 SP2TDI Janusz +2602086 SQ2SM Sebastian +2602087 SP2HSA Slawomir 2602088 SQ2CET Tadeusz 2602089 SP2CWO Jozef -2602090 SQ2OSK SQ2OSK +2602090 SQ2OSK Przemek 2602091 SP2WID Maciej -2602092 SP2BP SP2BP -2602093 SQ2LKS SQ2LKS -2602094 SQ2OMA Sq2oma +2602092 SP2BP Pawel +2602093 SQ2LKS Robert +2602094 SQ2OMA Marcin 2602095 SP2BYI Aneta 2602096 SP2EMB Mateusz -2602097 SQ2EES SQ2EES-STANISLAW -2602098 SQ2LXA SQ2LXA -2602099 SQ2HCE SQ2HCE -2602100 SP2ZAO SP2ZAO +2602097 SQ2EES Stanislaw +2602098 SQ2LXA Pawel +2602099 SQ2HCE Mariusz +2602100 SP2ZAO Klub 2602101 SQ2LYF Przemek 2602102 SQ2EJP Piotr 2602103 SP2ROB Robert 2602104 SP2CBW Janusz 2602105 SP2MKM Maciej -2602106 SP2SL SP2SL +2602106 SP2SL Sylwek 2602107 SQ2LYF Przemek -2602108 SP2MSC SP2MSC -2602109 SP2UKD SP2UKD -2602110 SP2OFM SP2OFM -2602111 SQ2TMJ SQ2TMJ -2602112 SQ2LIH RETEVIS +2602108 SP2MSC Michal +2602109 SP2UKD Darek +2602110 SP2OFM Mieczyslaw +2602111 SQ2TMJ Piotr +2602112 SP2SAR Lukasz 2602113 SP2BH Jan +2602114 SP2ST Slawomir +2602115 SP2SJ Marcin +2602116 SQ2DPM Marek +2602117 SP2ABC Sebastian +2602118 SQ2WPD Krzysztof +2602119 SP2EG Przemek +2602120 SP2GDA Piotr +2602121 SP2EG Przemek +2602122 SP2PMK Klub +2602123 SP2FKB Adam +2602124 SQ2MTJ Tomasz +2602125 SP2TD Tomek +2602126 SP2PMW Klub +2602127 SP2OSA Marcin +2602128 SP2WGU Piotr +2602129 SQ2MHM Maciej +2602130 SQ2FRB Andrzej +2602131 SP2HCB Jarek +2602132 SP2PUT Klub +2602133 SP2JFW Marcin +2602134 SP2GPS Wojciech +2602135 SP2RCH Rafal +2602136 SP2JTC Lukasz +2602137 SP2BEM Henryk +2602138 SP2WIM Kazimierz +2602139 SQ1EIC Wojciech +2602140 SP2JP Edward +2602141 SP2DFW Ela +2602142 SP2NS Norbert +2602143 SP2RXY Dorota +2602144 SP2SWR Piotr +2602145 SP2KRZ Krzysztof +2602146 SP2IJ Janusz +2602147 SP2WDV Zbigniew +2602148 SQ2TAC Pawel +2602149 SP2GTV Daniel +2602150 SQ2NUD Piotr +2602151 SP2ALT Wojciech +2602152 SP2HCA Alan +2602153 SP2LQP Piotr +2602154 SP2KFQ Klub +2602155 SP2NBV Waclaw +2602156 SP2GK Grzegorz +2602157 SP2RTA Karol +2602158 SQ2MO Michal +2602159 SP2MBN Krzysztof +2602160 SQ2MFM Slawomir 2603001 SQ3CLK Michal 2603002 SQ3GJH Chrystian 2603003 SP3WBY Artur @@ -41450,15 +49684,15 @@ 2603031 SQ3KC Przemek 2603032 SP3JJ Jarek 2603033 SP3WWZ Wojtek -2603034 SQ5MKD IRENEUSZ +2603034 SQ3MKD Ireneusz 2603035 SQ3PHA Leszek -2603036 SQ3MKD IRENEUSZ +2603036 SQ3MKD Ireneusz 2603037 SQ3MKD Ireneusz 2603038 SP3WWV Ryszard 2603039 SQ3KKV Piotr 2603040 SQ3OGO Arkadiusz 2603041 SQ3PJN Henryk -2603042 SO3AK Greg +2603042 SO3AK Grzegorz 2603043 SQ3LLB Andrzej 2603044 SQ3LVD Tomek 2603045 SQ8IFI Krzysztof @@ -41472,52 +49706,52 @@ 2603053 SP3THA Tomasz 2603054 SP3NUV Pawel 2603055 SQ3EMX Pawel -2603056 SQ3PCA Chris -2603057 SQ3HVH Morfeusz -2603058 SQ3KKO Mayoo -2603059 SO3POL Lary -2603060 SP3OCG Greg +2603056 SQ3PCA Krzysztof +2603057 SQ3HVH Dariusz +2603058 SQ3KKO Jaroslaw +2603059 SO3POL Tomasz +2603060 SP3OCG Grzegorz 2603061 SP3JP Jan 2603062 SQ3TGN Mariusz -2603063 SP3WWD Anteniarz -2603064 SQ3KNL Christoph +2603063 SP3WWD Dariusz +2603064 SQ3KNL Krzysztof 2603065 SQ3NTO Michal 2603066 SQ3OPH Pawel -2603067 SP3IZN SP3IZN -2603068 SQ3MQD SQ3MQD +2603067 SP3IZN Krzysiek +2603068 SQ3MQD Andrzej 2603069 SP3ANL Andrzej 2603070 SQ3XZ Adam -2603071 SQ3BMW SQ3BMW -2603072 SP3XBS BARTOSZ -2603073 SP3ABW SP3ABW -2603074 SQ3PCL SQ3PCL +2603071 SQ3BMW Wojciech +2603072 SP3XBS Bartosz +2603073 SP3ABW Krzysztof +2603074 SQ3PCL Jakub 2603075 SQ3SHK Adrian 2603076 SP3LOZ Artek -2603077 SQ3SII Fredrikson +2603077 SQ3SII Rafal 2603078 SP3JK Jacek 2603079 SP3GTP Eryk -2603080 SP3ACK SP3ACK +2603080 SP3ACK Tomasz 2603081 SP3SLD Robert -2603082 SQ3MVE SQ3MVE +2603082 SQ3MVE Mariusz 2603083 SQ3OPD Maciej -2603084 SQ3JPL SQ3JPL -2603085 SP3ADC SP3ADC -2603086 SP3CJC SP3CJC -2603087 SP3EEV SP3EEV -2603088 SP3KG SP3KG -2603089 SQ3SWB SQ3SWB +2603084 SQ3JPL Rafal +2603085 SP3ADC Michal +2603086 SP3CJC Marian +2603087 SP3EEV Darek +2603088 SP3KG Krzysztof +2603089 SQ3SWB Szymon 2603090 SQ3TS Wojtek -2603091 SQ3NMY SQ3NMY-Krzysztof -2603092 SP3EQU SP3EQU -2603093 SQ3LMR Hen +2603091 SQ3NMY Krzysztof +2603092 SP3EQU Janusz +2603093 SQ3LMR Henryk 2603094 SQ3JPX Lukasz -2603095 SP3TLU Sp3tlu-Sebastian +2603095 SP3TLU Sebastian 2603096 SP3GLL Lukasz -2603097 SP3PKC KLUB -2603098 SP3IMM Stan +2603097 SP3PKC Klub +2603098 SP3IMM Stanislaw 2603099 SP3UQQ Ryszard -2603100 SP3YOR Radio -2603101 SP3IZN KRZYSIEK +2603100 SP3YOR Klub +2603101 SP3IZN Krzysiek 2603102 SQ3KNF Maciek 2603103 SP3VST Radek 2603104 SP3GEG Pawel @@ -41525,12 +49759,12 @@ 2603106 SP3NYM Maciek 2603107 SP3CAD Darek 2603108 HF3P Tomasz -2603109 SP3VPY Zofia-Alina +2603109 SP3VPY Zofia 2603110 SQ3OOM Pawel -2603111 SP3JIP Gawronski +2603111 SP3JIP Bogdan 2603112 SP3PTT Jakub -2603113 SP3O SP3O -2603114 SQ3OPL SQ3OPL +2603113 SP3O Grzegorz +2603114 SQ3OPL Grzegorz 2603115 SP3FDE Zbigniew 2603116 SQ3SKN Jarek 2603117 SQ3M Marcin @@ -41540,18 +49774,69 @@ 2603121 SQ3H Maciej 2603122 SP3AM Andrzej 2603123 SQ3DZY Marian -2603124 SQ3VAY SAWEK +2603124 SQ3VAY Slawek 2603125 SO3ALG Niko 2603126 SP3HTF Rafal 2603127 SQ3KLI Marek -2603128 SQ3NMX SQ3NMX -2603129 SP3HDU SP3HDU -2603130 SQ3MKT SQ3MKT -2603131 SP3SPK PIOTR -2603132 SQ3SWR SQ3SWR -2603133 SP3CAI Bart +2603128 SQ3NMX Gerard +2603129 SP3HDU Janusz +2603130 SQ3MKT Daniel +2603131 SP3SPK Piotr +2603132 SQ3SWR Maciej +2603133 SP3CAI Bartosz 2603134 SQ3MKT Daniel -2603135 SP3RAT Sp3rat +2603135 SP3RAT Jerzy +2603136 SP3DX Darek +2603137 SP3DN Dawid +2603138 SQ3PJV Darek +2603139 SP3NYR Waldemar +2603140 SP3PA Arkadiusz +2603141 SQ3MKI Zbigniew +2603142 SP3PW Patryk +2603143 SP3PP Piotr +2603144 SP3DVO Mariusz +2603145 HF3O Michal +2603146 SQ3PJV Darek +2603147 SQ3NQF Lukasz +2603148 HF3M Maciej +2603149 SP3X Blazej +2603150 SP3QDE Kazimierz +2603151 SQ3GJT Krzysiek +2603152 SQ3BMI Boguslaw +2603153 SP3HVE Jaroslaw +2603154 SP3OW Mirek +2603155 HF3MDW Klub +2603156 SP3KKV Piotr +2603157 SQ3KNR Krzysztof +2603158 SO3D Damian +2603159 SQ3NQA Bartek +2603160 SP3MAX Przemek +2603161 SQ3NQA Bartek +2603162 SQ3BYS Gienek +2603163 SP3MWT Marcin +2603164 SP3BOS Krzysztof +2603165 SQ9ORM Marcin +2603166 SP3WKK Wojciech +2603167 SP3CM Czeslaw +2603168 SQ3PMN Krzysztof +2603169 SQ3TKZ Maciej +2603170 SP3WXH Rafal +2603171 SQ3OPC Szymon +2603172 SP3QFS Jarek +2603173 SP3NGN Henryka +2603174 SP3KPH Klub +2603175 SQ3SKU Bogdan +2603176 SQ3KKT Darek +2603177 SP3MKI Zbigniew +2603178 SP3FDE Zbigniew +2603179 SP3MH Waldemar +2603180 SQ3LMK Marcin +2603181 SP3AK Adam +2603182 SQ3BEA Lukasz +2603183 SP3K Roman +2603184 SQ3WT Piotr +2603185 SP3SGS Szymon +2603186 SP3RAX Piotr 2604001 SQ4HRL Przemyslaw 2604002 SQ4LWO Krzysztof 2604003 SQ4OJA Adam @@ -41568,12 +49853,12 @@ 2604014 SP4SHL Henryk 2604015 SQ4IOI Krzysztof 2604016 SQ4NJQ Norbert -2604017 SQ4KDE Jarosaw +2604017 SQ4KDE Jaroslaw 2604018 SQ4KDF Tomek 2604019 SP4OIQ Kazimierz 2604020 SQ4KDK Adam 2604021 SQ4NYZ Pawel -2604022 SQ4FAE Chris +2604022 SQ4FAE Krzysztof 2604023 SP4XQE Jerzy 2604024 SQ4MUI Adam 2604025 SP4WK Wojtek @@ -41582,10 +49867,10 @@ 2604028 SQ4IOE Mariusz 2604029 SQ4HSE Bartek 2604030 SQ4INC Piotr -2604031 SQ4GXA Jonas -2604032 SQ4KLM Martin -2604033 SP4XKB Konrad -2604034 SQ4RSU Gryf +2604031 SQ4GXA Jan +2604032 SQ4KLM Marcin +2604033 SP4XKB Cezary +2604034 SQ4RSU Bartlomiej 2604035 SP4XKB Cezar 2604036 SP4WRZ Irek 2604037 SP4RZA Andrzej @@ -41602,61 +49887,117 @@ 2604048 SP4TVO Maciej 2604049 SQ4OC Mateusz 2604050 SP4OIS Dariusz -2604051 SQ4BJO KarolBJO +2604051 SQ4BJO Karol 2604052 SQ4FXT Jan 2604053 SQ4OZZ Lukasz 2604054 SQ4HKP Robert -2604055 SP4OIS SP4OIS -2604056 SQ4IOR Kulczyk -2604057 SQ4DRG Dragoman -2604058 SP4RKZ Sp4rkz -2604059 SP4J SP4J +2604055 SP4OIS Dariusz +2604056 SQ4IOR Grzegorz +2604057 SQ4DRG Jozef +2604058 SP4RKZ Przemek +2604059 SP4J Adam 2604060 SQ4SGI Arkadiusz -2604061 SQ4PAP WOJCIECH +2604061 SQ4PAP Wojciech 2604062 SQ4KOP Stanislaw -2604063 SP4TOM T +2604063 SP4TOM Tomasz 2604064 SQ4KDC Pawel 2604065 SO4ATA Marek 2604066 SP4RUD Henryk 2604067 SQ4O Rafal 2604068 SP4XBZ Jarek -2604069 SP4BU SP4BU +2604069 SP4BU Bartosz 2604070 SQ4PKW Kamil -2604071 SP4AU SP4AU -2604072 SP4TN SP4TN +2604071 SP4AU Andrzej +2604072 SP4TN Tadeusz 2604073 SP4GJ Grzegorz 2604074 SP4BF Bartek -2604075 SP4BKE Widerski -2604076 SO4ASQ MARIAN -2604077 SQ4RAB Wojtek +2604075 SP4BKE Bogdan +2604076 SO4ASQ Marian +2604077 SQ4RAB Wojciech 2604078 SP4EIV Krzysztof 2604079 SQ4JEN Dominik 2604080 SQ4BJS Mirek -2604081 SP4DLD Sp4dld -2604082 SQ4CTM Zdziseaw +2604081 SP4DLD Andrzej +2604082 SQ4CTM Zdzislaw 2604083 SQ4RNG Jozef -2604084 SP4FEU SP4FEU -2604085 SQ4CVC SQ4CVC +2604084 SP4FEU Dariusz +2604085 SQ4CVC Krzysztof 2604086 SQ4HWI Artur -2604087 SP4RV Greg -2604088 SQ4MSV Meg +2604087 SP4RV Grzegorz +2604088 SQ4MSV Malgorzata 2604089 SP4V Grzegorz -2604090 SQ4CD SQ4CD -2604091 SQ4HKD SQ4HKD +2604090 SQ4CD Lucyna +2604091 SQ4HKD Maciek 2604092 SP4LVC Bogdan 2604093 SP4AC Adam -2604094 SP4GED Jozek +2604094 SP4GED Jozef 2604095 SP4MAZ Klub +2604096 SQ4G Grzegorz +2604097 SP4FEU Dariusz +2604098 SQ4RSU Bartek +2604099 SQ4AVH Anatol +2604100 HF4U Paulina +2604101 SP4NKQ Gienek +2604102 SP4JLT Tomasz +2604103 SQ4IOB Jarek +2604104 SQ4A Adam +2604105 SP4MC Marek +2604106 SP4HMS Stasiek +2604107 SP4TZ Tomek +2604108 SP4NN Piotr +2604109 SP4NKT Jan +2604110 SQ4LOL Rafal +2604111 SP4Y Jurek +2604112 SQ4RSX Tomasz +2604113 SQ4HRD Dariusz +2604114 SP4XKS Andrzej +2604115 SP4MPN Zbigniew +2604116 SP4BK Karol +2604117 SP4RR Michal +2604118 SQ4CTP Michal +2604119 SQ4KBK Ryszard +2604120 SQ4OJL Bogumil +2604121 HF4ALL Marcin +2604122 SP4DLD Andrzej +2604123 SP4RBM Bogdan +2604124 SQ4IZM Marcin +2604125 SP4CPQ Waldemar +2604126 SP5MBI Bogdan +2604127 SP4WSG Waldemar +2604128 SP4AKA Roman +2604129 SQ4MIK Piotr +2604130 SP4EB Adam +2604131 SP4J Adam +2604132 SP4AD Adrian +2604133 SP4OLA Ola +2604134 SP4SAP Pawel +2604135 SP4API Tomasz +2604136 SQ4Q Radek +2604137 SQ4HKP Robert +2604138 SQ2DOL Adam +2604139 SP4AX Kacper +2604140 SQ4EWA Marian +2604141 SQ4RO Roman +2604142 SQ4JEE Andrzej +2604143 SP4UW Igor +2604144 SQ4RCU Adam +2604145 SQ4RNA Marek +2604146 SP4UQ Bazyli +2604147 SQ4NJX Marek +2604148 SQ4HKG Slawek +2604149 SP4CMH Stanislaw +2604150 SQ4NMR Robert +2604151 SQ4EME Michal 2605001 SP5GDM Jan 2605002 SP5GDM Jan 2605003 SP5GDM Jan 2605004 SP5TAV Artur 2605005 SP5TAV Artur -2605006 SQ5AGQ Tom +2605006 SQ5AGQ Tomasz 2605007 SP5QWK Artur 2605008 SQ5STX Pawel 2605009 SP5QWE Marcin -2605010 SQ5AKC Krzysiek +2605010 SQ5AKC Krzysztof 2605011 SP5QWE Marcin 2605012 SP5NZZ Tomek 2605013 SQ5FBI Andrzej @@ -41672,7 +50013,7 @@ 2605023 SP5QWV Jarek 2605024 SQ5MJF Michal 2605025 SQ5MRB Roman -2605026 SQ5AKC Krzysiek +2605026 SQ5AKC Krzysztof 2605027 SP5QIR Artur 2605028 SP5QNI Marcin 2605029 SP5IUZ Kazimierz @@ -41715,7 +50056,7 @@ 2605066 SQ5PEX Adrian 2605067 SQ5LTT Andrzej 2605068 SQ5OVI Pawel -2605069 SP5YAM Radioclub +2605069 SP5YAM Klub 2605070 SQ5ABZ Halina 2605071 SQ5AAG Jacek 2605072 SQ5SCR Mariusz @@ -41735,7 +50076,7 @@ 2605086 SQ5H Henryk 2605087 SQ5MBM Jacek 2605088 SQ8KJF Krzysztof -2605089 SP5WLZ Ukasz +2605089 SP5WLZ Lukasz 2605090 SQ5PWE Marcin 2605091 SQ5OMU Konrad 2605092 SQ7BCZ Rafal @@ -41743,15 +50084,15 @@ 2605094 SP5RP Adam 2605095 SQ5LNU Karol 2605096 SQ8RMY Marcin -2605097 SO5S Andy +2605097 SO5S Andrzej 2605098 SP5E Marcin 2605099 SQ8GKT Jacek 2605100 SP5IGW Tadeusz 2605101 SQ5OMZ Cezary 2605102 SP5ML Lukasz -2605103 SP5DXU Sp5dxu -2605104 SP5ZZ 495 -2605105 SQ8ISD Diabel +2605103 SP5DXU Ryszard +2605104 SP5ZZ Zenon +2605105 SQ8ISD Artur 2605106 SQ5AZZ Darek 2605107 SP5AZZ Damian 2605108 SQ8KJK Artur @@ -41760,9 +50101,9 @@ 2605111 SQ5HUE Sebastian 2605112 SP5EOS Armandiusz 2605113 SQ5PGC Marcin -2605114 SQ4G Sadek -2605115 SO5WJ Krecina -2605116 SP2WII Matti1974 +2605114 SQ4G Grzegorz +2605115 SO5WJ Andrzej +2605116 SP2WII Maciej 2605117 SQ5JUC Rafal 2605118 SQ5DM Dariusz 2605119 SQ5WAF Krzysztof @@ -41770,31 +50111,31 @@ 2605121 SQ5WC Wlodzimierz 2605122 SQ5MC Monika 2605123 SQ5JUC Rafal -2605124 SQ5RM SQ5RM -2605125 SP5VYH Sp5vyh +2605124 SQ5RM Robert +2605125 SP5VYH Adam 2605126 SQ5LTD Jerzy -2605127 SQ7ECD Andreus -2605128 SQ5U SQ5U +2605127 SQ7ECD Andrzej +2605128 SQ5U Sebastian 2605129 SQ5DB Darek 2605130 SQ5W Artur 2605131 SQ5NPO Tomasz -2605132 SP5SO SP5SO +2605132 SP5SO Sebastian 2605133 SO5BC Michal 2605134 SO5CAM Lukasz 2605135 SQ5KGV Artur 2605136 SQ5STP Andrzej 2605137 SO5WF Marcin -2605138 SQ5JRC Broda -2605139 SQ5SAJ Saenta +2605138 SQ5JRC Piotr +2605139 SQ5SAJ Jan 2605140 SQ5IRI Grzegorz 2605141 SP5TDK Tadeusz 2605142 SP5IOU Marcin 2605143 SP5DLX Michal 2605144 SO5M Michal -2605145 SP5GO Gotoxy -2605146 SP5MET Methyl +2605145 SP5GO Radek +2605146 SP5MET Tomasz 2605147 SP5SMY Pawel -2605148 SQ5SCV SQ5SCV +2605148 SQ5SCV Piotr 2605149 SP5NAF Grzegorz 2605150 SQ5PTU Alan 2605151 SQ5SSY Tomasz @@ -41803,20 +50144,20 @@ 2605154 SP5IWE Eugeniusz 2605155 SQ5AZY Bogdan 2605156 SP7VMX Marcin -2605157 SP5MG Peter -2605158 SQ5PFF Wojtek +2605157 SP5MG Piotr +2605158 SQ5PFF Wojciech 2605159 SQ5LNF Marcin 2605160 SP5WRN Radek 2605161 SQ5KHL Jacek -2605162 SQ5OUZ Zibi -2605163 SQ5EBM Mushal +2605162 SQ5OUZ Zbigniew +2605163 SQ5EBM Maciej 2605164 SQ5IT Mateusz 2605165 SQ5ARB Czesio 2605166 SQ5CW Sebastian 2605167 SP5QIA Krzysztof 2605168 SP5QWA Piotr -2605169 SP5XEZ Maserati -2605170 SQ5DVU Kolbush +2605169 SP5XEZ Piotr +2605170 SQ5DVU Sebastian 2605171 SQ5JUP Piotr 2605172 SQ5LNL Marcin 2605173 SP5MP Michal @@ -41829,73 +50170,73 @@ 2605180 SQ7HGN Mariusz 2605181 SP5LDU Lukasz 2605182 SP5SO Sebastian -2605183 SP5RE Hub +2605183 SP5RE Hubert 2605184 SQ5OUO Rafal 2605185 SP5MASR EmCom 2605186 SP5MXW Wojtek -2605187 SO5PRZ Puzel +2605187 SO5PRZ Rafal 2605188 SP5UNL Piotr 2605189 SQ7ECD Andrzej 2605190 SQ5PGL Zbyszek 2605191 SQ5IQK Pawel 2605192 SP5TSS Artur -2605193 SQ5PE Boleseaw +2605193 SQ5PE Boleslaw 2605194 SP7WQY Radek -2605195 SP5KTP KTP +2605195 SP5KTP Tadeusz 2605196 SP5PI Pawel -2605197 SP5HAX HAX -2605198 SP5OSP SP5OSP +2605197 SP5HAX Michal +2605198 SP5OSP Michal 2605199 SQ5TB Boguslaw -2605200 SQ5KIE Eric -2605201 SQ5KIK Bartolo -2605202 SQ5OB SQ5OB -2605203 SQ5ARF Zolnierz -2605204 SQ5AZQ Yeezy -2605205 SQ5SKB SQ5SKB +2605200 SQ5KIE Eryk +2605201 SQ5KIK Bartek +2605202 SQ5OB Pawel +2605203 SQ5ARF Piotr +2605204 SQ5AZQ Jerzy +2605205 SQ5SKB Karol 2605206 SQ5SDL Piotr -2605207 SP5OSP SP5OSP -2605208 SQ5B SQ5B +2605207 SP5OSP Michal +2605208 SQ5B Mariusz 2605209 SQ5ALQ Piotr -2605210 SQ5RJK SQ5RJK -2605211 SQ5H HENRYK +2605210 SQ5RJK Dariusz +2605211 SQ5H Henryk 2605212 SP5FA Agatka -2605213 SP5FT Zibi +2605213 SP5FT Zbyszko 2605214 SP5TA Jacenty -2605215 SQ5GN SQ5GN +2605215 SQ5GN Krzysztof 2605216 SP5DRS Darek -2605217 SP5UAM MIREK -2605218 SP5MNL SP5MNL +2605217 SP5UAM Mirek +2605218 SP5MNL Leszek 2605219 SP5KRD Marta -2605220 SP5OXF Kristof +2605220 SP5OXF Krzysztof 2605221 SP5L Edek 2605222 SQ5O Mariusz -2605223 SQ5VTT SQ5VTT -2605224 SP5MGS GS +2605223 SQ5VTT Tadeusz +2605224 SP5MGS Grzegorz 2605225 SP5XOC Marek -2605226 SQ5JRN SQ5JRN -2605227 SQ5RE SQ5RE -2605228 SQ5LTM SQ5LTM -2605229 SQ5IQY BartekS -2605230 SP5UX SP5UX -2605231 SQ5TDW Greg -2605232 SO3Z Andy -2605233 SP5USG SP5USG -2605234 SQ5PL SQ5Pl -2605235 SQ5T SQ5T -2605236 SQ5DRO SQ5DRO +2605226 SQ5JRN Kamil +2605227 SQ5RE Robert +2605228 SQ5LTM Agnieszka +2605229 SQ5IQY Bartek +2605230 SP5UX Marcin +2605231 SP5APM Grzegorz +2605232 SO3Z Andrzej +2605233 SP5USG Grzegorz +2605234 SQ5PL Marcin +2605235 SQ5T Tomasz +2605236 SQ5DRO Norbert 2605237 SP5VAP Piotr -2605238 SQ5OSP SQ5OSP +2605238 SQ5OSP Katarzyna 2605239 SP5RK Radek -2605240 SP5GNI Miro -2605241 SP5EQK SP5EQK -2605242 SP5ME SP5ME +2605240 SP5GNI Miroslaw +2605241 SP5EQK Zbigniew +2605242 SP5ME Mikolaj 2605243 SP5EB Marcin -2605244 SQ5KLN Piotr_SQ5KLN -2605245 SP5XOV Afgan -2605246 SQ5OBV Cooba -2605247 SO5U SO5U +2605244 SQ5KLN Piotr +2605245 SP5XOV Piotr +2605246 SQ5OBV Jakub +2605247 SO5U Piotr 2605248 SQ5AXA Adam -2605249 SO5EV Swistak +2605249 SO5EV Przemyslaw 2605250 SQ5RCN Piotr 2605251 SO5WJ Andrzej 2605252 SQ5NXX Marcin @@ -41903,7 +50244,7 @@ 2605254 SP5QWO Jacek 2605255 SQ5PEO Piotr 2605256 SP5XSL Mariusz -2605257 SQ5RIN SQ5RIN +2605257 SQ5RIN Piotr 2605258 SO5AJG Janusz 2605259 SQ2IBK Maciek 2605260 SP5FEM Jan @@ -41912,40 +50253,40 @@ 2605263 SP5WIT Wit 2605264 SQ5ADA Daniel 2605265 SQ5PFI Andrzej -2605266 SQ5CZL Sq5czl +2605266 SQ5CZL Robert 2605267 SP5TZD Tomasz 2605268 SQ5SUI Jacek -2605269 SP5ATA SP5ATA +2605269 SP5ATA Aleksander 2605270 SQ5TDR Jacek 2605271 SP5ITI Mariusz -2605272 SP5VFC SP5VFC +2605272 SP5VFC Tadeusz 2605273 SQ5WN Krzysztof 2605274 SQ5AKY Marian -2605275 SQ5MOV Grazka +2605275 SQ5MOV Grazyna 2605276 SQ5LNB Benek -2605277 SQ5NHI SQ5NHI +2605277 SQ5NHI Michal 2605278 SP5RMY Bogdan 2605279 SQ5OVG Marek -2605280 SQ5IZY SQ5IZY -2605281 SQ5JUF SQ5JUF +2605280 SQ5IZY Daniel +2605281 SQ5JUF Hubert 2605282 SQ5IT Mateusz -2605283 SQ5CZP Peter +2605283 SQ5CZP Przemyslaw 2605284 SP5WWY Michal 2605285 SQ5PWF Michal 2605286 SP5XAY Ludwik -2605287 SP5TZO SP5TZO +2605287 SP5TZO Zbyszek 2605288 SQ5LTF Pawel 2605289 SP5DPB Stanislaw 2605290 SQ5ARC Kazimierz 2605291 SP5VJL Lukasz -2605292 SP5KAB SP5KAB +2605292 SP5KAB Klub 2605293 SP5MZ Mateusz 2605294 SP5EQT Stanislaw 2605295 SQ5GZ Rafal 2605296 SO5BCT Maciek 2605297 SQ5NWH Jakub 2605298 SQ5SCQ Robert -2605299 SQ7HGL Kajtek +2605299 SQ7HGL Piotr 2605300 SQ5MBT Zbigniew 2605301 SP5BHO Wojtek 2605302 SQ5ATC Lukasz @@ -41953,22 +50294,22 @@ 2605304 SQ5ZG Zbigniew 2605305 SP5KRD Klub 2605306 SP7XFF Grzegorz -2605307 SQ5WJ ZBIGNIEW +2605307 SQ5WJ Zbigniew 2605308 SQ5PFE Artur -2605309 SP5MKL Michae +2605309 SP5MKL Michal 2605310 SQ5G Maciej 2605311 SP5PRF Wojciech 2605312 SP5CJG Pawel -2605313 SP8XGV Michael +2605313 SP8XGV Michal 2605314 SQ5OVK Szymon 2605315 SP5LMA Lukasz 2605316 SQ5WF Slawek -2605317 SP5OXP Ted +2605317 SP5OXP Tadeusz 2605318 SO5EV Przemyslaw 2605319 SQ5HAJ Remi -2605320 SQ5BPX ZDZISLAW -2605321 SP5LS SP5LS -2605322 SP5E SP5E +2605320 SQ5BPX Zdzislaw +2605321 SP5LS Marek +2605322 SP5E Krzysztof 2605323 SP5IT Mike 2605324 SP5MRK Wojciech 2605325 SP5AWK Krzysztof @@ -41979,28 +50320,154 @@ 2605330 SQ5BLK Pawel 2605331 SP5MRF Andrzej 2605332 SP5CI Klub -2605333 SP5MP SP5MP +2605333 SP5MP Michal 2605334 SO5UAZ Marcin 2605335 SQ5JW Kuba -2605336 SP5WWP SP5WWP -2605337 SP5MEM MICHAL -2605338 SQ5AZK Piotr943 -2605339 SQ5WPR SQ5WPR -2605340 SQ5MEF SQ5MEF -2605341 SQ5BHP SQ5BHP +2605336 SP5WWP Wojciech +2605337 SP5MEM Michal +2605338 SQ5AZK Piotr +2605339 SQ5WPR Karol +2605340 SQ5MEF Lukasz +2605341 SQ5BHP Agnieszka 2605342 SP4XYD Jarek -2605343 SQ5RGY SQ5RGY +2605343 SQ5RGY Pawel 2605344 SP5V Tomek 2605345 SQ5SWO Michal -2605346 SP5VR Chris +2605346 SP5VR Krzysztof 2605347 SQ5RZS Sebastian 2605348 SP5SJR Robert -2605349 SQ5LAB SQ5LAB +2605349 SQ5LAB Dariusz 2605350 SQ5IRH Daniel 2605351 SP5MJ Marek +2605352 SO5TC Tymon 2605353 SP5PK Piotr 2605354 SQ5AKY Marian 2605355 SP5VIR Ryszard +2605356 SP5SPS Jacek +2605357 SP5KEI Rafal +2605358 SQ7HGB Wojtek +2605359 SQ5STQ Marcin +2605360 SP5SM Marek +2605361 SO5BS Bartek +2605362 SQ7BZ Bartek +2605363 SP5UHX Basia +2605364 SQ5JRZ Bartek +2605365 SO5AJG Janusz +2605366 SQ5JUV Krzysztof +2605367 SQ5PTN Przemyslaw +2605368 SQ5FLD Henryk +2605369 SQ5VJA Jarek +2605370 SP5EKE Bartlomiej +2605371 SP5ISF Jozef +2605372 SP5UHX Basia +2605373 SP5ELA Zygmunt +2605374 SQ5STS Pawel +2605375 SP5WE Filip +2605376 SP5JI Czeslaw +2605377 SP5OXB Andrzej +2605378 SP5TSS Artur +2605379 SP5KE Marek +2605380 SP5MPK Mariusz +2605381 SP5GON Marcin +2605382 SQ5AT Grzegorz +2605383 SP5RM Rafal +2605384 SP5TM Tomek +2605385 SP5AIK Arek +2605386 SP5TA Jacenty +2605387 SQ5WM Marcin +2605388 SP5GDX Krzysztof +2605389 SP5BBG Tadeusz +2605390 SP5TAO Piotr +2605391 SO5YY Mateusz +2605392 SP5TAL Witek +2605393 SQ5SOP Robert +2605394 SQ5KHM Maciej +2605395 SP5HPN Miroslaw +2605396 SQ7FZR Robert +2605397 SQ5BIB Marek +2605398 SO5X Maciej +2605399 SQ5RZN Krzysztof +2605400 SP5RUN Daniel +2605401 SQ5BIK Andrzej +2605402 SP5VIW Wlodek +2605403 SP5ADF Zbyszek +2605404 SQ5D Wojciech +2605405 SP5CJG Pawel +2605406 SP5TIR Tomasz +2605407 SP5QAD Marcin +2605408 SQ5EWV Bogdan +2605409 SQ5PTZ Piotr +2605410 SP5XEM Konrad +2605411 SP5TAZ Zdzislaw +2605412 SO5MAX Maciej +2605413 SP5KMG Maciek +2605414 SQ5ISG Adam +2605415 SQ5GN Krzysztof +2605416 SP5BDA Arek +2605417 SP5DUJ Andrzej +2605418 SQ5JUO Mariusz +2605419 SQ5JUE Agnieszka +2605420 SQ5TK Tomek +2605421 SQ5PFB Piotr +2605422 SP5DUR Kuba +2605423 SP5WPO Piotr +2605424 SP5HIN Krzysztof +2605425 SP7FNU Piotr +2605426 SQ9NKF Krystian +2605427 SQ5PGG Mariusz +2605428 SP5XMY Darek +2605429 SP5UUD Andrzej +2605430 SP5TD Tomasz +2605431 SP5CUK Andrzej +2605432 SP5QWJ Slawomir +2605433 SP5DPD Wojciech +2605434 SQ5LC Piotr +2605435 SP5MAT Bogdan +2605436 SQ5BLN Marcin +2605437 SP5TBX Tomasz +2605438 HF5DX Piotr +2605439 SP5XAQ Pawel +2605440 SQ5SAA Jan +2605441 SQ5MJA Artur +2605442 SQ5CJZ Robert +2605443 SQ5LTE Slawomir +2605444 SP5G Robert +2605445 SP5MXT Tadeusz +2605446 SP5X Andrzej +2605447 SQ5NPO Tomasz +2605448 SQ5KC Krzysztof +2605449 SQ5RIM Adam +2605450 SP5MXZ Wojciech +2605451 SP5BWN Pawel +2605452 SP5PA Pawel +2605453 SQ5WLE Andrzej +2605454 SQ5KOH Olaf +2605455 SQ5SAI Piotr +2605456 SP5PIO Piotr +2605457 SP5BK Krzysztof +2605458 SP5BJ Kuba +2605459 SQ7HQF Daniel +2605460 SQ5MWU Maciej +2605461 SQ5NBK Oskar +2605462 SP5XTY Dariusz +2605463 SP5OXI Jerzy +2605464 SQ5LS Lukasz +2605465 SP5LG Lukasz +2605466 SP5BRK Wladek +2605467 SP5A Artur +2605468 SP5AZ Tomasz +2605469 SQ9HH Manuel +2605470 3Z5ABW Andrzej +2605471 SO5KR Kacper +2605472 SQ5BPF Jacek +2605473 SP5VTV Wojciech +2605474 SP5DEJF Dawid +2605475 SP5DEJF Dawid +2605476 SP8WIP Piotr +2605477 SP5RDB Radek +2605478 SP5NZZ Tomasz +2605479 SP5TP Adam +2605480 SP5MS Piotr 2606001 SQ6ROK Andrzej 2606002 SQ6NCJ Jacek 2606003 SQ6IUB Kamil @@ -42022,29 +50489,30 @@ 2606019 SQ6OXK Pawel 2606020 SQ6LJR Sebastian 2606021 SQ6JAR Jarek -2606022 SQ6KQK KATARZYNA +2606022 SQ6KQK Katarzyna 2606023 3Z6AET Robert 2606024 SP6GYZ Krystian 2606025 SP6QNP Piotr 2606026 SP6B Krystian +2606027 SQ6KW Wilhelm 2606028 SQ6DXP Pawel -2606029 SQ6VRS Redzi -2606030 SP6AIF Arkos -2606031 SO6DWA So6dwa -2606032 SP6BJ Hugs +2606029 SQ6VRS Radoslaw +2606030 SP6AIF Arek +2606031 SO6DWA Grzegorz +2606032 SP6BJ Bartlomiej 2606033 SQ6OCZ Robert -2606034 SQ6ILS Santek +2606034 SQ6ILS Bartosz 2606035 SQ6IYC Mariusz 2606036 SQ6POG Pawel 2606037 SO6AFT Marek 2606038 SQ6POG Pawel 2606039 SP6VXU Jacek 2606040 SQ6LAE Jarek -2606041 SQ6MNN SQ6MNN +2606041 SQ6MNN Michal 2606042 SP6BAT Bartek -2606043 SP6VWX SP6VWX +2606043 SP6VWX Robert 2606044 SP6TM Marcin -2606045 SQ6ODL Przemyseaw +2606045 SQ6ODL Przemek 2606046 SQ6GIT Konrad 2606047 SQ6PLA Anna 2606048 SQ6LAE Jarek @@ -42052,72 +50520,129 @@ 2606050 SQ6RR Marcin 2606051 SQ6OMN Mariusz 2606052 SQ6JFB Marek -2606053 SQ6NZW Kris +2606053 SQ6NZW Krzysztof 2606054 SP6TK Tomasz 2606055 SQ6KQL Jerzy -2606056 SP6RSP Kris +2606056 SP6RSP Krzysztof 2606057 SQ6XL Arek 2606058 SQ6KLF Krzysztof 2606059 SQ6NTF Piotr 2606060 SQ6WX Andrzej 2606061 SQ6SEB Sebastian 2606062 SQ6IUH Jaroslaw -2606063 SQ6WE Miky +2606063 SQ6WE Michal 2606064 SQ6OCZ Robert 2606065 SQ9LOH Robert 2606066 SQ6KOJ Grzegorz 2606067 SQ6STD Marcin 2606068 SQ6OXK Pawel -2606069 SQ6ODL Sq6odl -2606070 SP6VXP SP6VXP-Andrzej +2606069 SQ6ODL Przemek +2606070 SP6VXP Andrzej 2606071 SP6LHI Jacek -2606072 SP6H2O Lukaszjok -2606073 SQ6KXY SQ6KXY +2606072 SP6H2O Lukasz +2606073 SQ6KXY Michal 2606074 SP6PF Peter -2606075 SP6SG SP6SG -2606076 SQ6KXW SQ6KXW -2606077 SP5MBX ANDRZEJ -2606078 SQ6KPO SQ6KPO -2606079 SQ6WW SQ6WW +2606075 SP6SG Slawek +2606076 SQ6KXW Diana +2606077 SP5MBX Andrzej +2606078 SQ6KPO Pawel +2606079 SQ6WW Marek 2606080 SQ6OWF Michal 2606081 SP9NLT Tomek -2606082 SQ6ADS RYSZARD -2606083 SQ6COD Sq6cod +2606082 SQ6ADS Ryszard +2606083 SQ6COD Beata 2606084 SQ6CZH Marcin -2606085 SQ6AJS Jazlo -2606086 SQ6KIV SQ6KIV -2606087 SP6RLH SP6RLH -2606088 SO6IQY Bill -2606089 SQ6VP CHRIS +2606085 SQ6AJS Arek +2606086 SQ6KIV Krzysztof +2606087 SP6RLH Jaroslaw +2606088 SO6IQY Zbigniew +2606089 SQ6VP Krzysztof 2606090 SQ6NSL Radoslaw -2606091 SQ6MIK SQ6MIK -2606092 SP6RLH SP6RLH -2606093 SQ6STB SQ6STB -2606094 SQ6MII SQ6MII +2606091 SQ6MIK M +2606092 SP6RLH Jarek +2606093 SQ6STB Wojciech +2606094 SQ6MII Krzysiek 2606095 SP6ICO Robert 2606096 SP6DIL Gienek 2606097 SQ6QQ Miroslaw 2606098 SQ6OXF Fryderyk -2606099 SP6BRT RYSZARD +2606099 SP6BRT Ryszard 2606100 SQ6XL Arkadiusz -2606101 SQ6COX SQ6COX +2606101 SQ6COX Krzysiek 2606102 SN6MP Mariusz 2606103 SQ6MEL Marcel -2606104 SP6EK SP6EK +2606104 SP6EK Robert 2606105 SP6QNP Piotr -2606106 SQ6MNW SQ6MNW -2606107 SP6QKM SP6QKM -2606108 SP6CZD SP6CZD -2606109 SP6TKI SP6TKI +2606106 SQ6MNW Sylwester +2606107 SP6QKM Marek +2606108 SP6CZD Cezary +2606109 SP6TKI Tomasz +2606110 SP6CZD Cezary +2606111 SQ6KQI Daniel +2606112 SP9UVG Gustaw +2606113 SQ6IYC Mariusz +2606114 SQ6FHV Sebastian +2606115 SP6AN Andrzej +2606116 SQ6JFN Piotr +2606117 SP6AA Wiesiek +2606118 SQ6POC Przemek +2606119 SQ6NDA Janusz +2606120 SQ6KMK Krzysztof +2606121 SP6RGZ Roman +2606122 SN6MP Mariusz +2606123 SO6TIR Marcin +2606124 SP6TPY Jerzy +2606125 SP6AN Andrzej +2606126 SQ6SGT Grzesiek +2606127 SQ6SEI Marek +2606128 SQ6JAR Jarek +2606129 SP6SK Slawek +2606130 SP6DNP Tadeusz +2606131 SQ6RDZ Wojtek +2606132 SP6MRC Tadeusz +2606133 SQ6LJY Marek +2606134 SP6MR Michal +2606135 SQ6KOA Tomasz +2606136 SP6RAM Jozef +2606137 SP6AGD Leszek +2606138 SQ6PNO Przemek +2606139 SP6WZC Michal +2606140 SP6GIY Tadeusz +2606141 SQ6DXZ Bernard +2606142 SQ6NLQ Andrzej +2606143 SP6KP Krzysiek +2606144 SP6DRT Maciej +2606145 SQ6CNW Andrzej +2606146 SO6AFO Marcin +2606147 SQ6MS Maciek +2606148 SP6HFE Grzegorz +2606149 SP6SMC Andrzej +2606150 SP6LUN Andrzej +2606151 SQ6WM Marcel +2606152 SQ6LZF Andrzej +2606153 SQ6DST Pawel +2606154 SP6BHT Pawel +2606155 SP0VU Piotr +2606156 SQ6RQT Michal +2606157 SP6TT Tomasz +2606158 SP6SOZ Ryszard +2606159 SO6G Tadeusz +2606160 SP6SJ Sebastian +2606161 SQ6RS Radoslaw +2606162 SP6V Grzegorz +2606163 SP6X Tomasz +2606164 SQ6O Anita +2606165 SP6KAT Krystian +2606166 SP6JIM Ireneusz 2607001 SQ7FKT Bartek 2607002 SQ7SCC Arek 2607003 SQ7LRX Adam 2607004 SQ7AYZ Piotr 2607005 SQ7OFD Artur 2607006 SQ7PFP Marcin -2607007 SP7BTS Miroslaw +2607007 SQ7SCC Arek 2607008 SQ7OFD Artur -2607009 SQ7SCC Arkadiusz +2607009 SQ7SCC Arek 2607010 SQ7AYZ Piotr 2607011 SQ7LRX Adam 2607012 SQ7JHC Lukasz @@ -42128,7 +50653,7 @@ 2607017 SP7UKL Cezary 2607018 SQ7YLA Monika 2607019 SQ7PEL Patryk -2607020 SO7OKL Oskar +2607020 SQ7OKL Oskar 2607021 SQ7FJB Piotr 2607022 SQ7LRX Adam 2607023 SQ7PSQ Wojciech @@ -42139,23 +50664,23 @@ 2607028 SQ7OTH Tomasz 2607029 SP7WNA Witek 2607030 SO7ABW Daniel -2607031 SQ7BLD Bilbolodz -2607032 SQ7RN Kosowski -2607033 SP7JB Jaroseaw +2607031 SQ7BLD Piotr +2607032 SQ7RN Zdzislaw +2607033 SP7JB Jaroslaw 2607034 SQ7TCW Tomasz 2607035 SQ7NHR Grzegorz 2607036 SP7EP Maciej 2607037 SP7LAK Krzysztof 2607038 SQ7RJX Jacek 2607039 SP7RDI Roman -2607040 SP7B Bog +2607040 SP7B Boguslaw 2607041 SQ7LQZ Ryszard 2607042 SQ7FSE Arkadiusz -2607043 SQ7PGT Zwierzak +2607043 SQ7PGT Tomasz 2607044 SQ7OTJ Robert 2607045 SQ7PGN Adam 2607046 SQ7FSO Krzysztof -2607047 SQ7RKF Doloro +2607047 SQ7RKF Tomasz 2607048 SP7V Tomek 2607049 SQ7ACP Artur 2607050 SP7JWT Wojtek @@ -42170,25 +50695,25 @@ 2607059 SP7IM Irek 2607060 SP7DAD Andrzej 2607061 SP7KT Esa -2607062 SQ7SL SQ7SL +2607062 SQ7SL Lukasz 2607063 SQ7JZW Grzegorz 2607064 SP7FOY Slawek 2607065 SQ7NNJ Grzegorz -2607066 SQ7JZW Grzesis +2607066 SQ7JZW Grzrgorz 2607067 SP7FXL Lukasz -2607068 SQ7KXG Szaman +2607068 SQ7KXG Grzegorz 2607069 SQ7NNJ Grzesiek -2607070 SP7JYM Mark +2607070 SP7JYM Mariusz 2607071 SP7BIX Radek 2607072 SP7HJR Marcin 2607073 SP7FXL Lukasz 2607074 SQ7IKZ Marcin 2607075 SQ7RL Ryszard -2607076 SQ7NSN Mike +2607076 SQ7NSN Michal 2607077 SP7X Jaroslaw 2607078 SQ7KVB Rafal -2607079 SQ7RJO Jaco -2607080 SQ7MHP Sq7mhp +2607079 SQ7RJO Jacek +2607080 SQ7MHP Mariusz 2607081 SP7LAK Krzysztof 2607082 SP7EM Emil 2607083 SP7IIX Marian @@ -42198,82 +50723,142 @@ 2607087 SP7X Jaroslaw 2607088 SP7KMP Pawel 2607089 SQ7FPH Arek -2607090 SP7JBG Tatiw -2607091 SP7JBG JACEKK +2607090 SP7JBG Jacek +2607091 SP7JBG Jacek 2607092 SQ7IQV Marcin -2607093 SP7NHS SP7NHS -2607094 SQ7PKP SQ7PKP -2607095 SP7UTO SP7UTO +2607093 SP7NHS Miroslaw +2607094 SQ7JS Janusz +2607095 SP7UTO Tomasz 2607096 SQ7SOM Kamil -2607097 SP7UDB Mariusz_UDB +2607097 SP7UDB Mariusz 2607098 SQ7IQV Marcin 2607099 SQ7PKP Wojtek -2607100 SP7KS Kris -2607101 SP7WTC SP7WTC -2607102 SQ7MHR Sq7mhr -2607103 SP7LB ASKIM -2607104 SP7VUQ SP7VUQ -2607105 SP7GJA PAWEL -2607106 SQ7TBD WLODEK -2607107 SQ7NHN SQ7NHN -2607108 SQ7AIS SQ7AIS -2607109 SP5RDH SP5RDH -2607110 SP7DX SP7DX -2607111 SQ7PA SQ7PA -2607112 SQ7OTK SQ7OTK -2607113 SQ7BCE Szafa -2607114 SP7VPR Viper.gutek -2607115 SQ7OED SQ7OED -2607116 SQ7NLI SQ7NLI -2607117 SQ7EWZ Mario -2607118 SQ7FSX SQ7FSX +2607100 SP7KS Krzysztof +2607101 SP7WTC Jaroslaw +2607102 SQ7MHR Rafal +2607103 SP7LB Tomasz +2607104 SP7VUQ Tomasz +2607105 SP7GJA Pawel +2607106 SQ7TBD Wlodek +2607107 SQ7NHN Marek +2607108 SQ7AIS Marcin +2607109 SP5RDH Ryszard +2607110 SP7DX Jacek +2607111 SQ7PA Pawel +2607112 SQ7OTK Marcin +2607113 SQ7BCE Marcin +2607114 SP7VPR Sebastian +2607115 SQ7OED Krzysiek +2607116 SQ7NLI Tomek +2607117 SQ7EWZ Mariusz +2607118 SQ7FSX Rafal 2607119 SQ7HJC Krzysztof -2607120 SQ7OWV SQ7OWV +2607120 SQ7OWV Robert 2607121 SP7AB Piotr 2607122 SP7MP Maciej 2607123 SQ7PSQ Wojciech 2607124 SP7PZT Pawel 2607125 SQ7BFY Adam 2607126 SQ7EQT Slawek -2607127 SQ7OWS ANDRZEJ +2607127 SQ7OWS Andrzej 2607128 SP7ELC Wiktor -2607129 SP7SZC SP7SZC +2607129 SP7SZC Marcin 2607130 SP7TQ Marcin -2607131 SQ7HQZ SQ7HQZ +2607131 SQ7HQZ Lukasz 2607132 SP7IIY Piotr 2607133 SQ7OFM Klaudiusz -2607134 SO7AML SO7AML -2607135 SQ7IQT SQ7IQT -2607136 SQ7HIK Sq7hik@gmail.com +2607134 SO7AML Marek +2607135 SQ7IQT Krzysztof +2607136 SQ7HIK Karol 2607137 SQ7SOP Marcin 2607138 SQ7PTE Piotr 2607139 SP7UTO Tomasz -2607140 SP7ML SP7ML-Mateusz -2607141 SP3SUM AdamS -2607142 SQ7JZF Piotrek -2607143 SP7KO KRZYSZTOF +2607140 SP7ML Mateusz +2607141 SP3SUM Adam +2607142 SQ7JZF Piotr +2607143 SP7KO Krzysztof 2607144 SQ7OBJ Maciek 2607145 SP7TKM Tomek -2607146 SQ7SWP Pawee -2607147 SP7CKU SP7CKU -2607148 SQ7CHR Chrupl +2607146 SQ7SWP Pawel +2607147 SP7CKU Jozef +2607148 SQ7CHR Rafal 2607149 SQ7HJJ Lukasz -2607150 SQ7OIP SQ7OIP +2607150 SQ7OIP Jacek 2607151 SQ7NHY Krzysztof 2607152 SQ7NUT Krystian -2607153 SQ7CL LUKASZ -2607154 SQ7HJE SQ7HJE +2607153 SQ7CL Lukasz +2607154 SQ7HJE Darek 2607155 SP7TKM Tomasz -2607156 SP7MU Marmatus -2607157 3Z7K Gluba +2607156 SP7MU Marek +2607157 3Z7K Jan 2607158 SP7OMX Adam 2607159 SP7WTG Mateusz +2607160 SQ7FBA Tomek +2607161 SQ7ECZ Szymon +2607162 SP7SUM Adam +2607163 SQ7CGR Dariusz +2607164 SP7RT Konrad +2607165 SQ7XQ Piotr +2607166 SQ7JZS Janusz +2607167 SO7AFC Maciek +2607168 SQ7ECZ Szymon +2607169 SP7WJ Wojciech +2607170 SP7TSA Slawek +2607171 SQ7OWP Ryszard +2607172 SP7PN Piotr +2607173 SQ7RJX Jacek +2607174 SQ7NHY Krzysztof +2607175 SQ7E Piotr +2607176 SQ7LQL Darek +2607177 SP7RHA Robert +2607178 SQ7BTK Dariusz +2607179 SQ7PAB Adrian +2607180 SQ7LQZ Ryszard +2607181 SQ7CGS Krzysztof +2607182 SQ7KOT Dariusz +2607183 SQ7RF Robert +2607184 SQ7OVP Krzysiek +2607185 SQ7OWW Beata +2607186 SP5HZM Grzegorz +2607187 SQ7WOJ Wojciech +2607188 SP7TK Tomasz +2607189 SQ7JS Janusz +2607190 SP7CRR Kazik +2607191 SQ7OEB Lukasz +2607192 SP7TW Tomek +2607193 SP7SZK Piotr +2607194 SO7AMG Andrzej +2607195 SP7RJ Zenon +2607196 SQ7FSZ Tomasz +2607197 SP7XIE Marcin +2607198 SP7TH Tomasz +2607199 SQ7NPA Mateusz +2607200 SP7TECH Lodzki +2607201 SP7PLO Klub +2607202 SP7TUL Klub +2607203 SQ7JHU Adam +2607204 SP7CKH Kazimierz +2607205 SQ7TBC Damian +2607206 SQ7HJG Krzysztof +2607207 SQ7RKC Krzysztof +2607208 SP7A Piotr +2607209 SP7XJH Michal +2607210 SP7TC Tomasz +2607211 SP7F Pawel +2607212 SP7MR Robert +2607213 SP7I Jacek +2607214 SP7MDMX Maciek +2607215 SQ7IQA Krzysztof +2607216 SQ7EIS Pawel +2607217 SP7HDA Marian +2607218 SP7DAX Stanislaw +2607219 SQ9TBU Krzysztof 2608001 SP8WJS Andrzej 2608002 SP8PG Grzegorz 2608003 SQ8LUN Lukasz 2608004 SQ8KMY Robert 2608005 SP8MTA Tomasz -2608006 SQ8KJC AgnieszkaKA +2608006 SQ8KJC Agnieszka 2608007 SQ8NXM Pawel 2608008 SP8QEO Slawomir 2608009 SQ8OHR Krzysztof @@ -42281,8 +50866,8 @@ 2608011 SQ8ISJ Kamil 2608012 SP8WJS Andrzej 2608013 SQ8AGI Janusz -2608014 SQ8DRQ Sq8drq -2608015 SQ8NYM SQ8NYM +2608014 SQ8DRQ Daniel +2608015 SQ8NYM Piotr 2608016 SQ8AQO Jacek 2608017 SQ8RAU Marcin 2608018 SP8GPB Grzegorz @@ -42303,10 +50888,10 @@ 2608033 SQ8SEP Dariusz 2608034 3Z8FLY Jarek 2608035 SQ8DRH Marek -2608036 SP8HBD Kris +2608036 SP8HBD Krzysztof 2608037 SQ8ESC Bogdan 2608038 SQ8HBD Janek -2608039 SQ8JIO Dario +2608039 SQ8JIO Dariusz 2608040 SQ8DSX Pawel 2608041 SP8RSW Pawel 2608042 SQ8AL Radek @@ -42318,24 +50903,24 @@ 2608048 SQ8LAB Dariusz 2608049 SQ8MFS Radoslaw 2608050 SQ8PKI Marek -2608051 SP8IZA SP8IZA -2608052 SP8IJK SP8IJK -2608053 SQ8W Wojtek +2608051 SP8IZA Wojciech +2608052 SP8IJK Jacek +2608053 SQ8W Wojciech 2608054 SP8IZA Wojciech -2608055 SP8IKA IrekK -2608056 SQ8MFX Andlew72 -2608057 SQ8MAE SQ8MAE +2608055 SP8IKA Irek +2608056 SQ8MFX Andrzej +2608057 SQ8MAE Krzysztof 2608058 SP8MZK Wojciech 2608059 SQ8NVB Grzegorz 2608060 SQ8MFS Radoslaw -2608061 SQ8IJI SQ8IJI -2608062 SQ8MAU MARCIN -2608063 SQ7AI Jaro -2608064 SQ8WN SQ8WN -2608065 SQ8LUI SQ8LUI +2608061 SQ8IJI Aleksander +2608062 SQ8MAU Marcin +2608063 SQ7AI Jaroslaw +2608064 SQ8WN Marcin +2608065 SQ8LUI Jolanta 2608066 SP8MK Kamil 2608067 SP8MTA Tomasz -2608068 SQ8ISD Diabel +2608068 SQ8ISD Artur 2608069 SO8BP Miroslaw 2608070 SO8ABA Miroslaw 2608071 SQ8OLL Piotr @@ -42350,16 +50935,71 @@ 2608080 SQ5CJS Slawek 2608081 SP8GON Grzegorz 2608082 SQ8DFK Tomasz -2608083 SQ8AQX Sq8aqx +2608083 SQ8AQX Robert 2608084 SQ8PIP Michae -2608085 SQ8FDJ Kris -2608086 SQ8PDS SQ8PDS +2608085 SQ8FDJ Krzysztof +2608086 SQ8PDS Krzysztof 2608087 SQ8JCP Piotr 2608088 SQ8IFP Teresa 2608089 SP8WNB Kamil 2608090 SP8EFJ Lukasz -2608092 SQ8GKR Janek -2608093 SP8RA Acancer +2608091 SP8GKB Jurek +2608092 SQ8GKR Jan +2608093 SP8RA Pawel +2608094 SQ8FEU Pawel +2608095 SQ8JCG Grzegorz +2608096 SQ8KMR Romek +2608097 SQ8MFO Grzegorz +2608098 SQ8WTC Jakub +2608099 SP8B Bogdan +2608100 SP8SMA Sebastian +2608101 SP8MFG Michal +2608102 SQ8AMX Marcin +2608103 SQ8CQ Marcin +2608104 SQ8NVF Bartlomiej +2608105 SQ8LW Leszek +2608106 SP8SD Przemyslaw +2608107 SP8ABK Jarek +2608108 SP8MAR Mariusz +2608109 SQ8RFU Janusz +2608110 SQ8F Pawel +2608111 SQ8PEB Maciej +2608112 SP8SIF Zbigniew +2608113 SQ8DHL Krzysztof +2608114 SP8BPX Jan +2608115 SP8IEI Andrzej +2608116 SQ8EFK Pawel +2608117 SQ8MAH Adam +2608118 SP8PL Mieczyslaw +2608119 SP8C Jacek +2608120 SQ8KMP Mariusz +2608121 SQ8FGP Marcin +2608122 SQ8KFA Piotr +2608123 SP8QED Lukasz +2608124 SQ8CRD Dariusz +2608125 SP8UZJ Wojciech +2608126 SP8KSP Krzysiek +2608127 SP8LUK Lukasz +2608128 SP8MED Kasia +2608129 SP8OBW Andrzej +2608130 SP8YCB Klub +2608131 SP8POC Klub +2608132 SQ8JB Jacek +2608133 SP8JN Jakub +2608134 SP8CBH Michal +2608135 SP5CJB Benedykt +2608136 SP8DCM Marian +2608137 SP8WOT Marcin +2608138 SQ8OQI Lukasz +2608139 SQ8KW Krzysztof +2608140 SP8MAJ Mateusz +2608141 SP8OBQ Waldemar +2608142 SQ7DCB Ryszard +2608143 SQ7HQM Maria +2608144 SQ8PIO Piotr +2608145 SP8LM Marek +2608146 SQ8M Mateusz +2608147 SP8IT Albert 2609001 SQ9JTI Lukasz 2609002 SQ9MUR Maciek 2609003 SP9ACQ Adam @@ -42380,7 +51020,7 @@ 2609018 SQ9AOT Grzegorz 2609019 SQ9SIM Szymon 2609020 SQ9GIN Krzysztof -2609021 SQ9NFI Jarosaw +2609021 SQ9NFI Jaroslaw 2609022 SQ9NKU Grzegorz 2609023 SP9HYX Jacek 2609024 SP9VQY Anna @@ -42400,13 +51040,14 @@ 2609038 SP9WFH Maciej 2609039 SP0MASR Michal 2609040 SQ9DHP Wojciech -2609041 SQ9DDL SQ9DDL -2609042 SQ9NFQ Sq9nfq -2609043 SP9SCZ SP9SCZ -2609045 SP9AMG AMG +2609041 SQ9DDL Bogdan +2609042 SQ9NFQ Pawel +2609043 SP9SCZ Tomasz +2609044 SQ9IWL Piotr +2609045 SP9AMG Adrian 2609046 SQ9DEO Dominik -2609047 SQ9MLF Kojak -2609048 SP9KPK KPGK +2609047 SQ9MLF Krzysztof +2609048 SP9KPK Klub 2609049 SP9MQU Eugeniusz 2609050 SP9RK Robert 2609051 SP9GNP Wieslaw @@ -42426,13 +51067,13 @@ 2609065 SQ9JXE Radoslaw 2609066 SP9UXT Marek 2609067 SQ9SBE Lukasz -2609068 SQ9OJS Staniseaw +2609068 SQ9OJS Stanislaw 2609069 SP9RG Jacek -2609070 SQ9NKW Tymoteusz +2609070 SQ9NKW Tymek 2609071 SQ9OUK Waldemar -2609072 SP9ONC Miroseaw -2609073 SQ9ONZ SQ9ONZ -2609074 SQ9NKP Piotrekiq +2609072 SP9ONC Miroslaw +2609073 SQ9ONZ Tomasz +2609074 SQ9NKP Piotrek 2609075 SQ9MEE Andrzej 2609076 SQ9JXU Michal 2609077 SQ9JXW Jakub @@ -42446,7 +51087,7 @@ 2609085 SP9HLP Hieronim 2609086 SQ9OL Rafal 2609087 SQ9DO Krzysztof -2609088 SR9VVO Tom +2609088 SP9VVO Tomasz 2609089 SQ9CHW Adam 2609090 SQ9OKU Jozef 2609091 SQ9OZE Krzysztof @@ -42469,11 +51110,11 @@ 2609108 SP9MAX Andrzej 2609109 SP9CLQ Andrzej 2609110 SP9MAT Bozena -2609111 SP9VFD Raf +2609111 SP9VFD Rafal 2609112 SQ9IAB Rafal -2609113 SP9CPZ Cristofer -2609114 SP9Q PIOTR -2609115 SQ9APX Apsik +2609113 SP9CPZ Krzysztof +2609114 SP9Q Piotr +2609115 SQ9APX Jan 2609116 SP9SVE Kazimierz 2609117 SO9ADV Robert 2609118 SP9SVJ Bogdan @@ -42495,7 +51136,7 @@ 2609134 SQ9GK Pawel 2609135 SP9HP Patryk 2609136 SQ9BEJ Stanislaw -2609137 SQ9SWN Szyli +2609137 SQ9SWN Szymon 2609138 SQ9DXF Adam 2609139 SQ9OJR Lukasz 2609140 SQ9MYC Marcin @@ -42504,29 +51145,29 @@ 2609143 SP90EA Janusz 2609144 SP9PZ Piotr 2609145 SQ9SMC Wojciech -2609146 SP9K 29881 +2609146 SP9K Slawomir 2609147 SP9EPO Lukasz 2609148 SP9AHW Leszek 2609149 SP9VRO Ryszard -2609150 SP9RQD RFB +2609150 SP9RQD Robert 2609151 SP9ADH Jerzy 2609152 SQ9NFN Radoslaw 2609153 SP9EV Jozef 2609154 SP9MIR Miroslaw 2609155 SQ9RHT Konrad -2609156 SP9YJC SP9YJC -2609157 SQ9KFM SQ9KFM +2609156 SP9YJC Mateusz +2609157 SQ9KFM Marek 2609158 SP9XWB Kazik 2609159 SQ9PNJ Lukasz 2609160 SP9JSF Jozef 2609161 SP9BSR Tadeusz -2609162 SO9BAD Felek -2609163 SQ9WDZ Chsklika +2609162 SO9BAD Marcin +2609163 SQ9WDZ Tomasz 2609164 SP9RVI Tomasz -2609165 SP9RVB Mario +2609165 SP9RVB Mariusz 2609166 SP9O Mariusz 2609167 SQ9WRT Marcin -2609168 SQ9JGS Iwo +2609168 SQ9JGS Ryszard 2609169 SQ9SPR Tomasz 2609170 SQ9AC Rafal 2609171 SP9WTE Tomasz @@ -42537,15 +51178,15 @@ 2609176 SQ9IVN Jozef 2609177 SP9SVP Witold 2609178 SP9SQV Andrzej -2609179 SQ9KPK Lukas -2609180 SQ9KRF Gregory +2609179 SQ9KPK Lukasz +2609180 SQ9KRF Grzegorz 2609181 SQ9ITL Rafal 2609182 SQ9WTF Wiktor 2609183 SP9XZA Zbigniew 2609184 SP9TR Tadeusz 2609185 SQ9IWE Marcin 2609186 SP9RQA Krzysztof -2609187 SQ9JXF Mirek +2609187 SQ9JXF Marek 2609188 SP9RRS Alek 2609189 SP9JTZ Piotr 2609190 HF9P Piotr @@ -42556,66 +51197,66 @@ 2609195 SP9WH Wojtek 2609196 SP9KL Ludwik 2609197 SQ9DIQ Mariusz -2609198 SQ9FIL Fil +2609198 SQ9FIL Miroslaw 2609199 SP9RTK Zbigniew 2609200 SP9TTV Tomasz -2609201 SP9WTS Kukul -2609202 SP9SCO Demolka +2609201 SP9WTS Krzysztof +2609202 SP9SCO Patrik 2609203 SP9DRM Lukasz 2609204 SP9EMF Arek -2609205 SP9AB Andy -2609206 SP9PEW SP9PEW -2609207 SQ9UU JACEK -2609208 SP9WTS Kukul -2609209 SQ9ZBL SQ9ZBL -2609210 SQ9CH Barteomiej +2609205 SP9AB Andrzej +2609206 SP9PEW Klub +2609207 SQ9UU Jacek +2609208 SP9WTS Krzysztof +2609209 SQ9ZBL Lukasz +2609210 SQ9CH Bartlomiej 2609211 SP9WTC Robert -2609212 SP9USB Sp9usb -2609213 SP9LP SP9LP -2609214 SQ9RT SQ9RT -2609215 SP9GS SP9GS -2609216 SQ9KFO Klirob +2609212 SP9USB Kamil +2609213 SP9LP Lukasz +2609214 SQ9RT Piotr +2609215 SP9GS Stanislaw +2609216 SQ9KFO Robert 2609217 SQ9GIN Krzysztof -2609218 SP9IKN SP9IKN -2609219 SQ9UDT SQ9UDT -2609220 SQ9TVN SQ9TVN -2609221 SP9RAF RAFI -2609222 SQ9ZBL SQ9ZBL -2609223 SP9BSK SP9BSK -2609224 SQ9PRL SQ9PRL -2609225 SQ9PBO Alex +2609218 SP9IKN Wojciech +2609219 SQ9UDT Michal +2609220 SQ9TVN Tomasz +2609221 SP9RAF Rafal +2609222 SQ9ZBL Lukasz +2609223 SP9BSK Michal +2609224 SQ9PRL Szczepan +2609225 SQ9PBO Michal 2609226 SQ9IWI Jacek -2609227 SP9P Joe +2609227 SP9P Wojciech 2609228 SQ9MPK Krzysztof 2609229 SP9WTC Robert -2609230 SQ9RIM Voltar +2609230 SQ9RIM Marcin 2609231 SP9NUW Konrad 2609232 SP9CIH Marcin -2609233 SQ9APP Igorlan -2609234 SP9IVE Sp9ive -2609235 SQ9MAS SQ9MAS +2609233 SQ9APP Igor +2609234 SP9IVE Rafal +2609235 SQ9MAS Alan 2609236 SQ9MUR Maciek -2609237 SQ9KR SQ9KR -2609238 SP9MOV Kris -2609239 SQ9MAS SQ9MAS +2609237 SQ9KR Robert +2609238 SP9MOV Krzysztof +2609239 SQ9MAS Alan 2609240 SQ9IWI Jacek -2609241 SP9RNS Radioklub -2609242 SQ9JYE Sq9jye -2609243 SQ9ENH Rob -2609244 SQ9MEZ ZBIGNIEW -2609245 SP9TAR SP9TAR -2609246 SP9EDI SP9EDI -2609247 SQ9MDD SQ9MDD -2609248 SQ9MLH SQ9MLH +2609241 SP9RNS Klub +2609242 SQ9JYE Slawomir +2609243 SQ9ENH Robert +2609244 SQ9MEZ Zbigniew +2609245 SP9TAR Jerzy +2609246 SP9EDI Pawel +2609247 SQ9MDD Ryszard +2609248 SQ9MLH Oliwer 2609249 SP9KRK Krzysztof -2609250 SO9ARC SO9ARC -2609251 SP9KN Guru -2609252 SQ9MYB Eagle875 -2609253 SQ9DHS SQ9DHS +2609250 SO9ARC Robert +2609251 SP9KN Przemek +2609252 SQ9MYB Maciek +2609253 SQ9DHS Adam 2609254 SQ9ONI Piotr -2609255 SQ9RZM Lukas12p -2609256 SQ9GOL SQ9GOL -2609257 SQ9OKC SQ9OKC +2609255 SQ9RZM Lukasz +2609256 SQ9GOL Piotr +2609257 SQ9OKC Andrzej 2609258 SQ9PG Pawel 2609259 SQ9RZM Lukasz 2609260 SQ9JYM Bartosz @@ -42624,109 +51265,224 @@ 2609263 SQ9S Adam 2609264 SP9KRK Krzysztof 2609265 SQ9JKG Zenek -2609266 SP9N ANDY +2609266 SP9N Andrzej 2609267 SP9JCS Henryk 2609268 SQ9ATZ Pawel 2609269 SQ9RFK Romuald 2609270 SQ9V Wieslaw 2609271 SQ9KR Robert 2609272 SQ9POD Lukasz -2609273 SP9OYB SP9OYB -2609274 SQ9OKT SQ9OKT -2609275 SO9ADV SO9ADV +2609273 SP9OYB Janusz +2609274 SQ9OKT Marcin +2609275 SO9ADV Robert 2609276 SP9PWM Piotr 2609277 SQ9KQP Piotr 2609278 SP9BIG Robert -2609279 SP9TWP JOZEF +2609279 SP9TWP Jozef 2609280 SP9ZEA Janusz 2609281 SP9SOI Krzysztof 2609282 SQ9PBS Wojtek 2609283 SQ9WKI Dariusz -2609284 SP9GRF SP9GRF -2609285 SO9AHM SO9AHM -2609286 SP9WPR SP9WPR -2609287 SP9DVQ SP9DVQ +2609284 SP9GRF Jan +2609285 SO9AHM Grzegorz +2609286 SP9WPR Mariusz +2609287 SP9DVQ Andrzej 2609288 SQ9ZAQ Szymon 2609289 SP9FUN Pawel 2609290 SQ9PPN Robert 2609291 SQ9OND Maciej -2609292 SQ9OJV Darek -2609293 SO9ANK SO9ANK +2609292 SQ9OJV Dariusz +2609293 SO9ANK Karol 2609294 SP9VOG Wladek 2609295 SO9AHG Grzegorz 2609296 SP9STN Jacek -2609297 SQ9OZA SQ9OZA -2609298 SQ9NKX Matt +2609297 SQ9OZA Andrzej +2609298 SQ9NKX Mateusz 2609299 SP9APJ Przemek 2609300 SP9UVG Gustaw -2609301 SP9JKL JUREK -2609302 SQ9KRC Sq9krc -2609303 SP9WTN SP9WTN -2609304 SP9Z SP9Z +2609301 SP9JKL Jurek +2609302 SQ9KRC Szymon +2609303 SP9WTN Tomek +2609304 SP9Z Jacek 2609305 SP9BCH Jan 2609306 SP9EUN Tomasz 2609307 SP9UJR Andrzej 2609308 SP9KA Krzysztof -2609309 SQ9NJ JAN -2609312 SQ9KWR MIETEK -2609313 SQ9AOF SQ9AOF +2609309 SQ9NJ Jan +2609310 SQ9PQC Mariusz +2609311 SQ9JJT Ireneusz +2609312 SQ9KWR Mietek +2609313 SQ9AOF Adam 2609314 SP9RVP Roman 2609315 SQ9BDL Czeslaw -2609316 SQ9DXT JANEK +2609316 SQ9DXT Janek 2609317 SP9VUV Andrzej 2609318 SP9WZO Bronek 2609319 SQ9JYT Patryk -2609320 SP9CJM DP9CJM -2609321 SP9SCI KLUB -2609322 SP0CSR CIESZYNSKA +2609320 SP9CJM Jacek +2609321 SP9SCI Klub +2609322 SP0CSR C 2609323 SP9MQT Andrzej -2609324 SQ9KFW SQ9KFW +2609324 SQ9KFW Mirek 2609325 SP9CZG Wlodek 2609326 SP9AMF Igor -2609327 SQ9JKL Sq9jkl -2609328 SQ9HHO SQ9HHO -2609329 SQ9MLW ROBERT +2609327 SQ9JKL Tomek +2609328 SQ9HHO Zbigniew +2609329 SQ9MLW Robert 2609330 SQ9LFQ Jozef -2609331 SP9KWR Rafae +2609331 SP9KWR Rafal 2609332 SP9CLU Darek -2609333 HF9D HF9D -2609334 SP9KRJ RadioKlub +2609333 HF9D Daniel +2609334 SP9KRJ Klub 2609335 SP9KWR Rafal -2609336 SQ9X SQ9X +2609336 SQ9X Dariusz 2609337 SP9AXN Jan -2609338 SP9GDI JAN -2609339 SQ9FIA MAREK +2609338 SP9GDI Jan +2609339 SQ9FIA Marek 2609340 SQ9JKZ Sebastian 2609341 SP9SOL Jacek 2609342 SQ7FGX Tomasz -2609343 SQ9GOL PIOTR +2609343 SQ9GOL Piotr 2609344 SP9BP Piotr 2609345 SQ9DDD Maciek -2609346 SQ9OKP SQ9OKP +2609346 SQ9OKP Kamil 2609347 SQ9IUB Kamil -2609348 SP9ITW Radioslider -2609349 SP9CF Sp9cf +2609348 SP9ITW Ireneusz +2609349 SP9CF Adam 2609350 SP9SA Leszek 2609351 SP9EJP Piotr -2609353 SQ9KCN SQ9KCN +2609352 SQ9AOX Wojtek +2609353 SQ9KCN Eryk 2609354 SO9W Arkadiusz -2609356 SQ9FMR SQ9FMR -2609357 SQ9JYW SQ9JYW -2609358 SO9EWJ ADAM -2609359 SP9OYO STANISLAW -2609360 SP9KB Kris -2609361 SQ9OZL SQ9OZL -2609362 SP9WZT ELIOT +2609355 SQ9OUJ Cezary +2609356 SQ9FMR Jozef +2609357 SQ9JYW Michal +2609358 SO9EWJ Adam +2609359 SP9OYO Stanislaw +2609360 SP9KB Krzysztof +2609361 SQ9OZL Danuta +2609362 SP9WZT Jerzy 2609363 SP9IDA Lukasz -2609364 SQ9VGX SQ9VGX +2609364 SQ9VGX Lukasz 2609365 SQ9FQM Norbert 2609366 SQ9PUZ Kuba -2609367 SP9JKR SP9JKR +2609367 SP9JKR Jerzy 2609368 SP9SDJ Jacek 2609369 SQ9SBA Jerzy -2609370 SQ9ACU SQ9ACU +2609370 SQ9ACU Ryszard 2609371 SQ9RPR Dariusz -2609372 SQ9ANP SQ9ANP +2609372 SQ9ANP Damian +2609373 SP9DB Krzysztof +2609374 SP9KL Ludwik +2609375 SQ9GRZ Grzegorz +2609376 SP9CPR Rafal +2609377 SQ9EZG Michal +2609378 SQ9RFM Wojciech +2609379 SP9CPU Andrzej +2609380 SP9CM Walery +2609381 SQ9MOA Marcin +2609382 SP9EUH Eugeniusz +2609383 SP9AP Artur +2609384 SQ9HHV Maciej +2609385 SQ9AOF Adam +2609386 SQ9MEZ Zbigniew +2609387 SP9DPM Dariusz +2609388 SQ9KMZ Marcin +2609389 SP9CKS Andrzej +2609390 SQ9PBQ Zbigniew +2609391 SQ9AOG Alek +2609392 SP9ETA Marek +2609393 SP9AFC Pawel +2609394 SP9SSD Andrzej +2609395 SQ9PPU Grzegorz +2609396 SQ9KQN Rafal +2609397 SP9OZI Krzysztof +2609398 SP9SRS Krzysiek +2609399 SQ9RFE Marcin +2609400 SQ9NKR Rafal +2609401 SP9AX Robert +2609402 SP9XLM Tomasz +2609403 SQ9LFP Mariusz +2609404 SP9JMR Marcin +2609405 SQ9ONG Grzesiek +2609406 SQ9CWN Rafal +2609407 SP9PJ Piotr +2609408 SO9BSS Bartlomiej +2609409 SP9FWQ Arkadiusz +2609410 SP9AK Arkadiusz +2609411 SN9DX Lukasz +2609412 SP9MI Miroslaw +2609413 SP9VS Jordan +2609414 SP9DFP Stanislaw +2609415 SP9SRS Krzysztof +2609416 SP9NSS Leszek +2609417 SQ9ORZ Mieczyslaw +2609418 SP9QSQ Mariusz +2609419 SP9VS Jordan +2609420 SP9KLM Lukasz +2609421 SP9AW Andrzej +2609422 SP9SP Piotr +2609423 SP9WTA Jozef +2609424 SQ9KFY Damian +2609425 SP9ODT Adam +2609426 SO9J Jerzy +2609427 SP9UMM Jozef +2609428 SP9XK Krzysztof +2609429 SQ9KIL Darek +2609430 SQ9RIE Renata +2609431 SQ9OKF Bartosz +2609432 SQ9IVD Lukasz +2609433 SO9AS Andrzej +2609434 SQ9RHZ Michal +2609435 SQ9ORD Rafal +2609436 SQ9RFG Grzegorz +2609437 SP9XCC Krzysztof +2609438 SP9OZZ Tadeusz +2609439 SQ9MEQ Pawel +2609440 SP9BW Tomasz +2609441 SP9CH Grzegorz +2609442 SQ9DEM Marcin +2609443 SP9WPO Piotr +2609444 SP9F Flavio +2609445 SP9TPL Krzysztof +2609446 SP9SDH Stefan +2609447 SP9KK Kazimierz +2609448 SQ9LBI Bronislaw +2609449 SP9TNK Ryszard +2609450 SO9DZP Bartosz +2609451 SQ9RHO Michal +2609452 SP9ETW Marek +2609453 SP9UO Marek +2609454 SP9TED Tadeusz +2609455 SP9JAL Jakub +2609456 SP9TNK Ryszard +2609457 SP9XWW Slawek +2609458 SP9MTJ Michal +2609459 SP9UOJ Piotr +2609460 SQ9LM Lukasz +2609461 SP9NSA Piotr +2609462 SQ9KEE Lukasz +2609463 SP9NG Andrzej +2609464 SP9WTV Jakub +2609465 SP9CSE Alek +2609466 SQ9BDJ Maciej +2609467 SP9VND Maciej +2609468 SQ9RNU Michal +2609469 SP9MIB Piotr +2609470 SQ9DKV Leszek +2609471 SQ9JDS Marcin +2609472 SP9EA Andrzej +2609473 SQ9MTY Bartek +2609474 SP9AZF Xavier +2609475 SQ9ORN Dominik +2609476 SQ9RSC Robert +2609477 SQ9WOW Miroslaw +2609478 SP9PAW Pawel +2609479 SP9OFM Wojciech +2609480 SQ9ORT Kazimierz +2609481 SP9GM Grzegorz +2609482 SP9TDF Krzysztof +2609483 SP9DLM Dariusz 2620001 DD8OA Jan 2620002 DB1JBA Jens 2620003 DG0CCO Joerg @@ -42835,7 +51591,7 @@ 2620107 DM4YEK Henri 2620108 DO3BST Sven 2620109 DM2RM Ron -2620110 DL9ZEA Horst +2620110 DO6AD Diana 2620111 DK1DSA Ralf 2620112 DG4WO Wilhelm 2620113 DG2HSI Stefan @@ -42887,7 +51643,7 @@ 2620159 DL1HQN Martin 2620160 DG4WO Wilhelm 2620161 DF3YW Kalle -2620162 DO4FB DO4FB +2620162 DO4FB Dirk 2620163 DL2HXA Andreas 2620164 DO6AB Peter 2620165 DM2RM Ron @@ -42924,9 +51680,82 @@ 2620196 DL7SQ Klaus 2620197 DL8PK Michael 2620198 DO1RKZ Rainer +2620199 DM2OOO Peter 2620200 DL5BL Bernd 2620201 DO4THO Thomas 2620202 DL1SWB Dieter +2620203 DD1OC Rainer +2620204 DC1RST Ralf +2620205 DB7HL Hans +2620206 DO8ND Niklas +2620207 DL2HWB Norbert +2620208 DL1SUU Andreas +2620209 DL1HUD Volker +2620210 DM1UM Udo +2620211 DM1AD Achim +2620212 DG1HBA Helmut +2620213 DL1PET Peter +2620214 DL6CWG Guenter +2620215 DL3OCF Gero +2620216 DO7AD Lars +2620217 DD5DX DD5DX +2620218 DL6PLE Philipp +2620219 DL2WAT Thomas +2620220 DL6MKG Burkhard +2620221 DG1SUL Harald +2620222 DL4PM Peter +2620223 DO9CS Stefan +2620224 DM1UM Udo +2620225 DL9CWG Hubert +2620226 DO7AX Frank +2620227 DL9PA Klaus +2620228 DO4ATK Tobias +2620229 DO1MKH Mic +2620230 DM3NA Bernd +2620231 DO9ZA DO9ZA-V11 +2620232 DO2FRK Frank +2620233 DG1HPS Horst +2620234 DO1AL Stephan +2620235 DO3MBS Manfred +2620236 DL6MHW Michael +2620237 DL6OB Olaf +2620238 DH1XO Peter +2620239 DG2TF Falko +2620240 DF7CP Stefan +2620241 DG1HQG Andreas +2620242 DM2CMB Rainer +2620243 DK5RB Frank +2620244 DO9HC Haiko +2620245 DL9ZX Christian +2620246 DM9FC Flavio +2620247 DC0XB Wilfried +2620248 DH1HJL Juergen +2620249 DL7WN Reinhart +2620250 DM4JH Jens +2620251 DH8JK Dieter +2620252 DO1SKA Steffen +2620253 DL6KWA Andreas +2620254 DL1HQF Wilfried +2620255 DM3MAS Andreas +2620256 DG1HSI Frank +2620257 DF5VAE Charly +2620258 DL9GG Toto +2620259 DG9SDN Andreas +2620260 DL2GLO Gabi +2620261 DL3CO Ernst +2620262 DL4NTC Detlef +2620263 DM4HA Hellwig +2620264 DO2ARE Andreas +2620265 DO7RE Roland +2620266 DL9GHT Hal +2620267 DD5SW Tilo +2620268 DO4CZ Joerg +2620269 DO4AAM Sebastian +2620270 DO2HQS Thomas +2620271 DM2CKB Guenther +2620272 DL2CBQ Rainer +2620273 DL3TI Detlef +2620274 DK8LG Frank 2621001 DL7AJ Wolfgang 2621002 DG4FEY Thomas 2621003 DL7ATA Frank @@ -42986,14 +51815,14 @@ 2621057 DH7BG Wolfgang 2621058 DM7OKH Falko 2621059 DC4LW Lars -2621060 DL1FLY Uwe +2621060 DG3XW Chris 2621061 DL7KJM Klaus-Juergen 2621062 DD4CR Christiane 2621063 DH7EW Roland 2621064 DO1JM Mirko 2621065 DO1DCA Christian 2621066 DM6MH Matthias -2621067 DG6IB Ingolf +2621067 DO4JHH Michael 2621068 DL7VTS Thomas 2621069 DL7VTS Thomas 2621070 DF1JSF Joerg @@ -43274,7 +52103,7 @@ 2621346 DL7VKH Karl-Heinz 2621347 DF6BM Mario 2621348 DL7ABX Michael -2621349 DL7ZEM Ralf +2621349 DD1MI Ralf 2621350 DL2KMK Manfred 2621351 DL0HTA Dan 2621352 DM4EA Tom @@ -43295,7 +52124,7 @@ 2621367 DD6TR DD6TR 2621368 DL7TH Thorsten 2621369 DD6ZP Peter -2621370 DO3MAT Hannes +2621370 DM3MAT Hannes 2621371 DK7JL Jan 2621372 DL5PSY AS235 2621373 DL2OAI VolkerSporleder @@ -43324,7 +52153,7 @@ 2621396 DD6PI Rainer 2621397 DL7KUE Stefan 2621398 DJ1RJ Robert -2621399 DO2MVB Michael +2621399 DL8MVB Michael 2621400 DM5QM Robert 2621401 DO5JAN Jan 2621402 DL2AW Anthon @@ -43332,6 +52161,115 @@ 2621404 DH7RG Benny 2621405 DL7AIR Klaus 2621406 DC7OBB Oliver +2621407 DH5RAM Manuel +2621408 DL6UXL Hans +2621409 DD6VAA Falko +2621410 DO7SAR Carsten +2621411 DL1PZ Bjoern +2621412 DJ9OZ Mike +2621413 DA0CCC D23 +2621414 DL3RMJ Joerg +2621415 DF4HJ HaJo +2621416 DB6IL Wolfgang +2621417 DM3JHD Herwig +2621418 DO2JD Jutta +2621419 DB0BBB Wolf +2621420 DO7FMK Frank +2621421 DF1PAU Paul +2621422 DO5HX Henryk +2621423 DO7JT Juergen +2621424 DL9JBE Jan +2621425 DL3AN Andreas +2621426 DC0TW Tom +2621427 DL7ZK Klaus +2621428 DG1BQC Hardy +2621429 DB9ES Benjamin +2621430 DL7VJA Volkmar +2621431 DL7PY Markus +2621432 DL7AUQ Jan +2621433 DL7RX Michael +2621434 DJ0LI Julian +2621435 DL7RN Eckhard +2621436 DL7AHD Dieter +2621437 DL2BQF Thomas +2621438 DL7UXA Uxa +2621439 DL7FR Joachim +2621440 DO1NOW Burkhard +2621441 DJ5FW Felix +2621442 DO3BW Bine +2621443 DO7SFB Niko +2621444 DL7US Juergen +2621445 DL7AFD Christian +2621446 DO1JX Christian +2621447 DG6IBT Jan +2621448 DD5KP Hans +2621449 DL3XD Olaf +2621450 DG2RWD Gerd +2621451 DO6GFH Georg +2621452 DG5VE Sigmar +2621453 DO7TC Denis +2621454 DO4VU Ulli +2621455 DL1AMW Dieter +2621456 DC6AR Peter +2621457 DO7HJK Achim +2621458 DL7CE Christian +2621459 DL7JU Jens +2621460 DL2RXE Micha +2621461 DJ1LA Lutz +2621462 DH1BSK OM +2621463 DO2MO Timo +2621464 DO7FIR Steffen +2621465 DO7JDO Thomas +2621466 DD6UJF Jens +2621467 DL1BND Uwe +2621468 DL7AGT Ralf +2621469 DL6FKK Frank +2621470 DL9BBD Joerg +2621471 DJ5AU Bernd +2621472 DL7UXX Uwe +2621473 DO2EVE Norman +2621474 DL9DS Dietmar +2621475 DL3MY DL3MY +2621476 DL8FX Frank +2621477 DD6UJS Juergen +2621478 DJ6WF Mario +2621479 DM7PCH Cornelia +2621480 DO7MUK Der +2621481 DL7SD Gunter +2621482 DG1RPU Hans-Herbert +2621483 DO7TWI Thomas +2621484 DL7VDX Ron +2621485 DL6USA Horst +2621486 DG2HVL Anselm +2621487 DL7URB Robert +2621488 DL2JPS Peter +2621489 DC9VD Guenther +2621490 DC7AZ Knut +2621491 DL7APR Klaus +2621492 DL7AWA Matthias +2621493 DL7USM Sven +2621494 DD1GW Gerald +2621495 DL7TP Timo +2621496 DM4JS Janek +2621497 DD6LKB Lars +2621498 DO3TSB Thomas +2621499 DL5KCX Lothar +2621500 DL3HIL Hilmar +2621501 DD6WE Werner +2621502 DL7UMH Manfred +2621503 DF4YR Ralf +2621504 DM3BL Ralf +2621505 DG0FE Lothar +2621506 DL7AVQ Mark +2621507 DL7AEP Walter +2621508 DO7MFR Michael +2621509 DG6IJM Joerg +2621510 DL5ET Martin +2621511 DB6OS Olaf +2621512 DO9GS Grit +2621513 DK3VG Caspar +2621514 DC1GWA Gerd +2621515 DL3TO Joerg 2622000 DF4HN Joerg 2622001 DL6LIM Iven 2622002 DJ3HZ Klaus @@ -43650,7 +52588,7 @@ 2622315 DL2LBO Rainer 2622316 DG2LAE Eckhard 2622317 DL2LAY Kurt -2622318 DO2BN Bastian +2622318 DK2BN Bastian 2622319 DL6LAY Hein 2622320 DF5HF Juergen 2622321 DF6YAN Yannik @@ -43874,7 +52812,7 @@ 2622539 DH3LK Rudolf 2622540 DK3UT Lothar 2622541 DO3ET Dennis -2622542 DO6KJ Jens +2622542 DL3KJ Jens 2622543 DL5BEN Benedikt 2622544 DL8BH Bernd 2622545 DO8NG Gerrit @@ -43936,6 +52874,119 @@ 2622601 DO1DLA Andreas 2622602 DF6JT Jockel 2622603 DG5MIB Michael +2622604 DK1AD Dieter +2622605 DL3LBO Ortwin +2622606 DK8XY Torsten +2622607 DK7LS Gerd-Uwe +2622608 DK2RZ Wolfgang +2622609 DH2GCH Lukas +2622610 DK1AT Arne +2622611 DO2LMK Maren +2622612 DB7SH Stefan +2622613 DO4LMR Martin +2622614 DF1LEO Henrik +2622615 DG5XO Thomas +2622616 DB2SF Stephan +2622617 DG9LP Peer +2622618 DL6LAG Guenter +2622619 DF4JV Joachim +2622620 DL1CMM Andreas +2622621 DK3UM HaJo +2622622 DJ3HKM Klaus +2622623 DG6SI Ralf +2622624 DO6JAN Jan +2622625 DB3HK Holger +2622626 DB5LE Heinz +2622627 DL7LPP Peter +2622628 DL8LBY Martin +2622629 DO1ALP Anna +2622630 DO3LBK Bernd +2622631 DK3UW Martin +2622632 DO5MST Marcus +2622633 DF5HD Dieter +2622634 DK1DP Dirk +2622635 DL4RL Rene +2622636 DF7HD Horst +2622637 DL1XAQ Mark +2622638 DG7LAN Andy +2622639 DH7AS Andreas +2622640 DB7LM Manfred +2622641 DL1HAL Lisa +2622642 DF1HC Volker +2622643 DF1HY Wolf +2622644 DL1HCI Ingo +2622645 DH6CB Charlotte +2622646 DD9THC Karl +2622647 DL9EBG Manuel +2622648 DC9XM Ute +2622649 DB8RS Reinald +2622650 DH4LAR Reinhard +2622651 DC4LE Stefan +2622652 DF3LU Peter +2622653 DO4HAA Harm +2622654 DG7LAG Hauke +2622655 DL1XH Bernd +2622656 DH8HAM Bahman +2622657 DL9LAG Georg +2622658 DJ4HF Helge +2622659 DO1RL Michael +2622660 DC2CC Christoph +2622661 DH1HAB DIETER +2622662 DL8LO Bernd +2622663 DL6BS Stefan +2622664 DO4HAA Harm +2622665 DG5LAZ Achim +2622666 DO1WKH Werner +2622667 DO5MO Michael +2622668 DJ9SO Franz +2622669 DF7LO Bernd +2622670 DL3LL Joerg +2622671 DK9HL Ulrich +2622672 DG5XO Thomas +2622673 DO2BI Michael +2622674 DF3LR Dieter +2622675 DG1LRM Reiner +2622676 DF7LO Bernd +2622677 DL3GJ Greg +2622678 DC3LC Carsten +2622679 DF3HM Manfred +2622680 DC8FG Frank +2622681 DK6LK Heinz +2622682 DG4KAQ Markus +2622683 DJ4JB Jan +2622684 DK2IP Luiz +2622685 DL9HCV Heike +2622686 DL9HAM Michael +2622687 DK6HP Gerd +2622688 DL0LK OV +2622689 DL4LEX Alex +2622690 DL6ASP Alexander +2622691 DH8LAA Bjoern-Peter +2622692 DF1LA Peter +2622693 DG2XR Rudy +2622694 DF3MIB Andreas +2622695 DO4LB BerndWI +2622696 DO5MSH Manuel +2622697 DL9YA Gunnar +2622698 DK5LQ Juergen +2622699 DL4XAJ Joerg +2622700 DF5HM Manfred +2622701 DK6HM Martin +2622702 DO1CXR Chris +2622703 DO1NM Markus +2622704 DC4XC Ralf +2622705 DB4CS Carsten +2622706 DB4LH Hauke +2622707 DL3HBQ Stephan +2622708 DD1LBM Matthias +2622709 DJ0MDQ Erich +2622710 DC1LV Torben +2622711 DB9LL Jens +2622712 DO1PF Pascal +2622713 DO1DHK David +2622714 DO5WR Rolf +2622715 DG4LD Dirk +2622716 DL5HBO Olaf 2623001 DL4BCG Paul 2623002 DG5AV Gerd 2623003 DL5HSN Hendrik @@ -44034,8 +53085,6 @@ 2623097 DG9OBW Michael 2623098 DL8BBZ Horst 2623099 DO1FRK Frank -2623100 DL3GS Peter -2623101 DL3GS Peter 2623102 DL1BJA Klaus 2623103 DC2OS Sascha 2623104 DG3ABB Stephan @@ -44095,7 +53144,7 @@ 2623158 DO3SEG Sascha 2623159 DL5OO Rainer 2623160 DO1HMB Michael -2623161 DO2AZ Anja +2623161 DC1AZ Anja 2623162 DB9OM Wolfgang 2623163 DL5HAI Ralf 2623164 DH1ALF Niels @@ -44552,8 +53601,8 @@ 2623617 DG5YHF Steffen 2623618 DJ7PA DJ7PA 2623619 DJ5ZWS Wolfgang -2623620 DO9BO DO9BO -2623621 DH4RL DH4RL +2623620 DO9BO Uwe +2623621 DH4RL Reinhard 2623622 DL1BJY DL1BJY 2623623 DO1DOA DO1DOA 2623624 DO2MAD Martin @@ -45034,7 +54083,6 @@ 2624102 DG4RB Ralf 2624103 DL5EBS Juergen 2624104 DK1TC Oezel -2624105 DG7DCG Arnd 2624106 DF1DV Marcus 2624107 DB1DO Juergen 2624108 DD7KR Uli @@ -45222,7 +54270,7 @@ 2624292 DH2JG Guenter 2624293 DM1HE Hans-Dieter 2624294 DO4DOG Carsten -2624295 DF2OW Hans-Herbert +2624295 DF2OW Bert 2624296 DK5XY Gerhard 2624297 DG1KWA Andreas 2624298 DG7DBX Henry @@ -45339,7 +54387,6 @@ 2624411 DO3DL Markus 2624412 DL5DW Johann 2624413 DJ6WK Wilfried -2624414 DL8TU Jan 2624416 DO7MKD Karl 2624417 DK1DQ Ralf 2624418 DO7YHE Hartmut @@ -45353,7 +54400,6 @@ 2624426 DK8DG Otto 2624427 DO4DO Peter 2624428 DO1REX Bjoern -2624429 DL8TU Jan 2624430 DL9OSS Jan 2624431 DL0DRK Dietmar 2624432 DL1USA Ralf @@ -45522,8 +54568,6 @@ 2624600 DL0AD OV-G09 2624601 DD9KA Heinz 2624602 DD9KA Heinz -2624603 DL9NDG Heinz -2624604 DL9NDG Heinz 2624605 DC3KY Bernd 2624606 DJ5KX Stefan 2624607 DL7KJS Juergen @@ -45788,7 +54832,7 @@ 2624872 DL5YEY Joerg 2624873 DL8MRE Marcus 2624874 DL5KL Wolfgang -2624875 DO3DHN Henry +2624875 DL6HD Henry 2624876 DJ1KD Karsten 2624877 DK3JB Hans-Gerhard 2624878 DL3EBU Reinhold @@ -46221,7 +55265,7 @@ 2625310 DD3PR Reinhold 2625311 DL9WR Willi 2625312 DF7PZ Thomas -2625313 DO1BAO Oliver +2625313 DL3RO Rolf 2625314 DB1HCL Heinz 2625315 DC2ZO Peter 2625316 DH5WZ Oliver @@ -46234,7 +55278,7 @@ 2625323 DK8VN Richard 2625324 DO9ZY Tom 2625325 DK5UK Wolfgang -2625326 DL7GT DL7GT +2625326 DL7GT Daniel 2625327 DD3VV Albert 2625328 DO6DZ Sascha 2625329 DO7BB Bernd @@ -46267,7 +55311,7 @@ 2625356 DH6BS Benjamin 2625357 DD4PU Arno 2625358 DK1GJ Gottfried -2625359 DO2JN Jan +2625359 DK7LM Jan 2625360 DF4ZB Lothar 2625361 DL1PL Lothar 2625362 DM2FD Frank @@ -46408,7 +55452,7 @@ 2625497 DL3EBT Thorsten 2625498 DO3PF Frank 2625499 DK5FB Frank -2625500 DO9BU Marc +2625500 DL1BU Marc 2625501 DO7TIM Tim 2625502 DF4OR Ekki 2625503 DG7VJ Reimund @@ -46547,12 +55591,118 @@ 2625636 DJ4ST Tom 2625637 DG6FMA Manuel 2625638 DO9JF Julian -2625639 DO6FOX Chris +2625639 DG1HP Chris 2625640 DO1EP Patrik 2625641 DJ2ZK Klaus 2625642 DG4EK Peter 2625643 DO7RC Randolf 2625644 DL1MBO Martin +2625645 DL7PJ Peter-Johann +2625646 DB6MB Martin +2625647 DO9MR Ralf +2625648 DK5WB Bernd +2625649 DK1TBL Thomas +2625650 DL8FCQ Guido +2625651 DB9NFB Sascha +2625652 DC1GN Markus +2625653 DC8WV Reinhard +2625654 DL5IS Guenter +2625655 DF6PU Chris +2625656 DH4PAD Alex +2625657 DK6WJ Juergen +2625658 DD2NQ Clemens +2625659 DO5CTH Christian +2625660 DJ7SN Daniel +2625661 DO5JM Jerome +2625662 DK6IEC Andreas +2625663 DO6DG Dieter +2625664 DL5UJ Jens +2625665 DF9WZ Edgar +2625666 DG3ZN Berthold +2625667 DO1CGI Christian +2625668 DL6IE Stefan +2625669 DF6BS Dieter +2625670 DH0VN Michael +2625671 DO9HT Steve +2625672 DL1BIH Demir +2625673 DL8VH Henri +2625674 DL2DI Wolfgang +2625675 DL5OBP Peter +2625676 DO1AX Alex +2625677 DK1VS Viktor +2625678 DO7NBE Olli +2625679 DO4DW Daniel +2625680 DO3LZ Dieter +2625681 DL8GZ Bert +2625682 DD7VA Christoph +2625683 DL0WIM WiMo +2625684 DL6LAU Carsten +2625685 DJ8PZ Tom +2625686 DL1EW Engelbert +2625687 DL4UE Manfred +2625688 DG1GS Georg +2625689 DG2PC Horst +2625690 DF2WR Gregor +2625691 DK1WV Achim +2625692 DH7ATV Enrico +2625693 DF1ES Peter +2625694 DG4PB Haagen +2625695 DK2IMK Osman +2625696 DH3PAL Tom +2625697 DO4FOX Andreas +2625698 DK1PU Ulli +2625699 DD8PS Siegfried +2625700 DD9PN Uli +2625701 DH8PF Otto +2625702 DB7WR Rainer +2625703 DO8JD Jens +2625704 DL4VBA Andreas +2625705 DO5ANT Ottmar +2625706 DL4VM Tom +2625707 DK6WQ Paul +2625708 DF2SS Volkmar +2625709 DG3DJ Andreas +2625710 DB4PA Stefan +2625711 DL9MJ Matthias +2625712 DO5YK Katharina +2625713 DO7BF Frauke +2625714 DF3WV Stefan +2625715 DH0TA Hotaru +2625716 DL4VAH Thomas +2625717 DK4UY Joerg +2625718 DF9UV Peter +2625719 DD0UM Heido +2625720 DO2KJ Jannik +2625721 DJ8RQ Tony +2625722 DG2MKS Martin +2625723 DO1VM Michael +2625724 DL3PK Wolf +2625725 DL1TGR Thomas +2625726 DG5ABF Fritz +2625727 DC9PM Peter +2625728 DL4IY Guenter +2625729 DO1AKH Arno +2625730 DL7NF Niklas +2625731 DO4VB Markus +2625732 DK4JZ Joerg +2625733 DH7AHI Halil +2625734 DG3SK Stefan +2625735 DD4EZ Claus +2625736 DL3WA Eberhard +2625737 DL0NK Daniel +2625738 DO1DMS Manuel +2625739 DO6NM Marco +2625740 DJ7WA Albert +2625741 DG1IAH Uwe +2625742 DK3SJ Juergen +2625743 DO3MS Marco +2625744 DL2IAO Manfred +2625745 DC4IQ Christof +2625746 DB1EA Achim +2625747 DO7RT Robert +2625748 DO1AKH Arno +2625749 DK4UV Gerhard +2625750 DG8MPA Peter 2625998 DM0NR DSTAR-DMR-Gw 2625999 DB0LJ DSTAR-DMR-Gw 2626000 DF6RK Ralf @@ -46838,7 +55988,7 @@ 2626280 DL3FCG Michael 2626281 DO4ELA Michaela 2626282 DK4FC Karl -2626283 DO2AK Andreas +2626283 DO2AK Axel 2626284 DG9FB Klaus 2626285 DJ0AL Axel 2626286 DL7FAI Gerhard @@ -47351,7 +56501,7 @@ 2626793 DL1ES Erich 2626794 DO7CHH Christian 2626795 DL1HP Bernd -2626796 DL2FAR Herbert +2626796 DO3WH Hagen 2626797 DG3FV Harald 2626798 DD9FL Wilfried 2626799 DL1MTK Holger @@ -47371,10 +56521,10 @@ 2626813 DO4GB Gerrit 2626814 DL5ZR Patrick 2626815 DL5ZW Annja -2626816 DO4FT Thorsten +2626816 DH4FT Thorsten 2626817 DG1FDQ Ralph 2626818 DF3ZK Karl -2626819 DC2ZU TS +2626819 DC2ZU Thorsten 2626820 DL3AI Andreas 2626821 DC9FO Wolfgang 2626822 DF9FS Rolf @@ -47383,7 +56533,7 @@ 2626825 DL8FCC Markus 2626826 DO1AIE Vlad 2626827 DO1FHQ Michael -2626828 DO1CV Christian +2626828 DL5CV Christian 2626829 DJ0WJ MARIAN 2626830 DO3FF Annika 2626831 DC8QT Werner @@ -47424,6 +56574,137 @@ 2626866 DL8UI Ben 2626867 DL4FBR Helmut 2626868 DL1IGC Ignacio +2626869 DO1TMC Thomas +2626870 DA0FUL George +2626871 DH6FAA Gerd +2626872 DO1BLU Bernd +2626873 DO9HK Holger +2626874 DO5JJ Juergen +2626875 DO4MAW Max +2626876 DL1HPT Helmut +2626877 DO1BZ Martin +2626878 DO1NSP Nils +2626879 DJ6FQ Karl +2626880 DL2ZT Egon +2626881 DL7NHB Dimitris +2626882 DO3FP Kurt +2626883 DL1MKW Matthias +2626884 DO4FL Robert +2626885 DB7FQ Guenter +2626886 DD7FM Bernd +2626887 DL0VEL OV +2626888 DK0UM Andreas +2626889 DK0NOT DRK +2626890 DO5DAM Dirk +2626891 DO4ARK Andreas +2626892 DF3ZS Mathias +2626893 DO5TB Timo +2626894 DO4PC Mirco +2626895 DJ7ZE Peter +2626896 DL6FSN Manfred +2626897 DL0AFZ Clubstation +2626898 DL0VBK Clubstation +2626899 DL8ZAJ Mathias +2626900 DL3KK Klaus +2626901 DJ7WJ Wojtek +2626902 DL6ZBC Wolfgang +2626903 DO3BQ Birgit +2626904 DG9AAR Thomas +2626905 DL1HMA Michal +2626906 DK1XT Andreas +2626907 DG3FCI Herbert +2626908 DG6FFS Joerg +2626909 DO9FE Stephan +2626910 DJ8UM Franz +2626911 DO6ZP Oliver +2626912 DG2EAB Michael +2626913 DO5RS Roland +2626914 DD9FO Rainer +2626915 DL1FAX Karl +2626916 DK3FD Stefan +2626917 DL4TO Gerhard +2626918 DM0ZAV EchoLink +2626919 DL2KBC DL2KBC +2626920 DM1SB Stephan +2626921 DK0KF Contest +2626922 DD9FY Bernd +2626923 DF7TW Wolf +2626924 DL9FAH Walter +2626925 DL2FBI Ralf +2626926 DL0SGK Segler +2626927 DG3RCO Wolfgang +2626928 DD8ZY Stefan +2626929 DB2ZR Rolf +2626930 DO3SAS Sascha +2626931 DH6ZA Gernot +2626932 DO1FBS Bernd +2626933 DO9CD DO9CD +2626934 DK2FR Wenno +2626935 DH2ZS Klaus +2626936 DL6FCB Lars +2626937 DL8VJ Viktor +2626938 DO6FFM Claus-Martin +2626939 DB2ZJ Wolfgang +2626940 DH1PC Hans +2626941 DB3HB Heinz +2626942 DL1HTB Raimo +2626943 DG1FFJ FETHI +2626944 DL8FBC Manfred +2626945 DO6CMD Christian +2626946 DO9PMA Paul +2626947 DO1BAE Steffen +2626948 DJ0FBU Bill +2626949 DO6ET Nils +2626950 DC0ZM Udo +2626951 DO2ABC Willi +2626952 DK0VG DK0VG +2626953 DH8MV Markus +2626954 DL0SEL Clubstation +2626955 DO7KNW Markus +2626956 DL6WAB Juergen +2626957 DO2SPK Simon +2626958 DO4JC Joerg +2626959 DL6MAU Andreas +2626960 DG3FFM Jens +2626961 DL4ZAQ Peter +2626962 DL7ER Ralf +2626963 DG4VM Volker +2626964 DL2FBE Markus +2626965 DL6FAT Sixy +2626966 DO1FDC Dinis +2626967 DL9RG Guenter +2626968 DJ6IF Grid +2626969 DG5FDG Olaf +2626970 DG7FDE Rainer +2626971 DL3WE Dieter +2626972 DG5FDC Andre +2626973 DL5DM Michael +2626974 DF1JSL Joerg +2626975 DG6FFG Carlo +2626976 DD0ZL Heinz +2626977 DK6KR Robin +2626978 DB3ZY Matthias +2626979 DL4FI Karl +2626980 DK1ML Mike +2626981 DH1VD Uli +2626982 DJ2IL Wolf +2626983 DK7WH Peter +2626984 DL5AL Ingobert +2626985 DC4ZG Guenter +2626986 DL1MKK Veit +2626987 DF7FP Wolfram +2626988 DO8KAY Kayo +2626989 DK2FBX Walter +2626990 DK7ZM Heinz +2626991 DL2FH Stefan +2626992 DC2RF Ralph +2626993 DG7FDR Bodo +2626994 DH1FBL Wolf +2626995 DF1VA Volker +2626996 DD1CB Christian +2626997 DO2TK Timo +2626998 DO9HRO Harald +2626999 DC9DC Markus 2627001 DC4GD Claus 2627002 DC4GD Claus 2627003 DC4GD Claus @@ -48055,7 +57336,6 @@ 2627633 DO8TIG Til 2627634 DO7WHP Willy 2627635 DK4BX Erwin -2627636 DO2KJ Juergen 2627637 DL7KHB Karl-Heinz 2627638 DL5IAL Sigi 2627639 DO7ASL Alex @@ -48445,7 +57725,6 @@ 2628035 DG5NET Ralph 2628036 DL8MBT Flori 2628037 DJ7WB Manfred -2628038 DL6RBQ Eberhard 2628039 DF1ML Rudi 2628040 DL9NCQ Joachim 2628041 DL5MBU Karl @@ -48801,7 +58080,7 @@ 2628393 DG6RAH Christian 2628394 DL9MER Erdmann 2628395 DG8NCY Claus -2628396 DO1NGT Goektuerk +2628396 DO1NGT Gokturk 2628397 DJ7XU Hermann 2628398 DL5NC Peter 2628399 DL4RKA Konstantinos @@ -48909,7 +58188,6 @@ 2628501 DG9MCD Fritz 2628502 DG1RAW Reinhard 2628503 DL8CJ Joerg -2628504 DK1PH Richard 2628505 DL4RS Josef 2628506 DO5RG Raik 2628507 DC3SHL Helge-Joergen @@ -49540,7 +58818,7 @@ 2629139 DG0AG Siegmar 2629140 DL4ZJ Mathias 2629141 DL2JFL Frank -2629142 DG0OKV Jens +2629142 DD6PB Philipp 2629143 DL1FLW Lawrence 2629144 DL5ZA Reinhard 2629145 DO6RN Rosalie @@ -49614,7 +58892,7 @@ 2629213 DO5HC Joerg 2629214 DL1CSL SteLo 2629215 DL1TBM Torsten -2629216 DO1FNK DO1FNK +2629216 DF5DF Frank 2629217 DO1RGI Reinhard 2629218 DL2VN Veit 2629219 DO1AU Karl @@ -49688,7 +58966,7 @@ 2629287 DG8PD Juergen 2629288 DF8BW Tom 2629289 DK6WH Willi -2629290 DO1TAM TamasPap +2629290 DO1TAM Tamas 2629291 DF6IW Frank 2629292 DL2AMT Juergen 2629293 DF6DR Daniel @@ -49718,6 +58996,112 @@ 2629317 DL6AUI Hartmut 2629318 DM2MH Matthias 2629319 DH5ABC Matt +2629320 DK1TF Jens +2629321 DC1SK Stefan +2629322 DM9JM Jens +2629323 DL2VLL Dieter +2629324 DL2DRI Roland +2629325 DM5LG Alex +2629326 DG3VL Udo +2629327 DK6WH Willi +2629328 DL6KBG Oliver +2629329 DL5DTL Peter +2629330 DG0ERS Enrico +2629331 DK5CX Udo +2629332 DL3MIK Michael +2629333 DK1AUP Udo +2629334 DL2USR Steffen +2629335 DM3CV Christhard +2629336 DO3SFB Stefan +2629337 DO1SVW Volkmar +2629338 DH1DO Knuth +2629339 DL2WUB Udo +2629340 DL1MOR Markus +2629341 DG3VU Ronny +2629342 DG0JPM Peter +2629343 DM4ZUL Hardy +2629344 DL1JDA Horst +2629345 DL1KI Hartmut +2629346 DH8WG Karl-Heinz +2629347 DM2UA Armin +2629348 DL4JE Jens +2629349 DJ1KI Andy +2629350 DL1DTG Karl +2629351 DL2JLB LOTHAR +2629352 DK1RT Bernd +2629353 DO5COL Tom +2629354 DL1LSH Hannes +2629355 DG1FI Mario +2629356 DF1ASG Norbert +2629357 DL8UUF Hans +2629358 DL8AMB Dirk +2629359 DO3TH Thomas +2629360 DO2HN Holger +2629361 DF1BC Bernd +2629362 DL4DRG Reinhard +2629363 DM2FEH Frank +2629364 DM1RT Ronald +2629365 DL4AKS Kalle +2629366 DO7BU Burkhard +2629367 DG0NF Helge +2629368 DO2DEE Daniel +2629369 DL1JGS Juergen +2629370 DM2DK Detlef +2629371 DO3LGI DO3LGI +2629372 DG0CQ Wolfgang +2629373 DO8JPL Jan +2629374 DG1RUF Jens +2629375 DK3DUA Tom +2629376 DL8DA Denny +2629377 DM3RO Rolf +2629378 DG0RM Mathias +2629379 DO4THB Tobias +2629380 DL7PR Thomas +2629381 DG9TH Tom +2629382 DL6ANI Reinhard +2629383 DO8FT Marco +2629384 DD1FK Fabian +2629385 DO1SC Claus +2629386 DO3MPL Michael +2629387 DG3MIM Uwe +2629388 DL2AKV Michael +2629389 DG2SRL Swen +2629390 DO2RST Ernst +2629391 DL3ARM Jo +2629392 DL5DZL Peter +2629393 DF2RE Peter +2629394 DO7TDS Tommy +2629395 DO1TAM Tamas +2629396 DM5KK Frank +2629397 DO5AN Frank +2629398 DM1HP Rolf +2629399 DK1RS Rainer +2629400 DL2AZJ Manfred +2629401 DL2JPN Sigfried +2629402 DG4VN Claus +2629403 DO2WD Danilo +2629404 DL2JPN Sigi +2629405 DC8OMI Rosi +2629406 DL1HQH Joerg +2629407 DM3TN Thomas +2629408 DO2HRB Rainer +2629409 DL1VFR Fred +2629410 DL5AH Andreas +2629411 DG0OAH Andre +2629412 DG1RTK Marco +2629413 DO6KD Dirk +2629414 DL5APO Jens +2629415 DJ2AB Armin +2629416 DH1WP Wolfgang +2629417 DO7ZT Mathias +2629418 DG0WOT Juergen +2629419 DO1WX Thomas +2629420 DO9YY Michael +2629421 DD7UW Horst +2629422 DG0OEU Guido +2629423 DL5MM Wolfgang +2629424 DK1EN Detlef +2629425 DL3ARH Andy 2633001 DG4AK Dietmar 2633002 DH8AAA Oliver 2633003 DC6BV Reinhardt @@ -49834,7 +59218,7 @@ 2633114 DL2ABR Juergen 2633115 DL2AAK DL2AAK 2633116 DO3FR Do3fr -2633117 DO9TBP Thorsten +2633117 DH2ML Manfred 2633118 DH1HC DH1HC 2633119 DL3QV Hans 2633120 DF9BI Stefan @@ -49868,11 +59252,11 @@ 2633148 DF2XS Klaus 2633149 DK7XP Torsten 2633150 DC4FS DC4FS -2633151 DL2BBP DL2BBP +2633151 DL2BBP Frank 2633152 DC7BK DC7BK 2633153 DJ2DS Dirk 2633154 DO1DET DO1DET -2633155 DO5FMD DO5FMD +2633155 DL5FMD DO5FMD 2633156 DJ1YG Dieter 2633157 DO1LOC DO1LOC 2633158 DK1AK DK1AK @@ -49914,7 +59298,7 @@ 2633194 DF0RG Clubstation 2633195 DO2BHK Helmut 2633196 DJ3UP Chris -2633197 DO6PS Bruno +2633197 DG3BK Helmut 2633198 DC1KW Ingmar 2633199 DO1KC Kathi 2633200 DL3BAL Uli @@ -49937,7 +59321,7 @@ 2633217 DJ2XV Kay 2633218 DC8MH DC8MH 2633219 DF7BR DF7BR -2633220 DO1BMH DO1BMH +2633220 DO1BMH Benjamin 2633221 DK0DLR DLR 2633222 DO1DMB Marcus 2633223 DO1OIK Ingo @@ -50049,7 +59433,7 @@ 2633329 DG8OBN Bjoern 2633330 DG2YIQ Swen 2633331 DL8HG Hajo -2633332 DO7RFT Bernd +2633332 DO9HB Per 2633333 DL1BH Stefan 2633334 DO7PCI Waldemar 2633335 DO3WOB Wolfgang @@ -50082,7 +59466,7 @@ 2633362 DB6OA Armin 2633363 DG1ACS Andreas 2633364 DG1BSH Harro -2633365 DO7SHK Stefan +2633365 DL7SHK Stefan 2633366 DJ0RG Joerg 2633367 DK6BS Andre 2633368 DO9TW Frank @@ -50116,8 +59500,8 @@ 2633396 DH9RA Hanno 2633397 DO5UK Uli 2633398 DG6OAA Hermann -2633399 DO2MJ Martin -2633400 DO6FW Sascha +2633399 DG0UHK Harald +2633400 DK6FW Sascha 2633401 DL8TG Klaus 2633402 DL3OM Harald 2633403 DG2BHB Bjoern @@ -50156,7 +59540,254 @@ 2633436 DO7CT Christian 2633437 DO2DGW Dieter 2633438 DO1JKO Juergen -2633849 DL8XI DL8XI +2633439 DO5FA Florian +2633440 DO5DGH Georg +2633441 DO0OLG DO0OLG +2633442 DK5OK Andi +2633443 DO2ELA Manuela +2633444 DB4LC Conny +2633445 DL5SAM Peter +2633446 DK3DE Detlef +2633447 DO2NMB NilsM +2633448 DG6ABK Mathias +2633449 DH5OAK Klaus +2633450 DK8HC Chris +2633451 DF3SK Sven +2633452 DJ9PO Guenter +2633453 DO5PHX Philip +2633454 DO2NH Nico +2633455 DM7BP Bernd +2633456 DM1CS Carsten +2633457 DO1DKX Daniel +2633458 DG5OBY Ralf +2633459 DF2UJ ANDRE +2633460 DL8OBX Bernd +2633461 DK9HN Walter +2633462 DH6AAO Burkhard +2633463 DG7AV Ilona +2633464 DG1MD Mirko +2633465 DL4LNX Arne +2633466 DL1HB Holga +2633467 DF3OT Heinz +2633468 DK8XV Wolfgang +2633469 DL8OAR Klaus +2633470 DO3BM Henning +2633471 DL8BER Eik +2633472 DO1OLM Oliver +2633473 DO4ID Ingo +2633474 DM7LA Christoph +2633475 DG3BCZ Florian +2633476 DG2OAQ Ingo +2633477 DO5BH Helmut +2633478 DL1BKA Bernhard +2633479 DC9BB Heinz +2633480 DO3OBK Klaus +2633481 DL5AAV Herbert +2633482 DL4LIZ Liz +2633483 DB4KB Kai +2633484 DL8HCD Wolfgang +2633485 DL9GFA Gerrit +2633486 DO8TV Manfred +2633487 DH8GHH Gerrit +2633488 DO3RN Rainer +2633489 DL9MSR Michael +2633490 DD7CW Mario +2633491 DJ5RX Josef +2633492 DG5FD Flocky +2633493 DG1BH Hellmuth +2633494 DO6OF Holger +2633495 DD7AN Chris +2633496 DO1TBO Thomas +2633497 DF9BU Mario +2633498 DL5LQ Christian +2633499 DL9OCL Norbert +2633500 DG4MB Manfred +2633501 DF9AW Peter +2633502 DO3LD Dirk +2633503 DL1BAX Ralf +2633504 DG6BAX Frank +2633505 DL4BBG Michael +2633506 DF6EE Thomas +2633507 DD8AA Andreas +2633508 DO5HR Rene +2633509 DL0HWL Clubst. +2633510 DL7TJ Tobias +2633511 DO1ADM Andr +2633512 DK1MJ Martin +2633513 DL1MA Thorsten +2633514 DM5CB Chris +2633515 DL1HCR Rolf +2633516 DO9SMS Uwe +2633517 DB0FUS Friedhelm +2633518 DO7STS Stefan +2633519 DF9AW Peter +2633520 DC8JM Hinrich +2633521 DO5NU Marcel +2633522 DH8BAR Hartmut +2633523 DL1OI Dirk +2633524 DA0NR Clubstation +2633525 DF1AD Edgar +2633526 DD5HF Helmut +2633527 DF6LE Lutz +2633528 DL4OCJ Hans +2633529 DB2OJ Manfred +2633530 DG8BF Joachim +2633531 DL1HI SASCHA +2633532 DL1OBH Peer +2633533 DL6BCL Rudolf +2633534 DH3HAO Carsten +2633535 DB9BV Hans-Juergen +2633536 DG4BEN Norbert +2633537 DL0SGN ClubCall +2633538 DO9MHN Michael +2633539 DO2TMJ Alex +2633540 DL2XBB Burgi +2633541 DO2BBC Boris +2633542 DG4RN Rainer +2633543 DF1BV Andreas +2633544 DD9HK Matthias +2633545 DH4OAH Uwe +2633546 DO4IX Christian +2633547 DL4BCN Jo +2633548 DK6OX Waldemar +2633549 DO7TI Christina +2633550 DC4MB Manfred +2633551 DO2ROW Michael +2633552 DG1AAB Joachim +2633553 DG9OAX Markus +2633554 DL9OAC Achim +2633555 DG9BJO Matthias +2633556 DL1HT Thomas +2633557 DA0ASB Roland +2633558 DK7BE Juergen +2633559 DJ9CN Heinz +2633560 DL2EI Dirk +2633561 DG2BT Harald +2633562 DL1OAL Dieter +2633563 DO2IN Katharina +2633564 DL1NK Nico +2633565 DC4ON Gernot +2633566 DG1OBQ Thomas +2633567 DO1ABS Gordon +2633568 DH8GV Thomas +2633569 DL2LK Wilfried +2633570 DO9WG Julius +2633571 DL4AL Ute +2633572 DH1BAY Heiko +2633573 DD5DJ MikeP +2633574 DO6CH Carsten +2633575 DL3AAV Reinhard +2633576 DL6OAS Joerg +2633577 DL5BAY Martin +2633578 DJ8QQ Horst +2633579 DH7ADM Ingo +2633580 DO8AMG Hans +2633581 DO1GKI Michael +2633582 DJ4ZZ Joerg +2633583 DD8UST Uwe +2633584 DG8AAR Reinhard +2633585 DO1TCH Tobias +2633586 DO3YMW Michael +2633587 DG2ACD Diddy_DG2ACD +2633588 DL8AAI Eugen +2633589 DO4LP Bernd +2633590 DH9BAJ Johann +2633591 DJ2MK Mirco +2633592 DO1ELF DO1ELF +2633593 DG9OAX Markus +2633594 DO4BM Manfred +2633595 DL8SEE Horst +2633596 DL3OCE Det +2633597 DO1DAS Daniel +2633598 DK9CA Martin +2633599 DD7ST Stefan +2633600 DL1OVS Oliver +2633601 DO4TH Thorsten +2633602 DK2HI Frank +2633603 DD0AF Juergen +2633604 DG2PL Markus +2633605 DL1WY Hagen +2633606 DB1FI Chris +2633607 DL8OAS Jens +2633608 DL5KJ Klaus +2633609 DO6EM Eckhard +2633610 DJ9MD Mathias +2633611 DK3OL Juergen +2633612 DB8WK Hinni +2633613 DG4AAY Juergen +2633614 DL3BAU Frank +2633615 DL6GU Uwe +2633616 DL3ZA Alex +2633617 DL5OP Kevin +2633618 DO7CIF C. +2633619 DO5CG Christian +2633620 DK1FY Holger +2633621 DL5OP Kevins +2633622 DG1DAF Bernd +2633623 DO4FD Frank +2633624 DB0BHN Gateway +2633625 DO1OGB Gerhard +2633626 DG5OAG Peter +2633627 DH8AMG Hans +2633628 DL2OAM Peter +2633629 DO6SMX Smags +2633630 DL4OCF Frank +2633631 DL7A Contest +2633632 DG2AAV Norman +2633633 DG9ACR Gerhard +2633634 DF8OS Wilfried +2633635 DL1BCA Juergen +2633636 DJ8NQ Siegfried +2633637 DO4KAI Kai +2633638 DO2BT Johann +2633639 DC3BG Heiner +2633640 DO2MMT Thorsten +2633641 DG1ABX Markus +2633642 DK4XY Ulrich +2633643 DK1JAN Jan +2633644 DO8WH Hartmut +2633645 DO1BMJ Michael +2633646 DG4AZ Herbert +2633647 DC0OO Thorben +2633648 DD7CW Mario +2633649 DO1KRF Sebastian +2633650 DC4XZ Ilka +2633651 DK4FT Alex +2633652 DD2OT Bernd +2633653 DF0IG Clubstation +2633654 DF5KX Chris +2633655 DG5SUX Sylvio +2633656 DB6BW Lars +2633657 DD9BW Sascha +2633658 DG5OAO Klaus +2633659 DL4OV Klaus +2633660 DC7FL Knut +2633661 DL6YEA Thomas +2633662 DH0JH Jens +2633663 DO1OBV Dagmar +2633664 DO9VW Klaus +2633665 DO1JRI Joerg +2633666 DO1REH Mitja +2633667 DO2LY Axel +2633668 DG3OAH Michael +2633669 DH9OS Olaf +2633670 DL1OA Thorsten +2633671 DB6KD Michael +2633672 DC7BY Chris +2633673 DL7CSX Carlo +2633674 DO1LUK Lukas +2633675 DO1KVG Marcus +2633676 DO5SV Roul +2633677 DO3HP Holger +2633678 DO1LJB Jack +2633679 DO7OI Ralf +2633680 DD0OI Reynard +2633681 DO4ABS Alwin +2633683 DL1ROW Michael +2633684 DH1HD Dieter +2633685 DO3HMO Patty +2633687 DL1IN Stefan +2633849 DL8XI Ingo 2634001 DL6NW Nicole 2634002 DL1HC Michael 2634003 DH5JR Hannelore @@ -50636,7 +60267,7 @@ 2634477 DF6HW Hubert 2634478 DO3KHH Hendrik 2634479 DL6DBK Hermann -2634480 DO2FF Bernd +2634480 DK6KJ Bernd 2634481 DO5GN Gerhard 2634482 DO3DSA Dirk 2634483 DG7KBP Ulf @@ -51061,7 +60692,7 @@ 2634905 DO1HMW Hans 2634906 DF9GM DF9GM 2634907 DO7WWW DO7WWW -2634908 DL9DF DL9DF +2634908 DL9DF Joerg 2634909 DO1SHM DO1SHM 2634910 DJ0DJ DJ0DJ 2634911 DF6KA DF6KA @@ -51103,7 +60734,7 @@ 2634947 DG3KCB Hans-Juergen 2634948 DG5DAT Ralf 2634949 DL8QB Felix -2634950 DO1BI Alexander +2634950 DO9EMS Alexander 2634951 DB4YH Gerald 2634952 DO7JPG DO7JPG 2634953 DH1KBM DH1KBM @@ -51136,6 +60767,21 @@ 2634982 DK0YB Clubstation 2634983 DH0KAH Werner 2634984 DL9KAT Otto +2636001 DO8AE Andreas +2636002 DL6AAO Arthur +2636003 DL4FBW Wolfgang +2636004 DG8FDY FRIEDRICH +2636005 DD1XX Thomas +2636006 DO1CKR Christian +2636007 DO2TK Ausbildung +2636008 DG2YBR Michael +2636009 DG4FAN Peter +2636010 DG2MK Matthias +2636011 DJ0WV Andrea +2636012 DO3HSB Heiko +2636013 DL3BKE Wolfgang +2636014 DF9FZ Geru +2636015 DG7FDN Brigitte 2637001 DF6MP Marcus 2637002 DO2STO DO2STO 2637003 DK7OJ Klaus @@ -51188,12 +60834,12 @@ 2637050 DL3GBI Heinz 2637051 DM9LSB Juergen 2637052 DM3HJW Horst -2637053 DO4CG DO4CG +2637053 DO4CG Christian 2637054 DF1UJ Werner 2637055 DJ9FT Fritz 2637056 DO4SAM DO4SAM 2637057 DK7UX Michael -2637058 DO1FDD Do1fdd +2637058 DO1FDD Frank 2637059 DK1LC Christoph 2637060 DL2GBA Bernhard 2637061 DL9XN DL9XN @@ -51222,7 +60868,7 @@ 2637084 DF7FZ DF7FZ 2637085 DF3SS Theo 2637086 DO0RT DO0RT -2637087 DG3ACH DG3ACH +2637087 DG3ACH Swen 2637088 DG1GNR DG1GNR 2637089 DG0OFE Thomas 2637090 DG1SCD DG1SCD @@ -51266,7 +60912,7 @@ 2637128 DL4TJ Werner 2637129 DK1CE Ulmar 2637130 DC1JFP Florian -2637131 DO2VS Vincent +2637131 DM9MB Monika 2637132 DL8GAR DL8GAR 2637133 DK8GO Franz 2637134 DK5GA Alex @@ -51481,6 +61127,232 @@ 2637343 DH2GAG Joerg 2637344 DL1GH Louis 2637345 DF3IZ Sb +2637346 DL5GBL Ronny +2637347 DL6PS Paul +2637348 DL5SBC Bernd +2637349 DO1IJB Joe +2637350 DL2EH Erik +2637351 DL3RW Reiner +2637352 DO5TM Matthias +2637353 DK7IP Juergen +2637354 DB5RK Robert +2637355 DK2ST Olaf +2637356 DJ4LZ Mario +2637357 DK6SN Werner +2637358 DO7EK Ewald +2637359 DG1RAZ Willfried +2637360 DL8SEK Dieter +2637361 DB1SS Sigurd +2637362 DF1FS Frank +2637363 DG1GSD Matthias +2637364 DF2IR Uwe +2637365 DO5BM Bernhard +2637366 DL3FP Fabian +2637367 DK9IW Christian +2637368 DD5FX Felix +2637369 DO2FLO Flori +2637370 DL4OBE Stephan +2637371 DL1ST Siegfried +2637372 DD7GR Christos +2637373 DG2SKJ Juergen +2637374 DO7RL Robin +2637375 DJ3RO Reiner +2637376 DL7KM Martin +2637377 DK4HT Horst +2637378 DL9ED Elmar +2637379 DF2UB Werner +2637380 DL2UH Hart +2637381 DO8BAL Andrea-Luisa +2637382 DC7PM Karl-Heinz +2637383 DO1JKF Johann +2637384 DL2KJ Juergen +2637385 DK6AH Andreas +2637386 DO2GBR Reinhold +2637387 DD5WA Wolfgang +2637388 DG3GTM Thomas +2637389 DF3UM Frank +2637390 DL6CAT Stefanie +2637391 DL4KHB Klaus +2637392 DK9GO Otto +2637393 DL6SAH Gerd +2637394 DG6SGQ Bernhard +2637395 DK7IR Guido +2637396 DK1HZ Heinz +2637397 DL1GGX Axel +2637398 DG3GSP Peter +2637399 DG6SR Peter +2637400 DK4IO Wolf +2637401 DG2GYX Silvio +2637402 DL9SDL Helmut +2637403 DK7SP Peter +2637404 DG7SHD Andreas +2637405 DO7NS Nico +2637406 DC3KW Walter +2637407 DC5MR Matthias +2637408 DL1GJR Ralf +2637409 DO5TMM Marcel +2637410 DH6MD Mehmet +2637411 DL2GWY Wendy +2637412 DO1PMS Pascal +2637413 DO5DBW Kai +2637414 DO1DBW Manuel +2637415 DO1XIX Jens +2637416 DK6GL Dieter +2637417 DL8TX Juergen +2637418 DB5TH Andy +2637419 DH0GAB Walter +2637420 DH8JE Joerg +2637421 DL4SEW Stefan +2637422 DJ8LA Hanns +2637423 DO7RF Rene +2637424 DH2SE Sascha +2637425 DL7ACI Fred +2637426 DK4PE Lutz +2637427 DK3JE Jens +2637428 DL3SCJ Wolfgang +2637429 DO6HG Guenter +2637430 DF7ZI Andreas +2637431 DO1GW Wolfgang +2637432 DL1GQB Bernd +2637433 DG9SA Matthias +2637434 DO8BYE Ben +2637435 DL1250G Event-Station +2637436 DG1AG Andreas +2637437 DJ9GK Dieter +2637438 DF1IAP Achim +2637439 DJ2DX Oezden +2637440 DG4SJ Rainer +2637441 DL9ZAM Johannes +2637442 DL6WL Lothar +2637443 DJ1TR Fahri +2637444 DF4UM Marion +2637445 DO1MED Klaus +2637446 DL8GBR Thomas +2637447 DO3BO Michael +2637448 DO1SSB Sascha +2637449 DJ9RM Horst +2637450 DJ5NS Nurettin +2637451 DO2SW Wolfgang +2637452 DL8GBS Andreas +2637453 DL7LTO Thorsten +2637454 DL1GMJ Heinrich +2637455 DL3DBW Uwe +2637456 DL5GBT Klaus +2637457 DO4BEK Eckhard +2637458 DO5RFT Renate +2637459 DL9SDI Hans +2637460 DL4EI Norbert +2637461 DO1SAB Sascha +2637462 DG3GEZ Gernot +2637463 DG5BQ Rico +2637464 DK3KX Ewald +2637465 DL5GCU Udo +2637466 DO2YUS Uwe +2637467 DG2UAT Olaf +2637468 DO9DI Dirk +2637469 DD4UP Michael +2637470 DF9VN Joerg +2637471 DK2VS Vincent +2637472 DO8EE Stefan +2637473 DH8SBH Wolfgang +2637474 DB3IM Volker +2637475 DK2FK Fabian +2637476 DL2ABT Christian +2637477 DO7HC Conny +2637478 DK1AH Wolfgang +2637479 DK4MAX Max +2637480 DC1YL Gabi +2637481 DO1FWI Fabian +2637482 DM5TB Tobias +2637483 DL1GER Rainer +2637484 DK7SCH Tobias +2637485 DJ9FA Adrian +2637486 DG1GEP Karl-Heinz +2637487 DO9ABC Knobi +2637488 DL8DX Andy +2637489 DL4SAG Karl-Heinz +2637490 DG3IAR Peter +2637491 DO1TWI DO1TWI +2637492 DK8MA Manfred +2637493 DM1SIL Silvia +2637494 DC4VB Reimund +2637495 DL2EAD Andreas +2637496 DL4TP Rainer +2637497 DJ1TF Thomas +2637498 DH1HK Henry +2637499 DL1SBU Bernd +2637500 DD5KA Jose +2637501 DO3SE Sebastian +2637502 DO1RAU Stefan +2637503 DL6FS Frank +2637504 DC0IJ Holger +2637505 DL4SCC Konrad +2637506 DO2MC Michael +2637507 DH0JAA Bernd +2637508 DO4RST Robert +2637509 DO9TLF Tim +2637510 DO1MN Marvin +2637511 DO2TFH Tom +2637512 DC0SG Gerhard +2637513 DM7ET Will +2637514 DO9EA Ulrich +2637515 DO5TIM Tim +2637516 DO7SVN Sven +2637517 DO4MRX Jakob +2637518 DF5TI Peter +2637519 DD1PBU Pascal +2637520 DB1SGH Helmut +2637521 DD1SI Rainer +2637522 DL6SFB Juergen +2637523 DL3US Heinz +2637524 DF1TU Eberhard +2637525 DB8SM Martin +2637526 DL5SDN Werner +2637527 DL4AU Andreas +2637528 DL1BBI Engelhard +2637529 DG1UAZ DG1UAZ-Ralf +2637530 DG2GTG Markus +2637531 DF3IT Gerd +2637532 DH2SAN Paul +2637533 DO4QK Tommy +2637534 DG2IA Manfred +2637535 DO3MEU Michael +2637536 DL1GPM Markus +2637537 DB3TE Klaus +2637538 DG3GAU Arnold +2637539 DM4AB Andreas +2637540 DO4SW Walter +2637541 DJ1OB Oliver +2637542 DC5TA Andr +2637543 DH6SAY Thorsten +2637544 DL1SEM Markus +2637545 DO3WKA Werner +2637546 DL8TOS Tobias +2637547 DC7HPE Johannes +2637548 DH5TA Andre +2637549 DH5SAM Uwe +2637550 DL6MHC Michael +2637551 DD7RG Ralf +2637552 DC5II Klaus +2637553 DB7GJ Juergen +2637554 DG5MMG Rudi +2637555 DO1TBE Thomas +2637556 DK4II Wolfgang +2637557 DK4LH Lysanne +2637558 DF1IAT Horst +2637559 DO9OH Oliver +2637560 DO2MSS Marc +2637561 DC5SW Bernd +2637562 DO1AHK DO1AHK +2637563 DO1SHR Roland +2637564 DG4IAG Ralf +2637565 DL5TX Daniel +2637566 DF5GV Manfred +2637567 DO1GA Kai +2637568 DO5MB Moritz +2637569 DG2HZ Hans +2637570 DJ1SE Werner +2637571 DO1WHU Wolfgang 2638001 DK1FM FelixCM 2638002 DL0VHS VHS 2638003 DG8NFB Klaus @@ -51635,7 +61507,7 @@ 2638152 DL2NJM Juergen 2638153 DL9TU Uwe 2638154 DF5HRN DF5HRN -2638155 DO2RJ DO2RJ +2638155 DC2RH Ralph 2638156 DO1LEP Tobias 2638157 DO8NGI Gisela 2638158 DO1MAC DO1MAC @@ -51673,12 +61545,12 @@ 2638190 DL7RRK Richard 2638191 DJ6MK Wolfgang 2638192 DL9ZZ Tobias -2638193 DO2MBW Markus +2638193 DM2WB Markus 2638194 DL8FA Alfred 2638195 DO9PAB Karsten 2638196 DK7SB Stefan -2638197 DB5HK DB5HK -2638198 DL1UPK DL1UPK +2638197 DL9RAZ Klaus +2638198 DL1UPK Uwe 2638199 DH1NED DH1NED 2638200 DL1CAW DL1CAW 2638201 DL6NDX Kurt @@ -51708,7 +61580,7 @@ 2638225 DL7MDX Harald 2638226 DL6JOS Josef 2638227 DL3RL Ossi -2638228 DG1MIB DG1MIB +2638228 DG1MIB Werner 2638229 DL2UD Manfred 2638230 DO2MPS Peter 2638231 DK6RS Josef @@ -51776,7 +61648,7 @@ 2638293 DC7SEP Sepp 2638294 DG7NCL Volker 2638295 DO2FMW Fabian -2638296 DL1PD DL1PD +2638296 DL1PD Darko 2638297 DG7MEU Thomas 2638298 DC2MT Josef 2638299 DL1TKZ Wolf @@ -51789,7 +61661,7 @@ 2638306 DL9SW Severin 2638307 DG4NAA Richy 2638308 DG9MAK Manfred -2638309 DO9ZIG Hagen +2638309 DH9ZIG Hagen 2638310 DG9SAJ Michael 2638311 DL2NBB Thomas 2638312 DF8RN Robert @@ -51963,7 +61835,7 @@ 2638480 DG2CV GERHARD 2638481 DL4MET Werner 2638482 DG8RAD Joachim -2638483 DO4SN Stefan +2638483 DK8IL MIchael 2638484 DG4MNU Klaus 2638485 DG6RS Georg 2638486 DC1MBR Schuppy @@ -52067,6 +61939,329 @@ 2638584 DO1MAK Andi 2638585 DL1RO Robert 2638586 DG5MG Markus +2638587 DL6MDF Roland +2638588 DK5MDA Helmut +2638589 DH1JH Joachim +2638590 DB1MKS Stefan +2638591 DL2MDJ Erich +2638592 DL1DH Dominik +2638593 DD4ST Thomas +2638594 DL3MLP Patrick +2638595 DO9KT Michael +2638596 DO5MTK Markus +2638597 DO7RMO Magnus +2638598 DH3MLI Jons +2638599 DB4UW Udo +2638600 DL8WJH Willi +2638601 DK9NL Hans +2638602 DO7ATR Kevin +2638603 DG6NDE Peter +2638604 DL2HF Manfred +2638605 DJ4US Uwe +2638606 DM1XB Philipp +2638607 DH7NK Klaus +2638608 DO3HD Helmut +2638609 DO3SKF Basi +2638610 DF4MD Heinz +2638611 DH9AT Andreas +2638612 DC1WID Wido +2638613 DO2EST Erhard +2638614 DB2XF Xaver +2638615 DL1YAE Thomas +2638616 DG7NFG Bernd +2638617 DB0XG Josef +2638618 DO1EBN Kevin +2638619 DO1MA Martin +2638620 DO1TFI Tobias +2638621 DL4SCF Willi +2638622 DK9RC Fritz +2638623 DL4MGC Bernd +2638624 DL4WF Walter +2638625 DG5MHD Mike +2638626 DO7VF Micha +2638627 DL8MN Manfred +2638628 DL6NM Michael +2638629 DC4CI Christian +2638630 DB4FO Dirk +2638631 DO1JAK Joe +2638632 DG1IUK Florian +2638633 DO1RFR Frank +2638634 DG3RBQ Horst +2638635 DJ2MT EDDY +2638636 DH1AR Hubert +2638637 DO1PIT Pit +2638638 DC4CW Reiner +2638639 DJ8MA Martin +2638640 DO1SEK Simon +2638641 DL9WTL Wolfgang +2638642 DL6DJ Dieter +2638643 DF6RI Alfred +2638644 DB4HB Amr +2638645 DG1RAT Walter +2638646 DH9FG Frank +2638647 DO1BYT Byteturtle +2638648 DC2MP Karl +2638649 DL5RAS Christian +2638650 DH4RN Manfred +2638651 DM3ER Rainer +2638652 DL8MCJ Wilfried +2638653 DG2NDJ Christian +2638654 DL2NED Martin +2638655 DH3RW Werner +2638656 DK0PT OTHRegensburg +2638657 DC9NG Heinz-Gerhard +2638658 DH3TW Tobias +2638659 DL4RDT Roland +2638660 DO9QC Uli +2638661 DL1PA Peter +2638662 DG2MMO Alex +2638663 DB7JB Karsten +2638664 DL7MEH Herbert +2638665 DL6SB Sebastian +2638666 DO2NA Michael +2638667 DG1MG Guenter +2638668 DK5AC Albert +2638669 DO7ANF Axel +2638670 DL2NAT Hans +2638671 DO1DRA Dominik +2638672 DF6MG Kurt +2638673 DL1HKB Heinz +2638674 DG1MAJ Roland +2638675 DF7SP Hermann +2638676 DL5MCG Wilhelm +2638677 DO1FPI Flo +2638678 DL3RMG Matthias +2638679 DL7JO Joachim +2638680 DL5RDQ Hans +2638681 DO2DAP Danny +2638682 DO3HAM Werner +2638683 DL4RDM Frieda +2638684 DG5MGG SEPP +2638685 DO5MTK Markus +2638686 DO3SNT Edward +2638687 DL9KX Klaus +2638688 DL1MBD Peter +2638689 DF2CY Bert +2638690 DG5MAG Guenther +2638691 DO1MHV MH +2638692 DL1RO Robert +2638693 DD7MH Hans +2638694 DC2DC Stefan +2638695 DO4AT Timo +2638696 DL7PLJ Jacek +2638697 DO9JFG Jens +2638698 DL5LCR Michael +2638699 DC1STS Stefan +2638700 DO1NEW Tobias +2638701 DL1MDS Tom +2638702 DG3SA Uli +2638703 DO5CAT Jens +2638704 DG6NDY Juergen +2638705 DF1CM Hans +2638706 DO1FUK Flo +2638707 DG2NPE Peter +2638708 DC7RF Robert +2638709 DL8MCU Heinz +2638710 DL3KDP Frank +2638711 DL6RBG Gerold +2638712 DL4MEV Leonhard +2638713 DL5NDM Gerd +2638714 DO5STX Steffen +2638715 DL9ZW Christian +2638716 DL2RKB Klaus +2638717 DO1FUK Flo +2638718 DJ1KE Mike +2638719 DC5YD Uwe +2638720 DO8ZB Mateusz +2638721 DL2UKH DL2UKH +2638722 DL8TU Tino +2638723 DG3NEU Tobias +2638724 DL5MDZ Jochen +2638725 DL1NAT Paul +2638726 DG9NAB Germang.piehler@t-on +2638727 DF8GU Gerhard +2638728 DG3NDL Norbert +2638729 DL5RCB Gerhard +2638730 DG5RAD Dieter +2638731 DO1MPA Philipp +2638732 DL6WGA Wilhelm +2638733 DB1MRK Koess +2638734 DG4NFT Claus +2638735 DK1NR Ron +2638736 DD1UU Ralf +2638737 DB1PJ Juergen +2638738 DL9SN Stefan +2638739 DC4TB Thomas +2638740 DJ5YS Stefan +2638741 DC2AV Juergen +2638742 DD1CE Albert +2638743 DO9GP Giorgio +2638744 DL4ABM Armin +2638745 DB8CE Christian +2638746 DF0HSA DF0HSA +2638747 DL6DW Detmar +2638748 DJ3CQ Jo +2638749 DO1MOD Michael +2638750 DJ1MV Fritz +2638751 DO1CR Christian +2638752 DO1SHD Stefan +2638753 DO1MAB Markus +2638754 DO2AFU Martin +2638755 DL8TU Tino +2638756 DK7KV Guenter +2638757 DF6VI Stefan +2638758 DG8YHQ Klaus-Hermann +2638759 DG6RBT Heri +2638760 DG9NGK Johannes +2638761 DK6IM Werner +2638762 DH1NFK Thomas +2638763 DO1NAE Andy +2638764 DO1MPR Robert +2638765 DH1NAS Franz-Josef +2638766 DO5MP Peter +2638767 DJ9FL Norbert +2638768 DM6HK Horst +2638769 DL1NBJ Norbert +2638770 DO5MKK Markus +2638771 DL1FMP Felix +2638772 DL3RJ Ralf +2638773 DH9ZIG Hagen +2638774 DO1AZC Heinz +2638775 DG2NGF Martin +2638776 DC1SZA Andreas +2638777 DL9AAA Juergen +2638778 DL1NDS Fred +2638779 DG7RBV Guenther +2638780 DO4ML Matthias +2638781 DO8AS Armin +2638782 DL1HKL Klaus +2638783 DM6ST Stephan +2638784 DO1JPR Juergen +2638785 DG9RF Tom +2638786 DO3IC Dominik +2638787 DC2KH Karin +2638788 DL5MIG Michael +2638789 DO9JMS Johannes +2638790 DL4PET Peter +2638791 DG5MER Peter +2638792 DD0YU Lothar +2638793 DC6RD Reinhard +2638794 DB7RT Helmut +2638795 DJ6CW Klaus +2638796 DH3NB Peter +2638797 DD6TT Bene +2638798 DK2XL Werner +2638799 DG7MAH Heinz +2638800 DF3RP Klaus +2638801 DL1NBU Uli +2638802 DL1HTF Thomas +2638803 DO1RX Tobias +2638804 DO8GM Marco +2638805 DD5ET Scott +2638806 DO5MKK Markus +2638807 DO6GF Felix +2638808 DL4RAH Johann +2638809 DG2MFC Roman +2638810 DO1NSB Stefan +2638811 DO3MEY Mike +2638812 DG3RCK Walter +2638813 DK1MEB Herbert +2638814 DG3NJS Joerg +2638815 DG9MEA Helmut +2638816 DL1MPR ROBERT +2638817 DG2HA Andreas +2638818 DM4HKP ROBERT +2638819 DO1JES DO1JES-Jessica +2638820 DG1SVE Sven +2638821 DK7ME Carlos +2638822 DK9CZ Hermann +2638823 DK1EC Reinhold +2638824 DC2DE Dieter +2638825 DM2SKY Dirk +2638826 DB8NM Bernd +2638827 DK5MT Robert +2638828 DG5NAL Frank +2638829 DO1MH Hubert +2638830 DO3MCA Rico +2638831 DO2DSA Daniel +2638832 DO1OHG Olli +2638833 DL7PE Juergen +2638834 DF4ZS Harry +2638835 DH1JIM Eberhard +2638836 DB6BG Burkhard +2638837 DO1PWE Willi +2638838 DD1JP Juergen +2638839 DH3WTJ Michael +2638840 DG7NAE Sigi +2638841 DL6RCN WolfgangS +2638842 DL6WZ Wolfi +2638843 DL2NEM Matthias +2638844 DO1PWE Willi +2638845 DJ7AM Dieter +2638846 DL9NAZ Knut +2638847 DO1NN Jay +2638848 DL6AMH Jakob +2638849 DL2RAB Arthur +2638850 DO9HM Heiko +2638851 DD3MS Marco +2638852 DG0LD Christian +2638853 DG6LP Markus +2638854 DL4NAZ Richard +2638855 DO7OX Matthias +2638856 DL8MFX Wilfried +2638857 DC1KS Charly +2638858 DL5MHE Peter +2638859 DM8AK Antonijo +2638860 DG6RW Roland +2638861 DL3NBP Gerhard +2638862 DG6MBU Chris +2638863 DG8NES Stefan +2638864 DL9MBE Helmut +2638865 DO2AL Ivonne +2638866 DA1JF Joe +2638867 DK4YY Rolf +2638868 DM6NG Martin +2638869 DH2TS Thomas +2638870 DO2ASN Anja +2638871 DO8DHH Dieter +2638872 DM1ATT Matthias +2638873 DL1KPH Per +2638874 DL2RAO Heinz +2638875 DF6CN Guenther +2638876 DO1AS Alex +2638877 DD0AS Andreas +2638878 DJ0MDC Leo +2638879 DB1ROP Oliver +2638880 DF1SG Edward +2638881 DO2NLS Stefan +2638882 DM5NA Gerald +2638883 DO3HMS Hubert +2638884 DL2SGP Serge +2638885 DO5FZ Franzi +2638886 DO2TCM Tim +2638887 DD6AL ALEX +2638888 DO2NAK Andreas +2638889 DL3MBK Alfons +2638890 DO1PIT Pit +2638891 DL5MFT Martin +2638892 DO9TP Thomas +2638893 DL5MCH Walter +2638894 DL8RX Anton +2638895 DL1SHA Harry +2638896 DH1KLM Sigi +2638897 DL5MLM Melanie +2638898 DC8CT Tom +2638899 DG8MHG Juergen +2638900 DH9NFM Chris +2638901 DG8EUD Stefan +2638902 DG3MIZ Alexander +2638903 DF2ZJ Frank +2638904 DO9TP Thomas +2638905 DB1GC Guenter +2638906 DK1NH Norbert +2638907 DF7RK Kalle +2638908 DG7RAW Wolfgang +2638909 DK9MW Sylvia 2644001 DF4JG Uli 2644002 DO8JKR JOeRG 2644003 DO5YS Achim @@ -52106,7 +62301,7 @@ 2644037 DF6KC Dietmar 2644038 DK5NCC Lothar 2644039 DL3FB Freddy -2644040 DO1BI Alexander +2644040 DO9EMS Alexander 2644041 DF1LX Peter 2644042 DL2KV Bodo 2644043 DG4YCY Juergen @@ -52301,7 +62496,7 @@ 2644232 DO6EMC Mirko 2644233 DO4ALX Alex 2644234 DO1BEB Benjamin -2644235 DO4EZ Ralf +2644235 DL8RD Ralf 2644236 DO1ELO Guenni 2644237 DB1KMJ Marco 2644238 DO7CP Christin @@ -52397,7 +62592,7 @@ 2644328 DO2THU Thorsten 2644329 DO7RWE Jens 2644330 DL1YAV Olaf -2644331 DO8DE Dominik +2644331 DL2DE Dominik 2644332 DG4MS Melanie 2644333 DD4EB Kirsten 2644334 DD1AW Andreas @@ -52406,6 +62601,431 @@ 2644337 DO9HN Wolfgang 2644338 DO1PHM Philipp 2644339 DJ1RA Uwe +2644340 DL3LR Sascha +2644341 DB0DW VHF +2644342 DK1YH Yannick +2644343 DO6GS Markus +2644344 DL6DM Joerg +2644345 DO1MFC Michael +2644346 DK6KYL Karina +2644347 DM2EE Erhard +2644348 DJ1MK Michel +2644349 DO7PD Daniel +2644350 DJ1EL WINI +2644351 DJ0SP Hannes +2644352 DK7EK Wolfgang +2644353 DG1EAD Dieter +2644354 DK1KAK Andr +2644355 DL6KBW Michael +2644356 DF5UA Peter +2644357 DB1MC Maximilian +2644358 DG2YGX Michael +2644359 DG2YWS Wolfgang +2644360 DO5MBA Michael +2644361 DK5LG Lisa +2644362 DB1QO Erich +2644363 DD9QY Herbert +2644364 DL1MRL Marcel +2644365 DL2KHM Heinrich +2644366 DF2EQ Michael +2644367 DD5LX Frank +2644368 DC3MS Mark +2644369 DO9REF DO9REF +2644370 DG1EEI Thorsten +2644371 DO7JWG Jos +2644372 DL3KHG Helmut +2644373 DO8AA Andreas +2644374 DL3ST Leon +2644375 DK0FOX DK0FOX +2644376 DG2ET Peter +2644377 DL4EBT Herbert +2644378 DO6CR DAMIAN +2644379 DL5RMS Richard +2644380 DF1DX Juergen +2644381 DG2KAT Bert +2644382 DL8BEP Peter +2644383 DB9MUT DB9MUT +2644384 DL1IKT Ismail +2644385 DL9YBP Ingo +2644386 DF1EZ Heinz +2644387 DJ3KS Herbert +2644388 DL4KBO Eric +2644389 DB1RW Roland +2644390 DG7DCI Michael +2644391 DB6FN Finn +2644392 DL2EBW Norbert +2644393 DH8EAD Joerg +2644394 DO6GS Mark +2644395 DL1EEL Thomas +2644396 DG1EHJ Juergen +2644397 DO2LEV Dieter +2644398 DL4YEH Reiner +2644399 DK2CRN Christoph +2644400 DJ9ZL Juergen +2644401 DG1DSN Sanel +2644402 DL4EZ Friedhelm +2644403 DF5FD Andreas +2644404 DL7SW Sven +2644405 DF9CV Wolfgang +2644406 DH7JL Jens +2644407 DL4BBU Peter +2644408 DG1DAD Martin +2644409 DL3SPS Simon +2644410 DO3HMK Michael +2644411 DO9MIE Michael +2644412 DK0CRT Michael +2644413 DO3CM Marc +2644414 DG1WA Udo +2644415 DB2DE Juergen +2644416 DO5FJ Franz-Josef +2644417 DL6EZ Dieter +2644418 DG4DCW Michael +2644419 DG5GBS Guenter +2644420 DL3DBV Martin +2644421 DO7VM Peter +2644422 DO8KAS Achim +2644423 DL5JS Michael +2644424 DG8DBS Thomas +2644425 DL4KAZ Wolfram +2644426 DO3CON GEORG +2644427 DG8YFV DG8YFV +2644428 DL8YAP Thomas +2644429 DB7KP Alfred +2644430 DO1KBW Klaus +2644431 DJ8TM Helmut +2644432 DL1EMK Heinz +2644433 DL0SAR Feuerwehr +2644434 DL3YDH Heribert +2644435 DL3WB Willi +2644436 DO9LC Andre +2644437 DH4YAW Sabine +2644438 DO5SR Stef +2644439 DG2YBP Holger +2644440 DL3YEG Heinz +2644441 DL3CA Rolf +2644442 DJ1QQ Kalle +2644443 DL6DAU Gerd +2644444 DO9JS Joerg +2644445 DL4KAG Reiner +2644446 DO3RSA Ralf +2644447 DO2JKO Juergen +2644448 DF9QN Lutz +2644449 DO5TR Thomas +2644450 DO4HJM Juergen +2644451 DD9JQ Werner +2644452 DJ6NN Gerd +2644453 DK2NI Horst +2644454 DO9EK Heiko +2644455 DC5DM Marcus +2644456 DF9EY Manfred +2644457 DO4YMG Marcel-Etienne +2644458 DF7QQ Berthold +2644459 DG6YY Diego +2644460 DL2KBQ Horst +2644461 DL3KU Ulrich +2644462 DG4KLU Kai +2644463 DD0EU Volker +2644464 DC5AS Alex +2644465 DG6YAB Uwe +2644466 DF6HP Hans-Peter +2644467 DL1HVO Holger +2644468 DC1DX Eberhard +2644469 DF4MF Otto +2644470 DJ6QO Dick +2644471 DO9EK Heiko +2644472 DB6QN Thomas +2644473 DL5YK Reinhold +2644474 DL1DAI Dieter +2644475 DL9YFF Uwe +2644476 DG2YIC Berti +2644477 DL1UDO Udo +2644478 DF9XZ Willi +2644479 DK1HP Pixiepe +2644480 DL1PWJ Peter +2644481 DC7NTP Joe +2644482 DO1AFM Mike +2644483 DJ1NT Neset +2644484 DB1BC Thomas +2644485 DO3DM Markus +2644486 DL9EBS Hermann +2644487 DD7QL Hans +2644488 DL7KAR Klaus +2644489 DG1ECZ Stephan +2644490 DH5GP Gregor +2644491 DO4CAT Max +2644492 DO1KWR Wilfried +2644493 DB4KW Ulrich +2644494 DJ2RK Ralf +2644495 DF2DO Heinrich +2644496 DG9ME Michael +2644497 DL9KV Guenter +2644498 DK3CY Willi +2644499 DG9YCL Christoph +2644500 DO5TH Thomas +2644501 DO2MP Markus +2644502 DO5PL Paul +2644503 DF4HKF Dimitri +2644504 DF3AH Arthur +2644505 DB4CB Cazim +2644506 DG1EAD Dieter +2644507 DH4AC Fred +2644508 DL3ELM Elmar +2644509 DL1YES Rudi +2644510 DC3JE Holger +2644511 DL1KDX Urs +2644512 DO1DSL Dirk +2644513 DO3ANK Andreas +2644514 DL3DR Heiko +2644515 DO7GJ Micha +2644516 DL1HWG Oli +2644517 DO1YMP DO1YMP +2644518 DO2AP Artur +2644519 DK1HL Stefan +2644520 DG6KL Heinz +2644521 DO2MEL Patrick +2644522 DK3EL Leo +2644523 DD1EH Siegfried +2644524 DL1WKU Willi +2644525 DG5BEE Michael +2644526 DL1MV Markus +2644527 DO5LA Achim +2644528 DO2MSE Michael +2644529 DO4BP Benedikt +2644530 DC3JBN Nihat +2644531 DL1DBO Dieter +2644532 DC6QL DC6QL +2644533 DL3DAY Peter +2644534 DL1BGI Axel +2644535 DL1KMD Mevluet +2644536 DO7HJB Juergen +2644537 DO1EK Erhard +2644538 DJ1BG Bernd +2644539 DD5MD Mathias +2644540 DF3JR Udo +2644541 DB1UJ Joerg +2644542 DL4QJ Manfred +2644543 DL1KGL Guenter +2644544 DO9DT Andreas +2644545 DO1MMK MUSTAFA +2644546 DO1RHC Ruediger +2644547 DB1CD Christian +2644548 DL5EKI RECEP +2644549 DC3QJ Frank +2644550 DO1WDG Werner +2644551 DO9EN Norbert +2644552 DJ1FQ Gerhard +2644553 DL4KCD Erika +2644554 DL5BH Horst +2644555 DL2BR Ralf +2644556 DJ2JW Wilhelm +2644557 DL3KGS Gerald +2644558 DO1LC Martin +2644559 DO8GW Guenther +2644560 DL2EGS Gerd +2644561 DD4JN Norbert +2644562 DO1KEV Markus +2644563 DO4LEX Alexander +2644564 DO5JI Hendrik +2644565 DB8QT Thomas +2644566 DL9DA Thomas +2644567 DO7ACI Dursun +2644568 DJ1NT Neset +2644569 DO8JM Markus +2644570 DO7JH DO7JH +2644571 DD9DR Harry +2644572 DG9DBO Thomas +2644573 DO1KHR Karl-Heinz +2644574 DO3GH Gerhard +2644575 DO2BC Christian +2644576 DB8YS Hans +2644577 DK7ZX Axel +2644578 DD3EU Uli +2644579 DO1CGE Christian +2644580 DL5KSB Katze +2644581 DK4RH Roland +2644582 DL1TEX Dennis +2644583 DG2DCC Guido +2644584 DB8QR Reinhold +2644585 DG8YFB Karl +2644586 DG3YGA Ulrich +2644587 DO1GEM George +2644588 DJ4SU Peter +2644589 DK1NL Marcel +2644590 DL0WSE Clubstation +2644591 DL2YDP Roger +2644592 DB9JV Mathias +2644593 DL2ADI Adrian +2644594 DL6ETB Jens +2644595 DL3DBJ Franz +2644596 DO1MOG Stephan +2644597 DO2EK Lutz +2644598 DL1CKT Claudius +2644599 DO1KRT Ralf +2644600 DO5KX Kilian +2644601 DB3ED Rudolf +2644602 DB1JAE Thomas +2644603 DL1NNB Norbert +2644604 DL2DBY Michael +2644605 DO7WWW Michael +2644606 DB5FG Frank +2644607 DL7KU Andreas +2644608 DL1ASN Alexander +2644609 DF5KO Theo +2644610 DK2FL Frank +2644611 DL3YEM Dieter +2644612 DD8EA Carsten +2644613 DG8YHO Jan +2644614 DF8EL Horst +2644615 DO7JA Torsten +2644616 DK8FF Juergen +2644617 DG2YCI Achim +2644618 DF7DC Hans +2644619 DG7EM MANFRED +2644620 DG5DL Manfred +2644621 DL1KGT Gerhard +2644622 DK1JZ Jens +2644623 DC4DI Hans-Michael +2644624 DH2EAL Karl +2644625 DL6KBV Dieter +2644626 DL7KCH Charly +2644627 DL9KS Krisztian +2644628 DL1ECG Georg +2644629 DM4YY Michael +2644630 DH4ML Martin +2644631 DL6YEU Ingo +2644632 DC6BC Norbert +2644633 DL2OHL Olaf +2644634 DL9EX Andres +2644635 DL7KBM Bernd +2644636 DF8JR Dieter +2644637 DG3KAG Wolfgang +2644638 DJ1DZ Waldemar +2644639 DL6II Vinny +2644640 DO1PTT Torsten +2644641 DO4UE Uli +2644642 DH2JS Hans-Georg +2644643 DG8KAD Alexander +2644644 DL3YCW Michael +2644645 DJ4MG Torsten +2644646 DK8KS Axel +2644647 DO5WLF Kevin +2644648 DK4ZZ Timo +2644649 DH1FS Friedhelm +2644650 DK4DJ Dirk +2644651 DO1CST Carsten +2644652 DG2YBW Gerd +2644653 DO9ZZ Marko +2644654 DL4KBO Eric +2644655 DC9QH Hartmut +2644656 DO8ED Elisabeth +2644657 DF0EK EFA +2644658 DO3UW Uwe +2644659 DO1YAD Martin +2644660 DL1EC Thomas +2644661 DO1HAB Hubert +2644662 DL6KAI Randolf +2644663 DL4ET Hans +2644664 DO2YM Matthias +2644665 DG3JW Hans +2644666 DJ1DE Heiko +2644667 DK2YM Manfred +2644668 DG6DK Ralf +2644669 DD7DC Martin +2644670 DO4LO Lorenz +2644671 DO1AWD Andreas +2644672 DO4LZ Christoph +2644673 DO3SHK Sebastian +2644674 DO8SAS Sascha +2644675 DL1CGE Christian +2644676 DL1KBA Karl +2644677 DL4KAU Lothar +2644678 DJ7ZW Klaus +2644679 DO1KMM Matthias +2644680 DL9YF Joerg +2644681 DG4YGH Gregor +2644682 DF2JI Volker +2644683 DF7EM Helge +2644684 DG5EV Klaus +2644685 DH1KP Klaus +2644686 DL3ECT Klaus +2644687 DF2BM Michael +2644688 DH1KC Claus +2644689 DL1EMN Gerardo +2644690 DO3FRH Frank +2644691 DK5T Andreas +2644692 DK5ON Andreas +2644693 DK0ON Andreas +2644694 DF1JU Willi +2644695 DB7JD Juergen +2644696 DO7LJ Juergen +2644697 DF6YT Uwe +2644698 DL4YEG Jochen +2644699 DL9YAO Ralph +2644700 DO1RZB Ralf +2644701 DO1ETK Dirk +2644702 DH9DAF Frank +2644703 DB5LK Lukas +2644704 DL1EMV Anja +2644705 DO1QN Roman +2644706 DF0OR G14-Klubstation +2644707 DG9DB Henner +2644708 DL2KRC Robert +2644709 DL8UR Ulrich +2644710 DO1KTM Thomas +2644711 DF4MJ Markus +2644712 DG1KMM Martin +2644713 DO2DG Daniel +2644714 DG4DG Stefan +2644715 DC1JC Detlef +2644716 DL0DHC Clubstation +2644717 DG3EL Thorsten +2644718 DH4FAI Friedemann +2644719 DO6LD Lars +2644720 DO1CHA Christoph +2644721 DG3BZ Bernhard +2644722 DL2KFH Harald +2644723 DO4SL Semi +2644724 DL0LEO Peter +2644725 DG1DBM MarcM +2644726 DD1JX Reiner +2644727 DO4EU Uli +2644728 DL1KAN Andy +2644729 DL9KH Herbert +2644730 DO8THE Thomas +2644731 DO8OH Olaf +2644732 DC9KE Erik +2644733 DG1EDM Frank +2644734 DO5GAL Guenter +2644735 DL3BF Burkhard +2644736 DG1ET Thorsten +2644737 DO1BHM Guenter +2644738 DL2QG Karl +2644739 DG1YHR Martin +2644740 DK1HI Bernd +2644741 DH1TB Thomas +2644742 DO2EF Chris +2644743 DL5KCI Ingo +2644744 DL4DI Manfred +2644745 DO7ICH Michael +2644746 DO9GL Guenter +2644747 DL2LOZ Achim +2644748 DC2QE Andreas +2644749 DM6AS Andreas +2644750 DG7EAO Norbert +2644751 DL3YCA Norbert +2644752 DL7FH Herbert +2644753 DB1KMS Michael +2644754 DH7OL Olli +2644755 DK5US Uwe +2644756 DL4EEE Ingo +2644757 DO5DHL Dietmar +2644758 DK7DJ Werner +2644759 DO1BAL Sebastian +2644760 DO2RPH Reinhard +2644761 DO5MD Michael +2644762 DO1MPP Michael +2644763 DL3KA Artur +2644764 DH3MM Matthias 2660001 ZB2TT Rob 2660002 ZB2GI ZB2GI 2660003 ZB2ER Edward @@ -52415,7 +63035,7 @@ 2681004 CT2YWX Carla 2681005 CT2IXP Victor 2681006 CT1EPT Carlos -2681007 CT2GNC Jos +2681007 CT2GNC Jose 2681008 CT2GNC Jose 2681009 CT2ITF Monteiro 2681010 CT2HTM Mario @@ -52423,12 +63043,12 @@ 2681012 CT1EMC Batista 2681013 CT1JQJ Nuno 2681014 CT2JTY Nicola -2681015 CT2IOK Jose +2681015 CT2IOK Jose_Carlos 2681017 CS7AFH Joao -2681018 CT4TE Tony +2681018 CT1FJU Vitor 2681019 CT1ENU Eugenio 2681020 CT1DJG Pizarro -2681021 CT2IKH VITOS +2681021 CT2IKH Leonel 2681022 CT2IXW Paulo 2681023 CT1FFE Pereira 2681024 CT2JBB Fontes @@ -52443,7 +63063,7 @@ 2681033 CT1AMO Jose 2681034 CS7AFP Phil 2681035 CT1CXP Antonio -2681036 CT1DCV Joaquim +2681036 CT1DCV Machado 2681037 CT2IJB Antonio 2681038 CT1FHV Jose 2681039 CT5HUB Paulo @@ -52460,7 +63080,7 @@ 2681050 CT1HXJ Vitor 2681051 CT1BDS Jose 2681052 CT1FFB Tony -2681053 CT1EQQ Jaime +2681053 CT1EQQ Jaime_Silva 2681054 CT1FEK Paulo 2681055 CT2IXP Victor 2681056 CT2JOA Santos @@ -52495,24 +63115,24 @@ 2681085 CT1WB Cesar 2681086 CT1HQJ Claudio 2681087 CT2FUO Manuel -2681088 CT2IOK Jose +2681088 CT2IOK Jose_Carlos 2681089 CS7AMK Vitor 2681090 CT2IEP Pedro 2681091 CT1EGR MANUEL 2681092 CT1YTB Manuela 2681093 CT5KML Martins -2681094 CT5ISI CT5ISI +2681094 CT5ISI Helder 2681095 CS7ASC Vinhas 2681096 CT1DWT Valente 2681097 CT2HKN Miguel 2681098 CT2HBL Julio 2681099 CT2HOM Alberto -2681100 CT2HKF CT2HKF +2681100 CT2HKF Pedro 2681101 CT1EFD Mauricio 2681102 CT2HRU Vasco 2681103 CT2IKJ Moreira 2681104 CT2JWD Moura -2681105 CR7AQP Luis +2681105 CS7AQP Luis 2681106 CT5JTA Dias 2681107 CT5ILC Ribeiro 2681108 CT2JNF Moreira @@ -52521,20 +63141,58 @@ 2681111 CT1EYN Jose 2681112 CT2IOS Carlos 2681113 CT1EBA Rodrigues -2681114 CS7ANU Antonio +2681114 CT1AYI Gaspar 2681115 CT2JNG Espirito 2681116 CT2JNT Jose 2681117 CT2ICD Rui 2681118 CT1FDJ Antonio 2681119 CT2IER Sousa -2681120 CS7ALW Rui +2681120 CT7ALW Rui 2681121 CR7ATH Ricardo 2681122 CT1DTW Antonio 2681123 CT2IGB Nuno 2681124 CT5JXF Rui 2681125 CT2FVM Carlos 2681126 CR7ATK Vitor -2682001 CS7ACF Nuno +2681127 CT5JZW Nuno +2681128 CT2IJT Nascimento +2681129 CT2HXO Jorge +2681130 CT2JJH Jorge +2681131 CS7AOS Mano +2681132 CT2IYM Lourenco +2681133 CT2JID Nuno +2681134 CT2HUI Pires +2681135 CT5HLM DIAS +2681136 CT1EGQ Jose +2681137 CT2HSQ Filipe +2681138 CT5HUB Paulo +2681139 CR7AUC Jose +2681140 CR7AUI Marcelo +2681141 CT2KCW Silva +2681142 CT1GYD Victor +2681143 CT2JVP Avelino +2681144 CS7AUW Nuno +2681145 CT7AIN RAUL +2681146 CT7ANA Helder +2681147 CT1FEG Armando +2681148 CT4UC Paulino +2681149 CR7AUL Pedro +2681150 CR7ATO JORGE +2681151 CT1FIY Antonio_SILVA +2681152 CT1EQO Carlos +2681153 CT2ILI Abilio_Cunha +2681154 CR7ASF Joaquim_Lobo +2681155 CT2IOJ Joao_Pinho +2681156 CT7AOS Ze +2681157 CT2DJM Fernando_Caldeira +2681158 CT2IWV Pedro_Graca +2681159 CR7ASM Rui +2681160 CT7ANU Jose +2681161 CT2GXK JOSE +2681162 CT2ILD Fernando +2681163 CT2GHC Luis +2681164 CT1BXX Pereira +2682001 CT7ACF Nuno 2682002 CT1BAT Jose 2682003 CT2JWV Carlos 2682004 CT2IUB Miguel @@ -52549,7 +63207,7 @@ 2682013 CT2GUO Jose 2682014 CT2HLI Eduardo 2682015 CT2HJR Jos -2682016 CT1DHM CT1DHM +2682016 CT1DHM Jose 2682017 CT1HSN Carlos 2682018 CT1ESJ Henrique 2682019 CT2CRZ Marques @@ -52559,14 +63217,14 @@ 2682023 CT5KHO Letinha 2682024 CT7ABA Frederico 2682025 CS7AJB Julio -2682026 CT1FTU Jota +2682026 CT1FTU Joaquim 2682027 CS7ACD Paulo 2682028 CT5YWF Graca 2682029 CS5GCB ARRLX -2682030 CS7ABH CS7ABH +2682030 CS7ABH Amilcar 2682031 CT2JAY Paulo 2682032 CT7AHG Nuno -2682033 CT1EBN Jose +2682033 CT1EBN Montenegro 2682034 CT1XC Carlos 2682035 CS7ALP Jose 2682036 CT2IGZ Jorge @@ -52577,7 +63235,7 @@ 2682041 CS7ALP Jose 2682042 CT2GCO Antonio 2682043 CT1EFR Guapo -2682044 CT1AFS Victor +2682044 CT1AFS Victor_Oliveira 2682045 CT1BCP Jose 2682046 CT2HTY Jose 2682047 CT1EGJ Kostas @@ -52611,7 +63269,7 @@ 2682075 CT7ANZ Rogerio 2682076 CT1ZR Alvaro 2682077 CT2JUO Luis -2682078 CR7APZ Braulio +2682078 CS7APZ Braulio 2682079 CT1AFS Vitor 2682080 CT2DJK Joao 2682081 CT2GKD Caldeira @@ -52624,15 +63282,15 @@ 2682088 CT7AOJ Antonio 2682089 CR7AOL Joao 2682090 CS7AKG Diogo -2682091 CT2HJI Carlos -2682092 CT2GXZ Dleitao -2682093 CT2HYA Joao +2682091 CT2HJI Carlos_Pereira +2682092 CR7AUN AMARO +2682093 CT2HYA Joao_Melo 2682094 CT2IGQ Pedro 2682095 CT1EWA Paulo 2682096 CT1DFJ Neto 2682097 CT1ALP Carlos 2682098 CT5JUD Paulo -2682099 CT1CKL CT1CKL-Carlos +2682099 CT1CKL Carlos 2682100 CT5KDI Ferreira 2682101 CT2JUF Joao 2682102 CS7ALM Fijorel @@ -52650,7 +63308,7 @@ 2682114 CT1FYW Pedro 2682115 CR7ANJ Diogo 2682116 CT1BYQ Bartolo -2682117 CS7ANE Nelsonlevita +2682117 CT7ANE Nelsonlevita 2682118 CT2KBM Pimenta 2682119 CR7ARN Rui 2682120 CS7ALY Joao @@ -52671,7 +63329,7 @@ 2682135 CT1HSO Luis 2682136 CT1EIS Vicente 2682137 CT5GAD Luis -2682138 CR7ARA CR7ARA +2682138 CR7ARA Nuno 2682139 CT2GXE Xavi 2682140 CT2IMP Costa 2682141 CT2IQJ Rodrigo @@ -52707,13 +63365,56 @@ 2682171 CT2IVC Jorge 2682172 CT7ALM Filipe 2682173 CT2JIP Orlando +2682174 CT1FOQ Rodrigo +2682175 CR7ATN Antonio +2682176 CT2JUN JOSE +2682177 CT2GOS Fernando +2682178 CT1EPO Luis +2682179 CS7ANW Estrada +2682180 CT2JSB Rui +2682181 CR7ASL Nuno +2682182 CT2IRU Antonio +2682183 CT1DSJ JOSE +2682184 CT1RG VENEZA +2682185 CT1FLW VICTOR +2682186 CT2GBM Jose +2682187 CT1ESY Joaquim +2682188 CT1PP Arlindo +2682189 CR7AUO SANTOS +2682190 CT2IGF Antonio +2682191 CT1APV Joao +2682192 CR7ASO Rui +2682193 CT5JST Hugo +2682194 CT2CGY JOSE +2682195 CS5ICB LSF +2682196 CT2JVW Jose +2682197 CR7AUV Carlos +2682198 CR7AUR Jose +2682199 CT2IOP Jose +2682200 CT1EAN Jose +2682201 CT1EPJ Carlos +2682202 CT1DHR Antonio +2682203 CT1FHF ARMANDO +2682204 CT2JWF Paulo +2682205 CT7ASX GEORGES +2682206 CT2JAH Jose_Marques +2682207 CT1EKA Carlos +2682208 CT2JKR Pedro +2682209 CT5JDO Luis_Oliveira +2682210 CT5HHQ Claudia_Santos +2682211 CT2HWB Mario +2682212 CT5KBW ROMAO +2682213 CT1EOK Paulo +2682214 CT2FQA Waldemar +2682215 CT1ASP Henrique +2682216 CT2GNS Caetano 2683001 CT1HDC Paulo 2683002 CT4GV Luis 2683003 CS7AFO Hugo 2683004 CT2JPJ Carlos 2683005 CS7AFT Luis 2683006 CT4UZ Jose -2683007 CT1JIB Jorge +2683007 CT1JIB Jorge_Santos 2683008 CT2KEV Luis 2683009 CT1DYK Joao 2683010 CT2JTR Pedro @@ -52739,7 +63440,7 @@ 2683030 CT1BPI Antonio 2683031 CT2ICQ Andre 2683032 CT1CEM Carlos -2683033 CR7AJF Jose +2683033 CT1FBZ Manuel 2683034 CS7AFY Paulo 2683035 CT1EBM Miguel 2683036 CT1JQJ Nuno @@ -52765,7 +63466,7 @@ 2683056 CT7AGR Paulus 2683057 CT1GZB Jose 2683058 CT1DYH Carlos -2683059 CT5JLD Mnica +2683059 CT5JLD Monica 2683060 CT1JZM Hansi 2683061 CT2IUL Daniel 2683062 CS7AGH Paulo @@ -52775,26 +63476,26 @@ 2683066 CT1ETG Fernando 2683067 CT1FHW Jose 2683068 CT1AIC Rui -2683069 CT2EEW Eduardo +2683069 CT7ASY Eduardo 2683070 CT1FNG Victor 2683071 CT2KEV Luis -2683072 CT2JUS Sequeira +2683072 CT2JUS Antonio_Ica 2683073 CT1DDN Luis -2683074 CT1JIB Jorge +2683074 CT1JIB Jorge_Santos 2683075 CT1CEH Crespo 2683076 CT2FZI Luis -2683077 CT1EUW Rcoias +2683077 CT1EUW Ricardo_Coias 2683078 CT1CPK Carolino 2683079 CT1EDP Cardoso 2683080 CT1ERW Antonio -2683081 CT1FBF CT1FBF +2683081 CT1FBF Joao 2683082 CT5KAT Joao 2683083 CT2IXQ CARLOS 2683084 CT2GQI Goncalo 2683085 CT2GAI FERNANDO 2683086 CT7ABP PAMRIBEIRO 2683087 CT4NE Figueiredo -2683088 CS7AJF Jose +2683088 CT2HAO MiguelAngelo 2683089 CT1ETV Marques 2683090 CS7AFY Paulo 2683091 CT1CFU Manuel @@ -52872,7 +63573,7 @@ 2683163 CT2HBZ Jorge 2683164 CT5GJH Jose 2683165 CT1AWR Manuel -2683166 CT1EBZ Jouo +2683166 CT1EBZ Saraiva 2683167 CT1FW Manuel 2683168 CT5IPX Bruno 2683169 CT2IQE Rui @@ -52882,12 +63583,12 @@ 2683173 CT1HDC Paulo 2683174 CT1ELH Carlos 2683175 CT5KJC Bruno -2683176 CT2FXW Carlos +2683176 CT2FXW Machado 2683177 CS7AHY Eurico 2683178 CT2HUN Cartaxo 2683179 CT1FNV Antonio 2683180 CT2JDC Armenio -2683181 CR7APN Andre +2683181 CS7APN Andre 2683182 CT1DOV Joao 2683183 CT5JWI Ricardo 2683184 CT2JYG Nuno @@ -52895,7 +63596,7 @@ 2683186 CT1YSZ Angela 2683187 CT1FGD Jose 2683188 CT1CGO Americo -2683189 CT5GMU Paulo +2683189 CT5GMU PAULO 2683190 CT5JCA Bruno 2683191 CT7AFO Hugo 2683192 CT1EWT Manuel @@ -52905,35 +63606,35 @@ 2683196 CT2HRB Miguel 2683197 CT7AGI Jorge 2683198 CR7AOA Rui -2683199 CR7AQR Andre +2683199 CS7AQR Andre 2683200 CT1AKJ Joaquim 2683201 CT2HPS Joao -2683202 CT2HQV Conguito +2683202 CT2HQV Pedro 2683203 CT7AHV Pedro -2683204 CT1VZ Victor +2683204 CT1VZ Victor_Afonso 2683205 CT1EC Antonio 2683206 CT1BM Oliveira 2683207 CT1DYE Carlos 2683208 CT5KJX CT5KJX -2683209 CR7AQW Joao +2683209 CS7AQW Joao 2683210 CS7AGH Paulo 2683211 CT2KDX Amarino 2683212 CT7AJF Jose 2683213 CR7AMO Nelson 2683214 CT5HPY Jose 2683215 CT5HQN Jose -2683216 CR7AQB Pedro +2683216 CS7AQB Pedro 2683217 CT1EFI Couto 2683218 CS7ALC Paulo 2683219 CT2KJV Jose -2683220 CT2IZS Jose +2683220 CT2IZS Jose_Manuel 2683221 CT7ACM Paulo 2683222 CT1AVC Valentim 2683223 CT4JQ Cesar -2683224 CT2IMQ JP +2683224 CT2IMQ JP_Xina 2683225 CT1FKH Luis 2683226 CT5GHU Antonio -2683227 CT2GVH Pedrobatista +2683227 CT2GVH Pedro 2683228 CT1COM Luis 2683229 CT1CGJ JoaoF 2683230 CT2FZJ Joao @@ -52942,7 +63643,7 @@ 2683233 CT2JIU Helder 2683234 CT1EJC Acacio 2683235 CT2JMP Paulo -2683236 CT1ENL CT1ENL +2683236 CT1ENL Ricardo 2683237 CT2JCB MarcoSilva 2683238 CT1FVW Adilio 2683239 CT7ARG Eric @@ -52981,13 +63682,13 @@ 2683272 CT1EWE Dario 2683273 CS7AKZ Ricardo 2683274 CT2KEA Henrique -2683275 CR7ARF Antonio +2683275 CS7ARF Antonio 2683276 CT1XV Jorge 2683277 CT1EEG Luis 2683278 CT1ETM Pedro 2683279 CT1AJU Carlos 2683280 CT1FTC Jose -2683281 CT1DBS Pedro +2683281 CT7ABU Joao 2683282 CT2IPL Rui 2683283 CR7ATL Gustavo 2683284 CT7ABE Joao @@ -52997,9 +63698,70 @@ 2683288 CT1EQM Jose 2683289 CT5JAQ Jorge 2683290 CT1FPV Joao +2683291 CT2HQY MARIO +2683292 CS7APH Jose +2683293 CT2HEC Vitor +2683294 CR7AUB Nelson +2683295 CT2GVG NELSON +2683296 CT1ELH Carlos +2683297 CT1BIO Tavares +2683298 CT1CHZ Luis +2683299 CT2GXB Fernando +2683300 CT2IIQ PAULO +2683301 CT2HUZ Acacio +2683302 CT5KDW Lilia +2683303 CT5JRK Nuno_Mendes +2683304 CT1BGZ Paulo +2683305 CT2GAI FERNANDO +2683306 CT1OY Vasco +2683307 CR7AQG Rui +2683308 CT5HLE Mendonca +2683309 CT5IKE Bruno +2683310 CT1ZX RUI +2683311 CT1FGK Jose +2683312 CR7AQZ Rui +2683313 CT1FCI Paulo +2683314 CR7ATJ Esteves +2683315 CT1CSP Luis +2683316 CT2HLH Pereiro +2683317 CR7AMI Antonio +2683318 CT1YRA Manuela +2683319 CT1EWL Antonio +2683320 CT1DVU Agnelo +2683321 CS7AKX Sofia +2683322 CR7AUX Miguel +2683323 CT1DGC Arnaldo +2683324 CT5KGF CT5KGF +2683325 CT2GXZ Daniel +2683326 CT1AXZ Manuel +2683327 CT1FMU Jaime +2683328 CT1EIZ Duarte +2683329 CT5GMU Paulo +2683330 CT1JRZ Victor +2683331 CT1WO Victor +2683332 CT2JUU Carlos +2683333 CT1CBC Jose +2683334 CT1EVZ Jose +2683335 CT1EBQ Ricardo_Oitaven +2683336 CT1DYL Sergio +2683337 CR7AVG Vasco +2683338 CT1FIN Joao +2683339 CT1ESM NUNO +2683340 CR7AVI Jose +2683341 CT7AKW Jorge +2683342 CT1DZ Fernando_Dinis +2683343 CT2FDC Jose_Silva +2683344 CT5KJX Sergio +2683345 CT1EWC Joao +2683346 CR7AVZ Pedro_David +2683347 CT7AFU Jorge_Nuno +2683348 CT2HCQ Tiago +2683349 CT4EU JCorreia +2683352 CT1ISH Henrique +2683354 CR7AWF Hugo_Franco 2684001 CT2BXN Jose 2684002 CT2BXN Jose -2684003 CT1DUM Carlos +2684003 CT1DUM Carlos_Moreira 2684004 CS7AMN Bruno 2684005 CT1DUM Carlos 2684006 CT2HBO Paulo @@ -53049,6 +63811,14 @@ 2684050 CT5KEK Francisco 2684051 CT2JBA Mario 2684052 CT1CPP Duarte +2684053 CT7AUQ Armando +2684054 CS5ISW Paulo +2684055 CT1BQN Manuel +2684056 CS7AIA Nuno +2684057 CT1FEP Sardinha +2684058 CR7ANF Beguilhas +2684059 CT2HFD Jose_Costa +2684060 CT2JFJ Diniz 2685001 CT1EXR Jorge 2685002 CT1FGR Fernando 2685003 CT2IHP Rui @@ -53078,6 +63848,25 @@ 2685027 CT4QB JULIO 2685028 CT2JRC Paulo 2685029 CS7AOP Fred +2685030 CT2ECS Miguel +2685031 CT2KBS Bruno +2685032 CT2KBT Dario +2685033 CT1CAG ArturMartins +2685034 CT1EDK Angelo +2685035 CR7AUJ Sandro +2685036 CT1FOE Jose +2685037 CT1DRU Victor +2685038 CT5GTL Jose +2685039 CT2JBK Luis +2685040 CT1FNT Jose +2685041 CT5KJE Luis +2685042 CT2JBF Antonio +2685043 CT1BBU Miguel +2685044 CT1DUS Miguel +2685045 CT1EUI Marco +2685046 CT1ASU Martins +2685047 CR7AVR Joao_Gregorio +2685048 CT1EHO PAULO 2686001 CU2GI Paulo 2686002 CU1UZ Jose 2686003 CU3AT Gerardo @@ -53116,15 +63905,39 @@ 2686036 CU7BC Marco 2686037 CU7AO Victor 2686038 CU2CO Paulo +2686039 CU7BZ Rui +2686040 CU7CL Marco +2686041 CU2IF G.Frias +2686042 CU7AA ALTINO +2686043 CU7AAR Fernando +2686044 CS8ABQ JOSE +2686045 CU7AZ Antonio +2686046 CU0AFT Luis +2686047 CU2ZG Pedro +2686048 CU7AJ Mario +2686049 CU2HO Sousa +2686050 CU3FB Francisco +2686051 CU7BL MARIO +2686052 CU3HY Mike +2686053 CU5AAC Borba +2686054 CU3FT Carlos +2686055 CU1AAH Ricardo +2686056 CU3AU Francisco +2686057 CU2KL Goncalo +2686058 CU0AKA Angelica_Andrade +2686059 CU3ABS CARLOS 2687001 CT3PE Jorge 2687002 CT3FG Tomas +2687003 CT3KP Jose +2687004 CT3BY Brito +2687005 CR9ABS RUI 2701001 LX1CK Christian 2701002 LX2KA Arsne 2701003 LX1SC Claude 2701004 LX1A Louis 2701005 LX1EA Ed 2701006 LX3PR Patrick -2701007 LX9LTE Lycee-Technique-Esch +2701007 LX9LTE Lycee 2701008 LX1LB Roger 2701009 LX9AK ADRAD-Kyldall 2701010 LX1AV Jean @@ -53206,7 +64019,7 @@ 2701086 LX1TI Carlo 2701087 LX2RS Rogerio 2701088 LX1S Steve -2701089 LX6MST Michel +2701089 LX3MST Michel 2701090 LX6MIKE Mike 2701091 LX1GE Georges 2701092 LX6DR Alban @@ -53261,6 +64074,27 @@ 2701141 LX1BS Bob 2701142 LX1DCJ Tom 2701143 LX9S Mich +2701144 LX0PRR ADRAD +2701145 LX1RR Ray +2701146 LX1JH JEAN-MARIE +2701147 LX2OT Tobias +2701148 LX3BS Bob +2701149 LX1HM Mars +2701150 LX1MXK Max +2701151 LX1RB Romain +2701152 LX2RC Christian +2701153 LX6JF Jessica +2701154 LX6LH Laurent +2701155 LX1FP Paulo +2701156 LX6ATO Jorge +2701157 LX1QA Louis +2701158 LX6ATO JORGE +2701159 LX3FL Francesco +2701160 LX2RH Ray +2701161 LX1JU Dan +2701162 LX1TA Tania +2701163 LX1OK Guy +2701164 LX9LBV Romain 2720001 EI4EW William 2720002 EI8JE Richard 2720003 EI2ET Manfred @@ -53349,7 +64183,7 @@ 2720087 EI4KN Ronan 2720088 EI5HPB Cassiano 2720089 EI9GGB EI9GGB -2720090 EI5GOB EI5GOB +2720090 EI7GCB JENNIFER 2720091 EI7HZB Wilfried 2720092 EI7FYB DAVI 2720093 EI7GMB Artut @@ -53397,11 +64231,56 @@ 2720135 EI5GHB John 2720136 EI6JZ Daithig 2720137 EI4HJB Rudie +2720138 EI3ECB David +2720139 EI2HWB Andy +2720140 EI9HQB Paul +2720141 EI2HG DAMIAN +2720142 EI8IU Brian +2720143 EI8HJ RCoyne +2720144 EI5KO Keith +2720145 EI6HIB Niall +2720146 EI8GGB Andy +2720147 EI2ICB Johnny +2720148 EI5GLB Victor +2720149 EI6GYB Damien +2720150 EI0EC EI0EC +2720151 EI0NC EI0NC +2720152 EI0AC EI0AC +2720153 EI8DY Joe +2720154 EI2ILB Tom +2720155 EI7CLB Tryg +2720156 EI5GT Des +2720157 EI4GGB Owen +2720158 EI3HLB Barry +2720159 EI2II Enda +2720160 EI2HZB Sean +2720161 EI7DGB Stan +2720162 EI5GMB Enda +2720163 EI0IPN IECRO +2720164 EI2IXB Robbie +2720165 EI5IN Keith +2720166 EI5HZB Mike +2720167 EI4JN Conor +2720168 EI3KU Ken +2720169 EI6FE PaulK +2720170 EJ5DD Steve +2720171 EI9KT Francis +2720172 EI8IF Mike +2720173 EI9JX ARNIE +2720174 EI3ER Tom 2740001 TF3PKN Pier 2740002 TF8KP Kristof 2740003 TF8KP Kristof 2740004 TF3POL Sebastian 2740005 TF3POL Sebastian +2740006 TF8BK Hans +2740007 TF3EY Erik +2740008 TF3AO Seli +2740009 TF3JB Jonas +2740010 TF3VG Valtyr +2740011 TF3NH Njall +2740012 TF1A Ari +2740013 TF2EQ Elin 2780001 9H1US Antoine 2780002 9H1DH Herbert 2780003 9H1DH Herbert @@ -53428,6 +64307,15 @@ 2780024 9H1MF Mikefox 2780025 9H3GC Geoff 2780026 9H1JL Joe +2780027 9H9SGM Joe +2780028 9H1J Johanna +2780029 9H1SM Steve +2780030 9H1UG RogerDB +2780031 9H1YP Joe +2780032 9H1SR ELISIR +2780033 9H1MD 9h1md +2780035 9H3EN Nik +2780036 9H5TB Ray 2800001 5B4AMD George 2800002 5B4JY Haris 2800003 5B4AMT Ian @@ -53441,7 +64329,7 @@ 2800011 5B8BE Marios 2800012 5B4ZN Philip 2800013 5B4ALS Demetris -2800014 5B4ALC Andreas +2800014 5B4AOL Vassilis 2800015 5B4ANH Nikos 2800016 5B4DV MIKE 2800017 5B4ALL NICOLAI @@ -53459,14 +64347,14 @@ 2800029 5B4AHW Brian42 2800030 5B4PRC PAPHOS 2800031 5B4AAB JOHN -2800032 5B4AMQ Koupepias +2800032 5B4AMQ Georgios 2800033 5B4ANI Stig 2800034 5B4AMR John 2800035 5B4ANL Paschalis 2800036 5B4ANJ Antony 2800037 5B4AIH David 2800038 5B4ALX Alex -2800039 5B4ALC Andreas +2800039 5B4AOL Vassilis 2800040 5B4AMX Andy 2800041 5B4AKV Alex 2800042 5B4AMU ILYA @@ -53475,11 +64363,25 @@ 2800045 5B4ALR Stelios 2800046 5B4AOD Craig 2800047 5B4AOB David +2800048 5B4AIK Mike +2800049 5B4ALC Andreas +2800050 5B4AHO Baz +2800051 5B4AOM GIANNIS +2800052 5B4AJO Panos +2800053 5B4MD George +2800054 5B4PY Paylos +2800055 5B4AOS Martin +2800056 5B4UZ Sarkis +2800057 5B4GGA GirlGuidesCY +2800058 5B4CSA CYScouts 2820001 4L2M Mamuka 2820002 4L7KA 4L7KA 2820003 4L4GB Givi 2820004 4L9PL Dariusz 2820005 4L1BB 4L1BB +2820006 4L1FH Aleko +2830001 EK6OLM Mher +2830002 EK1RR HAYK 2840001 LZ1PVP Pavel 2840002 LZ1AA Nasko 2840003 LZ3SP Stanimir @@ -53495,7 +64397,7 @@ 2840013 LZ1LZW Stoian 2840014 LZ1WWC Georgi 2840015 LZ1YKD Yanko -2840016 LZ1MVR Nikolai +2840016 LZ1MVR Koko 2840017 LZ2ZIN Kalin 2840018 LZ1MUK Katerina 2840019 LZ2XA Valyo @@ -53539,7 +64441,7 @@ 2840059 LZ1CWK Valcho 2840060 LZ2MAT Mariyan 2840061 LZ1LR Lussy -2840062 LZ1LCD LZ1LCD +2840062 LZ1LCD Tsvetomir 2840063 LZ2HPC Stanislav 2840064 LZ1DGM Mitko 2840065 LZ1CLD Dimitar @@ -53617,7 +64519,7 @@ 2840137 LZ1KSP LZ1KSP 2840138 LZ1GRD LZ1GRD 2840139 LZ1QF Lz1qf -2840140 LZ1STA LZ1STA +2840140 LZ1STA Ivan 2840141 LZ7KR KaRaRa 2840142 LZ5PN LZ5PN 2840143 LZ0SVV LZ3SV @@ -53640,7 +64542,7 @@ 2840160 LZ1NSO Lz1nso 2840161 LZ1LST StanSlav 2840162 LZ1BOR Bobi -2840163 LZ1MSO Misho +2840163 LZ5KM Misho 2840164 LZ1GXG Joro 2840165 LZ1EVP Eugeni 2840166 LZ1BAY Wesko @@ -53690,6 +64592,7 @@ 2840210 LZ1LFC Kuncavia 2840211 LZ1GRR JoRJo 2840212 LZ1RPG Yordan +2840213 LZ3JY Snagles 2840214 LZ3TX Pepi 2840215 LZ5WT Vesi 2840216 LZ1ETE Todor @@ -53699,9 +64602,114 @@ 2840220 LZ1NKF LUCA 2840221 LZ5DQ Lz5dq 2840222 LZ2KAC LZ2KAC +2840223 LZ2KN Kalin 2840224 LZ3DJ Dino 2840225 LZ2CRA Krasimir -2860001 TA2AWV Mirac +2840226 LZ1RSM Rumen +2840227 LZ1AMA Milen +2840228 LZ2TWY Teodosi/Teo/ +2840229 LZ1DPZ Nikolov +2840230 LZ2XPP Petrov +2840231 LZ2EPN Nedelcheva +2840232 LZ2DJT DJTisho +2840233 LZ1BAB Gyunay +2840234 LZ2GOD Doni +2840235 LZ5AD Toni +2840236 LZ1DED Dobri +2840237 LZ1NBC LZ1NBC +2840238 LZ1ACR LZ1ACR +2840239 LZ1SMN Snedelchev +2840240 LZ2DZZ Danail +2840241 LZ2ZAX Atanasov +2840242 LZ1OPS Mihail +2840243 LZ3VG LZ3VG +2840244 LZ1RBC Georgiev +2840245 LZ1GPT George +2840246 LZ4YJ Rosen +2840247 LZ2DVB Georgiev +2840248 LZ5TC Todor +2840249 LZ1GKD Denis +2840250 LZ1PRS Ivo +2840251 LZ1III LZ1III +2840252 LZ2VAS LZ2VAS +2840253 LZ2SAT LZ2SAT +2840254 LZ1OMG Milen +2840255 LZ2NET Martin +2840256 LZ1MNT Mitko +2840257 LZ4ZD Zlati +2840258 LZ1SAO Sao +2840259 LZ2DET LZ2DET +2840260 LZ2GKA Georgi +2840261 LZ2PMI Plamen +2840262 LZ5RG LZ5RG +2840263 LZ1BOR Borislav +2840264 LZ1NEY MIHOV +2840265 LZ2KSC LZ2KSC +2840266 LZ2ILS Iliyan +2840267 LZ2NKN Krasimir +2840269 LZ1VGT Ventsislav +2840270 LZ1LGG Lachezar +2840272 LZ1BBA Boyan +2840273 LZ1ROM Alex +2840274 LZ5PV Mario +2840275 LZ1GDO Miro +2840276 LZ1RTI Ivishev +2840277 LZ2WG Drago +2840278 LZ1INP Nikivpan +2840279 LZ1JUJ Juji +2840280 LZ1VVM Madi +2840281 LZ1VRI V.Ivanov +2840282 LZ2NSO LZ2NSO +2840283 LZ5VZ Miro +2840284 LZ1LSD LZ1LSD +2840285 LZ5JG LZ5JG +2840286 LZ1EXE Paco +2840287 LZ1MEN PenkoRoussev +2840288 LZ1VPT Vasil +2840289 LZ1VID LZ1VID +2840290 LZ1PDI LZ1PDI +2840291 LZ1ZOL Chervenkova +2840292 LZ1LAG Ivan +2840293 LZ1DOR EDoor +2840294 LZ1VOX LZ1VOX +2840295 LZ2DTA Mitko +2840296 LZ1ROB LZ1ROB +2840297 LZ1BKW LZ1BKW +2840298 LZ2JBL LZ2JBL +2840299 LZ2HT LZ2HT +2840300 LZ1MIA Lily +2840301 LZ2ENF Enchev +2840302 LZ7IK IV-an +2840303 LZ3OL Chavo +2840304 LZ2OPC Fifi +2840305 LZ1SDV STANISLAV +2840306 LZ1ASZ Alex +2840307 LZ1MW Lory +2840308 LZ2GGF LZ2GGF +2840309 LZ1LPK Chicholyubo +2840310 LZ1BOA Fill +2840311 LZ4LA IVAN +2840312 LZ1BNN Bozhidar +2840313 LZ2BBA Borislav +2840314 LZ1TX DELEGATA +2840315 LZ2DHK Dancho +2840316 LZ1GBB LZ1GBB +2840317 LZ2AO Ogi +2840318 LZ1ALG Aleks +2840319 LZ1BR Vanesa +2840320 LZ1WML Makia +2840321 LZ5CT SASHKO +2840322 LZ1HKH Kiril +2840323 LZ1GPT George +2840325 LZ1KM XpucTo +2840326 LZ5SF Misho +2840327 LZ1EDU LZ1EDU +2840328 LZ1FOG Christian +2840329 LZ1GSB Georgi +2840330 LZ1PZA LZ1PZA +2840331 LZ3JG TONY +2840333 LZ1RTX Ivan +2860001 TA6TC Mirac 2860002 TA5ACC Cihan 2860003 TA2UKC Cem 2860004 TA2LLS Seyit @@ -53730,10 +64738,10 @@ 2860027 TA1RM Recep 2860028 TA1OKS Sevan 2860029 TA1IG Ilker -2860030 TA1ICU TA1ICU +2860030 TA1KC Can 2860031 TA1DE TA1DE 2860032 TB1BTC TB1BTC -2860033 TA1BZ Ta1bz +2860033 TA2BZ Ta1bz 2860034 TA2DJ Erhan 2860035 TB1HEC Emrahcankir 2860036 TA2RA TA2RA @@ -53768,9 +64776,9 @@ 2860065 TB2DEC TB2DEC 2860066 TA1ILE TA1ILE 2860067 TA1OSR Serede -2860068 TB1DAC Alperencavuslu +2860068 TA1NAC Alperencavuslu 2860069 TA1ASH Sertac -2860070 TA3ABG Ta3abg +2860070 TA3MD Bilgehan 2860071 TA1IEM TA1IEM 2860072 TB1DUA Umit 2860073 TA1LBU Sky @@ -53822,7 +64830,7 @@ 2860119 TA2IUA Ugur 2860120 TA2LGU Halil 2860121 TA1NGA Guencue -2860122 TA1AIY Inan +2860122 TA1RJ Inan 2860123 TA2LJA Ayla 2860124 TA2LTM Tamer 2860125 TA4ZN Robert @@ -53854,7 +64862,7 @@ 2860151 TB5GAB Abdurrahman 2860152 TB2FCG Cem 2860153 TA2MXL Saim -2860154 TA6AOZ Ozan +2860154 TA6OS Ozan 2860155 TA2UUK Tolga 2860156 TA8OEK Enes 2860157 TA5CO Orcun @@ -53939,16 +64947,16 @@ 2860236 TB2DXI Cem 2860237 TB5BTD Turgay 2860238 TA2LEH Emrecanhardal -2860239 TA2IIU Ismail +2860239 TA2KJ Ismail 2860240 TB4DXU Semih 2860241 TA2ILN Ismet 2860242 TA2NAW Alfonso73 -2860243 TA4NZT TA4NZT +2860243 TA4NZT Nevzat 2860244 TA8OMR Omer 2860245 TA3ALU Oktay 2860246 TA3MEK MacTrix 2860247 TA8ABF Fatih -2860248 TA3OAT Bahattin +2860248 TA3AM Bahattin 2860249 TB2BIH Ismail 2860250 TA5GE TA5GE 2860251 TA2IIB Ismail @@ -54001,7 +65009,7 @@ 2860298 TA0E Mustafa 2860299 TA1LAH Yucel 2860300 TA1IDE Dogukan -2860301 TA2LUE Scout06 +2860301 TA2LUE Erol 2860302 TB5PHT Halil 2860303 TA2ME Ali 2860304 TA1EC Ari @@ -54068,7 +65076,7 @@ 2860365 TA1EE TA1EE 2860366 TA2UD Halil 2860367 TA3APB Baretta -2860368 TB3TOJ Onur +2860368 TA3OWL Onur 2860369 TA1E Aziz 2860370 TA2IJ Soyhan 2860371 TB2NEI Erinc @@ -54082,10 +65090,10 @@ 2860379 TB5BMK Muhittin 2860380 TA5ACU Ufuk 2860381 TA5AHO Hamit -2860382 TB7BHB Tb7bhb +2860382 TB7BHB Hikmet 2860383 TA1KA Braveheart59 2860384 TA4AYA Ta4aya -2860385 TA1AYW Yenersoganci +2860385 TA1SA Yenersoganci 2860386 TA3NHI Ibrahim 2860387 TB2BUQ Mahmut 2860388 TA0T Huseyin @@ -54094,6 +65102,7 @@ 2860391 TA2AAK Atasoyk 2860392 TA1ADI Deniz 2860393 TB3GEG Unal +2860394 TA2B Bulent 2860395 TA3CD TA3CD 2860396 TA8ORY TA8ORY 2860397 TA3OZX Koray @@ -54109,6 +65118,7 @@ 2860407 TA2SD Hakan 2860408 TA0ACL Zeynel 2860409 TA2NL TA2NL +2860410 TA4AAQ Abdulmuttalip 2860411 TA2AQQ Temel 2860412 TA8IAT Ademtirpanci 2860413 TA1ET Ertugrul @@ -54120,9 +65130,9 @@ 2860419 TA2IKD Ayhan 2860420 TA1LSX Snowist 2860421 TA1LEA NBB -2860422 TB6DEJ TB6DEJ +2860422 TA6AEU Emre 2860423 TA1ALL Hakan -2860424 TB2HFZ Yucel +2860424 TA2UIL Yucel 2860425 TB2DUS Selimt 2860426 TA3AKP Ayhan 2860427 TB5DBO Bulent @@ -54134,16 +65144,21 @@ 2860433 TA5IAI Baris 2860434 TA2LQ Cihat 2860435 TA1IJN Ataberkesenturk +2860436 TA1OIL Ozgur 2860437 TA3AVC Alperen 2860438 TA3OTT Tayfun 2860439 TA3UTR Ugur 2860440 TA1LY Mehmet -2860441 TB5HSN Hasan42 +2860441 TA5NHK TA5NHK 2860442 TA3ATS Serkan +2860443 TB4BHX Cafer +2860444 TA4B Selim 2860445 TB2GAS Ahmet 2860446 TA2MIB Ata 2860447 TA2IEP TA2IEP 2860448 YM2KI YM2KI +2860449 TA4E Muhsin +2860450 TA4EI Ismail 2860451 TA2ABE Burak 2860452 TA2LTO TA2LTO 2860453 TA2MJX Cagdas @@ -54162,6 +65177,7 @@ 2860466 TA2AUP Umut 2860467 TB3CFY Fehmi 2860468 TB3PGK Gorkem +2860469 TA4AJT Tamer 2860470 TA4IHE Husnu 2860471 TA3SA ALI 2860472 TA2OCD Cengiz @@ -54170,24 +65186,848 @@ 2860475 TB2BCE Can 2860476 TB2BHT Bahattin 2860477 TB3BLO Saban +2860478 TB3BKV Vedat 2860479 TB8CFR Ferit 2860480 TA3MRI MERT 2860481 TB7DMU Mehmet 2860482 TB4DCD Sevki +2860483 TA2GD Levent 2860484 TA8UGU Ugur 2860485 TA1AB Abdullah +2860486 TA1ASO Murat 2860487 TA4ICM Cuneyt +2860488 TB3DIS TB3DIS +2860489 TA3MAC TA3MAC +2860490 TA2IHH HakanHami +2860491 TA2OAO Ali +2860492 TB2HSI Sumer +2860493 TA1IHE TA1IHE +2860494 TB1DSS Serhat +2860495 TA2LVH Kahraman +2860496 TA4AYT Nedim +2860497 TA1AHZ Hozkanli +2860498 TA1OZK TA1OZK +2860499 TB2DUK Ugur +2860500 TA4AN Yusuf +2860501 TB4BAR Mehmet +2860502 TB1PYU Yildirim +2860503 TA1ASR Ta1asr +2860504 TB3DMN TB3DMN +2860505 TA4AGG TA4AGG +2860506 TA4ES Mustafa +2860507 TB4BIB Israfil +2860508 TB4DHU Huseyin +2860509 TB2DAT AlpIlter +2860510 TA2P Tunc +2860511 TA4IRM TA4IRM +2860512 TA2IXG Emrah +2860513 TA5DZ TA5DZ +2860514 TA8AIR Yunus +2860515 TB4AY Serhat +2860516 TA6N TA6N +2860517 TA2OE Ibrahim +2860518 TA3IKC Cem +2860519 TA1OFK Omer +2860520 TA3NHK Hayri +2860521 TA3UHK Hatice +2860522 TA7OSA TA7OSA +2860523 TA8NHA Huseyin +2860524 TA3LEJ Engintunabas +2860525 TA8ASN Hakan +2860526 TA8L Enver +2860527 TA4AO Mehmet +2860528 TA1AHE Eray +2860529 TA2VG Ferhat +2860530 TB2HAL Halil +2860531 TA2MLM Muslimbayrak +2860532 TB2BKC Cevat +2860533 TA3TU Baris +2860534 TB3FYT Yilmaz +2860535 YM2KW ANARAD +2860536 TB3DLJ Mehmet +2860537 TB2NIM Alaaddin +2860538 TA9AC Ali +2860539 TB4BD Ahmet +2860540 TA2LIW Karali +2860541 TB3FJ Serafettin +2860542 TA1AYZ Ali +2860543 TA2MDL Erol +2860544 TB4DLK DlkBlkn +2860545 TA1ISO Solcer +2860546 TA1LED Emre +2860547 TA2IGI GOGO +2860548 TA4ONE Mert +2860549 TB2DUS Selimt +2860550 TA5AEE Enver +2860551 TB5DEO Oguz +2860552 TB2FLO Teo +2860553 TA2NEK Erol +2860554 TA3MAT Murat +2860555 TA3ORN Orhan +2860556 TA3TS TA3TS +2860557 TA2IJA YunusTemel +2860558 TA1ATC TA1ATC +2860559 TB5DBO Bulent +2860560 TB4PHM Mehmet +2860561 TA1GR Mehmet +2860562 TB3MAN Ugur +2860563 TB3DML Tb3dml +2860564 TA2HF Safak +2860565 TA2LKJ Koray +2860566 TB3PJF Bayram +2860567 TB3DCR Remzi +2860568 TA4AJT TmrBlkn +2860569 TA2OOD Onur +2860570 TA2TX TA2TX +2860571 TA4AAQ Abdulmuttalip +2860572 TA4AYW TA4AYW +2860573 TA5AAL Altinediz +2860574 TB5CMJ Mehmet +2860575 TA5AYA Yavuz +2860576 TA2KY Erdal +2860577 TA6UMI uyorulmaz +2860578 TA2NVC Semistan +2860579 TA1OFK Ofkara +2860580 TA2URM rmz_krc +2860581 TA2UK Ercan +2860582 TA2ED Derya +2860583 TA1GS Burak +2860584 TA2ANA Nejat +2860585 TB1DOE Ozan +2860586 TA9ACO TA9ACO +2860587 TA3ASN S.aslan +2860588 TB9CTE Ercan +2860589 TB2BUB Ufuk +2860590 TA2NRN Murat +2860591 TA2EI Recep +2860592 TA2LKM TA2LKM_Murat +2860593 TA0AKP Mirsat +2860594 TB2MHW Aligul +2860595 TA6AYR Yasardic +2860596 TB3PGB Gurbuz +2860597 TB1BDL Tunca +2860598 TA9EG TA9EG +2860599 TB2BEG Erdinc +2860600 TB3HAI Ahmet +2860601 TA1AOR Ozcan +2860602 TA2FP Eren +2860603 TA2MOB Onur +2860604 TA4ATP Tayfun +2860605 TA1MUR Murat +2860606 TA4AUK UK +2860607 TA1DC Arman +2860608 TB2PTU Ayhan +2860609 TA4FA Abdullah +2860610 TA3BH Isa +2860611 TB2BPO Omer +2860612 TA3DO Sinan +2860613 TA1MEA Mehmet +2860614 TA6HA Hasan +2860615 TA2MXE Ender +2860616 TA1IEL Erol +2860617 TA4ATM Famo57 +2860618 TA4CO Ozcan +2860619 TA1MRG Murat +2860620 TA3OKM T.Okmen +2860621 TA2MFE Firat +2860622 TA6AMJ Mucahit +2860623 TA1O Serhat +2860624 TA4LYL Adam +2860625 TA2UMA TA2UMA +2860626 TA8IHJ Halil +2860627 TB2DEF Cem +2860628 TA1OYC YalcinCekic +2860629 TA8PMB Mesut +2860630 TA5MAK McanMak +2860631 TA1MUR Murat +2860632 TA3AAH Volkan +2860633 TA1IGY GokhanY +2860634 TA0ISK Sedat +2860635 TA5AYA Yavuz +2860636 TA7TC Faruk +2860637 TA3NLX Serkan +2860638 TA2NCT NKeseci +2860639 TA2LOI Avni +2860640 TA2MTM Murat +2860641 TA1MHB Ali +2860642 TB8GAA Abdullah +2860643 TA2MSC Mustafa +2860644 TA1FK TA1FK +2860645 TB2GMR Murat +2860646 TA2NLK Devrim +2860647 TB1HKY Hakan +2860648 TB2PBP Pusat +2860649 TA7ACB Engin +2860650 TA2OED Aedarcan +2860651 TB3HSY Huseyin +2860652 TB1PDT Deniz +2860653 TA3MYI Murat +2860654 TA1USA TA1USA +2860655 TA1LIE TA1LIE +2860656 TA1MKK Kenan +2860657 TB1HMZ H. +2860658 TA4ASG Zihnigonen +2860659 TA2LHV Barkin +2860660 TA5MRG MuratGul +2860661 TA1UCN Ahmet +2860662 TB2TCG Cem +2860663 TB5YNZ TB5YNZ +2860664 TA4MRH Emrah +2860665 TB5DKB Kadri +2860666 TA6OS Ozan +2860667 TA1SA Yener +2860668 TA2MEK Mehmet +2860669 TA2URU Kaan +2860670 TB2TFD TB2TFD +2860671 TA1OKH TA1OKH/Kenan +2860672 TB1TAN TB1TAN +2860673 TA2AXR Refik +2860674 TA4MMI TA4MMI +2860675 TB1BLB Tb1blb +2860676 TB1TYK Yurder +2860677 TA4NH Nurettin +2860678 TB3DZE Zeki +2860679 TA2ITL Faruk +2860680 TA2LEO Emrem +2860681 TA2AJA Bilal +2860682 TA2IBD Sinan +2860683 TB2TFL Faruk +2860684 TA2AVA Ali +2860685 TA2OTB Tugba +2860686 TB2BTI Tacettin +2860687 TB2BGT TB2BGT +2860688 TA2AAI Aydin +2860689 TA1LTS Tolga +2860690 TA7AGL Gultekin +2860691 TB1PDT TB1PDT +2860692 TA3AAA Okan +2860693 TB1FAE Atalay +2860694 TA2MGA Gokhan +2860695 TB2HRA Harun +2860696 TB2PUD Deep +2860697 TB3FKC Cankut +2860698 TA2OSR Sadi +2860699 TA2NEG TA2NEG +2860700 TA2AIA IsmailAltinova +2860701 TB1FES ErcanSoylu +2860702 TA2ANX Orion +2860703 TB3BGC Mumin +2860704 TB3PHO Hakan +2860705 TB1PVC Ozgur +2860706 TA1AMK Keser +2860707 TB7DCV Sanel +2860708 TA7OZS TA7OZS +2860709 TB2TBX TB2TBX +2860710 TA6FT Ferhat +2860711 TA1AYG TA1AYG +2860712 TB5GRK Kerimoglu +2860713 TB2CNO Ibrahim +2860714 TA2VR Semih +2860715 TA7OSA TA7OSA +2860716 TA0AYD TA0AYD +2860717 TB6BMA Mehmet +2860718 TA4AJI Hakan +2860719 TA2LAM Ahmet +2860720 TA2APA TA2APA +2860721 TA8ADT Demet +2860722 TB1TFO Fatih +2860723 TA2URU Kaan +2860724 TA5AUG Ugras +2860725 TB5GUR Bora +2860726 TA2OEV Erdem +2860727 TA9UNL Unalparlak +2860728 TA6MYU Mustafa +2860729 TA8MIA Alkan78 +2860730 TA8LYG nagrandtr +2860731 TB2PRN Recep +2860732 TB2PHV Enespehlivan +2860733 TA3NKE Kenan +2860734 TA2JU Hasan +2860735 TA1UKS Kadir +2860736 TB2TSG Serhat +2860737 TA8MZN Mehmet +2860738 TA2NSB Sercan +2860739 TA1GN Ta1gn +2860740 TA2LHK Hasan +2860741 TA2MES Erhan +2860742 TA1LGS Goknur +2860743 TB4TSE Serdar +2860744 TA2ZK Ayhan +2860745 TB2BKU Mustafa +2860746 TA2ALP Alpan +2860747 YM4EAK Mugla +2860748 TB1TDX Dogan +2860749 TA1OKN Gokay +2860750 TA1OIB Yunus +2860751 TA3UZH Zeki +2860752 TA5IGO TA5IGO +2860753 TA2ISO Somer +2860754 TA7AUW Muhammet +2860755 TB2HAL Halil +2860756 TA2ANK TA2ANK +2860757 TA5DV Ziya +2860758 TA2ATG Tansu +2860759 TA1NSK Selcuk +2860760 TA5OZD Selim +2860761 TA1MC Ta1megacycle +2860762 TA1OND Onder +2860763 TA2LE Haluk +2860764 TB6X Bedri +2860765 TA5LVC TA5LVC +2860766 TA3MCK Mehmet +2860767 TA1OK Oktay +2860768 TA3CT Seyfettin +2860769 TA2MKB Kazim +2860770 TB1GKY Mehmet +2860771 TA2LJZ Bilal +2860772 TA1OTS Serkan +2860773 TA2AJN Salih +2860774 TB2JCE Erdi +2860775 TA2LMD Murat +2860776 TA3MCR Murat +2860777 TA2NOR Osman +2860778 TA3OCV Suat +2860779 TA5HY Hamdullah +2860780 TA1MKK Muhsin +2860781 TA1AFT Ilker +2860782 TA2OFC Feridun +2860783 TA2IIX Kurt +2860784 TA3NEY Ender +2860785 TA2AJA Bilal +2860786 TA3DM Cemil +2860787 TB2BVE Veysel +2860788 TA3IFC Fatih +2860789 TA1XX Ismail +2860790 TB1BCL Bilal +2860791 TA1AMK Mustafa +2860792 TB0BBA Ozdemir +2860793 TA2NBG Serhat +2860794 TA2OGB Gunes +2860795 TA2UVB Demir +2860796 TA2LMD Murat +2860797 TB3DIO Ilyas +2860798 TA5GE Eyup +2860799 TA2NXT Kadir +2860800 TA5OSG Sabahaddin +2860801 TA1IEY Enesyas +2860802 TA2ONN Nirengi +2860803 TA2ANP Sahin +2860804 TB2DOB Power +2860805 TB2DHZ Zobar +2860806 TA4DS Ta4ds +2860807 TA2MLC TA2MLC +2860808 TA2IBY Ersoy +2860809 TB2TJG Hakki +2860810 TA3MAR Mesut +2860811 TA2ALI Ali +2860812 TA2LYS Yigiter +2860813 TA2LFA Fuat +2860814 TA2IKZ Selcuk +2860815 TB2BDB Nevzat +2860816 TA2MEC Hakan +2860817 TA7TC Faruk +2860818 TB2HSN Hasan +2860819 TB2FSU Umit +2860820 TB2HYM Muzaffer +2860821 TB2GFK Ferhat +2860822 TA1KW Giraysan +2860823 TA1MAX Mehmet +2860824 TA2U Kartal +2860825 TA2UBA Burak +2860826 TB2MKQ Adem +2860827 TA2NEH TA2NEH +2860828 TA2LYY Yahya +2860829 TA1MYH Mehmet +2860830 TB1TAN TB1TAN +2860831 TA3OIS Oguzhan +2860832 TA1LER Abdullah +2860833 TB3DOX Orbay +2860834 TA7MEO Mehmet +2860835 TA2ANY Oral +2860836 TA3NMB Girdap +2860837 TA1OZ Orhan +2860838 TA1TA Huseyin +2860839 TA2NEG Erdem +2860840 TB2DHZ Zobar +2860841 TA2NW TA2NW +2860842 TB5MCD Mesvat +2860843 TA1NI TA1NI +2860844 TA1LFT TA1LFT +2860845 TA1MER Mert +2860846 TA2NLA Ahmetgeldi +2860847 TA5ISA Serif +2860848 TA5ASQ Seda +2860849 TA2ZE Zafer +2860850 TA5AAB Kasim +2860851 TB9DME Mehmet +2860852 TB2TCS Cemil +2860853 TA3BA Resat +2860854 TB1PXL Alp +2860855 TB1WAK Abdkocak +2860856 TA8AOE Onur +2860857 TA1LLE Serkan +2860858 TB2PMQ TB2PMQ +2860859 TB3GAS Adem +2860860 TA2URM rmz_krc +2860861 TA2OAR AFE +2860862 TA8AYA TA8AYA +2860863 TA2AOM Ozan +2860864 TA3ADA TA3ADA +2860865 TB3HTS Tuna +2860866 TA4OOK Erdal +2860867 TB7BUK Bilal +2860868 TB3TRA RecepAydemir +2860869 TA3MHY HayrettinAydin +2860870 TB2PXM Mustafa +2860871 TA5OCA Cem +2860872 TB2CYY Ismail +2860873 TA2NW TA2NW +2860874 TB2TCS Cemil +2860875 TB2HYM Muzaffer +2860876 TB2DDX Ali +2860877 TA2UEA Omer +2860878 TA1ICE Cagatay +2860879 TB5DX TB5DX +2860880 TA3AER TA3AER +2860881 TA3OKK TA3OKK +2860882 TB3FRS Serkan +2860883 TB2DHC Hasan +2860884 TA5YY A. +2860885 TA2X Ugur +2860886 TA3LAI A.can +2860887 TA5DD Ersin +2860888 TA2TC Cevat +2860889 TB2GDM Murat +2860890 TB2GEU Ulku +2860891 TA3OEE EnginEker +2860892 TB8AS Ibrahim +2860893 TA2LMX Selamicelep +2860894 TA2ORN Orhan +2860895 TA2CR Ta2cr +2860896 TA7OHM TA7OHM +2860897 TA2IEM Emrah +2860898 TA3EH Recep +2860899 TA2OB TA2OB +2860900 TA7HA Huseyin +2860901 TB5DTK Taylan +2860902 TA2IGH Gokhan +2860903 TB2DBU Bulent +2860904 TA2ITS Tayfur +2860905 TB2DDX Ali +2860906 TA2UEA Omer +2860907 TB2DHC Hasan +2860908 TA1AYC Murat +2860909 TB1DNI Dinan +2860910 TA5TM Menderes +2860911 TA3LT Aalkaya +2860912 TB4CFU Nihat +2860913 YM3KK Ulrad +2860914 TA1UAN Unal +2860915 TB2TID Ilhan +2860916 TB2WME Mehmet +2860917 TA2UCT TA2UCT +2860918 TB2PEJ Eren +2860919 TB2DHU Tugan +2860920 TA2LBU Burcin +2860921 TA8MKK Kursat +2860922 TA8AOQ Emin +2860923 TB2FRE Ferdi +2860924 TB2HMK Mert +2860925 TA3NBY Burak +2860926 TB5DOL Mustafa +2860927 TA2NCU TA2NCU +2860928 TA1AHU Huseyin +2860929 TA2AAB AtillaBostan +2860930 TA1FL Ali +2860931 TA4IHH Ahmet +2860932 TA2MK Osman +2860933 TA2LN TA2LN +2860934 TA7CR Recep +2860935 TB2HMI Mustafa +2860936 TA5AP TA5AP +2860937 TB2DHT Stayfkaraca +2860938 TB8BTH Niyazi +2860939 TA1API Samim +2860940 TA1OZH Huseyin +2860941 TB5MGG Erdogan +2860942 TB9BSB Sedat +2860943 TA1MHO Mehmet +2860944 TB5FMD Muaz +2860945 TA1OKC Ozgur +2860946 TB3GEC Erhan +2860947 TB2HAM Hamza +2860948 TB2MXZ Nurullah +2860949 TA2OJK rke +2860950 TB8FMX Metin +2860951 TA3IA Senturk +2860952 TA3AHS TA3AHS +2860953 TA2AOS Baris +2860954 TB6BI Bulent +2860955 TA1AYC Okan +2860956 TA2OFK Fkarakaya +2860957 TB2NEI Erinc +2860958 TA3IOR TA3IOR +2860959 TA3AHY TA3AHY +2860960 TB3BIV TB3BIV +2860961 TA3AFS TA3AFS +2860962 TB3BSS TB3BSS +2860963 TA2AEC TA2AEC +2860964 TA2OZD Selahattin +2860965 TB2HBU Baris +2860966 TA1MRA TA1MRA +2860967 TA2LP TA2LP +2860968 TB2MEB TB2MEB +2860969 TA2NBY TA2NBY +2860970 TB2CXV TB2CXV +2860971 TB3BCU TB3BCU +2860972 TA2MSR TA2MSR +2860973 TB3BZA TB3BZA +2860974 TA5MSK TA5MSK +2860975 TA3DN TA3DN +2860976 TA1ARX Taskin59 +2860977 TA3TX Ta3tx +2860978 TA5UEG Eray +2860979 TA3NYG Yalcin +2860980 TA1OAL TA1OAL +2860981 TA2ALO TA2ALO +2860982 TA1OZS Ozgur +2860983 TB4GMI Mithat +2860985 TA4MHE Muhterem +2860986 TA1ART Recai +2860987 TB4DIK Medya09 +2860988 TA4IKT Tdpkubilay +2860989 TB1DFJ Eyup +2860990 TA2UBX Bulent +2860991 TB3BMH Hamdi +2860992 TA3PV Fikret +2860994 TA8IMG Mehmet +2860995 TA5JE Rahmi +2860996 TA3AKE Ihsan +2860997 TA3LSL Gunay +2860998 TA3MC Koray +2860999 TB2MZM TB2MZM +2861000 TA3ILL Atilla +2861001 TA3MTM Tolga +2861002 TB1GEE Emre +2861003 TB2FXE Engin +2861004 TA2MOU Mozbey +2861005 TA3LHH Husamettin +2861007 TA3EL Ali +2861008 TA5DY Yusuf +2861009 TA1GE Hasan +2861010 TA3ML Cuneyt +2861011 TA3SC Serkan +2861012 TA2IBO Baris +2861013 TA3NYS Serkan +2861014 TA3MG Murat +2861015 TA3U Omur +2861016 TA5E Zafer +2861017 TA3MT Dursun +2861018 TA1UY TA1UY +2861019 TB2BRN Omer +2861020 TB2TCD TB2TCD +2861021 TB1BAO Ayhan +2861022 TA2LSF TA2LSF +2861023 TA3ARO Recep +2861024 TA3OSU Osman +2861025 TA1MB Faruk +2861026 TA2ITA Ttuzsuz +2861027 TA2LXL Serkan +2861028 TA4ALF Alimfiliz +2861029 TA5ARO Amca +2861030 TA2KD Seref +2861031 TA2ANF Nevzat +2861032 TB5PBJ Mehmet42 +2861033 TA3GL Mehmet +2861034 TA5NEC Necati +2861035 TB5BEZ Esentepe +2861036 TB5DX Ferhat +2861037 YM1KM URAD +2861038 TB3DLG Kemal +2861039 TA3OSV Ozkan +2861040 TA3LEJ Engin +2861041 TB1PLJ Kerem +2861042 TA6HE Saim +2861043 YM3KM TRAC +2861044 TA3BA Resat +2861045 TA2OMO Omer +2861046 TA2IOM Muzaffer +2861047 TA2LYS Yigiter +2861048 TA3ALA Alaattin +2861049 TB2HRS Recep +2861050 TB1R Murat +2861051 TB3DEU TB3DEU +2861052 TA5DV Ziya +2861053 TB2PHD Geoarms +2861054 TA1USA Salman +2861055 TA5DM Nuri +2861056 TA5AVE TA5AVE +2861057 TB1DHH Hikmet +2861058 TA0TA Bulent +2861059 TB1TFO Fatih +2861060 TA4BU MesutPargan +2861061 TA2AOK Osman +2861062 TA5DJ TA5DJ +2861063 TA4UEC Erdem +2861064 TA5DK Muharrem +2861065 TB5MHP Zafer +2861067 TA1ONK Onur +2861068 TA4DX TA4DX +2861069 TA4TA Kurtulus +2861070 TA3LNB Samet +2861071 TB4DJN Necati +2861072 TA4BT Tonga +2861074 TA1CO Mahmut +2861075 TA5MYI Mustafa +2861076 TA2MHN Muhsin +2861077 TA5YQB Gulsum +2861078 TA5ATM Melike +2861079 TA5AAO Arif +2861080 TA2UFW Abtkomuta +2861081 TA3KT Kemal +2861082 TA2AH Ruchan +2861083 TB1TSK SerkanKaplan +2861084 TA4UZE Uzeyir +2861085 TA4LS Mustafa +2861086 TA1ULA Yunus +2861087 TA4ACK Kazim +2861088 TA1OFA Fatih +2861089 TA1UET Evren +2861090 TA1IKK TA1IKK +2861091 TA2OD Ahmet +2861092 TA2NCP Necipcakir +2861093 TB4BIZ Ozge +2861094 TA2UBW TA2UBW +2861095 TB4GMI Mithat +2861096 TA3MTT TA3MTT +2861097 TA2UV Gokhan.Eralp +2861099 TB1DVM Murathan +2861100 TB2TGV Huseyin +2861101 TA1OHW Karakanin +2861102 TB2MMV Guray +2861103 TA2IYW Orcun +2861104 TA2LVY Yunus +2861105 TA2NJS Sabri +2861106 YM2KDB ANARAD +2861110 TB2TRL Halit +2861111 TA1AAY Aliyucelcece +2861112 TA3ANC Noyan +2861113 TA2OVA Volkan +2861114 TA3USS Sabit +2861115 TA8MGA Mehmet +2861116 TA1ISY Sener +2861117 TA5MEL Mehmet +2861118 TB5BYO Yusuf +2861119 TA1KB Kerim +2861120 YM2KBD ANARAD +2861121 TB1HKV Ibrahim +2861122 TA3LUX Suleyman +2861123 TB3DLI Mert +2861124 TA5MFA MBa +2861125 TB3TCU Cavit +2861126 TA2OCZ Ozgur +2861127 TA6ES Ilyas +2861128 TA1NGE Gungor +2861129 TA1MZF Muzaffer +2861131 TB1STX Seckin +2861132 TA3APS Pusat +2861133 TB1TNO Naciye +2861134 TB3TFY Ferruh +2861135 TA3ANX Burak +2861136 TB2DXI Cem +2861138 TA3AFG Gazi +2861139 TA5AYX Ali +2861140 TA3MK Nadi +2861141 TA5ARO Amca +2861142 TA5JD Azgur +2861143 TA2AWX BoraYurt +2861144 TA2NXG Gokhan +2861145 TA1ION Halil +2861146 TB1CWA Tunc +2861148 TA2UIY Meltem +2861152 TA1NHT Huseyin +2861153 TA1UAB Abdullah +2861154 TA7OMC Onur +2861155 TA3NXA Ali +2861156 TB3HAX Yigit +2861158 TB1BRY CanCubukcu +2861159 TB3GDA Dilek +2861162 TB2TVO Volkan +2861163 TA3MMS M. +2861165 TA3SG Gokhan +2861166 TB9BSB Budak04 +2861167 TA1OES Enis +2861168 TB1PCE Eren +2861169 TA1IUY Tamer +2861170 TA1NBI Busra +2861172 TB3DKE Emre +2861173 TB5GOA Omer +2861174 TA3ATA Turgay +2861175 TA4LFD Fatih +2861177 TA8IHX Ahmet +2861179 TB3DHZ Sertan +2861180 TA3IVY Vedat +2861181 TA2UXE Erdinc +2861182 TB3GBK Batuhan +2861183 TA5NHT Halil +2861186 TA2NWS Alper +2861188 TA8MRM Ertugrul +2861189 TA4NCV Nihatcan +2861190 TA2ISM Yigit +2861191 TA1NDC East +2861192 TA1LFU Furkan +2861193 TA1UAB Abdullah +2861194 TA6AE Serdar +2861195 TA1MEL Melih +2861196 TA2MUR Murat +2861197 TA4AZU Tamer +2861198 TA3OXT Turgut +2861199 TB2TLK Levent +2861200 TA1LHJ Serhat +2861201 TA1LTT Tufan +2861202 TA1AXO Burak +2861203 TA1MTC Baris +2861204 TA4ADD SemihDemirel +2861205 TB2FBW Fatih +2861207 TB1BDE Bulent +2861208 TA6AO Ahmet +2861209 TB3PYH Huseyin +2861210 TA8Z Baris +2861211 YM2KBI BILRAD +2861212 TA1OCE Atakan +2861213 TA2OFB Omer +2861214 TA1NKL Ismailcinoglu +2861215 TA2OEP Emre +2861216 TA2IMZ Mustafa +2861217 TA3ITS Serif +2861218 TA1NFK Furkan +2861219 TA8LMA Alper +2861220 TA7N Ayhan +2861221 TA2NYQ Yusuf +2861222 TB1TNO Naciye +2861223 TA4MKU Murat +2861224 TA4ASI Harun +2861226 TB1HDR Haydar +2861227 TA3ILW Ilhan +2861230 TB3DOZ Ferdi +2861231 TA1NGE Gungor +2861232 TA2EY Mustafa +2861233 TA3ITW Tayfun +2861234 TA3IBE Berk +2861235 TB1DCU Tunc +2861236 TB8HSO Hakan +2861238 TA2IOJ Ozan +2861239 TA2UVT Cemil +2861240 TB4BGE Cengiz +2861241 TA4OA Arif +2861242 TA4TL Tahir +2861243 TB1TOM Ozcan +2861244 TA2TI Harun +2861245 TA4VA Kaan +2861246 TA1ANO Naci +2861247 TA1VA Volkan +2861248 TA2MUX Mustafa +2861249 TA7NAY Alpyasinkiris +2861250 TA2UHS Hakan +2861251 TA6IPW Circassian +2861252 TB2HSZ Salih +2861253 TA2NGL Ertugrul +2861255 TA1IKX Kaan +2861256 TA2ARM Renan +2861257 TA5ILU Ilyas +2861258 TA1ACH Hamdi +2861259 TA3ILW Ilhan +2861260 TA1IHY Hamza +2861261 TA2NOC Osman +2861262 TA3MAB Aydin +2861263 TA1MYG Mehmet +2861265 TA1ACG Cagatay +2861266 TA5LSE Sefa +2861267 TA1OSU Osman +2861268 TB5MGG Erdogan +2861269 TB4TLL Hasbay +2861270 TA2UGW Gulec +2861271 TA2KB Abdulkadir +2861272 TA2NIR Ramazan +2861273 TA5IMY Mehmet +2861274 TA2ARB Yavuz +2861275 TB2FSJ Sefik +2861276 TB2GKS Sefa +2861277 TB5BL Remzi +2861278 TA2UJP Goksen +2861279 TB2FCN Can +2861280 TA5AYX Kemal +2861282 TB2PCE Kerimoglu +2861283 TB3DDB Adem +2861284 TB2BUR TB2BUR +2861285 TB2JDA Altug +2861286 TA4AKE TA4AKE +2861287 TA3MGS GurbayS +2861288 TB3LE Erhan +2861289 TA1CH Mesut +2861290 TB1PYX Ahmet +2861291 TA3OTE Terkan74 +2861292 TA2AXN TA2AXN +2861293 TA2UBG Berk +2861294 TA1OMN Prm. +2861296 TA1MUO Mustafa +2861297 TB1BOD Salim +2861299 TA1LSI smyrkara +2861300 YM1SIS Bbskizci +2861301 TA1NHI A.Hacidogan +2861302 TB1DML Murat +2861304 TA5AFA Fatma +2861307 TB2HSL Serhan +2861313 TA2NXA Tezay +2861314 TA2LFF Firat +2861317 TA5LHI TA5LHI-Hakan +2861318 TA1IKO Kozbek +2861319 TA2UTE Turgut +2861321 TA1AAK Berkay +2861322 TA2NEQ Evren +2861323 TA5OYH Veli +2861328 YM4KL TRAC +2861330 TA1AES Emre +2861333 TA2MWE Fatih +2861334 TA2LLW Fazli +2861335 TA3IAC Abidin +2861336 TB1DVT Volktyurk +2861339 TB1TER Burak +2861342 TA1LFA Fatih +2861345 TB1GBB Saim +2861346 TB9DTA TB9DTA +2861347 TA3ASH Zeybek +2861348 TB3BG Gezegen +2861349 TA1MTF Dr +2861352 TA2UCM Coskun 2862001 TA2OI Nejmettin 2880001 OY8W Steffen 2880002 OY1DZ Oy1dz +2880003 OY5X Oy5x 2900001 OX3HI Holger 2920001 T77GR Renato 2920002 T77NC Nazzareno 2920003 T77DB Danilo 2920004 T77NC Nazzareno 2920005 T77SM SM +2920006 T77NM Matteo +2920007 T77AG Matteo +2920008 T77DB Danilo +2920009 T77CE Claudio +2920010 T77WI Giancarlo +2920011 T77CV Vincenzo +2920012 T77BV Bruno +2920013 T77GO RADIO +2920014 T77CI ARRSM +2920015 T77FB ARRSM +2920016 T77CD Giovanni +2920017 T77Y Maurizio +2920018 T77GZ Gianluca +2920019 T77TF Tullio +2920020 T77IC Roberto +2920021 T77WL Massimo 2930001 S51ZK Ziga -2930002 S56SCI S56SCI +2930002 S56SCI Marjan 2930003 S56CT Tilen 2930004 S52SG Ewald 2930005 S56LLB Andrej @@ -54199,10 +66039,10 @@ 2930011 S56HVF Roman 2930012 S52SX Savo 2930013 S54CAT Yani -2930014 S57DV Abdomen +2930014 S57DV Domen 2930015 S56CUV Freddy 2930016 S53JB Bostjan -2930017 S53SI Supi +2930017 S53SI Ivan 2930018 S50KH Matej 2930019 S50UM Urska 2930020 S56MP Mitja @@ -54227,7 +66067,7 @@ 2930039 S53K Simon 2930040 S57BSL Toni 2930041 S59GM Miran -2930042 S50BH Borut-S50BH +2930042 S50BH Borut 2930043 S53ZN Zvonko 2930044 S51JY Andrej 2930045 S53H Iztok @@ -54258,7 +66098,7 @@ 2930070 S56PYS Sebastijan 2930071 S56ITR Silvo 2930072 S58OW Humi -2930073 S53AAN Radioclub +2930073 S53AAN RC 2930074 S55G Mike 2930075 S57HFV Alojz 2930076 S53X Milos @@ -54269,12 +66109,12 @@ 2930081 S59DKS RK 2930082 S55DMR S55DMR 2930083 S55ML Mitja -2930084 S59DEM RK +2930084 S59DEM RC 2930085 S55SS Haring 2930086 S59ZL Blaz 2930087 S58SGP Gvido 2930088 S57BM Matej -2930089 S51RBC Radioklub +2930089 S51RBC RC 2930090 S57BKB Bruno 2930091 S57BSU Ljubo 2930092 S52RS Mare @@ -54292,7 +66132,7 @@ 2930104 S51DA David 2930105 S53GA Damjan 2930106 S55DB Deni -2930107 S59DBO Radioklub +2930107 S59DBO RC 2930108 S56EB Enej 2930109 S55KB Klemen 2930110 S59RA Ales @@ -54301,51 +66141,51 @@ 2930113 S51UL Juhko 2930114 S56AFJ Janko 2930115 S52MB Franc -2930116 S56VDK S56VDK +2930116 S56VDK Daniel 2930117 S52AS Roman 2930118 S56SPT Peter 2930119 S54AJE Anze -2930120 S59DJR RK +2930120 S59DJR RC 2930121 S54MTB Marko 2930122 S54AZA Ales 2930123 S51KZ Goldy 2930124 S59GCD RK -2930125 S56VTV S56VTV +2930125 S56VTV Janez 2930126 S52HI Kojot 2930127 S56SIJ Ursulinka 2930128 S56RIR Martin -2930129 S56WBV S56WBV +2930129 S56WBV Bostjan 2930130 S52ME Bojan -2930131 S51KM S51KM +2930131 S51KM Mirko 2930132 S56OA Ogo 2930133 S55TZ Tomaz -2930134 S56JPS S56JPS +2930134 S56JPS Janez 2930135 S56EPN Marcel -2930136 S56SCI Marjan +2930136 S57TQ Tadeja 2930137 S55WT Janko 2930138 S50ZR S50ZR 2930139 S57JZ S57JZ 2930140 S56GCX JANEZ 2930141 S56GCY VANJA 2930142 S57KRN ROK -2930143 S50AKR Aron +2930143 S50AKR ARON 2930144 S57R S57R 2930145 S57AJJ Jure 2930146 S51ZZ Vojko 2930147 S56ECR Miha -2930148 S50VZZ Drustvo +2930148 S50VZZ RC 2930149 S56PB Bogo 2930150 S58LA Spela 2930151 S55MA S55MA -2930152 S56BLG S56BLG +2930152 S56BLG Drago 2930153 S55RD Renato 2930154 S55V Viktor 2930155 S56UVB Bogomir 2930156 S56DE Denis -2930157 S53DGM RadioklubS53DGM-S53I +2930157 S53DGM RC 2930158 S51WW Stojan -2930159 S59DSC RK -2930160 S57BBD Bojan7bbd +2930159 S59DSC RC +2930160 S57BBD Bojan 2930161 S52O Zvone 2930162 S56LFI Drago 2930163 S56D Davorin @@ -54356,7 +66196,7 @@ 2930168 S51BW Andy 2930169 S57LTH Branko 2930170 S57P Peter -2930171 S56RGA S56rga +2930171 S56RGA Agar 2930172 S56PDO Dani 2930173 S56S David 2930174 S56GRY Irena @@ -54367,12 +66207,12 @@ 2930179 S56AX Luka 2930180 S59AN Aneja 2930181 S56WDL Matej -2930182 S55H S55H -2930183 S57CBR S57CBR -2930184 S51VC MAX -2930185 S59ACP S59ACP -2930186 S56IPS S56IPS -2930187 S53JN JOZICA +2930182 S55H Jozef +2930183 S57CBR Branko +2930184 S51VC Max +2930185 S59ACP RC +2930186 S56IPS Samo +2930187 S53JN Jozica 2930188 S53EL Matjaz 2930189 S56VOM Matjaz 2930190 S56PIV Jakob @@ -54382,15 +66222,15 @@ 2930194 S54B Tilen 2930195 S55DJ Drago 2930196 S56KHL Erik -2930197 S51L Dmrst +2930197 S51L Stefan 2930198 S56JRR Robi 2930199 S56KGZ Matej -2930200 S52DR Daniel +2930200 S54Z Daniel 2930201 S58BZ Ben 2930202 S56ZM Matej -2930203 S57F DEJAN +2930203 S57F Dejan 2930204 S51ZJ Sergej -2930205 S53APR RADIOKLUB +2930205 S53APR RC 2930206 S54KOG Janko 2930207 S53MD Marko 2930208 S56KOS Gregor @@ -54399,11 +66239,12 @@ 2930211 S51E Rok 2930212 S59FC Franc 2930213 S51TC Tone -2930214 S57PM MITJA +2930214 S57PM Mitja 2930215 S57TI Ivan 2930216 S57AX Darko 2930217 S52ST Sinisa 2930218 S57JTI Jan +2930219 S56DS Damijan 2930220 S57NAD Andrej 2930221 S50DK Drago 2930222 S56B Andreja @@ -54423,9 +66264,11 @@ 2930236 S56BFB BOJAN 2930237 S56IBB Bojan 2930238 S50SL Joze +2930239 S55VL Vide 2930240 S51MM David 2930241 S57MSE Niki 2930242 S55AB Aleksander +2930243 S58MV Miha 2930244 S55N Joc 2930245 S52AX Martin 2930246 S55WP Tomaz @@ -54434,6 +66277,7 @@ 2930249 S56Y Iztok 2930250 S51CA Andrej 2930251 S51RA Marko +2930252 S56FL Franc 2930253 S56RP Primoz 2930254 S56ZUS Uros 2930255 S52PA Tone @@ -54450,11 +66294,170 @@ 2930266 S51PV Peter 2930267 S57BAX Stanko 2930268 S56FGS Marko -2930270 S53DOS Radioclub -2930271 S59DGO Radioclub +2930269 S54RK S54RK +2930270 S53DOS RC +2930271 S59DGO RC 2930272 S52OT Rado 2930273 S56MH Mitja 2930274 S56LRR Rok +2930275 S53MB Marko +2930276 S55OM Mitja +2930277 S54RR Robert +2930278 S57MH Matej +2930279 S56EFR Rudolf +2930280 S56LP Peter +2930281 S50ARO S5 +2930282 S57RV Vojko +2930283 S57KLA Lojze +2930284 S56VZ Zlato +2930285 S56ZSK Srecko +2930286 S57OCC Peter +2930287 S50PB Bravo +2930288 S55PN Nejc +2930289 S56IEA Marijan +2930290 S58I Tomas +2930291 S57AJA Aljosa +2930292 S54JK Janez +2930293 S55Y Peter +2930294 S57WEV Edi +2930295 S53BP Mirko +2930296 S51AO Silvo +2930297 S56LLJ Ljubo +2930298 S53PJ Joe +2930299 S51TA Tadej +2930300 S57VG Velko +2930301 S52LOK Maja +2930302 S50UR Uros +2930303 S57ORS Robert +2930304 S52RF Franc +2930305 S50ME Maurice +2930306 S50ALJ ARON +2930307 S59MR Mat +2930308 S55EK Erik +2930309 S51KQ Mijo +2930310 S53XX Slavko +2930311 S51RX Robert +2930312 S50MZ Marjan +2930313 S55II Andrej +2930314 S57FLT Frenk +2930315 S55VN Vili +2930316 S54SCK Stane +2930317 S51WB Zeljko +2930318 S56SEE Dejan +2930319 S50ZRS ZRS +2930320 S57D Milos +2930321 S56RTB Toni +2930322 S50APO ARON +2930323 S57SV Stefan +2930324 S51H Hakija +2930325 S57HH Huso +2930326 S56LNJ Janez +2930327 S55BA Barbara +2930328 S50SB Blaz +2930329 S50AB Johnny +2930330 S57DJ Jan +2930331 S56UL Danilo +2930332 S56CG Crt +2930333 S56SG Simon +2930334 S51LA Luka +2930335 S56WLB Branko +2930336 S55L Matevz +2930337 S53NW Herman +2930338 S51LJ Marjan +2930339 S55GR Zeljko +2930340 S55SA Stane +2930341 S58ANR Anze +2930342 S50GB Gasper +2930343 S50APT ARON +2930344 S56FGP Aljosa +2930345 S56ABI Ivan +2930346 S56FMZ Mirko +2930347 S56WBI Ivan +2930348 S52ID Marsell +2930349 S53RP Robert +2930350 S50ANM ARON +2930351 S57JO Joze +2930352 S52AC Vlado +2930353 S56JM Marjan +2930354 S56EMX IVAN +2930355 S53AU Matjaz +2930356 S57RW Andrej +2930357 S51AM Alen +2930358 S51DR Mitja +2930359 S51SG Andrej +2930360 S51CF Franko +2930361 S57DB Dominik +2930362 S51SK Miro +2930363 S56JSD Drago +2930364 S50WAAD RC +2930365 S56WIZ Janez +2930366 S56NC Matej +2930367 S50AKP ARON +2930368 S59CST Radioclub +2930369 S52DEJ Radioclub +2930370 S56BT Toni +2930371 S59DTN Radioclub +2930372 S54R Radioclub +2930373 S59KB Boki +2930374 S56EBW Bogo +2930375 S57SB Boris +2930376 S57BAT Tom +2930377 S59AT Silvester +2930378 S53VA Andrej +2930379 S56EKR Rado +2930380 S56WJE Jernej +2930381 S57JF Janez +2930382 S57IL Luka +2930383 S52EN Zdenko +2930384 S56LAO Andrej +2930385 S50EL Elvis +2930386 S56RPJ Janko +2930387 S56JMU Andrej +2930388 S56VJM Joze +2930389 S56LZI Ziga +2930390 S56EDI Roman +2930391 S56CK KLEMEN +2930392 S55IH Denis +2930393 S53DVL RC +2930394 S59DLT Radioclub +2930395 S55SM Matej +2930396 S56JUR Jure +2930397 S53AL Ales +2930398 S55MJ Jernej +2930399 S55YL Eva +2930400 S50ACE ARON +2930401 S57SN Martin +2930402 S52EI Ivan +2930403 S50ANG ARON +2930404 S54PLF Ludvik +2930405 S50BB Branko +2930406 S57UMU Miran +2930407 S50MJ Milos +2930408 S57RZ RADO +2930409 S51LU Stefan +2930410 S55KA Alojz +2930411 S50ASG ARON +2930412 S50ATR ARON +2930413 S50ABR ARON +2930414 S50AMB ARON +2930415 S50AMS ARON +2930416 S57SPK STANKO +2930417 S57DM Branko +2930418 S53SM Sandi +2930419 S56FC JURIJ +2930420 S53ZO Simon +2930421 S59DAJ RK +2930422 S56JZZ Marijan +2930423 S51J Janez +2930424 S53TM TINE +2930425 S57TM Marko +2930426 S53VG GREGOR +2930427 S54PK Zdenko +2930428 S53DR Drago +2930429 S53MF Mitja +2930430 S56SJ Sladana +2930431 S51UZ Franc +2930432 S57YM Matjaz 2940001 Z36AEC Herolind 2940002 Z32IT Dragan 2940003 Z32IT Dragan @@ -54488,14 +66491,16 @@ 2940031 Z34MSP Stefan 2940032 Z35TUN Tunas 2940033 Z32KC Kire +2940034 Z32EA Z32EA 2958001 HB0SPH Pius 2959001 HB0BP Andreas 2959002 HB0PJ Patrick 2959003 HB0TR Stefan 2959004 HB0DE Domenique 2959005 HB0WR WR -2959006 HB0AA HB0AA +2959006 HB0AA Yvo 2959007 HB0HF Markus +2959008 HB0HF Markus 2970001 4O6DXC Janko 2970002 4O6ZD Zeljkod 2970003 4O5JD Jovan @@ -54521,6 +66526,14 @@ 2970023 4O6NR Nikola 2970024 4O4WBW Nikola 2970025 4O5RED Dragana +2970026 4O6GD Djidjo +2970027 4O3BUP Luka +2970028 4O3ROK Robi +2970029 4O4BIS Boris +2970030 4O7JAZ Jurica +2970031 4O6GAA RAK +2970032 4O6ARS RK +2970033 4O6ARO RK 3020001 VO1GME Geoff 3020002 VE1AIC Ronald 3020003 VO1CJN Chris @@ -54535,6 +66548,7 @@ 3020012 VO1SMC Stephen 3020013 VO1AX Michael 3020014 VO1CRC Avalon +3020015 VE2POE Carl 3020016 VO1ZAP 3020017 VO1OE Loren 3020018 VO1FOX Aaron @@ -54605,13 +66619,17 @@ 3020083 VE7TYE Tyson 3020084 VE3KAI Peter 3020085 VE2BVV Leon +3020086 VE4HAY Derek 3020087 VE4YK William 3020088 VE3PDK Thomas +3020089 VE2BV Mario +3020090 VA2SRY Steve 3020091 VA3CIP Joe 3020092 VA3AMP Alexander 3020093 VA3RXT Rodney 3020094 VE6NX Perry 3020095 VE3KMN Craig +3020096 VE6JMW Julie 3020097 VE3PNK Richard 3020098 VA3JNB Jennifer 3020099 VE3TSK Athanasios @@ -54630,6 +66648,7 @@ 3020112 VE9ZY Malcolm 3020113 VE3VLJ Vanlaer 3020114 VY1XX Wolf +3020115 VE2IV Pierre 3020116 VE2AFJ Stephane 3020117 VY1BAT Wolf 3020118 VA2QR Rene @@ -54638,13 +66657,18 @@ 3020121 VE7RXE Richard 3020122 VE3GSO David 3020123 VE2BGB Daniel +3020124 VA2CY Bernard 3020125 VE2ZAF Alain 3020126 VE1SMC Shane +3020127 VE7TSU Bodhi 3020128 VE3PNK Richard 3020129 VE6HG Chris 3020130 VE2BLE Jean-Marc +3020131 VE6RMN Roman 3020132 VE2YAR Mario +3020133 VE3EBY Paul 3020134 VE3NDQ Nathan +3020135 VE3XHS Harrison 3020136 VE6TDT Todd 3020137 VE2OMG Michel 3020138 VA2WGB Guillaume @@ -54658,20 +66682,27 @@ 3020146 VE7ED Edward 3020147 VE7SDJ John 3020148 VE7FEB Edward +3020149 VA7BJN Benjamin 3020150 VE2CII Frank 3020151 VE2AVL Alain +3020152 VO1RCL Rob 3020153 VE3NV Harrison +3020154 VA3SV 3020155 VA1JB James +3020156 VE9JN JULIEN 3020157 VA2MNO Michael 3020158 VA7EJB Clint 3020159 VE2QAG Alain 3020160 VE2ZSR Shahrad 3020161 VE6CV Gary +3020162 VE3EBY Paul 3020163 VE7KAU Imants 3020164 VY2TP Thomas 3020165 VE3RQR Robert 3020166 VA1JB James +3020167 G0BGN James 3020168 VE7WYZ Yizhou +3020169 VE2FCR Leo 3020170 VA7TF Tony 3020171 VA7TF Tony 3020172 VE1JXT Jim @@ -54704,7 +66735,7 @@ 3020199 VA3NVS Martin 3020200 VE6NP Fraser 3020201 VE7MFD Mark -3020202 VA6JDW James +3020202 VA6JDW JD 3020203 VA7NCG Carl 3020204 VA6SKI David 3020205 VE3DVV Barry @@ -54722,7 +66753,7 @@ 3020217 VE6DTH Editha 3020218 VE6CZR Carmelito 3020219 VE6CZR Carmelito -3020220 VE2RPU Juan +3020220 VE7LGP Lloyd 3020221 VE1SLH Scott 3020222 VE1BSG Matthew 3020223 VA3DDM Drew @@ -54755,10 +66786,11 @@ 3020250 VE6AZX Matthew 3020251 VA3EVK Eric 3020252 VA2XZA Jonathan +3020253 VE2NPR Richard 3020254 VE7HLW Herbert 3020255 VE6MJK Marlene 3020256 VA2RIO Rollande -3020257 VE7DCF David +3020257 VE7DCF Dave 3020258 VA7DAC David 3020259 VO1JA Harold 3020260 VE2LM Pierre @@ -54797,18 +66829,25 @@ 3020293 VA7OV Vern 3020294 VE7ZDL Karl 3020295 VA7HSE John +3020296 VA3CNT Gabe 3020297 VE3PKO Richard 3020298 VA3FWP Frederick 3020299 VE3JK John +3020300 VE6TRZ Trent 3020301 VA3CDA Daniel 3020302 VA3CDA Daniel +3020303 VE3MTO Maciej +3020304 VA2ESK Christian 3020305 VE5DAB Jason 3020306 VA3JBI Jacques 3020307 VE2LJV Samuel 3020308 VE2LJV Samuel +3020309 VE3SGG Sylvain +3020310 VE3WKG Kevin 3020311 VE7YMJ Gordon 3020312 VE1HUL David 3020313 VE2MH Sebastien +3020314 VA6BB Bohdan 3020315 VA7BCX Blaine 3020316 VE3OY Matt 3020317 VE4GLS Gordon @@ -54816,18 +66855,23 @@ 3020319 VA3XWL Brad 3020320 VA3JAZ Louis 3020321 VE2AFA Patrick -3020322 VE9NG Neil +3020322 VE9NG Ken 3020323 VA7VW Ron 3020324 VA7TXP Ronald 3020325 VA3BNR Luc 3020326 VE6DPM Dylan 3020327 VE1JPR J +3020328 VE4SGM Scott +3020329 VE2KNM Ken +3020330 VA3SHL Barnaby +3020331 VE4ZZ Thomas 3020332 VO1WEB Matthew 3020333 VA2VIZ Marie 3020334 VE6MLC Wenn 3020335 VE3RGC Raymond 3020336 VE3DBM Donald 3020337 VE3TXK Christopher +3020338 VO1NAR North 3020339 VE7HR Dave 3020340 VA6HEM Michel 3020341 VA7KKW Robert @@ -54857,7 +66901,8 @@ 3020365 VA3KVA Cary 3020366 VE3UWO Mark 3020367 VA3BTO Michael -3020368 VE3YCX Ve3ycx +3020368 VE3YCX Sean +3020369 VE9DWJ David 3020370 VA7FO David 3020371 VA7SND Bruce 3020372 VE3XNS Brian @@ -54873,8 +66918,8 @@ 3020382 VE6AO Calgary 3020383 VA3LTD Livio 3020384 VA6RZR Norman +3020385 VE3BZ Kevin 3020386 VE7MOY Stacie -3020387 VA7ILR Stacie 3020388 VE2AZQ Gino 3020389 VE3WWT Scott 3020390 VE3NMX Mike @@ -54914,14 +66959,17 @@ 3020424 VE2ZDK Jean-Francois 3020425 VE9MAO Marc 3020426 VE3HW William +3020427 VA2GNB Gino 3020428 VE2HTU Pascal 3020429 VA2RJF Jean-francois +3020430 VE3RO Martin 3020431 VA7CN Carlos +3020432 VA2GNB Gino 3020433 VE2BBB Pascal 3020434 VE2MPP Edmund 3020435 VA7AMX William 3020436 VE2HTU Pascal -3020437 VA3DNE Swee +3020437 VA3DNE Daniel 3020438 VE4ZIM Kevin 3020439 VE3EKA Edwin 3020440 VE7RI Bradley @@ -54931,7 +66979,7 @@ 3020444 VE7GDU 3020445 VA2RWS William-Ryan 3020446 VE2AIE Mario -3020447 VE2ZOA Beauvais +3020447 VE2ZOA Jean-Maurice 3020448 VA2RWS William-Ryan 3020449 VE1ESP Emile 3020450 VE9MUD Denis @@ -54952,10 +67000,11 @@ 3020465 VE9MWA Mark 3020466 VA7KKW Robert 3020467 VE2OWL Stephane -3020468 VE2SNA Andr -3020469 VA2UF Andr +3020468 VE2SNA Andre +3020469 VA2UF Andre 3020470 VE7ELP Rey 3020471 VA2NAJ Sylvain +3020472 VE3RO Martin 3020473 VE7RI Bradley 3020474 VA3SXP Steve 3020475 VE1DRU Drew @@ -54965,19 +67014,518 @@ 3020479 VE7PW Kevin 3020480 VA3JCD Clifford 3020481 VA3JCD Clifford -3020482 VE3ZRD Philip +3020482 VE3ZRD Phil 3020483 VE6HHJ Ty 3020484 VE6HHJ Ty 3020485 VE7CQT Doug 3020486 VA7BGR William 3020487 VE2KBS Dominique -3020488 VE2BHH +3020488 VE2BHH Gunther 3020489 VE7LC Claude 3020490 VE4REM Randy 3020491 VE3YVL Yvon -3020492 VE2WPT Nicholas -3020493 VA2MH Martin -3020494 VE6LK Vince +3020492 VE2WPT Nick +3020493 VE6SH Timothy +3020494 VE2TLS Mathieu +3020495 VE3RPX Richard +3020496 VA3PPX Richard +3020497 VE3KWN Denis +3020498 VE2OTA Don +3020499 VA3PEN KIHUP +3020500 VA2PBI Pierre +3020501 VE3XDS David +3020502 VE2YAG Remi +3020503 VA3RDO Mark +3020504 VA3RDO Mark +3020505 VE2XLR Daniel +3020506 VE3LC Norman +3020507 VE1FWG Raye +3020508 VE6GIL Gilbert +3020509 VA7TD Gregory +3020510 VA7TD Gregory +3020511 VE9MWO Sylvain +3020512 VE2DKR Douglas +3020513 VE3RYF Donald +3020514 VE3OC Steve +3020515 VE2IAZ Emmanuel +3020516 VE4REM Randy +3020517 VE2JBD Joel +3020518 VE6KID Jason +3020519 VE2KWS Stephane +3020520 VE2KWS Stephane +3020521 VE7SDN Susan +3020522 VE7SDN Susan +3020523 VO1CMT Scouts +3020524 VA7RA Roland +3020525 VE6AFP Philippine +3020526 VA2FPE Francois +3020527 VA2FPE Francois +3020528 VA7GCE Kai +3020529 VE2OFA Jean +3020530 VA2HQT Jean +3020531 VA3NEK Kenneth +3020532 VE3XEJ Eric +3020533 VE2JKY jonathan +3020534 VE3DKW Mark +3020535 VE3CA Cam +3020536 VE7EFK Erland +3020537 VA6ARH Andrew +3020538 VE2JKA Kosta +3020539 VA6DTX Horacio +3020540 VE1PHL John +3020541 VA6DTX Horacio +3020542 VE2VHL Michel +3020543 VA3SNL Michelle +3020544 VE7TXP Douglas +3020545 VE7TXP Douglas +3020546 VA7GCE Kai +3020547 VE2XSM Stephane +3020548 VA2PJT Phillip +3020549 VE2XSM Stephane +3020550 VA3DXV +3020551 VE2MZT Simon +3020552 VE3AB Earl +3020553 VE2CHB Bobby +3020554 VE3LHJ Tom +3020555 VE2CHB Bobby +3020556 VE6RSU Michael +3020557 VE2MBK Marc +3020558 VE3TYZ George +3020559 VE6RSU Michael +3020560 VA3DLO Donald +3020561 VA3DLO Donald +3020562 VE3DKW Mark +3020563 VA3FUR Robert +3020564 VA3KLT Kenneth +3020565 VE2REO Simeon +3020566 VE7MEO Romy +3020567 VA3AQR Gabriel +3020568 VE9CJB Curtis +3020569 VE3NSL Albin +3020570 VE2QLG Gabriel +3020571 VE2REO Simeon +3020572 VE2STG Sebastien +3020573 VA7EIM Clyde +3020574 VA7WLB Wayne +3020575 VA3ALG Al +3020576 VA2KPJ Normand +3020577 VE2SDS Phillip +3020578 VE7LGP Lloyd +3020579 VE7LMZ Carlito +3020580 VE2SQI Remi +3020581 VE3GUT Gregory +3020582 VE3LHJ Tom +3020583 VE3OJN Mel +3020584 VE3QWC Pierre +3020585 VE3PIW Mark +3020586 VE7CYA Ward +3020587 VE7RFB Ronald +3020588 VE3KOQ John +3020589 VA3FBA Burguera +3020590 VA2BN Bernard +3020591 VE2FWE Jean-Francois +3020592 VE3MUU Benny +3020593 VE2ISP David +3020594 VE2AIE Mario +3020595 VE2NNX Nicolas +3020596 VA5DCS Dwaine +3020597 VE7IFA Gary +3020598 VE1PPA James +3020599 VA5DCS Dwaine +3020600 VE5LEN Lenard +3020601 VE4PDX Paul +3020602 VE6FTW Terrence +3020603 VE7RU Ken +3020604 VE7RU Ken +3020605 VA5CDS Caleb +3020606 VE1CAM Chuck +3020607 VA7UL Chuck +3020608 VE7BFM Ronald +3020609 VA4MM Mike +3020610 VA4MM Mike +3020611 VA3MPT Mark +3020612 VE3OZ Sean +3020613 VE3OZ Sean +3020614 VA3MPT Mark +3020615 VE1KLR Martin +3020616 VE3CSD Johannes +3020617 VE3VTH Allan +3020618 VE3VKP Alvin +3020619 VA3NIE David +3020620 VE3KAE Alan +3020621 VA6JDW JD +3020622 VA3FYX Neil +3020623 VE2WGH Richard +3020624 VA5CDS Caleb +3020625 VE3WXK George +3020626 VE2VEM Stephane +3020627 VE6CWK Cameron +3020628 VE3XEJ Eric +3020629 VE2WPT Nick +3020630 VA7EWT Paul +3020631 VA7JBJ Jon +3020632 VE7XY Kevin +3020633 VE7FZJ John +3020634 VE7FZV Cheryl +3020635 VE7JUA Anthony +3020636 VE7JOV David +3020637 VE7NBP Nicandro +3020638 VA3LGG George +3020639 VA3LGG George +3020641 VE7JWK Thomas +3020642 VE7RCZ Ramon +3020643 VE3BDE Gabriel +3020644 VE2XDM Dominique +3020645 VE3BDE Gabriel +3020646 VE3BF Denis +3020647 VE7CTH Brian +3020648 VE2YOG Benoit +3020649 VE1AXQ Malcolm +3020650 VE1WIN Peter +3020651 VA3KC Casey +3020652 VE1AXQ Malcolm +3020653 VE3ESK Eon +3020654 VA6SFE Grant +3020655 VE9RMO Rino +3020656 VE9PKV Pravin +3020657 VE2SPN Sylvain +3020658 VA7ICO Brad +3020659 VA3EZB DSteve +3020660 VA2RUR Club +3020661 VE3OSY David +3020662 VA3OYL Deborah +3020663 VE2MKJ Michel +3020664 VE1DRU Drew +3020665 VA7FUQ Sabi +3020666 VE1KLR Martin +3020667 VA2CW Claude +3020668 VE2FXR Dany +3020669 VE7DGB David +3020670 VE6REN Rennie +3020671 VE7HJH Harvey +3020672 VA7NWA Noah +3020673 VA7ADT Albert +3020674 VE2CJP Jacques +3020675 VY2MP John +3020676 VE3DHT Dan +3020677 VA7DRS DAVID +3020678 VA7KH Steve +3020679 VA7DRS DAVID +3020680 VE1RCC Robert +3020681 VE7LPA JONATHAN +3020682 VE7JLC Lany +3020683 VE7JLC Lany +3020684 VE7LPA JONATHAN +3020685 VE3FRJ Robert +3020686 VE3SYY Charles +3020687 VA2CW Claude +3020688 VE3LDX Pennie +3020689 VA7RAQ Brad +3020690 VE3NAO ByoungSun +3020691 VA2JQT Jean +3020692 VE3BRJ Christopher +3020693 VE7AS Gary +3020694 VA2GGE Gerald +3020695 VE2EBK Dany +3020696 VE3ARD Allan +3020697 VA2BK Dany +3020698 VE1JTF +3020699 VE3LKL Karen +3020700 VE9EJ Jason +3020701 VE2PVP Panagiotis +3020702 VE7QC Bill +3020703 VE3UAB Dale +3020704 VE2NOM Mario +3020705 VE2NOM Mario +3020706 VE7GPM Gereld +3020707 VE3LEX Alexander +3020708 VA2EGD Eric +3020709 VE1ILD Brian +3020710 VE3UAC Sergiy +3020711 VE3NLZ David +3020712 VE3TLI Brian +3020713 VE7GPM Gereld +3020714 VA2NAM Nancy +3020715 VE2NPR Richard +3020716 VE3JMV Donald +3020717 VE2SDS Phillip +3020718 VE2MBT Marc +3020719 VA6TOM Thomas +3020720 VE9CQ Charlie +3020721 VE3FCD James +3020722 VA2EL Eric +3020723 VA2JSJ Jacques +3020725 VE6AVK Johannes +3020726 VA6RTB Royden +3020727 VE9MB Murry +3020728 VE3AVO Pascal +3020729 VE2BTB +3020730 VA2DGQ Denis +3020731 VE2BTB +3020732 VE3NJW William +3020733 VE3RD Phil +3020734 VE1JSO Gerald +3020735 VA2OJP Jean-Philippe +3020736 VA7JSF Jim +3020737 VA1LUN 420hamradio +3020738 VE5TXP Ronald +3020739 VE3XID Jim +3020740 VE7RAG Bishop +3020741 VE6GFZ Guyle +3020742 VA3DNE Daniel +3020743 VE3BTC Worth +3020744 VA6RV Robert +3020745 VE7OJK Oliver +3020746 VA3KJF Kenneth +3020747 VA2SAJ Carl +3020748 VE2WPL Pascal +3020749 VA3IL Charles +3020750 VE3AR Luc +3020751 VE2BTR Claude +3020752 VE7IIJ Jaspal +3020753 VE7RAI Raj +3020754 VE3FNS Michael +3020755 VE2BTR Claude +3020756 VA7ULD Chuck +3020757 VE2CXA Guy +3020758 VE3WTN John +3020759 VE3FDV John +3020760 VO1TR Tolson +3020761 VE2OIM Jean-Francois +3020762 VA3MSV John +3020763 VE3DJE Devon +3020764 VE3XID Jim +3020765 VA7ANT Antonio +3020766 VE6KJL Kevin +3020767 VA6DUD Carson +3020768 VA2HUL Georges +3020769 VE7XH Chris +3020770 VA7PET Peter +3020771 VE2AVJ Richard +3020772 VE3POV John +3020773 VA3GHI Bogdan +3020774 VA3VU Daniel +3020775 VA6LRS Lorne +3020776 VE3KEM Cm +3020777 VE3PUE Neil +3020778 VE3NUZ Richard +3020779 VE5RS Ron +3020780 VA7XHB Horace +3020781 VE3EAP Robert +3020782 VE3EAP Robert +3020783 VE2PEL Martin +3020784 VA3OL William +3020785 VA2CHQ Christian +3020786 VA6LRS Lorne +3020787 VE2ARQ alain +3020788 VE7GIE Jeff +3020789 VA3CMM Cory +3020790 VA7LET Hiroshi +3020791 VE3PNO Mike +3020792 VA2VEC Reginald +3020793 VE2GFY Robert +3020794 VE1JES Joe +3020795 VE3PHZ James +3020796 VA3NKE Christian +3020797 VE2ERB Eric +3020798 VE9NF Josh +3020799 VA3FYX Neil +3020800 VA2TOL DECARIE +3020802 VE7WAZ Rodante +3020803 VA3ONN Ray-Allen +3020804 VA2SKP Steve +3020805 VA3CNT Gabe +3020806 VE3OHN John +3020807 VA6BB Bohdan +3020808 VE3MPV Rejean +3020809 VE7ALR Stephan +3020810 VA2XJM Jean-Michel +3020811 VE6BRW Brian +3020812 VE3ELB Vince +3020813 VA2KPJ Normand +3020814 VE9MO Malcolm +3020815 VE2AUB Jos +3020816 VE3XPG Matt +3020817 VA3BNR Luc +3020818 VE3ZRD Phil +3020819 VE2BLT Donald +3020820 VE8CK Clifford +3020821 VE7SSX Simon +3020822 VA3LZY Georges +3020823 VE3XCM Christopher +3020824 VE3YST Frank +3020825 VE3ZFT Curtis +3020826 VE3YST Frank +3020827 VE3HJP ROBERT +3020828 VE6CAP Frederick +3020829 VA7DBJ Dave +3020830 VA6MEX Manuel +3020831 VA7MIA Stephen +3020832 VA6CQB Brodie +3020833 VA6TNA Troy +3020834 VE3XOX Bill +3020835 VA7XAR Anthony +3020836 VA7SJO Stephanie +3020837 VE6CMH Chad +3020838 VE3JUE Joe +3020839 VE7BAZ Michael +3020840 VE7KNL Clinton +3020841 VE7KNL Clinton +3020842 VE2KG Richard +3020844 VE3OEN Nick +3020845 VE3RIA Andrew +3020846 VA3OSL Tahir +3020847 VE3CNO Gary +3020848 VE3KRL Keith +3020849 VE3PAB Peter +3020850 VE3CGR Ron +3020851 VE6NTU Claudio +3020852 VE7DYJ Daniel +3020853 VA3KRW Kyle +3020854 VA2NA Guillaume +3020855 VE3LUM Gordon +3020856 VA3KRW Kyle +3020857 VE6TIV Garry +3020858 VE7FDU Ralleca +3020859 VA3HC Mark +3020860 VE7GYP Gerry +3020861 VE3MAL Jason +3020862 VE3GTX John +3020863 VE2RRZ +3020864 VA2UN Stephane +3020865 VA2UN Stephane +3020866 VA6CYA Ernie +3020867 VA2CCI Claude +3020868 VA2NPR Carole +3020869 VA6CP ceasar +3020870 VE3WKG Kevin +3020871 VA6WM Michel +3020872 VE3SWN Svend +3020873 VE7RMY Romulo +3020874 VA7SJT Stewart +3020875 VA3GLJ Gregory +3020876 VE9PO Pierre-Olivier +3020877 VE2RPY Yohan +3020878 VE2LKC John-Robert +3020879 VE2YFM Remi +3020880 VE2YUC Martin +3020881 VA7EZ Terry +3020882 VE2BMZ Richard +3020883 VE2LFI Alain +3020884 VE3CSY Paul +3020885 VA2SN Sebastien +3020886 VE6GEB Gordon +3020887 VE6JR Juergen +3020888 VE3QU Scott +3020889 VA2JMC Carl +3020890 VA3GFI Georgette +3020891 VA2GLJ Gilles +3020892 VA3DCB Denis +3020893 VA3DRK Donald +3020894 VE3ZZM Greg +3020895 VE3GID Francois +3020896 VA6NDW Nicholas +3020897 VE2RFS Roger +3020898 VE2XI Jean +3020899 VE2QMS Martin +3020900 VA2IAA Donald +3020901 VE7MA Malcolm +3020902 VE2KZ Pete +3020903 VE2YTY Jean-Francois +3020904 VA7AWL +3020905 VA3GJB Gilles +3020906 VA3IPB Dwayne +3020907 VE2TSX Andre +3020908 VE3TZG Gordon +3020909 VE7NKA Cameron +3020910 VE2FSB Louis +3020912 VE3IST Joravarsinh +3020913 VE7UQ Shawn +3020914 VE3EB Eric +3020915 VE2RKC Michel +3020916 VA2ISB Sylvain +3020917 VE3IBW Brian +3020918 VA2ZEB Jocelyn +3020919 VE7GEU David +3020920 VA3WZN Reginald +3020921 VA7KRY Jeremiah +3020922 VE9DCI Daniel +3020923 VA2MQM Michel +3020924 VE7YEN Richard +3020925 VE3MMX Michael +3020926 VA2SRR Steve +3020927 VE2SQR Serge +3020928 VA2DJH jessy +3020929 VE3ETU Christian +3020930 VA2TAA Rachel +3020931 VA2IMG Michel +3020932 VA7JML JM +3020933 VE3HMJ David +3020934 VA7GUR Gursimran +3020935 VE1DPG David +3020936 VE2MMW Mario +3020937 VA6VSR Roman +3020938 VA2SJM Stephane +3020939 VE7BQM Edward +3020940 VE2WER Andre +3020941 VE3WVJ William +3020942 VE3ETE Robert +3020943 VE2YNZ Yvan +3020944 VA4SRK Steven +3020945 VE3RKY Richard +3020946 VE9WIN +3020947 VA2REM Remi +3020948 VA2MVY Michel +3020949 VE3VAV David +3020951 VE2KAH Roger +3020952 VE6KAG Gerhard +3020953 VE6KAG Gerhard +3020954 VA7ION Ion +3020955 VE3WVJ William +3020956 VE7GEU David +3020957 VE7WXZ Allan +3020958 VE2CH Richard +3020959 VE2WRH Wayne +3020960 VA2HIV Marc +3020961 VA7ION Ion +3020962 VA3BFP Amadeu +3020963 VA3BFP Amadeu +3020964 VA3KV Jim +3020965 VA7HDT Andrew +3020966 VE7UHS Robert +3020967 VE3KBU Victor +3020968 VA7MWW Martin +3020969 VA2BUJ Johanne +3020970 VA6IAB Ian +3020971 VA3BAH Brian +3020972 VA2RTE Eric +3020973 VE1CK Cory +3020974 VA3MD Michael +3020975 VA7GL Don +3020976 VE2FCR Leo +3020977 VA3MD Michael +3020978 VA7OPD James +3020979 VE6XMB Robert +3020980 VE9GSB Gary +3020981 VA2WG Dragomir +3020982 VA3TTQ +3020983 VE2GPM Pierre +3020984 VA2CNE Cedric +3020985 VE3EFF Jeff +3020986 VA7BIJ Rene +3020988 VA2ADW Roland +3020989 VA7EFZ Scott +3020990 VE7KI Michael +3020991 VA3UV Ramesh +3020992 VA2KRI Christian +3020993 VE2ASU Jean-Francois +3020994 VE2ASU Jean-Francois +3020995 VA7EFZ Scott +3020996 VE7CWS Walt +3020997 VA3RUK Roberto +3020998 VA3RER Erik +3020999 VA3SXT Ralph +3021000 VE2GSB Serge 3021001 VE1ZB Mike 3021002 VE1ZB Mike 3021003 VE1EJB Joe @@ -55023,11 +67571,376 @@ 3021043 VA1IVY Ivan 3021044 VE1LAU Laurie 3021045 VE1LAU Laurie +3021046 VE1GFX Greg +3021047 VA2MVR Mathieu 3021048 VE1CHL Scott 3021049 VA1MRT Matthew 3021050 VE1QCF Darren 3021051 VE1XP George 3021052 VE1CHI James +3021053 VE3TLC Terry +3021054 VA7BSS Baljit +3021055 VA7BSS Baljit +3021056 VA1CJC chris +3021057 VE7CWS Walt +3021058 VA1CJC chris +3021059 VA3TD David +3021060 VA3TD David +3021061 VA7ATI Tom +3021062 VE3PHV Patrick +3021063 VE7KI Michael +3021064 VA3XJP Jacques +3021065 VA3SPH Stephen +3021066 VE3AMN Alexander +3021067 VA3SPH Stephen +3021068 VE3EPJ Earl +3021069 VE2ZT Andre +3021070 VA7DRO Dan +3021071 VE3ZSB Sebastiano +3021072 VE3KFL Tony +3021073 VE3KFL Tony +3021074 VE3ZSB Sebastiano +3021075 VA3OME Omemmee +3021076 VA3PGS Lou +3021077 VE7YLA Laurie-Anne +3021078 VE7EIA Ronald +3021079 VE3YDK Douglas +3021080 VA3ASZ Anthony +3021081 VE7MHE Mike +3021082 VE3IU Richard +3021083 VA7UTC STEAVE +3021084 VA6WV Jun +3021085 VA7NEG Nick +3021086 VA2WLT Walter +3021087 VE1RSJ Scott +3021088 VE1RSJ Scott +3021089 VA3WXR Rob +3021090 VA3DGA David +3021091 VE6AMC Michael +3021092 VE7WAE Arthur +3021093 VA3OBO Mark +3021094 VE6BGL Wallace +3021095 VA3GF Norman +3021096 VE6SRP David +3021097 VA3AOQ Philip +3021098 VE3BSB James +3021099 VA2CZ Pierre +3021100 VE3BSB James +3021101 VE2IR Donald +3021102 VE2GSB Serge +3021103 VA3JF James +3021104 VA2SI Richard +3021105 VE3UID Sean +3021106 VA6CMB Christopher +3021107 VA6RMO Rainer +3021108 VE9DAR Ian +3021109 VA3TH Seung +3021110 VE7IOR Paul +3021111 VA2DN Daniel +3021112 VA2PHK Patrick +3021113 VE3DS Dana +3021114 VE4NW Albert +3021115 VE4NW Albert +3021116 VE2XJF Stephane +3021117 VE3WXZ Scott +3021118 VE3MJM Donald +3021119 VE7LLW Les +3021120 VE3SYK Charlie +3021121 VE7XRN Matthew +3021122 VA2AID Adlene +3021123 VE2SGR Gilles +3021124 VA3XEP Sergey +3021125 VA3IHI Barry +3021126 VE6USX Aaron +3021127 VE3PYM Peter +3021128 VE1CYP Alan +3021129 VO1IDX Chris +3021130 VO1IDX Chris +3021131 VE3POU Mathieu +3021132 VE3QSO Gerald +3021133 VE3QBR Cody +3021134 VA2AYA Anthony +3021135 VA7MVO Max +3021136 VE3VLM Lee +3021137 VE2TWL Denis +3021138 VE3HIS Anthony +3021139 VE3CSZ Christopher +3021140 VE3GFX Philip +3021141 VA2CJ Patrick +3021142 VE3WR C +3021143 VA7JOV Jovan +3021144 VE7IDQ Garry +3021145 VE3STQ Roman +3021146 VE6MKD Michael +3021147 VE3VNF David +3021148 VE7JWS John +3021149 VA3LBN Leonard +3021150 VA4JF Jerry +3021151 VE7KTX Chris +3021152 VE6KKD Keith +3021153 VA7LSS Lukas +3021154 VY2HF Brent +3021155 VA7MTK +3021156 VE3CGR Ron +3021157 VA2OR Pierre +3021158 VA7MDF Michael +3021159 VA7MDF Michael +3021160 VE2NTM Martin +3021161 VA3WRA William +3021162 VE3UIX Robin +3021163 VE6CW Ricky +3021164 VE6PK Dwight +3021165 VA2DRT Rene +3021166 VE3LSO Leigh +3021167 VE3LDY Louella +3021168 VE2JMY Marcel +3021169 VE2JMY Marcel +3021170 VE2GPX Gilbert +3021171 VA2NBZ Marc +3021172 VE3JFN Jeffrey +3021173 VA3RGS Rudy +3021174 VE7WEA Jacob +3021175 VE7WEA Jacob +3021176 VE3SFP Sean +3021177 VE4TSY Paul +3021178 VE7CQE Charles +3021179 VE3DGE Donald +3021180 VE3NNI Joseph +3021181 VE7IJQ Brian +3021182 VE3BB John +3021183 VE3BB John +3021184 VE7KRN Karen +3021185 VA2AOU Alain +3021186 VA2SI Richard +3021187 VE2UVC Michel +3021188 VA7WNC Angela +3021189 VE2ODB Daniel +3021190 VA7NSH Jared +3021191 VE7HKQ Raymond +3021192 VE6TD Dann +3021193 VE9GH Glen +3021194 VE7XX Martin +3021195 VE2OSK Jean +3021196 VE7MOY Stacie +3021197 VE2OSK Jean +3021198 VE7LWK Lorne +3021199 VE9CDL Cindy +3021200 VE3LVV Ron +3021201 VE3GSX Gregory +3021202 VE3GSX Gregory +3021203 VO1TWR Sheldon +3021204 VE3SEP Ronald +3021205 VE3YTB Thomas +3021206 VA7IE Juan +3021207 VA7EC Raymond +3021208 VE6HY John +3021209 VE3AHK Ronald +3021210 VE6AIA Robert +3021211 VA3UEC Brandon +3021212 VA3UEC Brandon +3021213 VE3GNP Garnet +3021214 VE2KRA Kenneth +3021215 VA3SMM Stan +3021216 VE6ALS Doug +3021217 VA6BH Bernard +3021218 VE9LEG Marc +3021219 VA6BH Bernard +3021220 VE3OZW Richard +3021221 VA6VX Doug +3021222 VE1GMP Gary +3021223 VA2SIM Simeon +3021224 VE2AXS Mario +3021225 VA7RPE Rob +3021226 VE6WSO Gene +3021227 VE7TCD Barry +3021228 VA6CMB Christopher +3021229 VE7KED Michael +3021230 VE7NCD Nicholas +3021231 VA7VAE Isaac +3021232 VA6CDZ Ondrej +3021233 VE7HKW Calvin +3021234 VE7HKW Calvin +3021235 VE3ZX Ron +3021236 VE7YDA Robert +3021237 VE2MTK Martin +3021238 VE3OZW Richard +3021239 VE3IDO Frank +3021240 VA2AXM Alex +3021241 VE3INP Ian +3021242 VE2YCC Yves +3021243 VE7ER Arthur +3021244 VE3MNX Kyle +3021245 VE3MNX Kyle +3021246 VE2FEP Jacques +3021247 VE3SAB Steven +3021248 VE6CCL Robert +3021249 VE2VS Michel +3021250 VE3ENU George +3021251 VA3JCD Clifford +3021252 VE3JCT Jocelyn +3021253 VA1BOB Robert +3021254 VE3DOA Rob +3021255 VA6DE David +3021256 VE2SUS Shawn +3021257 VE3EPN Eric +3021258 VA3SAX Steven +3021259 VA3LO Philip +3021260 VE6DWH David +3021261 VA2LMK Luc +3021262 VE2JTR Jean +3021263 VE2RYZ Jean +3021264 VE1DEW Donald +3021265 VA7FD Ryan +3021266 VE2LLJ Jean +3021267 VA3HP Gary +3021268 VE3UI Edison +3021269 VE3UI Edison +3021270 VA5EIS Jim +3021271 VA6CCB Colin +3021272 VE7VJA Jay +3021273 VA7JLU Jean-Luc +3021274 VA4KAW Ken +3021275 VE3TCO Tanner +3021276 VA3IDS David +3021277 VA3EMJ Edward +3021278 VE3SQT Richard +3021279 VE3RWJ Chris +3021280 VE2KEZ Jacques +3021281 VE3DHR David +3021282 VA3NOY Rene +3021283 VE6PKW Paul +3021284 VA2BRK Jacques +3021285 VA2BRK Jacques +3021286 VE4XE Dennis +3021287 VE7PAW Patricia +3021288 VA3BUF Donald +3021289 VE9CKR Robert +3021290 VE3ILN Jason +3021291 VE9IU Michael +3021292 VE9DAS David +3021293 VA3IXQ Jae +3021294 VE3IXQ Joung +3021295 VA3AQW Steven +3021296 VE2CTI Charles +3021297 VE3CVS Guenther +3021298 VE2CTI Charles +3021299 VE3OSV Mich +3021300 VE4CCR Chance +3021301 VE1CSE Robert +3021302 VA2CT Claude +3021303 VE3CBR Alan +3021304 VA3RPK Alex +3021305 VA6KEK Tyler +3021306 VE2AAZ ROBERT +3021307 VA7EEE Michael +3021308 VE3SJL Nikola +3021309 VA3MMF Michael +3021310 VA3MMF Michael +3021311 VE3UT Steve +3021312 VE3NGV Ron +3021313 VE7KXZ Joshua +3021314 VA3SB Serge +3021315 VA3KFF Kirt +3021316 VA7LFT David +3021317 VE9ADV Jean-Pierre +3021318 VE3ERY James +3021319 VE3ERY James +3021320 VA3EGY Roger +3021321 VA3BOZ John +3021322 VE3EGA Terence +3021323 VE3TSJ Jason +3021324 VE9PAX Patrick +3021325 VE3TSJ Jason +3021326 VE3XYD Slawomir +3021327 VE3XYD Slawomir +3021328 VE3ZZT Bernie +3021329 VE2XM Roger +3021330 VA3DQ Frank +3021331 VE4CA Rob +3021332 VE4CA Rob +3021333 VA3BUF Donald +3021334 VE2NAX Noel-Andre +3021335 VE3RJG Ronald +3021336 VE7WEX Robbie +3021337 VE4SW Stefan +3021338 VA2TWC Jean-Paul +3021339 VE7GBH Gordon +3021340 VA3MXY Kyle +3021341 VE2KZP Jean-Francois +3021342 VA3AMK +3021343 VA3EDU Eduardo +3021344 VE7LTV +3021345 VE3WGF Wayne +3021346 VA6DBS Donald +3021347 VE5SS Grant +3021348 VE3CTS James +3021349 VE3CTS James +3021350 VE3ZBM Blair +3021351 VE7TFM Theodore +3021352 VO1AJR Adam +3021353 VA7AWX Al +3021354 VE3TPX Timothy +3021355 VE4VD Garry +3021356 VA3JBL Jose +3021357 VA2JTN Jonathan +3021358 VE4SS Lawrence +3021359 VE3ICC Ian +3021360 VE3IRQ Brendan +3021361 VA7SOO Larry +3021362 VE7OK Oswald +3021363 VA6DCB David +3021364 VE7GJK Gerald +3021365 VA3MOT Manuel +3021366 VA7KMG Paul +3021367 VA7KMG Paul +3021368 VE3FOD Greg +3021369 VE2OFA Jean +3021370 VE3OIC Eric +3021371 VE7NZT Nicola +3021372 VE2ZBZ Stephane +3021373 VE7NZT Nicola +3021374 VA2XRR Jess +3021375 VO1KJG Kody +3021376 VE3RUL Daniel +3021377 VE3PCD Peter +3021378 VE7WSO Wade +3021379 VE6OG Les +3021380 VE3OLB Leonard +3021381 VA2VAK Daniel +3021382 VE2EAJ Patrice +3021383 VE2EAJ Patrice +3021384 VE9TNT Douglas +3021385 VE3HJK Robert +3021386 VA3WAH Wm +3021387 VE2CB Richard +3021388 VA2ZEE Lucie +3021389 VA7RTO Gregory +3021390 VA6CDG Craig +3021391 VE4AJ Calvin +3021392 VE2GXY Yves +3021393 VE2WES Sylvain +3021394 VA3HPR Roger +3021395 VE9TIC Ivan +3021396 VA2ONE Andrew +3021397 VE9BG Gary +3021398 VA7DLC Mark +3021399 VE7TCD Barry +3021400 VE4AHN Kevin +3021401 VE3NMD Daren +3021402 VA3EDU Eduardo +3021403 VA3RIW Brandon +3021404 VE6IDK Sven +3021405 VE7DSS James +3021406 VA3SRU Charles +3021407 VA3KHS Haksoo +3021408 VA3SRU Charles +3021409 VA6VCJ James +3021410 VE7AFW Horst +3021411 VA3PTZ Petri +3021412 VA6VCJ James +3021912 VE7LLW Les +3021913 VA3UV Ramesh +3021914 VA2AYA Anthony 3022000 VA2XPR 3022001 VA2TDF Daniel 3022002 VE2NBZ Eric @@ -55040,7 +67953,7 @@ 3022009 VE2NY Denis 3022010 VE2EKL Mario 3022011 VE2DPF Jacques -3022012 VE2SE Jean-pierre +3022012 VE2SE Special 3022013 VA2RK Tom 3022014 VE2UAL Alexis 3022015 VE2EAL Jacques @@ -55065,8 +67978,8 @@ 3022034 VA2SPB Alain 3022035 VE2ZC Daniel 3022036 VA2NZ Bruce -3022037 VE2BHH -3022038 VE2BHH +3022037 VE2BHH Gunther +3022038 VE2BHH Gunther 3022039 VE2JBD Joel 3022040 VE2BRA Vincent 3022041 VE2ZHP Janusz @@ -55089,7 +68002,7 @@ 3022058 VE2LDB Denis 3022059 VE2LVA Luc 3022060 VE2LVA Luc -3022061 VE2FJZ +3022061 VE2FJZ Luc 3022062 VE2DWE Luc 3022063 VE2DRO Robin 3022064 VE2AHG Michel @@ -55121,29 +68034,29 @@ 3022090 VE2GQF Gilles 3022091 VE2MQF Michelle 3022092 VE2STE Stephane -3022093 VE2SE Jean-pierre +3022093 VE2SE Special 3022094 VA2PV Pascal 3022095 VE2JOS Jose 3022096 VE2RI Rene -3022097 VE2SE Jean-pierre +3022097 VE2SE Special 3022098 VA2PSL Steve 3022099 VE2PVR Pascal 3022100 VA2FP Fabrizio -3022101 VE2FIW Rmi +3022101 VE2FIW Remi 3022102 VE2MKR Martin 3022103 VA2FPI Fabrizio 3022104 VE2TXD Mario 3022105 VE2MF Mario 3022106 VE2MF Mario 3022107 VE2AHD Jean-pierre -3022108 VA2UF Andr +3022108 VA2UF Andre 3022109 VE2MEL Eric 3022110 VE2RLB Eric 3022111 VE2RQA Eric -3022112 VA2SS Jean +3022112 VA2SS Jeff 3022113 VE2MSW Michel 3022114 VE2QE Drien -3022115 VE2SEW Jean +3022115 VE2SEW Jean-Pierre 3022116 VE2ZVL Martin 3022117 VE2ZVL Martin 3022118 VA2ERN Jean-francois @@ -55168,7 +68081,7 @@ 3022137 VE2VL Julien 3022138 VA2KK Jean-pierre 3022139 VE2LGX Gerald -3022140 VE2XC Grald +3022140 VE2XC Gerald 3022141 VE2ADA Gerard 3022142 VA2HET Luc 3022143 VE2JE Jean @@ -55193,7 +68106,7 @@ 3022162 VA2XE Bram 3022163 VE2EC Frederic 3022164 VA2HOM Pascal -3022165 VE2JKA Konstantinos +3022165 VE2JKA Kosta 3022166 VE2TPI Alain 3022167 VE2CSN Jean 3022168 VA2RDK Robert @@ -55211,7 +68124,7 @@ 3022180 VE2XEN Eric 3022181 VE2ZMB Mario 3022182 VA2BLV John -3022183 VA2RN Ren +3022183 VA2RN Rene 3022184 VE2PQO Alexander 3022185 VA2VAZ Jean 3022186 VE2ITX Rolf @@ -55237,7 +68150,7 @@ 3022206 VE2ZBR Paul-Emile 3022207 VE2AEE Denis 3022208 VE2SK Martin -3022209 VE2FJZ +3022209 VE2FJZ Luc 3022210 VA2IR Ian 3022211 VA2IR Ian 3022212 VE2KE Robert @@ -55271,7 +68184,7 @@ 3022242 VE2BN Pierre 3022243 VE2LMH Hubert 3022244 VE2GDR Raynald -3022245 VE2MKJ Sa +3022245 VE2MKJ Michel 3022246 VE2BLT Donald 3022247 VE2MKE Michel 3022248 VE2GXC Guillaume @@ -55327,7 +68240,6 @@ 3022300 VE2PCF Pierre 3022301 VE2DRO Robin 3022302 VE2YU Clifford -3022303 VA2SIM Simeon 3022304 VE2MFP Michel 3022305 VE2ZME Marcel 3022306 VE2PQP Patrick @@ -55335,7 +68247,7 @@ 3022308 VE2AAC Leonard 3022310 VE2BUS Denis 3022311 VA2AEC Andre -3022312 VE2SNA Andr +3022312 VE2SNA Andre 3022313 VE2EHP Edgar 3022314 VE2STE Stephane 3022315 VA3TE Edward @@ -55390,7 +68302,7 @@ 3022365 VE2RFI Charles 3022366 VE2TTA Francois 3022367 VA2AUS Jeffrey -3022368 VE2DJE Joseph +3022368 VE2DJE Richard 3022369 VE2NAS Nassef 3022370 VE2TBQ Berthelin 3022371 VE2JFP Jacques @@ -55405,11 +68317,11 @@ 3022380 VE2GRE Rejean 3022381 VE2EM Michel 3022382 VA2DIS Benoit -3022383 VE2GW George +3022383 VE3GWT George 3022384 VA2WAL William 3022385 VE2VSB Vincent 3022386 VE2EGY Hans -3022387 VE2DJE Joseph +3022387 VE2DJE Richard 3022388 VE2NFX Norman 3022389 VE2FXO Charles 3022390 VA2RTP Bessette @@ -55431,7 +68343,7 @@ 3022407 VA2JMR Jean-Marc 3022408 VE2USO Daniel 3022409 VA2USO Daniel -3022410 VE2FLE FranOis +3022410 VE2FLE FrancOis 3022411 VE2WLP Frederick 3022412 VA2WEM Eric 3022413 VE2BUL Andre @@ -55467,7 +68379,6 @@ 3022443 VE2EIM Serge 3022444 VA2LOJ Jonathan 3022445 VA2STK Michel -3022446 VE2AIU Alex 3022447 VE2MSS Serge 3022448 VE2BUJ Alain 3022449 VE2LRE Remi @@ -55486,7 +68397,6 @@ 3022462 VE2FRL Fernand 3022463 VA2VM Michel 3022464 VA2EC Eric -3022465 VE2OSR Steve 3022466 VE2ECL Jean-Luc 3022467 VE2GEJ Germain 3022468 VE2DDT Michel @@ -55522,7 +68432,7 @@ 3022498 VE2AH Pierre 3022499 VE2HAQ Renaud 3022500 VE1DXO Nicolas -3022501 VE2XPR Paul-Mile +3022501 VE2XPR Paul-EMile 3022502 VE2VIT Guy 3022503 VE2IXO Philippe 3022504 VE2DFD Wayne @@ -55540,7 +68450,7 @@ 3022516 VA2SAT Michel 3022517 VA2SG Jean-Pierre 3022518 VA2BMM Daniel -3022519 VE2CQY Andr +3022519 VE2CQY Andre 3022520 VE2CEC Francois 3022521 VA2ETV Etienne 3022522 VE2SSX Stephane @@ -55556,7 +68466,7 @@ 3022532 VA2HY Hy 3022534 VE2EMZ Dany 3022535 VA2ZDL Daniel -3022536 VE2TAA Andr +3022536 VE2TAA Andre 3022537 VE2UY Roy 3022538 VA2CPJ Jean-Pierre 3022539 VA2HY Hy @@ -55673,7 +68583,6 @@ 3022676 VE2EQQ Germain 3022677 VA2ZIO Isabelle 3022678 VE2EEG Clermont -3022679 VE2CXM Mario 3022680 VE2CXM Mario 3022681 VA2JPI Jean 3022682 VA2AHD Andre @@ -55730,7 +68639,7 @@ 3022743 VE2XF Mario 3022744 VA2BAE Juan 3022745 VA2BAE Juan -3022747 VE2KGK Kenneth +3022747 VE2KGK Ken 3022748 VE0JPF Juan 3022749 VE2FLJ Juan 3022750 VE2HLM Philippe @@ -55752,7 +68661,7 @@ 3022767 VA2MSZ Michel 3022768 VE2DQB Jean 3022769 VE2CNS Michel -3022770 VE2CTG GaTan +3022770 VE2CTG Gaetan 3022771 VE2SLM Michel 3022772 VE2MWE Michel 3022774 VE2CNS Michel @@ -55768,7 +68677,6 @@ 3022784 VE2SKG Dominique 3022785 VE2TEZ Maxim 3022787 VE2QJB Jacques -3022789 VE2HUL Georges 3022790 VA2EYZ Jacques 3022791 VE2BWL Guy 3022792 VA2AGW Andre @@ -55789,7 +68697,7 @@ 3022810 VE2SZE Suzan 3022811 VA2OML Melanie 3022815 VE2IKT Valerie -3022816 VE2RRZ Zello +3022816 VE2RRZ 3022817 VE2IJP Martin 3022818 VA2SEH Steve 3022819 VA2DFK David @@ -56113,7 +69021,7 @@ 3023244 VE3SSV Phillip 3023245 VA3YFU Jeremy 3023246 VA3YFU Jeremy -3023247 VA3FTC Tejay +3023247 VA3FTC Thomas 3023248 VE3XRE Valens 3023249 VE3LIZ Goslin 3023250 VE3ZRN Robert @@ -56188,8 +69096,7 @@ 3023319 VA3FLC Mark 3023320 VE3HTU Richard 3023321 VA3FLC Mark -3023322 VE3XCN Jon -3023323 VA3NEG Jon +3023322 VA3RQ Jon 3023324 VE3AEP Domenic 3023325 VE3DLK Kim 3023326 VA3TAL Joe @@ -56231,7 +69138,7 @@ 3023362 VE3XLD Lawrence 3023363 VE3XLD Lawrence 3023364 VA3YM Kevin -3023365 VE3ISS Tom +3023365 VE3ISS Lenny 3023366 VE3GCM Greg 3023367 VE3JLC James 3023368 VE3RHZ Richard @@ -56240,7 +69147,7 @@ 3023371 VA3XLD Lawrence 3023372 VA3TJS Timothy 3023373 VA3SII Simon -3023374 VE3ELB Vincent +3023374 VE3ELB Vince 3023375 VA3XJL John 3023376 VE3ZBT Greg 3023377 VE3TPZ James @@ -56258,7 +69165,7 @@ 3023390 VE3ACW Michael 3023391 VA3RDI Andre 3023392 VA3KRS Kenneth -3023393 VA3SV Serafino +3023393 VA3SV 3023394 VA3RIA Rene 3023395 VE3XSH Christian 3023396 VA3DGN Tyler @@ -56361,7 +69268,7 @@ 3023494 VE3VKS Ron 3023495 VA3CMP Joseph 3023496 VA3DXV -3023497 VE3BGX +3023497 VE3BGX OJE-Link 3023498 VE3FXY Peter 3023499 VE3YUV Geoffrey 3023500 VE3GS Alejandro @@ -56556,8 +69463,6 @@ 3023694 VE3VDK Joseph 3023695 VE3SCP Scott 3023696 VA3HP Gary -3023697 VE3SLA Slava -3023698 VE3SVE Sveta 3023699 VA3SU Kevin 3023700 VA3XLT Adam 3023701 VA3BVP Ben @@ -56658,7 +69563,6 @@ 3023796 VE3WLL William 3023797 VA3TO Hugh 3023798 VE3DXG Derek -3023799 VE3RD Philip 3023800 VE3RVQ Rylan 3023801 VA3STU Stuart 3023802 VA3AFX Benjamin @@ -56718,7 +69622,7 @@ 3023859 VE3VMJ Michael 3023860 VE3JPS Ronald 3023861 VA3EPZ Scott -3023862 VE3PHC Kenneth +3023862 VE3PHC Ken 3023863 VE3BI Robin 3023864 VE3YZN Ludwig 3023865 VA3EAW Ezra @@ -56766,7 +69670,6 @@ 3023908 VA3BMY Albert 3023909 VE3MZI Alex 3023910 VE3OHF Stephen -3023911 VE3LUM Gordon 3023912 VE3KTB Pierre 3023913 VE3CFS Gilbert 3023914 VA3DZZ Albert @@ -56807,7 +69710,7 @@ 3023951 VE3OXU Christopher 3023952 VE3SBR Brent 3023953 VA3NMT Nebojsa -3023954 VE3RD Philip +3023954 VE3RD Phil 3023955 VE3ORF Link 3023956 VA3KCP Ian 3023958 VE3UAB Dale @@ -56850,10 +69753,8 @@ 3023997 VE3RWN Randolph 3023998 VE2SEN Stephane 3023999 VE3MHL Michael -3024001 VE4RRB Rob -3024002 VE4RRB Rob -3024003 VE4AI Shaun -3024004 VE4AI Shaun +3024001 VE4CA Rob +3024002 VE4CA Rob 3024005 VE4RBH Robert 3024006 VE4ETC Brian 3024007 VE4RBH Robert @@ -56890,8 +69791,6 @@ 3024038 VE4DPR Daniel 3024039 VE4EBG Josh 3024040 VE4ZIM Kevin -3024041 VE4AMW Albert -3024042 VE4NW Albert 3024043 VE4VR William 3024044 VE4GWB Garth 3024045 VE4PLC Philip @@ -56909,7 +69808,7 @@ 3024057 VE4YYL Roswitha 3024058 VE4RF Ulrich 3024059 VE4AWN Russell -3024060 VE4KGK Kenneth +3024060 VE4KGK Ken 3024061 VE4AWN Russell 3024062 VE4BEF Bill 3024063 VE4PEH Patricia @@ -56917,14 +69816,14 @@ 3025001 VE5RS Ron 3025002 VE5DWR Devon 3025003 VE5XEF Bob -3025004 VA5LD Lawrence +3025004 VA3IQ Lawrence 3025005 VE5RNP Powell 3025006 VE5UO Dave 3025007 VA5LF Sean 3025008 VE5RLG Rick 3025009 VE5CTM Clayton 3025010 VE5SG Garry -3025011 VE5EIS Jim +3025011 VE5EV Jim 3025012 VE5EN Garry 3025013 VE5NS Bob 3025014 VE5MIK Michael @@ -56938,7 +69837,7 @@ 3025022 VE5ZAG Trevor 3025024 VE5LPL Keaton 3025025 VE5LPC Christopher -3025026 VE5EV Jim +3025026 VE5EIS Jim 3025027 VE5KLS Kevin 3026001 VA6IP Kiernan 3026002 VE6GG Kerry @@ -57007,11 +69906,9 @@ 3026065 VE6BRJ Barry 3026066 VA6KRK Kelly 3026067 VA6CPK Dale -3026068 VA6JT Jose 3026069 VE6PTE Pierre 3026070 VA6CJC Chris 3026071 VE6EVC Eugene -3026072 VA6JT Jose 3026073 VE6EFR Jeff 3026074 VE6AB Jerry 3026075 VE6PWJ Albert @@ -57170,6 +70067,7 @@ 3026237 VA6BLK Arnold 3026238 VA6BKX Colin 3026239 VE6KJM Kevin +3026240 VE6TGM Tyler 3026241 VE6STV Stephen 3027001 VE7NWX Emcomm 3027002 VE7NWX Emcomm @@ -57195,8 +70093,8 @@ 3027022 VE7SSV 3027023 VE7WV Michael 3027024 VE7ZAW Susan -3027025 VA7XJC J -3027026 VA7XJC J +3027025 VA7XJC James +3027026 VA7XJC James 3027027 VA7VU Wes 3027028 VA7NY Pj 3027029 VA7BC Greg @@ -57208,10 +70106,10 @@ 3027035 VE7MDT David 3027036 VE7MDT David 3027037 VE7QJ Earl -3027038 VA7RX Rick +3027038 VE7LF Rick 3027039 VA7DDP Deven 3027040 VE7XTT Kim -3027041 VA7XP Pedro +3027041 VE7LO Pedro 3027042 VA7IF Alex 3027043 VA7RCA Ernie 3027044 VC7SJAM Delta @@ -57223,7 +70121,7 @@ 3027050 VA7TMD 3027051 VE7VFL Jeff 3027052 VE7MCC Vern -3027053 VA7XP Pedro +3027053 VE7LO Pedro 3027054 VE7IKX Bill 3027055 VE7FKY Gordon 3027056 VA7EEX David @@ -57275,7 +70173,7 @@ 3027102 VA7EOC 3027103 VA7DME Donna 3027104 VA7TI J -3027105 VA7XJC J +3027105 VA7XJC James 3027106 VE7PJG Patrick 3027107 VE7ISH Scott 3027108 VE7FFP Robin @@ -57374,7 +70272,7 @@ 3027206 VA7CVE Ethan 3027207 VE7FSR Myles 3027208 VA7WY Randolph -3027209 VA7WD Walter +3027209 VE7WCQ Walter 3027210 VE7IF Warren 3027211 VE7BR Bernard 3027212 VE7HXD Robert @@ -57432,7 +70330,7 @@ 3027265 VE7HSK Stephen 3027266 VE7JF William 3027267 VE7SIG 744 -3027268 VA7RX Rick +3027268 VE7ABW Rick 3027269 VE7SJA St 3027270 VA7XJ Russel 3027271 VA7RKC Rick @@ -57446,7 +70344,7 @@ 3027279 VE7AGU Donald 3027280 VA7IOX David 3027281 VE7IOX David -3027282 VE7GIE Jeffrey +3027282 VE7GIE Jeff 3027283 VE7SIC Dave 3027284 VA7KLV Leonard 3027285 VE7WM Kal @@ -57490,7 +70388,7 @@ 3027326 VE7CIZ Zsolt 3027327 VA7CZR Caesar 3027328 VA7TLS Timothy -3027329 VA7WD Walter +3027329 VE7WCQ Walter 3027330 VA7HST David 3027331 VE7MLZ Michael 3027332 VE7HRA H @@ -57511,7 +70409,7 @@ 3028001 VY1CA Kelly 3028002 VE3YUL John 3028005 VE3GCT Gary -3028006 VE3YCX Ve3ycx +3028006 VE3YCX Sean 3028009 VE3PWJ Pete 3028010 VY1BAT Wolf 3028011 VA3QU Chris @@ -57544,7 +70442,7 @@ 3029027 VE9RSQ Matthew 3029028 VE9HX Richard 3029029 VE9QED David -3029030 VE9CAS J +3029030 VE9CAS Jason 3029031 VE9IS Derek 3029032 VE9EX Brent 3029033 VE9VHF Richard @@ -57552,7 +70450,7 @@ 3029035 VE9SF Stephen 3029037 VE9XA Tim 3029038 VE9SY Steven -3029039 VE9PA Peter +3029039 VE6EGD Peter 3029040 VE9SEC Joel 3029041 VE9HA Harry 3029042 VE9SLB Stephen @@ -57571,8 +70469,8 @@ 3100004 KD2IBG 3100005 KC1ILH 3100006 W1OKH -3100007 WB4SLI -3100008 KB4ECO +3100007 WB4SLI Hugh +3100008 KB4ECO JOSE 3100009 KC0KIW 3100010 KD8ZIE Jeff 3100011 K4POT @@ -57594,7 +70492,7 @@ 3100027 KE0QKF Michael 3100028 K5FDE James 3100029 W7LDG Lane -3100030 K2SBT Joseph +3100030 KF4VXN Joseph 3100031 W4KSA Rockney 3100032 KD0QJL Sam 3100033 N5GDM Gailen @@ -57608,8 +70506,8 @@ 3100041 KN4LPP Erik 3100042 KE9VS Richard 3100043 N1OB Dan -3100044 KC3FGS Christopher -3100045 KI4MCV Christopher +3100044 W3CH Christopher +3100045 KI4MCV Chris 3100046 N2EHS Sal 3100047 W4AEQ Jeffrey 3100048 KN4IBQ Aaron @@ -57685,7 +70583,7 @@ 3100118 N7ALX Alex 3100119 KC0EQA Douglas 3100120 KB8KNY Michael -3100121 KB0SAN Veca +3100121 N1USA VECA 3100122 KN4LYH Jaime 3100123 WB6FYR Thomas 3100124 KM4ZBB Stephen @@ -57748,7 +70646,7 @@ 3100181 KC2ZRB David 3100182 KB5VWV Charles 3100183 KC1IKQ Jonathan -3100184 KD4PPG Jim +3100184 K9AGR Jim 3100185 W3NTT James 3100186 W4BMS Bruce 3100187 KD9JZS Stephen @@ -57770,7 +70668,7 @@ 3100203 W3SPC Steve 3100204 N0KM David 3100205 KG6YRC JIMMY -3100206 KB1WXM Bob +3100206 K1BIF Bob 3100207 KE8IPS Lance 3100208 KD9IKF Joshua 3100209 KE4ILM Lee @@ -57787,14 +70685,14 @@ 3100220 KE0ODH Bret 3100221 W7YP Richard 3100222 KD8VYO Roy -3100223 KE0QHA Gerald +3100223 N0AD Gerald 3100224 KB5ITT Larry 3100225 KB6RDX Lynnette 3100226 K2JAG John 3100227 KE0JHC Christopher 3100228 KN4MDL Adam 3100229 W8BPM Bruce -3100230 KJ8U David +3100230 N8CM David 3100231 N7DMF Damon 3100232 WB9YVM William 3100233 N5CFR Dale @@ -57809,7 +70707,7 @@ 3100242 N0LVG James 3100243 WA1UHF Philip 3100244 KB3SQV Jason -3100245 KN6QI Mikel +3100245 KN6QI 3100246 KG7NIE Ian 3100247 KM4SFF Sean 3100248 KC6LRL Rommel @@ -57859,7 +70757,6 @@ 3100292 KE0DHO Bernard 3100293 KC0EWG Bruce 3100294 KK6QWN Paul -3100295 KN4MBO Grant 3100296 KD6DDM David 3100297 KM4GWE Robert 3100298 KD6HUK Michael @@ -57867,7 +70764,7 @@ 3100300 KA9DZR DENNIS 3100301 N0RHZ John 3100302 K4THX David -3100303 KM6HQS Christian +3100303 NV2J Christian 3100304 KC9TIL Franky 3100305 KE0PVI Russell 3100306 N0CMD Brennan @@ -57893,7 +70790,7 @@ 3100326 K6BAF Bary 3100327 KN4KUL Nina 3100328 KF5MPR Ryan -3100329 NA3P Richard +3100329 NA3P Dick 3100330 KC2DEL Hector 3100331 N0JG James 3100332 AB6UT Nelson @@ -57918,9 +70815,9 @@ 3100351 N4QXU David 3100352 KE8CEW Greg 3100353 N5MXI David -3100354 W4DTX David +3100354 W4DTX Dave 3100355 WA6DKD Gilbert -3100356 KT9X Lahra +3100356 KT9X Flip 3100357 N9DRS David 3100358 KC3BRP Mieczkowski 3100359 W5GOV Michael @@ -57975,7 +70872,7 @@ 3100413 KD7OLA Kevin 3100414 KN4KOP Troy 3100415 N0FAK Richard -3100417 KC8QCH Jeffrey +3100417 N8ACL Jeff 3100418 N9QKK Bruce 3100419 W8UJM Alvin 3100420 KD9LAB Jerry @@ -57983,7 +70880,7 @@ 3100422 WH6EBA Andre 3100423 N0INK Toni 3100424 WB0YBZ Kenneth -3100426 NA3P Richard +3100426 NA3P Dick 3100428 KM6SKZ Carl 3100429 N8KDR Terry 3100430 K5SEK Sherwin @@ -58001,7 +70898,7 @@ 3100446 K0CGQ Bill 3100447 KB8JTU Brian 3100448 K5DLS Duane -3100449 WB2NYC Michael +3100449 WB2NYC Mike 3100450 KC8PTQ Anthony 3100451 KG5LBA Kristopher 3100452 K4FEK Foster @@ -58015,8 +70912,8 @@ 3100461 KY4M Matthew 3100462 KC3CNO Michael 3100464 W8BBL William -3100465 K5KOA William -3100466 K5KOA William +3100465 K5OOO Bill +3100466 K5OOO Bill 3100467 KG5REO Jonathan 3100468 K8VVU 3100469 KB5EBL Brian @@ -58193,7 +71090,7 @@ 3100679 KD2PPV Robert 3100680 W8NEE John 3100681 N2DV John -3100682 KE0RAY Peter +3100682 W0OW Peter 3100683 K2LNK Omachonu 3100684 KV4FA George 3100686 W0NV Richard @@ -58226,8 +71123,8 @@ 3100714 K2GAP Gladys 3100715 WB0VLX Duane 3100716 N4ESA Ed -3100717 KA8FBI Thomas -3100718 KB7BYI David +3100717 N8HRO Thomas +3100718 KB7BYI Dave 3100719 KC5YOD William 3100720 KG7GBN David 3100721 WB8VWI Rob @@ -58235,7 +71132,7 @@ 3100724 KE8P Andrew 3100725 KK6CMM Keith 3100726 W3NTT James -3100727 KB7BYI David +3100727 KB7BYI Dave 3100729 N4JDB James 3100730 K9NPX Dan 3100732 KC9HTC Bruce @@ -58253,12 +71150,11 @@ 3100744 N8DAH David 3100745 N8DAH David 3100746 KL4RQ Thomas -3100747 KG5HKX Paul +3100747 KR5OG Paul 3100748 K5JCJ John 3100749 KC0LRP Bryan 3100750 KE8BFX Brian -3100751 KE8FWZ Thomas -3100752 WA8ZFW Walter +3100751 KE8FWZ Tom 3100753 AB9IO Anthony 3100754 KC3KZA Richard 3100755 KF5KHZ John @@ -58293,7 +71189,7 @@ 3100790 AD0UY Charles 3100791 AB5ID Steven 3100792 KG5ZKX Brett -3100793 AG3U Robert +3100793 AG3U Bob 3100794 KD5UFQ David 3100795 KA9PAY Jon 3100796 K3FT David @@ -58304,16 +71200,16 @@ 3100801 KC3FQF Rostislav 3100802 NX6E Leonard 3100803 KC8PQA Blake -3100804 KD7PAR Robert +3100804 W7AXA Robert 3100805 K0RPD David 3100806 NQ8RP Roger -3100807 KB1BXE Martin +3100807 KB1MJ Martin 3100808 N8ORJ James 3100809 KK9JEF Jeffrey 3100810 N8IFR David 3100811 WB1FWS N 3100812 K8RMM Richard -3100813 KI5SR Carter +3100813 KI5SR Ross 3100814 WB8WOR Thomas 3100815 KE8CVB Edward 3100816 KD8QOY John @@ -58430,7 +71326,6 @@ 3100943 KG4IVQ Jesse 3100944 KB1FON Christopher 3100945 AE4TQ Edmund -3100946 KI7UVV Vinis 3100947 WZ8K Timothy 3100948 KD8HVQ Vonda 3100950 W4BSB Jay @@ -58517,7 +71412,7 @@ 3101036 KG4RCK Stacy 3101037 KJ4AVG Nicholas 3101038 KM4DEF Mark -3101039 K4DJL Elquardo +3101039 K4DJL El 3101040 KF4OUS Jefferson 3101041 KM4LBL Greg 3101042 K4ICP Guy @@ -58709,7 +71604,7 @@ 3101229 KJ4MLM Cody 3101230 NZ2O Casey 3101231 KK4VSD Danita -3101232 KK4TJP Stephen +3101232 KY4G Stephen 3101233 KN4AMY Robert 3101234 KM4DLM Sue 3101235 KE4CUS Royce @@ -58723,11 +71618,11 @@ 3101243 KA4CSG Thomas 3101244 KA4CSG Thomas 3101245 WV4K James -3101246 KJ4M Eugene +3101246 KJ4M Gene 3101247 KI4DVW Nancy 3101248 KW4RTR Randy 3101249 WA9YRH Glenn -3101250 KD7LMN Richard +3101250 KD7LMN Rich 3101251 WB4ACN Gary 3101252 WB4ACN Gary 3101253 NR4J Mark @@ -58738,7 +71633,7 @@ 3101258 KJ4TND James 3101259 KN4BSP Charles 3101260 KG4BQQ Kyle -3101261 KX3J Jack +3101261 N4YO Jack 3101262 AF5SB Clifton 3101263 KI4UGS Ronald 3101264 KM4SKC William @@ -58773,12 +71668,12 @@ 3101294 WJ4P Timothy 3101295 KJ4ERO James 3101296 KJ4ERN Kristi -3101297 N4WLZ Jeffrey +3101297 KN4JM Jeffrey 3101298 NJ2B Rodney 3101299 KB4OHB Scott 3101300 KM4WIS James 3101301 K4WBF Stephen -3101302 K4DJL Elquardo +3101302 K4DJL El 3101303 N4GBN Robert 3101304 KG4EUD Randall 3101305 KG4EUD Randall @@ -58808,8 +71703,8 @@ 3101330 KN4EXE Raymond 3101331 KG4YRU David 3101332 KE4B Kennie -3101333 KB4PQO James -3101334 KB4PQO James +3101333 W4PAL James +3101334 W4PAL James 3101336 W4DWF Darrick 3101337 NX3P Stanley 3101338 KS3P Kaitlyn @@ -58857,7 +71752,7 @@ 3101383 KM4ZEJ Anthony 3101385 KN4AEV Russell 3101386 W4OA Shelly -3101387 NR4B Michael +3101387 N4VB Mike 3101388 AK4B Bert 3101389 KG4YRU David 3101390 KI6DNO Baseero @@ -58870,7 +71765,7 @@ 3101397 KN4GXL Randall 3101398 K4HNO Jack 3101399 KC4UTF David -3101400 N4HWM Bobby +3101400 K4AGR Bobby 3101401 N4WXI Billy 3101402 KN4BNC William 3101403 KM4ITE Josh @@ -58904,7 +71799,6 @@ 3101433 KF4JIA Peter 3101434 KN4DDG Huey 3101435 KM4YUB Wesley -3101436 N0PKR Tim 3101437 KM4KLT Thurman 3101438 WA4DXP Marcellus 3101439 N4YXS Kenneth @@ -58960,11 +71854,11 @@ 3101492 KN4KMV Jonathon 3101493 K7EMA Bruce 3101494 N4GLE Patrick -3101495 KN4CUH Steven +3101495 N9FC Steven 3101496 K4FSO William 3101497 KW4TX James 3101499 K9UAB Tyrone -3101500 W1DEV Devin +3101500 KM4DM Devin 3101501 KN4KRO Kirkland 3101502 WA4ZDW Kenneth 3101511 AI4WG Ryan @@ -58977,7 +71871,7 @@ 3101518 KX4BY Ken 3101519 KN4KMS Mark 3101520 KJ4LAB Steven -3101521 WA4RLF Derek +3101521 W4RLF Derek 3101522 N4HXL John 3101523 N4HXL John 3101524 AE4FQ Benjamin @@ -58988,7 +71882,7 @@ 3101529 N4JN Scott 3101530 KA4TNT Tyler 3101531 N5UAL Mark -3101532 KK4NCN Edward +3101532 W4EBP Edward 3101533 WB4K Kenneth 3101534 KM4KBH Eric 3101535 KM4KBH Eric @@ -59023,7 +71917,7 @@ 3101567 KI7BFI Donald 3101568 KD7DFV Kevin 3101569 KK7A James -3101570 KI7YIS Kenneth +3101570 KD7GA Kenneth 3101571 KK6YRJ Darren 3101572 N6ZCX Eliot 3101574 W3RWP Richard @@ -59070,7 +71964,7 @@ 3101617 KC8TEA Andrew 3101618 KD9LBG Steven 3101619 N7MSI William -3101620 KE8OF Terry +3101620 WE8RV Terry 3101621 N5RPQ Tony 3101622 KM5TY Gary 3101624 N7OLD Charles @@ -59084,13 +71978,13 @@ 3101632 KX1B Bryan 3101633 W9ROY Roy 3101634 AC5OY Jesse -3101635 KF5AZJ Robert +3101635 N5DRJ Robert 3101636 W5DTX Keneth 3101637 AA6TM Minh 3101638 AB1ZW Marc 3101639 KF5OVZ Russell 3101640 W8KCS Kenneth -3101641 KI7YRD Michele +3101641 N7YDD Michele 3101642 KC3HJS Martin 3101643 KA0OMM Bob 3101644 KB0TUX Randy @@ -59099,7 +71993,7 @@ 3101647 W3SMP Shawn 3101648 W3RAZ Joel 3101649 KK4JNV Edward -3101650 K5LK Billy +3101650 K5LK Bill 3101651 KN4IOE Kemp 3101652 WD4WDW Dears 3101653 W0RMI Jennifer @@ -59146,7 +72040,7 @@ 3101696 KN4FXT Robert 3101697 KN4FXS Elizabeth 3101698 N5VUJ Roger -3101699 KB1ZBT Shane +3101699 K1ZBT Shane 3101700 KC2BGN Edwin 3101701 WE6DX Billy 3101702 W2BRB Bart @@ -59193,8 +72087,8 @@ 3101746 KC9GQV William 3101747 K5XB Larry 3101748 KB5FNK David -3101749 KD2PLE Andrew -3101750 KD2PLE Andrew +3101749 KB2AJM Andrew +3101750 KB2AJM Andrew 3101751 KM6LJM Gilroy 3101752 KG7WPW Wiwat 3101753 K0AAJ Ronald @@ -59207,7 +72101,7 @@ 3101760 W5HDL Hal 3101761 N5VUJ Roger 3101762 K1CII Henry -3101763 N7BBY Bobby +3101763 N2BBY Bobby 3101764 K2WPH Wayne 3101768 N7LOL Scott 3101769 KC3AZY Thelbert @@ -59224,7 +72118,7 @@ 3101780 KB5FNK David 3101781 KN4MFK John 3101782 N1FOU Glenn -3101783 KD9KKD William +3101783 W9WGB William 3101784 KE0RPX Shawn 3101785 KD2PPF Matt 3101786 KM2ARC Kellenberg @@ -59273,7 +72167,7 @@ 3101836 KI4EZK Charlotte 3101837 KI4EZL Steven 3101838 K3HEX Alex -3101839 KN4LKZ Patrick +3101839 N4LKZ Patrick 3101842 N5KOO Robert 3101843 KG5YBA Alan 3101844 WA8LPI Gary @@ -59307,13 +72201,14 @@ 3101879 WR7J Paul 3101880 WW2JS Jonathan 3101881 K5RPG James -3101882 KB5YQT Daniel +3101882 KB5YQT Dan +3101883 N2WNS Bill 3101884 KC3KVC Matthew 3101885 K4WNY Ronald 3101886 KG5YCU Richard -3101887 KI5BRI Richard +3101887 N5BS Richard 3101888 N0FXE Jason -3101889 KI7RSG Kelvin +3101889 KJ7BQV Kelvin 3101890 KE7PCB Paul 3101891 W4XZ John 3101892 KN4KV Phil @@ -59397,7 +72292,7 @@ 3101975 N5ZT Reid 3101976 KG6EEW Frank 3101977 KI7TTO Gary -3101978 W1AEX Robert +3101978 W1AEX Rob 3101979 KC9WMV Jeremy 3101981 KK6LNV Marc 3101982 KG5PJH Steven @@ -59478,18 +72373,18 @@ 3102060 WB8LXT Al 3102061 K4YYY Hoyt 3102062 NC4RL Carl -3102063 KE0DJS Patrick +3102063 KE0DJS 3102065 W6KNR Andrew 3102067 W8AJL Aaron -3102068 KD6EPQ Ian -3102069 KI7YYS Skeet +3102068 AJ6GZ Ian +3102069 W7LFX Skeet 3102070 W8EL Ernest -3102071 KE8JDH Adam +3102071 N8APX Adam 3102072 KE4VFL James 3102073 KI5ADD Christopher 3102074 W1ZKE Wayne 3102075 KD7DHO David -3102076 KN4LIF Jeffrey +3102076 W4NSJ Jeffrey 3102078 WA8AWD Robert 3102079 N1LIB Robert 3102080 N1LIB Robert @@ -59497,10 +72392,10 @@ 3102082 K6MJW Michael 3102083 KF4JDH James 3102084 KG5PSS Joseph -3102086 N3SQY Theodore +3102086 N3SQY Ted 3102087 KI5AHL Petar 3102088 KR6BB George -3102089 KI5AGJ Tim +3102089 K5ACM Timothy 3102090 KC4ZVY Richard 3102091 KJ4KFD Richard 3102092 KD4HCZ Karen @@ -59508,10 +72403,10 @@ 3102094 KD8NNQ John 3102095 KG8ZH Charles 3102096 W2KU Vince -3102097 NN5A Thomas +3102097 WW5A Ken 3102098 NN5YL Wilma 3102099 KM6TZV Michael -3102100 KB1FHS Eric +3102100 W1EDR Eric 3102101 NI1Y Sena 3102102 KA4RMM Jim 3102103 WB4NLD John @@ -59519,7 +72414,7 @@ 3102105 K0UZ Kenneth 3102107 K6BLL William 3102108 KA0OPY Thomas -3102109 N7OKD William +3102109 N7OKD Bill 3102110 N3QMJ Mark 3102111 KD0KZH Roger 3102112 W8FJB William @@ -59540,7 +72435,7 @@ 3102127 KC3HUL Enrico 3102128 KG5FWI Jason 3102129 KG5WYJ Talon -3102130 KE0DJS Patrick +3102130 KE0DJS 3102131 KK4NUS Michael 3102132 W8KIW John 3102133 WB2GHC William @@ -59553,7 +72448,7 @@ 3102140 K7DRO David 3102141 W4HKE Joshua 3102142 KE8FJO Melissa -3102143 KI5AGJ Tim +3102143 K5ACM Timothy 3102144 KD9IFV Virginia 3102145 W8HFZ Timothy 3102146 W4MRL Michael @@ -59567,7 +72462,7 @@ 3102154 KQ4WT Mark 3102155 KM4DLS Adam 3102156 KK4THM Felix -3102157 N4PSH Perry +3102157 N4GJ Perry 3102158 N5GWF William 3102159 KC2QXC Peter 3102160 N4WSM Wesley @@ -59638,7 +72533,7 @@ 3102229 N3ETC William 3102230 W4AZI William 3102231 N9AFU Michael -3102232 KE0RLY James +3102232 K0MIZ James 3102233 K2DHW Dylan 3102234 N0NZV Thomas 3102235 AB3HX Clint @@ -59671,7 +72566,7 @@ 3102267 KG5TVN Otis 3102269 N6EW 3102270 WA6PHR Maurice -3102271 KC2OMU Darrin +3102271 W2OMU Darrin 3102272 WT0F Gerard 3102273 K6RPH Ray 3102274 KM4QGZ Joseph @@ -59712,7 +72607,7 @@ 3102314 WK8N Ronald 3102315 KN4KOV Bryan 3102316 KD9KAF Scott -3102317 N8KKW Mory +3102317 KB8KKW Mory 3102318 KA7NQG William 3102319 W4DSL Dane 3102320 KC3FRJ Steven @@ -59745,7 +72640,8 @@ 3102351 N8AQA Brian 3102352 K9MMI Michael 3102353 KI7BGC Deanna -3102355 KE0HNW Terrence +3102354 KK6GIO Lawrence +3102355 WB0RBA Terrence 3102356 N7GFY Brian 3102357 KG5UER Cary 3102358 WD9F Forrest @@ -59769,7 +72665,7 @@ 3102377 W4MDZ Michael 3102378 KM6UC Daniel 3102379 KM6UC Daniel -3102380 NF3Q John +3102380 AI3I John 3102382 KE6KGO Robert 3102383 W7JEZ Geoffrey 3102384 W6TLC Tamara @@ -59813,7 +72709,7 @@ 3102422 N0QZ Fred 3102423 KN4NBO Jeff 3102424 WA0HBX Ernest -3102425 KO6JAY Jason +3102425 KO6JAY Jay 3102426 KD2PUP Edward 3102427 N8IAJ Mark 3102428 AJ5G John @@ -59858,10 +72754,12 @@ 3102471 N4ZAB Alan 3102472 AC2TK Doyle 3102473 KD2OPJ Harold +3102474 W2JCN Jerry 3102475 KN4NKJ Jhonnatan +3102476 W2JCN Jerry 3102477 KC3JSI Nicholas 3102478 KG5YSK Harold -3102479 KC3LGJ Robert +3102479 K3RTS Robert 3102480 KC2JFS Scott 3102481 K3LPA Karen 3102482 KE0CJU Belinda @@ -59874,7 +72772,7 @@ 3102489 KN4NJA Jeshua 3102490 AG7GD Steven 3102491 W5BOD Efrain -3102492 N1XUK Thomas +3102492 NN1J Thomas 3102493 WB3CKV Stanley 3102494 W5EVH Robert 3102495 KN4NCQ Jared @@ -59909,7 +72807,7 @@ 3102528 N7IEP Michael 3102529 WA7BCG Bradley 3102530 K9JP Jeffrey -3102531 K9KMS Ken +3102531 K9KMS Kenneth 3102532 K5NKL Scott 3102535 KC8UX Ronald 3102536 WA6QZC Roger @@ -59930,7 +72828,7 @@ 3102554 KK6PLJ Teddie 3102555 KD9KNH Laura 3102556 K5PRS Paul -3102557 KI7VTY Antonio +3102557 NB9G Antonio 3102559 KD2NDJ Alexander 3102560 KD5RYN Jon 3102562 KC1ANB George @@ -60066,7 +72964,7 @@ 3102705 KC3FQF Rostislav 3102706 K5GIJ Geeks 3102707 KM4GCJ Vince -3102708 KC0DTU David +3102708 N2DEE David 3102709 KE6UPA Phil 3102710 KM4VTT Alan 3102711 KB2VRM Michael @@ -60086,7 +72984,7 @@ 3102725 N8JCK Jeffrey 3102726 KI7HPM Brian 3102727 KE8IME Harold -3102728 KQ6TO RL +3102728 KQ6TO Ray 3102729 KA2OGO Arthur 3102730 N1IEX Ronald 3102731 KE4HJV Kevin @@ -60095,7 +72993,7 @@ 3102734 KD8AZC Scott 3102735 KB9AVO Paul 3102736 KD9EGB Joseph -3102737 K9KMS Ken +3102737 K9KMS Kenneth 3102738 KC3GIO Donald 3102739 KE0SJO Quentin 3102740 K9GRZ William @@ -60114,7 +73012,7 @@ 3102753 N9NPF William 3102754 K3AJW Andrew 3102755 KK6UE Robert -3102756 KD5DLJ Denny +3102756 K5DCC Denny 3102758 K4VEK Vincent 3102759 K8YIP Steve 3102760 KE5HHG Matthew @@ -60167,10 +73065,10 @@ 3102815 KD2MCP Karl 3102816 N1DSJ Giacomo 3102817 KB4CO Carlos -3102819 KB1ZBT Shane +3102819 K1ZBT Shane 3102820 AG4TR Ray 3102821 WB6IZC Jeffrey -3102822 KD2STU Stuart +3102822 AF2SC Stuart 3102823 KE8EVS Gary 3102824 KB8GET Janet 3102825 KC8HUN Frank @@ -60218,7 +73116,7 @@ 3102874 KI4ZDG Kevin 3102876 KC3LGC R 3102877 W0DHG David -3102878 KP4IP +3102878 KP4IP Frank 3102879 KK6PLN Collin 3102880 N8WLC Richard 3102882 W9TD Gary @@ -60231,7 +73129,7 @@ 3102889 WH6EIV Monti 3102890 K0SEY Shane 3102891 KB0KRL Karl -3102892 KC9WYE Scott +3102892 WE9U Scott 3102893 N5WLC William 3102895 W4SOE Shaun 3102897 KK4NTW Jason @@ -60249,7 +73147,7 @@ 3102910 AI6EM Michael 3102911 KM6QXB Gary 3102912 N0MHO Arthur -3102913 WA9EEE Jim +3102913 AE9EE Jim 3102914 KK4KJN Christine 3102915 W3DL Doug 3102916 KD4AYI Timothy @@ -60257,10 +73155,10 @@ 3102918 KD2CFU John 3102919 KB5VDR Dena 3102920 KD8TPO Malcolm -3102921 K1EWG Ewg +3102921 K1EWG EWG 3102922 KM6UGU William 3102923 KC2YGH Glen -3102924 KE0GRX Matthew +3102924 W0PG Matthew 3102925 K5LGA Larry 3102926 K5TBO Terrence 3102927 W9GMK Gary @@ -60302,7 +73200,6 @@ 3102969 G8ERJ Peter 3102970 KA1DON Donald 3102971 N3OGD Allen -3102972 WA0AUQ David 3102973 K7IBC Patrick 3102974 W8RTL D-Star 3102975 W8HEQ D-Star @@ -60336,7 +73233,7 @@ 3103004 KC7CO Chuck 3103005 K5BZI Ray 3103006 KB3LLD Patricia -3103007 WN9SA George +3103007 N9MLM George 3103008 AJ6EE Kevin 3103009 KI5ARM Karen 3103014 WB2LUC Faustino @@ -60374,8 +73271,8 @@ 3103049 K2PHD James 3103050 K1CPF Christopher 3103051 KN4MLR Russell -3103052 ND3Z Jeffrey -3103053 W7TZZ James +3103052 ND3Z Jeff +3103053 N7FC James 3103054 N7GEO Jorge 3103055 K6CRJ Chris 3103056 N4YKQ Douglas @@ -60397,7 +73294,7 @@ 3103077 KE0MVH Dmytro 3103078 W6WNG Gerry 3103079 KE4KTD Pamela -3103082 WD5FRS Wayne +3103082 K5WFL Wayne 3103083 KD5VNZ Pedro 3103084 N4EVA Alex 3103085 AB5CA Fred @@ -60443,7 +73340,7 @@ 3103133 KW4NM Jonathan 3103134 KC1JZZ John 3103135 KC0CQD David -3103136 KC3LTP Paul +3103136 W3PS Paul 3103137 K9KYB Timothy 3103138 WA7IZR Owen 3103139 N7KPV Nick @@ -60550,7 +73447,7 @@ 3103254 N3ML 3103255 AA0KM Jeffrey 3103257 KB0MAL Michael -3103258 KA5DOX Richard +3103258 K5DOX Richard 3103259 N3FV Richard 3103260 K2NP Travis 3103261 N8GGO Richard @@ -60571,11 +73468,11 @@ 3103277 K6YX John 3103279 KI4LWP Tom 3103282 KD6FEE John -3103284 KB7OQB James +3103284 W6BJR James 3103285 KI4LWP Tom 3103287 N3TEM Thomas 3103288 W0KNG Gregory -3103289 KA5DOX Richard +3103289 K5DOX Richard 3103290 WY7JMS Jake 3103291 KD0CRN Jeff 3103292 KM6UNO Katie @@ -60584,21 +73481,22 @@ 3103295 KD2KJU John 3103296 KD8JDP Jonathan 3103297 KN4DTV Scott -3103298 N4MPC John -3103299 KN4NTK John +3103298 N4MPC Pat +3103299 K0ZD John 3103300 N9QIF Lila 3103301 KM5SNS Steve 3103302 KB4UVV David 3103304 KC3KGP Richmond 3103306 KE7UDV Michael -3103310 KB7OQB James +3103307 N9RSQ Paul +3103310 W6BJR James 3103311 KC4DC Danny 3103312 KE8GII David 3103313 W9BFZ David 3103314 KD2PPV Robert 3103315 WD9GTE Charles 3103316 AC2LB Henry -3103317 KB9TBV Corrie +3103317 W9CKS Corrie 3103318 KD2PUZ Richard 3103319 NR5Y Charles 3103320 KC1KAM Jamie @@ -60632,7 +73530,7 @@ 3103351 WA3KKB Lewis 3103352 KA9MOT Steven 3103353 KC9NSE Mellisa -3103354 KD9KZD Ryan +3103354 K9AOM Ryan 3103355 KE7HTY Jack 3103356 WA8NPR J 3103357 N1ZCE Gary @@ -60641,7 +73539,7 @@ 3103360 N6KAS William 3103361 W6MEW Michael 3103362 KM6RKK Daniel -3103363 KI7YWE Ryan +3103363 KI7RS Ryan 3103366 KD0SIL Mirko 3103367 W7TIG Kambiz 3103370 WH6TV Gary @@ -60650,7 +73548,7 @@ 3103373 KE0OUF Lealon 3103374 KF5ADH James 3103375 KI5ASL Christopher -3103377 ND3Z Jeffrey +3103377 ND3Z Jeff 3103378 W5VIC Alphonse 3103379 KG4YUS Winston 3103380 N0LOZ Jason @@ -60664,13 +73562,13 @@ 3103390 W8DEX Christian 3103391 KC9YGD David 3103392 K0JPR Thomas -3103393 KO2Q Phillip +3103393 KO2Q 3103394 KM6SMO Marc 3103395 W8NJW Nathaniel 3103396 N9JR Joseph 3103397 N9JR Joseph 3103398 K6XCQ Jamieson -3103399 KE0CDM Kent +3103399 K0XZA Kent 3103400 WB2SJI William 3103401 KG7YUT James 3103402 KM4QDG Emmanuel @@ -60725,7 +73623,7 @@ 3103455 K4JWK James 3103456 N0YLS Michael 3103457 KD6CAE Monty -3103458 KG6BIN Chris +3103458 KG6BIN Jesse 3103459 NJ7W Tom 3103460 N7GHZ John 3103461 K6GDJ Gregory @@ -60779,9 +73677,8 @@ 3103517 N6VOA Dominic 3103518 N6VOA Dominic 3103519 K4EEH Joseph -3103520 N7XLB Dale 3103521 W4JSK James -3103522 KM6MCG Mark +3103522 W6XYZ Mark 3103523 KE0SJR Charles 3103524 N5RZR Cynthia 3103526 KA4OQU Wayne @@ -60819,7 +73716,7 @@ 3103563 N6LKI Kirk 3103564 K2DYC David 3103565 NH7QH Chris -3103566 KE0ANG Daniel +3103566 WM0U Daniel 3103567 KC0UOL Bruce 3103568 K9VP Roger 3103569 K0DRJ Donald @@ -60857,14 +73754,14 @@ 3103604 KE6PSV Cynthia 3103605 KB4EIB Roy 3103606 WA4ICD John -3103607 W1ZOZ Eric +3103607 W7GSD Eric 3103608 N0UWK Connie 3103609 KG5YKF Michael 3103610 KM6ADE Nathan 3103611 KG5YKM Michael 3103612 WH6DYI Larry 3103613 WH6DZH Windy-Kay -3103614 KE4WNO Steve +3103614 W4OTS Steve 3103615 KC0SSS Seth 3103616 W9WTF William 3103617 KK6VOL Randy @@ -60918,7 +73815,7 @@ 3103667 W1NDS Carl 3103668 N2HNI Sandi 3103669 W4XXV Dennis -3103670 KC3JQG Austin +3103670 N3ASO Austin 3103671 W3ENY David 3103672 W3DGY Kenneth 3103673 KD9LFV Earl @@ -60927,11 +73824,11 @@ 3103676 KC9SXI Brian 3103677 WA7DUH Steven 3103678 K0BLR Ben -3103679 KD0RG Richard +3103679 K0EB Rich 3103681 KK4TID Henry 3103682 AI6LD Alan 3103683 K5QOI James -3103684 AG7GN Steven +3103684 AG7GN Steve 3103685 KM4EKR Raymond 3103686 K8TOB Robert 3103687 K8TOB Robert @@ -60943,7 +73840,7 @@ 3103694 W3ENY David 3103695 WA4ICD John 3103696 KM6MPS Jennifer -3103697 KC3LUX Edward +3103697 W3LUX Edward 3103698 W0CHF Stanley 3103699 K2NP Travis 3103700 N2IPE Julio @@ -60966,9 +73863,9 @@ 3103719 K7FIR George 3103720 W6DIZ Paul 3103721 W6UK Roger -3103722 KE8KAU Thomas +3103722 KA8MNT Thomas 3103723 KF7MLE David -3103724 N3YXT William +3103724 N3YXT Gurnie 3103725 N5WWL John 3103726 W3ATE John 3103727 N7SEB Scott @@ -61007,9 +73904,9 @@ 3103765 W2JSB Jeremy 3103766 N5QPN Curtis 3103767 KE5ZNT Taylor -3103768 KE0QVU Brent +3103768 W0ALF Brent 3103769 WA9RGV William -3103771 N0XRV John +3103771 N0XRV J 3103772 KK6GCX Thomas 3103773 W8QF David 3103774 KE7NHA Jason @@ -61071,7 +73968,7 @@ 3103835 WD4FLF Anthony 3103836 KI7YKO Paul 3103838 K0NEF Sean -3103839 KE6RWH Christopher +3103839 W6VE Christopher 3103840 K5TDW Timothy 3103841 KF8LC Gerasimon 3103842 W5CEM Cleve @@ -61106,7 +74003,7 @@ 3103880 KI7ETS Gregory 3103881 AE6WR Wendell 3103882 AB6RB Raul -3103883 KJ6PON Phillip +3103883 W1JV Phillip 3103884 N7YZF Leslie 3103885 KC8NSH 3103886 KI4SA Stephen @@ -61120,8 +74017,8 @@ 3103894 KD8WWP Michael 3103895 KM6UQU Patrick 3103896 AG7DT Edward -3103898 KD2OFR Kamryn -3103899 KD2OFR Kamryn +3103898 KS9Z Kamryn +3103899 KS9Z Kamryn 3103900 KI4RWD Brian 3103902 KK6OGX Jeff 3103903 KN4FMN Vic @@ -61141,7 +74038,7 @@ 3103919 KK6WVI James 3103920 KC2VLA John 3103921 W8OCP Ohio -3103922 KD2QEX Jeff +3103922 KD2QEX Jeffrey 3103923 KM4ZFI Ricky 3103924 N2WMD John 3103926 K0WF Wayne @@ -61172,7 +74069,7 @@ 3103955 KN4IJT Jerry 3103956 N9GT Joel 3103957 N0JJR James -3103958 KI5AYK Kevin +3103958 KC5ZWL Kevin 3103959 KB5YSC Patrick 3103960 KM6ASU Jennifer 3103961 AG7MB Dennis @@ -61190,6 +74087,7 @@ 3103973 KH6GJV Bill 3103974 AG5PQ Kenneth 3103975 N4OAG Michael +3103976 KC1CKO Kc 3103977 WB6VFY Michael 3103978 KN4RAY Ray 3103979 KK4JKQ Steve @@ -61197,12 +74095,13 @@ 3103981 KE0PTI Charles 3103982 AF4MM Mickey 3103983 N1JSN Gary +3103984 W4RNO Richard 3103985 K3RDZ Jack 3103986 KD4SOH Mark 3103987 K2KGF Martin 3103988 K5RFL Caleb 3103989 N5JJH Jesse -3103990 KC7MCC John +3103990 KC7MCC Larry 3103991 KC5UNU Phillip 3103992 KJ4TDM Brian 3103993 KD2LUL Kevin @@ -61264,7 +74163,6 @@ 3104049 KD7SML Shelly 3104050 AE7RR Ron 3104051 KE7CBS Jason -3104052 KD7DR David 3104053 AC7FN James 3104054 W7EKV Rod 3104055 W7IXA Doug @@ -61389,7 +74287,7 @@ 3104175 N8NQP Mike 3104176 N8NQP Mike 3104177 KB7OBJ Christopher -3104178 N7TUQ Brian +3104178 AK7F Brian 3104179 WG7L Alan 3104180 WT9S Jay 3104181 N7AM David @@ -61509,7 +74407,7 @@ 3104296 K7GEL Kenneth 3104297 K7GEL Kenneth 3104298 N7IZM Walt -3104299 N7TUQ Brian +3104299 AK7F Brian 3104300 N5VAQ Denise 3104301 KE7LVR Peter 3104302 WR5G Jerry @@ -61539,7 +74437,6 @@ 3104326 K7TMI Tom 3104327 WB4CVO Thomas 3104328 N7AFD Preston -3104330 KF7WWP Roger 3104331 W7TRA Thomas 3104332 W3MLC Jeffrey 3104333 N7RCQ Roger @@ -61548,7 +74445,7 @@ 3104336 KG7SPS Michael 3104337 KE7FEI Robert 3104338 KD7OUX Guy -3104339 AL7MH Robert +3104339 AL7MH Bob 3104340 N0RMZ Majdi 3104341 NU7B Stephen 3104342 K7EET Earl @@ -61556,7 +74453,7 @@ 3104344 K7VU Schilling 3104345 K7BAW Barry 3104346 AB2BH David -3104347 W7REJ Robert +3104347 K7DC Robert 3104348 KG7RBX Alan 3104349 W7TAT Timothy 3104350 K7DIC Richard @@ -61624,7 +74521,7 @@ 3104413 K7ADN Dean 3104414 KF7EUP Andrew 3104415 K7CHM Casey -3104416 KI7AKY James +3104416 N7EOW James 3104417 KF7IZT Tj 3104418 KI7AKZ Kathleen 3104419 KG7BGM Jason @@ -61725,7 +74622,7 @@ 3104516 WH7JJ Tsuyoshi 3104517 W6ZQ Ronald 3104518 K7CHM Casey -3104519 K7ZZ Richard +3104519 N7RSF Richard 3104520 N6RDT David 3104521 KB5ZDX Billy 3104522 WB0SMX Randy @@ -61829,7 +74726,7 @@ 3104625 WG2H Stephen 3104626 KE7BXX Franklin 3104627 KS6R Bradley -3104628 KB1YEV Dean +3104628 W7DSG Dean 3104629 K7SWF Stephen 3104630 KI6LNA Andrew 3104631 KI7PET Sean @@ -61857,7 +74754,7 @@ 3104655 AA7KG Kelvin 3104656 N2CDP Cliff 3104657 KG5DGG Raymond -3104659 KU4ZG Robert +3104659 N7GW Robert 3104660 W7QY Steven 3104661 KG5DGG Raymond 3104662 N7TAE Tom @@ -61982,7 +74879,7 @@ 3104794 N7BBS James 3104795 N7VKR Richard 3104796 W7ASC -3104797 K7NRG Nestor +3104797 N6CKC Nestor 3104798 W7AZY James 3104799 WB7BYV Steven 3104800 KD6RSO Larry @@ -62012,7 +74909,7 @@ 3104825 KG7KNL James 3104826 K7TES Fernando 3104827 KD6SM Stephen -3104828 KG7SWD Roger +3104828 N2IH Roger 3104829 N7AM David 3104830 N7WNS Will 3104831 N7FHB Patrick @@ -62048,8 +74945,8 @@ 3104865 KB0VIU Dan 3104866 W6PCH La 3104867 KA1ZUF Daniel -3104868 KD9KQH Christopher -3104869 KD9KQH Christopher +3104868 N9IJ Christopher +3104869 N9IJ Christopher 3104870 W4HMM David 3104871 KE0OOS Jeffrey 3104872 KC2XX Michael @@ -62076,11 +74973,11 @@ 3104895 KD2QLV Benjamin 3104896 NN1X Hitoshi 3104899 KE2GKB Timothy -3104900 KI6IFN Richard -3104901 KI6IFN Richard +3104900 N3UOR Richard +3104901 N3UOR Richard 3104902 NN8G Robert 3104903 K3MJN Mike -3104904 KN4PDG Ryan +3104904 W4EAE Ryan 3104905 KG4JQJ William 3104906 WZ4WWX Kenneth 3104907 AI4HH Ron @@ -62106,7 +75003,6 @@ 3104927 N2NOP Tristan 3104928 KD9JKD Sheryl 3104929 AE6Q Mary -3104930 KE0GB Richard 3104931 KE0GB Richard 3104932 W3BBX Craig 3104933 KD9LFR John @@ -62123,7 +75019,7 @@ 3104944 N5GPS Martin 3104945 AI4XJ Johnny 3104946 KF4PHW Michael -3104947 KN4PBF Jeremy +3104947 N9JML Jeremy 3104948 KI5BLQ Gary 3104949 K8CWG Thomas 3104950 KI7HLJ Andrew @@ -62160,7 +75056,7 @@ 3104982 KK4ESE Martin 3104983 KG5WBV Ronald 3104984 KG5WBV Ronald -3104985 KG7GW Kenneth +3104985 KG7GW Ken 3104986 N3XBW Jay 3104987 KE8COY Justin 3104988 KG6JLE Paul @@ -62168,11 +75064,11 @@ 3104990 WD8BAH Clarence 3104991 K0GYO Bart 3104992 K0GYO Bart -3104993 KE8GYU Steven -3104994 KE8GYU Steven +3104993 KE8GYU Steve +3104994 KE8GYU Steve 3104995 KK4JPG 3104996 KB3ISH Eric -3104997 KJ6UWJ Ron +3104997 K6BGI Ron 3104998 K7GEK Gary 3104999 AB1QB Anita 3105000 KM6TSR Thomas @@ -62210,7 +75106,7 @@ 3105032 AF5SO Lee 3105033 WX1NWA Cody 3105034 KE5UZU Raymond -3105035 KD5DLJ Denny +3105035 K5DCC Denny 3105036 K5SWT Steve 3105037 AE5RX Alan 3105038 KE5UZU Raymond @@ -62231,7 +75127,6 @@ 3105053 WA5BHW Bill 3105054 N5DOA Donald 3105055 KG5ARR Don -3105056 WV5O Thomas 3105057 KF5ZYC William 3105058 KG5GJU Eric 3105059 W5LR David @@ -62242,7 +75137,7 @@ 3105064 KD5PPB Glen 3105065 WX5T James 3105066 W5LR David -3105067 KK4PSE Dreagon +3105067 N4DRE Dreagon 3105068 N5QNA Roger 3105069 N5KWL Moore 3105070 N5KWL Moore @@ -62253,7 +75148,6 @@ 3105075 KE5CLW Richard 3105076 KJ5ZP Aaron 3105077 N9EXR Michael -3105078 K0ON Koon 3105079 KJ5ZP Aaron 3105080 K0MFN Melvin 3105081 N5SRB Sam @@ -62376,9 +75270,9 @@ 3105199 N5GK Glenn 3105200 N5QKH Judy 3105201 KF5FKF Tyler -3105202 NW5AR Robert -3105203 NW5AR Robert -3105204 AE5CP William +3105202 NW5AR Mark +3105203 NW5AR Mark +3105204 WL5H William 3105205 KG5ANI Charles 3105206 KG5QEW Jo 3105207 KG5QEX Rheta @@ -62395,9 +75289,9 @@ 3105218 AF5OI Timothy 3105219 KA0JTI Roger 3105220 KB5BV Mose -3105221 KK4PSE Dreagon +3105221 N4DRE Dreagon 3105222 K0ADN Ava -3105223 N5MVT James +3105223 KB5ASP James 3105224 KG5RON Ron 3105225 W5DSD David 3105226 KJ5OO Rea @@ -62427,7 +75321,7 @@ 3105250 W5BRX Brandon 3105251 K5PXP ARVARF 3105252 N5DTS Dylan -3105253 AB5SM Malcolm +3105253 AB5SM Scott 3105254 K5ACS Robert 3105255 N0LSB Larry 3105256 KC5FAK John @@ -62666,7 +75560,6 @@ 3105496 K5CS Charles 3105497 KE5BEB Dennis 3105498 W5NWA Jason -3105499 WV5O Thomas 3105500 AB5UB Ronald 3105501 KK5WM James 3105502 KD5TRJ William @@ -62752,7 +75645,7 @@ 3105591 KG5LNK Justin 3105592 KG5ZNN Bradford 3105593 N9NLA Thomas -3105594 KD2QMN John +3105594 WS2DFD John 3105595 NU4P Darrell 3105596 N5VLA Marie 3105597 N5VLA Marie @@ -62762,7 +75655,7 @@ 3105601 K7BIT John 3105602 KI5BSG Ryan 3105603 W4TTD Timothy -3105604 WN4EMT David +3105604 N1DDC David 3105605 KI5BFQ James 3105606 N7JA James 3105607 K7MGG David @@ -62775,7 +75668,7 @@ 3105614 K2EL Elmar 3105615 KE0BGQ Clinton 3105616 KD5LAP Dustin -3105617 KN4PCG Matthew +3105617 WR4AC Matthew 3105618 KB3PRI Matthew 3105619 KB1PYB David 3105620 KD8GHO Clifton @@ -62795,8 +75688,8 @@ 3105634 KK4ZHH Dennis 3105635 KR7SWA Dennis 3105636 KK6FFJ Robert -3105637 N4SJK Stephen -3105638 N4SJK Stephen +3105637 N4SJK Steve +3105638 N4SJK Steve 3105639 W5EDM Robert 3105640 KO4VET Jeffery 3105641 KA0GOG William @@ -62821,7 +75714,7 @@ 3105660 N4UQY William 3105661 KD0HXG Jim 3105662 KD8LRR Benjamin -3105663 KN4PGJ Charles +3105663 W4BPP Charles 3105664 KE0IXC Dell 3105665 K1LXP Edward 3105666 KG5EKA Patrick @@ -62876,7 +75769,7 @@ 3105716 N9QGU Robert 3105717 N9QGU Robert 3105718 K2MFF New -3105719 KI5BSU Kenneth +3105719 K5KBG Kenneth 3105720 KF5THM Michael 3105721 KQ5U Terry 3105722 KJ7AGT Joshua @@ -62884,7 +75777,7 @@ 3105725 KJ7AGM Duane 3105726 AA4AB Gregory 3105727 K5LRB Steven -3105728 KN4NMO Gregory +3105728 W6GJW Gregory 3105729 W6DFF Patrick 3105730 KE8BII 3105731 W6FM Ron @@ -62905,8 +75798,8 @@ 3105746 K9ZZP Marion 3105747 KA8ONW Mark 3105748 KB9SKP Theodore -3105749 KC3MBW Joseph -3105750 WA7AMD Alex +3105749 K3JFB Joseph +3105750 N6AMD Alex 3105751 AC0BQ Johnny 3105752 WX1N Rob 3105753 N3ATL Jared @@ -62921,7 +75814,7 @@ 3105762 KJ7ATB Michael 3105763 KE0LUD Daniel 3105764 KE0LUD Daniel -3105765 KB9RZ Michael +3105765 W9ZEP Mike 3105766 KE8KGE Oliver 3105767 KE8KGE Oliver 3105768 KF4PRR Hoyt @@ -62934,14 +75827,220 @@ 3105775 KF5URA Ralph 3105776 N0KK Kirk 3105777 KG7PNQ Justin -3105778 KN4PJZ Jared -3105779 KJ7AXY Samuli -3105780 KJ7AXY Samuli +3105778 KN4VCX Jared +3105779 W7GE Samuli +3105780 W7GE Samuli 3105782 KA1DBE Jeffrey 3105783 WS9F Matthew -3105784 KD9LBJ David 3105785 KC7OSW Albert 3105786 WC9H David +3105787 KK6QHM Marty +3105788 W4SEE Bernard +3105789 KD2CZD John +3105790 KE0IQV Ashley +3105791 KC7WUM Daniel +3105792 WT2F Todd +3105794 N3COW Douglas +3105795 K0FJR Chris +3105796 KD6GLN David +3105797 AC2IV Arnold +3105798 N0WGE Robert +3105799 KJ4QIB Puddin +3105800 KJ4QIB Puddin +3105801 N8VB Philip +3105802 KD2QED Jason +3105803 N9NDF Jason +3105804 AB6YA Warren +3105805 KD2QMZ Victor +3105806 KI4CAX George +3105807 KI4CAX George +3105808 KF5YME Wendel +3105809 KA4CRW Carl +3105810 N5RLW Richard +3105811 N3XXZ Keith +3105812 KC8DAG Armand +3105813 W5CPU Shane +3105814 KG3I Doug +3105815 KM4JNR Chad +3105816 N1JDI Curtis +3105817 W6SS Vance +3105818 KI7YPW Russell +3105819 KN4PIJ John +3105820 KA3IUO Donald +3105821 KA3IUO Donald +3105823 KB8RMR Thomas +3105824 N0TIA Kirk +3105825 N0TIA Kirk +3105826 W6LVR Ardyn +3105827 KD8UCP Jason +3105828 KN4PCV Joseph +3105829 K1MGY Mark +3105830 K1MGY Mark +3105831 K1MGY Mark +3105832 K1MGY Mark +3105833 K1MGY Mark +3105834 K1MGY Mark +3105835 K1MGY Mark +3105836 K1MGY Mark +3105837 K1MGY Mark +3105838 K1MGY Mark +3105839 KM6UED Charles +3105840 KE5PVO Ruben +3105841 KB1TUP Richard +3105842 KC1IVM Chester +3105843 WA2ZVN Craig +3105844 WB9TIK Robert +3105845 KD8VUD James +3105846 N5ALC Alex +3105847 KB3JXT Nathan +3105848 KD9JTU Stephen +3105849 KC9NWX Sven +3105850 KA1KWH Mark +3105851 KD9IPG Jeffrey +3105852 WA4OKJ Donald +3105853 WA4OKJ Donald +3105854 AF1NX Jay +3105855 N3YQG Michael +3105856 KB4NC Manny +3105858 KC1KFZ Aaron +3105859 N4MTT Matthew +3105860 KC4PBS Robert +3105861 KF7FUG Christopher +3105862 KK6QJB Karthik +3105863 KI5BLK Michael +3105864 W4MPC Michael +3105865 W4MPC Michael +3105866 KN4BPX William +3105867 KA2DUF George +3105868 KA3ZJW David +3105869 KM4YHI Nicolas +3105870 KD6FAC Thomas +3105871 KM4KBS Albert +3105872 KD8DXA Thomas +3105873 KG6JBC Justin +3105876 KN4GTI John +3105877 KD8MST Devan +3105878 KI4TZA David +3105879 KE0TDU David +3105880 K4ILX Todd +3105881 K4ILX Todd +3105882 AB2WS James +3105883 AI7LK Vince +3105884 WA4WTF Peter +3105885 N7XZ Richard +3105886 KW4FM Frederick +3105887 KR4OM Harold +3105888 WB8WOS Stephen +3105889 WB8ROI Glenn +3105890 KM6NKL Francois +3105891 KB0ISW Shawn +3105892 WI7DKW Doug +3105893 W6CRG Christopher +3105895 N6MCG Gary +3105896 KB3IDP Tammy +3105897 WD9END William +3105898 KE0TFS Ryan +3105899 KB1OVQ Neoc +3105900 KB1OVQ Neoc +3105901 KD7YKW Steven +3105902 K3TOM Thomas +3105903 W9GCM Gordon +3105904 N4RJJ Robert +3105905 N4RJJ Robert +3105906 WA2TGE Michael +3105907 W6CLB Yuriy +3105908 KK4RAJ Ruth +3105910 WA5WOD John +3105911 KN4PDA Jacob +3105912 N6COB Christopher +3105913 K4FNI Donald +3105914 WZ4BSS Brad +3105915 KE0FAX Michael +3105916 KE0FAX Michael +3105917 W5IMZ Michael +3105918 KI7UBQ Cleo +3105919 W1CFY Carleton +3105920 KM6VYL Javier +3105921 N0IHC Duane +3105922 KD4IOX Leon +3105923 KC0KVX Samuel +3105924 KN4GTM Dean +3105925 N0KAT David +3105926 KK6OQP Roy +3105927 KG5YGR Matthew +3105928 KK6TDU Scott +3105929 KB3JWL David +3105930 KD7THJ David +3105931 KD5FIP Gary +3105932 KD5FIP Gary +3105933 N0TAG Todd +3105934 AE0CU Paul +3105935 AE0CU Paul +3105936 W1VEE Verita +3105937 W1VEE Verita +3105938 KK6TDU Scott +3105939 W4RPK Ralph +3105940 KI7UBQ Cleo +3105941 W4MCD Richard +3105942 W4MCD Richard +3105943 N5JXO Roy +3105944 KE0TFP Matthew +3105945 K3RF Robert +3105946 KD9CZQ Cary +3105947 YV4YV Jose +3105948 N6OIL Rory +3105949 KE8KOY Andie +3105950 KD4OCC Donald +3105951 WA3NHK Frank +3105952 AC5BC Bill +3105953 KE0MS Wayne +3105954 KD0AEY Timothy +3105955 W9JGH +3105956 WA0VLC Robert +3105957 KG1X Scot +3105958 K4CGT Donald +3105959 KB2GDZ Larry +3105960 W4NMS Patrick +3105961 K7QJ Robert +3105962 K7QJ Robert +3105963 W9PE Richard +3105964 N9SHV Ben +3105965 N9SHV Ben +3105966 KD2KVZ David +3105967 N9RON Ronald +3105968 K0VAR Jack +3105969 K0VAR Jack +3105970 N5DTS Dylan +3105971 WB0LJK Dan +3105972 KC3MDU Denise +3105973 KE6IZZ Daryl +3105974 N2HYO Michael +3105975 KA0QNW Douglas +3105976 W1JS John +3105977 KM4GBF Gordon +3105978 KC1E Chris +3105979 KF7LJH Adam +3105980 KF7LJH Adam +3105981 N0NAF David +3105982 N3IBO Darrell +3105983 N3IBO Darrell +3105984 N4YCI Lin +3105985 KC3IZX Mason +3105986 W7WWI Gary +3105987 KK6ABQ Sergey +3105988 KD9LTO Matthew +3105989 W0PCD Patrick +3105990 K4DJG Robert +3105991 KC8QBA +3105992 NB1RI Paul +3105993 K1JDS Jason +3105994 W2IRE John +3105995 N1BS Brian +3105996 KE6ANK Christopher +3105997 W5TBZ Paul +3105998 KC1IFN Michael +3105999 N8AUC Eric +3106000 KO2Z Carlton 3106001 K6EH Paul 3106002 K6EH Paul 3106003 K6EH Paul @@ -63333,7 +76432,7 @@ 3106394 KE6ZXL Thomas 3106395 N6SIX Joseph 3106396 N6RVI Pete -3106397 N0ARY Robert +3106397 N0ARY Bob 3106398 K6GSJ Lance 3106399 KK6DOQ Brian 3106400 KA6AUR Don @@ -63437,7 +76536,7 @@ 3106499 KJ6QDU Joe 3106500 KF6YB Oscar 3106501 WA6YVX Ed -3106502 WA6KIN Jerry +3106502 W6KIN Jerry 3106503 AJ6AX Michael 3106504 WD6APP Chuck 3106505 WA6OSB Ken @@ -63535,7 +76634,6 @@ 3106597 KC6UJO Michael 3106598 KE6HHM Thomas 3106599 K6ME Cobb -3106600 KF6OSO Thomas 3106601 N9MJE Marc 3106602 N6MCV David 3106603 N6BSV Brooks @@ -63631,7 +76729,7 @@ 3106693 N6MUD Craig 3106694 KD6GNB Robert 3106695 WA6YRE Fred -3106696 KC7NP Allen +3106696 KC7NP Rob 3106697 KI6TRK Robert 3106698 K2ACK Alan 3106699 N6PAV Pete @@ -63653,7 +76751,7 @@ 3106715 KJ6RSD Sotero 3106716 KF6ERB Anthony 3106717 W2VIC Vic -3106718 KM6UJR Nonylon +3106718 N6ONY Nonylon 3106719 WA6MEL Mel 3106720 KF6ONT 3106721 KE6NG Kenneth @@ -63678,7 +76776,7 @@ 3106740 KC6YEG Benigno 3106741 W6BHK Marcial 3106742 W6BHK Marcial -3106743 N6NVX Russell +3106743 N7NVX Russell 3106744 NR6J Dennis 3106745 K6GLS Gabriel 3106746 W6NRA Gregory @@ -63741,7 +76839,7 @@ 3106803 N5ILN Alan 3106804 KF6MCD Richard 3106805 N6MVT Tom -3106806 W7SJK Steve +3106806 W6SJK Steve 3106807 W6RGG Bob 3106808 KI6UVG Ryan 3106809 KN6OE David @@ -63760,6 +76858,7 @@ 3106822 KJ6GBG Joe 3106823 N6JGA Mike 3106824 N6SGT William +3106825 N9QNZ David 3106826 N9KSP Kenneth 3106827 KB9SMF Susan 3106828 KF6M Michael @@ -63786,7 +76885,7 @@ 3106849 AB4GT Jeffrey 3106850 K6GSJ Lance 3106851 KC6FEW Steve -3106852 N0ARY Robert +3106852 N0ARY Bob 3106853 K6SOE Jim 3106854 KK6IKO Lamont 3106855 K6JPS Jim @@ -63823,7 +76922,7 @@ 3106886 KC6MMF 3106887 K6FCC Khalil 3106888 KK6UXK Justin -3106889 KK6VEJ Dittalumphu +3106889 KK6VEJ Thanadech 3106890 N6MZB Martin 3106891 K7AZ Chris 3106892 KI6ZUM Jim @@ -63834,7 +76933,7 @@ 3106897 NO6A Phoom 3106898 KK6JMJ Timothy 3106899 KJ6BQM Martin -3106900 N4VTB Jonathan +3106900 N4VTB JJ 3106901 N6HNF Geoff 3106903 KE6JQT Randolph 3106904 KF6FRP Richard @@ -63914,7 +77013,7 @@ 3106979 KR6FU Mark 3106980 WN1Z Orrin 3106981 KI6AOK Laura -3106982 K6GTR Uni +3106982 K6VVV Uni 3106983 N6JVH Michael 3106984 KK6WTJ Bret 3106985 KC6TNY Michael @@ -63926,7 +77025,7 @@ 3106991 K6MCF Matthew 3106992 N6XKN Andrew 3106993 KG6QET Randy -3106994 KE6CZD Nick +3106994 K7CFO Nick 3106995 W6TAB Todd 3106996 KG6UDW James 3106997 KF6FRP Richard @@ -63934,12 +77033,13 @@ 3106999 N6DVA Trbo 3107000 N1CY Hassan 3107001 KK6OTV Ben -3107002 K6GTR Uni +3107002 K6VVV Uni 3107003 KK6SIR Max 3107004 AI6KE Matthew 3107005 KG6ESP Evan 3107006 KK6OGG Nathanael 3107007 KK6NEA Lou +3107008 KL7JHR Dennis 3107009 AG6DK Wilko 3107010 AI6BH Colin 3107011 N6TRN Ted @@ -64038,7 +77138,7 @@ 3107104 N6TRN Ted 3107105 N6VRG James 3107106 KK6AZG William -3107107 KE6YJC MountainWest +3107107 KE6YJC Ted 3107108 WY6NN Doug 3107109 WA6EWV Paul 3107110 KE6IGP Jess @@ -64091,7 +77191,7 @@ 3107158 KB6COF James 3107159 AG6EX Ralph 3107160 W7NFN James -3107161 KE6YJC MountainWest +3107161 KE6YJC Ted 3107162 WB6SUB John 3107163 KK6IUF Tracy 3107164 KI6HYC James @@ -64145,13 +77245,13 @@ 3107213 KD7QOX Julian 3107214 KK6OSR William 3107215 WB6ANP Keith -3107216 KG7NPG Karl +3107216 KY0LO Karl 3107217 W7TAD William 3107218 KN6LA George 3107219 K6OOK Ron 3107220 K6BZN Rick 3107221 KG6SUY Eric -3107222 N3LGA Kevin +3107222 N3KA Kevin 3107223 KD6KFV Paul 3107224 KJ6RVM Chris 3107225 AG6NH Daniel @@ -64172,17 +77272,18 @@ 3107240 NR6V Dan 3107241 KC6TAN Greg 3107242 W6DEJ Don -3107243 KC6KGE Steven +3107243 K6KGE Steven 3107244 KK6VKK Thilo 3107245 AE6RS Ryan 3107246 KE5FGN Kin +3107247 K0GWR Gil 3107248 NR6E Mikkel 3107249 W9EO Eric 3107250 KK6ZYG James 3107251 KI6CMQ Jason 3107252 AD6GO Steven 3107253 KJ6LYK Barbara -3107254 KK6D William +3107254 KK6D Doug 3107255 KC6RKY Joe 3107256 KD0GG Alex 3107257 K7AZ Chris @@ -64202,7 +77303,7 @@ 3107271 KC6YPK Suren 3107272 KJ6BCA Robert 3107273 W6SDO Robert -3107274 WB6ZAM Richard +3107274 K6ES Richard 3107275 KV6X Dan 3107276 KK6ZIV Jakob 3107277 KK6FNL Paul @@ -64242,7 +77343,7 @@ 3107311 N6GLH Gary 3107312 K6SV James 3107313 KB9SMF Susan -3107314 W6JJK Joseph +3107314 W6JJK JOSEPH 3107315 WB6PQM Scott 3107316 KA6QDE Thomas 3107317 KK6IMI Ruben @@ -64254,7 +77355,7 @@ 3107323 KK6SUU TJ 3107324 KF6MBC David 3107325 K6BZN Rick -3107326 KC6KGE Steven +3107326 K6KGE Steven 3107327 KC6TYD Robert 3107328 N6WXD Steven 3107329 KE6BXH Ramon @@ -64300,7 +77401,7 @@ 3107369 N6GAZ Geoffrey 3107370 KD6NKS John 3107371 KB9MWO Joseph -3107372 KM6KXS Orlando +3107372 KM6KXS 3107373 W6NRS Gloria 3107374 N6IET Richard 3107375 KD6OKR Danny @@ -64319,7 +77420,7 @@ 3107388 W6JT Jerold 3107389 KK6RUN Michael 3107390 KK6RUN Michael -3107391 N6YN Edward +3107391 N6YN Ed 3107392 N1KN Brad 3107393 WA6RAQ Renita 3107394 KD6AMN Ann @@ -64442,12 +77543,11 @@ 3107512 KK6FNS Saif 3107513 W6BNS Robert 3107514 K6EF Mark -3107515 KG6BNL Benjamin +3107515 N6BRL Benjamin 3107516 AI6SB Steven 3107517 AC6AC Elliot 3107518 KY6O Richard 3107519 K6BKD Benjamin -3107520 KD6YDZ Boyan 3107521 KM6AB Mike 3107522 N6IB Mark 3107523 N6SH Anthony @@ -64556,12 +77656,12 @@ 3107626 KM6DMB Mark 3107627 K6BEZ Beric 3107628 KF6VGZ Craig -3107629 N6DBS Mike -3107630 N6YN Edward +3107629 K6HF +3107630 N6YN Ed 3107631 KK6ZTV Mark 3107632 KI6QEE William 3107633 KF6VGZ Craig -3107634 KK6UZS Erik +3107634 W6INE Erik 3107635 N6CZE Gary 3107636 K6CW Donald 3107637 W6TYL Joseph @@ -64589,7 +77689,7 @@ 3107659 KC6UZE John 3107660 KK6HWP Matthew 3107661 KK6NUI Michelle -3107662 N6JET Christopher +3107662 N6JET Chris 3107663 KJ6UTZ Andrew 3107664 KK6OOS Roselito 3107665 N0CSW Christopher @@ -64600,7 +77700,7 @@ 3107670 KE6UJA Peter 3107671 WA6AJC Mathew 3107672 N6EIO David -3107673 N6JET Christopher +3107673 N6JET Chris 3107674 W6QN Harvey 3107675 W5AFK Chris 3107676 AG6Q Ralph @@ -64667,7 +77767,7 @@ 3107737 KI6IKV Jackie 3107738 KE6KOI Ben 3107739 WV6S Robert -3107740 K9WWV Christopher +3107740 K9WWV Chris 3107741 KE6LHY John 3107742 KQ6FU Sean 3107743 KF6MZP Scott @@ -64683,7 +77783,7 @@ 3107753 KE7DO Gregory 3107754 KA6PNK Dorothy 3107755 N6KEV Kevin -3107756 KD8DRX William +3107756 KD8DRX Kiley 3107757 KM6EAY Marcellino 3107758 K0PGE Ronald 3107759 WB6CIX Carl @@ -64866,7 +77966,7 @@ 3107938 AF6FZ Daniel 3107939 W6ABJ Richard 3107940 KC6YDH Ralph -3107941 KE6YJC MountainWest +3107941 KE6YJC Ted 3107942 KJ6YOG Jaime 3107943 AK6Y Eric 3107944 KE6VRK Edward @@ -64924,6 +78024,7 @@ 3107997 KK6YVM Austin 3107998 KR1JOE Joe 3107999 N6UQ Augusto +3108000 N5JXB Raymond 3108001 NR2Y Marinus 3108002 WA2YZT Paul 3108003 K0JSC Jeff @@ -64964,7 +78065,7 @@ 3108038 KT0L Rick 3108039 KG0AX Ray 3108040 N0MHU Ed -3108041 WK0F Robert +3108041 WK0F Robin 3108042 W0MTZ Ferman 3108043 KA0TTF William 3108044 W0MTZ Ferman @@ -65114,7 +78215,6 @@ 3108190 NV0N Joey 3108191 W0UAW Emit 3108192 K0LMH Lisa -3108193 N2MED John 3108194 KD0MGQ Ken 3108195 K0EWF Eric 3108196 KD0QEI Michael @@ -65152,7 +78252,6 @@ 3108229 KD0QLY Matthew 3108230 KD0QLY Matthew 3108231 AC0KQ Willem -3108232 WA9TCD George 3108233 K0RZ William 3108234 KC0AGG Paula 3108235 WY0X Nate @@ -65161,13 +78260,12 @@ 3108238 K0FNL Mark 3108239 W0KU Scott 3108240 W0CBI David -3108241 WB0TUB Timothy 3108242 KB5YZD William 3108243 K9FEL Mindy 3108244 KB0RFC Elliot 3108245 NC0JW James 3108246 KC0YYF Jim -3108247 K0TZ Robert +3108247 K0TZ Stephen 3108248 N0UA Vincent 3108249 WA0MJX Jeff 3108250 K0HEH Jack @@ -65180,7 +78278,7 @@ 3108257 K6HRQ Daryn 3108258 N0KKO Paul 3108259 KC2CAG Thomas -3108260 K0KAI Debra +3108260 K0XO Debra 3108261 K0XK Zeke 3108262 KC0QIS Dave 3108263 K0TIT Robert @@ -65204,7 +78302,6 @@ 3108281 W0CMH Michael 3108282 K0MKT Dean 3108283 KC0CTN Jeff -3108284 WA0YGQ Paul 3108285 K0RYY Corey 3108286 AI7PM Phillip 3108287 KE0MF Mike @@ -65369,16 +78466,16 @@ 3108447 KB5SPW David 3108448 KD0GBX Brad 3108449 KD0GN Don -3108450 KA0CSL Tony 3108451 KE0BTS Alycia 3108452 KC0OCV Christiopher 3108453 AI8Z Michael 3108454 KD0RPH Janice 3108455 KD0NQA Adrian 3108456 KC0MHT Dave +3108457 KM4IKO James 3108458 KE0DCX Katie 3108459 W6OAL David -3108460 KE0AGE Randolph +3108460 K2MPI Randolph 3108461 KD0BER Paul 3108462 KE0DEJ Israel 3108463 KB0UBZ Ben @@ -65466,7 +78563,7 @@ 3108545 K0RTX Karin 3108546 KC0VJD Delbert 3108547 W1CAT Brian -3108548 KD0MBL Neal +3108548 N1TEW Neal 3108549 AD0JL Richard 3108550 K0ONV Ronald 3108551 KA0WIE Alfred @@ -65519,6 +78616,7 @@ 3108598 KB0CM Luiz 3108599 N4TCW Lee 3108600 W0BBB William +3108601 KB3TZZ Richard 3108602 AA0DW Doug 3108603 W6OAV Bill 3108604 N8WJA Richard @@ -65532,7 +78630,7 @@ 3108612 WD0HDR David 3108613 WD0HDR David 3108614 KS3FOX Steve -3108615 KE0GGA Mark +3108615 K0YC Mark 3108616 N0HI Jessie 3108617 KI0GO Mike 3108618 KC0OHC John @@ -65622,12 +78720,11 @@ 3108702 W7YNP Thomas 3108703 KE4GUQ Charles 3108704 KQ0L Leonard -3108705 K0RUS Timothy +3108705 NR0D Timothy 3108706 KC5NGG Fletcher 3108707 N0BCB Bryan 3108708 KE0CPQ Chris 3108709 KE0AYH Monique -3108710 KB0CM Luiz 3108711 KC1ARF Chris 3108712 KC5ENC Timothy 3108713 W0RPG Russell @@ -65680,7 +78777,6 @@ 3108760 KD0BDZ Jeremy 3108761 WC0AAX Dhsem 3108762 W0JMC John -3108763 WB0TUB Timothy 3108764 N0ZUQ Clifford 3108765 K0DNS Joseph 3108766 W0FFC Gerald @@ -65700,7 +78796,7 @@ 3108780 WB0QMR Paul 3108781 N0VZ Kenneth 3108782 K1DCY Derik -3108783 AD0EO Scott +3108783 AI0SE Scott 3108784 W0JLS Jack 3108785 W0JLS Jack 3108786 N0VZ Kenneth @@ -65905,7 +79001,6 @@ 3108985 AC0JM Francisco 3108986 K0SVT Conrad 3108987 KE0DEL James -3108988 W6BLO Jonathon 3108989 KE0DNL James 3108990 W0ARP Wayne 3108991 N0GMC Jess @@ -65916,7 +79011,8 @@ 3108996 AE2L Justin 3108997 KE0LUP Joseph 3108998 KE0LUP Joseph -3108999 KD4NFB Aaron +3108999 AA0QQ Aaron +3109000 KG5TVX Brian 3109001 WA2WCB Michael 3109002 N1MCC Kit 3109003 N1MCC Kit @@ -65931,7 +79027,7 @@ 3109012 W1ERB Eric 3109013 K1ZE Ed 3109014 W7YY Bill -3109015 W1FSM Curt +3109015 K4JCS Curt 3109016 N1LXV Ed 3109017 N1OFJ Dave 3109018 K1TMM Thomas @@ -65966,7 +79062,7 @@ 3109047 K1IKE Joseph 3109048 N1AKF William 3109049 NV1SN James -3109050 N1ZU Samuel +3109050 KA1HCX Sam 3109051 KB1VFC Kevin 3109052 KB1AEV Dana 3109053 KB1VVB Thomas @@ -65991,7 +79087,7 @@ 3109072 N1XG Bruce 3109073 N1FNE Rod 3109074 N1LES Joseph -3109075 WB2JVB Paul +3109075 W1IP Paul 3109076 W1DVE David 3109077 N1BDF Jon 3109078 W8ZY Mike @@ -66007,7 +79103,7 @@ 3109088 NG1R Roger 3109089 KB1LYP John 3109090 WA2IZQ Mark -3109091 W1FSM Curt +3109091 K4JCS Curt 3109092 W1LW Walt 3109093 W1QK Daniel 3109094 WR1Z Gregory @@ -66061,7 +79157,7 @@ 3109142 KB1IFY William 3109143 KA1KNW Greg 3109144 W1GTT William -3109145 W1DRC Terry +3109145 W4KHZ Terry 3109146 W1QJ Louis 3109147 AI1V Jon 3109148 K1VSC Ronald @@ -66100,7 +79196,7 @@ 3109181 W2ROS Rosty 3109182 KB1IPB Robert 3109183 N1CUI Ward -3109184 KB1YLQ Steve +3109184 N1CM Steve 3109185 K1VI Mike 3109186 K1VGF Kevin 3109187 WF1H Jonathan @@ -66141,7 +79237,7 @@ 3109223 N1EN Michael 3109224 N1JFF Jeff 3109225 AA1VE David -3109226 W1DRC Terry +3109226 W4KHZ Terry 3109227 W1NBV Michael 3109228 KA1WPM Dana 3109229 K1CWT Charles @@ -66250,7 +79346,7 @@ 3109332 KC1DSC Christopher 3109333 N1KGN Eddie 3109334 K1IED Larry -3109335 KB1UUX Ron +3109335 WA1RHG Ron 3109336 KC1DWP Jeffrey 3109337 K1SEI Tage 3109338 W1MKT Thomas @@ -66284,7 +79380,7 @@ 3109367 K1XS Kenneth 3109368 KA1MJ George 3109369 K1ROR Randy -3109370 KB1YLQ Steve +3109370 N1CM Steve 3109371 N1AJW Alec 3109372 K1JSH James 3109373 N1VXQ Ronald @@ -66449,7 +79545,7 @@ 3109532 N5UTO Ralph 3109533 W1GIV George 3109534 WA1ORT Raymond -3109535 N1ZU Samuel +3109535 KA1HCX Sam 3109536 KC1JDP James 3109537 KW1S Scott 3109538 KB1GXQ Michele @@ -66554,7 +79650,7 @@ 3109638 KC1EHW Marlon 3109639 KD5PIE John 3109640 N0FQY William -3109641 KC1GQY Jonathan +3109641 W1ZMT Jonathan 3109642 KB1JQA Philip 3109643 W1PPL Paul 3109644 KA1DTG John @@ -66573,7 +79669,7 @@ 3109657 N1SEZ Paul 3109658 KB1UUP John 3109659 KC1DSC Christopher -3109660 W1RKR Richard +3109660 W1RKR Rick 3109661 KB1UXF John 3109662 K1LTJ Allan 3109663 KD1JG Robert @@ -66697,7 +79793,7 @@ 3109783 NG1B George 3109784 KB1HUX Michael 3109785 KB1LRT Larry -3109786 KC1HYM Steven +3109786 N1AD Steven 3109787 K1MTA Matthew 3109788 N1TAA Travis 3109789 KC1IUC Erik @@ -66730,7 +79826,7 @@ 3109818 KF4KLF Michael 3109819 K8JAS James 3109820 KC1ILM Scott -3109821 KC1ILP Timothy +3109821 WB1ZPM Timothy 3109822 KC1ILM Scott 3109823 K1MJM Michael 3109824 K8JAS James @@ -66799,7 +79895,7 @@ 3109894 WA1CYM Jack 3109895 W1MEM Mark 3109897 KB1OMM John -3109898 KA1VSC Matthew +3109898 KA1VSC Matt 3109899 N1GSA Gary 3109900 N1GSA Gary 3109901 WX1T Thomas @@ -66808,7 +79904,7 @@ 3109904 KB1WY Gary 3109905 N1CBD Thomas 3109906 AL7QS Douglas -3109907 WB1CQO Demo +3109907 N1ZU Greater 3109908 KB1KIX E 3109909 AL7QS Douglas 3109910 K1EHW George @@ -66854,6 +79950,52 @@ 3109952 W1SMF Samuel 3109953 N1QHT C 3109954 K1RMN Robert +3109955 K0MGS Matthew +3109956 WB1FZY Peter +3109957 WB1FZY Peter +3109958 AD5AN James +3109959 KK4E Don +3109960 N0FON Damon +3109961 WA4VMF Wyatt +3109962 N9WGV William +3109963 KL0IP Brian +3109964 KD2AQV Steele +3109965 N3KPJ Albert +3109966 WA3KBE Glenn +3109967 AD5CA Mark +3109968 KM4ICE Patrick +3109969 KM4LGH Kenneth +3109970 WL7AQ Dennis +3109971 KD5QDO Jeffrey +3109972 KF6CZE Mark +3109973 KD5VNA Lisa +3109974 KB3LMS Jason +3109975 NH6NN Stephen +3109976 KA8MNP Randall +3109977 W1LOL Jesse +3109978 KB9SXF John +3109979 KC3LYZ Robert +3109980 K2BIG Arthur +3109981 K4MWW Michael +3109982 WH6FC Richard +3109983 AA0JA William +3109984 KF5IUM Michael +3109985 WB8UYK Michael +3109986 KM4UGI David +3109987 KM4UGI David +3109988 WX1XX Sidney +3109989 KI7VXS Thomas +3109990 W9DSW Daniel +3109991 W9DSW Daniel +3109992 KD2PDS Jonathan +3109993 KI4QAB Walter +3109994 KI4QAB Walter +3109995 KD0M Dale +3109996 KD0M Dale +3109997 N3UC Michael +3109998 W5EAN Sean +3109999 KN4JEL Barry +3110000 KD0ULW John 3110001 N2VRQ David 3110002 KB3WQH Robert 3110003 KC3BNZ Street @@ -66873,7 +80015,7 @@ 3110017 N3YDN Edward 3110018 KB3REU Michael 3110019 N3OB Edward -3110020 N3NSP John +3110020 N3TOW John 3110021 AB3SD James 3110022 W3MLK Martin 3110023 KC3HDS Eric @@ -66885,7 +80027,7 @@ 3110029 NR3P Paul 3110030 K3PGM Paul 3110031 N3TU Gregory -3110032 N3YMS Nicholas +3110032 N3YMS Nick 3110033 KC3IQK Anthony 3110034 K3JRZ Jeffrey 3110035 AB3GD John @@ -66940,7 +80082,7 @@ 3110088 KB3VQU Clifford 3110089 NS3F Lars 3110090 NS3F Lars -3110091 N3YMS Nicholas +3110091 N3YMS Nick 3110092 KC3EIB John 3110093 AD3J Martin 3110094 N3KNT Rodney @@ -67015,7 +80157,7 @@ 3110168 K4MRO Michael 3110169 AC8RS Matthew 3110170 KF5VZT William -3110171 KE8HNW Brian +3110171 K8HAX Brian 3110172 KN4MMA Matthew 3110173 K8JC Joseph 3110174 KJ6SFT Richard @@ -67024,7 +80166,6 @@ 3110178 KE0RHP Doug 3110179 KN4MNQ Joel 3110180 N1HWR Donald -3110182 KD9LBJ David 3110183 K3DS Dennis 3110184 K9CBT Christian 3110185 KB9KWP Herman @@ -67091,7 +80232,7 @@ 3110251 WS1L Charles 3110252 KI7UWN Daniel 3110253 KN4LRJ David -3110254 N3LJZ Stephen +3110254 AA3SP Stephen 3110255 AF5HW William 3110256 KC0ZPY John 3110257 KE0OOV Katherine @@ -67114,7 +80255,7 @@ 3110275 KF1EMA Fema 3110276 KF1EMA Fema 3110278 KK4ZNB Jamie -3110279 KC2OMU Darrin +3110279 W2OMU Darrin 3110280 KB0GXM Juan 3110281 N5YFK Paul 3110282 WO3S Eric @@ -67122,13 +80263,16 @@ 3110284 W5NNI 3110285 KE8USN Thomas 3110286 KC8URM Robert +3110287 WB4EHG Richard 3110288 KE0OAL Patrick +3110289 WA7TUG Gary 3110291 KD8CXS Lori +3110292 KE8GAA Preston 3110293 KB8SRX Ronald 3110294 KN4MDD Kenneth 3110296 AA7NS Dick 3110297 W1TTM Michael -3110298 KN4MPC Kirmet +3110298 KN4MPC Dwyane 3110300 KM4PRZ Anthony 3110301 AE9L Jerry 3110302 KC0JFF Jeffrey @@ -67142,7 +80286,7 @@ 3110310 KG5UHV Jose 3110311 KG7BKH Dallin 3110312 K6FRB Robert -3110313 KD9KKD William +3110313 W9WGB William 3110314 KG5WQJ John 3110315 KC9MJU Donald 3110316 KI7GGG Nick @@ -67190,6 +80334,7 @@ 3110365 KB2LLP Ronald 3110366 AC9MG Robert 3110367 N5TXG William +3110368 W9JAE Jan 3110369 KD0BAH Jeremy 3110370 KG7OGJ Nathan 3110371 KG5CR Robert @@ -67197,7 +80342,7 @@ 3110375 KH6IB Randolph 3110377 W0RCT Ross 3110378 AI4QR Steve -3110379 KB4SFP Timothy +3110379 N4TRG Timothy 3110380 W5NYV Michelle 3110381 W2EEU David 3110383 K4LWJ Ray @@ -67210,8 +80355,8 @@ 3110390 AA4YB Larry 3110391 W2EEU David 3110392 N7KHZ Robert -3110393 K4KEK Grant -3110394 K4KEK Grant +3110393 W4KEK Grant +3110394 W4KEK Grant 3110395 KD9AYT Keyth 3110396 W1DWF David 3110397 KG5VOO David @@ -67245,27 +80390,27 @@ 3110427 WB0HNO Neal 3110428 N9NDF Jason 3110430 WH6FTE Ken -3110431 W2RDG Robert +3110431 KN2N Robert 3110432 N4EWK Jeffery -3110433 W2RDG Robert +3110433 KN2N Robert 3110434 KK4BFN Kevin 3110435 K2JML James 3110436 K8FA Archie 3110437 KI7YKO Paul 3110438 W3DHS Joe 3110439 AC3CT Timothy -3110440 N4EBC Bryan +3110440 N4BSH Bryan 3110441 AA7YA Stacey 3110442 WH6SY Mark 3110443 AC3CT Timothy 3110447 WH6OHM Kevin -3110448 N4EBC Bryan +3110448 N4BSH Bryan 3110449 KM6PLU Alfredo 3110450 KN4GCP Austin 3110451 KI7OVV Jim 3110452 KK6BUD Randall 3110454 KM4CQG Ian -3110455 KD9KQX Jordan +3110455 K3BE Jordan 3110457 KG5KBA Ferdinand 3110458 N5LLH Terry 3110459 K9SCP Silvia @@ -67338,7 +80483,7 @@ 3110535 AA7NS Dick 3110536 KC8ZYV Ryan 3110537 KI4GHM Matthew -3110538 KC1JAN James +3110538 K1POW James 3110539 KE0RYB Kenneth 3110540 KG5OER William 3110541 W4JSF Ryan @@ -67355,7 +80500,7 @@ 3110554 N0XNH Bruce 3110555 W3RTZ David 3110556 W6PXT Alan -3110557 KN4MQO Shawn +3110557 KK4LTF Shawn 3110558 KG5SST Rodney 3110560 N3GKU David 3110561 N7NLL Ronald @@ -67367,6 +80512,7 @@ 3110567 KK4A James 3110568 WH6FTX Brenton 3110569 KC8EDS Todd +3110570 KG5UTB 3110572 N3JBM John 3110573 KJ5MA Mack 3110574 W0EMP Ears @@ -67435,7 +80581,7 @@ 3110646 KM6BHU Patrick 3110649 KG6HVM Doug 3110650 W9HR Doug -3110652 KE0PKS Kristopher +3110652 KU0S Kristopher 3110653 KC4VOL Scott 3110654 WA2BOP Barry 3110656 K7TFT Anthony @@ -67445,6 +80591,7 @@ 3110660 N9QL James 3110661 KB5ZXM Darrell 3110662 NG8M Nickolas +3110663 KB0WR David 3110664 KA4JLE Joel 3110665 KA9OIA Lori 3110666 KA9OIA Lori @@ -67454,7 +80601,7 @@ 3110670 W8LT Ohio 3110671 W8LT Ohio 3110672 KD8TQU Michael -3110673 N2CID Jamie +3110673 N2CID Jay 3110674 KD2MTG Lawrence 3110675 W0UHN Pamela 3110676 K0KDO Kevin @@ -67473,7 +80620,6 @@ 3110689 KE6REO Jason 3110690 KN4KJW Felix 3110691 KF6FM Timothy -3110692 N3RJV Michael 3110693 AJ6CP Robert 3110694 KA4PKB Robert 3110695 KN4KJW Felix @@ -67485,10 +80631,10 @@ 3110702 WB5KSD Jonathan 3110703 KM6SPT Joe 3110704 N5CH Lonnie -3110705 KA8FBI Thomas +3110705 N8HRO Thomas 3110706 WB8VWI Rob 3110707 K4NOE Raul -3110708 KN4MSH Benone +3110708 KN4MSH Viorel 3110710 KD7CWB Freddie 3110711 KB5WWW Larry 3110712 N1BAH Blake @@ -67510,14 +80656,13 @@ 3110729 KM6TPP Zeke 3110730 NQ8RP Roger 3110732 K5VK Michael -3110733 KI5ACN Vincent 3110734 K1JJN Joseph 3110735 N1PFC Kurt 3110737 K2PLB Anton 3110738 K2RSY Frank -3110739 KE8JYU James +3110739 W8KUZ James 3110741 WB4BAX Michael -3110742 KD2PUW Charles +3110742 WF2N Charles 3110743 N4JBL Jason 3110744 N4JBL Jason 3110745 KD5OOD Dustin @@ -67525,7 +80670,7 @@ 3110747 KE0RYI Logan 3110748 N5XXO Rodney 3110749 KL4NC Timothy -3110750 KD2PYE Uladzimir +3110750 AC2F Vladimir 3110751 KJ4BMX Sabrina 3110752 KK4GPS Patrick 3110753 W8JUK Robert @@ -67556,6 +80701,7 @@ 3110778 KB3DJR Fernando 3110779 KJ4LON Mark 3110780 KG4PTO Stephen +3110781 G2PA Paul 3110782 W4CQM Jan 3110783 K7RRG Ryan 3110784 WB9CWE Michael @@ -67569,7 +80715,7 @@ 3110792 K2CDH Christopher 3110793 KM4UYA Joseph 3110794 N4GEB Robert -3110795 KC8QCH Jeffrey +3110795 N8ACL Jeff 3110796 KM4WTX Ben 3110797 N1IWP Scott 3110798 K3CSX Frederick @@ -67602,8 +80748,8 @@ 3110827 KG5HLP Juan 3110828 KE8JTG Russell 3110829 KB8TAR Kevin -3110830 KN4KUU Jeffrey -3110831 AC8SC Sidney +3110830 N0FLA Jeffrey +3110831 N8EF Sidney 3110832 W5WEC Glendal 3110833 KG5UIP Blaze 3110834 KK6YWG Jack @@ -67648,7 +80794,7 @@ 3110878 KI6RHD Gary 3110879 N0GRT Alan 3110881 KD2OTC Stephen -3110882 KG5WJQ John +3110882 K5GT John 3110883 N2GTO Joseph 3110884 WB9EEH David 3110885 KA6CJL Carlos @@ -67663,6 +80809,7 @@ 3110894 K9SRS Scott 3110895 KC1AEL Wayne 3110897 AJ6AP Jamison +3110898 KE0RSQ Colin 3110899 KM6GZL William 3110901 KI4WYX Frank 3110902 KN4IJA David @@ -67678,7 +80825,7 @@ 3110913 KL1OE John 3110914 KM6LKW Kevin 3110916 KC2SUD James -3110918 KM6KOQ Neil +3110918 W6GRA Neil 3110919 KC3GOK Christopher 3110920 KM4MIS Charles 3110921 KN4MRA Jonathan @@ -67704,7 +80851,7 @@ 3110942 N4MDP Michael 3110943 K9MTD Todd 3110944 KD6WFG Arturo -3110945 KC3LKL Eric +3110945 WS3RIC Eric 3110946 AF7MT Russell 3110947 KI7YPN John 3110948 K3EVM Eugene @@ -67724,8 +80871,7 @@ 3110964 KB2SGD Al 3110965 N8CNZ Bruce 3110966 KN4MVT Carl -3110967 KN4KUU Jeffrey -3110968 KA3EMT Aaron +3110967 N0FLA Jeffrey 3110969 KN4EDA Luis 3110970 KB9YYL Chris 3110972 WA1IDA S @@ -67750,12 +80896,12 @@ 3110991 WB9GFA Stanley 3110992 KD0ZWF Daniel 3110993 K6SER Levi -3110994 KC3LOT Aaron 3110995 N3EL Noel 3110996 KI7LWL Justin 3110997 N5QNS Whitney 3110998 KI7BFE Harry 3110999 W5GJT Gene +3111000 AA2PT Tunc 3111001 W2NJS Tom 3111002 W3DCA Michael 3111003 WA1ESQ Jason @@ -67833,7 +80979,7 @@ 3111086 KC1RX Donald 3111087 KN3A Scott 3111088 KD3NZI Dennis -3111089 KV1W Richard +3111089 KV1W Ric 3111091 KE0LQH Dan 3111092 K8RJR Robert 3111093 KJ4VTZ Paul @@ -67868,7 +81014,7 @@ 3111122 KD7QOY John 3111123 W9MDA Mark 3111124 KI5AUW Christoher -3111125 KI5AUX William +3111125 K5YE William 3111126 N9SES Ayman 3111127 K8RJR Robert 3111128 KD8FGG Casandra @@ -67907,7 +81053,7 @@ 3111163 KN4OAR Christopher 3111164 KD8ZKW Kenneth 3111165 KB2SVQ Nelson -3111166 W6LAN Alan +3111166 W6WN Alan 3111167 KD0CLW Christina 3111168 KA1AWK Matthew 3111169 N6ADO Gary @@ -67922,7 +81068,7 @@ 3111178 K1RT Edward 3111179 WA2ZLB Peter 3111180 KJ4I Jason -3111182 N4FTO David +3111182 KD4QOD David 3111183 K7RIX Rick 3111184 KE0HRQ Michael 3111185 KG6L Joseph @@ -67957,7 +81103,7 @@ 3111216 KN4OAX Johnathan 3111217 KR0M Jean 3111220 N6XVZ David -3111221 KK4SQI Keith +3111221 WA8B Keith 3111222 KM4TMP J 3111223 KN4OAP Brian 3111224 KM4IEF Michael @@ -68069,8 +81215,8 @@ 3111335 N9NDW Daniel 3111336 N3ATL Jared 3111337 WB2WGH Ronald -3111339 KA3UTD Terence -3111340 KA3UTD Terence +3111339 KA3UTD Terry +3111340 KA3UTD Terry 3111341 KE4RK Maurice 3111342 W5RGD Robert 3111344 N3LXJ Timothy @@ -68078,7 +81224,7 @@ 3111346 KJ4TRN Justin 3111347 W3EQB Evan 3111348 KE8LZ Bruce -3111349 KN4NXR Ryan +3111349 W4RNF Ryan 3111350 KD9LLZ Philip 3111351 W7COA Clifton 3111352 K8ITE John @@ -68097,7 +81243,7 @@ 3111367 KB9STB Myron 3111368 N8PRB Philip 3111369 KH6AAA Thomas -3111370 KI1KER Gregory +3111370 KI4KER Greg 3111371 AH7DN Deborah 3111372 KF5ERW Wanda 3111373 W9TIG Gary @@ -68131,8 +81277,8 @@ 3111406 WB6BFN Wayne 3111407 K4BRI Brian 3111408 KF5UTX Roger -3111409 W3PII Ben -3111410 KG4YIM John +3111409 W3PII Benjie +3111410 WX4BES John 3111411 N6WJU Kellie 3111412 KG7MVC Braeden 3111413 N9ATV William @@ -68161,13 +81307,13 @@ 3111441 KE0HRS Laurie 3111442 KD0NEM Clifford 3111443 KB3VSP Daniel -3111445 KB3VSP Daniel 3111446 KE4AIK Jonathan 3111447 W5TZX Gerard 3111448 KB1NTC Shirlee 3111449 K3RRR Robert 3111450 W8MRW Roy 3111451 KC4FIE Brian +3111452 KM4AJZ John 3111453 N8ZA Charles 3111454 K1DAV David 3111455 K1DAV David @@ -68231,7 +81377,7 @@ 3111521 K7TAF Tami 3111522 KA3LWC George 3111523 N4FMJ Justin -3111524 W2TAG Ted +3111524 N8MP Ted 3111525 AI4HO Mark 3111526 W2CLM Christopher 3111527 W2CLM Christopher @@ -68335,7 +81481,7 @@ 3111640 W2XYZ Frank 3111642 KI4PBJ Ariel 3111643 KD5TLN Dan -3111644 WB3IHY Joseph +3111644 WB3IHY Joe 3111645 AF5JG Richard 3111646 N5BBB Cheng 3111647 K7NEL Paul @@ -68348,7 +81494,7 @@ 3111656 KA1VCA Brian 3111657 K4PAR Putnam 3111658 KD9ANW Trenton -3111660 NY5D Rhoderick +3111660 NY5D Derrick 3111661 AD0UU Paul 3111662 KD8NZF David 3111663 KF4TC Tommy @@ -68367,6 +81513,7 @@ 3111677 KB2GTQ Robert 3111678 KM4RLM Kenneth 3111679 KM4KYV Joe +3111680 KN4NIX Eric 3111681 KC7SNF Patricia 3111682 K5BMD Wilba 3111684 K2CK Scott @@ -68397,7 +81544,6 @@ 3111711 W2SGC Justin 3111712 N1OBU Douglas 3111713 KG6OHL Robert -3111714 WA2KFV Alvin 3111715 K3JZ Marc 3111716 AB6CW Michael 3111717 KK4QBN Timothy @@ -68412,6 +81558,7 @@ 3111726 KJ4ANG Randall 3111727 N3TN John 3111729 KD7AOO Eric +3111730 NG8P Howard 3111731 KN4LIH Roy 3111732 KN4NTV Kevin 3111733 KE8FNV Willie @@ -68462,10 +81609,11 @@ 3111782 W8BUX David 3111783 KD8RTP John 3111784 W7QZ Roger -3111785 KI5ANA Jorge +3111785 W3JDG Jorge 3111786 W4KVW Clayton 3111787 KD9KAE David 3111788 KM6NNF Mark +3111789 KF5TWK William 3111790 AH0U Bruce 3111791 WD4RPJ Louis 3111792 KE6VRL Hector @@ -68510,8 +81658,8 @@ 3111833 KD9KAE David 3111834 KC9CMK Justin 3111835 KC9CMK Justin -3111836 KC9PBR Jason -3111837 KC9PBR Jason +3111836 W9PQH Jason +3111837 W9PQH Jason 3111838 W1MJI Michael 3111839 KA8SAF Robert 3111840 KD6NCA Kevin @@ -68537,6 +81685,7 @@ 3111864 AB3TR Gregory 3111866 KE5ZRO Christopher 3111867 KF5NUP Edward +3111868 KN4NIX Eric 3111869 KG5YLG John 3111870 K2EXX Stan 3111871 KC3KXZ Samuel @@ -68554,7 +81703,6 @@ 3111883 K6VLH David 3111884 KA6QDE Thomas 3111885 KB3ODU Scott -3111886 KD8ABW Francis 3111888 K4YK John 3111889 KE6CD Frederick 3111890 W4IXC Winston @@ -68599,7 +81747,7 @@ 3111935 WA6NYF Donald 3111936 KE0CEN Michael 3111937 KE0CEM Gunnar -3111938 KJ6VUA Arthur +3111938 N0ART Arthur 3111939 WM7X Stephen 3111940 K6MJM Michael 3111941 N5WXC Stephen @@ -68614,7 +81762,7 @@ 3111950 N9PJS James 3111951 KN4OBP Christopher 3111952 KN4OGB Yun -3111954 W8ZAR Gregory +3111954 W8ZAR 3111955 KM8YOR Michael 3111956 W1UED Daniel 3111957 N5BEG Leon @@ -68637,7 +81785,7 @@ 3111975 KG5TZD Beika 3111976 KG5TZD Beika 3111977 KC6POF William -3111978 KM4WAA Richard +3111978 K4VBR Richard 3111979 N6DDZ Bruce 3111980 KB2LFS William 3111981 W2PDN Chris @@ -68656,10 +81804,10 @@ 3111996 WA3SYE Jason 3111997 KE0AOS Dana 3111999 KK4ISC Michael +3112000 KE8IUB Thomas 3112001 KC2SKU Walter 3112002 K4XF Rich 3112003 N4PL Wald -3112004 W4ROA Chuck 3112005 KD4HKR Charlie 3112006 WB4CDH Charles 3112007 KJ4WYG Matt @@ -68784,7 +81932,7 @@ 3112126 K4PCS Kevin 3112127 KK4HHH Christopher 3112128 N2YAG William -3112129 KJ4PIU Cj +3112129 KJ4PIU CJ 3112130 N4ZUW Joseph 3112131 K4AUS Jason 3112132 KA4JAW James @@ -68794,7 +81942,7 @@ 3112136 KK4SUU Maria 3112137 KK4SAM John 3112138 N4IRS Steven -3112139 N4UNT Herb +3112139 KX4QV Herb 3112140 KG4YJI Steve 3112141 K4SRN Kurt 3112142 N2BM Moni @@ -69046,8 +82194,8 @@ 3112391 KM4BKB Andrew 3112392 W3JFR Dean 3112393 WD4SFR Randy -3112394 N4UNT Herb -3112395 N4UNT Herb +3112394 KX4QV Herb +3112395 KX4QV Herb 3112396 KA4TXY Dave 3112397 W4MCA Michael 3112398 N4JTK John @@ -69068,7 +82216,7 @@ 3112413 AK4FU Frank 3112414 KJ4JTQ Edward 3112415 KJ4NLK Randy -3112416 KC2HFL Rick +3112416 W2BFD Rick 3112417 N3GBZ Billy 3112418 KK4YKE Troy 3112419 NK5B Joe @@ -69089,7 +82237,7 @@ 3112434 WA2NCH William 3112435 KW4FO Rachel 3112436 KJ4YVN Miguel -3112437 W4KHZ David +3112437 W4KHZ Terry 3112438 KM4EHL Ned 3112439 N7CAC Charles 3112440 KF4T Brian @@ -69110,8 +82258,8 @@ 3112455 K4LEW Lewis 3112456 N4VBR Timothy 3112457 N4LEM Ramond -3112458 W1DRC Terry -3112459 KM4IQB Carlos +3112458 W4KHZ Terry +3112459 K2WC Carlos 3112460 WM1J Charles 3112461 K4OIL Ron 3112462 AI4P Ashley @@ -69174,7 +82322,7 @@ 3112519 K6RZS Allan 3112520 KR4PI Richard 3112521 W3FL Marshall -3112522 KC2UDL Joseph +3112522 KC4JRH Joseph 3112523 N4MEW Mark 3112524 W4NVU Dade 3112525 WA8VSJ Lewis @@ -69195,8 +82343,9 @@ 3112540 AD4ZU Chris 3112542 KK4MC Michael 3112543 NN4TT Dave -3112544 N4DER Gustavo +3112544 KK4CO Gustavo 3112545 KM4MXP Raymond +3112546 KE8IUB Thomas 3112547 KM4DIL James 3112548 KF4I Thomas 3112549 KB4T Frank @@ -69204,7 +82353,7 @@ 3112551 N9JHM James 3112552 AE4WG Warren 3112553 KB4T Frank -3112554 KE4QYM +3112554 W1DSL David 3112555 W4FZM Duane 3112556 N4ZZN Gregory 3112557 W4RBW Frank @@ -69275,10 +82424,10 @@ 3112623 WB2CIC Charles 3112624 KM4HTH Dan 3112625 K4EB Larry -3112626 AJ4FW Ricki +3112626 AJ4FW Rick 3112627 K4ROX Keith 3112628 K7HJE Hugo -3112629 KM4MFW John +3112629 KE4JQ John 3112630 NC9Z Drew 3112631 KJ4G Paul 3112632 KJ4G Paul @@ -69333,7 +82482,7 @@ 3112682 W2EMM Bob 3112683 N4BLD Bob 3112684 KE4LUH Donald -3112685 AC9JY Raymond +3112685 AC9JY Ray 3112686 WA2HVT Arthur 3112687 WA2HVT Arthur 3112688 K4NES Andrew @@ -69357,7 +82506,6 @@ 3112707 W4MYK Ralph 3112708 W2EMM Bob 3112709 KK4TAR Phillip -3112710 KE4QYM 3112711 KU0R David 3112712 KB4OVL James 3112713 W2EJR Ed @@ -69405,7 +82553,7 @@ 3112755 KM4JSS Paul 3112756 KW4QH Larry 3112757 WA4DKD Abbott -3112758 NP2DL +3112758 NP2DL Carlos 3112759 KB2VUQ Dennis 3112760 N7WWL Kurt 3112761 CX9BX Edgardo @@ -69465,7 +82613,7 @@ 3112815 N4WDH Duane 3112816 WP3D Ramon 3112817 AK4MM Val -3112818 NT7R Michael +3112818 KT4RJ 3112819 K4LAW Seth 3112820 W2WEG Joseph 3112821 W2PRI Robbin @@ -69486,7 +82634,7 @@ 3112836 W4FSA Frederic 3112837 WA6POZ Gerald 3112838 AD3N Archie -3112839 NT7R Michael +3112839 KT4RJ 3112840 KG4JSZ James 3112841 WY4J Edward 3112842 KN4NN John @@ -69544,7 +82692,7 @@ 3112896 WB2SVB Lawrence 3112897 N4DMH Dennis 3112898 KI4SFT Joel -3112899 KK4YNV Anthony +3112899 KK4YNV Hanna 3112900 KE4MWZ George 3112901 KI4SFT Joel 3112902 WB2BQK Alan @@ -69568,7 +82716,7 @@ 3112921 KK4ISZ Paul 3112922 N8GWK Barb 3112923 KM4KQQ Richard -3112924 K4MKH Michael +3112924 K4MKH Mike 3112925 KJ4DSY Matt 3112926 W9AEB Tom 3112927 N4GKI Gerald @@ -69644,6 +82792,7 @@ 3112997 KK4LHE Ryan 3112998 KK4KLQ Victoria 3112999 WA4DH Dana +3113000 N3WGM William 3113001 KB4R Greg 3113002 KC6OVD Kevin 3113003 KC6OVD Kevin @@ -69803,7 +82952,7 @@ 3113164 N4GHZ 3113165 AB4HZ 3113166 AD4MC Michael -3113167 KI1KER Gregory +3113167 KI4KER Greg 3113168 KI2KER Tina 3113169 W4EDP Emmett 3113170 K4DBN John @@ -69857,7 +83006,7 @@ 3113219 N4IHV John 3113220 W4TL Michael 3113221 N2FEP David -3113222 KW4EX Albert +3113222 KW4EX Gordon 3113223 KM4IEN Sean 3113224 N4ULL Greg 3113225 WB4T Roger @@ -69869,9 +83018,9 @@ 3113231 AA4XS Andrew 3113232 KD4GGY Damian 3113233 KM4UUO William -3113234 WA4RVO Charles +3113234 WA4RVO Chuck 3113235 KD4BIS Kevin -3113236 WW4MO Martin +3113236 WW4MO Marty 3113237 NJ4CD John 3113238 KF4SCA Brady 3113239 KC4ZGK Edward @@ -69881,7 +83030,6 @@ 3113243 KE6IYD Jose 3113244 K4BSE James 3113245 KE4KAK Shane -3113246 W5MW William 3113247 KG4OKI Shirley 3113248 N4ZON William 3113249 KK4MNU Ricky @@ -69892,9 +83040,9 @@ 3113254 K1SUU Philip 3113255 KM4TNY Jack 3113256 N4SEC Jim -3113258 K4INK Manuel +3113258 K4INK Manny 3113259 KK4CHP Jeffrey -3113260 WA4RVO Charles +3113260 WA4RVO Chuck 3113261 K4AWF Anthony 3113262 KA4HLE Richard 3113263 W1LBC Lloyd @@ -69933,7 +83081,7 @@ 3113296 W4BHG Richard 3113297 KJ4VO Mark 3113298 K1SUU Philip -3113299 WW4MO Martin +3113299 WW4MO Marty 3113300 NR4N Dennis 3113301 W9QO Mike 3113302 N4JDR Johnny @@ -69971,9 +83119,9 @@ 3113334 K4TGR Laura 3113335 N4WD Bruce 3113336 KD4SEV Richard -3113337 W4RIN Jacob +3113337 W4RIN Rin 3113338 AI1U Anthony -3113339 N6LHZ Donald +3113339 NN4DX Donald 3113340 K9CMD Charles 3113341 W2WTF Brad 3113342 K9CMD Charles @@ -70024,7 +83172,7 @@ 3113389 KB2PXC Pierre 3113390 KK4WNX James 3113391 KB4KFT William -3113392 KJ4CUY Clarence +3113392 KJ4CUY Ade 3113393 KB0HUL Daniel 3113394 KF4OLM Russ 3113395 KM4WEK Bob @@ -70073,7 +83221,7 @@ 3113439 KJ4HWX Reinhold 3113440 K4DO Marion 3113441 W8JVF James -3113442 WB4ZWK Rodney +3113442 AD4V Rodney 3113443 W1DOC Brian 3113444 KG4SZX Richard 3113445 W4JWG James @@ -70087,14 +83235,13 @@ 3113453 K4RBM Ronald 3113454 KJ4YPN Larry 3113455 KK4VXW Matthew -3113456 KW4EX Albert +3113456 KW4EX Gordon 3113457 WO4MW Mark 3113458 KB1WEI Patrick 3113459 KK4SSH Michael 3113460 KM4SRJ Harrison 3113461 KK4SSH Michael 3113462 AC4AC Adam -3113463 W4BPT Billy 3113464 N4CPD R 3113465 K9APD James 3113466 W4SML Sean @@ -70140,7 +83287,6 @@ 3113508 K4YNA James 3113509 K4JDK James 3113510 K4YNA James -3113512 W4BPT Billy 3113513 AB4KK Christopher 3113514 KM4RBT Robert 3113515 KJ4CQJ Elliott @@ -70153,7 +83299,7 @@ 3113522 WA4TAW Todd 3113523 N4TTY Steve 3113524 W4WRD Richard -3113525 AB4VT Robert +3113525 AG4I Robert 3113526 KR4QN James 3113527 K8GI Rick 3113528 N4SZS David @@ -70207,7 +83353,7 @@ 3113577 WB4EAM James 3113578 K3GO John 3113582 N4NEQ Ralph -3113583 N4YCI Gregory +3113583 N4YCI Lin 3113584 W4FHL Adrienne 3113585 K3GO John 3113586 K4KV Glen @@ -70232,7 +83378,7 @@ 3113605 KC4YAP Paul 3113606 N1ADM Allen 3113607 WA4TAW Todd -3113608 KN4CIW Paul +3113608 KN4CIW Doug 3113609 AK4DO Lawrence 3113610 AA1UA Deaglan 3113611 KM4HYE Richard @@ -70293,7 +83439,7 @@ 3113669 KN4FRE Osarca 3113670 KN4FFG Elijah 3113671 K2HIK Hinnerk -3113672 N4MPC John +3113672 N4MPC Pat 3113674 KI4VEU Louis 3113675 KK4LOV Aaron 3113676 K1LP William @@ -70334,7 +83480,7 @@ 3113714 AG4ZR David 3113715 KD4NUE David 3113716 KI4BEO John -3113717 N4NBL Philip +3113717 N4NBL Phil 3113718 N4XAD Charles 3113719 WA4BLM John 3113720 W4LGW Larry @@ -70344,11 +83490,11 @@ 3113724 KA4KWC Lewis 3113725 KG4WMU Cody 3113726 NS4C William -3113727 KN4HAC Mark +3113727 N0IV Mark 3113728 K4LDC Larry 3113729 KK4JII Payne 3113730 KK4ASA Jesse -3113731 KM4FVS Gary +3113731 N4ATO Gary 3113732 KF4UXR Henry 3113733 W4LGW Larry 3113734 N3ZKV George @@ -70365,14 +83511,14 @@ 3113747 WT4K Jeffrey 3113749 N4CMA Donald 3113750 KB9LFZ Benjamin -3113751 KD4LZL Jerry +3113751 KD4LZL 3113752 KE4YEZ James 3113753 N4AII Jason 3113754 KE4YEZ James -3113755 KD4LZL Jerry +3113755 KD4LZL 3113756 KE4IAJ William 3113758 KI4UTY Rob -3113759 WK4U Patrick +3113759 WK4U Tim 3113760 KB4GMZ Michael 3113761 W4RVC Robert 3113762 KM4YTV John @@ -70384,7 +83530,7 @@ 3113768 N5JN Johann 3113769 KD4EXY Royce 3113770 K4LED Larry -3113771 KK4LPW Sheldon +3113771 N4MOO Sheldon 3113772 W4RGW Richard 3113773 W4RGW Richard 3113774 G3XDZ Zygmunt @@ -70496,7 +83642,7 @@ 3113884 KI4SOU Michael 3113885 W4VBD George 3113886 KM4DRR Tyler -3113887 KG4LST Joey +3113887 W4LSG Joey 3113888 KN4GTC Russell 3113889 W1DOG Hurbin 3113890 KM4SKN Ben @@ -70542,9 +83688,116 @@ 3113940 W4BCL Beverly 3113941 KN4CBG William 3113943 KF4IRH David -3113945 K4XRC Robert +3113945 K4XRC Craig 3113947 KN4LWT Charles 3113948 KK4MQA Stephen +3113949 KE0RJF David +3113950 KK6IPR Charles +3113951 N2HNI Sandi +3113952 W7AZQ Edward +3113953 KN4BQV Matthew +3113954 KX1B Bryan +3113955 KE0FQP Robert +3113956 KE0FQP Robert +3113957 K3JJK Terrance +3113958 AA5CE Cecil +3113959 KF7WYS Kyle +3113960 KC3MET Michael +3113961 KC3MET Michael +3113962 KB7RSF Adam +3113963 AF5SI Brian +3113964 AF5SI Brian +3113965 KC1KFM Michael +3113966 KC8QZB John +3113967 KC8QZB John +3113968 KC3LAN Christopher +3113969 KD9LUG JAMES +3113970 WB5HJV David +3113971 W5UHQ Eldon +3113972 KD8RWR Thomas +3113973 N0TAG Todd +3113974 K6FW Frank +3113975 KD0YYG Alan +3113976 W7JSV Kevin +3113977 N2KND Russell +3113978 AB1TC Paul +3113979 N4TFJ Charles +3113980 N4TFJ Charles +3113981 W1SMC Steven +3113982 AE5QQ Robert +3113983 W0HAF Michael +3113984 W1SMC Steven +3113985 KC9NNW Matt +3113986 KC9NNW Matt +3113987 KN4OGA Ronald +3113988 KN4OGA Ronald +3113989 KB5HTB Raul +3113990 KK4CRZ Audrey +3113991 W9EJH Earl +3113992 KG5BQB Jeffrey +3113993 KI4OXX Michael +3113994 KI4OXX Michael +3113995 AB3MI William +3113996 NC3C Russell +3113997 KM6LIL David +3113998 KN4OYN Mark +3113999 N8DAD Barry +3114000 KE5TVB Shane +3114001 WA5GED Paul +3114002 KC1JZH Mark +3114003 W5GSU J +3114004 N3ROY Samuel +3114005 KE0SSU Josh +3114006 KE0SSU Josh +3114007 KD6BGO Michael +3114008 K6OGR Brian +3114009 KC1IBC Michael +3114010 KI7FOF Zsolt +3114011 KI7FOF Zsolt +3114012 N4LAX Edward +3114013 N4LAX Edward +3114014 W4WHC Bill +3114015 K7HLN Robert +3114016 KN4OZF +3114017 KC1KIW Joseph +3114018 KC0HIO Brad +3114019 KD2NFY Luke +3114020 KI7QAM Bernard +3114021 KG5WU Wayne +3114022 WB4TGK George +3114023 WW1SS Steven +3114024 KI5SF Carl +3114025 K9AGR Jim +3114026 N4ULF Anita +3114027 N4ULF Anita +3114028 W5ERX WADE +3114029 N5JOJ William +3114030 KB9KQF Robert +3114031 AC8A Paul +3114032 KI5BMS Steve +3114033 KG5WNV Wesley +3114034 KG5WNV Wesley +3114035 KA9YGW Scott +3114036 K0SAA Scott +3114037 KM6SRG Casey +3114038 KM4YMI Beau +3114039 KG5SZE James +3114040 KG5SZE James +3114041 K0ART Arthur +3114042 KE8JHK Thomas +3114043 KE8JHK Thomas +3114044 K8UW Gary +3114045 N6TLW Dinnie +3114046 N7ZRZ Darrell +3114047 N7ZRZ Darrell +3114048 KF6ODE Ryan +3114049 W7LFX Skeet +3114050 AB8UM Mike +3114051 W5NNN Brian +3114052 KM6WCS MOREY +3114053 KC1KHN Matthew +3114054 W4HZS John +3114055 KD0BBM Joseph 3114056 N5XQK Johnny 3114059 KJ4UBO James 3114060 AA8WH William @@ -70559,7 +83812,7 @@ 3114070 KI4LZI Anthony 3114071 KF6UQK Kevin 3114072 KF6UQK Kevin -3114073 KD0VJG Dale +3114073 AE0OM Dale 3114074 KE0NMS Christina 3114075 N7JAV John 3114076 W5BIN Korbin @@ -70568,7 +83821,7 @@ 3114079 K8JFG Jon 3114080 KK4ISC Michael 3114081 W5RZM James -3114083 KN4MSH Benone +3114083 KN4MSH Viorel 3114084 KD4GBA Avery 3114085 KM4RYP William 3114086 N3PKQ Keith @@ -70634,6 +83887,7 @@ 3114149 WX4MEM NWS 3114150 AA3BK Brian 3114151 K7CB Stephen +3114152 N9DNR Daniel 3114153 W7RUG Bliss 3114154 W7RUG Bliss 3114155 KB1QU Henry @@ -70654,7 +83908,7 @@ 3114173 K0DKR Vincent 3114174 N4VXX Michael 3114175 KI4MOE Charles -3114176 KC1KCV Stephen +3114176 AC1HH Stephen 3114177 KC3CJ Robert 3114178 NZ1Y Brad 3114179 WB3EAF Bob @@ -70674,7 +83928,7 @@ 3114195 KC1IFK Stewart 3114196 KC1IFK Stewart 3114198 W2DTI Craig -3114199 KL7AA Keith +3114199 KL7AA Anchorage 3114200 K6UVA Gary 3114201 KM4KZC Kenneth 3114202 KC1KCU Cruz @@ -70756,7 +84010,7 @@ 3114281 N6CAZ James 3114282 KC3LSR Nicholas 3114283 W0MUD Travis -3114284 KN4IEB Joe +3114284 WB4S Joe 3114285 K6JET John 3114286 K9MAY Timothy 3114287 KR7P Dana @@ -70796,7 +84050,7 @@ 3114327 KD0KKD Jefferson 3114328 N9RFS David 3114329 KN4CGO Russell -3114330 N5DEA William +3114330 N5WRH William 3114331 KA5NMJ Darryl 3114333 K4FRN Francis 3114334 K4FRN Francis @@ -70872,13 +84126,13 @@ 3114407 W4TRK Michael 3114408 K1OK Jeffrey 3114409 KT4ED Eddie -3114410 KS8Z Jeffrey +3114410 W8TB Jeffrey 3114411 KN4MKI Kenneth 3114412 KM6ERG Joseph 3114413 N3PHC Michael 3114414 KC7ZWC Joshua 3114416 KD2NJK Benjamin -3114417 KB1STZ Christopher +3114417 W1LTE Christopher 3114418 N5MBM William 3114419 KE0SSQ Thomas 3114420 KA6AIL Angus @@ -70898,7 +84152,7 @@ 3114434 KM4SMI Justin 3114435 KC5REY Jeffrey 3114437 KS6P Kim -3114438 KG4IES James +3114438 KG4IES Mike 3114439 AC9HP Wayne 3114441 KJ4UZO Josue 3114442 AD6GA Ko @@ -70928,14 +84182,14 @@ 3114470 K3KDW Bradley 3114472 N0UTD Robert 3114473 KE8BDY Patrick -3114474 KN4OMD Phil +3114474 K4OMD Phil 3114475 KD2QDD Donald -3114476 K7MTW +3114476 K7MTW None 3114477 KK4YG Pablo 3114478 KJ4WW Kent 3114479 KE0RAZ Gary 3114480 KJ4OOT Dustin -3114481 KI7ZXX Wayne +3114481 W7TTE Wayne 3114484 KC1KCY Nicholas 3114485 KG5WIZ Gerald 3114486 KA8ZSB John @@ -70955,7 +84209,7 @@ 3114501 KN4ONR Jeremiah 3114502 KM6SIG Parker 3114503 WB5KZO Harold -3114504 W4GYP Gafford +3114504 W4GYP Gaff 3114505 AJ4NI Richard 3114506 KK4NLP Jeffery 3114507 KD9LOI Eric @@ -70966,7 +84220,7 @@ 3114512 KN4OHY Gabe 3114513 KN4OHY Gabe 3114514 KC3FKA Anthony -3114515 N1XRS Antone +3114515 N1XRS Tony 3114516 KC7KF 3114517 KX4IA Nathan 3114518 W7LRR Larry @@ -70987,8 +84241,8 @@ 3114534 KD8CWU Jason 3114535 KE6YGM John 3114536 N4ELM William -3114537 N2VSN Richard -3114538 N2VSN Richard +3114537 N2VSN Rick +3114538 N2VSN Rick 3114540 N2GWW Craig 3114541 K5BX Raymond 3114542 KK6ABQ Sergey @@ -71004,10 +84258,11 @@ 3114552 KD2PNE Vincent 3114553 N6ILC Robert 3114554 KC8LEL Robert +3114555 WA5PWA Benard 3114556 KC4RIQ Gerald 3114557 W8IMS Lindsay 3114558 KC9OIZ Brian -3114559 KD2OVA Florian +3114559 K8RWB Florian 3114560 KE0CGB Larren 3114561 WA7BWF Charles 3114562 KM4VKI Wayne @@ -71061,7 +84316,7 @@ 3114619 KE4ZFR Kenzie 3114620 KC3CJ Robert 3114621 AB3JV John -3114622 KL4RL Jacquelyn +3114622 KL4RL 3114623 KF5BFJ Darla 3114624 KD9DH Charles 3114625 KK4BOR Conan @@ -71116,15 +84371,15 @@ 3114680 KD9LPW Bradley 3114683 AD4DW Eric 3114684 KD0WAT Wayne -3114685 KE0RNN Tom +3114685 K0FTN Tom 3114686 KE6GEC Cleland 3114687 KD9ADT Charles 3114688 K9BMH Brian 3114689 K9BMH Brian 3114690 AL6F Harry 3114692 W2MCF Marie-Claude -3114693 KA6LEX Alexandru -3114694 KG5HUA Robert +3114693 K6FTL Alexandru +3114694 K5HUA Robert 3114695 WB4GMB Gary 3114696 KF4VWJ Zachary 3114697 KF4VWJ Zachary @@ -71143,7 +84398,7 @@ 3114712 W1PHB Philip 3114713 KK4WMY Derek 3114714 KB4TBD John -3114715 AG7PJ Oscar +3114715 WW2W Oscar 3114716 W8MSP Les 3114717 KC6RJS Richard 3114718 WA4HFN Damon @@ -71186,11 +84441,10 @@ 3114756 KD6WBA David 3114757 K4WSS Bryan 3114758 KM5OE Loyd -3114759 KI7GZS Dongjie 3114760 KN4KPS Anthony 3114761 KC1TV John 3114762 KB8ZUZ James -3114763 KB3LMH Donald +3114763 W8KVG Donald 3114764 KN4OCS Lindsay 3114765 KN4OOU James 3114766 K2CEN Craig @@ -71213,13 +84467,13 @@ 3114786 KJ6KXK Vernon 3114787 KE0LJA Shane 3114788 WA4PPL Charles -3114789 KN4ORC Donnell +3114789 KB2MJP Donnell 3114790 W6CIB Douglas 3114791 W2UW Richard 3114792 KD7LBV Jay 3114793 KE0LJG Robert 3114794 K5EIB Jenean -3114795 KI4ANR Kevin +3114795 NG4P Kevin 3114796 KC2EYB Alexander 3114797 K1SYR Joshua 3114798 KF4ZGJ Freddy @@ -71269,7 +84523,7 @@ 3114845 KD7GOO Josh 3114846 K0JPY James 3114847 KN4OQO David -3114848 N8KPE Pietro +3114848 N8KPE Pete 3114849 KD8ZKE John 3114850 AD8BW Richard 3114852 KA5AHS Atlanta @@ -71345,7 +84599,7 @@ 3114931 W2ORT 3114933 N0OXX Jonathan 3114934 K5SFB William -3114935 W4MHI Bogdan +3114935 W4MHI Mihai 3114936 W1JAY Jay 3114937 W1KJ James 3114938 AC0UD Kris @@ -71353,13 +84607,12 @@ 3114941 KB3CVS Thomas 3114942 KM4NCS Lawrence 3114943 KB5TJI Marvin -3114944 KN4MRB Christopher -3114945 KN4MRB Christopher +3114944 KR4YON Chris +3114945 KR4YON Chris 3114949 N1VDA Derek 3114950 KF7EUO Timothy -3114951 N0PKR Tim 3114953 KM4MFZ Jackson -3114954 AK9AA Jose +3114954 AK9CU Jose 3114955 N0CAL Mark 3114956 KD5JAY Jay 3114957 KM6TKW Richard @@ -71368,7 +84621,7 @@ 3114961 WA4CQZ William 3114962 AB2NE Robert 3114963 W3WAY -3114964 AE2T Albert +3114964 AE2T Al 3114965 KJ6MI Jong 3114966 KB6GZT Hoi 3114967 KB0MQV Don @@ -71400,6 +84653,7 @@ 3114997 W2NB Jeffrey 3114998 K8AOG James 3114999 KC8HDP Jerry +3115000 W7BOB Robert 3115001 NH7YS Tad 3115002 KH6DQ Jack 3115003 AH6PR Mark @@ -71421,7 +84675,7 @@ 3115019 AH6Q Randall 3115020 AH6GR Randal 3115021 AH6JA Harvey -3115022 KH6DT Dean +3115022 KH6DT 3115023 KH6HB Harold 3115024 KH7EC Jeffrey 3115025 NH6MF Nelson @@ -71465,7 +84719,7 @@ 3115064 KH6XL Darrell 3115065 K6ATF Donald 3115066 KH6JU Judy -3115067 KH6EF Bryan +3115067 WD0LFN Bryan 3115068 KH7DO Michael 3115069 WH6AV Gescio 3115070 KC2YWR David @@ -71510,17 +84764,17 @@ 3115109 AH6CP Robin 3115110 N6NCT 3115111 AH6RH Ron -3115112 KH6FV +3115112 KH6FV Carter 3115113 NH7QH Chris 3115114 KH6DQ Jack 3115115 KH7HO Clem 3115116 KH7C Bart 3115117 WH6FM Paul 3115118 AH6HI Roy -3115119 KH6FV +3115119 KH6FV Carter 3115120 KH6HB Harold 3115121 KH6OM Richard -3115122 KH6FV +3115122 KH6FV Carter 3115123 N6GOZ Michael 3115124 KH7FR Toby 3115125 KH7FR Toby @@ -71529,18 +84783,18 @@ 3115128 WH6UG Mel 3115129 KH7EE Reginald 3115130 KH6DQ Jack -3115131 KH6DT Dean +3115131 KH6DT 3115132 KH6BLA Tom 3115133 WH6TP Robin 3115134 NH6VU Earl 3115135 WH6UG Mel -3115136 KH6DT Dean +3115136 KH6DT 3115137 KH6OM Richard 3115138 KH6H Melvin 3115139 N6NCT 3115140 AH6CP Robin 3115141 N6NCT -3115142 KH6FV +3115142 KH6FV Carter 3115143 KH6HY Hideki 3115144 AH6IX Jeffrey 3115145 KH7RF Wesley @@ -71549,16 +84803,16 @@ 3115148 KH7CI Billy 3115149 WH6DLC Stephen 3115150 KH7CR Alfred -3115151 KH6FV -3115152 KH6FV -3115153 KH6FV -3115154 KH6FV -3115155 KH6FV -3115156 KH6FV -3115157 KH6FV -3115158 KH6FV -3115159 KH6FV -3115160 KH6FV +3115151 KH6FV Carter +3115152 KH6FV Carter +3115153 KH6FV Carter +3115154 KH6FV Carter +3115155 KH6FV Carter +3115156 KH6FV Carter +3115157 KH6FV Carter +3115158 KH6FV Carter +3115159 KH6FV Carter +3115160 KH6FV Carter 3115161 AH6JA Harvey 3115162 KH6WG Stephen 3115163 AH6CP Robin @@ -71586,7 +84840,7 @@ 3115186 WH6KIM Kimberly 3115187 KH6GUN Nathan 3115188 AH6VF Glenn -3115189 KH6EF Bryan +3115189 WD0LFN Bryan 3115190 WH6AV Gescio 3115191 WH7GG Keith 3115192 WH6EAO Odell @@ -71598,7 +84852,7 @@ 3115200 NH7WG Bruce 3115201 KH6LH Dennis 3115202 WH7ID Alan -3115203 KH6TA Thomas +3115203 NH7R Tommy 3115204 WH6GOD Dana 3115205 KH6RDO Darrell 3115206 KH7MS Blake @@ -71630,7 +84884,7 @@ 3115234 KH6MOI Bernard 3115235 WH6FQB Gage 3115236 KH6PRD Mario -3115237 NH7TV Matthew +3115237 NH7TV 3115238 WH6EPS Gary 3115239 WH6EVK Angelina 3115240 WH6EXS Thomas-Jon @@ -71638,7 +84892,7 @@ 3115242 WH6ESU Charles 3115243 AH7E David 3115244 AH7E David -3115245 WH6CQX Larry +3115245 WH6ABM Larry 3115246 WH6FKU Peter 3115247 KH6OWL Darren 3115248 WH6DEW Dewey @@ -71657,7 +84911,7 @@ 3115262 KH7O Rickerd 3115263 K6AMA Gary 3115264 WH6FST Jerry -3115265 WH6LEO Dean +3115265 KH6LEO Dean 3115266 WH6FQE Robert 3115267 KH6MG Mei-Li 3115268 KH6MOI Bernard @@ -71676,13 +84930,14 @@ 3115281 KG6SMT Bryan 3115282 WJ5NWA Mason 3115283 KM4GCU Allen -3115284 KG6ZNL Nicholas +3115284 W6NLP Nicholas 3115285 K7NFL John 3115286 KB1HUX Michael 3115287 AG9D John 3115288 WA4MJM William 3115289 KC0YNS Corey 3115290 K8MGB Michael +3115291 N7OP Richard 3115292 KI7ZYC Eric 3115293 KM6RFB Scott 3115294 KJ6OOH David @@ -71708,7 +84963,7 @@ 3115317 KS7MJS Mark 3115318 K4EKE Eric 3115319 KC1AVD Tulio -3115320 KE0SUL Bobbi +3115320 K9FXB Bobbi 3115321 KM6VHX Michael 3115322 KD2PVT Peter 3115323 KC9VBQ Jonathan @@ -71730,7 +84985,7 @@ 3115341 N9KGC Raymond 3115342 KE0SMB James 3115343 KD5MOX John -3115344 KK7BEN +3115344 K5BEN 3115346 KE0SPA Fred 3115347 WT4N Joseph 3115348 WH6ST Steve @@ -71744,7 +84999,7 @@ 3115357 KE0SJZ L 3115358 KE5JXC Arnold 3115359 WX5CW Christopher -3115360 K5AMF Samuel +3115360 N6HB Samuel 3115361 K6HJU J 3115362 KN4CAV Jacob 3115363 KD8CKU Samuel @@ -71774,10 +85029,10 @@ 3115389 WA8ZLK Andrew 3115390 AB6RQ Steven 3115391 N8JNU John -3115392 WN4EMT David +3115392 N1DDC David 3115393 K5SLH James 3115394 KB7UXG Allen -3115395 KN4NXR Ryan +3115395 W4RNF Ryan 3115396 KN4OSQ Jennifer 3115397 N1OLO John 3115398 NZ1Q Edward @@ -71821,7 +85076,7 @@ 3115447 KJ0CFW Jon 3115448 KB4GAP Kenneth 3115449 K2JVS Joseph -3115450 KJ7AEJ Mark +3115450 K7DCM Mark 3115451 K4JTN Jefferson 3115452 KB2NTO Edward 3115453 N3OWM Theodore @@ -71872,11 +85127,11 @@ 3115498 N2DOW Jason 3115499 KD2ETP Steven 3115500 NC6K Eric -3115501 KE6HXA Jason +3115501 N7IAG Jason 3115502 KD7LJC Eric 3115503 N9APK Clark 3115504 KJ4FUH Albert -3115505 N4PAW Daniel +3115505 N4PAW Clay 3115506 KC4WNU John 3115507 KN4OGC Mark 3115508 KN4OGC Mark @@ -71910,9 +85165,9 @@ 3115537 N0KLC Robert 3115538 NX3X Larry 3115539 N0GW Gary -3115540 KD2QJS Jared +3115540 K2JMP Jared 3115541 W2SZ Rensselaer -3115542 KB6EE Galen +3115542 KB6EE Abigail 3115543 KR7F Drake 3115544 KG4UNB Steven 3115545 KN4EVF Apirux @@ -71936,7 +85191,7 @@ 3115565 K7PE Robert 3115566 KX4DV Phillip 3115567 KK6ZZD Paul -3115568 WB5TTY Thomas +3115568 WB5TTY Tony 3115569 N3KDN Steve 3115570 KE0SWK Ralph 3115571 WD8KOB Rodney @@ -71951,7 +85206,7 @@ 3115580 WD4FMQ Jimmie 3115581 NJ0F Andre 3115582 N5TWP John -3115583 KG5WLK Philip +3115583 N5VAF Philip 3115584 KD7DAW Thomas 3115585 NM4Z Richard 3115586 KB7TMV Michael @@ -71980,7 +85235,7 @@ 3115612 KD8TIF Tiffany 3115613 AI6K David 3115615 KG7ZGR Douglas -3115617 N0FIB Garold +3115617 N0FIB Gary 3115618 KA9SXP Mark 3115619 KA9SXP Mark 3115620 KD0SGJ Mark @@ -72013,7 +85268,7 @@ 3115649 N6MNV Howard 3115650 W9NET John 3115651 N6GWX Arthur -3115652 WA7JH James +3115652 WA7JH Jamie 3115653 K4DRS Daniel 3115654 N5IMS John 3115656 KC9QHF Patrick @@ -72025,7 +85280,7 @@ 3115664 KM6VHT David 3115665 N2IFJ Christopher 3115666 KI5BHA Claude -3115667 KJ4VWG Sameer +3115667 KJ4VWG Sam 3115668 W5HNZ Joey 3115669 K0LGW Jared 3115670 WD8CZP Benjamin @@ -72038,7 +85293,7 @@ 3115678 WX4NC 3115679 W4ADZ Robert 3115680 KC5TNB Genor -3115681 KD7PHX Robert +3115681 KD7PHX Bob 3115682 K4NRX Roger 3115683 KC5TNB Genor 3115684 KD9KIS Adam @@ -72064,7 +85319,7 @@ 3115706 N4HYB Henry 3115707 KC0SBP Samuel 3115708 KB1MRQ Nicole -3115709 WD5HNI Stephen +3115709 WD5HNI Steve 3115710 W2XG Thomas 3115711 W5OV Robert 3115712 KG5DOB Diane @@ -72074,7 +85329,7 @@ 3115716 NA6F Rich 3115717 N3CGM Christopher 3115718 KK6WLI John -3115719 KN4OHZ Robert +3115719 WN4REP Robert 3115720 AA0BS Lorraine 3115721 KM6VKR Jeffrey 3115723 KE0SQT Zevi @@ -72095,11 +85350,12 @@ 3115742 KC8TWB Kris 3115743 WX4PTO Michael 3115744 KF5HHU Davis +3115745 KJ4QKD Davis 3115746 KI5BLU Thomas 3115747 KM6VNL Joel 3115748 K7BMP Brian 3115749 KN4KKQ Robert -3115750 KJ7AIF Derek +3115750 K7NZ Derek 3115751 KN4NQX Walter 3115752 KJ7ALP Robert 3115753 W8MAL Michael @@ -72120,7 +85376,7 @@ 3115768 KD5TDY James 3115769 WM3Q Samuel 3115770 WB9QIU Donna -3115771 KK4QXI Joseph +3115771 KK4QXI Joe 3115772 KM4ZMZ Jerry 3115773 KJ6OBD Marc 3115774 KE4FDI Martin @@ -72159,7 +85415,7 @@ 3115807 N7DND Gary 3115808 KD4KXI Daniel 3115809 KD6IWL Errol -3115810 NY5D Rhoderick +3115810 NY5D Derrick 3115811 KI6BKR John 3115812 N4BUD Cody 3115813 AC1FV Daniel @@ -72170,7 +85426,6 @@ 3115819 KC3JXL Leann 3115821 W0BOV Dana 3115822 KB2GHZ Michael -3115823 KA3EMT Aaron 3115824 WY1Z Scott 3115825 N4BUD Cody 3115826 AA0NS Alicia @@ -72226,7 +85481,7 @@ 3115880 NL5I Ivan 3115881 W6ATD Arthur 3115882 W5AR John -3115883 KN4NYV Forrest +3115883 KW4EST Forrest 3115884 KG4OAP James 3115886 W4ATG Alexander 3115887 NC4WX Larry @@ -72252,7 +85507,7 @@ 3115908 WB6LAU Jack 3115909 W0AJM Anna 3115910 KD2QFI Lawrence -3115911 KD9LRN Michael +3115911 AB3MM Michael 3115912 KC3GHN Keith 3115913 KC3GHN Keith 3115914 KN4MWW Thomas @@ -72266,7 +85521,7 @@ 3115922 KK7V John 3115923 N2QOJ Joe 3115924 N7TJ George -3115925 KN4NYV Forrest +3115925 KW4EST Forrest 3115926 W1CWW William 3115927 KB9UZO Bryan 3115928 N7XTM Peter @@ -72280,7 +85535,7 @@ 3115936 KE8KHN Jeremy 3115937 KE8KHN Jeremy 3115938 KE0QXD Patricia -3115939 NY6X James +3115939 K6JP James 3115940 K0JOS Jeffrey 3115941 KE8BGJ Michael 3115942 KD2LRD Dennis @@ -72290,15 +85545,15 @@ 3115946 N3TUI Tom 3115947 KB6DAN Daniel 3115948 NU7F John -3115949 W8GTX Brian +3115949 N8GTX Brian 3115950 KE8JNU Danielle -3115951 KN4OVF Alan +3115951 W4AFJ Alan 3115952 N4GDX Michaelangelo -3115953 K4WPO William +3115953 K4WPO Bill 3115954 KB3TVF Cathy 3115955 NT7K Kenneth 3115956 K4QM Clayton -3115957 K0OM D +3115957 K0OM Don 3115958 N3XDW Richard 3115959 KB4MYH Donald 3115960 KE0L James @@ -72331,7 +85586,7 @@ 3115987 W4BBR Blackbird 3115988 KM4EFO Phillip 3115989 KE4AZL Charles -3115990 KC3MAG Bryan +3115990 KC4BAP Bryan 3115991 K1RAQ Matthew 3115992 KD6JLA Matthew 3115993 N8ERC Gordon @@ -72339,6 +85594,7 @@ 3115997 KC4IZB David 3115998 KC3JUW Peter 3115999 K4DWS Wayne +3116000 KD2OLG Austin 3116001 WX7USA Paul 3116002 K6LOR Aj 3116003 KA7WZM Charles @@ -72521,10 +85777,10 @@ 3116181 KI7NDZ Shane 3116182 KI7LCJ Darwell 3116183 W7IDO Michael -3116184 WB2NYC Michael +3116184 WB2NYC Mike 3116185 N7AFK Justin 3116186 AA5PL Paul -3116187 KG7UWF Daniel +3116187 KD2AN Daniel 3116188 KG7CLP Delbert 3116189 N7KDI Neal 3116190 N7BHX Gregory @@ -72556,14 +85812,14 @@ 3116216 KJ6PCW Harry 3116217 K5DUR Drake 3116218 K4MYR John -3116219 KN4OVF Alan -3116220 KI5BPC Adam -3116221 KE5VIA Richard +3116219 W4AFJ Alan +3116220 WA1KEN Adam +3116221 KE5VIA Rick 3116222 KD8HCH Jennifer 3116223 K4FA Bob 3116224 KD9KIJ Christopher 3116225 KC4WAG Jeffrey -3116226 KM4DTH Matthew +3116226 K4MJJ Matthew 3116229 W4GKD Gary 3116231 KX4FX Brian 3116232 KJ7DAZ Daz @@ -72609,12 +85865,12 @@ 3116277 KB3FKJ Joseph 3116278 K2MLN Steven 3116279 KI5BNG Skylar -3116280 AA4II Robert +3116280 K4VL Robert 3116281 K5NON Matthew 3116282 KE8JPV Richard -3116283 KE8KBE Christopher +3116283 K8TUX Christopher 3116284 W4REZ Jeffrey -3116285 KE8KBE Christopher +3116285 K8TUX Christopher 3116286 W5INK Christina 3116288 N4NRW Needham 3116289 KD2EPL John @@ -72623,7 +85879,7 @@ 3116292 AI7PM Phillip 3116293 AI7PM Phillip 3116294 KC7UHW Kristina -3116295 KM6VQT Ryan +3116295 N1PQE Ryan 3116296 KG5IWL Don 3116297 KM6OHY Justin 3116298 KE0SZM Michael @@ -72638,11 +85894,12 @@ 3116307 KI5BMN James 3116308 KE0PON Jeremy 3116309 N7SWX Robert -3116310 KM6VQU Larry +3116310 KB6LG Larry 3116311 KC3MAI Joseph 3116312 KC1KFW Nathaniel 3116313 KF5UPC Pedro 3116314 KF5JHA Charles +3116315 KI5BHN Suzanne 3116316 K7YJ Minor 3116317 N6VCC 3116318 N2DDS G @@ -72653,7 +85910,7 @@ 3116323 W7KIM Kimberly 3116324 KC3MAI Joseph 3116326 KI5M Michael -3116327 KN4OZF Allan +3116327 KN4OZF 3116328 N3MNT Robert 3116329 KM4HCQ Brian 3116330 N4YEK Danny @@ -72681,7 +85938,7 @@ 3116355 K4IMW Ian 3116356 KB0UAZ James 3116357 AD0YK James -3116358 KD9LRW Christopher +3116358 W9TSB Christopher 3116359 KI5BPG Bogdan 3116360 KE8IQV David 3116361 KI5BPG Bogdan @@ -72693,7 +85950,7 @@ 3116368 KF7YHM Chase 3116369 K7DSL Michael 3116370 KV4SP Franklin -3116372 KF4GCS Mark +3116372 KF4MEL Mark 3116373 N1TUX Steven 3116374 KB1GLP Joshua 3116375 W3SPC Steve @@ -72704,7 +85961,7 @@ 3116381 KC1KFV Robert 3116382 NU3T David 3116385 KE0JZE Kristoffer -3116386 KE5FQC Paul +3116386 KI1ORD Paul 3116388 KC1JUP Machias 3116389 AJ4KF David 3116390 W4RJW Robert @@ -72715,7 +85972,7 @@ 3116396 KG6TMY Geri 3116397 KE6ZFJ Jonathan 3116398 KK4PPJ James -3116399 KB1YF Glenn +3116399 W1GSK Glenn 3116400 KI4WJR Denis 3116401 W0PAK Dan 3116403 KB9IQY Topor @@ -72725,6 +85982,7 @@ 3116407 KA0FKL Bill 3116408 KC0SBP Samuel 3116409 KD0ODM William +3116410 W9SOC Ted 3116411 KF5KFW Justin 3116412 WA3BMX Harry 3116413 KE0FAS Jason @@ -72742,7 +86000,7 @@ 3116425 AJ4CS Cynthia 3116426 KN4NPX Sarah 3116427 K4FKG Lloyd -3116428 WA0KWI Richard +3116428 W0EO Richard 3116429 KN4OZE Murphy 3116430 KN4OFF Jason 3116431 NM1X Charles @@ -72798,7 +86056,7 @@ 3116482 K1POX Samuel 3116483 K4DMA Gary 3116484 WA0KGB Carol -3116485 KI5SR Carter +3116485 KI5SR Ross 3116486 WX9HV Michael 3116487 KD2OAZ Brian 3116488 KD0OMN Mark @@ -72826,7 +86084,7 @@ 3116513 KD2OAI Richard 3116514 KC1KFG Evelyn 3116515 KD4RXP Joseph -3116516 KD9LRW Christopher +3116516 W9TSB Christopher 3116517 KF6FYD Richard 3116518 KG7JWV David 3116519 KB5PMY Janice @@ -72839,7 +86097,7 @@ 3116526 KN4PAH Todd 3116527 N2FUR Gustavo 3116528 K9TSU Vincent -3116530 W7SSU +3116530 WZ6L 3116531 KK4ZBE Angel 3116532 N4HCA Hillsborough 3116533 AC8QQ Denver @@ -72861,6 +86119,444 @@ 3116550 KD2NE Oscar 3116551 KN4OYX Phillip 3116552 K3MES David +3116553 KD0USA Barry +3116554 KG6ESP Evan +3116555 KA8LKN Franklin +3116556 KF5FSK Andre +3116557 N9DNR Daniel +3116558 KC3LGP Andrew +3116559 KD9HMR Jeremy +3116560 KI7HOH Douglas +3116561 K5RPG James +3116562 K7CJD John +3116563 K7CJD John +3116564 KN4PIU Yong +3116565 K5PRY Keith +3116566 K4EOC Trustee +3116567 KI5BUS Tyler +3116568 KC8IJQ Craig +3116569 KD6ELK Fred +3116570 KC9MYM Daniel +3116571 KC3AKH Lester +3116572 N8WSK Buddy +3116573 N8WSK Buddy +3116574 KA4CAH Danny +3116575 KA4CAH Danny +3116576 KA7CYY Anthony +3116577 KK6FYE Joseph +3116578 WU1U Jerry +3116579 KN4FVH Devin +3116580 KK4MNQ Susan +3116581 KB1EHB Jeremy +3116582 KJ4DUP John +3116583 N6JSV Jeff +3116584 N6MDZ manny +3116585 AG5PT Derek +3116586 KB2MXV Frank +3116587 N1IFU Nathan +3116588 W1MWB Mike +3116589 W1MWB Mike +3116590 KD4TAC Todd +3116591 AB4BA Brad +3116592 KA1YSA Robert +3116593 K5LFE Carl +3116594 K5JCF julio +3116595 KC1BOO Ernest +3116596 KB8KGA Craig +3116597 K5JPP Richard +3116598 W2MAZ Anthony +3116599 W9CLA Craig +3116600 WN9Q David +3116601 AD0ZM James +3116602 KK6FBY Monty +3116603 WB5RWC Randolph +3116604 KD4JM Jorge +3116605 N1IPU Mark +3116606 KK4LCM Linda +3116607 KN4PND Clauber +3116608 KI7RIS Steven +3116609 KT6MEG Mark +3116610 KF5BBH Bobby +3116611 KA3OHL Ryan +3116612 K5WC John +3116613 N9MWN Wayne +3116614 KK4DGV Anaya +3116615 W8EJC Randal +3116616 KJ4EIE Mike +3116617 KJ4EIE Mike +3116618 KD0NZT Robert +3116619 ND4AA J +3116620 KE0OYO Justin +3116621 ND4AA J +3116622 W9KAN kevin +3116623 KG7GVF Richard +3116624 KH7VN Robert +3116625 K3BBB Bruce +3116626 KD8BQL Mitchell +3116627 KN4OVK Joshua +3116628 KC6NKK Lloyd +3116629 KD9KDG Tristan +3116630 N2JUG John +3116631 N2VLK Jeffrey +3116632 KA5AUD Stephen +3116633 AC4EG Alford +3116634 KE7DUX Ethan +3116635 KN4GWY Matthew +3116636 KJ6KKH Justin +3116637 KJ6KKH Justin +3116638 KA9VAG Timothy +3116639 WA2YLY Robert +3116640 KN4JMU James +3116641 KC9BME Christine +3116642 WA8UET Joseph +3116643 KJ7AYO David +3116644 WC4R Joe +3116645 N2VLK Jeffrey +3116646 N5YZV Mark +3116647 WD8LDX Robert +3116648 WA8ZZM Cody +3116649 KD2KKG Robert +3116650 KC1IFN Michael +3116651 KD0UFO Michael +3116652 KA1VFR Doug +3116653 W7TOA Arthur +3116655 N5KIG Sidney +3116656 K9JRL Joshua +3116657 K6EVO Robert +3116658 W8ZRO Norbert +3116659 N8BZV Anthony +3116660 KM6RSS Robert +3116661 NI0P Brian +3116662 K5DPP David +3116663 W5PE Robert +3116664 WH6BS Bill +3116665 N9OTK Ledger +3116666 KJ3P Jim +3116667 KF5IDH Thomas +3116668 KE0MEQ Stanley +3116669 K0WDO William +3116670 W1QIY Joel +3116671 KE0DVT Terry +3116672 N1CFO Erik +3116673 K2FSO Mark +3116674 N0OFJ Jon +3116675 WX5MG Michael +3116676 KC3JSE Michael +3116677 KB4RPI Martin +3116678 KB4VSP David +3116679 KM4ZYG Richard +3116680 N4SXE Tom +3116681 AJ9P Joshua +3116682 K4DQP Darcy +3116684 KM4UJJ Bryan +3116685 W4DUI Paul +3116686 K0WDO William +3116687 KM4JGW Blake +3116688 KA1GXG Ian +3116689 N2USB Ruben +3116690 N8VHM Nicholas +3116691 KD9LUQ Matt +3116692 N2FKW Robert +3116693 KD9LUP Jason +3116694 KF5AVS David +3116695 N2ELP Juan +3116696 N2ELP Juan +3116697 KM4ZYG Richard +3116698 WB8VZY Merl +3116699 KN4FAW Justin +3116700 KJ4RGS James +3116701 KX4UK David +3116702 AB2M Joe +3116703 KD2QLQ Rob +3116704 KD8TTM William +3116705 KK4FT Fred +3116706 K8QFG James +3116707 KA1GYB Craig +3116708 KR6E Bernard +3116709 KC9QQ Fred +3116710 W0COX Gerald +3116711 W0COX Gerald +3116712 KE8HUV John +3116713 K6ASP Alex +3116714 KD2HFH Mark +3116715 KD2HFH Mark +3116716 KB4NC Manny +3116717 WH6DLR Jeffrey +3116718 KM6BHR +3116719 KM6BHR +3116720 KE8JOT Andrew +3116721 WD2S Jose +3116722 KB7QPG Joseph +3116723 K4YCD William +3116724 KC9ZEJ James +3116725 W7AUX SHORELINE +3116726 NF0N Michael +3116727 KB4LRE George +3116728 KC0KBP Robert +3116730 KN4PGU Franklin +3116731 KC5BGG Danny +3116732 K7RRL Russell +3116733 KD8ZJI James +3116734 W8ALC Allen +3116735 W7AUX SHORELINE +3116736 KE8GUE Herbert +3116737 N8TMP James +3116738 W6RBM Bruce +3116739 N6HB Samuel +3116740 N5VAE Aaron +3116741 KM6WDV Eric +3116742 N6QXA Ted +3116743 KS0KEV Kevin +3116744 KB3HAF David +3116745 W8DIY Donna +3116746 KE8KSU Dana +3116747 NA1WJ James +3116748 KK4LYN michael +3116749 AC2VK Michael +3116750 KD2MZM William +3116751 KC4AZO Louie +3116752 WB0YTV Martin +3116753 AG2V Aram +3116754 KE8KSE Justin +3116755 W8NCR James +3116756 K0MO Manny +3116757 KM4YJW Douglas +3116758 KN4BIW Richard +3116759 N3COW Douglas +3116760 W3AAD Stephen +3116761 WA3OTI Joseph +3116762 KK6ISN Kelly +3116763 KE5TKR Travis +3116764 WD2S Jose +3116765 KD2MZM William +3116766 W8ZRO Norbert +3116767 W5DUN Eddie +3116768 KC1KJA David +3116769 W1TN James +3116770 AB0PK Nicholas +3116771 N2GRG Gustavo +3116772 N2GRG Gustavo +3116773 KE0QLG Michael +3116774 WA9JMS Mark +3116775 NM3P John +3116776 W0IN James +3116777 KC6PXL Baldo +3116778 K4SBP Sue +3116779 AD5AD Allan +3116780 N2LOV Hector +3116781 W5AVN Michael +3116782 N4QGA DARRELL +3116783 ND7P Don +3116784 KM6UAV Thomas +3116785 YV4YV Jose +3116786 KL2AM Brandon +3116787 AC0HA Cecil +3116788 KD9LTO Matthew +3116789 KQ1S William +3116790 AJ6CU Mark +3116791 K5GHA James +3116792 N5WGA Chuck +3116793 K6LEH Leslie +3116794 KC9HYC Justin +3116795 KB2EHJ Mark +3116796 WA2YXN Eugene +3116797 KB1TOZ David +3116798 K3BMG Michael +3116799 AC2VK Michael +3116800 KD8RUV Paul +3116801 K3BUX Brian +3116802 KN4DYL Kevin +3116803 KB7NP Gary +3116804 KX4IB Douglas +3116805 N9RRM Timothy +3116806 AL4Y Aaron +3116807 N8PIO Ronald +3116808 KD2AAC Gary +3116809 K1TWC Stephen +3116810 KE7ENH Aaron +3116811 KD2MYF Berlotte +3116812 WA4NSV Kenneth +3116813 K0HD John +3116814 N4RJD Robert +3116815 NU4V Dennis +3116816 NM6Y Lyle +3116819 K4BCO Wallace +3116820 K0ME Tim +3116821 W0BL Harry +3116822 KM6TZH Robert +3116823 KN4POX Ted +3116824 W7BOI Richard +3116825 KF4ED James +3116826 KB9SGN Michael +3116827 KN4HKB Zackary +3116828 KB7YGM Suzanne +3116831 W6DVI Rey +3116832 KJ7AYO David +3116833 N9JML Jeremy +3116834 KL2AM Brandon +3116835 N9ZAN Shane +3116836 KD9GEK Campbell +3116837 KJ7AXL Kwame +3116838 KD0YMM Gregory +3116839 KJ7BDG Mike +3116840 WE3WEE Richard +3116841 KJ7BDH Debbie +3116842 KD2FIY Jonas +3116843 KE0OSG Andrew +3116844 K7CBL +3116845 KN4JXI Mitchell +3116846 KC2MMI Jared +3116847 KN2TOD Mark +3116848 N7TW Terry +3116849 KJ7ANT Ken +3116850 KB2YSV Ricardo +3116851 W4APL Arthur +3116852 KD4AOZ Jeffrey +3116853 N5ERD Dave +3116854 W5VOM William +3116855 KA8VTV John +3116856 KE0NWR Ronald +3116857 WB9SZL Dale +3116858 KG4YVC Robert +3116859 K7CBL +3116860 KW4IX William +3116861 KW4IX William +3116862 KG7QEO David +3116863 KJ7BCV Carl +3116864 KC1BUR David +3116865 KE7KBR Jose +3116866 KD9LVI Max +3116867 K2JRS Joseph +3116868 KC5ESS Wendall +3116869 K6HOT William +3116870 AC7WD Thomas +3116871 KN4PSI Darryl +3116872 KE7KBR Jose +3116873 KE7LWN Epaminonda +3116874 W5GW Gary +3116875 WN0MAD William +3116876 K3AFA Steven +3116877 KI5BXN Arthur +3116878 KI6UFX Christopher +3116880 KD6IMX Roger +3116881 KX7DPR Lee +3116882 KI7JOM Chris +3116883 WB0JEN Michael +3116884 KG5DLA Robert +3116885 KB2YSV Ricardo +3116887 KK6KD Jorge +3116888 KN4PSJ Aaron +3116889 KE7MU Bradford +3116890 W8RJC Jeffrey +3116891 KE5SF Steve +3116892 KE8API Walter +3116893 KI4CMW Shawn +3116894 NO1D Douglas +3116895 KI5BPL Eric +3116896 K3RJW Ronald +3116897 NT8Z Scott +3116898 KN4NHP Grant +3116899 WB7NIL Perry +3116900 NE0E John +3116901 KG8IU Jeff +3116902 KM4OMC Khaled +3116903 KE0TIJ Kelly +3116904 KC3MFK Tyler +3116905 KC3HSM Robert +3116906 WB4SLJ Linda +3116907 KC5ULZ Joseph +3116908 KD9LQO Dustin +3116909 KD9LQO Dustin +3116910 WB2RUU Neil +3116911 AI6O Edwin +3116912 KN4BVH John +3116913 KJ7AJA Tyler +3116914 KI0FV Billy +3116915 KD2ELJ Alan +3116916 WB4SLI Hugh +3116917 WB4SLI Hugh +3116918 KE4NTG Walter +3116919 WA7RQZ MICHAEL +3116920 KN4PTC Joshua +3116921 W4MPQ Robert +3116922 N0SUM William +3116923 WA9JG James +3116924 N1KWV Herbert +3116925 KD2QPE Momcilo +3116926 KC3MFN Frank +3116927 KB6CMO Gene +3116928 N0VMJ William +3116929 WB4RI Gary +3116930 KM6WEN Ashwath +3116931 N5NN Michael +3116932 KC8DE Douglas +3116933 KB2WZF Anthony +3116934 KH6DK Peter +3116935 W6KGO Carl +3116936 W1LEB Lawrence +3116938 W1JLT John +3116939 KE6WEZ Stephen +3116940 KG5YSY Colt +3116941 N2EPV Dave +3116942 W8RJC Jeffrey +3116943 AJ6CU Mark +3116944 KC1JFN Anthony +3116945 KE0CVU David +3116946 W8JHW James +3116947 KB5ZJZ Martha +3116948 N7SU Daniel +3116949 KG6GAL David +3116950 W3SZ Roger +3116951 K6ROW John +3116952 K1EVT Jeff +3116953 KR4XD Elias +3116954 KM6WAP Ernesto +3116955 KC5FXY Diana +3116956 KE0PQJ Joshua +3116957 KD9EGT Gary +3116958 N8PPE Dennis +3116959 W0MWM Michael +3116960 KM4FNT Ingrid +3116961 W1WSN Stephen +3116962 KI5BUZ Paul +3116963 KC1EIT Michael +3116964 KJ4VSM Mark +3116965 W6DSG Don +3116966 W0FAA James +3116967 N2PFL Ernest +3116968 KN4PTU Charles +3116969 AD6TF Jignesh +3116970 W6OMH Dave +3116971 KM6WAP Ernesto +3116972 N0LT William +3116973 KN4PTD Josh +3116974 W5FRT Danny +3116975 KM6JXE Leonid +3116976 KD2QKN Samantha +3116977 KA8VJU Ronald +3116978 AB0MY William +3116979 KG6AZZ Patrick +3116980 K7BIG JOHN +3116981 KN4PTV Allen +3116982 W2GT Douglas +3116983 N2ERI Arthur +3116984 ND2T Tom +3116985 KD0RSW Derek +3116986 WP4JMV Abdiel +3116987 AI6UI Michael +3116988 WB7TSX Eric +3116989 KI5BYR Joshua +3116990 W7SKH Susan +3116991 W7CBR Charles +3116992 W6DNS Dennis +3116993 KD2EGR Tim +3116994 KM4LO French +3116995 K0FBS F +3116996 KI6WBH William +3116997 WA9LT Walter +3116998 N7PKK Thomas +3116999 KB3OUX Robert +3117000 KN4OBG Homer 3117001 KB9LIQ Ben 3117002 KB9LIQ Ben 3117003 KB9LIQ Ben @@ -72923,7 +86619,7 @@ 3117061 KC9NCS Lawrence 3117062 N9OZT Don 3117063 WA9VGI Steve -3117064 K9RUF David +3117064 K9AT David 3117065 W1IX Justin 3117066 W9GYC Mike 3117067 N4RK Mark @@ -73098,6 +86794,8 @@ 3117239 N9PBD Greg 3117240 N9WEW Josh 3117241 W9FXT Andy +3117242 K0FBS F +3117243 AD6TF Jignesh 3117244 KC9GCQ Justin 3117245 KE9A Bob 3117246 WB9KAZ Jeff @@ -73177,7 +86875,7 @@ 3117320 N9VU 3117321 N9OZB Aaron 3117322 KE4ENH Adam -3117323 K9RUF David +3117323 K9AT David 3117324 KC9ZIA Arnold 3117325 KA9RXK Don 3117326 KC9TDX Robert @@ -73191,7 +86889,7 @@ 3117334 KE4HNN Sue 3117335 N9BRG Daniel 3117337 WB9AVW Carl -3117338 W9GIL Gil +3117338 W9GIL WOJTEK 3117339 W9DJF Daniel 3117340 K9DPM David 3117341 KD9AQO Frank @@ -73211,9 +86909,8 @@ 3117356 KG9F John 3117357 KD9PK Doug 3117358 KC9LCS Marc -3117359 AC9JY Raymond +3117359 AC9JY Ray 3117360 KD9BCM Callery -3117361 K1IF John 3117362 KB9MVW Chuck 3117363 WB9AVW Carl 3117364 KC9CUK Erich @@ -73233,7 +86930,6 @@ 3117378 N9RES Bill 3117379 W9AEB Tom 3117380 NB9A Christopher -3117381 KA9FLX Robin 3117382 KD9EKI Candice 3117383 WB9JFR Jerry 3117384 W9SBE Sanford @@ -73412,7 +87108,7 @@ 3117560 W9CV Ralph 3117561 K9LOT Jerry 3117562 W9AT Mark -3117563 KC9WME Burt +3117563 KR9T Burt 3117564 N9KTW Howard 3117565 KC9ZLH Conlan 3117566 K9ZST Keith @@ -73440,7 +87136,7 @@ 3117588 N9WCX 3117589 KA9QIT Kenneth 3117590 KD9GAO Donald -3117591 WC9V Ralph +3117591 W9NW Ralph 3117592 KT9Y Timothy 3117593 W9LRS Louis 3117594 AD9Z David @@ -73471,7 +87167,7 @@ 3117619 N9IPA Keith 3117620 KP4EOP Jay 3117621 N9IPA Keith -3117622 N9IJA Timothy +3117622 N9IJA Tim 3117623 KD9GIB Matthew 3117624 W9QL David 3117625 N9YWK Kenneth @@ -73597,8 +87293,8 @@ 3117746 WB9RKD Jeffrey 3117747 KD9FAC Shannon 3117748 KC9IMF Alan -3117749 KD9GYW Charles -3117750 KD9GYW Charles +3117749 N9CPD Charles +3117750 N9CPD Charles 3117751 KU9Z Adam 3117752 KC9DNH Brandon 3117753 N9OZB Aaron @@ -73621,6 +87317,8 @@ 3117770 KC9BOZ Robert 3117771 AA9RH Michael 3117772 AC9NV Martin +3117773 KJ7ABD Omer +3117774 WW7CH Casey 3117775 AB9UU Lowell 3117776 N9KFW Richard 3117777 N9SW Gene @@ -73656,7 +87354,7 @@ 3117807 KD9HMM Joshua 3117808 N2DUP Chuck 3117809 N9NCX Cliff -3117810 AC9KU George +3117810 N9VTB George 3117811 KD9DPZ Raymond 3117812 KB9WUV Antonio 3117813 N9IMI Jeff @@ -73713,6 +87411,7 @@ 3117864 N9NNL Michael 3117865 N0DIP Dipspit 3117866 N0DIP Dipspit +3117867 KC9PSO Francis 3117868 WA9LKZ Ralph 3117869 KD9HNO Paul 3117870 N0JYV Michael @@ -73779,7 +87478,7 @@ 3117932 KE4CON James 3117933 K9UEZ Robert 3117934 W9YU Roger -3117935 K9DJR Daniel +3117935 K9DJR Dan 3117936 N9ZD Allan 3117937 WB9RZY Jerry 3117938 KC9VMZ Wendy @@ -73811,11 +87510,12 @@ 3117964 KB9WLX Mark 3117965 W9EKG Brandon 3117966 K9TEA Joshua +3117967 KC1JKB Christopher 3117968 WA9PHA 3117969 KB9JKW Jonathan 3117970 KD9FRI Michael 3117971 KD9FQR Krystal -3117972 N7DES Wilfred +3117972 WD9T Wil 3117973 KB9WHO Stephanie 3117974 KD9GQX Evan 3117975 KC9VDK Mike @@ -73941,7 +87641,7 @@ 3118095 NA9L Vernon 3118096 KA9PAZ Samuel 3118097 KB9RBF Michael -3118098 K9NRJ Mark +3118098 KK9BC Mark 3118099 WV9O Marv 3118100 KC9RTJ Jayson 3118101 KE9TC Kenneth @@ -74158,7 +87858,6 @@ 3118312 KB9RWS Dennis 3118313 W9EBN Grant 3118314 KN9C Rudy -3118315 KB9RZ Michael 3118316 K9DJC Doug 3118317 N9MAG Alan 3118318 KD9BIX Chris @@ -74172,7 +87871,7 @@ 3118326 N9HZX Donald 3118327 K9DFW David 3118328 N9WNH Dan -3118329 W9NNH +3118329 W9NNH Melanie 3118330 KA9OHV James 3118331 KC9TEL Bill 3118332 KC9GMH Adam @@ -74485,7 +88184,7 @@ 3118642 K9NZF Jordan 3118643 KT9OUT Gilbert 3118644 KC9FHE Gerald -3118645 KD9AGH Bruce +3118645 N9DBJ Bruce 3118646 NF9H Frank 3118647 KD9DWT Raymond 3118648 KA9CXY Michael @@ -74514,7 +88213,6 @@ 3118672 KC9FRP Clifford 3118673 KB9NKM Michael 3118674 K9KJN Leonard -3118675 KE9V Jeffrey 3118676 AB9I Gregory 3118677 N9WQO Edward 3118678 KK9L Jay @@ -74611,7 +88309,7 @@ 3118770 KC9KTV James 3118771 K9BRO Jeffrey 3118772 KD9ECG Timothy -3118773 N9NGB Keith +3118773 AC9UK Keith 3118774 KC9FVE Donald 3118775 KC9CUY Andrew 3118776 N9ALD Aaron @@ -74649,8 +88347,8 @@ 3118808 N9PKL James 3118809 W9MDO Charles 3118810 WB8FUL Dennis -3118811 N9EYG James -3118812 N9EYG James +3118811 N9JDP James +3118812 N9JDP James 3118813 WD9EZB Robert 3118814 N9DOO Don 3118815 N9JIE Nicholas @@ -74743,7 +88441,6 @@ 3118902 KD9IER Adam 3118903 AA9DU Rick 3118904 KA9OPL Joseph -3118905 KE9V Jeffrey 3118906 KC9OCL Richard 3118907 N9CLX Michael 3118908 N9HDD Mark @@ -74790,8 +88487,8 @@ 3118949 W9FLV James 3118950 KB9WSX Andrew 3118951 KD9IIH Theodore -3118952 KM4COM Robert -3118953 KM4COM Robert +3118952 N9IDC Robert +3118953 N9IDC Robert 3118954 WB9QML Nicholas 3118955 W8FIB Tom 3118956 KT9O Ted @@ -74908,7 +88605,7 @@ 3119069 KB0MGH John 3119070 KC0SXD Brad 3119071 KD8DFM Irene -3119072 KE0LOL Albert +3119072 WA0LOL Albert 3119073 W0TYG Derek 3119074 AE0TB Tom 3119075 KE0EKS Ryan @@ -74950,7 +88647,7 @@ 3119111 WB0VHB Randy 3119112 WB0VHB Randy 3119113 K0HU Richie -3119114 KB0TDW Daniel +3119114 KB0TDW Dan 3119115 WB0YLA Don 3119116 N0BKB Larry 3119117 WA0C Les @@ -74978,7 +88675,7 @@ 3119139 W0GEN William 3119140 W0NKN James 3119141 N0OMH Tom -3119142 NZ0J Kyle +3119142 N0GX Kyle 3119143 K0UNI Douglas 3119144 W0UNI Robert 3119145 KC0GGA Michael @@ -75044,7 +88741,7 @@ 3119205 N0CDE Forrest 3119206 K0CY Robert 3119207 KD0ZBI Kyle -3119208 KD0FXR Theodore +3119208 K0TWM Theodore 3119209 KE0IWN John 3119210 KD0VTI Joseph 3119211 KC0UOD Larry @@ -75119,11 +88816,11 @@ 3119280 WD0GAP Craig 3119281 KD0KDT Kevin 3119282 K0CF Craig -3119283 K0SXY Brian +3119283 W0DM Brian 3119284 KD0QED Kevin 3119285 KC0ZMT Bruce 3119286 KE0CWS Michael -3119287 K0SXY Brian +3119287 W0DM Brian 3119288 W0SMS Robert 3119289 KE0FKH Gabriel 3119290 K0RFH Robert @@ -75137,7 +88834,7 @@ 3119298 N0IWT Kevin 3119299 KB0PQX Dale 3119300 KE0CWX Kevin -3119301 KE0JJD Kent +3119301 AE0HQ Kent 3119302 NU0Q William 3119303 KE0KLG Emily 3119304 KA0VWV Dave @@ -75164,10 +88861,10 @@ 3119325 KE0IHD Charlie 3119326 KC0RIG Michael 3119327 KC0EDE Jason -3119328 KD0JZB Jim +3119328 K0JZB Jim 3119329 KE0JHN Christopher 3119330 KD0RBX Mark -3119331 KD0JZB Jim +3119331 K0JZB Jim 3119332 KC0GFY John 3119333 W0OBH Cindy 3119334 K0NFB Scott @@ -75340,7 +89037,7 @@ 3119503 KF0C Kenneth 3119504 WA0DMR Radio6 3119505 N0RFP Robert -3119506 N0MRZ Cary +3119506 N0MRZ Scott 3119507 N0RFP Robert 3119508 N0DFF Stephan 3119509 N3OIA Justin @@ -75397,7 +89094,7 @@ 3119562 KE0BOJ Reuben 3119563 K0ISA Anthony 3119564 KA0RDE Michael -3119565 NV0E Timothy +3119565 K0ME Tim 3119566 KE0GPW Shawn 3119567 KE0GSZ William 3119568 KD0NEZ Barbara @@ -75413,7 +89110,7 @@ 3119579 KD0SJA Verlin 3119580 KE0PQR Michael 3119581 KD0TIJ James -3119582 WD0CPD Bruce +3119582 N0ROL Bruce 3119583 N0DYB Robert 3119584 KE0PJJ John 3119585 KE0OWP James @@ -75435,7 +89132,7 @@ 3119603 N0FHQ Jerry 3119604 KE0OAH Casey 3119605 KI6WBS Alejandro -3119606 KB0TDW Daniel +3119606 KB0TDW Dan 3119607 KD0FHR Galen 3119608 KD0RDS Richard 3119609 KD0ZHP Ruth @@ -75506,7 +89203,7 @@ 3119676 KA0AQG William 3119677 KC0MKG Brad 3119678 N0HR Patrick -3119679 W0QCB +3119679 W0QCB Max 3119680 N1TIO Joseph 3119681 KB0WHM Christine 3119682 AA5TN Gordon @@ -75529,6 +89226,302 @@ 3119699 KE0RNP Gus 3119700 N0GZ Kenneth 3119701 KC0WMR Ryan +3119702 K6NFG Alex +3119703 KB3YIS Kevin +3119704 WB8YKS Michael +3119705 KB1RDG Randall +3119706 KN4PNG David +3119707 AD0AN Clifton +3119708 N1CTO Donald +3119709 KC9RWM Jessiah +3119710 N4BKR Curtis +3119711 W0EOE Jeremy +3119712 KE0PQJ Joshua +3119713 WA3JAW Jeffrey +3119714 AC0UV Ronald +3119715 K8ADR Adam +3119716 N8VNR Kevin +3119717 WW7CH Casey +3119718 N5PSM David +3119719 N5PSM David +3119720 W7HRM Herm +3119721 K3KN Joseph +3119722 N7GTA Donald +3119723 NA8A Dale +3119724 KB1NMO Ethel +3119725 KC9WUV David +3119726 KE0BKB Chris +3119727 AD6YT Scott +3119728 K3LMM John +3119729 KE6KQU Rene +3119730 K4PO Philip +3119731 KN4PPS John +3119732 N3BYQ Thomas +3119733 W6BUG Gerry +3119734 KE0BKB Chris +3119735 K0BAJ Gary +3119736 KC9UZW Jason +3119737 KX0ADM Angel +3119738 KB0BSA George +3119739 K5CDL Chuck +3119740 KD8OAN Peter +3119741 WE6V Richard +3119742 W2CRM Craig +3119743 WD9IND Mark +3119744 KB9FHE Mark +3119745 AC2WE Solomon +3119746 KM6KOT Roberta +3119747 KI7QFT Joe +3119748 N6PAW Gary +3119749 N4OLD David +3119750 K5CDL Chuck +3119751 KJ7AWJ Gregory +3119752 AB5I Gregory +3119753 WX3I Louis +3119754 KA6TIO Jason +3119755 K2ETC Gavin +3119756 WD5DMX TJ +3119757 K9GVT George +3119758 N4OLD David +3119759 KD8OAN Peter +3119760 KB9FHE Mark +3119761 AA9DX +3119762 AI6K David +3119763 N2TH Bernard +3119764 AC8VQ Timothy +3119765 KD9IPF Jeffrey +3119766 KM6QFN Lawrence +3119767 K0ARG Jonathan +3119768 KI6PUO Elise +3119769 N2RTD Shlomo +3119770 K9YPM Michael +3119771 KN6SQ John +3119772 KN4OEC Harry +3119773 AI6DG Joel +3119774 KM6UCI George +3119775 KN4PPH Phillip +3119776 N1CTO Donald +3119777 N8BRO Paul +3119778 KJ4MFW Scott +3119779 KC2DVY Andrew +3119780 N2OBW Eugene +3119781 KN4MZN Eric +3119782 N4XZB Craig +3119783 NC0U Fred +3119784 KW1RKY Nicklas +3119785 KB4FB John +3119787 W7RKX Jared +3119788 W4GDG Gary +3119789 KN4PUZ chris +3119790 WA2JZZ Glenn +3119791 KC0KQ Stephen +3119792 KD7SNA Nate +3119793 KK7DEB Debra +3119794 WJ3E Harold +3119795 WA6QVI David +3119796 W6TOL Guy +3119797 KJ7AMS Steven +3119798 W4MEG Forrest +3119799 N0DUG Douglas +3119800 K7MPV Michael +3119801 N5MCY Christopher +3119802 K7MPV Michael +3119803 W9JAM Jeremiah +3119804 WB6DAO Peter +3119805 WA2JZZ Glenn +3119806 KD2ORA Justin +3119807 KB5LCR Nancy +3119808 WN0MAD William +3119809 K6GOG Garland +3119810 WA5TQA VAN +3119811 W1TKR Russell +3119812 KN4POQ Gilbert +3119813 KF4SNV Scott +3119814 KE8KQJ Matteo +3119815 K2TMF Timothy +3119816 W0AQ Charlie +3119817 W9JAY Jay +3119818 KG4FET Sandor +3119819 KN4POQ Gilbert +3119820 K2TMF Timothy +3119821 KN4OKM Tim +3119822 KQ4Y Richard +3119823 KM4CVU Steven +3119824 WB2BJW Robert +3119825 KN4PUX Michael +3119826 KM6MJT Erik +3119827 KB1OJI Stephen +3119828 KC8PTN kyle +3119829 N0AIA Charles +3119830 KE4RCO Charles +3119831 KN4PQR Theodore +3119832 W6RE Rick +3119833 KI5BZL William +3119834 KT3I Joseph +3119835 KD2OTQ Rivka +3119836 K0MSP +3119837 N4CMB Charles +3119838 KM4LSY Michael +3119839 W7TCT Thomas +3119840 KC7MNG Richard +3119841 W3FRB William +3119842 K7ESB Eric +3119843 N5ATL Kevin +3119844 KO6BB Philip +3119845 KE8EEO Justin +3119846 KD2FRD Don +3119847 KD2FRD Don +3119848 KD2FRD Don +3119849 KD2FRD Don +3119850 KD2FRD Don +3119851 KD4TAC Todd +3119852 W2JTF Jeffrey +3119853 W2JTF Jeffrey +3119854 K0MSP +3119855 KC3MEV CURTIS +3119856 N5ATL Kevin +3119857 KM4YAH Michael +3119858 KN4PVV Bryan +3119859 KD2MFJ Richard +3119860 KW7DTM David +3119861 AI7E Stan +3119862 KC9ANF Roger +3119863 WB5KSM Melvin +3119864 K6BMD Michael +3119865 N3UH Eric +3119866 KE0TJR Shane +3119867 W5THJ Thomas +3119868 KV4FC Mark +3119869 KE8KSC Mark +3119870 WA5ZTE Michael +3119871 KD2QOC Noel +3119872 WH6FXL Michael +3119873 KI6FLM Michael +3119874 KB2EFK Stephen +3119875 KK6GBT Dominic +3119876 KD0EUY John +3119877 KI6FLM Michael +3119878 KN4OKM Tim +3119880 KB4VSP David +3119881 K5RAF Richard +3119882 W6RE Rick +3119883 N4GMC Mary +3119884 WD4GQJ Billy +3119885 KM6WMA JAY +3119886 KG4QWH Matthew +3119887 KI6JVD Rachel +3119888 KD9LWC Michael +3119889 KA5UPQ Cindy +3119890 AF7GR Paul +3119891 KE0TKG Justin +3119892 K4QB John +3119893 N2FKW Robert +3119894 N9NP Richard +3119895 KC0TWY Thomas +3119896 N5EM Edward +3119897 W1LLS Eric +3119898 N5WSD Eric +3119900 K5DKK Keith +3119901 W4YX Bill +3119902 W0JSL Jim +3119903 KI5AVR C +3119904 KM6WLU Frans +3119905 K4HPY Robert +3119906 W3DLJ David +3119907 K2ZS Gordon +3119908 W5TLC Jon +3119909 WB6MYD Joseph +3119910 KN4OTX Dale +3119911 KE6RD Katsumi +3119912 K2NTX Joseph +3119913 K2CCC Clifford +3119914 KC3CRL David +3119915 KI5BZL William +3119916 KC1MAC Brian +3119917 W0JSL Jim +3119918 KI1ORD Paul +3119919 K5DKK Keith +3119920 K4OOD Josh +3119921 KD8CIO Leonard +3119922 KI5BGM Harold +3119923 KF5ZPO Maxwell +3119924 K9LH Paul +3119925 KC6TNK Christopher +3119926 K9DWO David +3119927 KD8TYH Nathan +3119928 KE7GBG robert +3119929 W1RKB Robert +3119930 KG4IES Mike +3119931 KC2VUS Edward +3119932 KG6TGF Alan +3119933 WA2CPA Norbert +3119934 KI5BWB William +3119935 KB2JY Elwin +3119936 KB1KKE Luis +3119937 N3ERE The +3119938 W4SNI john +3119939 KB1PJD Drew +3119940 N4AS Annabell +3119941 K4OWX Andrew +3119942 KN4MEN Herman +3119943 KE4QNP Greg +3119944 NJ2IT Burton +3119945 KD2CDU Michael +3119946 K8PEC Patrick +3119947 K0NSD Norman +3119948 KD4IRB Miklos +3119949 N4LJR Nathan +3119950 K0NSD Norman +3119951 KC1FBZ Mark +3119952 K8GDG Gary +3119953 KJ7BKP Jay +3119954 KB5WCZ Charles +3119955 N0TJB Charles +3119956 KM6AYC Ted +3119957 KJ4SWJ Gilbert +3119958 KD2PGM Vinnie +3119959 KG5DRV Dale +3119960 WD5DMX TJ +3119961 KE8FSY Richard +3119962 N6GFO Matthew +3119963 K6ATH Paul +3119964 KB5SKY Robert +3119965 AG5DT Mark +3119966 KD0FKI Luis +3119967 KC0TA Michael +3119968 WA2TRJ Lawrence +3119969 WA2AEW Roger +3119970 KK6VTY Aiden +3119971 KA6QBP Rad +3119972 KK4FJO Mercer +3119973 KD0FMG Lucas +3119974 WB8LYY Larry +3119975 KB3WYD David +3119976 W2ACK Sandro +3119977 KB5SKY Robert +3119978 AB3DC Dinesh +3119979 N1DOT Kenneth +3119980 W8DU Arnold +3119981 KE8JGP Scott +3119982 KV7D Adriano +3119983 KB9VR James +3119984 KM4SYQ Ronald +3119985 KN4BFD Brent +3119986 NP2N George +3119987 N8TVO James +3119988 AC8TO Donald +3119989 WM6T W +3119990 WA6JL Jodi +3119991 KN4KLE Eric +3119992 KD9FID Judd +3119993 W8HIC Jerry +3119994 WB2AYE Howard +3119995 K3FLH Rance +3119996 N1JWP Mark +3119997 W2KH Anthony +3119998 K8IWV Edward +3119999 K1NUW Nicholas +3120000 N2NYS Dave 3120001 NV8Q Justin 3120002 NV8Q Justin 3120003 KC0CGF Craig @@ -75608,7 +89601,7 @@ 3120077 K8RQX Bruce 3120078 W0PT William 3120079 KK4MHI David -3120080 KB0GUS Josh +3120080 N0EG Josh 3120081 N0MEM Matthew 3120082 KE0KJQ Anthony 3120083 W0DRJ Dewey @@ -75625,10 +89618,10 @@ 3120094 KU0FAN Bradley 3120095 KB0UIP William 3120096 WB0NRV Robert -3120097 NM0N Thomas +3120097 NM0N Tom 3120098 WD0GQA Charles 3120099 K0IMP Allen -3120100 NM0N Thomas +3120100 NM0N Tom 3120101 N0MJS Cort 3120102 KD0CYJ Shannon 3120103 N0MJS Cort @@ -75664,13 +89657,13 @@ 3120133 KD0SGH Aaron 3120134 WA0IKA Gerald 3120135 N0JRD Ryan -3120136 K0OUS Craig +3120136 KH6CP Craig 3120137 N0RC Reid 3120138 KI0IK Michael 3120139 KX0N Casey 3120140 WV0S Rob 3120141 K0JWH Jordan -3120142 N1LGX Lee +3120142 KE0UJS 3120143 KA0RID Marion 3120144 N0CVW Charles 3120145 KD0LFF Floyd @@ -75683,7 +89676,6 @@ 3120152 N0JRD Ryan 3120153 N0PPN Richard 3120154 KC1JG Jerry -3120155 KD0KDD Jeff 3120156 W0TLC Terrell 3120157 KD0CYJ Shannon 3120158 WA0HVU Jerry @@ -75743,13 +89735,13 @@ 3120213 KD0MVB Robert 3120214 WD0DPB Steven 3120215 KD0SDS Clifford -3120216 KE0MXG Adam +3120216 K0PSK Adam 3120217 KU0JHK Skyler 3120218 KE0HXF Robert 3120219 KE0HXF Robert 3120221 KC9GPJ David 3120222 WA0SLL Stephen -3120223 KD0WNG Jeffrey +3120223 KC0BHA Jeffrey 3120224 KC0AJL Andrew 3120225 KC0TKT Eric 3120226 KE0JNK William @@ -75818,7 +89810,7 @@ 3120291 N0AB Henry 3120292 WK0G Joseph 3120293 W0MNA Gary -3120294 N0KZD Zach +3120294 KA0US Zach 3120295 KB0QNK Brant 3120296 N7JYS Eric 3120297 KE0IIB Terrence @@ -75925,7 +89917,7 @@ 3120402 N0XVM Gregory 3120403 AL7EK A 3120404 AD0SY Joyce -3120405 KE0CZJ Stephen +3120405 K5GAI Stephen 3120406 KE0MQQ Mark 3120407 W0ERI Martha 3120408 KE0QEL Kaiden @@ -75974,6 +89966,546 @@ 3120454 W0LYQ Edward 3120455 KE0HKS Aaron 3120456 WA0ULX Loman +3120457 KE0NHL Heather +3120458 KB7WFV Dennis +3120459 KC1JSY Jeffrey +3120460 WA3HCR Gerald +3120461 W8BYH Brian +3120462 KC2WUF David +3120463 N1TMK Thomas +3120464 N2DMJ Daniel +3120465 KC0TA Michael +3120466 K2ZS Gordon +3120467 KL4TA Edmund +3120468 AG7QM John +3120469 AC9RC Edwin +3120470 W0VFR Hal +3120471 WW7ALS Albert +3120472 K0VFO Jim +3120473 N2VZD Timothy +3120474 K4EJR Earnest +3120475 WB4RJL Ernie +3120476 KM6PZC James +3120477 KD2CPT Jeffrey +3120478 KK4EVC Darly +3120479 KE0RTC Jeffrey +3120480 KD2CJS Todd +3120481 K4YPM Dwight +3120482 KN4GAM Aron +3120483 K4VYX Buddy +3120484 K9KEA Karl +3120485 KN4GOV Steve +3120486 KB0LYL Arthur +3120487 K5KJP Kenneth +3120488 WB5MLA John +3120489 WP2B Brad +3120490 W3GWM George +3120491 N4FHL Benjamin +3120492 K9LH Paul +3120493 K4NZ Mike +3120494 K4NZ Mike +3120495 N8ASH Ted +3120496 NU8H David +3120497 W0CAK Curtis +3120498 KN4HOP Joshua +3120499 KC1KKC Andrew +3120500 WB0LFH Harold +3120501 KA2HWM Jerold +3120502 KD4PVG William +3120503 K2TKO Tamara +3120504 KF7OLF Jeff +3120505 KB7MYO Eugene +3120506 W1AGE Carl +3120507 W5CVE Edwin +3120508 AC5XJ Roman +3120509 KD2EAQ Robert +3120510 KC3LEN John +3120511 W0CAK Curtis +3120512 W7GET Garret +3120513 K0MTI David +3120514 K7MKT Maureen +3120515 AF7CV Rebekah +3120516 KM6WCD Craig +3120517 KD9FAL Russell +3120518 KA3WWE Michael +3120519 N4LMC N4LMC +3120520 NU8J Bryan +3120521 KB2ANG Gregory +3120522 KC3CFT Earl +3120523 KX4ND Alvan +3120524 KY9USN Sam +3120526 N4LMC N4LMC +3120527 N2KTE Todd +3120528 K4MKH Mike +3120529 KY9USN Sam +3120530 K0MTI David +3120531 K2WNW David +3120532 NH6SM David +3120533 KC3JSO Richard +3120534 KB2VWM Dean +3120535 N2QHS Richard +3120536 KY3M James +3120537 KE7QPL Douglas +3120538 WX5BA Broken +3120539 KC2NQL Ellen +3120540 KC3MGR Dwayne +3120541 W7WAH William +3120542 N1IFU Nathan +3120543 KA3HJC Willard +3120544 WA5TBB Cranston +3120545 KN4MZQ Jeffrey +3120546 W8RFA Ronald +3120547 N2QHS Richard +3120548 KB2WWG Ruben +3120549 K0FHG Robert +3120550 KG4BUM Karen +3120551 KC7ZFD Eric +3120552 WB2GDZ Jeffrey +3120553 KC7YRO David +3120554 N9RJZ John +3120555 N2AAZ Steve +3120556 W9JMM John +3120557 KC1JTS William +3120558 KB1YXC Paul +3120559 AI4VW Glenn +3120560 K9MAG Charles +3120561 K6GD Bob +3120562 KD9LFM Thomas +3120563 W2MTD Matt +3120564 KE6SGU Carl +3120565 N1JMS James +3120566 W0AQ Charlie +3120567 K0PRW Philip +3120568 KE6USA Richard +3120569 KN4PWP Midlands +3120570 N2HAQ John +3120571 K4EBW Eric +3120572 KD9LUJ Paul +3120573 K7JDS Jack +3120574 N1RCW Rick +3120575 K7JDS Jack +3120576 K4DVJ Timothy +3120577 KI5CAG Jimmy +3120578 KI5CAF Mary +3120579 KI5BLV Cody +3120580 KE8JYK Jonathan +3120581 KM4YBV James +3120582 KN4PQM Fred +3120583 N6HA James +3120584 KO0Y Buck +3120585 WI9LL William +3120586 KE8KUL Brandon +3120587 KA3KSP James +3120588 K3GYK Kevin +3120589 K3EP Emmett +3120590 K8TMI Thomas +3120591 KG5EST David +3120592 N6JAA Julian +3120593 N3SZI Christine +3120594 KG4TSU Raymond +3120595 KI5CBQ Pamela +3120596 W6WEI Morey +3120597 KW4BA Sam +3120598 NG3Y Tadeusz +3120599 KA1WBN Martin +3120600 KD9LQN Andrew +3120601 N7RTT Howard +3120602 WE5ET Michael +3120603 K4AFN Charles +3120604 N6LMA Carrie +3120605 KE5RRR Marvin +3120606 KG5IMZ John +3120607 KC3MHG Brendon +3120608 N8DJC David +3120609 WA5TBB Cranston +3120610 AC2F Vladimir +3120611 N8ZPS Brian +3120612 KK4PND James +3120613 KM6WAS Chelsie +3120614 KN4PJT Ben +3120615 KX4MT Michael +3120616 KK4EYF Charles +3120617 KO6ZC Steven +3120618 AB2TR Gary +3120619 K1PZ William +3120620 NF3H Douglas +3120621 WA1PJG Michael +3120622 KG7IUI Robert +3120623 K4DER William +3120624 KM6PWV Kristian +3120625 K7AIL Jeffrey +3120626 N1TDX David +3120627 AI3I John +3120628 KJ6DBE David +3120629 AD7KI Delmer +3120630 KC1IFO Reinaldo +3120631 N4RCT Ryan +3120632 KD2OWW Dan +3120633 KD2BKO Luis +3120634 N7YMM Mark +3120635 K7QIF Bryan +3120636 KD5WUA Adam +3120637 KE5BGU William +3120638 KC3MHL Colin +3120639 N5STS Aaron +3120640 WB8TKL John +3120641 KN4LCU Caroline +3120642 KK7EG Terry +3120643 W8BLG Randall +3120644 KE0IFV Olney +3120645 N4GWB Bill +3120646 KB1QXB David +3120647 KJ4ODY Jody +3120648 KC0IJH Jeffrey +3120649 N6QIR Martin +3120650 AE2MM Mamoru +3120651 KK7EG Terry +3120652 KD2AJP Thomas +3120653 K3JZD Joseph +3120654 KC3DFS Neal +3120655 KD2QDV Michael +3120656 KG5FAL Rod +3120657 WJ4TBH Joseph +3120658 N4DFQ Clyde +3120659 KC9IJB CHRISTOPHER +3120660 WA4LBN Allen +3120661 WD4DUI Rob +3120662 KG5VDW Rick +3120663 W1JNH Jeff +3120664 W3VMC Daniel +3120665 W4EDX Bernard +3120666 KM6SGK Samy +3120667 KE8JPT Rex +3120668 KN4NDQ Glenn +3120669 W4ASE Bill +3120670 KE4ZF Chad +3120671 KE8KTY James +3120672 WA1ZLQ Richard +3120673 N3FWM Lloyd +3120674 KC8LJO Mike +3120675 KK6GDA David +3120676 KM6WPF Tom +3120677 KE8ERS Troy +3120678 KD6OCI Dale +3120679 KW6MOT Jeffrey +3120680 K7BIT John +3120681 KA6QBP Rad +3120682 K8MD Bob +3120683 K4CHY Stephen +3120684 KF4DAK Bryan +3120685 WA4DSR Patrick +3120686 W6AOA Edwin +3120687 KE7LGH Kenneth +3120688 KC3MDK Mark +3120689 N0PCO Marlen +3120690 KC3MHI Andrew +3120691 WH7IR Pete +3120692 N8NIF Richard +3120693 KA6TLY Patrick +3120694 WB4KY William +3120695 KM6VSX Christopher +3120696 W8FL David +3120697 N7OXF Dale +3120698 W1MX MIT +3120699 N3HSK Ronald +3120700 NN7BH Bruce +3120701 KC3MFX Tanner +3120702 W1MX MIT +3120703 W1MX MIT +3120704 W1MX MIT +3120705 W1MX MIT +3120706 W1MX MIT +3120707 W1MX MIT +3120708 W1MX MIT +3120709 W1MX MIT +3120710 W1MX MIT +3120711 W1MX MIT +3120712 W1MX MIT +3120713 W1MX MIT +3120714 W1MX MIT +3120715 W1MX MIT +3120716 W1MX MIT +3120717 W1MX MIT +3120718 W1MX MIT +3120719 W1MX MIT +3120720 W1MX MIT +3120721 W1MX MIT +3120722 W1MX MIT +3120723 W1MX MIT +3120724 W1MX MIT +3120725 W1MX MIT +3120726 W1MX MIT +3120727 W1MX MIT +3120728 W1MX MIT +3120729 W1MX MIT +3120730 W1MX MIT +3120731 WB5RUH David +3120732 N0DH Donald +3120733 KB6BHB Richard +3120734 K5MGJ Mark +3120735 K3IHI Luis +3120736 N8TA John +3120737 KM6AAN Nick +3120738 KN4POR Jeff +3120739 KM6RXB Skylar +3120740 N0SAP David +3120741 KA0ZIS Dennis +3120742 WA8RSA David +3120743 KN4HOE Michael +3120744 N1HWA Phillip +3120745 WB5YSN Karen +3120746 KC1GRV Brian +3120747 NZ2Z Robert +3120748 K8JPL JP +3120749 NT5R CHARLES +3120750 KJ4RKR Charles +3120751 KM6WPA Ivan +3120752 KE8JKZ Alan +3120753 KD8NE Linda +3120754 KE0SZG Patrick +3120755 WD8BDZ Randall +3120756 WA6DMS California +3120757 KN4POR Jeff +3120758 KE0SZG Patrick +3120759 KL4SC Kristopher +3120760 N8ATC David +3120761 KM6AAN Nick +3120762 KM6TTY Dennis +3120763 KF5CPS Paul +3120764 KF5CPT Philip +3120765 KC8POU Travis +3120766 AB0AH Larry +3120767 KJ7PNL Perry +3120768 KM6DF Dennis +3120769 N8YLI David +3120770 KS4KY Neil +3120771 N7KLT Dale +3120772 KI7MKO James +3120773 N6FT Mark +3120774 KE0IME Oleksandr +3120775 N6FT Mark +3120776 N7KLT Dale +3120777 AC1GD Tom +3120778 W1WWB James +3120779 KD4RTH David +3120780 K2MRH Earl +3120781 K8UA Denis +3120782 KI6WMS Rolf +3120783 KI6WMS Rolf +3120784 NE4EB Lowell +3120785 KE6FA Alan +3120786 KE8KVA Anthony +3120787 W1DAP David +3120788 KE8NAN Thomas +3120789 K2NJH Nicole +3120790 K5HHQ Henry +3120791 K2NJH Nicole +3120792 KK6GDA David +3120793 W6TVQ Lance +3120794 N3JFS Daniel +3120795 KJ8WW Kevin +3120796 KO4OM Kenneth +3120797 KN4PYW George +3120798 KN4KVW Richard +3120799 KE0PMI Christopher +3120800 W2TBC Carl +3120801 W0BRM EOC +3120802 KN4LCU Caroline +3120803 W5ARR Daniel +3120804 KC1KIZ Dana +3120805 KF4VXN Joseph +3120806 AE2T Al +3120807 N6BHS Harry +3120808 N0NWH Thomas +3120809 W7EAZ Mark +3120810 WB6CDF Chris +3120811 KE0RMH Charlie +3120812 W6CEF Joseph +3120813 K0TH Jason +3120814 KE5WXP AARON +3120815 W2ELK Cole +3120816 KN4KCW Michael +3120817 N4GRW John +3120818 W3HJ William +3120819 K7PER Per +3120820 AI6IN Paul +3120821 K8MEJ Ed +3120822 KC5CRK Mary +3120823 KK4CDB Ronnie +3120824 KF5HSH Berrisford +3120825 KB1K Robert +3120826 AE7LF Carl +3120827 KC1KJL Joyce +3120828 KJ4YUA Barkley +3120829 KG7IDL Luis +3120830 KC7FAT Glen +3120831 KD8PZH Christopher +3120832 K8MSK Jeremy +3120833 KG6BS Jonathan +3120834 KB3SUS Michael +3120835 N3PCW Nick +3120836 KS3Z Charles +3120837 N3PCW Nick +3120838 KG6BS Jonathan +3120839 N6BHS Harry +3120840 K6JRO John +3120841 KE8JDE Richard +3120842 N0KCJ John +3120843 KF4HRY John +3120844 KC1ELB Melvin +3120845 K2JSB James +3120846 N2ZUY Amal +3120847 KC0GYF Bob +3120848 N7RR J +3120849 KF7FDN Kenneth +3120850 KN4JSF Dennis +3120851 KE4FOV Albert +3120852 KG5WTR John +3120853 KK4CRL Randy +3120854 AG7OO Kevin +3120855 NK4DX Ez +3120856 N2ZUY Amal +3120857 KC2XX Michael +3120858 KB1JLO Dwain +3120859 K6TLT Tyler +3120860 KF5OIX Scott +3120861 KA7KGQ Richard +3120862 AC2XR Benjamin +3120863 KC5YSD Ted +3120864 KG5BEX Carlton +3120865 KG5WTR John +3120866 AC2XR Benjamin +3120867 N1JMS James +3120868 KA7KGQ Richard +3120869 KF5MWH Michael +3120870 KK4USM Tammy +3120871 K7ISC Danny +3120872 N9EGM James +3120873 K9CQM Daniel +3120874 K7JEW Jexix +3120875 KF5OIX Scott +3120876 N9EGM James +3120877 KB6SAM +3120878 KJ4ODY Jody +3120879 K9CMI Paul +3120880 KE8FRO Wardell +3120881 W8FUR Jose +3120882 KK5K Patrick +3120883 KD9LXH Michael +3120884 KM6BNR Kyle +3120886 KE6MKS Daniel +3120887 WA1EM Corey +3120888 W8SFC Steven +3120889 KC0HJE Dean +3120890 KC0SOK ALERTradio +3120891 KF6MOY Josh +3120892 K0CPM Christopher +3120893 N8CDK Mark +3120894 W7YG Jeremy +3120895 WD9GUY Ronnie +3120896 KM4OSC Larry +3120897 K1QA K1QA +3120898 WA1EM Corey +3120899 N8DKB Keith +3120900 K1QA K1QA +3120901 KW4JK Gregory +3120902 K6RRS James +3120903 KC2DKJ Robert +3120904 KE0TJR Shane +3120905 N2JUG John +3120906 KC2DKJ Robert +3120907 KD8IKN Martin +3120908 WU0B Hans +3120909 WA5AOI Stanley +3120910 N5TWO John +3120911 KC0GO Gary +3120912 W0EEP Geoffrey +3120913 AL8E John +3120914 KF7SPC DANIEL +3120915 KI5CAH Renum +3120916 KD8BMI Leslie +3120917 N6ICW Christopher +3120918 KC3DMZ Richard +3120919 N7MRW Matthew +3120920 KJ4CHT George +3120921 AF7JD James +3120922 KI7WIR +3120923 KG4VOZ Bradley +3120924 W8DVD David +3120925 W8DVD David +3120926 W4LSX Daniel +3120927 KD5DHR Jerry +3120928 K7JAC Jack +3120929 AJ5BS James +3120930 NE1JT Joe +3120931 N3HJY Mark +3120932 KI4GMQ Cameron +3120933 KM4VMY Patrick +3120934 KN4AKV Austin +3120935 NH7TR Dick +3120936 N8YP Jeremy +3120937 KX4KH Johannes +3120938 KC1KMC Paul +3120939 N6ICW Christopher +3120940 N1SFT Craig +3120941 KQ4BR Thomas +3120942 KM4VMY Patrick +3120943 NE5V Christopher +3120944 K1KSR Karl +3120945 WZ7L Michael +3120946 N9GSU Rick +3120947 KG7YJW Robert +3120948 KC0PMF Dennis +3120949 KD8MSO John +3120950 KD8MSO John +3120951 AG7OG Douglas +3120953 KD9LUX Michael +3120954 W6CLF Cheryl +3120955 KB1SWW Jon +3120956 AD1U Angel +3120957 KE0TMM Jason +3120958 WR5U Michael +3120959 AA2EC Ellen +3120960 KF7DHA Mark +3120961 NF7R Don +3120962 W7EP Joseph +3120963 KE0TMM Jason +3120964 N0LMR Larry +3120965 KC7RWI Betty +3120966 W8ARU Arun +3120967 KM4JEX Craig +3120968 N5XET Robert +3120969 KM6RRL Kirsten +3120970 KC6UDH Margaret +3120971 AK5V James +3120972 KA6TMQ Rich +3120973 KC8ICG David +3120974 KG5AVJ James +3120975 KB1ZYU Brian +3120976 N0NFP Albert +3120977 KC3MDC Bryan +3120978 KC1KMC Paul +3120979 N0AXP James +3120980 NQ2B Carl +3120981 KD8ZZJ Jeremy +3120982 NR5X John +3120983 KL4TA Edmund +3120984 KE8NAN Thomas +3120985 W9CN Mike +3120986 N9GSU Rick +3120987 AG5EG Raymond +3120988 KB5RJL David +3120989 K7ECH Christopher +3120990 KD9EOT Igor +3120991 KC7JB James +3120992 K4BK Ken +3120993 KC5RDP Roger +3120994 W1WRS George +3120996 KM4UGE Clarence +3120997 KC0D Mark +3120998 K5DKR Susan +3120999 W5TEK Herbert +3121000 K7ECH Christopher 3121001 K4XXX Ed 3121002 AG4ML Phil 3121003 K4KTR Kyle @@ -75985,7 +90517,7 @@ 3121009 KG4LHQ John 3121010 W4EFB Charles 3121011 W4EFB Charles -3121012 KK4JPB James +3121012 K4XPR James 3121013 KD8TNV Brock 3121014 KD8TNV Brock 3121015 KK4IZA Josh @@ -76054,7 +90586,7 @@ 3121078 KC8VYJ Trevor 3121079 KC8VYJ Trevor 3121080 KC4ALV Anthony -3121081 KK4QL +3121081 KK4QL Kenneth 3121082 K4TCD Thomas 3121083 KI4FRJ Billy 3121084 KI4JWK Robert @@ -76153,7 +90685,7 @@ 3121177 N4AOF Thomas 3121178 W4OFD Richard 3121179 KK4DDX Caleb -3121180 N4GOS Greg +3121180 WC4B Greg 3121181 KF4REN Douglas 3121182 WD4DLA Charles 3121183 KY4US Erik @@ -76164,7 +90696,7 @@ 3121188 KY4RCN Richard 3121189 K4VGS Vincent 3121190 WA4SKU Michael -3121191 KK4EHH Timothy +3121191 KY4FLY Timothy 3121192 WA4UIF Toby 3121193 KK4FIH William 3121194 KM4VHI Bruce @@ -76249,7 +90781,7 @@ 3121274 KB4KC Robert 3121275 N4RJH James 3121276 K4PBS Bill -3121277 NK2J Bradley +3121277 AI4E Bradley 3121278 KY4TPR Jack 3121279 WB8ZHQ Roger 3121280 K7EK Gary @@ -76284,7 +90816,7 @@ 3121309 KY4MT Kmarc 3121310 K4MNF Barry 3121311 K9DTM Johnny -3121312 K9DMD Jeanine +3121312 K9DMD JEA 3121313 KD4PQF William 3121314 KY4CM Curtis 3121315 KK4CKV Christopher @@ -76299,8 +90831,8 @@ 3121324 WB2GYS Laurence 3121325 W9SAR Scott 3121326 K4XXX Ed -3121327 KK4BKD Josh -3121328 AK3Q Robert +3121327 WV4O Josh +3121328 K4PKM Robert 3121329 KK4CKV Christopher 3121330 KG4MVN Robert 3121331 KG4MVN Robert @@ -76461,7 +90993,7 @@ 3121497 KO4XJ John 3121498 WD4W Charles 3121501 WB9FFG William -3121502 N4GOS Greg +3121502 WC4B Greg 3121503 KY4MLS Mary 3121504 KM4MBJ Terry 3121505 KF4CQL Rebecca @@ -76481,6 +91013,472 @@ 3121524 KI4QOI Christopher 3121525 KY1O Alan 3121526 KN4FSA Morgan +3121528 W9SAS Steve +3121529 W9SAS Steve +3121530 KN4CKU Damon +3121531 KD5ARW James +3121532 KC8SBE Donnald +3121533 KD9EOT Igor +3121534 N6BA Jeff +3121535 K4KWF RICKY +3121536 K4KWF RICKY +3121537 NH7TR Dick +3121538 KI7WIR +3121539 KD7SXN Carey +3121540 W6BOM David +3121541 KM6PGV Ian +3121542 AA2WO matt +3121543 N6JYW John +3121544 K6EGF Eduardo +3121545 KS4RNR Scott +3121546 K4FB Paul +3121547 AC2YS Robert +3121548 N0SWE Andre +3121549 KK6GHN John +3121550 N7PDL Sheryl +3121551 WH6FXV Kevin +3121552 KE8KBX Jamie +3121553 N0XRV J +3121554 W2JLH john +3121555 WA7YTL Joseph +3121556 W2HOG James +3121557 KD7OHQ Clifford +3121558 KK6CIC Forrest +3121559 N1HRB James +3121560 WD9IWN Dan +3121561 K8MEM Mark +3121562 K8MEM Mark +3121563 N1HRB James +3121564 N2FVV George +3121565 WA3GOS Sterling +3121566 WO4SUN Wolfgang +3121567 N6DAT Josh +3121568 KE8KVD Fred +3121569 N3JCR Daniel +3121570 KE0TEW Michael +3121571 KB7ZD Larry +3121572 KB1WIQ Michael +3121573 W0BAP Brad +3121574 KS3J Kennith +3121575 WD9BCR James +3121576 KJ6PIH Adrian +3121577 N4KPI Dennis +3121578 KC8ICG David +3121579 KB6VN Michael +3121580 K3WDC Brian +3121581 N3QBO Kevin +3121582 N0AGE Armando +3121583 KC1KME Cameron +3121584 KD2IMR Ehren +3121586 KK6QJB Karthik +3121587 KN4QCY Zachary +3121588 KD9LXQ Lawrence +3121589 N4UNF UNF +3121590 K4OYY Roger +3121591 KM4RTK Christopher +3121592 KE4BB Norman +3121593 N4XUS Roderick +3121594 N6SMO Tejroop +3121595 KV4FD Fort +3121596 NE0N Leon +3121597 KD5OH Greg +3121598 K1EDZ Philip +3121599 KU4PD David +3121600 KN4MSB Christopher +3121601 K1KZP Edward +3121602 KM6KPW Alan +3121603 KB0ZOS Keith +3121604 KD2AWT Andrew +3121605 KC8WPJ David +3121606 KD0QG Charles +3121607 KD0QG Charles +3121608 KB1PLY Rory +3121609 WA6DH David +3121610 W2KW Louis +3121611 K6DWR David +3121612 KA1LB Paul +3121613 W4WWS STEVE +3121614 W1NET John +3121615 WR5U Michael +3121616 AE5HO Mitch +3121617 N4TSP Teddy +3121618 W7OEX Justin +3121619 K8RJE Roberta +3121620 KI8AS Thomas +3121621 KD8HCB Peter +3121622 WX4V Timothy +3121623 KE4MFH Ronald +3121624 KB2FA Karl +3121625 KG4TAX Richard +3121626 N5NMX Jeffrey +3121627 KD9LYA Michael +3121628 KN4ORK Francis +3121629 KE8KVD Fred +3121630 K8LJ Robert +3121631 WD4ALL William +3121632 W1EHU Patrick +3121633 N0BTC David +3121634 KE0PCI John +3121635 KB8WIB WILLIAM +3121636 KT8Y Thomas +3121637 W4RFJ Roger +3121638 K1SKM Stephen +3121639 KC9IKA Adam +3121640 KC5MZD Robert +3121641 W9LP Casey +3121642 KE0MPI Paul +3121643 AF6TF Tim +3121644 KJ6KBL Roman +3121645 KB4PNT Joel +3121646 KD8UDM Dennis +3121647 KC1IYX Gomez +3121648 KN4QFK Oscar +3121649 KC8SBE Donnald +3121650 WG8N Greg +3121651 WW9H James +3121652 WQ4W William +3121653 KG7FEX Kenneth +3121654 KC9AKA David +3121655 K8VL Mark +3121656 KJ6KKI Carlo +3121657 WA4DCL Donald +3121658 WB6JHI Steven +3121659 KB7ED Edward +3121660 N5III Stephen +3121661 W1ER Thomas +3121662 KE5BAL Vance +3121663 KN4KSS Donald +3121664 N1RY Ray +3121665 KN4CIB Ryamond +3121666 N0MDF Jay +3121667 NI9K Nicholas +3121668 K9SYK Dwight +3121669 KE8DMQ Kenneth +3121670 WB6JHI Steven +3121671 AG5GP Shelby +3121672 K6BTM Brent +3121673 K6SAL Salvatore +3121674 W6ZYC John +3121675 KG5MUC Kelley +3121676 KI8DP Kenneth +3121677 N0CSA Thomas +3121678 KD5XN William +3121679 N4SPG Steven +3121680 W6AER Lucas +3121681 KB0QME Ana +3121682 K0OKI Emily +3121683 K9IC Francis +3121684 W7JNT James +3121685 WB7AAV Stephen +3121686 KG8CO Brian +3121687 KG4WVL Wayne +3121688 N5IZT James +3121689 KD5XN William +3121690 N6COB Christopher +3121691 KC6YIO Paul +3121692 KM6QPC Robert +3121693 KQ7V Paul +3121694 KD5ZEW John +3121695 K1CWB Claude +3121696 AC8ZE CHRIS +3121697 KD9SU David +3121698 KC7PCL Kyle +3121699 KC4TNQ Charles +3121700 W4FJT James +3121701 N0PIC Charlie +3121702 KG5UBQ Daniel +3121703 W7KFR Kyle +3121704 N5IZT James +3121705 KC3IBZ Benjamin +3121706 K0BEC Jim +3121707 WX3RWD robert +3121708 AB4QF Alvin +3121709 K0VXP Prentice +3121710 WA4MN Mark +3121713 N3KDJ Philip +3121714 N4ZWR Sam +3121715 N6WBL Jason +3121716 KA1BTK Gardner +3121717 N0VPN Gary +3121718 KE8HTM Beth +3121719 KM6QQA Ryan +3121720 KN4QBV Clyde +3121721 KN4PKX Michael +3121722 W7DPS Harold +3121723 N8ING Sean +3121724 K2RXR Maurice +3121725 W4NQR Stephen +3121726 W4ELL Michael +3121727 K8JTD Jeff +3121728 K8JTD Jeff +3121729 KB7DWO David +3121730 KC9CW Chance +3121731 N0BGS Kurt +3121732 KC8SDB William +3121733 N7LPK Eric +3121734 N3HYM Ray +3121735 KC9SBT Thomas +3121736 KM4MJN Jeff +3121737 W6FBW Gregory +3121738 KC3AWN Alexander +3121739 KE0TAP Dustin +3121740 AB1XK Anthony +3121741 N2CTO Michael +3121742 KA8SSU Raymond +3121744 KB4OIF John +3121745 KC9EGP Ralph +3121746 W7AJP James +3121747 KE0TAP Dustin +3121748 K4SDJ Stephen +3121749 W1OF Ronald +3121750 AE7MU Michael +3121751 W9BEL Bill +3121752 AE7UQ James +3121753 N9KJB Kelly +3121754 KD7QZD Joe +3121755 KU6N William +3121756 WB6YES Leo +3121757 KE0TMS Ron +3121758 WA8RR Richard +3121759 WG8N Greg +3121760 W6GFR Michael +3121761 W8NET Miles +3121762 KC9EGP Ralph +3121763 KN4AOA Mike +3121764 KN4CKH Eric +3121765 W9CSB Chad +3121766 KB8ECG David +3121767 KG7SHC John +3121768 KG5QWK Janet +3121769 KD8NVS Tyler +3121770 WY2E Alfred +3121771 N0HKD Harold +3121772 KN4CKH Eric +3121773 AB4QF Alvin +3121774 KB6RHD David +3121775 KD2LRL Curren +3121776 N1TEK Richard +3121777 KB1NCS Matthew +3121778 W4JEY Janna +3121779 AC8FM +3121780 KF7VOL Andy +3121781 NK8T Robert +3121782 KM4CVN Jeremie +3121783 KB9PPX Whitley +3121784 W8GOD Fu +3121785 KN4CYH Wesley +3121786 KD2EDU Hong +3121787 KN4CYH Wesley +3121788 WA8RR Richard +3121789 AA6AU Richard +3121790 AC4KW ANGEL +3121791 W4BBC Neil +3121792 N3HQJ Frank +3121793 KB1NCS Matthew +3121794 KM4CVN Jeremie +3121795 KN4QAR David +3121796 K7RWE Ronald +3121797 KL4HX Adam +3121798 KJ6NCM Mitch +3121799 KN4MUH Margaret +3121800 NO8U Gail +3121801 NO8U Gail +3121802 KN4QT David +3121803 AC8FM +3121804 K4FB Paul +3121805 KC1GGE Benjamin +3121806 KD2IVF Nikolaos +3121807 AC4KW ANGEL +3121808 N2YGI Dionysios +3121809 KN4PNG David +3121811 K8SI James +3121812 N8YXR Robert +3121813 W8EMV Edward +3121814 KK3CAT Cody +3121815 N4JSF James +3121816 K1SYD Peter +3121817 W3MTT J +3121818 KK4SJT Harrison +3121819 AG6MM Michael +3121820 K8SAR Stephen +3121821 KM4UUD Paul +3121822 KB0JYM Frankie +3121823 K2UWC Chris +3121824 KM4WJD William +3121825 K8WDJ David +3121826 KM6WWQ Miguel +3121827 KJ6NCN James +3121828 KI7SYF James +3121829 K1SYD Peter +3121830 KM4KBL Duffie +3121831 KE8FSP Bruce +3121832 KN4ODP Theodore +3121833 AA0VE John +3121834 AA0VE John +3121835 WD6BDZ CCCSDA +3121836 KC2GIW Matthew +3121837 AC9TY William +3121838 WD8IXC Ronald +3121839 KE8HBF Jonathan +3121840 KM4WJD William +3121841 KN6NK Nicholas +3121842 K0JDL Johnny +3121843 KJ7BKP Jay +3121844 KJ7BCX Jay +3121845 KA8BMA Richard +3121846 K4RMX Stephen +3121847 KB4CMF Christopher +3121848 WA7PTM Steve +3121849 WB7OSC Sue +3121850 N0CFN Stephen +3121851 K8FAM Jon +3121852 KE3ITH Keith +3121853 AA3UJ Seung +3121854 K8VL Mark +3121855 K7RFH Richard +3121856 K2UWC Chris +3121857 KM6WPF Tom +3121858 KE3ITH Keith +3121859 WR4JW James +3121860 KI4GMQ Cameron +3121862 KN4PFT Robert +3121863 DL7XP Patrick +3121864 KE8GWM Gerald +3121865 KD7HJK Brandon +3121866 WF5JLB Jeff +3121867 KB0OTL Robert +3121868 N0SXI Ronald +3121869 WD6TED Ted +3121870 KC1KMW James +3121871 W9ONY Chad +3121872 KA8SSU Raymond +3121873 KC1KNA mark +3121874 W3ILW James +3121875 KB8U Russell +3121876 N8WWX Bruce +3121877 KI5WA Horace +3121878 KD0JVF Chris +3121879 WJ4G William +3121880 KM4CAC Carrie +3121881 KD9HSR Lucy +3121883 KB2NYC Gary +3121884 KN4MLN Darrell +3121885 N3YFO David +3121886 KI6GRO Frederick +3121887 K9VXR Donald +3121888 K0MPW Michael +3121889 WB5CTQ Charles +3121890 WB5CTQ Charles +3121891 KD8OFO Dennis +3121892 KD5TJN Michael +3121893 N9CJS Charles +3121894 KJ7BVD Monico +3121895 KD6V Terrylee +3121896 KD6BFJ Theresa +3121897 KI6LFA Megan +3121898 KJ6STR Spencer +3121899 KE6O Mark +3121900 K1NFE Aniello +3121901 KC8RFE Kevin +3121902 KC1JAG Jagadeesh +3121903 KC9WNZ Gregory +3121904 KM6WMB Audie +3121905 AF5OS Victor +3121906 W4TBA Stephen +3121907 WB6SAA Steven +3121908 WA1VVH Harold +3121909 KG5ORX Gerard +3121910 KC1KFN John +3121911 KN4QIK Ken +3121912 WF7W James +3121913 KM6WZH Aliya +3121914 KG6MTM Pat +3121915 W9KTL Tyler +3121916 KK6SIL Wilbert +3121917 K1QV Blaine +3121918 KJ7BNZ Thomas +3121919 WB6SAA Steven +3121920 KD8ZSK Keith +3121921 KC1KNE Chris +3121922 KD8ZSK Keith +3121923 KN4QHZ Ted +3121924 W3ESR Frank +3121925 KN4QHZ Ted +3121926 KA6SJK Steve +3121927 KA6SJK Steve +3121928 KI5CDZ Donald +3121929 K3UKE Sean +3121930 W4UOO Michael +3121931 KG5OWR Richard +3121932 W0NGJ Jeffrey +3121933 K6LPB Louis +3121934 KI6IGR Nathaniel +3121935 W9LAG Omar +3121936 K6TJH Timothy +3121937 K2HJ John +3121938 W9LAG Omar +3121939 AC0YT John +3121940 AK9CU Jose +3121941 W8JES John +3121942 WA6VPL James +3121943 K2LED Robert +3121944 KE8KXF Thomas +3121945 KI4MKD Kenneth +3121946 W8ZAC Zac +3121947 KI7UNK Ricky +3121948 KC6DOG Kristine +3121949 W0VFR Hal +3121950 KA4TMS Douglas +3121951 KC3MIL Jason +3121952 KC4JH Royce +3121953 WF1W Chris +3121954 KD9LYT William +3121955 KD9ANS Anthony +3121956 KM4ZCX John +3121957 KE8DZU Paul +3121958 KE5YQW Ali +3121959 KF4DBI Jay +3121960 N6JXJ Cary +3121961 KD2LDX Jason +3121962 K6CYC California +3121963 N6OBB Kenneth +3121964 N4ZZS George +3121965 N4ZZS George +3121966 KE8KJP Trinton +3121967 AG6VS James +3121968 KQ4MM Brian +3121969 W8SFC Steven +3121970 K6SPV Christopher +3121971 KD5WLB Lynn +3121972 KD0UIJ Ira +3121973 KE5RI JOHN +3121974 KD9LTK Cody +3121975 W4PCN Outer +3121976 KD5NQA chris +3121977 WZ6K Rich +3121978 KC4OGF Derric +3121979 W4PCN Outer +3121980 KA8MNT Thomas +3121981 AC0YT John +3121982 WA2YZM Robert +3121983 KC9MUT Charles +3121984 W1JWB Joseph +3121985 N1ZKW Glenn +3121986 KC3JEG +3121987 N1ZKW Glenn +3121988 WF1W Chris +3121989 KC9KPI Steven +3121990 N9LTW Louis +3121991 W2EMT Scott +3121992 KM6WYJ ken +3121993 WY8V Sam +3121994 KK4FRI Mike +3121995 W6GRO Michael +3121996 KN4IGK Jay +3121997 N1DSW Dana +3121998 N2CLN Charles +3121999 WF6Y Kurt +3122000 N1JIW Joseph 3122001 KD5SSQ Anthony 3122002 W5ELM Earl 3122003 W5JAB Jean @@ -76539,7 +91537,7 @@ 3122057 K5HUM Mike 3122058 AE5YC Herbert 3122059 AB5HA Paul -3122060 N5DEA William +3122060 N5WRH William 3122061 KG5RJL Jeffrey 3122062 AE5VC Edward 3122063 N5BMD Herman @@ -76550,10 +91548,10 @@ 3122068 N5PST Wendell 3122069 W5DJA Donald 3122070 N4ADL Andrew -3122071 KF5VH Stephen -3122072 W5RHR Joseph +3122071 KF5VH Steve +3122072 K5HS Joseph 3122073 N5ZAP Chris -3122074 KC5VKX Brian +3122074 W4MH Brian 3122075 AF5JH Robert 3122076 K5EOD Gary 3122077 N5ZAP Chris @@ -76598,8 +91596,8 @@ 3122116 KB5ODJ Ellis 3122117 KB5ODJ Ellis 3122119 N5LXN Luke -3122120 N5WIG Michael -3122121 N5WIG Michael +3122120 AE5BZ Michael +3122121 AE5BZ Michael 3122122 N5PED Arthur 3122123 KG5IUH Drew 3122124 K5ST Johnny @@ -76609,7 +91607,7 @@ 3122128 KC5NAD Raymond 3122129 KC5NAD Raymond 3122130 K0TEG Thomas -3122131 AB6DS Russell +3122131 WI5ARD Russell 3122132 K0TEG Thomas 3122133 AD5AQ Jerry 3122134 NK5I Dale @@ -76660,7 +91658,7 @@ 3122181 N8KB Patrick 3122182 KF4PJH David 3122183 W5TGK Robert -3122184 KG5WBL William +3122184 KK5WCR William 3122185 N5KRW Kevin 3122186 W5DGM Dominic 3122187 W5DGM Dominic @@ -76671,7 +91669,6 @@ 3122194 W5WFV Philip 3122195 N5PZJ Martin 3122196 W5WFV Philip -3122198 KE5YHB Ethan 3122200 KG5SBA David 3122201 KG5WYV Dan 3122202 KG5SBA David @@ -76684,12 +91681,794 @@ 3122211 K2JJJ Joel 3122212 KG5SSH Christy 3122213 KG5RFN Arthur +3122214 KS4KLM Kevin +3122215 KG5YDH Michael +3122216 KB8DGC Patrick +3122217 KD2QWM Christopher +3122218 KB9YDK Dean +3122219 WA5KYV Charles +3122220 KG7EES NICHOLAS +3122221 N4CET Lynn +3122222 KM6HK Daniel +3122223 N3VSI Larry +3122224 KN4QNY Benjamin +3122225 KN4BIG Robert +3122226 N0AHL Roland +3122227 KC9LEA Joe +3122228 N9OJR Erik +3122229 KN4QMS James +3122230 N7LUK Luke +3122231 K2AWA Glenn +3122232 KN4PLQ Robert +3122233 K7BBH William +3122234 K9LMR David +3122235 KI5BOZ John +3122236 N9QO William +3122237 K3ILA David +3122238 WT0MM Thomas +3122239 KC3LOE Richard +3122240 WT0MM Thomas +3122241 KC9YJP Eric +3122242 KC7CUE Craig +3122243 N7LUK Luke +3122244 N7YMM Mark +3122245 KD7MIA William +3122246 KB6JYF Michael +3122247 W6GRO Michael +3122248 KF5LUM Brandon +3122249 K4KMW Kyle +3122250 NS1RA Eric +3122251 W6CM David +3122252 N2VNW Philip +3122253 KD0HCR Jason +3122254 KC3MKP James +3122255 KC0TMD Justina +3122256 KM6WXN Peter +3122257 KB6BFR Charles +3122258 WN4GLE Chris +3122259 KE0RTB James +3122261 W4VAS Victor +3122262 NT4MC Philip +3122263 KJ7CBA Jacob +3122264 KM6VUS Charles +3122265 KH6DH Gerald +3122266 NX3D Milton +3122267 KI4HZP Russell +3122268 K5KOB Phillip +3122269 W1JL Joshua +3122270 KD5IBD Aaron +3122271 WB4BMG Benjamin +3122272 W1JL Joshua +3122273 KA1WER Paul +3122274 KI5CGF Jonathan +3122275 K6EGV Edgar +3122276 WX4NEX Norman +3122277 KC5RHQ Millard +3122278 KM6WXN Peter +3122279 N2CGM Chris +3122280 W0MFQ Tom +3122281 KK4SXX Barney +3122282 KA9LYN Lynette +3122283 N4XTD Vincent +3122284 KK6CIU Kroum +3122285 W2BJ John +3122286 KC8OSZ Denise +3122287 KF5YCW Edward +3122288 KF7WXN Joshua +3122289 AB3TT Ross +3122290 N0OWL Steven +3122291 KC4OGF Derric +3122292 KN4QFW Victor +3122293 KM6WPD Keith +3122294 KC3LKC Zachary +3122295 AG7QO Ravinder +3122296 KM6WML Andrea +3122297 KA5YCL John +3122298 KG7EU John +3122299 KG5YRB Alan +3122300 KJ4CKM Bryan +3122301 KM6WML Andrea +3122302 KA5YCL John +3122303 AB0WV Frank +3122304 W3CRO Michael +3122305 KG5ACP Diamantina +3122306 KJ7CDS Marie +3122307 W6HIM Robert +3122308 W9LRF Larry +3122309 KD9FHK James +3122310 KE0TRL Brent +3122311 K1CPD Joseph +3122312 K0YDS Joseph +3122313 KE6CLF Christopher +3122314 KK6GES Zachary +3122315 KK6TIN Jeffrey +3122316 KB8BSD David +3122317 KE0IOU David +3122318 KI6EIL Matthew +3122319 KI6EIL Matthew +3122320 KD9FHK James +3122321 KA9KWH Daniel +3122322 KC3ZRB Zachary +3122323 W4ASA Herbert +3122324 W7YLK Daniel +3122325 KC1KMB Jason +3122326 KB2AUJ Michael +3122327 AG7MD Gershom +3122328 K6HR Paul +3122329 N0WYL Susan +3122330 N0WUD Ulrich +3122331 K5WTR William +3122332 KW4MA Daniel +3122333 N9NWI Richard +3122334 W8ZAC Zac +3122335 W1JNH Jeff +3122336 K4OMD Phil +3122337 K2JAT Jose +3122338 KI5CGJ Robert +3122339 KN4KAN Keith +3122340 KN4AJQ Pierce +3122341 NU4V Dennis +3122342 KM4YBV James +3122343 W9DAV David +3122344 KN4PRV Justin +3122345 KN4NLU Paul +3122346 K0HAK David +3122347 W6OAK Hugo +3122348 KE0TSE Joseph +3122349 K4ASH Octavian +3122350 W6OAK Hugo +3122351 N4CAG Christopher +3122352 N4CAG Christopher +3122353 KE4RAY Rainer +3122354 NY7H Howard +3122355 N0WEB William +3122356 W9SK Stephen +3122357 W2XAM Edward +3122358 KK6BCX Kenneth +3122359 KE4RAY Rainer +3122360 KC4SIG Douglas +3122361 NY7H Howard +3122363 KB6BFR Charles +3122364 K2QPN Robert +3122365 KC3GUY Eric +3122366 N8XYF David +3122367 KN4BFG Scot +3122368 N1JIE John +3122369 W4DOC DMR +3122370 KC8QHK Dave +3122371 AA8X Robert +3122372 WD8DFW Raymond +3122373 KN4PXY William +3122374 KM6WDN Michael +3122375 KC1KOC Jason +3122376 KG6CSE Thomas +3122377 K2IZV Cruiser +3122378 AB2FA Takashi +3122379 KB0SME Toby +3122380 AE0T Bruce +3122381 KF7QLQ Michael +3122382 KE4OSL KIMON +3122383 KE0TSE Joseph +3122384 W0ZC Zack +3122385 KD2QOP Constantine +3122386 KG5YZD Roderick +3122387 N0GLM Preston +3122388 KM4WRQ Joseph +3122389 W7CLA EOC +3122390 KD8RSA Keith +3122391 KN4QLZ SAAD +3122392 WH6FUS Sidik +3122393 K8ACM Mark +3122394 N1SAX George +3122395 W1GS John +3122396 KN4QOO Phillip +3122397 N1RSQ Bryan +3122398 K5BOR Jeffrey +3122399 K5DWA Douglas +3122400 KE8EIT Steve +3122401 KC3BAE Mark +3122402 N8RWK Jim +3122403 NG1H GENE +3122404 W8GXR Scott +3122405 N1RSQ Bryan +3122406 KI5BYG Fred +3122407 AB6SN Osias +3122408 AE1TE Michael +3122409 KB3GVC John +3122410 N9KJE Tony +3122411 W1AUZ Richard +3122412 KB7PKC Glenn +3122413 KG7TAK Daniel +3122414 K5COB Chester +3122415 KB7PKC Glenn +3122416 KB3GUR Charles +3122417 KN4PHP Jim +3122418 KN4MEB Thomas +3122419 W1GS John +3122420 N0FON Damon +3122421 KC0IPU Jeremy +3122422 WB6SKM Charles +3122423 KN4QGR James +3122424 KD2QYA Don +3122425 AD8BV John +3122426 AD8BV John +3122427 KC1KNC Joe +3122428 KE3FF Robert +3122429 N5ODE Gary +3122430 KF4MSV Darrell +3122431 WA7VHT Neil +3122432 WV6S Robert +3122433 WB5BRY Don +3122434 WH6KK Kent +3122435 K5ILW Bradley +3122436 KE0SFE +3122437 W8AJC Andrew +3122438 K6RON Ron +3122439 N7HT David +3122440 KB4DW Danilo +3122441 KW8C Donald +3122442 WB5BRY Don +3122443 KN4JGW Ronald +3122444 KB1MSZ Christine +3122445 KB1OTX Leonard +3122446 W5AFD Albert +3122447 KE0PDE Linda +3122448 KO2Q +3122449 N1KWG Kenneth +3122450 KB3WDN Raymond +3122451 KD9HJX Alan +3122452 K4IPO Greg +3122453 W2GAM George +3122454 W0VFK Jack +3122455 N5CEC Michael +3122456 N3WXR Michael +3122457 AB3JF Jody +3122458 KA5PCJ Brent +3122459 WB4EYE Mark +3122460 KE8FWY Larry +3122461 KJ7BWB Riley +3122462 K4IPO Greg +3122463 AF6AS David +3122464 KM4JZP Jose +3122465 K1GAT Greg +3122466 WB6PWJ Glenn +3122467 K6UYL Edward +3122468 W4TPS Thomas +3122469 WN5A Jack +3122470 N1NSS Nicholas +3122471 KI7FOP Joey +3122472 K7QHQ Wayne +3122473 W7GRV Jeffrey +3122474 KE5KDU Andres +3122475 KN4QIM Daniel +3122476 KD2OPN Christopher +3122477 AI4QM Wayne +3122478 KC3EDF John +3122479 KE0TOT Craig +3122480 KJ7AFY Matt +3122481 KJ7AFY Matt +3122482 KM4JFM Richard +3122483 W4DOC DMR +3122484 KN4QIM Daniel +3122485 AB8FX Roger +3122486 AK6PW Peter +3122487 WX4V Timothy +3122488 KE0TOT Craig +3122489 N5JMD Juan +3122490 KD5ZWB Matthew +3122491 W1CVB Robert +3122492 KE0TSI Timothy +3122493 W5WCA Wendell +3122494 N2ZGW Raymond +3122495 K8TTI John +3122496 KA9EJL Jeffrey +3122497 N5RP Charles +3122498 W9OW John +3122499 KB9QKL Shannon +3122500 K1ZYM Kenneth +3122501 N9EGT Wayne +3122502 KB3ZLY Jean +3122503 KI5BTM Ralph +3122504 KK4SSV William +3122505 WC4VL Eric +3122506 WH6OZ Mark +3122507 WY7CDL Clayton +3122508 KC3MLK John +3122509 KC2HKA Theresa +3122510 KF5NYU Mike +3122511 KN4FPC Justin +3122512 W8TB Jeffrey +3122513 KK6FPE Steve +3122514 W5MMH Marty +3122515 KD8WPX Todd +3122516 K2HZE Tom +3122517 N1UB Barton +3122518 N5DPG David +3122519 N3LMS Wayne +3122520 KC9PTA Walter +3122521 KM4DC Donald +3122522 W8GEM Heather +3122523 AH6QC Jonathan +3122524 W4TJP Timothy +3122525 WA4IZG David +3122526 KM4JRF Michael +3122527 N9OVR Eric +3122528 KM4SWL Richard +3122529 KM4JRF Michael +3122530 K0JGC Joseph +3122531 KS0TD Tony +3122532 KC8UXT Dikran +3122533 WA4IJV David +3122534 W4ZZK Josh +3122535 KF0JB Jonathon +3122536 KF0JB Jonathon +3122537 KF0JB Jonathon +3122538 KF0JB Jonathon +3122539 KF0JB Jonathon +3122540 KF0JB Jonathon +3122541 KF0JB Jonathon +3122542 W1TED Ted +3122543 KE0IFV Olney +3122544 KD2NHB Michael +3122545 KI4LSV Richard +3122546 K0TNG Randy +3122547 W4ERN Ashley +3122548 AD6RH Jeffrey +3122549 AB1HD Richard +3122550 W5CYC David +3122551 KC0QJZ Thomas +3122552 WA8TJO Donald +3122553 KW1A Derrick +3122554 KA1JFW Michael +3122555 N8RQJ Harold +3122556 KM6TEO Daniel +3122557 N3IV Bradford +3122558 W6XM John +3122559 N1TW Steve +3122560 W8DCE Delaware +3122561 W7JWT Jim +3122562 N8XP Scott +3122563 N8XP Scott +3122564 W8CUL West +3122565 AB3TT Ross +3122566 KE0RXS William +3122567 W3RLS Robert +3122568 KM6SO Bob +3122569 N9YTX Ronald +3122570 N9YTX Ronald +3122571 AC2TF +3122572 KM6AJP Mark +3122573 NV5T Scott +3122574 K2JRZ Thomas +3122575 W4BBE Daniel +3122576 KA3ZLS Christopher +3122577 KD8AAD Charles +3122578 KK4AMJ ARES +3122579 N1AUP Christine +3122580 K6SUD Tod +3122581 N3AU Robert +3122582 KN4QLW George +3122583 KK4TJH Sammy +3122584 KC3KPC Nathaniel +3122585 AJ6O Curtis +3122586 N3ZUK David +3122587 KD4BUX Frederick +3122588 AC9SW Andy +3122589 KN4PSJ Aaron +3122590 NE5V Christopher +3122591 KK4AMJ ARES +3122592 KG7TAK Daniel +3122593 K1EV Bill +3122594 WG5F Ed +3122595 KF5DXT Nicole +3122596 KJ7CDF Alan +3122597 KW1A Derrick +3122598 K3CRG Craig +3122599 WW0LFZ Chris +3122600 KC3MLK John +3122601 WE4PON Timothy +3122602 KC9LVT Garrett +3122603 KE0DWA Thomas +3122604 KT2UU ANDRII +3122605 KN4HZU Keith +3122606 KG6EIN Scott +3122607 KF5ZMM John +3122608 KB3LZV Murray +3122609 KN4OTT Maximo +3122610 KB6LPG Daniel +3122611 KE0SVF STEVEN +3122612 KI7ILD Robert +3122613 W9ABA Edward +3122614 K0BMC Benjamin +3122615 K0BMC Benjamin +3122616 WA9RFY David +3122617 KD2MGH Marcus +3122618 N7VAP Gregory +3122619 KD2MGH Marcus +3122620 KV4JW Josh +3122621 KK6DLN James +3122622 KB3MEC Edward +3122623 KD0CRV Carl +3122624 KB3OFI Mary +3122625 KB3WBG Edward +3122626 KM6YDJ Andrew +3122627 AC2RR Susan +3122628 KC3EUS Michael +3122629 KD0IJP Steven +3122630 KE7PCB Paul +3122631 W1DTM Douglas +3122632 KF5HWP Christopher +3122633 KE4JVM Dana +3122634 KK6IQ +3122636 AC8VM Randy +3122637 K2FC Dennis +3122638 KD2EWE William +3122639 KB5ELT Thomas +3122640 NE4LH Loyd +3122641 NM1D Rich +3122642 NM1D Rich +3122643 KK6IQ +3122644 K9WJD Lathrop +3122645 N2PQP Rody +3122646 KM0G Michael +3122647 N0WDC Charles +3122648 KC3MMP Mussie +3122649 K4QLQ Peter +3122650 KE0TTH Jeff +3122651 W3JWE John +3122652 KA3VXR Blanche +3122653 KC3MMP Mussie +3122654 KB7SIJ Jeffrey +3122655 KG5ZNQ Kasie +3122656 KG5WYK Michael +3122657 KD8VNU Scott +3122658 WW8JON Jon +3122659 KC3LVA Courtney +3122660 KB0SME Toby +3122661 KM6VSX Christopher +3122662 KG7NTV Charlie +3122663 KC1GST Joshua +3122664 N0EVF William +3122665 N2NFS Curt +3122666 K4DBE Dennis +3122667 N4UAX Craig +3122668 KE8KXR Joseph +3122669 N7HWM Hilary +3122670 N9IAT Mike +3122671 KE0LNU Matthew +3122672 KD8VKW Larry +3122673 KI4UDZ Ray +3122674 KM6NRZ Darrell +3122675 KN4OGL John +3122676 KC3KXY Kenneth +3122677 WA4UJC Charles +3122678 WE4WXO Eddie +3122679 KM5R Melissa +3122680 W2ZAY Marek +3122681 KD2BDZ Ralph +3122682 WA4WFR James +3122683 K8TAF Timothy +3122684 KC4ID Mark +3122685 WA2KGB Richard +3122686 KE8KYV Eric +3122687 KD2OEA Anthony +3122688 KN4QLF Weslie +3122689 W8XM Nick +3122690 KI5CIU Carl +3122691 K4SBT Robert +3122692 W7TAN Thomas +3122693 K5YKG Austin +3122694 KJ7CGY Brett +3122695 AF9W Bob +3122696 W0SSB Frederick +3122697 KD2OEA Anthony +3122698 W8SUN George +3122699 N8OFP Delbert +3122700 W5AJO Sean +3122701 N0WBQ Michael +3122702 KN4QOC Michael +3122703 KM4TUO Stewart +3122704 KO3US Brian +3122705 W7BTL Harold +3122706 W8ZXY James +3122707 KM4FPO Diana +3122708 KJ4LUT +3122709 WW0DN Daniel +3122710 K2ADP Arthur +3122711 KB8TGI Annabelle +3122712 N9DRF George +3122713 W4PCN Outer +3122714 W4PCN Outer +3122715 W4PCN Outer +3122716 W4PCN Outer +3122717 W4PCN Outer +3122718 W4PCN Outer +3122719 W4PCN Outer +3122720 W4PCN Outer +3122721 W4PCN Outer +3122722 W4PCN Outer +3122723 W4PCN Outer +3122724 W4PCN Outer +3122725 W4PCN Outer +3122726 W4PCN Outer +3122727 W4PCN Outer +3122728 W4PCN Outer +3122729 W4PCN Outer +3122730 W4PCN Outer +3122731 W4PCN Outer +3122732 W4PCN Outer +3122733 W4PCN Outer +3122734 W4PCN Outer +3122735 K4MIN William +3122736 W6YMJ Yair +3122737 KC4JFA Alexander +3122738 N4ZQE Edward +3122739 N0YKR Ronald +3122740 W8GMC Michael +3122741 W4SLL Stephanie +3122742 KW4XE Lester +3122743 K6DWJ David +3122744 KE8KZL Todd +3122745 N6ELD Donald +3122746 NU3H Donald +3122747 W7BOB Robert +3122748 KE8KZL Todd +3122749 NK0G Robert +3122750 N0FYI daniel +3122751 K9ONR John +3122752 N1FTP Harold +3122753 W2JPG John +3122754 KB0OTY Andy +3122755 KE0QZX Jayson +3122756 W9BBF Michael +3122757 KC0QFS Rick +3122758 KE6TT Keith +3122759 KC0QFS Rick +3122760 WC3H Dick +3122761 KE0CPH Joshua +3122762 KC3KXY Kenneth +3122763 KN4FEE Timothy +3122764 AJ6BO +3122765 KE7U Brad +3122766 KJ6VXI Martha +3122767 KC1KOX Joseph +3122768 KK4LFN Robert +3122769 KM4DQQ Tyler +3122770 NA1T Stephen +3122771 KE7VUX Thomas +3122772 W3PRL Paul +3122773 KF9MT Rickie +3122774 NK2C Jeryl +3122775 KB9SVW Stephen +3122776 K9SLD Tim +3122777 K6CLS Cliff +3122779 KD2OWL Adam +3122780 KD0YTH Stephen +3122781 KE6TT Keith +3122782 KX4OD Roger +3122783 KL5YJ T +3122784 KE7U Brad +3122785 AG1V Bob +3122786 KG2T Joe +3122787 WY1U Tim +3122788 KI5AKX William +3122789 W2KYM James +3122790 KC1AWV Steve +3122791 KE8EAT Christopher +3122792 KD2HCU Eric +3122793 K6TTT Bruce +3122794 KI6GRO Frederick +3122795 KN4QNY Benjamin +3122796 K8BBC Douglas +3122797 KE0REV Martin +3122798 W6UK Roger +3122799 KF6IOS Wai +3122800 KF6ILE Ken +3122801 K9AAO Richard +3122802 KE7KD Ken +3122803 KG7OOW Bryan +3122804 KC1KOC Jason +3122805 KD0MXN Chance +3122806 KI5BTB Lester +3122807 AI8W Christopher +3122808 W4IOD Odis +3122809 KM6RSO Stephan +3122810 KE6QCV Terryl +3122811 KE4YNN Brian +3122812 KB8EIW Robert +3122813 KG5REG Malcolm +3122814 AD5IA James +3122815 K7III Jason +3122816 W9ABA Edward +3122817 AC4BV Nathaniel +3122818 KT4SP Glenn +3122819 W4IOD Odis +3122820 AD5IA James +3122821 KD8EZH Richard +3122822 K8BAT John +3122823 W4WWS STEVE +3122824 KW4JN Michael +3122825 KI7ZFX Brendon +3122826 N8CEL Curtis +3122827 KD0ZKO Thomas +3122828 KI5BPZ Steven +3122829 KN4NWM Eric +3122830 K8RLB Ross +3122831 KD9LFP John +3122832 KJ6EWR Blake +3122833 N4DR Marc +3122834 WC7W Bruce +3122835 W5TNC Thomas +3122836 WW9H James +3122837 NX7CQ Joey +3122838 NQ1W Brandon +3122839 W1XAW Edward +3122840 N0GEC George +3122841 KG4SAQ Bill +3122842 AC0QU William +3122843 KE4GJG Richard +3122844 NA1Q Matt +3122845 KC3KSW Rebecca +3122846 KC3MLL Frederick +3122847 K0AVL Wyatt +3122848 N0WFC William +3122849 K5JNM Jeffrey +3122850 KF6POE Christian +3122851 WA5AIR Charles +3122852 KE4WYS Paul +3122853 N4ERT Jerry +3122854 KC1JZG Christopher +3122855 W6MGM Marco +3122856 KC1IAS Cassandra +3122857 DB7MJ Peter +3122858 KN4TEK Ken +3122859 KB6CRE Steven +3122860 N1CIV WaveComm +3122861 KB6CRE Steven +3122862 KN4TEK Ken +3122863 KD8ANJ Robert +3122864 N3EPY Richard +3122865 KE0TNX Thomas +3122866 W6IM San +3122867 W6HAK Joshua +3122868 WD9HPI Matt +3122869 N8MEX Dean +3122870 K0ON Jake +3122871 N2ZWO Donald +3122872 KF6POE Christian +3122873 W1FVB Frister +3122874 KD0ZKO Thomas +3122875 WD9HPI Matt +3122876 KM4VAZ Ricky +3122877 KC8PFZ Daniel +3122878 N0QXM Nick +3122879 KJ6IIT Andrew +3122880 KJ7AVI Henry +3122881 WQ5C Michael +3122882 K2KJS Kevin +3122883 K2KJS Kevin +3122884 W4MDV Michael +3122885 KE8AXQ Eddy +3122886 N4ERT Jerry +3122887 W6MGM Marco +3122888 KC0YT Charlotte +3122889 KB6BF Neil +3122890 WG2H Stephen +3122891 WS9K Derek +3122892 W7ABF Dwayne +3122893 KN4QHV Justin +3122894 KD7FIZ Robert +3122895 WF5TAB Twyla +3122896 KD7DGK Mike +3122897 W7MJK Michael +3122898 AC0SX Ryan +3122899 KJ6GLR Chris +3122900 KB5TNS JOHN +3122901 W3HZU Keystone +3122902 KE0JRT James +3122903 KN4QHV Justin +3122904 W8DSI Dale +3122905 KI4YZD James +3122906 K1JGA Joseph +3122907 KD5FPC Cody +3122908 N0TLW Tom +3122909 KA2HRW Glenn +3122910 KD0TVS Alfonso +3122911 KD9HSR Lucy +3122912 WD6FIE Richard +3122913 KB9PTI AIRA +3122914 KB3ZTD Edward +3122915 KE0JRT James +3122916 KB2VDV Laura +3122917 KK6OCW Robert +3122918 W0AGU Eugene +3122919 N4CFM Terry +3122920 N2NLQ Michael +3122921 W8DMI Daniel +3122922 KB8ZTV James +3122923 KK4ZFW Daryl +3122924 W3RIT Roger +3122925 W2RKD Robert +3122926 WE4MJ Michael +3122927 WB3ISA Harry +3122928 WZ3RO Rick +3122929 K0SAM Steven +3122930 KB2RTR Christopher +3122931 KC1FYA Stanley +3122932 KF7NFB Gary +3122934 KI5CHE Derrick +3122935 KR8E Matthew +3122936 K8AQM Theodore +3122937 N3DOU Bill +3122938 KC3MLA Mark +3122939 K9WRH Fred +3122940 KC3MLA Mark +3122941 KC0FUE Evert +3122942 KD0FRL Casey +3122943 KN4NOE Christopher +3122944 KJ7CJO David +3122945 KI7TSV William +3122946 KQ5S Thomas +3122947 WS6V Varon +3122948 W6ICU Ted +3122949 KE7DAM Colin +3122950 W7EYN George +3122951 KC8LDO Leland +3122952 N0SMX Dennis +3122953 KM4ZNW Arthur +3122954 KD2IVF Nikolaos +3122955 K2CK Scott +3122956 K8AKC Andrew +3122957 WC1EOC John +3122958 KB0NWT David +3122959 KQ6M Michael +3122960 KD8YFU Kevin +3122961 N1NSS Nicholas +3122962 WX1NH Green +3122963 KS5D Bob +3122964 KN4QLH Rizal +3122965 N2GWK George +3122966 KC5YLE Michael +3122967 KN4IXN Jeremy +3122968 K5CSA Edward +3122969 N0SMX Dennis +3122970 W6OLL Kenneth +3122971 KE7GGD Henry +3122972 WA0MFZ Harry +3122973 K3JAA John +3122974 N7ANP Aakin +3122975 KB0MON Robert +3122976 KE7GGD Henry +3122977 K7TUL Joe +3122978 W1MKW GRETCHEN +3122979 KC1KPF Robert +3122980 KG5QAP Frank +3122981 KF5NUU Thomas +3122982 KM6WVH David +3122983 KB9LJA Lambert +3122984 W9USS Robert +3122985 N8MGT Donald +3122986 KM4HDM Darrel +3122987 KE0TIN William +3122988 W0REM Rodney +3122989 KG7WCO Matthew +3122990 KM4MVV Javier +3122991 VE3BSV Vik +3122992 N2VLF Frank +3122993 K8CRC Craig +3122994 K3LPV John +3122995 WA3WIJ James +3122996 KB9EWG David +3122997 K3LPV John +3122998 KB9LJA Lambert +3122999 K4DBE Dennis +3123000 N7ADV George 3123001 N1XBM Robert 3123002 WJ1D James 3123003 WJ1D James -3123004 K1DQ Danny +3123004 K1DQ Dan 3123005 AB1TZ Michael -3123006 W9LQ Frank +3123006 K6OE Frank 3123007 N1DOT Kenneth 3123008 KG6UFN Kim 3123009 W1IMD Paul @@ -76703,7 +92482,7 @@ 3123017 KB1PRG Timothy 3123018 N1XBM Robert 3123019 KC1AOT Ronello -3123020 K1DQ Danny +3123020 K1DQ Dan 3123021 K2XM Peter 3123022 N1IPA James 3123023 N1TKF Matt @@ -76834,7 +92613,7 @@ 3123150 W1LTX Robert 3123151 W1LTX Robert 3123152 W1LWT Lee -3123153 W1WDB Bill +3123153 WA1YKB Bill 3123154 KB1MEE Mark 3123155 KY1E Thomas 3123156 KB1YBT Stephen @@ -76857,7 +92636,6 @@ 3123173 WA4SWM John 3123174 K1DEL Dana 3123175 KB1ZCF Brian -3123176 WA1AKV Donald 3123177 KC1AIH Miriam 3123178 KB1GBD Gary 3123179 KB1KDX Carol @@ -76933,7 +92711,6 @@ 3123250 W1GGG George 3123251 W1OWL David 3123252 KB1EWV Clayton -3123253 WA1LTD Jordan 3123254 N1BX Peter 3123255 KB1EZZ Maury 3123256 KB1EZZ Maury @@ -76969,10 +92746,9 @@ 3123286 W1XXV Joseph 3123287 W1LUC Luc 3123288 N1TZR Donald -3123289 KA1VSC Matthew +3123289 KA1VSC Matt 3123290 KC1DEB Marc 3123291 KA1KWH Mark -3123292 KC1FXD Irving 3123293 KC1GOR Stephen 3123294 KB1KNC Butch 3123295 W1AUX Mark @@ -76981,7 +92757,7 @@ 3123298 KC1GMM Donald 3123299 WA2UMO Arthur 3123300 KC1AXY Luke -3123301 AB1TI Kim +3123301 W1UA Nathanial 3123302 KB1SJA Scott 3123303 W1KX William 3123304 KC1FZB Erik @@ -77033,7 +92809,6 @@ 3123351 N1DAV David 3123352 W1NOV Thomas 3123353 KA1SG Norman -3123354 KC1CWE James 3123355 KD2CEG Benjamin 3123356 W1ERP Earl 3123357 N1ATO James @@ -77044,7 +92819,6 @@ 3123363 KB1SPS Peter 3123364 KB1QHR Paul 3123365 KC1GQA David -3123366 WA1LTD Jordan 3123367 KC1GQA David 3123369 N1RTX Dana 3123370 W3VNE Scott @@ -77122,6 +92896,551 @@ 3123446 KC1JMH Bradley 3123447 N1KNH Jeffrey 3123448 KB1GWT Jesse +3123450 K5WTF Kevin +3123451 KK4VEF Michelle +3123452 KC1KKB Jonathan +3123453 KC1KKB Jonathan +3123454 KQ5S Thomas +3123455 KF4FYX Chris +3123456 K5EN Richard +3123457 KD9GVA Jack +3123458 KE8JMG Aaron +3123459 KS4KLM Kevin +3123460 N3OUP +3123461 K4LSK Doug +3123462 KC7MCC Larry +3123463 AC4DC Les +3123464 KM4TAU Roger +3123465 KC1DFB Sidney +3123466 KE8CLD Rodger +3123467 KN4QZV Gary +3123468 N3JCN Judith +3123469 N1EFR Albert +3123470 K0WTV John +3123471 KI4UZI Richard +3123472 N2NRV Fred +3123473 KB0MON Robert +3123474 KK4NTI Thomas +3123475 WB6KTN Michael +3123476 W3SF Thomas +3123477 W3RK Kib +3123478 N3MAZ Tammy +3123479 KF4LWX William +3123480 KK4HEQ Robert +3123481 KN4QXY Kareem +3123482 W0PAL Paul +3123483 WA9ZEO Michael +3123484 KE4AM Stephen +3123485 KE6UCL Darnell +3123486 K2BUI Eric +3123487 K7CSA Antoine +3123488 W5YAK Mark +3123489 KE8BFE Jay +3123490 KC8BPE Kenneth +3123491 AA0ZP Frank +3123492 W0TSN Timothy +3123493 KE8LAH JEFFREY +3123494 KE6MIT John +3123495 WY7SP Stephen +3123496 N2BRG Gary +3123497 KD6EKQ John +3123498 KM6IXT Douglas +3123499 KC3MIY Mark +3123500 KM6PCX Michael +3123501 KC3MIY Mark +3123502 KJ7CDD Frank +3123503 KE5YSE John +3123504 N0JVI Neil +3123505 KJ7CDD Frank +3123506 KG4LIO Matthew +3123507 K0LGB Lee +3123508 KD0UPC Matthew +3123509 KD0GMY joshua +3123510 W3FLP Leslie +3123511 KD8HMJ john +3123512 K0LGB Lee +3123514 KN4PCQ Andrew +3123515 KC1JZF Matthew +3123516 K4KAM Bradley +3123517 AE0JM John +3123518 KC9SON Bill +3123519 K5LGF Larry +3123520 AG6WH John +3123521 W0QPR Deb +3123522 KK4YAQ Michael +3123523 K6FMJ Jason +3123524 WB7G David +3123525 KN4QOU Joseph +3123526 KJ5SZ Hugo +3123527 KC9JAK Jon +3123528 KI5CHO Teddy +3123529 K0DZX David +3123530 KE8IJZ Karl +3123531 KF7NDO Arlene +3123532 KF7NDO Arlene +3123533 KF5CNM Victor +3123534 N9IWN Craig +3123535 KD8UCF David +3123536 KJ5VX Phillip +3123537 W5BYE Brian +3123538 W9FRZ John +3123539 K6SH Paul +3123540 KF5CNM Victor +3123541 KM4MVV Javier +3123542 KG5QAP Frank +3123543 KE8KTL Dave +3123544 KJ6PFW Patrick +3123545 AF6AW Michael +3123546 K1BDX Craig +3123547 KM6MLO Barr +3123548 KC3HHV Michael +3123549 KN4PZE Louis +3123550 KB8TGK John +3123551 W4POX Portsmouth +3123552 KI5AVW William +3123553 KC1AJJ Timothy +3123554 KA5D Kyle +3123555 KC1KPC Machias +3123556 N9TC Marshall +3123557 WB8BCU Mark +3123558 N5MFA Daniel +3123559 WW4DBM David +3123560 W9TJM Travis +3123561 KB2VOG DAVID +3123562 AF5BC +3123563 W9TJM Travis +3123564 N4NCT Lewis +3123565 K6RND Randall +3123566 N2FNI Robert +3123567 N1JIO John +3123568 N3CAN Marc +3123569 KN4LRK David +3123570 KC5YTA Richard +3123571 KB9RRN Dennis +3123572 KI4IHC Daniel +3123573 KD9MCN Pablo +3123574 NB1N Sandor +3123575 KQ6VJ Florentino +3123576 KK4IMG Louis +3123577 AG4MS George +3123578 KJ7BQV Kelvin +3123579 K6CLS Cliff +3123580 KF7OHW Jeremy +3123581 K8ZAB Donald +3123582 KD0HXS Robert +3123583 KD2QYC John +3123584 KC9HFX Dale +3123585 KE8LAA Aaron +3123586 KD0MQJ Moriah +3123587 KN4JCF Brian +3123588 K5WXR Lee +3123589 K5MRE Michael +3123590 W0XZ Chris +3123591 WE1COM Emmett +3123592 KC0YWH Rochelle +3123593 N5MFA Daniel +3123594 K2QV Patrick +3123595 KD4PCA Tony +3123596 KC1BWV Patrick +3123597 N9OXJ +3123598 KA5AMU Robert +3123599 N8SCA ARES +3123600 N5CP Chuck +3123601 N2BSN Gregory +3123602 KD5RLU Weimei +3123603 N5OHM David +3123604 AG4PH Patrick +3123605 KI7SIT Dylan +3123606 KM6USG Gary +3123607 N9POL Piotr +3123608 KN4ORA Richard +3123609 AC6A Yuriy +3123610 K6BZZ Richard +3123611 KE5YYZ Oscar +3123612 KC1DAI Joe +3123613 KE6PLA Edgar +3123614 N9OXJ +3123615 KA1NIW Shelby +3123616 KE8EVA Peter +3123617 KF5DLG Dustin +3123618 KN4RBB Douglas +3123619 KM6USG Gary +3123620 DL7XP Patrick +3123621 K5YW Mark +3123622 KI5CNF Jose +3123623 NI3V Marc +3123624 KC8SQR David +3123625 KX4CM Ullrich +3123626 K0PB Robert +3123627 KA5D Kyle +3123628 KD8IE Kevin +3123629 KE6PLA Edgar +3123630 AA7K Sonny +3123631 K6RDS Richard +3123632 NY5A Dave +3123633 KX4GG Matthew +3123634 WD2E William +3123635 KB1SBT Timothy +3123636 KG7ZQE Micheal +3123637 WB5NHP Randy +3123638 K6ADI Bernabe +3123639 KB7QXQ Cris +3123640 KN4QAL George +3123641 W4SRO Brian +3123642 KA3EHO Joseph +3123643 N4ILI Armando +3123644 KN4RCP Adrian +3123645 KD2QVU Frank +3123646 KB3AYY Edward +3123647 KD9MDL Bill +3123648 W7CV Jeffrey +3123649 KB7AC Brian +3123650 KB3ASZ Kelly +3123651 KB3ASZ Kelly +3123652 KF4BKD Michael +3123653 KD8HMJ john +3123654 KD6QFO Kevin +3123655 K9RWW Ross +3123656 KM6YMM Bryson +3123657 N1MCG McGregor +3123658 KD8BXY Paul +3123659 KJ7COZ Prince +3123660 KE0TVX Adam +3123661 K1JRO John +3123662 N1MCG McGregor +3123663 KE0SRJ Jeffrey +3123664 KB3UFB Thomas +3123665 W7WRO Philip +3123666 KE8LAY Arthur +3123667 KK6PTD Richard +3123668 KG5YPN Cody +3123669 W6UTC George +3123670 KN4LGZ James +3123671 N8RTN Michael +3123672 N8RTN Michael +3123673 W6UTC George +3123674 KJ7COZ Prince +3123675 KD9MDC Steve +3123676 KD9MDC Steve +3123677 KN4PTZ Daniel +3123678 N9PTX Phillip +3123679 KM4KYK Jonathan +3123680 KA1NIW Shelby +3123681 K2KXK Ken +3123682 N4SFU Ronald +3123683 KD2BNU Thomas +3123684 N0TGR Virgil +3123685 KD0KRY Jerold +3123686 KC9NIN John +3123687 AA7JB Vincent +3123688 KB2QNF Florence +3123689 KA1YNA George +3123690 K2EU David +3123691 W4SPT Gerard +3123692 N5LEV Otis +3123693 K4GQS Wayne +3123694 KM4WLD William +3123695 KC4NZH Tony +3123696 KB5ZEA Danny +3123697 AE0N David +3123698 KM6WHG +3123699 KD8GB Stephen +3123700 KM6TIM Brendan +3123701 WD2E William +3123702 W6UBX Robert +3123703 KJ4MZ Donald +3123704 KM6WHG +3123705 W6UBX Robert +3123706 K9KQX MIKE +3123707 KD7BNP Ralph +3123708 AI4KQ Sofia +3123709 KF4DGS Stan +3123710 KC0SNQ Mark +3123711 KI7VDO Brian +3123712 N2YWL Angel +3123713 KE4LSU Jeremiah +3123714 N0XLW David +3123715 KJ7CCR Nicholas +3123716 KJ7AZJ Mateo +3123717 KE4VEX +3123718 KC9ZJB Jeff +3123719 WB9EZB Michael +3123720 KI7VDO Brian +3123721 K0MPT Larry +3123722 WH6FYX Tyson +3123723 KN4IEF Henry +3123724 W6AH Christopher +3123725 KG4PXG Worth +3123726 N8WFT Teresa +3123727 KC1JYD Eric +3123728 W6AH Christopher +3123729 K3FAZ Steven +3123730 N4ZKR Dennis +3123731 W6NLP Nicholas +3123732 KF7FAC Mary +3123733 KM6YAI Anthony +3123734 KD2OSI Chris +3123735 KG6LAF Woody +3123736 KG7WPQ Steve +3123737 K4LMY Henry +3123738 KK4EGZ Wanda +3123739 KD1OW David +3123740 KG5YPR Nathan +3123741 KK6LTQ Nicholas +3123742 K6UFA Sergii +3123743 N9BT William +3123744 KB0VTK Paul +3123745 KJ6IJT Guillermo +3123746 KE5WFD Harvey +3123747 KD2NJC Donald +3123748 KC0RZP Bradley +3123749 KD9MDK Thomas +3123750 KB3TJP Kurt +3123752 WA4TJS Trevor +3123753 KC4BOO Joseph +3123754 KD9MDO Michael +3123755 KN4SFM Howard +3123756 KI4WKJ Franklin +3123757 N9ICV +3123758 KA4IAO Charles +3123759 KA0DDW Steven +3123760 K0CAT Richard +3123761 KJ4UC Donald +3123762 KC3MNO Eric +3123763 KN4CFD Michael +3123764 N2VSB Todd +3123765 KJ7BWM Jeffrey +3123766 KF5RSW Jack +3123767 K6GWP Gary +3123768 KM4JER Christopher +3123770 AA1W David +3123771 KI6OXE Rich +3123772 N8VHF +3123773 W1ER Thomas +3123774 K8KCH Kenneth +3123775 KM6UPQ Bruce +3123776 AI4KQ Sofia +3123777 WA3YVR David +3123778 AI8IA David +3123779 AE5MA Mark +3123780 KK6MBW Wallace +3123781 KF7DUR Kenneth +3123782 KD0PMW George +3123783 WE4EE Maury +3123784 KC2FSP Alberto +3123785 WB4MBU John +3123786 KA6MZE Phillip +3123787 N4FJT Richard +3123788 KI4KQU David +3123789 AC5H Shelby +3123790 K5CHR Arturo +3123791 K5OOZ Dickie +3123792 W3COD Thomas +3123793 N1DOU David +3123794 KD0VOU Jesse +3123795 KJ6AEU Randolph +3123796 KI4ABS Eric +3123797 KG5VRS Nathaniel +3123798 KC1JYS Dan +3123800 KD0LRD Constantin +3123801 N4LKZ Patrick +3123802 K5PGR David +3123803 K5TKR John +3123804 AG4ZR David +3123805 KF5TFP Walter +3123806 N2NRJ Gary +3123807 W1NAZ Jeremy +3123808 KI7OGE Bradley +3123809 N2VSP Brandon +3123810 KF5BMN Eric +3123811 N1AVP Morris +3123812 KM6WWC Alexander +3123813 W2ASC Anthony +3123814 KE5WXL Clifford +3123815 KB0UXV Nathan +3123816 KC3MOV Ioannis +3123817 KN4RCO Mark +3123818 KD9LOX Johnathon +3123819 AF4AI James +3123820 WA7ER Carlos +3123821 KM6WWC Alexander +3123822 N7KWD Dale +3123823 KN1W Luis +3123824 WA4GIM Arthur +3123825 KC3MOV Ioannis +3123826 KD9JPG Eduardo +3123827 W1BKR William +3123828 N0OWZ Mark +3123829 KC3BRE Brian +3123830 KS0D Carl +3123831 KN4GFS Bruce +3123832 W4KVB John +3123833 N2NRJ Gary +3123834 KM4WXX Sanford +3123835 KI7MOP Brian +3123836 W4RLC Rhonda +3123837 WE6A Robert +3123838 N2BKT Brian +3123839 KE8DXG Steven +3123840 KD8VSQ Jeremy +3123841 AE4TI Christopher +3123842 KB1MXS Richard +3123843 KM6YOF Matthew +3123844 W3BAY Roy +3123845 K6EE Tobias +3123846 W3BAY Roy +3123847 NZ6Q John +3123848 W7MN William +3123849 KE5WXL Clifford +3123850 W6RNK Mcdonald +3123851 KK4LBZ Greg +3123852 KM6FGR Patrick +3123853 KM6EVP Isaac +3123854 KD2PBB Travis +3123855 KB5RLJ Bobby +3123856 N8DKB Keith +3123857 K0JP Jack +3123858 KD0HLV Michael +3123859 W7SOL Solomon +3123860 NM2V Lesly +3123861 KF7YOM Shawn +3123862 KI4WLY John +3123863 N4FRG Rebecca +3123864 KN4REU Russell +3123865 KC9UMR Kenneth +3123867 N9JJ Ronald +3123868 KD2MVP Peter +3123869 KN4NAH Elizabeth +3123870 KG6TN Kong +3123872 K6GWP Gary +3123873 WB6JSO Larry +3123874 KW4YT Sam +3123875 W7JNT James +3123876 N7LMR Justin +3123877 KE5MMA Tim +3123878 KM4VFG Ciro +3123879 KG6TN Kong +3123880 AE5E Ronald +3123881 W6RMT Loyal +3123882 KB3GWA Michael +3123883 KB5RSM Robert +3123884 KF5VZG Steven +3123885 AJ4BC mike +3123886 KB5SPZ Eric +3123887 KB5SPZ Eric +3123888 N5VMO Patrick +3123889 K1EC Conrad +3123890 W1ROM Dana +3123891 W4HCR Randall +3123892 KE4HBA John +3123893 KN4RCQ Christopher +3123894 KE7ZCE Larry +3123895 N1BL William +3123896 AF6IF Dmitri +3123897 N3EDO William +3123898 KF5UEL Stephanie +3123899 KB5WCK Jeff +3123900 KE8KHL Quentin +3123901 KE0KXL Thomas +3123902 KE8KHL Quentin +3123903 W1DMW David +3123904 N7MNY Fred +3123905 AF5BC +3123906 AH2AP Sean +3123907 K9KIL Yarek +3123908 NE5B Ben +3123909 N4BSA Christopher +3123910 KG4RAQ Kim +3123911 N4BSA Christopher +3123912 WB9QPM James +3123913 KN6ANG Jack +3123914 K7DFL K +3123915 WA7ZZU Steven +3123916 KE0PUC Scott +3123917 N5JMD Juan +3123918 KJ7CPV Kent +3123919 KJ7CPW Rebecca +3123920 AC0EC Muscatine +3123921 KC1KGW Brendan +3123922 KC6CTT Charles +3123923 KJ7BCU Ethan +3123924 KG2MS Lall +3123925 WB8YHD Francis +3123926 KD8GB Stephen +3123927 KE7ZCE Larry +3123928 K4FLY Jason +3123929 AE0EP Ryan +3123930 KB1MTH David +3123931 KD7SRQ Michael +3123932 N8VHM Nicholas +3123933 KK1G Caleb +3123934 AA2PI Herbert +3123935 KJ7CSI Ryan +3123936 N3XHS Scott +3123937 KE0THC Christopher +3123938 W7MYK Michael +3123939 K2SDJ Scott +3123940 WB4BAG Frederick +3123941 WD4OIM Page +3123942 KD8DKT Mike +3123943 KK6JFS +3123944 KM6YPT Ethan +3123945 WH6FRA Hilario +3123946 WD4OJU Clay +3123947 NX2O Richard +3123948 KD7KOA Ryan +3123949 W8WQU Gerald +3123950 KE0TOV Troy +3123951 KK5NF Glenn +3123952 KE8LCZ David +3123953 K2ADA Andrew +3123954 K0GLP Gary +3123955 KC9SON Bill +3123956 K2REB Robert +3123957 N1UEG Carlos +3123958 KF0UT +3123959 KC1FLY Peter +3123960 KG9NG Samuel +3123961 WW2RL Ronald +3123962 KD2QQK Scott +3123963 KI6KIB Wayland +3123964 KD9MER Zachary +3123965 KG4EWE Michael +3123966 KI6KIB Wayland +3123967 K5HDN Usako +3123968 KE4ENI John +3123969 K0TTM David +3123970 KC3MQJ antonino +3123971 W6TES Thomas +3123972 N3ZCJ Kenneth +3123973 K5SHY Kinley +3123974 WA7DY David +3123975 KD2QFA Christopher +3123976 KI7RYI Stephen +3123977 K8DIU Dennis +3123978 KC1KHM Ed +3123979 KC1KNJ Kim +3123980 KI7KUR Kevin +3123981 N0ELF Scott +3123982 KE0TXL Paul +3123983 W7DGL Douglas +3123984 KC3MQJ antonino +3123985 KD2RCQ Daniel +3123986 KC3LXM Patrick +3123987 KE4GIV James +3123988 KM4FVI Frank +3123989 KF5INT Mikel +3123990 N0VEP Michael +3123991 KJ4CUY Ade +3123992 WA7DY David +3123993 K5BEN +3123994 KN4RGH john +3123995 AA4UC Glenn +3123996 KD9MBJ Casey +3123997 N9OGC Michael +3123998 KM6VSV Erixson +3123999 N8OTJ Henry +3124000 K0OM Don 3124001 N3LHD Tom 3124002 N3LHD Tom 3124003 N3LHD Tom @@ -77273,12 +93592,12 @@ 3124151 K3ORB Robert 3124152 N3FHW Joe 3124153 KE6PJF Brian -3124154 K3RIC Walter +3124154 K3RIC Rick 3124155 KB3NUF Brian 3124156 N3JLT Jason 3124157 N3KIP Alun 3124158 N3TUK Louis -3124159 N3NSP John +3124159 N3TOW John 3124160 N3KLZ John 3124161 N3YUG Jason 3124162 K3SKE Daniel @@ -77323,7 +93642,7 @@ 3124201 KC2GUA Robert 3124202 AB3RW Brian 3124203 N3NRL Nathan -3124204 KB3SZZ Edward +3124204 N3BIO Edward 3124205 KG3EK Douglas 3124206 KC3NG Renee 3124207 KG3EK Douglas @@ -77334,7 +93653,7 @@ 3124212 K3UOD Jerry 3124213 KC3FDX Mark 3124214 AA3BR Peter -3124216 KP4IP +3124216 KP4IP Frank 3124217 K0RYX Oryx 3124218 KB3PLX Kevin 3124219 WD3C Richard @@ -77346,7 +93665,7 @@ 3124225 W3ITM Donald 3124226 KC3FMH Christopher 3124227 N2MCS Christopher -3124228 N3DOU Charles +3124228 N3DOU Bill 3124229 K3IO Thomas 3124230 N3EJT David 3124231 KB3EAS Joseph @@ -77388,7 +93707,7 @@ 3124267 KB3QWB John 3124268 W3SJM Scott 3124269 KB3CMO Gerald -3124270 KO3F Charles +3124270 KO3F Gary 3124271 WR2S Robert 3124272 N3RAA Ricardo 3124273 N3KV Willie @@ -77477,17 +93796,17 @@ 3124357 KB3ZZJ Neal 3124358 N3GL Gary 3124359 KC3COD Bennett -3124360 KD4IZ John -3124361 KD4IZ John +3124360 KD4IZ Jack +3124361 KD4IZ Jack 3124362 N3UHD Robert 3124363 AA3WS Charles 3124364 KC3DSO Steven -3124365 KB3YQK Timothy +3124365 KB3YQK Tim 3124366 N3RTX Josef 3124367 KB3BXT Kenneth 3124368 WB3KAS James 3124369 KA3AHI Wanda -3124370 KB3JQQ Jay +3124370 KB3JQQ Scott 3124372 WA3YTK Richard 3124373 KC3IYN Michelle 3124374 W3CAT Ken @@ -77561,7 +93880,7 @@ 3124448 N3TJO Thomas 3124449 K3MVP Shaun 3124450 WB3BLL Randall -3124451 N3VNG Timothy +3124451 K3HP Timothy 3124452 W3YR Theodore 3124453 KJ3MEE James 3124455 N4EOC Mark @@ -77604,7 +93923,7 @@ 3124499 N3VYW Mary 3124500 N3ROQ David 3124501 N4NBC Gary -3124502 KC3KJI James +3124502 W3BBE James 3124503 W4DRQ Robert 3124504 AB3CN Kenneth 3124505 KC3IFO Joseph @@ -77629,7 +93948,7 @@ 3124527 KC0SXW Wade 3124528 KC3GQO Charles 3124529 N2OMC Robert -3124530 WX3M Terry +3124530 K3YDA Terry 3124531 W3GAC Robert 3124532 N3CKX Reginald 3124533 K3ICI Kristopher @@ -77676,8 +93995,8 @@ 3124576 KB3MJN Adam 3124577 N3KC Jesse 3124578 KC3LEJ Willie -3124579 W3HDB Daniel -3124580 W3HDB Daniel +3124579 W3HDB DAN +3124580 W3HDB DAN 3124581 K3WDT William 3124582 KB3MJN Adam 3124583 W8BOZ Russell @@ -77694,6 +94013,405 @@ 3124594 KC3JBN Michael 3124595 KE3BAT Jayson 3124596 WW3N Daniel +3124599 KC9YLB Chris +3124600 K6ENN Kenn +3124601 WC2L William +3124602 WC2L William +3124603 KR5EBS David +3124604 KI5AOT Gary +3124605 KE8KZR Curtis +3124606 KM6RW David +3124607 KI5CQW Marvin +3124608 K4HRL Russ +3124609 KK6CJA Walter +3124610 N3NAH Nicholas +3124611 N7SDT Schuyler +3124612 KB1LXX Derek +3124613 KC1GOI John +3124614 W4ELI Stephen +3124615 K7PPW Gordon +3124616 W2GSL Dean +3124617 KR5EBS David +3124618 AA6RH Randy +3124619 KI5CNC Brandon +3124620 N2DRM Danny +3124621 KM6YIU Hector +3124622 KE7KUS Kurt +3124623 KB3VYE John +3124624 KC3JTB Mike +3124625 KE0TXI Donald +3124626 KC3ATQ Chris +3124627 KB3KQN Justin +3124628 KC1RHM Richard +3124629 KC1RHM Richard +3124630 N3JJB Terry +3124631 KC0MYX Bryan +3124632 KD7VGN David +3124633 KC0EVP Mike +3124634 K4PY Juan +3124635 KC1JTS William +3124636 KC3JTB Mike +3124637 KI5AOT Gary +3124638 KC1SGT Joseph +3124639 KM4DAH Patrick +3124640 WA6PKX Dennis +3124641 W8BLA Verne +3124642 KE0TYG Mike +3124643 KN4PNZ Jeffrey +3124644 KM6YQI Christopher +3124645 WA4MLF John +3124646 KB8EVP Betty +3124647 N7WKR Michael +3124648 K4PTF Malvin +3124649 KG5YAT Robert +3124650 KH0ZX Patrick +3124651 KM4SXP Samantha +3124652 K3LAC Laci +3124653 KB8BIP James +3124654 KD2JHZ D +3124655 WA4MLF John +3124656 K2TKX Art +3124657 KC7KKW Robert +3124658 N3DGJ Daryl +3124659 AD4YQ Frank +3124660 WD4IZL Michael +3124661 KD9JSK Michael +3124662 N4DAC David +3124663 KD2KNQ Daniel +3124664 KF5OYY Brian +3124665 KN4PNZ Jeffrey +3124666 K4YAZ THOMAS +3124667 W4JHO James +3124668 KI7TEY Travis +3124669 KM6YUS Nathan +3124670 KI4SWD Jackie +3124671 KD6HEQ Kathleen +3124672 N0ROY Roy +3124673 WB5KWK Michael +3124675 K8UYC John +3124676 KJ7AHE Sean +3124677 K5VU Jeff +3124678 KC0HQQ Leroy +3124679 KC1BUF James +3124680 N1MNB Brad +3124681 KN4QBY Nicholas +3124682 KB7UZZ Troy +3124683 K7AAB Collin +3124684 N9RRF Kenneth +3124685 N1RNR Jeff +3124686 KC3LWO Gordon +3124687 W3HRS John +3124688 KC3LWO Gordon +3124689 KE8VS Vern +3124690 KI7ZOI Ralph +3124691 KJ6WQF Martin +3124692 KH2SR James +3124693 KN4QKX Seth +3124694 KF4UCF Wayne +3124695 KG5LBE Jeffrey +3124696 KB3NXT Joseph +3124697 KC5KOH T +3124698 KD0QHR Paul +3124699 KN4FXW Rick +3124700 KU4WS Charles +3124701 N1VNW Nancy +3124702 N0OK Curt +3124703 WW5A Ken +3124704 N6XON Peter +3124705 N0JBB Jeffrey +3124706 W1XVT Daniel +3124707 KE0LRA Tracy +3124708 KG5EUM James +3124709 N2SLX Lawrence +3124710 KE0TYM Troy +3124711 N7GWK Bill +3124712 W5JDM Joseph +3124713 K1HO Ernest +3124714 KD4TGC Mike +3124715 KN4RDL Erin +3124716 K4BEZ Ben +3124717 W7JSG Jay +3124718 N4SEM Steve +3124719 KW5TNT Paul +3124720 AF7IW John +3124721 KD5RLU Weimei +3124722 KC3APB Jonathan +3124723 KD9LSG Michael +3124724 W1MGX William +3124725 KG5YWD John +3124726 N7EWB Eric +3124727 WA4ZGI Michael +3124728 KF5FHO Dennis +3124729 KJ7AXV Jason +3124730 W2PIX Anthony +3124731 KE8DEO Darrell +3124732 KD9LSX Dennis +3124733 KE0TBG David +3124734 K5DWV Glenn +3124735 KD2HWD Eric +3124736 KE0DSE Cameron +3124737 KC2NVG William +3124738 N1CJS Christopher +3124739 AD6KI David +3124740 N3JDP Joseph +3124741 K4NR Mark +3124742 WO7C Larry +3124743 W7PKG Don +3124744 WI9EMT Daniel +3124745 N9NK Guy +3124746 KE8DON Max +3124747 AG7GM Dan +3124748 K2DAN Daniel +3124749 KD9EZG +3124750 KD2HPF Mario +3124751 KB1TZD Jordan +3124752 KC7JJ Larry +3124753 N5TFB Cynthia +3124754 KD8UDS Janice +3124755 KN4MDE Thomas +3124756 KB5IBY Clarence +3124757 KE7BMG David +3124758 KG4BBK Bradley +3124759 N9PMW Charles +3124760 KC9OSX Don +3124761 WA8YYE Dan +3124762 N0TU Michael +3124763 KC4CID Robert +3124764 KD5DLH Donald +3124765 KG5STK Christopher +3124766 KG7VUK Eugene +3124767 K0FW Jeff +3124768 KB1TZD Jordan +3124769 KE7KUS Kurt +3124770 KK6SVF Matthew +3124771 K2AXP Rich +3124772 K2CJP Todd +3124773 N8MNI Mark +3124774 KG7ZUM Nathan +3124775 KC2NHF Thomas +3124776 KG7RDR Bret +3124777 K4JAY Hubbard +3124778 N5VHR Thomas +3124779 K0IBM Steve +3124780 AC8ZF Maynard +3124781 KD9DKR Gregg +3124782 N0WAW Mark +3124783 KN4LBR Andrew +3124784 KD4CAM Cameron +3124785 W3SEN David +3124786 KM6KIZ Timothy +3124787 KI7ZVQ Josh +3124788 KI7ULN Robert +3124789 KD9MEE Paul +3124790 K2CJP Todd +3124791 WA3X Paul +3124792 KI7UIN Bryce +3124793 KG5OTI Jordan +3124794 KK4YAP Kenneth +3124795 KK4GMZ Erica +3124796 N8XE Jason +3124797 KD4MPN Chris +3124798 WA5TXI Thomas +3124799 W6AWO Richard +3124800 N8LJF Donald +3124801 KK4FZM Christopher +3124802 KC4CID Robert +3124803 KD8DAX Zach +3124804 KC0VOP Dennis +3124805 KM6FPY Timothy +3124806 W0BR Bob +3124807 KG5WNN Frederick +3124808 WB7UMA Michael +3124809 N1MCG McGregor +3124810 N1MCG McGregor +3124811 KE8DEP Michael +3124812 KG5RGN Ryan +3124813 W0WH Michael +3124814 N3MBH Aaron +3124815 W1CWB Charles +3124816 WA2HBZ William +3124817 W4PDW Christopher +3124818 K7NWF Norman +3124819 KI6YBF David +3124820 KC8LSX David +3124821 KM6JEE Keith +3124822 KG5YN Joel +3124823 KD5BBA Donna +3124824 N0OI Scott +3124825 KM6JEE Keith +3124826 KD2RAQ Rodney +3124827 N2MHS Charles +3124828 KE8JGU Eugene +3124829 KE6GVK Mike +3124830 WG0OGL Sean +3124831 W6DSL David +3124832 KC8NYC Whitney +3124833 W8SMK Kenneth +3124834 KG6NYX Luzinito +3124835 NM0S David +3124836 KM6YKR Alicia +3124837 KD2OHM Neil +3124838 KD2EHW Brett +3124839 KI7UNK Ricky +3124840 KD2EHW Brett +3124841 KC0RJX Bryan +3124842 K6EEE James +3124843 KI7TOO Stacy +3124844 KC3MQU Roie +3124845 K8DTA Darren +3124846 KK4KKX Kevin +3124847 NO7Y Kevin +3124848 K2YHF Hans +3124849 K7OTA Radolfo +3124850 K7GDS Gary +3124851 AC8ZU Bob +3124852 KE8IQW James +3124853 KF7VIO Walter +3124854 KE5BYE Jerry +3124855 NO7Y Kevin +3124856 WD9GNG Kenneth +3124857 KD0YYY William +3124858 K1IWZ Jonathan +3124859 KC7PHD Kelly +3124860 N0QZV James +3124861 KN4QZM Eli +3124862 W1DJG David +3124863 KK5M Bill +3124864 KN4CNU Robert +3124865 AI9E John +3124866 AI9E John +3124867 AG5KI Morris +3124868 KE8KYS Steven +3124869 K4WDC Darrell +3124870 AA0IY Andrew +3124871 N4MUS Dennis +3124872 N5TXZ Mark +3124873 KG2JW Paul +3124874 KC7QDU Cipriano +3124875 N8MME David +3124876 KE8FWJ Victor +3124877 AJ4LH Clifton +3124878 KC4SFS Joseph +3124879 KN4AEU Matthew +3124880 N4CEI James +3124881 KM6OHW Elizabeth +3124882 W4INK William +3124883 KC2ZVT Peter +3124884 KE8LCB Charles +3124885 N8KRB harry +3124886 KE0KDA Michael +3124887 KC0TRW Trigg +3124888 KM6KNZ Richard +3124889 KD2RAK Rostyslav +3124890 N7NLY Donald +3124891 W4RON Ron +3124892 KD2PZY Jason +3124893 N7ISR T +3124894 AC9JA Dan +3124895 K9BRD Dan +3124896 WA4BJY Roger +3124897 AB5BC Phillip +3124898 KE8AKW Nicholas +3124899 N8XQM Douglas +3124900 KB8UWY Jennifer +3124901 WC6J Jordan +3124902 KB1ZPP Travis +3124903 KB2GMX David +3124904 AG7GM Dan +3124905 KH6CP Craig +3124906 KI4CUD James +3124907 KN4RGM Christopher +3124908 KI7FOO William +3124909 AC2SX Gary +3124910 WY7AA Robert +3124911 KC1CMN David +3124912 WB9NET Guy +3124913 KO9B Sotirios +3124914 AG5TQ Kyle +3124915 N1JDS Joseph +3124916 W3YND Daniel +3124917 W8HOV Robert +3124918 W6AB Satellite +3124919 N4GWM Martin +3124920 KD8PIL Kenneth +3124921 K9FEA Mary +3124922 KA4FYP Daniel +3124923 KA4FYO Lawrence +3124924 KE5YYZ Oscar +3124925 N7NLY Donald +3124927 KD8PIL Kenneth +3124928 N9SRW Leif +3124929 K6NG Stephanus +3124930 N6JTJ Jon +3124931 KA4GSR David +3124932 KE0PSA Chris +3124933 N2UD Thomas +3124934 KD2HVM Dustin +3124935 N4UI BRIAN +3124936 KD4GUB Paul +3124937 KG7FOA Gary +3124938 K7SPY Chris +3124939 K6AMG Alfredo +3124940 N4TEF James +3124941 KM6RJR Brian +3124942 N2UD Thomas +3124943 AA6RH Randy +3124944 KM6RJR Brian +3124945 KC5DHM William +3124946 KB9ZYX Fred +3124947 KM6PRD STEVEN +3124948 W5KY Jesse +3124949 KM6AHK Chris +3124950 KC8IQ Edward +3124951 N2KEY Scott +3124952 KE4BKI James +3124953 KC4RBA Bernard +3124954 KB8SVJ Robert +3124955 K3WS Thomas +3124956 KD8RBQ Lee +3124957 KE8ABO Daniel +3124958 K4WDY Terry +3124959 W6GQZ Gary +3124960 KE5YSE John +3124961 K4CGA Charles +3124962 W6BMS Brenden +3124963 N4TRQ Arthur +3124964 KB9ZYX Fred +3124965 KT1OK Donald +3124966 W6GQZ Gary +3124967 N5XXZ Cris +3124968 N4TDX Ricky +3124969 KC8IKW Joseph +3124970 KB5FJX Carl +3124971 N4ASH Peter +3124972 KZ8BAY Brett +3124973 N6ZKL Robert +3124974 KI7YOQ Zachary +3124975 N6DPG Danny +3124976 N3OUE John +3124977 KE6INZ Lincoln +3124978 KE0JYQ David +3124979 KE8HBF Jonathan +3124980 K5MHX Clarence +3124981 KM6MBB Shelton +3124982 KT4JIM James +3124983 KF7VMD Steve +3124984 K9FXB Bobbi +3124986 N2RI Paul +3124987 KN4QNU Eric +3124988 KM4WPN Ron +3124989 KF7BFM Christopher +3124990 KG5ZLO Robert +3124991 W6JIM James +3124992 KE5ATB Joseph +3124993 N7VIM David +3124994 KA3JSD Dave +3124995 KE4TEE David +3124996 KB9PFM Jeff +3124997 KE0SZC Kevin +3124998 KB3HQT Teresa +3124999 KD2RAK Rostyslav +3125000 KE8DEO Darrell 3125001 W1NAU Tim 3125002 KT1U Vivian 3125003 AE1C Jim @@ -77794,10 +94512,10 @@ 3125098 AB1AW Michael 3125099 N1DM Domenic 3125100 KB1CIF John -3125101 KC1CCR Jwahar +3125101 K1JBD Jwahar 3125102 N1XH Rob 3125103 KC2GSZ Chelsea -3125104 KB1NTJ Ted +3125104 W1OG Ted 3125105 K1BMC Brian 3125106 KB1FNB Anthony 3125107 K1TWF Mike @@ -77807,7 +94525,7 @@ 3125111 W1LSB George 3125112 W1NED Ned 3125113 KG1T Ronald -3125114 KB1NTJ Ted +3125114 W1OG Ted 3125115 KB1DFN Natick 3125116 W3BER Nicholas 3125117 N3EVL Peter @@ -77858,7 +94576,7 @@ 3125162 KC1BKW Mike 3125163 K1MGY Mark 3125164 KG1M Lawton -3125165 N8KKG Jim +3125165 WI8W Jim 3125166 W1YEE Bill 3125167 W1MLL Mike 3125168 KB1VXH George @@ -77959,7 +94677,7 @@ 3125263 N1NIG John 3125264 N1EZT Pierre 3125265 KC1BTV Silas -3125266 KC1HO K +3125266 KC1HO HO 3125267 N1ICN James 3125268 KC1FGH Megan 3125269 KC1FHZ James @@ -78021,7 +94739,7 @@ 3125326 N1EZT Pierre 3125327 W1TMD Tom 3125328 K5TEC Robert -3125329 KB1SSN Alexander +3125329 KB1SSN Alex 3125330 K1TY David 3125331 KB1ZAM Christopher 3125332 KB1PWR Alan @@ -78084,6 +94802,11 @@ 3125390 WA1EXA Mark 3125391 KB1MSR David 3125392 N1IRR Ronald +3125393 K1MGY Mark +3125394 K1MGY Mark +3125395 K1MGY Mark +3125396 K1MGY Mark +3125397 K1MGY Mark 3125398 KC1MA Nick 3125399 AA1NG Christopher 3125400 W1BX Michael @@ -78099,7 +94822,7 @@ 3125410 N1GSC David 3125411 KB1QHV Bill 3125412 N1YHS Ralph -3125413 W1EXP W1EXP-JOTA +3125413 W1EXP JOTA 3125414 W1KQ Jim 3125415 KB1IHU Chuck 3125416 K1RWS Dick @@ -78226,14 +94949,14 @@ 3125538 AB1IZ Quentin 3125539 W1VFB Gregory 3125540 W1MWC Michael -3125541 N1XRS Antone +3125541 N1XRS Tony 3125542 WA1TE Sean 3125543 KC1HLH Christian 3125544 KC1GES David 3125545 N1PDG Adam 3125546 KC1BOW Rich 3125547 N1JXZ Anthony -3125548 KD8MBA +3125548 AA9DX 3125549 N1YAN Donald 3125550 KC1ETB Craig 3125551 N1HTS James @@ -78285,14 +95008,14 @@ 3125602 K6IPO Peter 3125603 KE1L Shirley 3125604 KB1TWA Michael -3125605 KC1HTI Dan +3125605 K1DSL Dan 3125606 KB1VIU Robert 3125607 KA1RDF Donald 3125608 KB1UIF Andrew 3125610 KB1B James 3125611 W1PGS Peter 3125612 KB1WVK Joseph -3125613 AA1EA Lawrence +3125613 AA1EA LAWRENCE 3125614 KB1IAN John 3125615 KB1IAN John 3125616 WA1SMB Edward @@ -78302,7 +95025,7 @@ 3125620 N1AM John 3125621 KC1FFA Ken 3125622 KC1CPR Christopher -3125623 KB1H Richard +3125623 N1ATM Richard 3125624 KB1YAP Art 3125625 W1TTX John 3125626 K1OA Scott @@ -78336,7 +95059,7 @@ 3125654 KC1HLU Leonard 3125656 KC1ICH Niels 3125657 W1AFP Robert -3125658 KC1IEJ Mathew +3125658 KA1MAT Mathew 3125659 KG4SDY Nick 3125660 KG4SDY Nick 3125661 KS1Q John @@ -78350,10 +95073,10 @@ 3125672 KC1GSY Roberto 3125673 W1BEP Bradford 3125674 KA1EZH Harold -3125675 N1ZYY Matthew +3125675 N1ZYY Matt 3125676 KA1EWN John 3125677 W1KRX Gregory -3125678 KB1H Richard +3125678 N1ATM Richard 3125679 W1TTT David 3125680 KC1DAK Thomas 3125681 NS1N Karl @@ -78397,7 +95120,7 @@ 3125720 KC1ICH Niels 3125721 WB1EVP David 3125722 N1BKR Mikayla -3125723 KC9BLP Michelle +3125723 K9DOG Michelle 3125724 KB1TPG John 3125725 N1GXV David 3125726 WA2BUX Lawrence @@ -78442,7 +95165,7 @@ 3125769 W1BWA Bruce 3125770 N1HPZ Robert 3125771 N1CFB Chris -3125772 N1XUK Thomas +3125772 NN1J Thomas 3125773 N2JWW Mike 3125774 K1UI Robert 3125775 N1HPZ Robert @@ -78525,6 +95248,15 @@ 3125868 AB2TG Daniel 3125869 W1FPW Fred 3125870 KC1HOQ Timothy +3125871 K1MGY Mark +3125872 K1MGY Mark +3125873 K1MGY Mark +3125874 K1MGY Mark +3125875 K1MGY Mark +3125877 K1MGY Mark +3125878 K1MGY Mark +3125879 K1MGY Mark +3125880 K1MGY Mark 3125881 WA2KRS Glenn 3125882 KA1RH Richard 3125883 K1HK Harold @@ -78576,8 +95308,73 @@ 3125932 KD1NA David 3125934 K1XP Clinton 3125935 W1NU Ryan +3125936 N1DCH David +3125937 KE0SZC Kevin +3125938 KE6INZ Lincoln +3125939 KI5CRG James +3125940 KC4HAY Ronald +3125941 KA5TRQ John +3125942 KA5TRQ John +3125943 KA5TRQ John +3125944 W5KY Jesse +3125945 KE2WC Mark +3125946 KJ7CCM James +3125947 KJ7CAL Allison +3125948 KM6MCH William +3125949 K8MON Monte +3125950 KI5CRU Cody +3125951 AA1WH Marcel +3125952 N9JHB James +3125953 N5CSA Rodger +3125954 KN4MXZ Walter +3125955 KD9FRR Fred +3125956 KE0MQA Robert +3125957 K0PIR Richard +3125958 KI5CRU Cody +3125959 KD9FRR Fred +3125960 KJ7CVZ Michael +3125961 KD2PBA Osvaldo +3125962 KN4RJW Tedd +3125963 KM6CQQ Winston +3125964 KE0OSM John +3125965 KA1KRK steven +3125966 KD2PBA Osvaldo +3125967 KC8Q Tal +3125968 KA4KMH William +3125969 K5UNY Alexander +3125970 KC1DKX Andrew +3125971 KF7YRC Antonio +3125972 K9AKM Alexander +3125973 KI5CRG James +3125974 N5OZG Joe +3125975 KB3AY GREGORY +3125976 KG7VQZ Nathan +3125977 N4AUS Bill +3125978 KM6GEI Brent +3125979 KF5OFY John +3125980 KG7TQQ Bryan +3125981 KF5OFY John +3125982 N4CRZ Elmer +3125983 W1MLL Mike +3125984 KG5AJU Robert +3125985 KM6VNK Zachary +3125986 KI7PYH Ryan +3125987 N6NHJ John +3125988 W1IPI Alan +3125989 WB5CIT Robert +3125990 KM6MCH William +3125991 KM4BKB Andrew +3125992 WB0AL Allen +3125993 KE8LDX Patrick +3125994 KD5GOB James +3125995 KC0VNV Rod +3125996 KK4FXS Scott +3125997 K3WS Thomas +3125998 N1TDD Christine +3125999 KD2BNT David +3126000 N7GCR Greg 3126001 N8CN Joe -3126002 KD8EYF Mi +3126002 K9DPD David 3126003 W8FSM Fred 3126004 W8FSM Fred 3126005 W8FSM Fred @@ -78601,7 +95398,6 @@ 3126023 K8DTX White 3126024 W8JJR Ms 3126025 N8ZSA Theodore -3126026 KD8EYF Mi 3126027 W8JJR Ms 3126028 KB8SXK Jeff 3126029 N8URW Jason @@ -78635,7 +95431,6 @@ 3126057 N8GH Gary 3126058 KB8RVP Mike 3126059 W8ERV James -3126060 KD8EYF Mi 3126061 KD8BMB Chris 3126062 KD8BZZ Mike 3126063 KC8LTS T @@ -78646,7 +95441,6 @@ 3126068 K8UH Erik 3126069 KB8ZQZ Dennis 3126070 KC8PUN Jeffrey -3126071 KD8PGY Jeremy 3126072 KC8BDK Paul 3126073 N8JSN Jeffrey 3126074 N8JSN Jeffrey @@ -78754,7 +95548,7 @@ 3126176 WD8MNX Ron 3126177 KD8PLI Brandon 3126178 NX8A John -3126179 KD6KCX John +3126179 W8JTT John 3126180 K8CA Steve 3126181 KD8REH Michael 3126182 W8VPC Mike @@ -78800,7 +95594,6 @@ 3126222 KC8ZIQ Bryan 3126223 KD8RAV Christopher 3126224 KD8CPX Evan -3126225 KD8UDD Jeremy 3126226 KD8MJY Beth 3126227 KA8SLR Daryn 3126228 KD8DCE Bob @@ -78871,7 +95664,7 @@ 3126293 KC8PQZ Mary 3126294 KB8DIL Bruce 3126295 N8JS Jerry -3126296 KD6KCX John +3126296 W8JTT John 3126297 KB8IBS Andy 3126298 N8TAQ David 3126299 KD8WOX Greg @@ -78926,7 +95719,6 @@ 3126348 KD8GBH David 3126349 KD8GVT Erik 3126350 NS8Q Chris -3126351 WA1MAR Jeremy 3126352 KC9JBY Mike 3126353 KD8VEX Vicky 3126354 K8LRC Logan @@ -78956,8 +95748,6 @@ 3126378 K8HQ Christopher 3126379 AD4UU Dave 3126380 WA8UXO John -3126381 WA1MAR Jeremy -3126382 WA1MAR Jeremy 3126383 K4KWQ Tim 3126384 KC8OX Ralph 3126385 N8LBT Thomas @@ -78968,7 +95758,7 @@ 3126390 N8JED James 3126391 K8HHL Dom 3126392 KD8TMI Larri -3126393 KD4DTX Chris +3126393 N9ICV 3126394 KD8KBH Philip 3126395 W8DOG Michael 3126396 KD8CPX Evan @@ -78977,7 +95767,7 @@ 3126399 KD8DMJ Peter 3126400 N8JRP John 3126401 KD8VHU Eric -3126402 N8CAM Cameron +3126402 KG9B Joe 3126403 KB8ZHL Donald 3126404 KD8WKN Christopher 3126405 KD8TSP Martyn @@ -79046,7 +95836,7 @@ 3126468 W8CMC Colin 3126469 KE8MW James 3126470 W8GHZ Walter -3126471 N8KKG Jim +3126471 WI8W Jim 3126472 AJ8T Thad 3126473 KD8WEG Allen 3126474 KC8P Mariusz @@ -79054,15 +95844,15 @@ 3126476 KB8VUC James 3126477 KD8JGG Todd 3126478 N8SMS Stephen -3126479 KE8BKB Ronald +3126479 N8BKB Ronald 3126480 KD8TUK Mark 3126481 W8HUF Alcona -3126482 WD8EEP Douglas +3126482 AD8DP Douglas 3126483 KD8BZZ Mike 3126484 W8CET Christian 3126485 W8BLP Barb 3126486 W8ILL William -3126487 KD8VUI Tim +3126487 WM8A Tim 3126488 NE8E Scott 3126489 KB8SWR Jeff 3126490 N8DHC James @@ -79112,7 +95902,7 @@ 3126534 KC8RYF Daniel 3126535 K1FJ Frank 3126536 KR8T Rick -3126537 KC8KJF Albert +3126537 K9BQ Albert 3126538 KD8ATK Michael 3126539 K8NWD Timothy 3126540 KD1IX John @@ -79128,7 +95918,7 @@ 3126550 KE8AVT Harold 3126551 N9ZTS Justin 3126552 KQ8N Michael -3126553 KA8HQN Beverly +3126553 AB8BR Beverly 3126554 N8LN Terry 3126555 KD8ZMX Richard 3126556 W8ISS James @@ -79201,7 +95991,7 @@ 3126623 WX8TOW Paul 3126624 KD8ATK Michael 3126625 KC8SZT Raymond -3126626 KD4DTX Chris +3126626 N9ICV 3126627 N8KNC Mario 3126628 WB5VHB Clayton 3126629 KE8CZC Nick @@ -79212,7 +96002,6 @@ 3126634 KD8ZQB Thomas 3126635 N8YJN James 3126636 AJ8T Thad -3126637 KY8T John 3126638 KG8DAD Daryl 3126639 N8MRC Michael 3126640 K8JAJ John @@ -79243,8 +96032,7 @@ 3126665 W8XH Michael 3126666 WD8QVA David 3126667 KB8ZQZ Dennis -3126668 AC8AK -3126669 KY8T John +3126668 AC8AK eugene 3126670 N9QID David 3126671 KB8ULS Roger 3126672 KE8DED James @@ -79277,7 +96065,7 @@ 3126699 N8WQE Anthony 3126700 KC8RBK Jason 3126701 W8MRW Roy -3126702 N8DJY Daniel +3126702 K8DY Daniel 3126703 KA8TPQ William 3126704 K8TB Thomas 3126705 KB8ZU Donald @@ -79345,7 +96133,6 @@ 3126767 WX8L Sean 3126769 N8KDF Paul 3126770 AB3DC Dinesh -3126771 K8NOS Samuel 3126772 N8MJH Kent 3126773 N8MJH Kent 3126774 KE8DXJ James @@ -79363,7 +96150,7 @@ 3126786 N8LRL Paul 3126787 KO8G Gary 3126788 N8THN Nathan -3126789 KD8ABW Francis +3126789 K8NC Francis 3126790 KB8AWC Brian 3126791 KB8AWC Brian 3126792 KA8UUV Joe @@ -79463,7 +96250,6 @@ 3126886 AC8LR Robert 3126887 W5TMK Todd 3126888 N8GL Glenn -3126889 W8MAR Jeremy 3126890 KE8CPN Keith 3126891 K8OE Jeffrey 3126892 KB8UUL Noel @@ -79528,12 +96314,11 @@ 3126951 KU8F James 3126952 AB8DT Ronald 3126953 AB8DT Ronald -3126954 KD8AYE Kirk +3126954 W8KPG Kirk 3126955 KC8MDM Donald 3126956 N8NOE Jeffrey -3126957 KC8SZS Stephen +3126957 K8UN Stephen 3126958 AC8JN Frank -3126959 W8MAR Jeremy 3126960 WY8A Larry 3126961 W8SOX Laurence 3126962 W8SOX Laurence @@ -79574,6 +96359,7 @@ 3126997 N8DGU Kenneth 3126998 W8NOF Matthew 3126999 KE8CRV Matthew +3127000 WW7PSR President 3127001 N0NMZ Shep 3127002 NH7CY Jason 3127003 NH7CY Jason @@ -79622,7 +96408,7 @@ 3127046 AA0P Steve 3127047 KD0TTG Wesley 3127048 WA0CQG Carl -3127049 KC0HCP Brad +3127049 N0BUX Brad 3127050 KD0BEV Robert 3127051 K0BSB Barry 3127052 K4CDW Charles @@ -79669,7 +96455,7 @@ 3127093 W6GFN Barry 3127094 KD0PNQ Trygve 3127095 KB0FFO Carol -3127096 KB9ENE Lion +3127096 K1LEO Lion 3127097 K0SXR Max 3127098 KE0HEP Matthew 3127099 KE0EXC John @@ -79928,7 +96714,7 @@ 3127356 W0LKA Lori 3127357 KR0K Larry 3127358 K0HAS Henry -3127359 WE4YDL David +3127359 WZ0OZT David 3127360 WB0POQ Robert 3127361 KD0VJK Mark 3127362 N0UV Scott @@ -79979,7 +96765,7 @@ 3127407 N0OWN Kurt 3127408 N0ZQB Brian 3127409 KD0BTK Grant -3127410 K0FAS Fredrick +3127410 AC0FS Fredrick 3127411 KE0EOL Dave 3127412 KE0MNC Sean 3127413 W0CFM Thomas @@ -79998,11 +96784,12 @@ 3127426 KC0RKG Chad 3127427 KE0MND Scott 3127428 N0YXL Kyle +3127429 N9HWO Philip 3127430 KC0OBI Michael 3127431 K0NAG Neil 3127432 KD0YOW Brenda 3127433 AG0H Keith -3127434 KE0HHQ David +3127434 K0DJP David 3127435 WB0ERN Thomas 3127436 N0WUT Robert 3127437 W0HJS Herman @@ -80068,10 +96855,10 @@ 3127497 N0BJN Rick 3127498 K5ZC James 3127499 W0WD Joseph -3127500 KC0HCP Brad +3127500 N0BUX Brad 3127501 KC0SIW Scott 3127502 W0DTN John -3127503 OA4ABC Martha +3127503 KE0TL Martha 3127504 KG0SF John 3127505 KB0MDQ Tom 3127506 KB0QKC Dwayne @@ -80223,6 +97010,341 @@ 3127661 KE0GZT Michael 3127662 KE0RMR Jennifer 3127664 KE0RMR Jennifer +3127666 KD9MFM Jacob +3127667 WB0GAG Bruce +3127668 KK4KMO Julio +3127669 KC1JQX Rachel +3127670 KI5BCC William +3127671 N5THS J +3127672 KG7CME Elaine +3127673 WB1GNL Alexander +3127674 KE6DBA Glenn +3127675 KE5CDE Kevin +3127676 K3FRG Richard +3127677 KN4KEO Andrew +3127678 K7TST Brian +3127679 WY3K William +3127680 K5DWA Douglas +3127681 N5ODX Bill +3127682 KM6IQB Nicholas +3127683 KF7UNF Frederick +3127684 K3FRG Richard +3127685 WY3K William +3127686 WD4DCW Dwight +3127687 AG5RR Christopher +3127688 KD9IRS Trenton +3127689 N4HUF David +3127690 W2RWL Robert +3127691 N8DWB David +3127692 W1ONE Glenn +3127693 KA3ZSM Matthew +3127694 KI5CQX Gregory +3127695 KJ4GUY Michael +3127696 K4GN Charles +3127697 KD2BNT David +3127698 W4RLC Rhonda +3127699 WA1LTD Ron +3127700 WA1LTD Ron +3127701 KJ7XJ Eric +3127702 W9KL Leighton +3127703 KN4MBB Chris +3127704 KN4DLS Craig +3127705 KI7IIM Paul +3127706 W8CDG John +3127707 KG5JHQ Whitney +3127708 WJ3R Robert +3127709 KD0JEC James +3127710 KC2RLZ Bradley +3127711 KN4IKQ Matthew +3127712 N2MGU James +3127713 KD2GM Bryan +3127714 KI5JYD Kevin +3127715 W9WCA Wood +3127716 KD4GFY joseph +3127717 KI7UFW Tyler +3127718 N1MXH Alan +3127719 KC8CKL Jason +3127720 KC8CKL Jason +3127721 KK6D Doug +3127722 KF6IOS Wai +3127723 W0WT Warren +3127724 KB8UIP Brian +3127725 KC3MDQ Jeremy +3127726 K0IL Eddie +3127727 W0MKE Michael +3127728 KC9DK Dan +3127729 KB9REV Lawrence +3127730 KM6SJV Robert +3127731 K0VAB Vic +3127732 W3BTX Robert +3127733 KC3HOJ Michael +3127734 KF8IJZ Brittany +3127735 N2BOZ Joe +3127736 WJ2E Jon +3127737 N1SDP Scott +3127738 N2JRS Vincent +3127739 AJ6GE Ken +3127740 N8FRJ Douglas +3127741 W5JXT Nathan +3127742 WR2I Marc +3127743 KC9ZTK Matthew +3127744 KM6TVV Erez +3127745 W0LRF Lawrence +3127746 KM6YLK John +3127747 K1FC Frederick +3127748 KB9WYG Gregory +3127749 KI7HDK Christopher +3127750 KD9SK Shawn +3127751 W4TXZ Kenneth +3127752 KC9ZJB Jeff +3127753 KC1JOC Dennis +3127754 K5WBA Wade +3127755 WC8VOA Thomas +3127756 KE9PE Dominador +3127757 K3NJI Chad +3127758 KD9LKS Brandon +3127759 KC4VSL MICHAEL +3127760 W4LAN Mitch +3127761 KB1TKC Christian +3127762 KB3RLC Richard +3127763 KM6SSK Scott +3127764 KC1SJ Steve +3127765 KK6IWJ Jerid +3127766 KC3IRF Robert +3127767 KE8AGW Jefferson +3127768 AE5PM David +3127769 KC2WLX Joe +3127770 KC1RX Donald +3127771 K3CPK Corey +3127772 K5RLN Robert +3127773 KA0WGN Scott +3127774 KI5CQU Zachary +3127775 KC3JUN John +3127776 KE5DOO Robert +3127777 KD7DK Doug +3127778 W9MJW Stuart +3127779 KA0WGN Scott +3127780 KB8FGC Craig +3127781 KT0MED Eric +3127782 KJ7CMR Ian +3127783 N3NDS Todd +3127784 KE0TZZ Jesse +3127785 KC9HMW Andrew +3127786 KI5AEM Dempsey +3127787 KB3ZQD Jelly +3127788 KE8LEA Alex +3127789 K5SAW Steve +3127790 KL7CA Leonard +3127791 W2TXB Jerome +3127792 KD9MFW David +3127793 KC1ITB Benjamin +3127794 KD9MFW David +3127795 KJ7CMR Ian +3127796 KB3GDW Justin +3127797 K6WRP Warren +3127798 W8BRV Reynolds +3127799 KM6MMM Donald +3127800 N6CID Frank +3127801 KB6NOS Nicholas +3127802 N1MHV Bob +3127803 KG4AAX Carrie +3127804 W6HMN Cornell +3127805 KC2UWW Jason +3127806 KF4QVF Andrew +3127807 N4LSM Michael +3127808 KE0SGS William +3127809 K9KAO Henry +3127810 KC1KTH Nivek +3127811 W8BRV Reynolds +3127812 W0QF Joseph +3127813 WB0WTI James +3127814 KF4OBM Richard +3127815 K7SPY Chris +3127816 KC2UWW Jason +3127817 K0ITP Charles +3127818 W7ZH Tony +3127819 N6CQW Patrick +3127820 W5HKR Stace +3127821 KK4VHY Kevin +3127822 AK4CB Titus +3127823 KK6GFO Brandon +3127824 KD2PM Ed +3127825 KC5RJL Rod +3127826 KM6WSY Leyang +3127827 N2OME Joe +3127828 N2WAR Brian +3127829 NY2RC ARC +3127830 KG5CYY Alan +3127831 KE8KPE Patrick +3127832 N7VXA John +3127833 W7WEC William +3127834 KE0TQU Kyle +3127835 KI5CTP +3127836 KN4DLY Carter +3127837 KC5AJS Mark +3127838 KN4QFD Eduardo +3127839 KE0UAR William +3127840 KE0UAR William +3127841 KD5PFT Matthias +3127842 AE5PM David +3127843 KN4POD Christopher +3127844 KN4RFG Cody +3127845 KK7AIR Scott +3127846 KF5WSR Kelly +3127847 KN4NFP Javier +3127848 KD4CLW Adlai +3127849 N3WJF Dave +3127850 K6OSX Darin +3127851 KG5CNR Raymond +3127852 N4VBH Prentice +3127853 N4CDJ Christopher +3127854 N6NHK Nancy +3127855 KW1M Martin +3127856 KG0NN Ronnie +3127857 KK4HHY Claude +3127858 KN4EOF Michael +3127859 K0KEV Kevin +3127860 WX4AL Mike +3127861 N0OH Josh +3127862 KC7HFY Mike +3127863 N3WJF Dave +3127864 KC3LON Jonathan +3127865 K5MFP Michael +3127866 KB3QVT Barrett +3127867 KB2TKE Kevin +3127868 AJ4FJ William +3127869 N7QVO Steven +3127870 KN4PNP Joshua +3127871 W8DGG Philip +3127872 K3DHS Chon +3127873 KC3LWI William +3127874 KI5BQQ Aviv +3127875 KI7DLN Chris +3127876 KE8MSP Matt +3127877 W3RAL Ronald +3127878 WA4LYX Monroe +3127879 NG6Q Richard +3127880 KK4ZUH John +3127881 KA5USN Phillip +3127882 KC2TZA Steven +3127883 KD8WSL William +3127884 KD8DNO Kevin +3127885 KD2LAN Paul +3127886 KA6SYU Janet +3127887 K5BCM Timothy +3127888 K1ABR Anthony +3127889 K1ABR Anthony +3127890 WT1IM Timothy +3127891 KK4PIB Paul +3127892 K6DDT Derick +3127893 W8ZZZ Lawrence +3127894 AA7GW Gary +3127895 KM6YJA George +3127896 WA2AUL Atlas +3127897 W1EOY Richard +3127898 W0JCL Charles +3127899 WA6PSM James +3127900 KE8HGW Joshua +3127901 KC1KRH Santos +3127902 KC1SDR Kyle +3127903 K4COD James +3127904 KC1SDR Kyle +3127905 WA6PSM James +3127906 K4SPN michael +3127907 N9VWC Michael +3127908 N7ERZ Erich +3127909 KD5GTT Alan +3127910 W6BHZ Cal +3127911 KG5PAL Carston +3127912 N6YV Jan +3127913 N9RDX Marvin +3127914 WH6EXE William +3127915 KG3CKO Stephen +3127916 KK4OIQ Mike +3127917 N4EJV Edward +3127918 KE0SHV Logan +3127919 KI7WIK Iris +3127920 W1EAB Ed +3127921 KC1KFX Friedrich +3127922 NN2N Heinz +3127923 KA8DJN David +3127924 WX5UIF Travis +3127925 KC8ZBC Brian +3127926 N9VWC Michael +3127927 KM4LBC North +3127928 KN4PNR David +3127929 K8DE Douglas +3127930 N8TVQ Aaron +3127931 KI6YKA Antonio +3127932 K8SGX William +3127933 N0JUH Jeff +3127934 KG7TNI Suzanne +3127935 KB7OLZ Craig +3127936 KB2ZIG Peter +3127937 N2GSL Ed +3127938 KG7DHG Matthew +3127939 K0NUK ROBERT +3127940 KM6WOG Lauren +3127941 KJ6DQR Earl +3127942 KC3LWI William +3127943 WH6EXE William +3127944 AC1CM Christopher +3127945 KD9HFW Jason +3127946 WB4FVM James +3127947 KI5BNY Mark +3127948 KN4RCP Adrian +3127949 N8ROA Darrin +3127950 KE0NYM Todd +3127951 KE6LEM Jeffry +3127952 KF4DHS Robert +3127953 KM6UWX Kartik +3127954 KI5CMT Jovon +3127955 WY7RDC Ryan +3127956 W2JDM Jason +3127957 KE0SXF Rick +3127958 KE0SXF Rick +3127959 W1MIT Dennis +3127960 WY7RDC Ryan +3127961 KB7RXV Julie +3127962 W6BHZ Cal +3127963 N0IQW Bruce +3127964 KN4FYG Randall +3127965 KG7VRN William +3127966 KE8JKS Gordon +3127967 N6AAB Bi +3127968 KJ4WLI Herman +3127969 KA3KDL Eliseo +3127970 KM6MHZ William +3127971 KC2KNP Daniel +3127972 KD7QOR Edward +3127973 KK4PSD William +3127974 NX6G Barbara +3127975 KI7CWQ Rachel +3127976 N7TEI Raymond +3127977 KA3KDL Eliseo +3127978 N1ADJ James +3127979 AB9OV Miguel +3127980 N3NDS Todd +3127981 KJ7BSV Stuart +3127982 K3DBG John +3127983 KG5ZFH Lee +3127984 WY4Y Kenneth +3127985 W7ZND Jim +3127986 KD2MYW Philip +3127987 N4RPR Angela +3127988 N7ARO Eugene +3127989 KI4SOC Derek +3127990 N6RBC Wayne +3127991 N4KSQ David +3127992 KA0RVL Kevin +3127993 KK4DNL Clayton +3127994 KC2KNP Daniel +3127995 KM6WSL Masis +3127996 K9DAN Daniel +3127997 WI4B James +3127998 KG7MCI Edward +3127999 AA5ZT Michael +3128000 NF1F Thomas 3128001 KF5MWE Gary 3128002 K5WSM Lemuel 3128003 KD4VVZ General @@ -80233,8 +97355,8 @@ 3128008 W5JTM Jim 3128009 N4IL Tracy 3128010 WB4IZC Steven -3128011 N5KDV Jack -3128012 N5KDV Jack +3128011 NR5T Jack +3128012 NR5T Jack 3128013 KE5RHM James 3128014 N5YT Hector 3128015 N5YAV Darwin @@ -80259,7 +97381,7 @@ 3128034 KO5S Craig 3128035 K5ASL Charles 3128036 K5ASL Charles -3128037 KC5RSN Robert +3128037 KD5FRY Robert 3128038 N5YAV Darwin 3128039 WB5DO Danny 3128040 WF5D Sammy @@ -80268,7 +97390,7 @@ 3128043 W5TUT Edward 3128044 KG5IRU Charles 3128045 KB5SAT Herbert -3128046 KB5DMT Charles +3128046 KB5DMT Lee 3128047 AD5HM Andrew 3128048 KG5OZJ Elizabeth 3128049 N5EOB Ronnie @@ -80281,7 +97403,7 @@ 3128057 N5VAP Frank 3128058 K4RCW Tommy 3128059 N5EOB Ronnie -3128060 KB5DMT Charles +3128060 KB5DMT Lee 3128061 N5YT Hector 3128062 KB5ZEA Danny 3128063 KC5ZJI Stacy @@ -80343,7 +97465,7 @@ 3128120 KF5KYZ James 3128121 KF7DLW Justion 3128122 K5YVY Joseph -3128123 KA5DON Robert +3128123 WV5Q Robert 3128124 KB5VE Dalton 3128125 K9EYZ Laurence 3128126 K9EYZ Laurence @@ -80365,9 +97487,856 @@ 3128145 KG5IRU Charles 3128146 KB5WWS Lori 3128147 KG5IDK Samantha -3128148 KJ5K Joshua +3128148 KJ5K Josh 3128149 KG5ZJO Nellie 3128150 WD5EED James +3128151 N8MNI Mark +3128152 WI4B James +3128153 KF5APN Gilbert +3128154 K1IWZ Jonathan +3128155 WA0YMH ROY +3128156 KK6OJR Warren +3128157 KK4RUI Neal +3128158 KW8D Josh +3128159 WZ7L Michael +3128160 KM6YSO Daniel +3128161 WM6Y Phil +3128162 N9LHP Marc +3128163 NB2Y Guangqiang +3128164 KD2RJS Richard +3128165 KN4RBJ Carl +3128166 KE0THX William +3128167 KE5BEB Dennis +3128168 KJ4PHQ Brandon +3128169 KN4NND Danielle +3128170 KF4DSK Michael +3128171 KD2QBV Susan +3128172 WD4HRO Steve +3128173 KA9TQC John +3128174 K5XL John +3128175 W6VNY Vincent +3128176 KC0YHM Michael +3128177 N3MHR Robert +3128178 K9KAO Henry +3128179 KC0VNV Rod +3128180 KC0YHM Michael +3128181 N8OWS Larry +3128182 KD9JTY Jason +3128183 KE8HLN Norman +3128184 KC1KSQ Ian +3128185 KF4IJB Thomas +3128186 KI4SOC Derek +3128187 KE6FPF Jo +3128188 W8MIJ James +3128189 KF5SGQ Bart +3128190 KF5THM Michael +3128191 N6IMY Mike +3128192 W0ROQ Robb +3128193 W3WDC Vincent +3128194 KC9TTF Scott +3128195 W3WDC Vincent +3128196 KD8OAH Michael +3128197 KB1CAN Craig +3128198 N1JSL Jeff +3128199 KC1HAU Marco +3128200 K1COL Keith +3128201 KB1HOV Timothy +3128202 AE7OR Chris +3128203 AD8BM Barry +3128204 AB9BV Stefan +3128205 W4UAV Michael +3128206 KF4FWO David +3128207 KC6QJQ Phillip +3128208 KC5YGS Aaron +3128209 KB9REU Alan +3128210 KJ4AKA Robert +3128211 KE0PGH Noah +3128212 KC3FLR Ronald +3128213 WM6Y Phil +3128214 W5MLH Mark +3128215 KC3FWG Arlo +3128216 KI7ZUS Chad +3128217 AC1BW Rory +3128218 N4ZFL Mark +3128219 KK4WTL Howard +3128220 KC7BYD Ernest +3128221 KC9QAW Brandon +3128222 KQ1S William +3128223 KC3MKO Peter +3128224 K4WDY Terry +3128225 W8URK Charles +3128226 KJ0BEN Kelly +3128227 N4POW Powhatan +3128228 KE7REF Maureen +3128229 K0LPM Michael +3128230 K4PAB Paul +3128231 KD4WFE Clarence +3128232 W7AXA Robert +3128233 KC1KIP Bill +3128234 KD2RDI Javier +3128235 N8TZG Loren +3128236 KK4JAX Mitchell +3128237 KD2RDI Javier +3128238 KD8OAH Michael +3128239 N4POW Powhatan +3128240 W4TF Vishnu +3128241 W5JXT Nathan +3128242 NK2Q David +3128243 KI4IMN Kenneth +3128244 KJ4FJW Lindsay +3128245 KQ6D Richard +3128246 W9JVC Brian +3128247 KE7REG Michael +3128248 WA7OVR Robert +3128249 KG6IMR Brian +3128250 WD9U Mark +3128251 KI4JZI Jeffery +3128252 KB3FCH Thomas +3128253 N3PAG Michael +3128254 W4MDD Michael +3128255 W4MDD Michael +3128256 W9JVC Brian +3128257 KC8MNV Robert +3128258 AD9K Richard +3128259 N2DLC David +3128260 AJ6GL Aaron +3128261 KD6EQO Mauricio +3128262 N6IMY Mike +3128263 KB3VEJ Nathan +3128264 KJ6HWN Russell +3128265 KD6CDC Christopher +3128266 AA3E Doug +3128267 WA1MIK Robert +3128268 K0NHI John +3128269 AA3E Doug +3128270 KD2QFA Christopher +3128271 AI6IG John +3128272 AA4GB Grant +3128273 W7PCR Daniel +3128274 KI7WTQ Warren +3128275 K4CBT Colby +3128276 KI5BDI Kevin +3128277 AI6KU Robert +3128278 N4ANE Aaron +3128279 KJ7CEB James +3128280 KN4HKX Steven +3128281 K9AAU Larry +3128282 K4CBT Colby +3128283 NV5B Roger +3128284 NS3U Thomas +3128285 WA4VFH Edgar +3128286 KZ4C David +3128287 KI8D Edward +3128288 W5VWW Vetall +3128289 KG7NTS Jeff +3128290 KA7HOS Russell +3128291 W4ORF Don +3128292 KA8NCR Jeffrey +3128293 N8RMF Seth +3128294 KD4LLA Michael +3128295 KC0LXM Jeff +3128296 KN4PIT Tyler +3128297 W4GWH Gary +3128298 WB6DIK Richard +3128299 N7SKV Brent +3128300 KF5SFE Leslie +3128301 K3TFM William +3128302 K0OE Bruce +3128303 WB4OQL Ron +3128304 KB0QNW James +3128305 KD9GUG Nick +3128306 N5WMT John +3128307 WB2TSL Kenneth +3128308 KD7ZPJ Loren +3128309 KG6FHA Robert +3128310 KD8IER Clinton +3128311 KC6SCD Shawn +3128312 KC6SCD Shawn +3128313 KB5QAT Theodore +3128314 KM6DQU Hugo +3128315 WA2WWK Ronald +3128316 WT8WV Spence +3128317 KM6DQU Hugo +3128318 W5BSA Joe +3128319 WN8VIX George +3128320 KA9DSL Raul +3128321 KE0TZZ Jesse +3128322 WD9END William +3128323 KG7VRV Todd +3128324 KF5LHG Clarence +3128325 KC4SBD Baird +3128326 KJ6MBC +3128327 KK4QIY Robert +3128328 KE7CQ John +3128329 KI7SYP Troy +3128330 N4WLC William +3128331 WV8USA Christopher +3128332 AC1FZ Michael +3128333 WB6ZXM Michael +3128334 KD0QKK Thomas +3128335 N1XKD Peter +3128336 KE0BX Michael +3128337 ND1O Thomas +3128338 N5WXY barry +3128339 AD7NY Jonathan +3128340 NE2E Zorach +3128341 WB2LWX William +3128342 KI7YLM Matthew +3128343 N8PUB Todd +3128344 KE8AXL Kelly +3128345 KA7MON Shirley +3128346 KA2CDT Ronald +3128347 KB0TCS Matthew +3128348 KG7CCD Aaron +3128349 K6JSX Jonathan +3128350 N8IOT Darrell +3128351 KM6WEK Adil +3128352 KC9DAA Adam +3128353 N4NEZ Michael +3128354 N8TL Raymond +3128355 KC5YGS Aaron +3128356 W4FAO Jimmie +3128357 KD8AYA Michael +3128358 KI6FOX Brian +3128359 KD2HZJ Ariel +3128360 KD4EED Joseph +3128361 KJ4IKK William +3128362 WB5NEN Richard +3128363 N4NEZ Michael +3128364 AI4KZ Rohan +3128365 KF5KBS James +3128366 KB4BYH Roger +3128367 N2JMU Harlan +3128368 K8RCR Richard +3128369 W4DAF Dwayne +3128370 KD3VIN Devin +3128371 W2EWK Eugene +3128372 KF6IF Phil +3128373 WB6AIH Robert +3128374 AL7GG Charles +3128375 W7NNQ Willard +3128376 KC6SLW Ignacio +3128377 KE0POD Paul +3128378 WA4JET Jesse +3128379 KG4SXU Patricia +3128380 KF5TXV Darla +3128381 KG5FQT Conrad +3128382 K6IBP Curtis +3128383 K6WDA David +3128384 KD9LZN Rob +3128385 KB8MXX David +3128386 N7LMR Justin +3128387 KA2CDT Ronald +3128388 K2AUX Arthur +3128389 NE2E Zorach +3128390 KK4YNV Hanna +3128391 K4LPD Luis +3128392 KB9VZT Edwin +3128393 KF7PMC Jeramey +3128394 N1RAZ John +3128395 K8JI Steve +3128396 KM6RFA Nicholas +3128397 K4LPD Luis +3128398 W5SWG Stephen +3128399 K5DZY Chris +3128400 KM4MK Robert +3128401 K9WLW Francis +3128402 KB4IBW Britt +3128403 KG6FLU Simon +3128404 AG7RL Neal +3128405 KI3N Kenneth +3128406 KC5OKN Dana +3128407 N1RAZ John +3128408 KB4MDD Danny +3128409 KF4QAN John +3128410 KN4NDV Edith +3128411 N1TJC Thomas +3128412 WY4X Frederick +3128413 KK4OWI Robert +3128414 KD6AYP Galel +3128415 KM6RFA Nicholas +3128416 KI5CHX Robert +3128417 KI7PHF Jeffrey +3128418 KF5RHI Richard +3128419 W7ESR Eric +3128420 N9PKQ Russell +3128421 KN4HTA Douglas +3128422 N3VFG Richard +3128423 K8HMF Charles +3128424 N9DYO Herbert +3128425 N0TLE Barry +3128426 N0TLE Barry +3128427 KM6IRY Vince +3128428 KM6IRY Vince +3128429 NX7O Benton +3128430 K3WR JAMES +3128431 W4WHF Harry +3128432 KD5UGC Bruce +3128433 KM4KRB shannon +3128434 KN4KVZ Thomas +3128435 KB4MTO William +3128436 K8CT Robert +3128437 KM4KRB shannon +3128438 N2IEZ Sandra +3128439 N0UGV Michael +3128440 WA2ZEG John +3128441 WA2ZEG John +3128442 W3RWN Randolph +3128443 W2DEA Raymond +3128444 W8TMS Thomas +3128445 KJ7CQW Dean +3128446 N4PLR Shane +3128447 WB5ZJQ Eric +3128448 KM6YIV Ignacio +3128449 KD5SYI Christopher +3128450 N2FID Paul +3128451 KM4VVU Nick +3128452 W5DNT Dan +3128453 KD9IHU Warren +3128454 KM6SSL Gregg +3128455 KD9LRQ William +3128456 N8FTL John +3128457 KD6MTU Guy +3128458 N5ABA Andrei +3128459 AD6DM Dennis +3128460 N5ABA Andrei +3128461 W7AW West +3128462 KJ4IKP Jessica +3128463 NS4M Stephen +3128464 K8JI Steve +3128465 W5WDY Woody +3128466 KE0CDT Jacob +3128467 W1CPS Charles +3128468 KB1TZE Walter +3128469 KB2NHW PAUL +3128470 KB1TZE Walter +3128471 WA2AAE Harvey +3128472 K2HA Frederick +3128473 N9RUN Michael +3128474 W6WEI Morey +3128475 KC2HII Keith +3128476 KC2HII Keith +3128477 KG5ZVL Mark +3128478 WS2V Scott +3128479 KJ4VWQ Stephen +3128480 KM4YUL John +3128481 K3BDG Brian +3128482 KC5RFL Britt +3128483 N7SWG Edward +3128484 KG5EZL Anita +3128485 K3ACZ Albert +3128486 KD4YAL Jerry +3128487 KC8UKX Mark +3128488 KC8UKX Mark +3128489 KD9IHU Warren +3128490 N3UB Richard +3128491 K8NYY Lawrence +3128492 K3KAP Karen +3128493 KD6MTU Guy +3128494 W1KUA Douglas +3128495 N0THY Bryan +3128496 KD4YAL Jerry +3128497 N4BGG Bruce +3128498 K2ATX Harry +3128499 K2ATX Harry +3128500 K8MTR Mark +3128501 KF5VKY Ryan +3128502 KC3BLF Michael +3128503 KI7ZDC Jayna +3128504 KB2CQ William +3128505 KC1KTB David +3128506 AB0TX Michael +3128507 KF5VKY Ryan +3128508 N1DKB Gary +3128509 WA3TD Jeffrey +3128510 N1DKB Gary +3128511 KB8HYB Carole +3128512 W4ACS Pinellas +3128513 KN4IAB Elizabeth +3128514 W0OES Robert +3128515 N3XCC Michael +3128516 KB4IBW Britt +3128517 WH6FIO Dennis +3128518 KL0NP William +3128519 KB3GXE Peter +3128520 K1BJR Bob +3128521 KK4VIH Mark +3128522 KK4QKL John +3128523 N8XME Donald +3128524 KC2UBH William +3128525 K5AHT Bob +3128526 KE5CTT Peter +3128527 KJ4SVE Ronald +3128528 KJ4FMH Erik +3128529 KM6YCA James +3128530 KM4VHX Jeffrey +3128531 KK4QKL John +3128532 K4CGA Charles +3128533 K0OE Bruce +3128534 AB5GC Edward +3128535 KC2SNJ Felix +3128536 KN4QMN Jason +3128537 N5WPL Randall +3128538 KN4PLH Robert +3128539 KM6QWP Nicholas +3128540 KG5WRN Michael +3128541 N9TBY Reed +3128542 K3RSK Rod +3128543 KC9BHQ Jeffrey +3128544 KK6UWN Sean +3128545 KC1KMI Geoffrey +3128546 W4ACS Pinellas +3128547 K8MTR Mark +3128548 KN4QGW Hunter +3128549 KE7QXB Brett +3128550 N1KGR Michael +3128551 KX4FJ Juan +3128552 KC1DXT David +3128553 N0MD Edward +3128554 AD4ZN MELVIN +3128555 K5AN Jacob +3128556 KB3JD John +3128557 N3JUO Dale +3128558 KC3EJC Shawn +3128559 K1MD Richard +3128560 K0TI Dan +3128561 K5AN Jacob +3128562 KD5E David +3128563 WA6IO Jim +3128564 KE9BV Jeffrey +3128565 N7NIP David +3128566 KM6DXY John +3128567 KG5SPT Jack +3128568 W9DPY David +3128569 KB4DE William +3128570 N3PNB christopher +3128571 W2FJS Frederick +3128572 W4JLP James +3128573 K9HYI Ben +3128574 KA7CSE Mike +3128575 W6CSS Sid +3128576 N6CKO Michael +3128577 NC6A Don +3128578 KE0QFO Alan +3128579 WM9W The +3128580 AG6QS Daniel +3128581 AC8VW Robert +3128582 KJ4PZQ Allen +3128583 KC3AUC James +3128584 N2PTB Angel +3128585 KX4FJ Juan +3128586 K5XL John +3128587 KB3QKN Patrick +3128588 KG5PMN James +3128589 KC3EYM Nicholas +3128590 WU2V Matthew +3128591 WN4TNC Tom +3128592 N1QQA daniel +3128593 KM6YNQ Charles +3128594 KE8BGN Nathan +3128595 K6PH Peter +3128596 KX6MMM Michael +3128597 KB1GQD Andrew +3128598 K6WBD William +3128599 N7XEA Thomas +3128600 KE8DZO Don +3128601 WB3AGL Paul +3128602 K6NHV Michael +3128603 AC3DH Kenneth +3128604 W4JLP James +3128605 KI4KWR Stephen +3128606 N0MD Edward +3128607 KE0RHU Gabriel +3128608 KD9GIY Michele +3128609 WN4TNC Tom +3128610 KF5ASC Brandon +3128611 KA8NCR Jeffrey +3128612 KE8DZO Don +3128613 WA6IO Jim +3128614 KI5CQG Rex +3128615 KN4REO Dennis +3128616 K4VDB Victor +3128617 KI7MKQ Eric +3128618 AA6TV Donald +3128619 N0MSS Ross +3128620 AC8VW Robert +3128621 KA4AJL John +3128622 N6FUG Jack +3128623 KO4ZFG Joseph +3128624 WS7M Mark +3128625 KN4RLL Renato +3128626 KD4YNG Donald +3128627 N0LAK Luke +3128628 AA5SH Charles +3128629 KG5RJW Kathy +3128630 KD2RDU +3128631 KD5UGB Manuel +3128632 KI7QDU Jesse +3128633 KC9RQI Stephen +3128634 W0DDZ Dave +3128635 N7IX Michael +3128636 K5CMX Charles +3128637 K6JMN James +3128638 WB0VKL Martin +3128639 KC5OKP Michael +3128640 KD2RDU +3128641 N0LAK Luke +3128642 W8DRH Dustin +3128643 DB7MJ Peter +3128644 KN4RLE Herbert +3128645 W0ECH Michael +3128646 KJ4ZMO Brice +3128647 K7RLH Richard +3128648 N4KGL Kenneth +3128649 KF6YUD Rory +3128650 KF7UGG Richard +3128651 KJ4CEI Pablo +3128652 KM6KZ Robert +3128653 KF7MIB Jeremy +3128654 W8UZ Donald +3128655 W4MEZ Joseph +3128656 WC8RK G +3128657 W4HLN Milton +3128658 KA1JWM David +3128659 N3JYB Michael +3128660 W8QAS Roy +3128661 KF5TIA Dennis +3128662 WD5CFM Francis +3128663 K5ADT Allen +3128664 N4LG William +3128665 KC3IKK Michael +3128666 W2ARN Heribert +3128667 KE0TXR Ken +3128668 WA7UKC John +3128669 K7LSV Morris +3128670 KE7OMU Terry +3128671 WN4E Otha +3128672 KC7WYD Arturo +3128673 KG7AED Emily +3128674 KO4ZFG Joseph +3128675 KM6FP Richard +3128676 K6JMN James +3128677 N6WPG David +3128678 KQ2Y Patrick +3128679 KC2PMM Guy +3128680 N9ZAS John +3128681 AF4LO Colin +3128682 K4JTM John +3128683 W4PXE David +3128684 KM6SRX William +3128685 KA3WWE Michael +3128686 KF5SFE Leslie +3128687 KE8LEF Rylee +3128688 WD5BUH Nathan +3128689 KJ7BRF Mike +3128690 K6WAL Walter +3128691 KA4FHP Terry +3128692 KF5VAV Cody +3128693 W2IF Hugh +3128694 KC7CS Gary +3128695 KM6IQS Jeffrey +3128696 K5ABL Allen +3128697 N6OJE Mary +3128698 W4KYC Thomas +3128699 KI5CSH Fausto +3128700 KM6WBV Timothy +3128701 W7DXJ Richard +3128702 KK6JTB Steven +3128703 N5RWC Tim +3128704 KC3LVP Nancy +3128705 KN4S Harry +3128706 KF6OCH Alvin +3128707 KM6WBV Timothy +3128708 KD9MDX Jonathan +3128709 KN4PNC Rynard +3128710 KG4ZXN William +3128711 AC9Y Michael +3128712 W1AFD Gerard +3128713 KB5ZJP jeff +3128714 K4NYX Michael +3128715 KI7VLV Dave +3128716 KA3BQE Alexandre +3128717 WA4IQJ Gary +3128718 AK2T John +3128719 KB1RMD Derek +3128720 KE8ANE Keith +3128721 KC3JVJ STEVE +3128722 KB1RMD Derek +3128723 W6STP Stephen +3128724 N3WPE Gary +3128725 KB2RUV Paul +3128726 KK6RLT Patrick +3128727 W0WMG William +3128728 KN4GZX John +3128729 K7MAJ Michael +3128730 N6TSE Antonio +3128731 KM6YVR Mathew +3128732 N8BA Paul +3128733 KF5JWL Gordon +3128734 KM6NUY J +3128735 KD8SGI Andre +3128736 N0GIK Matthew +3128737 KC9POS Timothy +3128738 W4ACP James +3128739 AJ4FW Rick +3128740 K4LXN Tracey +3128741 KG4YXN Warren +3128742 KB2CDX Donald +3128743 K6MYT David +3128744 NN4JB Milton +3128745 N4WYH Theodore +3128746 WM8S Rob +3128747 N9USQ Terry +3128748 K5DLD David +3128749 WB2YMU James +3128750 N2RNA Regina +3128751 KY4CKP Chris +3128752 WB6BMJ Dan +3128753 KA4EBX David +3128754 KM6NLQ Eric +3128755 AA9MQ Douglas +3128756 WA6WKM Steven +3128757 KD2NFC Joseph +3128758 K0AMD Thomas +3128759 KY4CKP Chris +3128760 W8SYU Harold +3128761 WW3TRG THOMAS +3128762 WB3AGL Paul +3128763 KD9IUS Anna +3128764 K6OPJ Mark +3128765 W3TUB Donald +3128766 KG5TUP Jeremy +3128767 KB9LBP Steve +3128768 W8NKN Les +3128769 WD8PEI Charles +3128770 K5RJL Ronald +3128771 KB1GQD Andrew +3128772 KF6DMA Clive +3128773 K6STB Tom +3128774 KM4DPP Marlin +3128775 K7UID Howard +3128776 K6CZA Steven +3128777 KN0OBS Clayton +3128778 KD7KAP Christopher +3128779 KA2AUB Matthew +3128780 N6QJ Timothy +3128781 N1TDD Christine +3128782 W2FJS Frederick +3128783 W4SMS Stephen +3128784 KN4PHU James +3128785 W0DFU Dan +3128786 KD8TLD Don +3128787 KD2JAL Jake +3128788 NO1D Douglas +3128789 KM4PJU James +3128790 W3TUB Donald +3128791 K4VL Robert +3128792 NS1H Blair +3128793 N3ETP Robert +3128794 KE8HNK Elmer +3128795 N8ERM Terry +3128796 AB8XA Moe +3128797 KA2NZV Daniel +3128798 WX0K Jesse +3128799 W8JVP Ken +3128800 N8NQH Timothy +3128801 N8LHA Daniel +3128802 KI4OHR Joseph +3128803 NS1H Blair +3128804 WA7BAM Bruce +3128805 KC1KFS Fabio +3128806 K7YCQ Richard +3128807 W7GDR Timothy +3128808 N8LHA Daniel +3128809 W7GDR Timothy +3128810 NH7TV +3128811 KF6DMA Clive +3128812 KE8KTD Thaddeus +3128813 WK0I John +3128814 KC5NOX Gary +3128815 AA3JC Joseph +3128816 W3WCT William +3128817 N4ANJ William +3128818 KA3OIF Chris +3128819 K7XTN Christian +3128820 W3KSV Robert +3128821 AB1SM David +3128822 K4CB Carlton +3128823 K9GTI Joseph +3128824 KG6OYI Ruben +3128825 KD7UQR Kie +3128826 N2UQR Robert +3128827 KM6LKT Peter +3128828 K3KSB Michael +3128829 KA3TNO Kevin +3128830 KC9UXT Todd +3128831 W7BLM Bob +3128832 KM6WSX Ronald +3128833 KI4RYB Tewanna +3128834 WB1GNL Alexander +3128835 K9BUM Michael +3128836 KR6DDS Romeo +3128837 N5TEP Matt +3128838 NY1A David +3128839 K7CJB Curtis +3128840 KC8SLJ Guy +3128841 KE0CLO Michael +3128842 KG5OQP Arnold +3128843 W4ACH Julio +3128844 KI5CSH Fausto +3128845 W3VC W3VC +3128846 KC5NOX Gary +3128847 KR6DDS Romeo +3128848 W9ZEP Mike +3128849 NQ4U Jimmy +3128850 W2DLT Lowell +3128851 KC2CZK Richard +3128853 W4JMC John +3128854 KK4ZMG Richard +3128855 K5MCG Tim +3128856 KC3KSJ Chris +3128858 KG6OYI Ruben +3128859 WK0I John +3128860 W8DOW Richard +3128861 KE4JSS David +3128862 K2MAM Miguel +3128863 KC7KVQ Jonathan +3128864 WA8HSZ David +3128865 K9OPS Thomas +3128866 KE0MVD Thomas +3128867 AC5Q Dennis +3128868 WW6A Byron +3128869 W1WET Philip +3128870 KC5HPO Ronald +3128871 KN4OCN Richard +3128872 KT4NRA Glen +3128873 KI6WKV Joel +3128874 KF5ZMA Chase +3128875 K7HAR William +3128876 N9TZO Chuck +3128877 WY7EMT Jason +3128878 KC4JGC Stephen +3128879 KJ7XJ Eric +3128880 KC2TZA Steven +3128881 N5MXI David +3128882 K7QNX Johnathan +3128883 KW8RQ Michael +3128884 N8HDM Charles +3128885 KE0TFO Stanley +3128886 W3YXZ Michael +3128887 KE7NEI Nicholas +3128888 KE7NEJ John +3128889 AJ6HI Gregory +3128890 WR4A Mark +3128891 KC3BTV James +3128892 KE5NAK Robert +3128893 W3YXZ Michael +3128894 KE0TFO Stanley +3128895 NG8P Howard +3128896 AC9BS Paul +3128897 KN4MCF Robert +3128898 KD9HLX Deanne +3128899 WT4C Amon +3128900 KV4CM Brendan +3128901 KN2X John +3128902 KB2TJZ Michael +3128903 KE8ANE Keith +3128905 KJ6LHT Michael +3128906 N0JVW Bernard +3128907 KI4UJJ Alfred +3128908 KM4WZK Pablo +3128909 KE0TTE Christopher +3128910 WB8ZRY Robert +3128911 KD9CRN Jeremiah +3128912 KC2MJB Douglas +3128913 AB1ES Paul +3128914 K7EAT Gary +3128915 N3REN Travis +3128916 KB7TIX John +3128917 N3IG John +3128918 KD2QBO Balaji +3128919 W5PD Presley +3128920 N9AXT Preston +3128921 K0FTM James +3128922 W5XNO William +3128923 KL3RR +3128924 KD0ZYC Brendan +3128925 KC1EPX Aaron +3128926 AI6RP Stephen +3128927 WD8KUF William +3128928 W4EYJ Paul +3128929 AF5CZ Michael +3128930 KN4LVN Cynthia +3128931 K7RKL Robert +3128932 KJ7CUD Lynne +3128933 N4DMA Dennis +3128934 KA6IYS Michael +3128935 KF5THS Alfred +3128936 KC8ZZS Gary +3128937 K9EVP Shawn +3128938 WW5PA Paul +3128939 KB8IRQ Steven +3128940 WA0GMH Fred +3128941 KE5ILE Walter +3128942 N3GVB Oscar +3128943 K1KSC John +3128944 KC8THC Timothy +3128945 KD9LUJ Paul +3128946 KG6TYQ Daniel +3128947 K2CB Eric +3128948 KD5GGC Bryan +3128949 KE0PTE Mike +3128950 N9TZO Chuck +3128951 KM6MHT Michael +3128952 KJ7BSG John +3128953 KM6IEQ Robert +3128954 KM6OHT Shwan-Paul +3128955 K5DXF Steven +3128956 KK4STE Jennifer +3128957 KE0TQM Eliot +3128958 KD9HLX Deanne +3128959 AD0SN Richard +3128960 K4MMR Mildred +3128961 W4FLL Warren +3128962 N5MPK James +3128963 K5UZZ Ray +3128964 KX4QU Joel +3128965 KE0TTG Liam +3128966 KC2TGK Lawrence +3128967 KM6KXS +3128968 KM6MHT Michael +3128969 KE8JWX Andrew +3128970 KI4UJJ Alfred +3128971 KC1KTB David +3128972 KE8VU Robert +3128973 W3DAW Orlando +3128974 N7EW Paul +3128975 N1VH Martin +3128976 K2TWZ Tom +3128977 K7DRQ Quentin +3128978 WA5X David +3128979 KA0FKL Bill +3128980 N5GI Rick +3128981 N5GI Rick +3128982 K6ON Robert +3128983 KG5CKM Mark +3128984 KG5CKM Mark +3128985 KB8IRQ Steven +3128986 KC2EZW Thomas +3128987 KJ7AOA Richard +3128988 WL7RV Robert +3128989 WB4NOL William +3128990 KX2CW Joan +3128991 N3JRC John +3128992 K3YW Eugene +3128993 N9IUA Calvin +3128994 WB4WDU Robert +3128995 W4SSB Manuel +3128996 KN4QNC John +3128997 WD5EFY Michael +3128998 NN4JB Milton +3128999 N3GVB Oscar +3129000 KD9LXK Edgar 3129001 W0PM John 3129002 W0PM John 3129003 N0EUG John @@ -80397,7 +98366,7 @@ 3129027 KE0CUJ Scott 3129028 KD0VXN Charles 3129029 KB0ULV Timothy -3129030 KA0YNW Jack +3129030 WX0STC Jack 3129031 KB0TPZ Mark 3129032 KD0ISH Richard 3129033 WE0Z Bob @@ -80405,7 +98374,7 @@ 3129035 KD0OHX Daniel 3129036 KA5YTH Theron 3129037 KD0OHX Daniel -3129038 KE0U Jerome +3129038 W0JD Jerome 3129039 KC0OKW Scott 3129040 K0MRR Michael 3129041 KD0RWX Melisa @@ -80581,6 +98550,7 @@ 3129211 KK9N Kenneth 3129212 N6TDM Donald 3129213 K0GOB Roger +3129214 N9AAT Michael 3129215 KB0DXS Brian 3129216 KE0KEU James 3129217 KE0KJM Salvatore @@ -80614,7 +98584,7 @@ 3129245 W0TLR Tim 3129246 KB7TOL Justin 3129247 KA0TER Daniel -3129248 K0CML Charles +3129248 W3WYO Charles 3129249 NE7DM David 3129250 W5GZT Rodney 3129251 K4DWJ Daniel @@ -80656,7 +98626,7 @@ 3129287 KD0ZCN Wesley 3129288 KD0IH Harry 3129289 W0PC Rick -3129290 NJ0Q Allen +3129290 W0GL Allen 3129291 KC5RT Fred 3129292 WA0QQD John 3129293 N0HKK John @@ -80679,6 +98649,7 @@ 3129310 WI0T Roderick 3129311 KB0LA Les 3129312 W5GZT Rodney +3129313 KN4OOH Charles 3129314 K0PWS Philip 3129315 AD0JA Jacob 3129316 KD0TNH Jeffrey @@ -80699,7 +98670,7 @@ 3129331 WB0LNS Michael 3129332 KC0YSY Steven 3129333 KA0OTL Jeffrey -3129334 WS0Z David +3129334 WS0Z Dave 3129335 N0RL David 3129336 KA0SXY Dennis 3129337 AA0GO Michael @@ -80724,8 +98695,11 @@ 3129356 K0WAT Ammon 3129357 WB0NTZ Dave 3129358 KB0EMB Larry +3129359 KI4DXC Ronald 3129360 NX9L Andy 3129361 K0BC Gary +3129362 W2OAB Oscar +3129363 N9NCC nathan 3129364 KD0FUE Paul 3129365 KE0MUE Nicola 3129366 N0JJA Roger @@ -80745,7 +98719,7 @@ 3129380 K0RLV Randy 3129381 NE7DM David 3129382 W0CEB Chris -3129383 K0RGH Richard +3129383 K0RGH Garrett 3129384 N0MTH Peter 3129385 N0MTI Janelle 3129386 W0RV Jerald @@ -80777,9 +98751,10 @@ 3129412 W0AO Robert 3129413 KB0TVM Richard 3129414 K0DEZ Paul +3129415 K5CLG Jeremy 3129416 KE0COU Timothy 3129417 W0UQJ Kelly -3129418 KE0U Jerome +3129418 W0JD Jerome 3129419 W0BDR Brian 3129420 KC0ATF Jeff 3129421 AD0YQ James @@ -80788,7 +98763,7 @@ 3129424 AD0RR Todd 3129425 N0IRX Garry 3129426 KE0ARR Michael -3129427 KA0YNW Jack +3129427 WX0STC Jack 3129428 NI0R Roger 3129429 AC0NF Helen 3129430 W0NMJ Michael @@ -80800,7 +98775,7 @@ 3129436 KA0YMJ Dan 3129437 N0FZF Norman 3129438 N0DAG William -3129439 KD0BQS Michael +3129439 KD0BQS Mike 3129440 KE0CRT Thomas 3129441 KC0ZGQ Nicholas 3129442 WD0X Joseph @@ -80820,6 +98795,7 @@ 3129456 W0TBL Tucker 3129457 N0XLR Kirwin 3129458 WL7YQ Stephen +3129459 KB4IA Stanley 3129460 KE0AYM Brandon 3129461 K0EHT Ronald 3129462 W1RMT Roy @@ -80868,9 +98844,10 @@ 3129505 N0NET Alan 3129506 N0NET Alan 3129507 KT0KNH Katherine -3129508 KD0FFP James +3129508 WW0O James 3129509 N0NOE William 3129510 K0DTT David +3129511 KB5ITJ Billy 3129512 K0CZP Clifford 3129513 N1FRZ Ronald 3129514 KE0HRS Laurie @@ -80881,6 +98858,8 @@ 3129519 W0RLM Richard 3129520 KE0NNK Charles 3129521 W0NQW Larry +3129522 KI7YOU ANDY +3129523 KD8OVQ Joseph 3129524 N0SDK Matthew 3129525 KF0H Alfred 3129526 N0AHY Terry @@ -80893,15 +98872,15 @@ 3129533 KD0NUI William 3129534 KC0QMU Steven 3129535 KE0OZU Dan -3129536 KJ6TQ George +3129536 KJ6TQ 3129537 KE0FOE Caleb 3129538 KC6ETI Ellen 3129539 AA0TB Timothy 3129540 N0CMT Adam 3129541 N0CMT Adam 3129542 KB0MAI George -3129543 K0NXA -3129544 K0NXA +3129543 K0NXA James +3129544 K0NXA James 3129545 AE0KU Stephen 3129546 KD0VKG Joseph 3129547 N0TRA Randel @@ -80914,13 +98893,14 @@ 3129554 W0EEE Missouri 3129555 N0ANI Justin 3129556 N0CBR Chadwick -3129557 K0NXA +3129557 K0NXA James 3129558 N2OYJ S 3129559 KY0LE Kyle 3129560 W0RDM Ronnie 3129561 KF0IQ William 3129562 KC0M Larry -3129564 N1SWK Ronald +3129563 KM6LJE Joshua +3129564 W0RGM Ronald 3129565 KC0JBH Daniel 3129566 W0KG Arthur 3129567 KC0IYI Jim @@ -80933,6 +98913,8 @@ 3129574 W0DE Stuart 3129575 KE0FGC Eric 3129576 NI0A Ricky +3129577 K0SAZ Steve +3129578 KM6NUY J 3129579 KD0VWB Dylan 3129580 KD0VWA Alex 3129581 KC0YYD Thomas @@ -80960,7 +98942,7 @@ 3129603 W0TSM Tom 3129604 AD0XU Paul 3129605 KB0QPJ William -3129606 KD0BQS Michael +3129606 KD0BQS Mike 3129607 KC0ELZ Joel 3129608 N0MII Jeff 3129609 W0UNZ Paul @@ -80977,7 +98959,10 @@ 3129620 W0MLL Mark 3129621 KC0LKV Andrea 3129622 KC0LKV Andrea +3129623 WH6ELN David +3129624 WV7B Ole 3129625 W0VHA Brad +3129626 W4RLE Robert 3129627 KD0WAB Shelley 3129628 N0SSC Sterling 3129629 AD4MR Adam @@ -81019,16 +99004,16 @@ 3129665 N0GRV Jeff 3129666 KE4ULG Steven 3129667 KD0JNN Chris -3129668 WS0Z David +3129668 WS0Z Dave 3129669 K0HQW Torsten -3129670 KE0DWG Arnold +3129670 W0AZZ Arnold 3129671 WI4T Gregory 3129672 KA0RLB Robert 3129673 AB0O John 3129674 K0GDI Greg 3129675 KC0MQG Gene 3129676 W0CCM Chad -3129677 N1SWK Ronald +3129677 W0RGM Ronald 3129678 KE0DWD Richard 3129679 N0CBR Chadwick 3129680 KA0SOG David @@ -81041,7 +99026,7 @@ 3129687 NR0Q Matthew 3129688 AD0UD Richard 3129689 N0SLT Stephen -3129690 KE0OCB Max +3129690 KM0XS Max 3129691 AA0Z Kyle 3129692 KE0QDK John 3129693 KC0WLU William @@ -81052,8 +99037,9 @@ 3129698 W0MAS Matthew 3129699 KE0QEC Frederick 3129700 KE0QEC Frederick +3129701 K9RVE Gary 3129702 KE0AUE Michael -3129703 W0YGH Richard +3129703 W0YGH Rick 3129704 KE0HWK Wade 3129705 KE0KIZ Tanner 3129706 KB0QPJ William @@ -81070,6 +99056,8 @@ 3129717 WY0M Michael 3129718 KD0TOP Amberly 3129719 N0EBM Elliott +3129720 AE0DN Alexandra +3129721 KD0ZKV John 3129722 KE0CZP Zachary 3129723 KE0CZQ Ryan 3129724 AE0FD Frederick @@ -81097,15 +99085,256 @@ 3129746 KD0MQN Jr 3129747 N0EVH John 3129748 KB0YYW Mark +3129749 W3OYJ Joseph 3129750 AC0JD Frank 3129751 KB0TWV Michael 3129752 KB0TWV Michael +3129753 KD2TM Antonio +3129754 KD4KZZ Jeremy 3129755 KA0PIZ Kenneth 3129756 WA6DQU Jerry 3129757 WA6DQU Jerry 3129758 KC0BCZ David 3129759 KC0BCZ David +3129760 KM4CKD Burrous 3129761 KE0CVI Kathy +3129762 W9OSI Dirk +3129763 W8DCB Daniel +3129764 NB1P Frantz +3129765 KB4MVU Jimmy +3129766 KE0TEG Jessica +3129767 W0BUH Arlyn +3129768 N3SCP Richard +3129769 KJ4HB John +3129770 N9MQG John +3129771 K7RRC Orlando +3129772 KI4RAD Will +3129773 N4CNX John +3129774 WD5I William +3129775 KI7WLU Jose +3129776 N8LXY William +3129777 KJ4HB John +3129778 KI7MNV Alexander +3129779 KB7PSN David +3129780 W5RI ISARI +3129781 KB3YHI Kevin +3129782 KA6PRW Steven +3129783 KI4RAD Will +3129785 KE4JLL Robert +3129786 KG5UEK Jacob +3129787 WK5X Lise +3129788 KC3DDT JOSH +3129789 KC8ZZS Gary +3129790 N4FAF James +3129791 KC3KMT Ralph +3129792 KD6VLX Clifford +3129793 K9LFM Lynn +3129794 KG6ZCR Bruce +3129795 K8ATG Andrew +3129796 KD7MPA Patrick +3129797 WA4DYD William +3129798 KQ6YG Rodel +3129799 AD0PO George +3129800 N7MIB Rick +3129801 KM4FYJ Scott +3129802 KG5VAQ Jeremy +3129803 KK4JMO Danny +3129804 WR5J Curt +3129805 N6PDQ Ernest +3129806 K0SAZ Steve +3129807 ZS6BC Brandon +3129808 KF4EVI John +3129809 KX9KX Thomas +3129810 KA2NZV Daniel +3129811 KN4GQS Patrick +3129812 KC3MOW Michael +3129813 KB3RFF Darin +3129814 KE4JSS David +3129815 KN4GQS Patrick +3129816 W3ZOO Donald +3129817 W0GI Robert +3129818 KG6AGF Roberto +3129819 NA6RS Ronald +3129820 KE0PX Darrell +3129821 KC9VPX Kenneth +3129822 KK4AHX Darren +3129823 K1JRO John +3129824 N6BSV Brooks +3129825 KM4VGY Clifford +3129826 KE0NPJ Carleen +3129827 K6ROQ James +3129828 KJ7BLE Christopher +3129829 KE5VXX Kenneth +3129830 K2EJ Steven +3129831 KI5CLC Amy +3129832 W0BDG Matthew +3129833 KI5CKY Brantley +3129834 KG5NWZ Brett +3129835 KE5JLR Bryan +3129836 KG5OEX Carl +3129837 K3TWM Thomas +3129838 KG5OET Carmen +3129839 KI5CLI Billie +3129840 KI5CLD James +3129841 KF5OTW Karla +3129842 KI5CKX Kasey +3129843 KI5CLB Lorraine +3129844 KI5CLH Loretta +3129845 KI5CLE Jean +3129846 KI5CLA Michelle +3129847 KC0JAR Ben +3129848 KG5ZNO Octavia +3129849 KI5CKW Sally +3129850 KI5CLF Sandra +3129851 KG5ZQO Yolanda +3129852 KC8BSW Stephen +3129853 WA3ZAV Geoffrey +3129854 KH6GQM Henry +3129855 KN4LNB Austin +3129856 KG8IU Jeff +3129857 W9DXM Jason +3129858 W9DXM Jason +3129859 KI7QMG Tim +3129860 K8JJM Jeffrey +3129861 W4BXR Glenn +3129862 KC3EXO Richard +3129863 AF6GM J +3129864 KC2PWW Charles +3129865 KG4DQE Charles +3129866 KE8KUC Rodney +3129867 WU0I James +3129868 KG5CUO John +3129869 KJ4YMF Vittorio +3129870 KB3LOD Michael +3129871 N7NIA Sidney +3129872 W1GBB Richard +3129873 KG4ZDF Ryan +3129874 KC8ZKI John +3129875 KD8PUD Larry +3129876 N5ZMX James +3129877 WA1HOG Dennis +3129878 KC5JLO Pierre +3129879 N6ZEN Daniel +3129880 KM4MKL Frank +3129881 W6VM Steven +3129882 KM6KHH Eric +3129883 KG4DQE Charles +3129884 KC4IRL Michael +3129885 KJ7DDR Wesley +3129886 KC1KTR NOAH +3129887 KE0UCR Aaron +3129888 KC3MTH robert +3129889 N0PBR John +3129890 W4RJP Robert +3129891 KM6ZDC Paul +3129892 WA7DEM Scott +3129893 KN4RVV Brett +3129894 WA7DEM Scott +3129895 KC3MRX steven +3129896 W8NSC Nick +3129897 KD9MFZ John +3129898 KC1KTR NOAH +3129899 W5POW John +3129900 NQ3I Charles +3129901 KM6YFK Bryan +3129902 KX4PF +3129903 N5WDD FORREST +3129904 KG5OEH Adam +3129906 KN4RUQ Chris +3129907 NI0U Mike +3129908 N5RMC Rick +3129909 K6KKK Ted +3129910 N2TYS Edward +3129911 W6KTM Suresh +3129912 KK6SET Sujay +3129913 KM6ZGT Jeremiah +3129914 WX5EMT Roland +3129915 KG6BXW Kyle +3129916 KM6YVT WEST +3129917 KI5CZK Adam +3129918 W5KAO Alexander +3129919 WX5EMT Roland +3129920 KI6VFG Herbert +3129921 KB5UZB Scott +3129922 KN4RWZ Jason +3129923 KC1KTX Joshua +3129924 WB5VUH Robert +3129925 KD0TKW Kimberley +3129926 KI5CXM Kevin +3129927 KM6ZGT Jeremiah +3129928 N2TYS Edward +3129929 KD7TQN Jason +3129930 KC1KUO David +3129931 N8VSI Scott +3129932 KD0HTI Brandon +3129933 N9BIG Nicholas +3129934 N6WNS Climaco +3129935 KE0SLT Cory +3129936 KN4RQL Ryan +3129937 KD8JFY Howard +3129938 KG4CUT Ronald +3129939 WA1OKB John +3129940 KJ7DCB Yen +3129941 KN4RWS Thomas +3129942 KI5CXL Evan +3129943 KC3MUK Timothy +3129944 KE0UDB Preston +3129945 N2MLX Harvey +3129946 K4XRT David +3129947 KJ7DAI Michael +3129948 KI7JJQ Barry +3129949 KM4PUK +3129950 N0ADN Heather +3129951 W8PZW Fred +3129952 W4ADS Alfred +3129953 K2JML James +3129954 K3DON Donald +3129955 KN4CWF Gary +3129956 N1XP Roger +3129957 KB1PAW Artur +3129958 N1WMM Edward +3129959 W5GEH Glenn +3129960 W5LN Carlos +3129961 KE0UER Joshua +3129962 NG1P Bill +3129963 NG1P Bill +3129964 KD5JDS James +3129965 KI7TLX Josh +3129966 KN4JEU Dobert +3129967 KJ7DIS Cameron +3129968 KI5USA Scott +3129969 AB0LV Lucian +3129970 K1ARI Ariel +3129971 KE6DID Victor +3129972 KE0UER Joshua +3129973 KI7WKZ Kelly-Shane +3129974 KG6BXW Kyle +3129975 KM6YIU Hector +3129976 KB0SFI ed +3129977 KM6ZCN Lucas +3129978 KE0UEH Ryan +3129979 KM6YFF David +3129980 N4FDS Fabian +3129981 KM6ZED Eric +3129982 WW7PSR President +3129983 K5TAO Mark +3129984 N8WXE Joseph +3129985 KM6ZEK Kent +3129986 K4SVD Michael +3129987 KM4RLS Ronald +3129988 KE5AKC Ken +3129989 K5WRZ Joseph +3129990 K5CDW Charles +3129991 K6KP James +3129992 K5JNT Stanford +3129993 KG7AII Theresa +3129994 KC8DGE John +3129995 K7RHE Richard +3129996 N3RDX Samudra +3129997 W1YCA York +3129998 N6AZV Robert +3129999 KD9MGA Alexander +3130000 KE5AKC Ken 3130001 K7MT Bill 3130002 KG6MQE Jim 3130003 AE7OD Merrill @@ -81174,6 +99403,7 @@ 3130066 WA7U Todd 3130067 KI7XF Harley 3130068 N7DWB Daniel +3130069 KN4RRL Chris 3130070 N6VS Leon 3130071 W9RDX David 3130072 KG7VJS Fred @@ -81188,7 +99418,7 @@ 3130081 NE7AL Neal 3130082 W0GIS Curtis 3130083 N8JFS Linda -3130084 KI7OYI Dwayne +3130084 WT7DB Dwayne 3130085 KG7DNM Troy 3130086 AC7V Eric 3130087 KF7TAH Falicia @@ -81204,10 +99434,12 @@ 3130097 KF7DER Renee 3130098 KG7RAV Robin 3130099 KG7LNA Darrell +3130100 W1YCA York 3130101 W7AMT Richard 3130102 KG7CCY David 3130103 KD7GUZ Alan 3130104 N7MTR David +3130105 K0UT Bill 3130106 N7BJS Gina 3130107 AG7DF David 3130108 K7KTR Keith @@ -81227,15 +99459,18 @@ 3130122 KN0WAY Ladean 3130123 KI7UXW Paul 3130124 KI7UXW Paul +3130125 WX4GPS Ronald 3130126 KC7RBC Jacquelyn 3130127 K7ZIN Raymond 3130128 KI7HLW Daniel 3130129 KL0RN Kody 3130130 AG7MH Joseph +3130131 W1VU Robert 3130132 KI7ULL Peter 3130133 WA7U Todd 3130134 KE7MCD Ramsey 3130135 W7MRI Donald +3130136 N1KTB Daniel 3130137 W7ED Todd 3130138 W7DOA Rahn 3130139 K7WGR Lynn @@ -81249,7 +99484,850 @@ 3130147 KA7WJI William 3130148 W9IWY Sandra 3130149 N0WPS Richard +3130150 N3NAC James 3130151 KI7JLH Darrell +3130152 KM5QX Michael +3130153 W5SDM Stephen +3130154 KN4KDV Grace +3130155 KI5DAM Paul +3130157 KM4RLS Ronald +3130158 WD6AXY Tom +3130159 N6PVY Jocelyn +3130160 KC3KOH Aidan +3130161 NE3R Joseph +3130162 K4MSR Manuel +3130163 KF6BM Theophilus +3130164 WB3AFS John +3130165 AB1IG Carl +3130166 KA4VXR Kim +3130167 N6NMC William +3130168 AB0WR Tim +3130169 KZ6BZZ Ted +3130170 KX4AA Robert +3130171 KD8AUB marvin +3130172 N6JAI Glenn +3130173 KB3SHN Michael +3130174 N1ANS CHARLES +3130175 W1LJM Frank +3130176 W4ADR THOMAS +3130177 KG7KFI Trent +3130178 W4CUB Robert +3130179 KD8BOQ Corey +3130180 KM6ZEK Kent +3130181 N8TFC Terry +3130182 KE0UFH Matthew +3130183 K0EMG Bruce +3130184 KC1SMR Mark +3130185 KI4GST Robert +3130186 KN4RTE Mark +3130187 KM6MWG Randy +3130188 NM7P Melvin +3130189 K9KFX Dru +3130190 N0LTM Steve +3130191 KB2G David +3130192 KE0LVS Brian +3130193 AC5PT Michael +3130194 N3GSP David +3130195 KC5GOW Gary +3130196 WX4WX Lance +3130197 KN4BFB Michael +3130198 N1MUD Jonathan +3130199 K7GYB David +3130200 KK5XA Michael +3130201 KE0SNY Gregory +3130202 KJ7DAI Michael +3130203 KK6ZML Harold +3130204 KE4SCS John +3130205 K5RDL Ruben +3130206 KD8YDE Daniel +3130207 KD2KCY Paul +3130208 KA7WYR Charles +3130209 AJ4GT Roy +3130210 KN4RQL Ryan +3130211 KD8YDE Daniel +3130212 N2SNY John +3130213 KE4OSL KIMON +3130214 KE8IQW James +3130215 KM6WSX Ronald +3130216 NR9H Dennis +3130217 KD2PPC Del +3130218 KI7YAL Beau +3130219 KD9ILB Jourdan +3130220 W9DJE David +3130221 N4RLM Robert +3130222 KF5MJW James +3130223 KE0JPE Robert +3130224 AB5YP Laura +3130225 KC5SOZ Floyd +3130226 W6ZFX Cesar +3130227 K3KTI Lester +3130228 KM6IAU Aaron +3130229 N6GEB Glen +3130230 N9ZH David +3130231 W8GMC Michael +3130232 AB0GD Gregg +3130233 KY4GPD Matthew +3130234 N0CBI Kermit +3130235 WD0DBS Doug +3130236 KC2ZAS Matthew +3130237 KG6FAB Jeffrey +3130238 K9JPB Daniel +3130239 KK6YGT Sonny +3130240 KC4MYV Ronald +3130241 N9ZH David +3130242 N6ARM Wallace +3130243 KN4JPV Richard +3130244 N6PMG Paul +3130245 KM6ZJX Abad +3130246 KE0PBI David +3130247 W0TPD Doug +3130248 N4RLM Robert +3130249 KM6ZKV Miguel +3130250 N8ME Mark +3130251 WO1I Richard +3130252 KK4JEV Charles +3130253 KC0NSW Shaun +3130254 N8TEJ Nate +3130255 W2BBT Blake +3130256 KI5CVJ Lilith +3130257 W2BBT Blake +3130258 K1PBO Barnstable +3130259 KI7SJY DENNIS +3130260 KI6ND Charles +3130261 KY4GPD Matthew +3130262 KB8QIK Edward +3130263 AK4QQ Roger +3130264 KE0UCP Brian +3130265 KC9MRO Michael +3130266 N2UEG Joseph +3130267 W1MJR Michael +3130268 W7RSL Robert +3130269 K6HZR Jose +3130270 KE0UJK Kathryn +3130271 KD9MHB Cory +3130272 N7IWQ Curtis +3130273 KE0EAK William +3130274 KF8SD Terry +3130275 K4MLA Laurence +3130276 NJ7A David +3130277 AE7HF Colin +3130278 KG7UCL Robert +3130279 KE5GUH Dennis +3130280 N5CSG Susanne +3130281 AA1CN John +3130282 N8SWT Matt +3130283 AB7XQ Ian +3130284 KN4FEE Timothy +3130285 N4TIK Kenneth +3130286 W1MJR Michael +3130287 KA0VEL Gerard +3130288 K4BGW Brian +3130289 KE0KZ Lawrence +3130290 KB4WQA William +3130291 N4CA Micah +3130292 W4DAI Daryl +3130293 N4DV Gerald +3130294 KK4LKO Timothy +3130295 K4BGW Brian +3130296 KD8GTX Michael +3130297 KC9MRO Michael +3130298 KM6GUO Jim +3130299 KK6WPV Ron +3130300 K7UHP Greg +3130301 AB9CR Reyes +3130302 W1VKE Vin +3130303 K8DLJ David +3130304 N4GDC Gary +3130305 WU2M Rocco +3130306 KW2Y Five +3130307 WW2G Cedar +3130308 K5DTG George +3130309 N4JAH Jesse +3130310 KD8DTO kevin +3130311 W1OCK Chris +3130312 AF5AC Gregory +3130313 K1BCC William +3130314 N5YOO Richard +3130315 K4BLP Byron +3130316 KM6GKV Hunter +3130317 N4RAH Richard +3130318 K0HDI Gary +3130319 KE5WLH Billy +3130320 KC0TJK Stephen +3130321 N0DTB Dorothy +3130322 K1BCC William +3130323 KE5WLH Billy +3130324 W6EMT Harliv +3130325 NW7W Andrew +3130326 KC3MEJ Robert +3130327 AF7UM Dana +3130328 N4TJS William +3130329 KB2ULZ Bruce +3130330 KN4LST Darcel +3130331 KN4LSX Jean +3130332 KA4CID Mark +3130333 AD9AD Armand +3130334 KC5FZG Jose +3130335 KD9MHE Daniel +3130336 KJ4BXS George +3130337 KI5CAD Albert +3130338 K4CKK Alfredo +3130339 KB2ULZ Bruce +3130340 KC5UCV Frank +3130341 WD0EIC Dennis +3130342 KF6OVV Ramon +3130343 KC5UCV Frank +3130344 KG4UHV Rosendo +3130345 KD6WFG Arturo +3130346 N4BQQ Mike +3130347 KC1KVR Michael +3130348 N8YUI Randy +3130349 KN4SBX Brett +3130350 KC1KWF Wayne +3130351 KK4GLT William +3130352 WN3EWP Ryan +3130353 KI5DCQ KAYDIN +3130354 WF6L Philomen +3130355 K7SB Lyle +3130356 KI7UBP Jason +3130357 WA4GBT Jimmy +3130358 KN4RJC Don +3130359 N3KW Gordon +3130360 KD4MMJ Thomas +3130361 W4STS Steven +3130362 KN4IMI Libby +3130363 KM6GKT Christopher +3130365 KE8KUY Tyler +3130366 K5JEF Jeff +3130367 KW5DS Dennis +3130368 K7SB Lyle +3130369 KM4VKA Jeff +3130370 N1JPT John +3130371 N1IDE John +3130372 W1SQM Jeremy +3130373 W7JFO Joel +3130374 AB5PJ William +3130375 KK4WBD Gregory +3130376 W9EKL Daniel +3130377 WB4LOE Larry +3130378 KN4IMI Libby +3130379 KN1Z Keisuke +3130380 KM4RWG Joe +3130381 WA2BTW Jon +3130382 KA1FNN Jonathan +3130383 N1ZLE Patrick +3130384 KG5JHR David +3130385 KR5J Julian +3130386 N6ARM Wallace +3130387 WD0EMI David +3130388 KC8KVA Christopher +3130389 KC3HHA David +3130390 NM5GB Garry +3130391 KG7LEA David +3130392 KA9MFY Wes +3130393 WL7CSL Michael +3130394 KC5JSR John +3130395 KG7YHS Shannon +3130396 KA5FPT Paul +3130397 N3ETV Charles +3130398 KK4GLT William +3130399 KN4KPT David +3130400 KA4VXR Kim +3130401 N5YOO Richard +3130402 WA4FEH Richard +3130403 KM4JAE Andrew +3130404 KN4NDL Michael +3130405 W5SLS Scott +3130406 K0GFU James +3130407 KB5OSW Kenneth +3130408 N6CUX Timothy +3130409 WI0Y Bernard +3130410 K0RBT Richard +3130411 W0UT John +3130412 KC8RYM Christopher +3130413 KD5PQJ Herbert +3130414 KE0PVM Jimmie +3130415 WA2IOS Mark +3130416 KJ6EUW Brian +3130417 N9TWO Jason +3130418 K4RYK Robert +3130419 K7PDZ Jim +3130420 WI3Z Al +3130421 KK6EQA Michael +3130422 K4WFJ Jack +3130423 WX1NWS Thomas +3130424 W3OKU Rich +3130425 N6RDA Ryan +3130426 KN3H Roy +3130427 N4MJR Michael +3130428 KG4JWW Alex +3130429 N1KK Ken +3130430 N0KIN Kenneth +3130431 N2NHS Robert +3130432 AF6VB Alexander +3130433 KA8HAK James +3130434 W8BDE Don +3130435 WB0ZRD Paul +3130436 W2RIT James +3130437 KG5IIU Tim +3130438 KC3MVT Mark +3130439 WA2PBR Frank +3130440 KC3FBF Otis +3130441 WA2PBR Frank +3130442 KN4OXG Angel +3130443 KE5ESU Randy +3130444 AC8CB Cliff +3130445 K9AMT Alexander +3130446 KA3JSD Dave +3130447 KN4OXG Angel +3130448 W1SQM Jeremy +3130449 KJ7DLU Lloyd +3130450 K2RJ Ronald +3130451 KG4UWA Marshall +3130452 KC3MWB Raymond +3130453 W5LST Eddie +3130454 KD9JCF David +3130455 KA4KKF David +3130456 W7LUK Marek +3130457 KE4TRG steven +3130458 KE0SEP Thomas +3130459 KD4OVI Horst +3130460 KJ7DLU Lloyd +3130461 W2WCM William +3130462 KE5ESU Randy +3130463 G7LWN Vince +3130464 W4HKL Steve +3130465 KN4NOM Shawn +3130466 N8RJP Ryan +3130467 KA4SKF Maryanne +3130468 KF4ACP Jonathan +3130469 WB2BIS Larry +3130470 KD9DD Danny +3130471 KE8LCW James +3130472 KI5CCT Nicholas +3130473 AJ6FQ Ronald +3130474 KM6ZKE Francisco +3130475 KC6LCA Patricia +3130476 W6DMC Daniel +3130477 KD2RDR Skynet +3130478 N0XWB Daniel +3130479 KN4RFA Aidan +3130480 KM6LKP Gary +3130481 KD0SGF Zach +3130482 WB7USV Walter +3130483 KF5YKP John +3130484 W0HLO Harlan +3130485 WE4RA David +3130486 KA7MEK Eric +3130487 KI4KK George +3130488 K8HSY Ronald +3130489 KD2RDR Skynet +3130490 KG7LEA David +3130491 KM6ZKE Francisco +3130492 WA1WQC David +3130493 W4ONI Harry +3130494 W5WYQ Gary +3130495 N2WOL Douglas +3130496 K6RTO Robert +3130497 KM6ZKO Donald +3130498 W8CH Ralph +3130499 W4BAE Bruce +3130500 WA6MHZ Patrick +3130501 N7ZMW Greg +3130502 K7CIP Cristian +3130503 KI7WED Shelly +3130504 KC9ONY Thomas +3130505 KC0HFL Robert +3130506 AA7GT Greg +3130507 N4SFC STEVEN +3130508 KE7QPK Paul +3130509 W2RIT James +3130510 KE0OMT Erik +3130511 N5LEV Otis +3130512 KC1JQP Richard +3130513 KG8CW Michael +3130514 KX4PU David +3130515 KI5DDG James +3130516 KC1EPL Hayden +3130517 KC6JPG Roland +3130518 K9JDN John +3130519 AD8DM John +3130520 W8AJV Aj +3130521 KN4RTV Austin +3130522 N9RUN Michael +3130523 AB7LG William +3130524 AH6JS Jay +3130525 KB0AHR Rick +3130526 KE5GGY Peter +3130527 KM7RDS Richard +3130528 KK6SJE Anthony +3130529 KD0ZXH David +3130530 KD9LOU Stephen +3130531 N1SMO Alyason +3130532 N3NKA Douglas +3130533 KB2NQT John +3130534 KM4WZP Luis +3130535 KD9LSZ Jeffrey +3130536 KD8LYX Larry +3130537 KC1JUA Jim +3130538 W5LRU Victor +3130539 WD8CJN Paul +3130540 KM4QIP Frederick +3130541 N2RGM Raymond +3130542 K2MCT Richard +3130543 KE4IDW John +3130544 KM4NT Bruce +3130545 KM6RNG Ton +3130546 WH6CPH Creighton +3130547 N5OEQ Richard +3130548 AG6WG Terry +3130549 KF5TMT Austin +3130550 KD9MEJ Michael +3130551 K5GTO Corey +3130552 K9JEP James +3130553 KF7AFE JOYCE +3130554 W6CSS Sid +3130555 NU6R Nick +3130556 KG8R Merrell +3130557 W7ACS Seattle +3130558 W7TOY Susan +3130559 KE6RUI Scott +3130560 KT4WI Samuel +3130561 N8BOC Donald +3130562 KM4CEO Scott +3130563 NU6R Nick +3130564 KM4CEO Scott +3130565 W7ACS Seattle +3130566 KC2REY Ken +3130567 KC2REY Ken +3130568 KM6WFW Kevin +3130569 KB1GKN RUSSELL +3130570 K0VN Gene +3130571 N6AD Wolcott +3130572 W9SN Steve +3130573 KW0P Kurt +3130574 K8YK Chad +3130575 W1PAA Prince +3130576 N3JPV Randall +3130577 KG4JSK Anthony +3130578 N0PKZ Clarence +3130579 KC0HWG Tim +3130580 K6SRS Steve +3130581 W6TPA Thomas +3130582 K7DNV David +3130583 KE5NL BILLY +3130584 AJ4DW Carl +3130585 N4MSE Jeff +3130586 KV7D Adriano +3130587 W1PAA Prince +3130588 KI5CHP Sandi +3130589 KC5OMK Monty +3130590 KF5ZEW Jerry +3130591 KD4YJV Gerard +3130592 KN4GPE Edwin +3130593 KJ7AIK Lucas +3130594 K2HOG Sam +3130595 KM6POO Valley +3130596 KE0UJS +3130597 KB4RHM Robert +3130598 KD9MJI Richard +3130599 W8RLJ Richard +3130600 K1WLJ William +3130601 N2ZG Richard +3130602 KM6DRE Ruben +3130603 KC1ETT James +3130604 KE6MYV Douglas +3130605 WD0END Ronald +3130606 WA5TET David +3130607 KK4PEZ Roberto +3130608 KE8KLM Nathan +3130609 WD0BIA Gary +3130610 NV0R James +3130611 K1DCA Don +3130612 KE8FMJ Elizabeth +3130613 N3COB Glenn +3130614 KC0HWG Tim +3130615 KE0OLQ Sean +3130616 KE5TJP Mark +3130617 KI7ICE Don +3130618 KK6ONZ T +3130619 KC5RIL Robert +3130620 KB5WNE David +3130621 KC2LVO Jacques +3130622 WA0STX John +3130623 WB9NOE Roger +3130624 N9UV Roger +3130625 N0SPC Jared +3130626 W3JAY Jason +3130627 KC8BPF Mark +3130628 WB0HTW Carl +3130629 N0SPC Jared +3130630 WA8B Keith +3130631 KG2DWS Dennis +3130632 KB0LRR Daniel +3130633 KO0NTZ Gary +3130634 AB8WW Donald +3130635 KK6WUB Doug +3130636 KD5OUG Douglas +3130637 N4WI Fred +3130638 N3BAT James +3130639 W6IVY Ivory +3130640 K8UHF Jim +3130641 KJ6NTO Robert +3130642 KD4VWE Christopher +3130643 K1FFK eric +3130644 N6YQ Robert +3130645 WW8PR Paul +3130646 N6XXL Jose +3130647 KA1OA bob +3130648 N1WM Eric +3130649 KE0CRR Mark +3130650 NE2Z Joseph +3130651 NE2Z Joseph +3130652 K2SCH Patrick +3130653 KD4DPJ Bart +3130654 KM6LGN Scott +3130655 KN4RRW Lisa +3130656 N6YDT RW +3130657 KK4IKE Oscar +3130658 KM4RCJ Ronald +3130659 W3DKT Charles +3130660 KB3JJY Ian +3130661 KE8HNE Jason +3130662 KK7DO Robert +3130663 KE0QMG Rob +3130664 N9ENR Loren +3130665 KM6SMV Sarah +3130666 KN4PHQ John +3130667 KI5DEF John +3130668 KM6ZRA Kent +3130669 KI6STW Kevin +3130670 NS2K Scott +3130671 KC0TJK Stephen +3130672 KB1UZU Nicholas +3130673 KC5PWN Debbie +3130674 K0JRL Roy +3130675 K9MFJ Michael +3130676 KE0UGP Jesse +3130677 KV2J Lynn +3130678 KN4SGA Jane +3130679 KV2J Lynn +3130680 KM6SMV Sarah +3130681 K7RWB Rowland +3130682 KN4SIR David +3130683 KG5VIN Craig +3130684 KE0LTX Nathan +3130685 W4HDJ Daniel +3130686 KD2RIY Pamela +3130687 N4JTP Hugh +3130688 N9QJI Robert +3130689 W6PD Philip +3130690 N9QJG Rebecca +3130691 KI7WEE Armando +3130692 KC9IAA William +3130693 KG5YGJ david +3130694 W6DEJ Don +3130695 W2IVV Parth +3130696 N2JKV John +3130697 KI6NTD Ruben +3130698 WA2LEY William +3130699 K0QS Harry +3130700 K7RWB Rowland +3130701 K6DUX Irving +3130702 W7LUK Marek +3130703 K0QS Harry +3130704 KE0LTX Nathan +3130705 KK6QWZ Marc +3130706 AA4MJ Bill +3130707 K8MCN Kelly +3130708 KP4PC Francisco +3130709 WX4MWA Matthew +3130710 KE0EAH John +3130711 WH6FLO Matthew +3130712 K2ESE Thomas +3130713 KE6DUG Richard +3130714 KN4SFW Nathan +3130715 KA0FCT Walter +3130716 KN4KAG Jonathon +3130717 KN4SBM Kevin +3130718 N4JJJ Johnny +3130719 N6ZGA Bishop +3130720 W1JCR Chris +3130721 W7EKD Jeremy +3130722 KD2RIY Pamela +3130724 KE8LEP Kevin +3130725 KE8LEP Kevin +3130726 KN4OFJ Jim +3130727 KE8KLM Nathan +3130728 KM6ZMR Jeff +3130729 AJ9H Rich +3130730 W8OOT Robert +3130731 N0CBI Kermit +3130732 KC4UJN Robert +3130733 WA3U Dave +3130734 KB3YHI Kevin +3130735 KI6FOX Brian +3130736 K9BL Robert +3130737 KN4CLP Frank +3130738 N0CSA Thomas +3130739 K4RLK Ronnie +3130740 N0VQ James +3130741 K4CLE Douglas +3130742 NQ2X English +3130743 K1ENB Erin +3130744 W6CRC Ron +3130745 KE8KUV Bruce +3130746 KD7TRN Thomas +3130747 KD0LDK Kyle +3130748 KC1KNB Sean +3130749 KC9NPJ Jarrett +3130750 AC6OT Salvador +3130751 AC6OT Salvador +3130752 KF6EKC Jose +3130753 KF6EKC Jose +3130754 KE8VS Vern +3130755 KJ7BNF Paul +3130756 KN4FRI William +3130757 N7KDC KEITH +3130759 W6EMS Emilio +3130760 KN4QVR Richard +3130761 KG5ELE Andrew +3130762 KK4ONU Jonathan +3130763 K1NDG Normand +3130764 KN4JCA William +3130765 KD0TIV Gerry +3130766 KK4ELO David +3130767 K8IQ Nathan +3130768 KI7KBX Brian +3130769 KN4SKD Jerry +3130770 W6DP James +3130771 N3OKU Sandy +3130772 N3OKU Sandy +3130773 W2RDK Ron +3130774 W4WRB William +3130775 N2UOM Modesto +3130776 KD2NFQ David +3130777 KB2VYZ Frank +3130778 N4RDZ Ronald +3130779 WH7BR Paul +3130780 N3RP Rob +3130781 KN4SGX Mark +3130782 KM6ZZZ Gus +3130783 KN4SKN GREG +3130784 KC8SJM Mark +3130785 KQ4CV Stephen +3130786 W2AE W2AE +3130787 W7EMJ Elvira +3130788 KN4SKH Christopher +3130789 N0TRX Michael +3130790 K9OHI Thomas +3130791 K2GXT RIT +3130792 AG4AW Gary +3130795 KC2LVO Jacques +3130796 W6VS Richard +3130797 WA9YVL Marc +3130798 KK4PC Norman +3130799 WG0AT Steve +3130800 KC1GNJ Joshua +3130801 K9ZDX Harrison +3130802 AB9VJ Randall +3130803 K6AKK John +3130804 AJ0M Brian +3130805 N0NWS Skywarn +3130806 KG4JJS Tim +3130807 N1MMT Gregory +3130808 KM6HID Steven +3130809 N5VX Dale +3130810 N4EVJ Elixander +3130811 KN4SAZ Saddam +3130812 AG9SG Antonio +3130813 KM4ASH Craig +3130814 W6LGE Jeff +3130815 K6BW +3130816 K6LGT Lee +3130817 N2OHB Christian +3130818 W3NN Nancy +3130819 KE6JZ Shane +3130820 K9ZDX Harrison +3130821 K2HZ Richard +3130822 NA0US Livingston +3130823 KN4BYB Robert +3130824 W9HFQ Elmore +3130825 AC0AX Hal +3130826 KA0CBR Douglas +3130827 KB4MDE Brad +3130828 KC1KXF Roger +3130829 KC1CPA Thomas +3130830 N9RAJ Darin +3130831 KC8ZAC Richie +3130832 WD9ICL Joel +3130833 WB0RSJ Taylor +3130834 WU2M Rocco +3130835 WW2G Cedar +3130836 KW2Y Five +3130837 K2MCI William +3130838 KE5BCP Jay +3130839 KN4SLL Kimberley +3130840 N7WGH William +3130841 KF7UWR Ronald +3130842 KI5DEY Alan +3130843 KD8THX Jeffrey +3130844 KD2IPD Reid +3130845 KN4QLP Gary +3130846 KX4NM Jeffrey +3130847 KI7JOU Prasad +3130848 K1DEG Michael +3130849 K8KDR Matthew +3130850 KN4SEI Bradley +3130851 KD2RHT Cliff +3130852 KC5YWZ Chris +3130853 KK4MQK Timothy +3130854 KM6YPQ Emmanuel +3130855 KE5KG Kenneth +3130856 KE4PNQ Cedric +3130857 KE0RYG Martin +3130858 KK4ZC Jeffry +3130859 KM4SEC Honel +3130860 K1DMM David +3130861 W4QA Rush +3130862 WB4NOL William +3130863 W2AE W2AE +3130864 KC1CPA Thomas +3130865 N9JXN Jeffrey +3130866 WY0ROB Robert +3130867 N9DPR Richard +3130868 KG4OKG Peter +3130869 W3OFT Frederick +3130870 KN4NTD John +3130871 KE0TDH Marie +3130872 N0XJJ Bobby +3130873 K0KOC Sergej +3130874 K0KOC Sergej +3130875 KS3M Skip +3130876 K6IG Paul +3130877 KC2WGV Matthew +3130878 KG4LYD Armando +3130879 W4MLP Matt +3130880 K0AJS AJ +3130881 N1MMT Gregory +3130882 KC5GLG William +3130883 KC8TDS Timothy +3130884 N6LMA Carrie +3130885 KK4ZFL Connie +3130886 AC6GD stu +3130887 KD4LPU Ronald +3130888 KM4MFX Anthony +3130889 KJ7DCL John +3130890 KA8BNJ Gregory +3130891 KC3FBL James +3130892 KN4PWD Alexander +3130893 N1RGT Scott +3130894 N6WL William +3130895 W9ZH Marshal +3130896 KC6DSH Michael +3130897 KI6HFQ Michael +3130898 N7BRB William +3130899 N4CET Lynn +3130900 KJ7DCL John +3130901 N0XJJ Bobby +3130902 KE8KTI Bryce +3130903 KI6HNC Randy +3130904 K6ARK Adam +3130905 AA4VI Larry +3130906 KE8JAU Jacob +3130907 W2MOR Guery +3130908 NR5W Doug +3130909 KD4FNJ Alberto +3130910 N8TIM Timothy +3130911 KE6WOB Mark +3130912 N5UMT Mark +3130913 KE0TLE James +3130914 KA0SPM steven +3130915 KC2YME Douglas +3130916 KI4FYQ Jeremy +3130917 K2GXT RIT +3130918 W0ILC Daniel +3130919 K2ODV George +3130920 KJ7CGD Richard +3130921 W1IK William +3130922 K8COH Michael +3130923 KD8COR Adam +3130924 K1DMM David +3130925 KJ5HY Stephen +3130926 AC0BA Matthew +3130927 KC1KWK Jacob +3130928 KD9KYA Richard +3130929 KN4RTO Gary +3130930 KN4RTN Drew +3130931 N2NEI Nathaniel +3130932 WA4OHV Thomas +3130933 KE8JNL Dennis +3130934 KW4VA Warrenton +3130935 K1RA Andrew +3130936 KD9MAB Brent +3130937 WH6FLH Richard +3130939 K4DWJ Daniel +3130940 KD2DPH Adam +3130941 KL4JN GREGORY +3130942 W6RDZ Edgar +3130943 WB9HIE Wayne +3130944 KL4JN GREGORY +3130945 WB9HIE Wayne +3130946 KC9UKM Jason +3130947 KI7YOU ANDY +3130948 KM4EUT George +3130949 KI6BML Alfred +3130950 W5BBR Bill +3130951 KC0NSC Thomas +3130952 N0SRO William +3130953 KN4SCU Daniel +3130954 AB3VZ Vijay +3130955 K9LUC Bradley +3130956 WA6URS Barbara +3130957 N8LWX Steve +3130958 KC9UMR Kenneth +3130959 AG6FA Tempark +3130960 KE7KRE Dennis +3130961 AA6ND Gary +3130962 W6LDA Larry +3130963 KC1HHG Todd +3130964 WB4EL Ernest +3130965 K5YXN Bruce +3130966 KE0UEO Thomas +3130967 KB1NOX Richard +3130968 KB0IMB Robert +3130969 AA4HF Harvey +3130970 WB4N Robert +3130971 KM4IEA Timothy +3130972 WA2NRV Stanley +3130973 KG5TOD Adam +3130974 W0RHP Philip +3130975 KI7YOS Alexander +3130976 KD2BJG Bobby +3130977 N3JTW Kurt +3130978 WA6FEO Thomas +3130979 KI5DIT Tom +3130980 KG7PTP Albert +3130981 N2EEI Steven +3130982 KG7PTP Albert +3130983 WU6X Dennis +3130984 KM4SKZ Garrett +3130985 KD5ITI Trent +3130986 N7LMV Jerry +3130987 KJ6KNH Michael +3130988 WA6LVX Paul +3130989 KB0RRD +3130990 W3BJ John +3130991 AB1KR Adam +3130992 KA0ELC Vern +3130993 KB0RRD +3130994 NC6A Don +3130995 KD0MRC James +3130996 KI7WKZ Kelly-Shane +3130997 N5TEC James +3130998 N3VXM Terry +3130999 K9HDT Harry +3131000 KE0UPN Chris 3131001 K0BOY Doug 3131002 K0BOY Doug 3131003 WB0QQK Frank @@ -81378,11 +100456,13 @@ 3131126 N0HA Henry 3131127 WH6BUL Wayne 3131128 N4OWG John +3131129 AD8AP James 3131130 K9NHP Ronald 3131131 N0YNB Kenneth 3131132 KB0IOF Mary 3131133 W8WL William 3131134 W0MEG Michael +3131135 KN6PH Paul 3131136 NW7US Tomas 3131137 NW7US Tomas 3131138 K0BNM Bryan @@ -81406,6 +100486,7 @@ 3131156 WD0BFO Thomas 3131157 KC0FAN Michael 3131158 N7AZN Byron +3131159 KD4Y Herbert 3131160 NB0B Robert 3131161 WB0AEA Kurt 3131162 K0GQK Robert @@ -81416,6 +100497,7 @@ 3131167 KC0OAU 3131168 KE5HSA Jon 3131169 KA0VNY Kevin +3131170 KD4SR Joseph 3131171 KE0KWX Mark 3131172 W0UVQ Roy 3131173 K9FAX Jordan @@ -81426,6 +100508,7 @@ 3131178 KC0UJM Timothy 3131179 KR1STO Kristopher 3131180 K0QBZ Robert +3131181 N6MA D 3131182 K0CKH Charles 3131183 N0XAT Joseph 3131184 KD0NMD Dudley @@ -81440,6 +100523,7 @@ 3131193 KE0JVS Thomas 3131194 N0RMM Jeffrey 3131195 KD0WDQ Michael +3131196 W9CJX John 3131197 KE0OKE Ryan 3131198 NG0M Myron 3131200 AA0VA Richard @@ -81468,11 +100552,14 @@ 3131223 KE0QBM Thomas 3131224 KE0NEU Craig 3131225 K3NE Alan +3131226 W7EFJ Donald 3131227 W0ZY Dave 3131228 W7UP Daniel 3131229 W0CHF Stanley 3131230 WA0SOP Norman +3131231 WB5RVV Joe 3131232 W3ALX Alexander +3131233 K2BIO Donald 3131234 KC0DHM Michael 3131235 KC0DHM Michael 3131236 KB0GRP Eric @@ -81483,10 +100570,11 @@ 3131241 KC0EQA Douglas 3131242 W0NWS Skywarn 3131243 KE0QLF Robert -3131244 KE0HZX Brian +3131244 NI0P Brian 3131245 N0WQK Mark 3131246 W0ZY Dave 3131247 W7UP Daniel +3131248 K9FHP Barbara 3131249 W0ZYD Debra 3131250 KE0QBM Thomas 3131251 AG0L Steven @@ -81498,6 +100586,7 @@ 3131257 K0XTC Tom 3131258 KC0HMI Kurt 3131259 K0RPT Edward +3131260 KE0UPR Gabriel 3131261 KD0LXK Leonard 3131262 N2AO John 3131263 N2AO John @@ -81507,6 +100596,730 @@ 3131267 KE0PFR Charlotte 3131268 K9VKC Stefan 3131269 KE0RNS Lola +3131271 N8VJJ Timothy +3131272 KG6MNI Sevag +3131273 WE4GOT Niki +3131275 WB3LJT Jarred +3131276 KK6CVF Yamil +3131277 K5KGC Kaden +3131278 W4CFD Bryan +3131279 W4CFD Bryan +3131280 KQ6A Shinichi +3131281 KQ6A Shinichi +3131282 KI5DIR Clinton +3131283 KC7LNQ Phillip +3131284 K2NJO Nathaniel +3131285 K0JTR Jeffrey +3131286 W7PUB Ian +3131287 KB8YRJ Christopher +3131288 N2NEI Nathaniel +3131289 W4BZM Michael +3131290 KD2RJZ STEPHEN +3131291 KI5DIA Tyrone +3131292 KI5DJD Robert +3131293 K0OK Bob +3131294 KB9UFN Donald +3131295 KT1D Tim +3131296 KN4UC Danny +3131297 KC2JED Jim +3131298 K0BE Barbara +3131299 KJ7DGF Camila +3131300 K1DJB Daniel +3131301 K7QNX Johnathan +3131302 AA3JC Joseph +3131303 KB8YRJ Christopher +3131304 N3FSK FSK +3131305 KE0LCI Susan +3131306 W9ALN Allen +3131307 KE0QQS Aaron +3131308 NU2H John +3131309 K9GPV Michael +3131310 KG4STS Michael +3131311 KC7HAM Jeffery +3131312 N7FD James +3131313 K8LEN Patrick +3131314 KE0QQS Aaron +3131315 KG5RG Russ +3131316 N4CWZ Dave +3131317 N4CWZ Dave +3131318 K1DBJ David +3131319 KI4SMH Chris +3131320 AC5SE Sean +3131321 K6WWO William +3131322 N2VBW Lynda +3131323 KM6ZVP Philip +3131324 KD2RGU Matthew +3131325 NO8F Anthony +3131326 AC5SE Sean +3131327 KJ7AOA Richard +3131328 KE5NL BILLY +3131329 WD4EPH David +3131330 N8ADO Robert +3131331 K0RQ Jacob +3131332 N6KMA Brian +3131333 KA0IST Jack +3131334 KC7WZW Ken +3131335 KH6RT +3131336 KB7WDC Alan +3131337 KE8JNT Cynthia +3131338 KB0OU John +3131339 KE5BNO Kenneth +3131340 KE7IYW Anthony +3131341 KI5DHG David +3131342 W9FT Ronald +3131343 KN4ORP David +3131344 W2LGA Frederick +3131345 KE0TEJ Brett +3131346 KA6N Thomas +3131347 KB7RJF Mark +3131348 KM6ZSX Darrin +3131349 W4SAT Larry +3131350 KC3MVN Joseph +3131351 N8SFJ Dan +3131352 KN4MHV Adam +3131353 KI7RMU Jack +3131354 KN4MHV Adam +3131355 NZ2O Casey +3131356 KC9YMH Forrest +3131357 NO9D Edgardo +3131358 AA2GC Ted +3131359 KB3EGW Matthew +3131360 KD2RKV Jesse +3131361 KA4DAM ADAM +3131362 KA4DAM ADAM +3131363 KC8BPF Mark +3131364 N3REN Travis +3131365 N9AWQ John +3131366 KD7PSN Michael +3131367 KM4ICI Xiaoyu +3131368 KI7YHC Alvin +3131369 W6WBT Phillip +3131370 K5CRJ Alan +3131371 K0DMT Travis +3131372 AA7QK Nicholas +3131373 KK4MSL Roberto +3131374 W5JLG John +3131375 W2JRW James +3131376 KD0AEL Patricia +3131377 KD8UT James +3131378 K6BLA Scott +3131379 KC9OKM William +3131380 KB4NOT Danny +3131381 KG7NWH Mark +3131382 KI7JTM Craig +3131383 K1JDS Jason +3131384 W9MXC Larry +3131385 N4WXB Robert +3131386 AC4WT Yves +3131387 WW6CP Chito +3131388 KC8QVA michael +3131389 K6BLA Scott +3131390 W4TVL Randy +3131391 KD5YYA Thomas +3131392 W5VDX Michael +3131393 W7RQP Don +3131394 K8HB John +3131395 KJ4YPN Larry +3131396 KJ7CYC Terry +3131397 AJ4AL David +3131398 KI5DJW Kenneth +3131399 W4IPC Connor +3131400 KD9FOV Billy +3131401 AC7MP John +3131402 KB1DBL Michael +3131403 N6PV James +3131404 KI7PAL Robert +3131405 W5JMW John +3131406 KG2DWS Dennis +3131407 KX4AK Nelson +3131408 KL7JFT Don +3131409 KE8LJH John +3131410 KB0UDD Castle +3131411 KC6WQM Rene +3131412 KN4RNJ +3131413 K2OCJ Allen +3131414 KI5DGN Paul +3131415 KK6PDO Bob +3131416 WA1YZP Steve +3131417 KJ7DED Michael +3131418 W0MIL Milan +3131419 KJ7DJT Daniel +3131420 KD9ICU Maximilian +3131421 N8EHW Thomas +3131422 K5WDG David +3131423 KJ4MFJ Scott +3131424 KE7VXB Jacob +3131425 K9OY Gregory +3131426 KD0YST Karl +3131427 AJ6CO Manuel +3131428 KF6OTQ Steve +3131429 KJ7BDD Michael +3131430 N6RNN Roger +3131431 AF7HL Paul +3131432 KE0TPZ Orion +3131433 K9OY Gregory +3131434 KB0UDD Castle +3131435 NU2H John +3131436 KC9FSC Deborah +3131437 KY4OKH Michael +3131438 WU1K John +3131439 W1VYN Vyn +3131440 K1PHI PHIL +3131441 KE8MSP Matt +3131442 KF6MCD Richard +3131443 W3LIE Elie +3131444 KF6OTQ Steve +3131445 AC9UV John +3131446 W6MHZ Shawn +3131447 N6YGN George +3131448 N4KYO Spencer +3131449 KI4JWP Steven +3131450 K4SLZ Sandra +3131451 KG4MOT David +3131452 KG6BMQ Mary +3131453 N0HWY Thomas +3131454 KI4YPW Linda +3131455 KB5STL Glen +3131456 KN4FCG William +3131457 KN0GLL Gary +3131458 KJ6PTW Jarie +3131459 KD4GGU Ollie +3131460 KI5DJR Thomas +3131461 W2MPR Martin +3131462 W6EZY Farrell +3131463 AC2GI Richard +3131464 KD9CSS Jeff +3131465 N6FOS Willie +3131466 AB2KW James +3131467 K5WDG David +3131468 KS4TY George +3131469 KO6MD Malin +3131470 N0KOM Terry +3131471 N8SOT Brian +3131472 K5JJR Jeffrey +3131473 K7AIL Jeffrey +3131474 KC8RYW Jonathan +3131475 W4DMV Densie +3131476 KB3QAQ Robert +3131477 W7JPJ John +3131478 AE4SE Curtis +3131479 N4JMF Jennifer +3131480 KB4ACP Robert +3131481 N3FOL Michaelangelo +3131482 KA5HET Stephen +3131483 KG7HRR Jerry +3131484 KJ7AWM June +3131485 KJ7DWJ Franzi +3131486 N6PRX Marty +3131487 KC3CKM Jeerakorn +3131488 KD4WVR Douglas +3131489 K5CIS Brian +3131490 KE7DUX Ethan +3131491 KC3CKM Jeerakorn +3131492 KG5RRC Paul +3131493 WA7BCE Barry +3131494 N7VIA Chris +3131495 KG5ZNJ Francis +3131496 N0FKK Jamieson +3131497 N0FKK Jamieson +3131498 N0FKK Jamieson +3131500 KX4QK Nicholas +3131501 KD9LWO Nathan +3131502 KC2GNC Edwin +3131503 WE7CB Chad +3131504 N0TDQ Roger +3131505 K4TRG Terence +3131506 N4APX Donald +3131507 KB6OGI thomas +3131508 KG7SPF Kerry +3131509 W1MOZ David +3131510 AB9HL Peter +3131511 KC3MIV Daniel +3131512 W6SAT Ted +3131513 KC2GQK Cory +3131514 AC3CD Raymond +3131515 KE8FXB James +3131516 KM6ZFU Rosaleo +3131517 KD7ZPJ Loren +3131518 N2CSA Frederick +3131519 KF5GLB John +3131520 K4JK James +3131521 K1PHI PHIL +3131522 KJ7BDD Michael +3131523 K4HCH Henry +3131524 KB9KC Kenneth +3131525 W3YNX Herbert +3131526 KB9SLM Steven +3131527 KB0SL Wayne +3131528 N2JZ Michael +3131529 KE0DQQ William +3131530 KB0KFH Joseph +3131531 KB3PHR Ronald +3131532 N8VJJ Timothy +3131533 WA1OJN Robert +3131534 W2SU Ferdinando +3131535 AI4JC Johnny +3131536 KF6ITC Jose +3131537 K4RUK Jonathan +3131538 NZ6D David +3131539 KD9SK Shawn +3131540 WB1ZPM Timothy +3131541 KF6ITC Jose +3131542 K4TOI Vance +3131543 KI4RTV Greg +3131544 KK4LUK Elliot +3131545 AF0Y Scott +3131546 KB0DI Heenan +3131547 W6SEF Scott +3131548 K3OVY Ronald +3131549 KJ7DYQ Max +3131550 KD2OCX Guy +3131551 KG3S Gregory +3131552 K3OZB Jack +3131553 KD9ICP Rodolfo +3131554 W2ANN Justin +3131555 N1YKH Michael +3131556 W4CLG Carson +3131557 KD8VMG Curtis +3131558 N4PTC Gary +3131559 KK4KED Jeffrey +3131560 KE8LHX Edward +3131561 KM4ODV James +3131562 KI6LNP John +3131563 K4KJQ Bluegrass +3131564 KE7ZVL Bryan +3131565 KC1BOS Jonathan +3131566 AF6WA Henry +3131567 KG3S Gregory +3131568 WA4SYE dennis +3131569 WD6S Robert +3131570 KN4SHF Dallas +3131571 KB5RJ Randy +3131572 KH7LM Beverlin +3131573 KJ7DHY Edmund +3131574 KJ4QMO Michael +3131575 WN3EWP Ryan +3131576 AF6FW Art +3131577 KA6OXP Nicholas +3131578 KB4ACK Mary +3131579 K9RVE Gary +3131580 KM6YBB Mark +3131581 WX3E David +3131582 W2ANN Justin +3131583 KR4BX Neal +3131584 N4GCS Gainesville +3131585 KD9FCW Emmanuel +3131586 N4ZTK Kenneth +3131587 AB3XZ Charles +3131588 KE4NPH Jesse +3131589 KE8HSF Douglas +3131590 WA8OII Catherine +3131591 KD9ESK Hale +3131592 W3LIE Elie +3131593 KD8TMN Dennis +3131594 KN4JTJ Jeffrey +3131595 KN4JTK Scotty +3131596 KD8ZAK Steven +3131597 KM4GBM Nelson +3131598 WA6LVX Paul +3131599 KI7VHT William +3131600 KD8FKU Kenneth +3131601 KD0GOK Donald +3131602 NG9R Danny +3131603 WA7JRD Jardy +3131604 KI4LIV Jonathon +3131605 AA4EX Frank +3131606 KM5RI Robert +3131607 N3JPS John +3131608 N5DG Edward +3131610 N1EMS Jason +3131611 N4SGN Lanuel +3131612 KD7TRN Thomas +3131613 KI5CXO Reece +3131614 KD0GOK Donald +3131615 N2JZ Michael +3131616 KB6DA Robert +3131617 KE0JUN Thomas +3131618 N8LOL Michael +3131619 K9KTU Frank +3131620 KA7GEN Walter +3131621 N8LOL Michael +3131622 KE0QYZ Thomas +3131623 KC3MNX Richard +3131624 NA0D Christopher +3131625 N7IYI Robert +3131626 KE0QYZ Thomas +3131627 N3BRN Joshua +3131628 KD9MHJ Eric +3131629 NA4IE Adam +3131630 KJ6SCJ Jason +3131631 KB2IZM Joseph +3131632 WH6GAO +3131633 KB9ZYH Nathan +3131634 N6DKJ Darel +3131635 KC5T Robert +3131636 N9YTY Steven +3131637 KB7KYM Patrick +3131638 N5REG Robert +3131639 KN4ITN Jose +3131640 WC3X Errol +3131641 AI6LU Ed +3131642 KI4EPI GREG +3131643 AI6LU Ed +3131644 N3XCK Christopher +3131645 K4VPD Daniel +3131646 KN4JTL Joseph +3131647 KN4JTN Patricia +3131648 WB6F Michele +3131649 KB5DSE James +3131650 KN4FOT David +3131651 KA7FAT David +3131652 KI6ATS Gary +3131653 K4DJQ John +3131654 WA6JRW Clayton +3131655 N7UL Andrew +3131656 K4UMG Paul +3131657 W7JPJ John +3131658 KM6AUT Roger +3131659 N9HXV John +3131660 W5KUB Thomas +3131661 N7UL Andrew +3131662 KN4HES Henry +3131663 WB5AW James +3131664 KN4SPR Jennifer +3131665 N5QXP FRANCISCO +3131666 KN4HES Henry +3131667 WA8MAC Sean +3131668 WA8MAC Sean +3131669 WA8MAC Sean +3131670 WA8MAC Sean +3131671 WA8MAC Sean +3131672 WA8MAC Sean +3131673 WA8MAC Sean +3131674 WA8MAC Sean +3131675 WA8MAC Sean +3131676 WA8MAC Sean +3131677 WA8MAC Sean +3131678 WA8MAC Sean +3131679 WA8MAC Sean +3131680 WA8MAC Sean +3131681 WA8MAC Sean +3131682 WA8MAC Sean +3131683 WA8MAC Sean +3131684 WA8MAC Sean +3131685 WA8MAC Sean +3131686 WA8MAC Sean +3131687 KE0DC Douglas +3131688 KD5YYA Thomas +3131689 KE6ZRP Mark +3131690 N6AYF Steven +3131691 W6KKO Richard +3131692 K9WWV Chris +3131693 KE0TXQ Nathaniel +3131694 AG4CB Angel +3131695 KI6PU John +3131696 N9WHH Christopher +3131697 N3CMY Larry +3131698 KF7SOH +3131699 AA5JJ Wayne +3131700 W4ROX Ismael +3131701 KI7RPH Dale +3131702 KC9YLK Nicholas +3131703 KC9PLZ Sharon +3131704 K4BWM Robert +3131705 W7TUS Michael +3131706 KB1IGV Tammy +3131707 N5GED George +3131708 K9UI Donald +3131709 K0LDB David +3131710 KF6VAN David +3131711 KE8IOL Dave +3131712 KD9MOH Brett +3131713 KD8RJN Kenneth +3131714 KE0USF Ian +3131715 N8WHZ manfred +3131716 KA6OPH Jim +3131717 KF6QEJ Roy +3131718 KX7P Tim +3131719 KE8LEF Rylee +3131720 KE0SLO Andrew +3131721 KM4ATO Supparerk +3131722 KM4ATO Supparerk +3131723 KE0HCE Dennis +3131724 KI7LCT Kelcey +3131725 N0UFV Daniel +3131726 KW4ES Tim +3131727 KG5SDG Harold +3131728 KI5DLU John +3131729 N4PSK Robert +3131730 N8PVL Christopher +3131731 AI6DE Bill +3131732 KC1IGU Benjamin +3131733 KI6MUH Mike +3131734 WU5E James +3131735 KM4CUZ David +3131736 W8CMN Central +3131737 W8FSM Fred +3131738 AJ6DC Gary +3131739 KC9ZMA Jayson +3131740 K4OOV Joe +3131741 KK4FKH Malachi +3131742 KC0CAU Randall +3131743 K1NNY Kenneth +3131744 KD8ZCM Michael +3131745 W1HSR Howard +3131746 W1GDK Garret +3131747 W7REA Robert +3131748 N2FSW Francis +3131749 KN4SCD Michael +3131750 AF4RU Carl +3131751 KG5QFN Russell +3131752 N5JSW Jerry +3131753 K3IDE Mike +3131754 K0DL Donald +3131755 WY5GUS Gus +3131756 KN6ACA Jeremy +3131757 KI7TKR Stephen +3131758 KN4LJF Timothy +3131759 K0DL Donald +3131760 WA6RHT Nathan +3131761 W8CLA Carl +3131762 KM4VRZ Cecil +3131763 KE8LNE +3131764 W5YE Robert +3131765 KJ7CHH Robert +3131766 KM6ZWL Gilles +3131767 W1CFZ Charles +3131768 KN4AMX Joe +3131769 N6GIW Glenn +3131770 KG6IYN Bruce +3131771 KR4HJ Tad +3131772 KJ7EIT Jim +3131773 W0TDT Thomas +3131774 N8PVL Christopher +3131775 KK6UIK Leigh +3131776 KM6ZRG Harry +3131777 W5YNF Scott +3131778 KM6PSO Gary +3131779 K3MJW Skyview +3131780 KB5FLA Richard +3131781 KG6TDP Michael +3131782 N8JTB James +3131783 KE8LNP Gary +3131784 KS0SA Salvation +3131785 KC1KZL Warren +3131786 WB3J Joseph +3131787 KN4FYK Lester +3131788 WB0URW James +3131789 KF4EUD Stephen +3131790 KR1O John +3131791 KL3TD James +3131793 WA5MVG Richard +3131794 KI5DMA Mark +3131795 KC6EDX Eric +3131796 KE4WML Bradley +3131797 KD7ERG Peter +3131798 KD2RMJ Matthew +3131799 KD2RLX Terry +3131800 WN9K Joseph +3131801 W4LTE Shawn +3131802 KG4JFF Ron +3131803 KI4KBR Joseph +3131804 W4NWB Robert +3131805 AJ4LF Gary +3131806 W6BXQ John +3131807 N7DCW Donald +3131808 KJ7DOO Shayne +3131809 W5WJS Willie +3131810 K2VOR Brad +3131811 N4YXG Donald +3131812 W3NH William +3131813 W4RNB Richard +3131814 W3PA Olaf +3131815 N4BPN David +3131816 KN4RNK Brittany +3131817 N0CTA Christopher +3131818 WC6DG Rogers +3131819 N0CTA Christopher +3131820 WR6Z David +3131821 KM6GSY Ryan +3131822 KC8YBM Ben +3131823 N0LAN Nolan +3131824 W4WHP James +3131825 K8CEH Charles +3131826 NE4BJ David +3131828 N6RNN Roger +3131829 KC1IGU Benjamin +3131830 NH6AA Kyle +3131831 W2GDG Gary +3131832 KB9SZS Douglas +3131833 KC3LRS Dallas +3131834 KD4TGB Michael +3131835 N9LYY Charles +3131836 KG5VKD Logan +3131837 W1VFO Eric +3131838 KF6CJM Howard +3131839 KI7QBU Justin +3131840 KI7DBP Roger +3131841 KN4STS Jayden +3131842 W8RFS Robert +3131843 KB3BYA Anthony +3131844 K0ECS John +3131845 N6HE Ray +3131846 KM8H Mark +3131847 N5VV James +3131848 K0AJS AJ +3131849 KK4OWL James +3131850 N3GMP Jared +3131851 KA2KAR Robert +3131852 KR9F Tomer +3131853 WB0WTI James +3131854 KC3MGB Gary +3131855 WA3GYW Fran +3131856 KM6ZDY Paul +3131857 K5JSG Jeremy +3131858 KJ4PLJ Chris +3131859 W2MVB Martin +3131860 KI7WJR Thomas +3131861 N5XWT Billy +3131862 AA2AJ Lev +3131863 W0OPF Tom +3131864 W4GGH Gregory +3131865 KF6QVJ Robert +3131866 KD2QGP Vyacheslav +3131867 K7JJL Jeffrey +3131868 AA2AJ Lev +3131869 KG6SJS Curtis +3131870 NW0I John +3131871 K4WSC William +3131872 K0ECS John +3131873 WD4KHP Edward +3131874 K8CEH Charles +3131875 KR9F Tomer +3131876 K3RSK Rod +3131877 KC2WII Philip +3131878 N8RXG Stephen +3131879 N7QVU Jerry +3131880 KJ7CGD Richard +3131881 KM6ZHL Martin +3131882 KI4LSP Joseph +3131883 KA8ONG Shawn +3131884 N1KLK Keith +3131885 AJ6GK Mike +3131886 KC3LPN Andrew +3131887 KF7NCA steven +3131888 K5VES Harold +3131889 AI6PF Robert +3131890 K9HAM Shawn +3131891 N6UAL Corey +3131892 WW3BOW Fred +3131893 KN4SNT Brandon +3131894 K0DAJ Donald +3131895 KF5UMW Joshua +3131896 KG7GDB Brett +3131897 KK4IWD James +3131898 N0PQ Peter +3131899 KG6YDW Robert +3131900 N2YXD John +3131901 KD0HVC Stephen +3131902 AI6XS Roger +3131903 KN4SUD Joseph +3131904 K5MQ David +3131905 K2URL Karl +3131906 KC1INK George +3131907 K8DLJ David +3131908 K9HAM Shawn +3131909 W2GDG Gary +3131910 KF7SOH +3131911 N4NPG John +3131912 KC1KUI Robert +3131913 KB1JLG Cameron +3131914 KC0WTY Steven +3131915 W0TNR THOMAS +3131916 K4YAY Rebekah +3131917 KD9MJJ Paul +3131918 KN4BSR William +3131919 KN4KNC Sue +3131920 KM6ZPZ George +3131921 N9KFW Richard +3131922 N6UAL Corey +3131923 N9YUY John +3131924 KI8JY David +3131925 N7BCN Morgan +3131927 KC1DCZ Mark +3131928 KN4FDW Charles +3131929 KB5KEW Richard +3131930 KC2FLK Estime +3131931 KG7ZUJ Ted +3131932 WB0YDQ Gerald +3131933 W9BTQ Karoline +3131934 KC3MGM Douglas +3131935 KC5GOW Gary +3131936 N1SXL Leonard +3131937 KM6VAZ Rohi +3131938 KE5YKM Aaron +3131939 KM6WDI Joshua +3131940 KD8UNQ Grant +3131941 KJ4JOF GREG +3131942 KJ7AVD Donald +3131943 KF6IIW Peter +3131944 N4ZRK Richard +3131945 KA8QCN Lowell +3131946 KG5WIA Dave +3131947 W5BXJ William +3131948 KK4WTX Michael +3131949 KC3MWK Bruce +3131950 KG5OKB Stephen +3131951 KD9LSZ Jeffrey +3131952 N1LDW Leigh +3131953 KG4VXQ Robert +3131954 KC1HGX Brian +3131955 N1JEH Shawn +3131956 W7VHN Francis +3131957 K4CIE Kacie +3131958 KE0RWZ Shaun +3131959 KC3IXG Kyle +3131960 WA0ZAW Douglas +3131961 K7OSO Larry +3131962 K2JVY Joselito +3131963 KC2JED Jim +3131964 KF7MBK Michael +3131965 KF5MLV Samuel +3131966 KK6RUS Russ +3131967 KJ7ELD Ethan +3131968 KG6HZZ Jason +3131969 N5RGA Richard +3131970 K0EVY Kevin +3131971 KW4BQ Emery +3131972 KJ7DDO Rachelle +3131973 KI6BBS Debbie +3131974 KJ7ELE Jason +3131975 KE7LJ Bob +3131976 KJ7EKX Allen +3131977 KE7LJ Bob +3131978 AJ7TM Thomas +3131979 W5PPX Jon +3131980 KE7EEL Jason +3131981 KD9KHI Gary +3131982 W7KJA Keat +3131983 KD5WY Elwin +3131984 W6DZL Robert +3131985 KK0TT Mark +3131986 KD2RNR Tony +3131987 KC2AZZ Herbert +3131988 KB3MQJ Charles +3131989 KE0MAQ Eric +3131990 KC1KTF James +3131991 W4IF Carlton +3131992 W9PB Jerry +3131993 KE0UOZ Matthew +3131994 W6VAH Keith +3131995 KE0MAQ Eric +3131996 AI6XM David +3131997 KN6AEM David +3131998 KN6AEM David +3131999 AC2YS Robert +3132000 W5PPX Jon 3132001 KG7VUJ Joseph 3132002 NR7H Bill 3132003 WB9STH Steve @@ -81575,7 +101388,7 @@ 3132066 AJ7E Charles 3132067 W7XM Anthony 3132068 KC7YPP Tony -3132069 AE7JW John +3132069 AE7K John 3132070 N7VOU Wade 3132071 N7QVP George 3132072 KA2HXU Steve @@ -81636,8 +101449,8 @@ 3132127 N6JFO Noel 3132128 KF7YBP Richard 3132129 NZ7G Michael -3132130 KC7MPA Mark -3132131 KC7MPA Mark +3132130 K7MPA Mark +3132131 K7MPA Mark 3132132 KF7AXX Mike 3132133 NX7R Terry 3132134 NX7R Terry @@ -81829,6 +101642,8 @@ 3132320 KG7TVG Theodore 3132321 AF7CS George 3132322 KD6DY Joe +3132323 KI7GXR +3132324 KI7GXQ 3132325 KE7WOD Dennie 3132326 KF7KEM Derek 3132327 AA5QJ Charles @@ -81837,15 +101652,15 @@ 3132330 KL2P Phil 3132331 KB0UGS Douglas 3132332 N9GUX James -3132333 KC7ZCH Jim +3132333 K4NEV Jim 3132334 KD7NHI Cheryl -3132335 KI7AYZ Brian +3132335 K5NEV Brian 3132336 KG7YBQ Christian 3132337 KF7PHV Jesse 3132338 N7JDM John 3132339 K9UGF Craig 3132340 K9UGF Craig -3132341 K7FAY John +3132341 KF7AY John 3132342 WB7EVL Francis 3132343 W6PJD Gerald 3132344 KG7TLC Tom @@ -81876,6 +101691,7 @@ 3132369 KD7UZN Raymond 3132370 KA7FIR Glenn 3132371 KI6OPK Thomas +3132372 KC1ESP Shaun 3132373 K7ASE James 3132374 KG7VKT Matthew 3132375 KG7YBQ Christian @@ -81897,8 +101713,8 @@ 3132391 KI7FOW Robert 3132392 KI7FOY Kyle 3132393 KG6VDW Jon -3132394 W9AYK Timothy -3132395 W9AYK Timothy +3132394 W9AYK Tim +3132395 W9AYK Tim 3132396 KM1KE Michael 3132397 AJ6FS Falk 3132398 N7MRN Larry @@ -82008,10 +101824,13 @@ 3132502 KD6SIN Paul 3132503 KD6SIN Paul 3132504 KG7XD Gene +3132505 KG2RY David 3132506 KK7BC John -3132508 KI7OAH +3132507 KC7GXN William +3132508 N6DYL 3132509 KG7QGK Douglas 3132510 K6JR James +3132511 KD0AJT Michael 3132512 KC7ZOH Kevin 3132513 N6EVG Michael 3132514 N7JWL Aline @@ -82023,13 +101842,15 @@ 3132520 KI7FNZ Cody 3132521 AA4Z Jimmy 3132522 NV7U Austin +3132523 K6JP James 3132524 KB2UEW Alvaro 3132525 KA7LWS Roy 3132526 KI7OMQ Aline +3132527 N7PTM Bob 3132528 KI7OBJ Kirk 3132529 KJ6IX Dale 3132530 N8BSD Nathaniel -3132531 KH6NO Wilmer +3132531 KH6NO Willie 3132532 KG7XD Gene 3132533 KD6DY Joe 3132534 KC0NK Kevin @@ -82043,6 +101864,7 @@ 3132542 KI7OIS Thomas 3132543 K7KW Douglas 3132544 K7FYI Fredrick +3132545 W6SPY Shannon 3132546 W7GMM Gary 3132547 N0JHA John 3132548 N0JHA John @@ -82051,6 +101873,8 @@ 3132551 N7GWT Archie 3132552 K7FYI Fredrick 3132553 KG7WUH David +3132554 NA7PE Paul +3132555 KI5DIS Wade 3132556 KF7PSM Peter 3132557 KI7PPQ Anthony 3132558 KI7GWM Christopher @@ -82089,7 +101913,9 @@ 3132591 AD7CD Jordan 3132592 AD7CD Jordan 3132593 KI7RAG James +3132594 KJ6KXW Rose 3132595 KE7TZO Joel +3132596 KM4DMD John 3132597 KK4RVI Joshua 3132598 KG7ZYL Kenneth 3132600 KI7OXS Robert @@ -82116,6 +101942,7 @@ 3132621 KB0MLF James 3132622 KB0MLF James 3132623 KI7OXS Robert +3132624 KF7VGK Justin 3132625 KB6DWO David 3132626 W7DEM Nv 3132627 KG7GNC Stuart @@ -82129,6 +101956,7 @@ 3132635 KG7RKQ Eric 3132636 KI7BOO David 3132637 KG7BOG Mark +3132638 KC1EEI Brian 3132639 KF7GGR Donald 3132640 K7HMR Marc 3132641 KA3JAS Robert @@ -82154,13 +101982,15 @@ 3132661 W7FIX Dana 3132662 KC0USO Clayton 3132663 KI7BWX Freddie +3132664 KG4EES Vincent 3132665 NV7KL Kent 3132666 W6ZDR Audie 3132667 KF7UQR Travis 3132668 N9AMI John -3132669 KI7UQR Paige +3132669 K3NEV Paige 3132670 KB0UNT Robert 3132671 KC7HA Jerry +3132672 AB9JJ Craig 3132673 KB5DXY Larry 3132674 W6VXT John 3132675 KB6CYD Daniel @@ -82180,17 +102010,27 @@ 3132689 KJ6HSG Jolee 3132690 NL7IN Michael 3132691 KB2UEW Alvaro +3132692 K9CTB Solon 3132693 KG7PBS Vincent +3132694 KI5BPH Larry 3132695 NT7Q Gregory 3132696 NT7Q Gregory 3132697 NT7Q Gregory 3132698 NT7Q Gregory 3132699 NT7Q Gregory +3132700 KD4CMK Thomas 3132701 NL7IN Michael 3132702 KI7GVW Chaiyush +3132703 W4ADR THOMAS +3132704 K8JNC James 3132705 KI7AQN Joe 3132706 KI7AQN Joe +3132707 K0JEF Jeff +3132708 KR4TH Jerry +3132709 KE8KWO Brandon +3132710 WZ0MBI Alan 3132711 K7YWF Roy +3132712 KD4CIF David 3132713 WN9ANF Michael 3132714 KI7CIM Eric 3132715 WD8JQN Ernest @@ -82201,13 +102041,284 @@ 3132720 KG7MM Ronald 3132721 WD8OIZ Edward 3132722 KI7WAA Drew -3132723 KT9X Lahra +3132723 KT9X Flip 3132724 WA7BHC David 3132725 KI7OEE Grant 3132726 KI7OEE Grant 3132727 KE7NCJ Thomas 3132728 KI7GRT Karl +3132729 AK4GS Robert 3132730 AF7FS Donald +3132731 KN4B Robert +3132732 W5MRR Marvin +3132733 KI4CCD Alice +3132734 K5DQV Christopher +3132735 KK6EOL Matthew +3132736 WA1UAT Pierre +3132737 KD5JDS James +3132738 KE4LF Liann +3132739 WE4AL Alan +3132740 KC7JLP Jeffrey +3132741 W4IDJ Wayne +3132742 KJ3LR Louis +3132743 KW4JY Calvin +3132744 KJ4VIG Russ +3132745 N8PSU Jeffrey +3132746 N5KEL Timothy +3132747 KE0GJ Donald +3132748 K7LVJ John +3132749 W4ORU Ryan +3132750 AE9SS Connor +3132751 N5KEL Timothy +3132752 KF5ZTZ Dustin +3132753 KD0ZYB Terrance +3132754 N8AVR Brian +3132755 W4IDJ Wayne +3132756 KC7JLP Jeffrey +3132757 KD2RNM Michael +3132758 AC3EO David +3132759 KJ7DJR Lisa +3132760 N6SX Albert +3132761 AB1RD Ekabutr +3132762 W7KDJ Keith +3132763 KG7PAR Dan +3132764 AJ7JA SIJARC +3132765 K8GTH Joe +3132766 KC5VVN Judy +3132767 AB1RD Ekabutr +3132768 K6KQI James +3132769 N5OFW David +3132770 KM4LTC Jorge +3132771 KK4VIV Joseph +3132772 KC8BNS Rhonda +3132773 KJ4LY Charles +3132774 KA4EPS Lubor +3132775 K8TLD Terry +3132776 KI7UQU Johann +3132777 AB9AI Jared +3132778 KS6DAY Scott +3132779 WD4EIB roy +3132780 KC9WCJ Tim +3132781 KF4NAI Robert +3132782 KJ7EHS Mary +3132783 KJ7EHT William +3132784 KD8LCU Harry +3132785 W1JWK John +3132786 KJ7FHP Josh +3132787 KD2RFO James +3132788 KC1LCP christopher +3132789 AC3EO David +3132790 K9KZR Brent +3132791 W6VNT Virgilio +3132792 N5SLD Shawn +3132793 KD2ROR Forest +3132794 K4NIX Klaus +3132795 KB4LW Leslie +3132796 KB1PGH Dean +3132797 KF4MSV Darrell +3132798 KJ7ENS Glen +3132799 W3MCV Marvin +3132800 KM4ASH Craig +3132801 KB2EBA James +3132802 K0OPG Gregory +3132803 KT5AA Keith +3132804 W5SUE Susan +3132805 KI5YGS Yancy +3132806 W8JSU Donald +3132807 KK5RT Robert +3132808 NZ4O Eric +3132809 KD9MOZ Matthew +3132810 KD0ZIP Michael +3132811 N2ZSO William +3132812 KK4REQ Sasko +3132813 KC5CUR Stephen +3132814 KB1UHL James +3132815 K7ITE Ric +3132816 KG5FJE Cody +3132817 KT5AA Keith +3132818 K0WFB +3132819 KD2ETU Richard +3132820 KD2ETU Richard +3132821 K4NMF Joseph +3132822 KA4SPG William +3132823 KE0URP Brandon +3132824 KC0VWN Gary +3132825 W7UFO Phillip +3132826 K1DJG Harvey +3132827 KG6WGE Dale +3132828 KE4CIJ Larry +3132829 N0JLG John +3132830 W2CM Liverpool +3132831 N5DKI Daniel +3132832 KC1KJN Peter +3132833 AG7SF James +3132834 NC5I Daniel +3132835 K7RMO Rusty +3132836 AG5TM +3132837 AG5TM +3132838 KM6ZMY Jonathan +3132839 KJ7EHM Eliseo +3132840 KB0YUU Danny +3132841 K3DCG Robert +3132842 AC5FD Robert +3132843 KC1KJN Peter +3132844 KI4VDU Douglas +3132845 KE0UUV Daniel +3132846 N4OSX Scott +3132847 N3JWM John +3132848 WA1JSG Lawrence +3132849 KK4KZZ Marc +3132850 N0WNC Daniel +3132851 N8RVE John +3132852 K4LJM Larry +3132853 WA3NSS +3132854 KJ3LR Louis +3132855 KM6YFF David +3132856 WB8HS Bruce +3132857 KN4RMF Eric +3132858 W5XTR Jason +3132859 KJ4PVX Henry +3132860 KJ7EFN Thomas +3132861 KD6E Ronald +3132862 KN6ALY Shawn +3132863 KD1HF Michael +3132864 AC4OW Sam +3132865 KA0OWT Charles +3132866 KE8LPK Eric +3132867 KD4CR Charlie +3132868 N5BLP Barton +3132869 W5XTR Jason +3132870 KN4LCV John +3132871 KE0QZN Michael +3132872 KG5VMV Donald +3132873 KG4NAI Randall +3132874 KK2USA John +3132875 N3NWV Matthew +3132876 W3MLJ Michael +3132877 KA1UMG Michael +3132878 KC8UER Thomas +3132879 K0NYX Bryce +3132880 KE6DMT Mark +3132881 KC9NHD Paul +3132882 KM6AAT Didi +3132883 KJ7EPB Chad +3132884 KE0BHQ Ronald +3132885 KC0UUF Dustin +3132886 KM6YXO Cynthia +3132887 W1SSH South +3132888 W1SSH South +3132889 KE8LEQ John +3132890 KG7RYF Victor +3132891 KD9CJL Leroy +3132892 KE8JLU Jon +3132893 WW3G Tony +3132894 KC6UVZ David +3132895 KD0VUB David +3132896 N3JUZ Justin-Ley +3132897 N2VEO Ronald +3132898 KB1IQY Nimet +3132899 K2RIS Kristofor +3132900 K0BMW Michael +3132901 W0ZE william +3132902 KE8LLL Charles +3132903 AC5UB Curtis +3132904 N6KGB Rob +3132905 WD0EZI John +3132906 KE0FOM Thomas +3132907 AC3DA Ronald +3132908 N5VL Jimmy +3132909 KA7JUR John +3132910 K9MLS Michael +3132911 KE0UMQ John +3132912 K4CIE Kacie +3132913 KJ6TQ +3132914 KE0RYF Ronald +3132915 AA0K Paul +3132916 KN4SWE Santiago +3132917 KK6IHC Joel +3132918 KA0WAS Robert +3132919 K4EJD Eric +3132920 KB8UVV Mark +3132921 KD8BTI Wood +3132922 N0PMQ Lynn +3132923 N2SPY Richard +3132924 KN4SWE Santiago +3132925 WB6QXO Gary +3132926 KC1IIO Matthew +3132927 KD9MCS DAVID +3132928 KD2KLN Brian +3132929 KK3CAT Cody +3132930 KE0IKI Nathan +3132931 N0DFI James +3132932 KD2NOB David +3132933 W9ADC Amanda +3132934 KE6POR Jim +3132935 N2RTG Warren +3132936 K1DCA Don +3132937 K4EJD Eric +3132938 KC9FJA Randy +3132939 WA2LZO IRA +3132940 W1DPE David +3132941 N7DQS Charles +3132942 WF4LS Frederick +3132943 WA1ASG Adam +3132944 N6CGS Chris +3132945 KO1R Milan +3132946 KE0GJ Donald +3132947 WH6DKH Ruth +3132948 KA1UFE Paul +3132949 KI7ZBA Daniel +3132950 WE2CAT John +3132951 KI6NUF George +3132952 KM4YAY Joseph +3132953 KD9KCK William +3132954 WA5RR Korey +3132955 N5FCB Richard +3132956 KI4LA Gary +3132957 KF5RDJ Robin +3132958 K3CHB Jimmy +3132959 AC5UB Curtis +3132960 KI7SGI Michael +3132961 KB5DOG Robert +3132962 NY1CO Jose +3132963 KB1UFT James +3132964 W6BVI Ildefonso +3132965 KC5ILH Lisa +3132966 AC9MC JASON +3132967 W1NV Donald +3132968 WM4B Michael +3132969 NG6R Jerry +3132970 W9JEC Jacob +3132971 KN4SXZ David +3132972 KC5WAZ Paul +3132973 KC3KGO Emlyne +3132974 KC3MVI Daniel +3132975 KE5FAQ John +3132976 KD9BWH Bradley +3132977 N0UFV Daniel +3132978 KE7AZA David +3132979 KM4MD Matthew +3132980 KO4KD Kerry +3132981 KD7LIZ Tom +3132982 KK4LUK Elliot +3132983 W3MLJ Michael +3132984 WO4J Jeff +3132985 KG5ZES Alana +3132986 W6TPA Thomas +3132987 N1EVO Carl +3132988 KJ7ENT Michael +3132989 KE0KAZ Michael +3132990 KJ6TZL Brad +3132991 KN4ONX Joe +3132992 N4XJJ Matt +3132993 K5SKF Stephen +3132994 KJ7ERG Perry +3132995 KN4TAK Trent +3132996 KD2RPE Michael +3132997 KC8ZZF Joshua +3132998 W8IPK Matthew +3132999 KK4RGL Jeremy +3133000 W9JEC Jacob 3133001 NE1B 3133002 NE1B 3133003 WA2IYO @@ -82229,10 +102340,12 @@ 3133019 N1DAS David 3133020 N1DAS David 3133021 KC1AEE +3133022 W4KWI Tim 3133023 KB1PSI Brian 3133024 K1RJZ Rick 3133025 W1YVM Mike 3133026 W1YVM Mike +3133027 KN4SWC Alexander 3133028 W1WNS Wayne 3133029 W1WNS Wayne 3133030 N1ULS Josh @@ -82241,7 +102354,7 @@ 3133033 KC1AEE 3133034 N1PA Paul 3133035 K1ZKJ Bill -3133036 WA1YKL Steve +3133036 WA1YKL Stephanie 3133037 K1RJZ Rick 3133038 N1PA Paul 3133039 W3RCF Reese @@ -82262,7 +102375,7 @@ 3133054 K3RQ George 3133055 K1DSP Dave 3133056 N1GD Gianni -3133057 K1QVC Paul +3133057 K1QVC NEDECN 3133058 K1LVA Jarrod 3133059 NI1F Michael 3133060 KB1TKX Jen @@ -82281,7 +102394,7 @@ 3133073 K1OPQ David 3133074 WA1DMV Bill 3133075 K1RMW Ryan -3133076 N1TBN Alan +3133076 N1AJM Alan 3133077 NQ1H Elaine 3133078 KD6BU Jared 3133079 KB1RIJ Larry @@ -82336,7 +102449,7 @@ 3133128 N1RX Bruce 3133129 N1MEO Fletcher 3133130 N1ZGI Larry -3133131 W1WWW Charles +3133131 W1WWW Derek 3133132 KC1CER Cody 3133133 ND1Q David 3133134 ND1Q David @@ -82353,7 +102466,7 @@ 3133145 WA1NH Jason 3133146 KB1IFN Greg 3133147 KB1BN Robert -3133148 N1RIJ +3133148 N1RIJ Jonathan 3133149 AB1SR William 3133150 WA5GAD George 3133151 KZ1O Dave @@ -82363,7 +102476,7 @@ 3133155 N1XUQ Jeffrey 3133156 WB1GXM Butch 3133157 KA1MTM Charles -3133158 N1RIJ +3133158 N1RIJ Jonathan 3133159 K1SR Robert 3133160 W1LMT Pasha 3133161 KC1EXZ Debra @@ -82393,7 +102506,7 @@ 3133185 KA1OEO James 3133186 W1EAR Carey 3133187 W1EAR Carey -3133188 KC1FCD Tim +3133188 W1TLR Tim 3133189 KB1HUO James 3133190 WA1WOK Herbert 3133191 KC1FFZ Jayson @@ -82469,6 +102582,7 @@ 3133261 KA1SKY Discovery 3133262 KC1SR Regina 3133263 N1TMZ Carol +3133264 KB0PAK Michael 3133265 N1PZP James 3133266 N1VAU Clayton 3133267 K1FDD John @@ -82508,7 +102622,7 @@ 3133301 N1WLD Wayne 3133302 KC1GWJ Keith 3133303 N3CGM Christopher -3133304 KC1RPK Alan +3133304 N1LFD Alan 3133305 KC1GWJ Keith 3133306 KA1KI Richard 3133307 WA2ILB Mark @@ -82563,7 +102677,6 @@ 3133356 W1MBG John 3133357 NU1T Jorgen 3133358 N1NHT Jason -3133359 N1ZGN Matthew 3133360 KB1PES Michael 3133361 KB1MSY John 3133362 KA1SSR Bill @@ -82582,18 +102695,19 @@ 3133375 KB1WZF Kevin 3133376 KB1SPH Jeff 3133377 K1BJF Barry -3133378 AC1CN John +3133378 AC1E 3133379 KC1GNP Joe 3133380 KC1EAI William 3133381 N1PJT David 3133382 N1QKC Andrew 3133383 K1AEM Erin 3133384 KC1HDF Mike -3133385 KC1BOH Kenneth +3133385 N1RP Kenneth 3133386 KA1VYX Andrew 3133387 KB1NZF Jonathan 3133388 KB1QMW Julie 3133389 W1QB Mark +3133390 KC4QLP Robert 3133391 K1PGV Peter 3133392 N1NSE Rick 3133393 W1TED Ted @@ -82645,6 +102759,7 @@ 3133439 KA1OKQ Peter 3133440 WA2PMY Tom 3133441 AE1I John +3133442 K5NWZ Shawn 3133443 N1IMW Dennis 3133444 KC1HGO William 3133445 N1ERA Michael @@ -82685,20 +102800,520 @@ 3133480 KB1KKL John 3133481 K1DLM David 3133482 K1DLM David +3133483 KC1GAL William 3133484 N1YVM Paul 3133485 W1CBD Charles 3133486 KC1DR William 3133487 WK1V Desmond +3133488 KC3EVM Jose 3133489 KC1JMK Neil +3133490 KD5YFU mark 3133491 KB1QKF Maxwell 3133492 W1EJE Eric 3133493 W1CMX Curtis 3133494 W1EDW Skip -3133495 KC1JNK Carlton +3133495 KO2Z Carlton 3133496 KC1BGK Chris 3133497 K1WVO Michael 3133498 KB1SBQ Ken 3133499 K1TQ Sharon +3133500 KD5ZIT John +3133501 W9USI SAMUEL +3133502 W4JPP Joseph +3133503 W4KWI Tim +3133505 WA4VWR Robert +3133506 KF5ZCP Krista +3133507 KO4T Jamie +3133508 WA1VIU Wallace +3133509 N5SLD Shawn +3133510 AA5XO Stan +3133511 N3RSY Michael +3133512 KG5PNI Ronald +3133513 W9DKH Bob +3133514 W4KST Kennesaw +3133515 KB3RUN Hemanth +3133516 KB9VHR Matthew +3133517 KD2RCW Peter +3133518 K1YKH LeeAnn +3133519 KK1PMA Providence +3133520 K0BXB Martin +3133521 N3ZNE NEAL +3133522 K0SUS Kenneth +3133523 KM4REC Thomas +3133524 N8PMR Jonathan +3133525 KC0AVN Joseph +3133526 N0NS Joseph +3133527 N9XRM Robert +3133528 KI4LSP Joseph +3133529 KE8RAL Ross +3133530 KN6AND Kerry +3133531 KC0ZBP christopher +3133532 KK6CTX Marlene +3133533 WB0IXI Jim +3133534 KG5EXB Lawrence +3133535 KJ7EQY John +3133536 KK6DMB Jason +3133537 KD0TKA Jeremy +3133538 KM6ZPM Liana +3133539 KE6USA Richard +3133540 KN4TAJ Randal +3133541 KN4VUP Berend +3133542 KE0BZK Francis +3133543 KI7VQJ Kim +3133544 WD0DUD Garry +3133545 K0BOG Charles +3133546 KN6ADB Arthur +3133547 KG5HQD Amos +3133548 KG7HVR Bram +3133549 KC8TSZ Christopher +3133550 KE4DNU Kenneth +3133551 N9XRM Robert +3133552 N2ZSO William +3133553 KN4SYD Michael +3133554 N2RTS Charles +3133555 KD4GFY joseph +3133556 KB3RUN Hemanth +3133557 K8AN Mike +3133558 KG7HVR Bram +3133559 K6XOX Nimit +3133560 N4UUJ Walter +3133561 KK6SYD Russell +3133562 KC0VIQ Dennis +3133563 KD1AC Frank +3133564 K6XOX Nimit +3133565 KC3KKD Daniel +3133566 KB7JWS John +3133567 K9AI John +3133568 K6GHL Greg +3133569 KB4OQU George +3133570 KE0UWV Erik +3133571 WB5PDZ John +3133572 KB9VUJ Steven +3133573 KI5BDG Kenneth +3133574 N7NSD Norman +3133575 K4APO Walter +3133576 KC2VSL Kenneth +3133577 KP4CZ Jose +3133578 KC1DJT Dan +3133579 KE8MAL Mark +3133580 KD9KNV Clayton +3133581 KC3MZQ Shawn +3133582 W4JHY Jerry +3133583 WA2YUO William +3133584 KC8SBG Charles +3133585 W6RJ Robert +3133586 KI4ATL Stephanie +3133587 N2MRH Joseph +3133588 W9DLH David +3133589 N0HAV Lance +3133590 N2MRH Joseph +3133592 W2ODD Todd +3133593 N3NRO Renaldo +3133594 N9LZ Bill +3133595 AC9SK Neil +3133596 KD0QCN Jeffrey +3133597 KP4VZ Michael +3133598 N3XMB Thomas +3133599 AI6NT +3133601 KC4B Jerry +3133602 NE8AL William +3133603 KB3EPD Jermaine +3133604 KM6UEW Ivy +3133605 W6XBC Chris +3133606 KN4SLM Matthew +3133607 AD5VB Martyn +3133608 N9TUU David +3133609 KA3FGH Pat +3133610 WD5H Sid +3133611 KD0KEK Brian +3133612 KD9LMV Peter +3133613 AC2SX Gary +3133614 KD2RPP PHILIP +3133615 KH6DLK John +3133616 K6RPT Ron +3133617 KA0RT Harold +3133618 KD0PZM Derek +3133619 KE5EUA Michael +3133620 KN4NQJ Michael +3133621 KE5EUA Michael +3133622 KQ4ET Joel +3133623 KQ4ET Joel +3133624 W6ARZ Arthur +3133625 AF6PF Otelio +3133626 N2DP Frank +3133627 KD5DDW Darrick +3133628 KI4DFG Anthony +3133629 N1CLF Cody +3133630 AG7SW Andy +3133631 W5RDY John +3133632 KB7ZUL Ronald +3133633 K2AN Louis +3133634 W2JMU John +3133635 KJ7EMS Timothy +3133636 KG7AYQ Garrett +3133637 NL7ER John +3133638 K6QFO Mike +3133639 KM6WVB David +3133640 W4KST Kennesaw +3133641 K5LFE Carl +3133642 KN4SAZ Saddam +3133643 KJ4QNW Stephen +3133644 NI0L Thomas +3133645 NI0L Thomas +3133646 KN4AMX Joe +3133647 KG0KN Michael +3133648 KF6RDH Byron +3133649 N4STV Stephen +3133650 N7ECQ Shelli +3133651 KA0SQL Marcus +3133652 KI5CBW T +3133653 KB0AT Harry +3133654 WA3ZPC Bruce +3133655 KL7HRO Dennis +3133656 W8YRC Michael +3133657 N8LWX Steve +3133658 K8UHF Jim +3133659 KM4GOJ Joshua +3133660 KM4GOI Sam +3133661 N2OIB Joseph +3133662 KI4QWD Glenn +3133663 KC1LDF Lucas +3133664 KC3MSA Brian +3133665 KW7U Allan +3133666 KG2NA Paul +3133667 KD2RQT Susan +3133668 KG5GGC William +3133669 N5SKT Donald +3133670 KN4ADM Reggie +3133671 W8VFD Mike +3133672 NK1V Steven +3133673 N6ASR Alan +3133674 KN6ALN Nicholas +3133675 KC1NE Craig +3133676 W6MBB Michael +3133677 N5KFR Thomas +3133678 KB1WRX A +3133679 KN4QDK Randall +3133680 KD2CIF Daniel +3133681 K6WD Michael +3133682 KE0RER Jody +3133683 KE0UWV Erik +3133684 KN4DLS Craig +3133685 KN4QDK Randall +3133686 KZ7W Patrick +3133687 KN4TDV Darrell +3133688 KN4BFF Sherrod +3133689 KN6KI David +3133690 K0TWB Arthur +3133691 AF7BX Gene +3133692 WA1TED Theodore +3133693 KG7FXP Brian +3133694 NB7O Kevin +3133695 NZ0T William +3133696 KD4ZOJ Leslie +3133697 N5TDY Mark +3133698 K0HRM Hugh +3133699 N5TDY Mark +3133700 KE3UC Daniel +3133701 KD2RPP PHILIP +3133702 WE4GA Jerry +3133703 N2RBJ James +3133704 KG7FXP Brian +3133705 W7KJE Craig +3133706 AA1B Arthur +3133707 N9SOC PATRICK +3133708 K3NX Stephen +3133709 N4YFV Michael +3133710 K3EDM Edward +3133711 KC8ZLQ Michael +3133712 W0WKO Robert +3133713 KD2OTJ Donald +3133714 KD9MQE Paul +3133715 W4JLR Jason +3133716 KE0SOR Michael +3133717 W2BZ richard +3133718 N3GX Alejandro +3133719 N4YFV Michael +3133720 KA0NEB Steven +3133721 N8FRT Tom +3133722 N8YUI Randy +3133723 NO1PC Jim +3133724 KN4PPM William +3133725 KC3IMY louis +3133726 N0MLP Marvin +3133727 N3ZUE Norman +3133728 N0OCR Wayne +3133729 K1BIG Alan +3133730 KG6BPY Jose +3133731 KK4JFK Baofang +3133732 W7EVL Eric +3133733 WB3AYG John +3133734 KM6VKK Bruce +3133735 NV8A Alan +3133736 K2DAK David +3133737 KF5ULI Angi +3133738 K5BAH Brett +3133739 KM4GUH Pakorn +3133740 KD2RLE Jeffrey +3133741 N0CRL Carol +3133742 KC1JCF Arthur +3133743 KE4SMH Sharon +3133744 WB5ZIL Steve +3133745 N5MI Mark +3133746 KD0TSZ Ryan +3133747 N9ZTO Danny +3133748 KD0YNJ Andrew +3133749 KJ6PSH Sonny +3133750 KM4GUH Pakorn +3133751 N1QZS Cheyenne +3133752 WB5ZIL Steve +3133753 KE0LCK John +3133754 W5CSW Casey +3133755 KD4BO James +3133756 KK4DVD Michael +3133757 K2WIM Heather +3133758 KJ6LDN Nicholas +3133759 N2QKL Richard +3133760 N8RAW Michael +3133761 N8HCR Lonnie +3133762 KJ4NEE Jeffrey +3133763 K5AFE Stephen +3133764 KV4T Allan +3133765 KE4AH Alan +3133766 WA9WWS Don +3133767 KI4IBW Curtis +3133768 KD8MKE John +3133769 N4CXA Barry +3133770 KE8JRO Ken +3133771 WA5TOO Darryl +3133772 K6JEY Douglas +3133773 KG5BNC Aaron +3133774 N8IW David +3133776 KI5DMK Gary +3133777 KI7U Chris +3133778 K7BSB Bob +3133779 N7JHN John +3133780 KM6ARG Zeke +3133781 K1SPL Elliott +3133782 W2ADW Adrian +3133783 KD2RMT Vincent +3133784 WS5A Roy +3133785 KD8QKD David +3133786 W4SRK Larry +3133787 WD8RMG Daniel +3133788 N4TDM Timothy +3133789 KK6ZNH Steven +3133790 KC0OUA Daniel +3133791 WZ1Z Patrick +3133792 N1RKA Embry +3133793 WZ1Z Patrick +3133794 KK6NZK Ukrit +3133795 KY4WTF Larry +3133796 KC2ENH Ronald +3133797 AG2I James +3133798 KK6NZK Ukrit +3133799 KM4NXI Jamie-Lee +3133800 W2SBL Symbol +3133801 NR4D Thomas +3133802 KE4GBJ Kendall +3133803 KD9GMD Jerome +3133804 K2IAI Leonard +3133805 N7JHN John +3133806 KC2MSE Elizabeth +3133807 N6WOR Richard +3133808 WY2V Kris +3133809 KD9LUE Cody +3133810 WA0ITP Terry +3133811 KD0HXQ Alva +3133812 KC2DMJ Frank +3133813 AJ6IY Jeff +3133814 W9AAZ Clarence +3133815 N4ELO Earl +3133816 W4KJJ Kent +3133817 KL7JHR Dennis +3133818 W9FEH Jackie +3133819 KM6ZXF Joseph +3133820 KF4HZU Jesse +3133821 KC7IJK Greg +3133822 KE0UXN RYAN +3133823 KE8HLX Shane +3133824 W8MKB Michael +3133825 KC0NPM John +3133826 KC3IRE Robert +3133827 WH6ST Steve +3133828 W9UUM Jim +3133829 AB4KE LaGrange +3133830 KC8SYF Dorothy +3133831 N0EEE Scott +3133832 K1GTO Brad +3133833 KE0IWW John +3133834 N9USZ Steven +3133835 KB3JOM Mitch +3133836 KD1CR Jason +3133837 WB5YJL Leonard +3133838 KD8LCF Shane +3133839 N8BAP Patrick +3133840 W0JOE joe +3133841 KE0KZV joe +3133842 KF6PUL Kenneth +3133843 KJ4PTI Pedro +3133844 KN4TFU Ronnie +3133845 K9FPS Lesley +3133846 WD9DAU Thomas +3133847 WZ9U Thomas +3133848 KB3TBH George +3133849 KN4GKC Daniel +3133850 KC0JNK JOHN +3133851 KS0JAE Jeffery +3133852 AG6GE Ronnie +3133853 KG7BHP Aaron +3133854 K8RLE Ray +3133855 WA2IWW Gerald +3133856 KN4TGV STEFANOS +3133857 KD8JBX Christopher +3133858 WA1TCC Robert +3133859 N9FJB Frank +3133860 KF6GNH Phillip +3133861 KK6IDV Riley +3133862 KE0RJT Nicholaus +3133863 KN6AEV Carl +3133864 KE5BSB Tommy +3133865 K5VXN Vicki +3133866 K3JAR Kim +3133867 K3JAR Kim +3133868 N9FJB Frank +3133869 KE6CQA Brent +3133870 KI5DHH David +3133871 KK6YQP John +3133872 K8WWS William +3133873 KK4RAY Raymond +3133874 KF7BBU Jonathan +3133875 W1XEL John +3133876 KN4SQT Edward +3133877 KI7RMQ Warren +3133878 KG7BHP Aaron +3133879 KI5DJW Kenneth +3133880 KB4CXP Charlie +3133881 KC1KXH Joshua +3133882 KJ7EXK Dana +3133883 KM6SWS Karate +3133884 W6BLL William +3133885 KB9YEJ Michael +3133886 KI5DFE David +3133887 W8RIH Thomas +3133888 K6TJP Thomas +3133889 KG5PSL Lynsey +3133890 KN6AQU Travis +3133891 AJ7F Timothy +3133892 K9NIB Vincent +3133893 KD0IWW Michael +3133894 KN4TIN Jack +3133895 KA9USG Charles +3133896 KB6MTX Joni +3133897 KE8IBE frank +3133898 K7ZOX Wayne +3133899 KA9USG Charles +3133900 KM4ZUT Albert +3133901 KF4OD James +3133902 KG1MD Keith +3133903 KE5EON Richard +3133904 KB0TKV David +3133905 WI1C Jerry +3133906 KN6ACL Sandy +3133907 KH6PD Robert +3133908 WB5NFS Lynn +3133909 KE5EON Richard +3133910 KN6APZ David +3133911 KB7GNA Raymond +3133912 KN6ART Laramie +3133913 KG5WEJ Kenneth +3133914 KC8TSZ Christopher +3133915 NR5Q Lee +3133916 KJ7AMC James +3133917 WB4UHC John +3133918 N6TRA Rafal +3133919 KI7FTK Thomas +3133920 K1DCT David +3133921 K6XRA Carl +3133922 NM0Q Gerrold +3133923 W8FSM Fred +3133924 WA8ZJU Marcia +3133925 KK4YXH Larry +3133926 W0TIM Timothy +3133927 KE7IJQ Carl +3133928 AL7LI Charles +3133929 KD2RGH Howard +3133930 KU0Z Phillip +3133931 KD2NKM Gregory +3133932 AA6RV David +3133933 K3FRC Frank +3133934 N6DEW Dwayne +3133935 KJ7ERQ Rose +3133936 K0IZZ Todd +3133937 N9BDY Brent +3133938 W7LQ Matthew +3133939 KI7ONN Matt +3133940 KI7VBE Jack +3133941 KC2DXK John +3133942 KN4TIN Jack +3133943 KC3NDB Alex +3133944 NH6HI James +3133945 KX4TH Vladislav +3133946 KN4TIH Theodore +3133947 K5AMB Adam +3133948 KK6ZFQ hieu +3133949 KN4KAL Jason +3133950 K7OEO Steven +3133951 KE0TAV Bryan +3133952 KB5HTB Raul +3133953 W2BLN STEVEN +3133954 K8KNR Kevin +3133955 N5USU Joel +3133956 KN4IKR Charles +3133957 N3BWB H +3133958 KE4LCX Thomas +3133959 KN4RNW Mary +3133960 KC0LOK Shawn +3133961 KE0DVM Glen +3133962 K2BLU Zack +3133963 KE7SPZ Gary +3133964 KE8LLQ James +3133965 KN4DHY Harry +3133966 KE0UZG Matthew +3133967 KC8OKU James +3133968 KN6ACW Maldon +3133969 W3ZY Edgar +3133970 KI7ALA Glenn +3133971 AG4YG Phillip +3133972 AG4YG Phillip +3133973 K2BLU Zack +3133974 KC0ZIE Darren +3133975 W2WAY Michael +3133976 KG5SRM Richard +3133977 K4SEH Scott +3133978 N9YBI Gregory +3133979 AK9P Kunal +3133980 KN4TKG Cory +3133981 N0RSR Roger +3133982 KD9ELI Jacek +3133983 KG6PWB Conal +3133984 KJ7DAK Johnny +3133985 KG7PBU John +3133986 WD8JVQ Richard +3133987 WX4QZ Daryl +3133988 WD8LLT Michael +3133989 KD2IJC JONATHAN +3133990 KM4RW Raymond +3133991 AD6GE Grahame +3133992 K6YWP Todd +3133993 KI7JJU Brendon +3133994 K4MKB Michael +3133995 AK9P Kunal +3133996 N4GI Blake +3133997 W2EZ Duane +3133998 KI7JJU Brendon +3133999 KA3E Paul +3134000 KG4OMX Darren 3134001 K2XTS Alex 3134002 K2XTS Alex 3134003 KC2WNG Israel @@ -82715,7 +103330,6 @@ 3134014 K2KEG Kyle 3134015 K2APX Bill 3134016 KC2KLW Kenneth -3134017 W2RN Tom 3134018 N2RDA Robert 3134019 KD2BSK John 3134020 KD2EPW Kenneth @@ -82788,7 +103402,7 @@ 3134087 N2MDW Joseph 3134088 KA2OON James 3134089 WB2SNN Charles -3134090 K2DLS Dan +3134090 K2IE Dan 3134091 N2OZO Mike 3134092 KC2OBI Joseph 3134093 NI2O Mark @@ -82974,7 +103588,7 @@ 3134273 KU2G James 3134274 N2WFW Edward 3134275 N2QKV John -3134276 WA2DIY Mark +3134276 KK2L Mark 3134277 N2SCL Gary 3134278 KD2HCI Javier 3134279 N2QKV John @@ -82986,18 +103600,18 @@ 3134285 K2JJS Joe 3134286 KB2VXP Brad 3134287 KD2JLX Sarah -3134288 K2OOL Arthur -3134289 K2OOL Arthur +3134288 N1ART Arthur +3134289 N1ART Arthur 3134290 N2TQG Clifford 3134291 N2HT John 3134292 N2KPV Ben 3134293 N2WNS Bill -3134294 K2XE James +3134294 K2XE Jim 3134295 AA2JC Jay 3134296 KC2ORX Robert 3134297 WA2KKG Kenneth 3134298 KD2EIB Chuck -3134299 K2XE James +3134299 K2XE Jim 3134300 N2HWY Anthony 3134301 K2UHF Robert 3134302 N2SPR Carol @@ -83020,7 +103634,7 @@ 3134319 KD2GFL Robert 3134320 N2XBK Jeffrey 3134321 K2XDX Lou -3134322 KC2ZOM Arthur +3134322 K2AUX Arthur 3134323 KD2DRS Lee 3134324 KD2GFL Robert 3134325 N2IXU Michael @@ -83031,6 +103645,7 @@ 3134330 W2TTT J 3134331 K2ZA John 3134332 KB2HWE Benjamin +3134333 KE6IKG Lawrence 3134334 KC2STQ Elmer 3134335 KD2BOR Rocco 3134336 WA3RGY Philip @@ -83084,8 +103699,8 @@ 3134385 K2KMB Kevin 3134386 N2KMB Kevin 3134387 WA2EVL John -3134388 K2DCC Thomas -3134389 K2DCC Thomas +3134388 K2DCC TJ +3134389 K2DCC TJ 3134390 K3YB Dave 3134391 WB2RFV John 3134392 W2VIB Robert @@ -83144,7 +103759,7 @@ 3134445 KI4KWR Stephen 3134446 AE1DR Daniel 3134447 WA2WUN James -3134448 K2AUD +3134448 K2AUD Boro 3134449 KB2RLQ Eddy 3134450 KD2JGH Jerry 3134451 K2ZGW Mario @@ -83194,7 +103809,7 @@ 3134495 N2RPQ Richard 3134496 KB2KTD Carolyn 3134497 KD2CQL Joseph -3134498 KA2QIT Robert +3134498 KA2QIT Bob 3134499 W2SWX Lawrence 3134500 KD2LBA Michael 3134501 KC2BE Randle @@ -83250,7 +103865,7 @@ 3134551 W2TT Harold 3134552 WA2LNC Anthony 3134553 W2TT Harold -3134554 W2OU Eldred +3134554 W2OU E 3134555 KD2FJV David 3134556 K2LAB Robert 3134557 W2DHS David @@ -83260,7 +103875,6 @@ 3134561 KB2DEM Warren 3134562 W2MJR Matthew 3134563 KC2ZXP James -3134564 WR3IRS Justin 3134565 KD2LNO Aaron 3134566 W2DIS David 3134567 KC2FZG Anthony @@ -83295,21 +103909,22 @@ 3134596 KD2HWH Brian 3134597 KD2ION Robert 3134598 KD2JUL Eric -3134599 KM4WUD +3134599 KM4WUD Motodmr 3134600 KD2LZW Piotr 3134601 KD2LZW Piotr 3134602 AC2ST Steve 3134603 W2HRW Gary 3134604 K1WS Kenneth 3134605 KD2LZT Jonathan -3134606 N2IPH Robert -3134607 K2MFW Matthew +3134606 N2IPH Bob +3134607 K2MFW MATT 3134608 KD2HPQ Angelo 3134609 KD2FPY David 3134610 KC2IDB Kenneth 3134611 KD2FDX Michael 3134612 WS2Q Harvey 3134613 N2PTR James +3134614 KE8LNI Richard 3134615 KC2MMC Terry 3134616 N2TYB Daniel 3134617 KD2KYZ Zalmy @@ -83363,7 +103978,7 @@ 3134665 KC2WUG Andrew 3134666 KD2MKZ Richard 3134667 N2AK Mario -3134668 KD2MDI John +3134668 W2JRR John 3134669 AC2MB Michael 3134670 KD2HZK Angel 3134671 K1DGN Matthew @@ -83396,6 +104011,8 @@ 3134698 N3VE Jeffrey 3134699 KC2ZOL Timothy 3134700 K2RWH Richard +3134701 KY4PIX Kenneth +3134702 KK4VCB CURTIS 3134703 KC2ZOL Timothy 3134704 KG1LFD Kacper 3134705 N3ZJN Megan @@ -83428,6 +104045,7 @@ 3134732 KD2MYB Steve 3134733 N2JPK James 3134734 N2JPK James +3134735 W9QQ David 3134736 N2HEM Henry 3134737 AC2OK Eric 3134738 KD2MPS Mark @@ -83440,7 +104058,7 @@ 3134745 KD2KBF Laurence 3134746 KA2A Timothy 3134747 KD2JPV Holden -3134748 KD2JAU John +3134748 W2JF John 3134749 NP4H Nomar 3134750 W2HN Richard 3134751 KC2OUU Tom @@ -83452,8 +104070,8 @@ 3134757 K2MWS Michael 3134758 KC2ZFK James 3134759 KD2KLJ Nel -3134760 N2RAC Joseph -3134761 N2RAC Joseph +3134760 N2RAC Angelo +3134761 N2RAC Angelo 3134762 N2MFL Steven 3134763 KD2SAM David 3134764 KD2KLJ Nel @@ -83480,6 +104098,7 @@ 3134785 AC2X Jeffrey 3134786 W2RMC Ronald 3134787 KD2NKI Douglas +3134788 KE5QKI Michael 3134789 K2HVE Christopher 3134790 KD2NCN Michael 3134791 K2RIG William @@ -83494,8 +104113,8 @@ 3134800 KB2OOJ Frank 3134801 KD2HQY Daniel 3134802 KC2QAT Glenn -3134803 N2SHO Aly 3134804 WG0NZO Erin +3134805 KE0VAA John 3134806 KD2NQY Paolo 3134807 KC2NFJ Michael 3134808 K2RJJ Robert @@ -83504,8 +104123,9 @@ 3134811 KD2NTW Bryan 3134812 N2GQP David 3134813 K3GDX Franklin +3134814 KI5DWB Curtis 3134815 KD2LOR Sean -3134816 KB2KUU Robert +3134816 KN2B Robert 3134817 KD2ADL Robert 3134818 N2VMI Christina 3134819 AC1NJ Bill @@ -83513,7 +104133,6 @@ 3134821 WU2E John 3134822 NJ2US Jeff 3134823 KA2NWS Laura -3134824 N2SHO Aly 3134825 N2DUG Albert 3134826 W2WCC Anthony 3134827 N2PRO Michael @@ -83539,10 +104158,9 @@ 3134847 W2APP Paul 3134848 KC2AOF James 3134849 WB2IHI Robert -3134850 W2FEN +3134850 W2FEN Randolph 3134851 KG2NU Francisco 3134852 AK7AL Donald -3134853 KD2NZC Shimaa 3134854 NE2C Robert 3134855 N2MMC Michael 3134856 NB2H Brian @@ -83563,6 +104181,8 @@ 3134871 K7AFM Pedro 3134872 K7AFM Pedro 3134873 N2KAB Shimaa +3134874 K4CBC Craig +3134875 KD8DNS ryan 3134876 KD2KAX Derek 3134877 KN3X Joseph 3134878 KA2RJA James @@ -83570,12 +104190,14 @@ 3134880 K2SNH Henry 3134881 KB2TNH Frank 3134882 KB2TNH Frank -3134884 WA2UMP +3134883 KJ7DTV Robert +3134884 WA2UMP Jim 3134885 KB3JG John 3134886 N2CYY Louis 3134887 W2UTR Albert 3134888 KD2GXP Charles 3134889 WB2SNJ Joseph +3134890 N5IZ Cecil 3134891 W3LMV Lucie 3134892 KD2ODN Tom 3134893 N2DMJ Daniel @@ -83593,6 +104215,7 @@ 3134905 KC2YDG Eric 3134906 K2NEC David 3134907 KT2Y Herbert +3134908 KJ7DTV Robert 3134909 W2DWL Dennis 3134910 KC2NPZ Anthony 3134911 N2PJW Paul @@ -83606,7 +104229,7 @@ 3134919 KB3MMJ Michael 3134920 K2PW James 3134921 KB2QCJ Adilio -3134922 KD2NEQ David +3134922 N2DLC David 3134923 KD2LBN Vito 3134924 N2HWY Anthony 3134925 WW2I Peter @@ -83620,6 +104243,7 @@ 3134933 K2CIN John 3134934 KD2LVW Jermaine 3134935 N3PUU Frank +3134936 KN4TGV STEFANOS 3134937 N2EDI Edward 3134938 K2HEN Henry 3134939 KD2NDY John @@ -83629,7 +104253,7 @@ 3134943 KD2OOL Benjamin 3134944 KD2OOD Daniel 3134945 KE2RON Ronald -3134946 WA2UMP +3134946 WA2UMP Jim 3134947 K2LDD Luis 3134948 WY1LIE Scott 3134949 AL0Y Aly @@ -83644,8 +104268,9 @@ 3134958 KC2UBM Domenico 3134959 K2EDS Eric 3134960 KD2OQN Robert +3134961 KN4TKR Steven 3134962 NN2P John -3134963 KC2VNM Arnel +3134963 KC2VNM donnel 3134964 W2XAA Armie 3134965 KC2WKR Aaron 3134966 K9INC @@ -83669,7 +104294,7 @@ 3134984 KB3PQP Harry 3134985 KB3PQP Harry 3134986 K2RPC Kenneth -3134987 N2EON Andrew +3134987 KC2G Andrew 3134988 KD2MKZ Richard 3134989 WB2EKV Josephine 3134990 KD2NWH Michael @@ -83679,8 +104304,10 @@ 3134994 K2RAC Ronald 3134995 KI4TXL Robert 3134996 N2KEJ Stephen +3134997 WD4FOX Jon 3134998 N2BEI Joseph -3134999 KD2MCG NJECT +3134999 NJ2CT NJECT +3135000 KG5VEO Nicholas 3135001 N5BG James 3135002 N5BG James 3135003 N5UBJ William @@ -83746,8 +104373,8 @@ 3135063 N7EXB Terry 3135064 KC5ZXW John 3135065 K5RHD Randolph -3135066 KD0WHB Skyler -3135067 KD0WHB Skyler +3135066 W0SKY Skyler +3135067 W0SKY Skyler 3135068 KG5HDJ Phil 3135069 KB5ZQF David 3135070 KC5JXG Shirley @@ -83759,7 +104386,7 @@ 3135076 W5ASM Adrian 3135077 KC5KH Keith 3135078 N5JDY Kenneth -3135079 KU5J Bob +3135079 NN5D Bob 3135080 KG5JCE Jacob 3135081 KB5KYW Michael 3135082 KC5CEP Richard @@ -83777,13 +104404,14 @@ 3135094 N5KE William 3135095 AJ5Z Willie 3135096 KB5XE Owen -3135097 KG5SLG Elmer +3135097 W5SLG Elmer 3135098 KB5XE Owen 3135099 K5HLH Harry 3135100 KC5EEG June 3135101 K5HLH Harry 3135102 KB3XC Van 3135103 KE5JAK Steve +3135104 AE7Q Dean 3135105 K5RKE Don 3135106 K5RKE Don 3135107 W4RCN Theodore @@ -83801,25 +104429,31 @@ 3135119 W5APD Alan 3135120 NM5PS Peter 3135121 KA5KLX Hugh -3135122 N7EOJ Joseph +3135122 N7EOJ Budd 3135123 W9YA Robert 3135124 KG5OPG Isaiah 3135125 K5LXP Mark 3135126 KG5OYU Stephen +3135127 W0XPC David +3135128 KE8IFC Craig 3135129 AC5N David 3135130 W5VZB Eric -3135131 N7EOJ Joseph +3135131 N7EOJ Budd 3135132 KA5BIW Paul 3135133 AB5WJ Franklin 3135134 NK5W Bruce 3135135 KK5DA Kevin 3135136 N5TXH Gary +3135137 KN6ARB Ryan +3135138 KC0CRW Ellen 3135139 WD5EQY Declan +3135140 KD9LQG Nathan 3135141 K5AJR Albert 3135142 NR5ON Ronald 3135143 WJ5I James 3135144 N5XDF Terence 3135145 N5XDF Terence +3135146 KC1LEI douglas 3135147 KF5NDS Jacob 3135148 AE5CZ Lawrence 3135149 NM5JH James @@ -83829,6 +104463,8 @@ 3135153 K5TA Scott 3135154 K3DCC Andrew 3135155 K3DCC Andrew +3135156 KF4JK Gary +3135157 N6JOJ Tom 3135158 WA8KCW Fred 3135159 WA6WON Tommy 3135160 NB5R Brian @@ -83841,6 +104477,7 @@ 3135167 K5UOT Blaine 3135168 AD5SX Paul 3135169 KG6JCA Robert +3135170 K5MJD Michael 3135171 K5VJY John 3135172 AC5VD Franklin 3135173 K5NEC Douglas @@ -83853,6 +104490,8 @@ 3135180 KD7BJF Brian 3135181 KG5JXS Dantzel 3135182 WS5D Jack +3135183 KB3HWM David +3135184 KK6QWC Jonathan 3135185 KB7PXR Jon 3135186 NM5DP David 3135187 AD5BK Frank @@ -83860,13 +104499,19 @@ 3135190 K5ZX Eugene 3135191 AK9AK Jim 3135192 KC9QHC Susan +3135193 AG4GD Barry +3135194 KE0SRL Jeffrey 3135195 KF5WFN Paul 3135196 KG5YYI Mickey 3135197 N5LHO John +3135198 W0FZJ Evan 3135199 W5OMU Jeffrey +3135200 K4SPG Shawn 3135201 KF5KHG Terrence +3135202 KI5BAT Robert 3135203 KE5LSX Nathan 3135204 N5IOR Steven +3135205 AI4EE Paul 3135206 WA4HND Alfred 3135207 WA5YXQ Larry 3135208 KF5DTR Eric @@ -83877,6 +104522,784 @@ 3135213 AG5PJ Michael 3135214 AG5PJ Michael 3135215 KI5US Keith +3135216 KN4TLV Tyler +3135217 AA8OY James +3135218 KJ2Z Stephen +3135219 KN6APQ Michael +3135220 NN7DJ Dennis +3135221 KF7GGD Gerald +3135222 W6WBO Steven +3135223 KD9MNS Joseph +3135224 KN4PLR Robert +3135225 KC9LRO Samuel +3135226 N5UOY Michael +3135227 KC9LRO Samuel +3135228 KD2ROK Spencer +3135229 KD5HIY Chris +3135230 KD0MLN Tron +3135231 N2HIP Robert +3135232 KC3BDF Jacob +3135233 K1CHC Charles +3135234 KN4OPZ Randle +3135235 KD0ERN John +3135236 K0BDF Brian +3135237 K5WXV Richard +3135238 KN4TKG Cory +3135239 KN6ACL Sandy +3135240 KD2PEL Peter +3135241 KC1LCQ David +3135242 W4EEG Erwin +3135243 KJ7BVL Bruce +3135244 KE8LSP Eric +3135245 WJ4CAB Brian +3135246 N0HOY Dean +3135247 KG5KZL Jerry +3135248 KE0PBR Paul +3135249 N5EQW Stephen +3135250 W7UFO Phillip +3135251 K6EV David +3135252 K5LER Lawrence +3135253 K6LRY Lori +3135254 KI7QMG Tim +3135255 KC1LED Philip +3135256 KK4LXY Theodore +3135257 KC1LED Philip +3135258 KF4HZU Jesse +3135259 KN4TDT Gregg +3135260 WD4IFC Stephen +3135261 KI5DWA Samuel +3135262 K5DJD Denis +3135263 WA4ZZN Robert +3135264 KB4CXQ Melanie +3135265 KI7LDQ Jay +3135266 KD0PAK Kevin +3135267 KD9HBC Jasen +3135269 KD9MEK Bobby +3135270 W5KLF Keith +3135271 K1VD Arestotle +3135272 KI4SWD Jackie +3135273 KG4PXG Worth +3135274 K4LAS Lamar +3135275 KE0QIB Michael +3135276 KI7TPJ Brett +3135277 KC8SIN Shane +3135278 W2KGK Kurt +3135279 KC3NBU victor +3135280 KC3DES David +3135281 AC8IK Jeffery +3135282 W5RJB Roger +3135283 KO4BRB Benjamin +3135284 KB9UDR Jason +3135285 KB0DMU Erin +3135286 W0TFG Thomas +3135287 KE6MYV Douglas +3135288 W0KHP Jason +3135289 KC7IYU Kevin +3135290 KN4OFN Michael +3135291 KN6ARA James +3135292 AD0NU Carl +3135293 K3GBB George +3135294 KD6DHB Jeffrey +3135295 KN4TGM Mike +3135296 KB8SCR David +3135297 W3JWS Joseph +3135298 WA4YPQ George +3135299 KD4UWW Russell +3135300 W3JWS Joseph +3135301 KN4TGM Mike +3135302 AC2XV Catalin +3135303 AC2XV Catalin +3135304 KI7LDQ Jay +3135305 K0SKW Corby +3135306 KB9HGI Steven +3135307 N4KSM Joshua +3135308 KN4KCS Richard +3135309 K3WOC Mark +3135310 N7AFA Josh +3135311 KE0UVQ Wesley +3135312 KC0KMQ Michael +3135313 WU7ANG Jacob +3135314 WA3QCV Timothy +3135315 N5IMJ Jerry +3135316 KD8STX Justin +3135317 KD7YUW Andy +3135318 AJ6BO +3135319 K0MKH +3135320 K0MKH +3135321 K7JN James +3135322 NM1O Joe +3135323 K4JDY John +3135324 WP2AHG Russell +3135325 KN4KPF Daniel +3135326 N3MWF Roger +3135327 K8RRG +3135328 K3RMB Robert +3135329 W0IOA Clay +3135330 W3COX James +3135331 KC5WPJ John +3135332 KA3EJV Drew +3135333 KN4AWO Ronnie +3135334 W0SUN William +3135335 K5BRK Jarred +3135336 W8DLW Dave +3135337 KI5CFW David +3135338 KA3SME John +3135339 WZ6X David +3135340 KE8LJV Phillip +3135341 KB5RFO Richard +3135342 KC3NDI Steven +3135343 N3GIS Andreas +3135344 WB3AVD Theodore +3135345 NR1OA George +3135346 W4JIC Robert +3135347 KJ7FAP James +3135348 N7AFA Josh +3135349 KM6GTS Bryan +3135350 N9ZBQ Peter +3135351 KD2RFY Kurt +3135352 KN4SRQ Jason +3135353 ND8G Bernard +3135354 AA0JA William +3135355 AC5NH Jonathan +3135356 KA7TAZ Chris +3135357 KF7TIJ Daniel +3135358 KA4DID Luisa +3135359 KH7ROS Ross +3135360 AG7SZ Mark +3135361 KN6ATG Napont +3135362 N5IIA Glenn +3135363 W7DQL Kevin +3135364 N5ZBR Michael +3135365 KC3JJN Timothy +3135366 K4LUF Kris +3135367 KE5YYP Jeff +3135368 KM6OTF Marshall +3135369 K5JSK Jason +3135370 W9WXV Victor +3135371 AC2QI Alfred +3135372 KI7SLS Blake +3135373 N2LEE Lee +3135374 N0VYE Greg +3135375 N9TDJ Al +3135376 K3PW J +3135377 KN4TGT Semion +3135378 W9RAR +3135379 W9RAR +3135380 W5SRS Steven +3135381 KE8IYS Curtis +3135382 W4DPS Dayton +3135383 KN4RYB Douglas +3135384 N0CML Charles +3135385 W2ECK Paul +3135386 KE8AZY Craig +3135387 WB5ALF Alessandro +3135388 K6BDD Berk +3135389 N0HDR Kevin +3135390 N1PAY Robert +3135391 KI7ZDO Linda +3135392 AI4JI David +3135393 AA5I Gary +3135394 W4RWS R +3135395 K0NJN Natalie +3135396 W6GIG Tim +3135397 W1KMJ Keith +3135398 N4CQR Craig +3135399 KN4PDJ Mariusz +3135400 N3TLZ David +3135401 KB7WSD Grant +3135402 N7SS Scott +3135403 KC0GU Warren +3135404 N6DOZ Rudy +3135405 K8USA Sam +3135406 KN4E William +3135407 KG7SCT Matthew +3135408 N9HRA Richard +3135409 N9YIW Daryl +3135410 KC0NRQ Garrett +3135411 N4THW Carlos +3135412 KD2RRD John +3135413 KK4YUL Paul +3135414 K6AOB James +3135415 KI5ARL Loretta +3135416 KC3KVV Dave +3135417 NX2GW Garret +3135418 KI7SI Mark +3135419 KM4AUG Kevin +3135420 KG5LTL James +3135421 K1ETB Ned +3135422 WK9F Jerry +3135423 N9WZY Lee +3135424 WQ7H James +3135425 W2UN Marco +3135426 KG4BHR Shawn +3135427 KC0GU Warren +3135428 K8BMC Mark +3135429 KE8LTG Melanie +3135430 KE1FIE Alexander +3135431 W8ZZW Zachary +3135432 KE8LTJ John +3135433 WX2TXU Jeremy +3135434 K2IBH Itamar +3135435 KF4EBG Robert +3135436 KG2IT Donald +3135437 KC2NIU Daniel +3135438 KF5YWQ John +3135439 KM4DYR David +3135440 KC1EEB James +3135441 KA5AOK Christopher +3135442 KM6PPT Fernando +3135443 KG7KHP Alan +3135444 W9JKL Jeff +3135445 K1LI Brian +3135446 N4SCC Andrew +3135447 N3DLG David +3135448 K5EST Walter +3135449 KR8AM Mark +3135450 KD0SJR Beth +3135451 KC5GBX Douglas +3135452 KC2OQF Michael +3135453 N8CUB Chester +3135454 WB6ZRD William +3135455 KB3KAU Rodney +3135456 KD5SLR Fred +3135457 KJ6MDF Lawrence +3135458 K2AYT Angeli +3135459 N5MI Mark +3135460 KJ7DYH Daniel +3135461 K3SLS Steve +3135462 N5ZHB Wayne +3135463 WJ3G Wilson +3135464 KF8TC Walter +3135465 K6BBC Anthony +3135466 KC2LYK Steven +3135467 W7YJS Jeffrey +3135468 AD1HD Robert +3135469 KC3AGA John +3135470 KC2YTN Erica +3135471 KN6ATI Christopher +3135472 K8ARP Arpad +3135473 AD7ZJ Elijah +3135474 KD6ZMO Ydalberto +3135475 KN4EWT Thomas +3135476 KC9OJP William +3135477 KC3NEJ David +3135478 KE8BYJ Michael +3135479 KE6IKG Lawrence +3135480 KB7ZPR David +3135481 N6SBN Craig +3135482 WA1YNB John +3135483 W0VJ Vron +3135484 KD5KZL Joseph +3135485 N4YE Christopher +3135486 KE4QWX Jeffrey +3135487 K6KRI Christina +3135488 KN4TCG William +3135489 KW0R Hugh +3135490 N4IPH Phil +3135491 AD0TL Kurt +3135493 N3WER Chris +3135494 N7VVW Steven +3135495 KE0KDC Michele +3135496 N3YJN Brian +3135497 N3KGD Nicholas +3135498 KE0UXC Kevin +3135499 KI5DQG Justin +3135500 KC3NEK Christopher +3135501 W6BZY Kenneth +3135502 KD4QFT Colin +3135503 W3MCV Marvin +3135504 KE4LF Liann +3135505 W3NJT Roland +3135506 N1REG Charles +3135507 K1UOP Robert +3135508 W4BKP Brandon +3135509 KD9IGT Justin +3135510 KE0VCX Ray +3135511 N2TPJ Raymond +3135512 N6IRA Daniel +3135513 K7BFJ Charles +3135514 W9CZK Christopher +3135515 KD1CR Jason +3135516 N6NWS Jeremy +3135517 KN4TDI Haley +3135518 KE8HPP Jack +3135519 KE8HEE David +3135520 K7AAI Ben +3135521 K5KRK Kris +3135522 K0MTB Michael +3135523 KE8LUL Joseph +3135524 WB0OUX Martin +3135525 KB8GAE Richard +3135526 N0ZHE Gregory +3135527 KC3NDA Jason +3135528 KB5YHM Lisa +3135529 KB1ZTX Walter +3135530 KE5IRC Brian +3135531 W9VOX Gregory +3135532 KD9LQL Kenneth +3135533 KB9YGI Robert +3135534 WK8F David +3135535 KB7SQF Richard +3135536 KN6AOE Jonathan +3135537 N3VXM Terry +3135538 AF4JM John +3135539 KE0VDZ John +3135540 KJ7FGT Justin +3135541 KC1GXT Antoinette +3135542 KN4SWF Allan +3135543 KA4KBX Gary +3135544 K5TRD Brook +3135545 W9QYQ Ham +3135546 WA4ZLW Leon +3135547 W1BVT William +3135548 WN0L Lance +3135549 WZ2W Steven +3135550 W7AZC Shawn +3135551 KD2QKU Steven +3135552 KM4TCW Darren +3135553 KX7DX Dante +3135554 W8ORG Randy +3135555 KD9MNZ Beverly +3135556 K6ATS Art +3135557 N4THW Carlos +3135558 N8BKI David +3135559 W8ORG Randy +3135561 WB2FLX Robert +3135562 KD4SV David +3135563 K9CC George +3135564 AI4AK Warren +3135565 WY2V Kris +3135566 W5TXP Peter +3135567 KJ6KPI John +3135568 KE0QFY Aaron +3135569 N5LL Leslie +3135570 N4MES Shafeek +3135571 KE5DAB Scott +3135572 KI5CZL Robert +3135573 KB1WRJ William +3135574 AI8F Corey +3135575 N8KQ Randall +3135576 KE0OTQ Glenn +3135577 KC0JBN Lloyd +3135578 KN4RNM Derek +3135579 KQ1D Gilbert +3135580 KB1YFN Matthew +3135581 N3TVC Robert +3135582 N3TVC Robert +3135583 KN4RDT James +3135584 KB7UNS David +3135585 N5GNT James +3135586 N0IGD Mark +3135587 KI6GIP Eric +3135588 K6KZO Alonso +3135589 K4KLB Jon +3135590 KJ7GS Donald +3135591 K8JMP Jeffrey +3135592 W4HAW Jim +3135593 KC3KGX Robert +3135594 KE5BKP Gregory +3135595 KC4BTS Bruce +3135596 W4TMK Mitchell +3135597 N7CKY Nickolas +3135598 KJ7EVN Brenda +3135599 K5DCX Donald +3135600 WD8MWT Paul +3135601 K8FBI FBI +3135602 WF6ZZ David +3135603 N3QEM Stephen +3135604 KC2DYZ Peter +3135605 K7VIQ Paul +3135606 N5AGG Daniel +3135607 KM4YVX Timothy +3135608 KD2DLO Barry +3135609 K9EZ Kent +3135610 KS7Y Raye +3135611 KI5DUL Eugene +3135613 KC3BUG Steven +3135614 N7CTE Barry +3135615 N5ZRF Denny +3135616 W0MRA Paul +3135617 K6ZWS Edward +3135618 KC3HXJ Richard +3135619 KN4OUK Mark +3135620 N7HNX Randy +3135621 KD8IZU Timothy +3135622 N4TGO Douglas +3135623 K6ZWS Edward +3135624 KN4CWN Michael +3135625 K9JRI Michael +3135626 K6SAR Richard +3135627 KG6TPA John +3135628 KJ7RD Richard +3135629 NB8F Andrew +3135631 W8QAS Roy +3135632 KM6WCO Michael +3135633 N9MJ Miles +3135634 WH6CZU Carl +3135635 WZ6L +3135636 KG5VZ Gregg +3135637 K6OG Paul +3135638 KM6LHY Danny +3135639 KC2YYF Steven +3135640 W8UU Richard +3135641 W3JMC John +3135642 N9NTN Gerald +3135643 KM4OGQ Joseph +3135644 KC9RMK Wayne +3135645 KD6DHB Jeffrey +3135646 N1CLF Cody +3135647 KC1CMV Evan +3135648 W6HAX Matthew +3135649 N9WTX Ralph +3135650 WW0K Zachary +3135651 KE0UPJ Mary +3135652 KK6YDY Jack +3135653 KE5GRY Lester +3135654 W6HAX Matthew +3135655 KE8JHP Kenneth +3135656 KG7TFL Phillip +3135657 KB2WRP Ray +3135658 KJ4LRZ Nathan +3135659 KF5CDD Johnny +3135660 KC3JIX Daniel +3135661 AC0ZU Gene +3135662 KE8LVM Ethan +3135663 KE8LVM Ethan +3135664 KN4FRA Susan +3135665 W4XDS Jim +3135666 KC1CMV Evan +3135667 KG7TFL Phillip +3135668 KN4PIH Richard +3135669 KE8JSF James +3135670 AI6JN Danny +3135671 AE0U Gregory +3135672 KN6AEL Zayn +3135673 KE5YFW Charles +3135674 KJ6UXM Ruben +3135675 WA5FYI William +3135676 KC2EKE Johnson +3135677 N6PDR Paul +3135678 KM6NDW Robert +3135679 K5MLK Matthew +3135680 K7SVN Derrick +3135681 KE0VET Sam +3135682 KI5CNJ Gary +3135683 W2SCL Scott +3135684 KL1EL Thomas +3135685 N2KNL Bill +3135686 N4YWD Homer +3135687 W8RIH Thomas +3135688 KC0AIP Brian +3135689 N8QQS Nick +3135690 N2KNL Bill +3135691 K3MOT Steve +3135692 N0PW Bryce +3135693 K2RBL R +3135694 KI5DZA Zach +3135695 KD2RTU Derben +3135696 AB7WA Bryan +3135697 W2KQ Joachim +3135698 WA7DEM Scott +3135699 WA7DEM Scott +3135700 WA7DEM Scott +3135701 WA7DEM Scott +3135702 WA7DEM Scott +3135703 WA7DEM Scott +3135704 WA7DEM Scott +3135705 WA7DEM Scott +3135706 KN4PIH Richard +3135707 N8TYR Stanley +3135708 N2MSS Enrique +3135709 K5LRV Matthew +3135710 KI5DZA Zach +3135711 N8VQG Drew +3135712 N6RLG Robert +3135713 N6RLG Robert +3135714 WZ4P Marvin +3135715 W6YBW Christopher +3135716 AE0EW David +3135717 KE0UIU Johnnie +3135718 KM4RDE Eric +3135719 N9RHG Darren +3135720 W2QA David +3135721 KC1KZD David +3135722 KG6QAZ Jillian +3135723 KC6WBN Larry +3135724 KK6ITL Douglas +3135725 N4MMJ Roland +3135726 AJ0F Curt +3135727 AJ0F Curt +3135728 WT4Y Gary +3135729 WA6PEL Robert +3135730 KD9MUW Matthew +3135731 N5YCE Cha-kei +3135732 KC8JDQ Kieth +3135733 WA5FYI William +3135734 K5SHB Sven +3135735 KC0KJW Carl +3135736 KG6LIN Peter +3135737 AJ6JC Dirk +3135738 KC2PES Ronald +3135739 KE0OBM Lora +3135740 W5KKM Karen +3135741 W1EED Ryan +3135742 N1NCB Howard +3135743 KG5KRQ Alvin +3135744 K6BDR Brandon +3135745 KE0UQS Jeremy +3135746 KD9MUS Hongfei +3135747 KB3MHQ John +3135748 AA2CO Howard +3135749 KC3FVK Gregory +3135750 KE8LVY Duane +3135751 KG5TCT Paul +3135752 N7ULZ Al +3135753 KE8ETI James +3135754 KD9MUS Hongfei +3135755 K4NMF Joseph +3135756 N2GUN Adam +3135757 KN4TKJ Roger +3135758 KS4SX William +3135759 W8SCA Phillip +3135760 KN4TMG Andrew +3135761 N9KXV David +3135762 AJ6EQ Jim +3135763 KI6KZD Michael +3135764 KB9VQB Nicholas +3135765 KF5PWN Gaye +3135766 KM6FNT Sheldon +3135767 KN4BOE Thomas +3135768 KN4TMG Andrew +3135769 KD9AUY Stanley +3135770 KD2CUO George +3135771 AA3YE Joseph +3135772 KN4OXQ Greg +3135773 KN4THT Charles +3135774 W9UIJ Karl +3135775 AA1Z Richard +3135776 N6KZB Michael +3135777 AA1Z Richard +3135778 KD9KPF Tony +3135779 N3SBA Michael +3135780 KE7FNS Jason +3135781 KN4ONE Thomas +3135782 K4NRD Patrick +3135783 N6KZB Michael +3135784 W2BCH John +3135785 KF4ZLK Paul +3135786 KF4DNY Stephen +3135787 N9LO Lee +3135788 W6VOM Alameda +3135789 KN4TQB Chuck +3135790 KC1IIH Robert +3135791 KF4DNY Stephen +3135792 KC3LMP Joseph +3135793 NG1D Shane +3135794 KN4AGQ Robert +3135795 W5HWK Calvin +3135796 AB7WA Bryan +3135797 KF4ZLK Paul +3135798 KW4BQ Emery +3135799 WX4BIL William +3135800 W2RDK Ron +3135801 KK6KNZ Bryce +3135802 N1EXC Juan +3135803 AC9BX Eric +3135804 KD5JRJ James +3135805 KD9JHC Richard +3135806 AC2KW Lewis +3135807 KD7IQL Steven +3135808 N0HF Daniel +3135809 KF5VTG STEVE +3135810 W7HCC Jake +3135811 N2LO Robert +3135812 KB0OZH Scott +3135813 KY9J Jason +3135814 KE8LUM John +3135815 WB0QNA Kenneth +3135816 KI5BFR James +3135817 N7YUT Scott +3135818 W5DBL Larry +3135819 KC3ALX Rob +3135820 KC9LVU Nathan +3135821 KK4WJG Billy +3135822 KF6GNH Phillip +3135823 KM6ZPO Mark +3135824 KC8JSU Joshua +3135825 N3KF Kenneth +3135826 KJ7FIN Rudy +3135827 ND4L Scott +3135828 KC8IHT Dean +3135829 K7DAL Debra +3135830 KB1BBQ Kyle +3135831 N7ART Lawrence +3135832 KD7Z Brian +3135833 K3PLR Richard +3135834 K2RWT Richard +3135835 KD8HYL Jason +3135836 KC3NFR Anna +3135837 KE4EDD Carlton +3135838 KE0VEZ James +3135839 KC3LZA Agnes +3135840 KD2RJZ STEPHEN +3135841 KE4EDD Carlton +3135842 WB7QDQ Rob +3135843 K1JIL George +3135844 W7BOZ Kevin +3135845 KM4BQA Dean +3135846 KE8LUU Patrick +3135847 N1EXC Juan +3135848 K3ALG Aaron +3135849 KC0NVI Randall +3135850 AC9UU Don +3135851 KC2ORH Robert +3135852 KB3IWV Keith +3135853 W7RGH Bryan +3135854 KC2ORH Robert +3135855 KA2QYA George +3135856 N8JAY Jay +3135857 WA0AFB James +3135858 KE5QJN Rebecca +3135859 KE8LUU Patrick +3135860 K4EEP Reginald +3135861 W5KNB Kenneth +3135862 KB4SMK Brent +3135863 KD9KLS +3135864 KD9KGT James +3135865 KB1ZYH Dennis +3135866 KB4SMK Brent +3135867 KB9BPF Bradley +3135868 W7RMH Richard +3135869 KC3NEH Richard +3135870 KD2PUM John +3135871 KE4WJR Wendy +3135872 KG5DNA Mark +3135873 KD0UWK Joe +3135874 KW4ES Tim +3135875 WW9RS Western +3135876 KD9JON Jason +3135877 N5RIG Geri +3135878 W9ECO Adam +3135879 KJ4NYU Katherine +3135880 W5WYO Alexander +3135881 W5DDZ Rollan +3135882 KB3JOM Mitch +3135883 W0RON Walter +3135884 KI5DRY Lawrence +3135885 N3TPR Chris +3135886 AC1GV john +3135887 KN4TST Shane +3135888 KN4COR Todd +3135889 KN4TRD Symon +3135890 KM6ORH Lawrence +3135891 WD8ILI Robert +3135892 AA3YB Leland +3135893 KN4TRD Symon +3135894 N0WAU Wayne +3135895 KI5AVW William +3135896 KC8RYM Christopher +3135897 W2FHA Fort +3135898 K4CQO Bob +3135899 K8KHW Randy +3135900 N5KTF Patrick +3135901 KC0RSC Eric +3135902 N7AZ Jon +3135903 KE5DEX Derek +3135904 AC8VV Jeffrey +3135905 KC3KRU Gary +3135906 KD0QFE Leonard +3135907 K6BRN Brian +3135908 KB2USD Diane +3135909 K6MCQ Edward +3135910 W4AAO Frans +3135911 KI7YCR Robert +3135912 KM6IHB Tyler +3135913 N0DMG David +3135914 K1IB Millyn +3135915 KI5DYY Anson +3135916 W4LTN Robert +3135917 KI5DYY Anson +3135918 KE0CDZ Joel +3135919 KN4SKI Julia +3135920 KD7GXN William +3135921 KK6MJG +3135922 KN6AQX Morgan +3135923 KC1KLL Austin +3135924 N6BRV Nat +3135925 KC1KLL Austin +3135926 KE0UQS Jeremy +3135927 K0YES Kenneth +3135928 W7DQL Kevin +3135929 KC0YQX Charles +3135930 W7BSB Isaac +3135931 WD5ILB Robert +3135933 KC5MPX Len +3135934 N1TAS Timothy +3135935 W3FIS Paul +3135936 W8SKB Scott +3135937 N6BYU Stanley +3135938 W8VLR Nathanael +3135939 W8NKG Nancy +3135940 KB9COP Nick +3135941 N3OJP Michael +3135942 KN4OOT Matthew +3135943 KN4RLG Dale +3135944 KC4HHW Billy +3135945 KO4WH Carey +3135946 KC4ODI David +3135947 W1ANT Heimir +3135948 N1NIO Scott +3135949 KN4SDB Donnie +3135950 K5EDJ Edward +3135951 KE8ISI George +3135952 W4QO James +3135953 KC8YOH Vernon +3135954 KE0TEN Donald +3135955 KG4IIC Russell +3135956 KC3IEF David +3135957 KC2UFR Edward +3135958 KJ6ZKC Michael +3135959 KB4ECO JOSE +3135960 WA1HZN Jeff +3135961 KF4CXB Stephen +3135963 N5TFD Thomas +3135964 KK6PYP James +3135965 KM6UTC Edward +3135966 AA6IF David +3135967 K9DWI Joseph +3135968 KN6AQX Morgan +3135969 W9FED Daniel +3135970 K5LDL Luis +3135971 KC1EVH Chris +3135972 N6GKB Keith +3135973 KC4YTR Michael +3135974 W4CHD Chad +3135975 K1VIP Andrew +3135976 N0NDM Lawrence +3135977 KC4YTR Michael +3135978 KC3MLM Michelle +3135979 KN6AZK Kenneth +3135980 KI5ECX Terry +3135981 NC8Q Charles +3135982 K2TGX Raymond +3135983 KD0INN Derek +3135984 W9RTO Gerald +3135985 K5LLE Leslie +3135986 NC8Q Charles +3135987 KD9LMV Peter +3135988 K4ZZT Jimmy +3135989 WE5SRL Lejo +3135990 WB3BKN Terry +3135991 KC8IWJ Jack +3135992 K4CRD Richard +3135993 KJ4ZDB Thomas +3135994 KD9VH Sherrell +3135995 KB1IJA John +3135996 KE9V Jeffrey +3135997 W3VLL Charles +3135998 KD2DLB Daniel +3135999 N3HEV Christopher +3136000 KB5CRD Douglas 3136001 W2KTU Keivan 3136002 N2WGC Michael 3136003 K2XTS Alex @@ -83905,11 +105328,11 @@ 3136026 WB2WAK Steve 3136027 N2ACF Adam 3136028 N2RMB Philip -3136029 K2MAK Kenneth +3136029 K2ZZ Kenneth 3136030 N2XJS Anthony 3136031 W2KWA Marc 3136032 KC2CQR Frank -3136033 K2MAK Kenneth +3136033 K2ZZ Kenneth 3136034 WA2IWC Don 3136035 N2BUF Jeremy 3136036 KC2CQR Frank @@ -83920,22 +105343,23 @@ 3136041 KC2PTG Marc 3136042 K2RWL Robert 3136043 N2HZG Armando -3136044 W2RFA Robert +3136044 W2RFA Bob 3136045 W2KTU Keivan 3136046 KC2YMS Julia -3136047 NY2SI Moshe +3136047 N2YU Mo 3136048 KC2PLF Monte 3136049 W2MRK Mark 3136050 K2ZD Mario 3136051 N2EMS Betzalel 3136052 KC2BVP Michael -3136053 NY2SI Moshe +3136053 N2YU Mo 3136054 N2KPK Jesus 3136055 N2LRX Daniel 3136056 N2DET Bob 3136057 KB2HHU Siegmund -3136058 W2JLH Jose +3136058 KF5ELC Brian 3136059 KC2CKB Carlos +3136060 K5CAP Craig 3136061 N2YDC Arnold 3136062 N2GHB Paul 3136063 N2XPK Victor @@ -83964,7 +105388,7 @@ 3136086 AE2K Eric 3136087 KD8EEE Cameron 3136088 WK2J John -3136089 KA2SAL Salvatore +3136089 N2SAL Salvatore 3136090 N2OWR George 3136091 K2AAU Authur 3136092 N2YN Marcos @@ -83992,6 +105416,7 @@ 3136114 KC2DPS Raymond 3136115 W2MRD Matthew 3136116 KA2ZEY Demian +3136117 W7DRM Douglas 3136118 KD2GZX Alexander 3136119 KC2PBT John 3136120 KB2LFH Henry @@ -84040,6 +105465,7 @@ 3136164 KC2PLJ Michael 3136165 N2OXV John 3136166 W2MGF Mike +3136167 KK6WCW Veniessa 3136168 N2OKB Francisco 3136169 N2NGK Thomas 3136170 KD2DAW Tyler @@ -84062,7 +105488,7 @@ 3136187 KC2CWT Robert 3136189 KD2BQM Robert 3136190 N2XKA Paul -3136191 KC2NBE Arnolfo +3136191 K2ECO Arnolfo 3136192 W2MAC Mike 3136193 N2LHD Jim 3136194 KB2YDK Tashaud @@ -84076,7 +105502,7 @@ 3136202 KC2WWX Amy 3136203 NG2K Carlos 3136204 KC2LAL Randy -3136205 W2CCR Chris +3136205 NW2A Chris 3136206 W2JEN Jennifer 3136207 WW2KW Tommy 3136208 W2JN Andres @@ -84085,7 +105511,7 @@ 3136211 NV2M Neal 3136212 KB2VBR John 3136213 KB3IZZ Michael -3136214 K2CYE Mike +3136214 N2RC Mike 3136215 KC2WXJ Robert 3136216 KD2FVR Frand 3136217 K2PH Paul @@ -84102,7 +105528,7 @@ 3136228 KB2ZAM Tom 3136229 KB2ZAM Tom 3136230 KC2WQH Jao -3136231 WA2UMP +3136231 WA2UMP Jim 3136232 N2JIJ Robert 3136233 WA2CW Barry 3136234 KC2VTJ Dominick @@ -84132,9 +105558,10 @@ 3136258 W2PB 3136259 N2TBC Gary 3136260 WA2VNV George +3136261 K2KXS James 3136262 KD2HAG Joe 3136263 N2RFI Sal -3136264 N2KLC James +3136264 N2KLC Jim 3136265 NY4Z Bernie 3136266 N2GHR Paul 3136267 WI2B Robert @@ -84195,6 +105622,7 @@ 3136322 KB2NRK Chris 3136323 WB2ZSE 3136324 KB2NRK Chris +3136325 KC2MBO Todd 3136326 KC2VOB Asad 3136327 N2KI Anthony 3136328 KF2AX Steven @@ -84206,7 +105634,7 @@ 3136334 N2ZGN Francis 3136335 N2PPN Richard 3136336 KD2HZV Dominic -3136337 KD2AKX John +3136337 KD2AKX JOHN 3136338 AK1NS William 3136339 NY4Z Bernie 3136340 KM2O David @@ -84345,7 +105773,7 @@ 3136473 WB2LFD Jim 3136474 KC2ECR David 3136475 KA2EMS Anthony -3136476 W2FEN +3136476 W2FEN Randolph 3136477 WB2KWC Ken 3136478 N2TFC Peter 3136479 K9NYS Matthew @@ -84373,7 +105801,7 @@ 3136501 NF2G David 3136502 KD2CSJ Michael 3136503 W2ALW Arthur -3136504 KD2AKX John +3136504 KD2AKX JOHN 3136505 KC2OOA Paul 3136506 K2PH Paul 3136507 KC2OOA Paul @@ -84427,7 +105855,7 @@ 3136555 KD2JFJ Ralph 3136556 KD2IRY Michael 3136557 K4ZGE Les -3136558 AI2M Daniel +3136558 AI2M Dan 3136559 K9GOD James 3136560 KM2E Kevin 3136561 N2GQR Rick @@ -84461,17 +105889,18 @@ 3136589 N2DY Donald 3136590 WX2LI Nassau 3136591 W2IGG Michael -3136592 KC2NM John +3136592 KC2NM Mike 3136593 KA1NJL Gary 3136594 KD2JHL Maria 3136595 KD2FEL Renee 3136596 K2JO Andrew -3136597 KA1NTG Timothy +3136597 KA1NTG Tim 3136598 W2CXN Brooklyn 3136599 W2GW John 3136600 KC2RCN Kevin 3136601 W2GW John 3136602 N2LEN Leonard +3136603 N7YRJ Lee 3136604 WO2H Michael 3136605 WI2C John 3136606 KB2WUS Francisco @@ -84487,7 +105916,7 @@ 3136616 K2HPS Henry 3136617 KB2BSL Gary 3136618 K2KAT Dakota -3136619 WK9K Joseph +3136619 K2OL Joseph 3136620 KB2ZPI Ashley 3136621 KD2CIO Andrew 3136622 N2OIH Miguel @@ -84497,6 +105926,7 @@ 3136626 K2ULZ Bruce 3136627 NY2EE Joseph 3136628 KA2NCD Vincent +3136629 KE5THY Jeff 3136630 K2ATY Alfred 3136631 KD2HQI Yury 3136632 WA2LKJ David @@ -84547,10 +105977,9 @@ 3136677 K2RHK 3136678 N2KTS John 3136679 KC2ICF Michael -3136680 KC2DYY Cesar 3136681 KD2IBH Scott 3136682 KC2MHY Kevin -3136683 KA1NTG Timothy +3136683 KA1NTG Tim 3136684 W2HCB John 3136685 NY1Q Yury 3136686 W2RTV Rocco @@ -84720,9 +106149,9 @@ 3136850 N2RCC Adam 3136851 W2PET Ryan 3136852 KD2ACL Steven -3136853 AA2CQ Richard +3136853 N2AF Richard 3136854 K2LSB Lorraine -3136855 N2WNU Jamieson +3136855 N0FKK Jamieson 3136856 N2ZTC Jami 3136857 KD2AON Joseph 3136858 N2PFX Felix @@ -84831,14 +106260,14 @@ 3136961 K2JEG James 3136962 AE2EE Dennis 3136963 N2DRX Knute -3136964 KD2KFX Gene +3136964 KY2MY Gene 3136965 KD2LGM Miles 3136966 W2NYJ Jonathan 3136967 N2EKR William 3136968 W2JPT Justin 3136969 N2NSP Nehal 3136970 K2DXS Frank -3136971 KD2KFX Gene +3136971 KY2MY Gene 3136972 N2SYT Randy 3136973 N2ZDU Joseph 3136974 K2HF Peter @@ -84856,16 +106285,18 @@ 3136986 K2AUO Peter 3136987 N2OJM Elliott 3136988 W2KYM James -3136989 KD2KTR Rich +3136989 KA2RAC Rich 3136990 WA2CDL Andrew 3136991 W2FGO Felix 3136992 N2WLS Gary 3136993 KD2GXI Robert 3136994 KC2WSZ Vito +3136995 KD8EDT Marcus 3136996 N2TFG Bruce -3136997 KB2BJ Philip +3136997 K4SVT William 3136998 KD2DLL Alexander 3136999 W2NYJ Jonathan +3137000 W9MMM Michael 3137001 W4ZO Ralph 3137002 W4ZO Ralph 3137003 KI4M Christopher @@ -84950,7 +106381,7 @@ 3137082 W5VM Vernon 3137083 W4BOG Mark 3137084 WX4F Gray -3137085 W4YX Nicholas +3137085 W4YX Bill 3137086 W9SLB Steve 3137087 N3TYA Mike 3137088 W4ZWA Zachary @@ -85021,7 +106452,6 @@ 3137153 KK4CMC Robert 3137154 N2DMR Garett 3137155 W4DX John -3137156 K4SQI Steve 3137157 K4AX Jesse 3137158 W4UFM Clyde 3137159 W4DCR John @@ -85047,7 +106477,7 @@ 3137179 W4DXJ Vashti 3137180 K4LQO Raymond 3137181 KG4CJL Dave -3137182 AK4LK Lance +3137182 AK4LK Greg 3137183 KE4AAP Danny 3137184 K2VIA Andrew 3137185 NC4BL Bill @@ -85181,7 +106611,7 @@ 3137313 KD4GHL Thomas 3137314 AB3QN Austin 3137315 KI4PNK Howard -3137316 KI4JGW Mike +3137316 K4JMS Mike 3137317 K1OC Tony 3137318 K3RHJ John 3137319 WB4UGG Tom @@ -85265,6 +106695,7 @@ 3137397 N3NCN Mark 3137398 N3DUG Douglas 3137399 W2EHD John +3137400 KB4PIX Edwin 3137401 KG4ZHW Kenny 3137402 NC4FR Fred 3137403 WA4SGF Stanley @@ -85288,7 +106719,7 @@ 3137421 AA3BM Bob 3137422 KK4BI Beryl 3137423 WX4WNC Adam -3137424 K4RQ George +3137424 K4RQ Monroe 3137425 W8LAD Lynn 3137426 W4HAT Donnie 3137427 KG4ECN Eric @@ -85360,6 +106791,7 @@ 3137493 KD4MC Michael 3137494 KM4JNA Brandon 3137495 NC4OI Dale +3137496 KN4TSL Zim 3137497 KM4GMC Sara 3137498 K4VJC Velda 3137499 KO4LJ Todd @@ -85409,7 +106841,7 @@ 3137543 W4PNY Martin 3137544 KD4WKX John 3137545 N8UBZ Steve -3137546 W4JFJ Frankie +3137546 K4IRV Frankie 3137547 W4CHI Ronald 3137548 AE4FG Kelly 3137549 N1TTY Kimberly @@ -85569,7 +107001,7 @@ 3137703 KM4GDU Carl 3137704 KC4UQI Alan 3137705 KK4MSB Brandon -3137706 KM4DVE Nathan +3137706 K4GRU Nathan 3137707 KM4C Melvin 3137708 KI4BRZ Randy 3137709 N4WYR Ronald @@ -85662,6 +107094,7 @@ 3137796 KK4NWR Amy 3137797 N3HIH 3137798 KG4ZHR +3137799 WH6CTN Corey 3137800 KG4YNN Norman 3137801 KE4VXC Chester 3137802 K4BMH Byron @@ -85704,7 +107137,7 @@ 3137839 K4DOR Justin 3137840 KB5AG John 3137841 KX4TIM Timothy -3137842 KD4HCT Leslie +3137842 KD4HCT Rohn 3137843 KM4LNL Joshua 3137844 K4DOR Justin 3137845 KM4AFY John @@ -85778,7 +107211,7 @@ 3137913 KM4RQR John 3137914 NC4CD Charles 3137915 NL7OT Randy -3137916 KD4HCT Leslie +3137916 KD4HCT Rohn 3137917 W4LCG Lloyd 3137918 KM4OSW George 3137919 KK4OVN Kevin @@ -85809,6 +107242,7 @@ 3137944 N4NCZ Miles 3137945 K4AKV Glynn 3137946 K4RSG Shawn +3137947 WA3QVU Mark 3137948 KI4EMS Michael 3137949 N4AAD Calvin 3137950 KK4PWA Wayne @@ -85853,7 +107287,6 @@ 3137989 WA4DMR Wnc-Dmr 3137990 WA4DMR Wnc-Dmr 3137991 N4GAC Ronald -3137992 KC4M Garth 3137993 K4IOA Bryan 3137994 KF4VMU Steven 3137995 KF4WND Eric @@ -85861,6 +107294,7 @@ 3137997 NC2N Michael 3137998 NC2N Michael 3137999 KT4JJ John +3138000 KD8LDS Tom 3138001 KD0WEB Quentin 3138002 KD0IOE Andrew 3138003 N0ATN Johnathan @@ -85873,11 +107307,985 @@ 3138010 KC0RJD Ryan 3138011 W0BSM Brian 3138012 AB0KS Carl -3138013 KG0YL Nancy +3138013 K0YL Nancy +3138014 KE8JRC Paul 3138015 KB8LXR Gerald 3138016 ND0TS Thomas 3138017 KE0QXK Jeremy 3138018 KE0QXI Kyle +3138019 K6AOB James +3138020 KE8KBC Frank +3138021 N1WEB Brian +3138022 KE8JRC Paul +3138023 N1TEY Jules +3138024 KM6CKD James +3138025 KC6ARY Kim +3138026 W7RIT Scott +3138027 KA9RCI Terrence +3138028 KG5TEF Franklin +3138029 N8VC John +3138030 K3SYD Sydney +3138031 KF4SAR NA +3138032 KF4SAR NA +3138033 W5MPT Monte +3138034 KI4WVC Robbie +3138035 W4OIT Floyd +3138036 KF4SAR NA +3138037 KF4SAR NA +3138038 KF4SAR NA +3138039 KF4SAR NA +3138040 KF4SAR NA +3138041 KF4SAR NA +3138042 KF4SAR NA +3138043 KF4SAR NA +3138044 KF4SAR NA +3138045 KF4SAR NA +3138046 KF4SAR NA +3138047 KF4SAR NA +3138048 KF4SAR NA +3138049 AI7Z Anthony +3138050 NO7UP Frank +3138051 KE0VHA Kevin +3138052 KE0QLJ Larry +3138053 KN4ROK Philip +3138054 KC0AVY Donovan +3138055 K3ALG Aaron +3138057 KG5DPF Ryan +3138058 WM0Z DOuglas +3138059 AB5VJ Daniel +3138060 N5JJC Mark +3138061 AF6WW David +3138062 N9TDE Marvin +3138063 KI4IJQ Frank +3138064 KN4RWR Thomas +3138065 N7GDW David +3138066 KB0MEC AREC +3138067 AA9ZI TJ +3138068 KI5DXB Vanessa +3138069 KJ4ZKG William +3138070 KI7VWV Richard +3138071 AA9ZI TJ +3138072 K9MQ Mark +3138073 KF5YAJ Cecil +3138074 KE7EDN Robert +3138075 KY4KH Kenneth +3138076 KN4PPX Daniel +3138077 KN4TOL James +3138078 N8DYJ Giovanni +3138079 KB3LAQ Joseph +3138080 N8DYJ Giovanni +3138081 KB0SQL Charles +3138082 KJ3X John +3138083 KC1KWN Keeley-Anne +3138084 KA3WCE Donald +3138085 KJ3X John +3138086 KG4AXO James +3138087 KC9RFV David +3138088 KN4LSB Joseph +3138089 KE7ZDS Tony +3138090 KC0QJS James +3138091 KD5AWU William +3138092 KF5IXJ Mark +3138093 KE7ZDS Tony +3138094 KI5CLW Alex +3138095 KF5IXJ Mark +3138096 KB5MXO Kevin +3138097 W4LEP Luther +3138098 N1CQZ James +3138099 AA4GE Robert +3138100 KD7IJR Ryan +3138101 K0KB Matt +3138102 K8PMJ Phillip +3138103 W0BBO Charles +3138104 KD2RDO Manuel +3138105 W0LAL Lauren +3138106 NC4RM Spencer +3138107 WB8ZRQ Rick +3138108 N8HSU Douglas +3138109 KM6LWA Jordan +3138110 KF5NUP Edward +3138111 KI5CEA Mario +3138112 KF6ROX Herbert +3138113 KD6ADC Gerald +3138114 KB3FNI Walter +3138115 K5NCW Wayne +3138116 K6ODS Eric +3138117 KD8AZO David +3138118 KE4IFE Russell +3138119 W6RJL Richard +3138120 K7TJK Troy +3138121 KI6EAI Robert +3138122 KN4MWN Michael +3138123 W6IZK Wayne +3138124 KJ4KKI Roy +3138125 K4GJN George +3138126 K6MV Loc +3138127 KJ6SEE Daniel +3138128 K7OZK Jock +3138129 KI5EBB Johnny +3138130 K4QFS Lane +3138131 K4ECJ Eric +3138132 WA4NPB John +3138133 AC1HD Raymond +3138134 K1AFS Andrea +3138135 KD8AZO David +3138136 AA4VI Larry +3138137 K6MV Loc +3138138 N6NWS Jeremy +3138139 KD9MXZ Erik +3138140 KE8LXX Wilfredo +3138141 KE8LXS James +3138142 KC5KHR Steve +3138143 KJ7CBO Robert +3138144 KB8SCS Duane +3138145 N6AMO William +3138146 N1NQ Jose +3138147 N8OQY Michael +3138148 W4KST Kennesaw +3138149 W4KST Kennesaw +3138150 W4KST Kennesaw +3138151 W4KST Kennesaw +3138152 W4KST Kennesaw +3138153 W4KST Kennesaw +3138154 W4KST Kennesaw +3138155 AI8F Corey +3138156 KJ7CBO Robert +3138157 KH7DQ Douglas +3138158 KE8KGL Anthony +3138159 K4BUS Michael +3138160 KG5KIC Russell +3138161 KD2RVY ABE +3138162 KD2QAG Christopher +3138163 WA3KZO Daniel +3138164 N5DLD David +3138165 K9ROD Rodney +3138166 KC3FZM Daniel +3138167 K4GNE Gene +3138168 KN6BAZ Oleksandr +3138169 KE0CSC John +3138170 KI7GHE Timothy +3138171 KD2RKW Brett +3138172 KD4SRM Elwood +3138173 KE3KK Ronald +3138174 KI7GHE Timothy +3138175 KN4KNL Lawrence +3138176 AA1V Donald +3138177 K1FMK Frank +3138178 AG5SS Bharath +3138179 N6FNP Thor +3138180 K4KH Thomas +3138181 N0LVY Tony +3138182 KE8LUN Mark +3138183 KN6BAT Ranjit +3138184 KD9MWJ Austin +3138185 KI6VTI Thomas +3138186 KE0VAF Michael +3138187 KE7IN Kevin +3138188 KC8SBZ Chris +3138189 KN4AKJ Christopher +3138190 KB8MUP Harvey +3138191 W6OSU Sean +3138192 KC8CS Chris +3138193 KF4BQO Billy +3138194 KB2TJJ Frank +3138195 K8WQK Peter +3138196 KN6BBU Matthew +3138197 KF5CLF Eric +3138198 KI5DVJ Franklin +3138199 KC0PGU Billy +3138200 KF6JXT Scott +3138201 WE3L Richard +3138202 KJ7BBS Earle +3138203 KE5FYC Manuel +3138204 KE5FYC Manuel +3138205 KC3NCK Grant +3138206 KD8SKC Grant +3138207 K6IGP Donald +3138208 K3RSG Jimmie +3138209 W7PLC Philip +3138210 KN4TQY John +3138211 KE6YLF Christopher +3138212 KG7BME Stephen +3138213 KG4GVJ Mark +3138214 WC4AR Wilson +3138215 KJ4IHW Jason +3138216 N2CID Jay +3138217 KJ7FPK James +3138218 KD0SXD Charles +3138219 W6KE Douglas +3138220 KN6BDF Julio +3138221 AC7SR William +3138222 K4DKX Joel +3138223 K7RWI Gordon +3138224 K7RWI Gordon +3138225 KM4HAG Evan +3138226 K4MNJ Michael +3138227 W1LAW Robert +3138228 KG4KYH Danny +3138229 N3AP John +3138230 KJ7FOY Amina +3138231 WD8EHT Justin +3138232 KA8CMD Glenn +3138233 KE7SLI Michael +3138234 KC1LGW Michael +3138235 N5HC Conny +3138236 AL7RI Larry +3138237 KA9YGW Scott +3138238 KJ6RPO Michael +3138239 WD4KKE John +3138240 AC4RX Robert +3138241 K5RJG Richard +3138242 WB6NBU Robert +3138243 N4DJS David +3138244 KD5RCZ William +3138245 N4AWA Thomas +3138246 N9LGM Larry +3138247 N6MEG Mark +3138248 WA3YNW William +3138249 WH6EAL Forrest +3138250 K5RJG Richard +3138251 AB4KK Christopher +3138252 K1GNX Vance +3138253 KK4VPT Steven +3138254 WA6ED Edwin +3138255 KB3PJW Matthew +3138256 W8WKY Silvercreek +3138257 N6VOH Barry +3138258 KG5NSR Russell +3138259 KI4FCT Bruce +3138260 N0PNT Glenn +3138261 KK6FNW Donald +3138262 KM6HVO Chris +3138263 N9IOA Tobias +3138264 AE0L Richard +3138265 WA5LNL Herman +3138266 AJ6IT Stephen +3138267 KB1VEJ Nathaniel +3138268 KL1IL Ray +3138269 KF4VFL Don +3138270 K9TLT Thomas +3138271 NN6MM Mikhail +3138272 KN4GSL Norman +3138273 KJ6OVM Tom +3138274 KY5ARA Aaron +3138275 KY5ARA Aaron +3138276 KE5MLF Greg +3138277 W5RDY John +3138278 KJ7FPK James +3138279 KL1IL Ray +3138280 AC0RL Jerome +3138281 W5DMZ Robert +3138282 KF4VFL Don +3138283 KN4GSL Norman +3138284 K5MQ David +3138285 WU6R Mark +3138286 KI5DLL Elye +3138287 KR5K Joseph +3138288 N4IXT Robert +3138289 W8RCW Richard +3138290 K3AE SPCG +3138292 K1GNX Vance +3138293 KD4QJS Raymond +3138294 WB0AUQ Robert +3138295 KG4UXD Steve +3138296 KE4HUE James +3138297 N3ARL Howard +3138298 KD0DPX Kathy +3138299 KE5IRC Brian +3138300 KI6TPE Jason +3138301 KC8EIT Michael +3138302 W4POP John +3138303 W5IAY Rich +3138304 AC2YI Brian +3138305 W7FGP Joseph +3138306 KJ6STY Russell +3138307 KN4TSS Johannes +3138308 K4DL Dennis +3138309 KC4ZNX James +3138310 K6GIW Terry +3138311 WJ6I Harris +3138312 N3RUT Dennis +3138313 N0DIY Mel +3138314 K4TVE William +3138315 KD0ESS Joseph +3138316 KC8ACI Larry +3138317 AB0DE Steven +3138319 W8BR Earl +3138320 KJ3BEC Jason +3138321 KD2QCO Michael +3138322 KL4NK Louis +3138323 K7TVV Tighe +3138324 W4BPT Billy +3138325 K1RDD Doug +3138326 KM4RGP Loren +3138327 N0HYD Burke +3138328 W6CRZ Cindy +3138329 AC2YI Brian +3138330 WF2F Richard +3138331 N5VCF David +3138332 K1KWC Kevin +3138333 W8TWO Dennis +3138334 N0GIK Matthew +3138335 W3EOD Scott +3138336 KO1R Milan +3138337 KN4SUZ Brian +3138338 KC0O Marlin +3138339 N1KPW Gregory +3138340 KM6MPJ John +3138341 KJ7FFA Matt +3138342 K0VD Sam +3138343 AC7RX Greg +3138344 KN6BDP Anthony +3138345 WD5GNX Gregory +3138346 KG5WIA Dave +3138347 W8GRD Gavin +3138348 KG5WIE Cynthia +3138349 KC8RNX Jeffrey +3138350 KC9BMT Shaun +3138351 KD4BFH David +3138352 KD4BFH David +3138353 N6CKC Nestor +3138354 N4TFZ Timothy +3138355 KA0KOU Timothy +3138356 KE0VIU James +3138357 KF4JPI Robert +3138358 KE0MNR Gary +3138359 KD4MCB Barry +3138360 K8COH Michael +3138361 KD5WIN Mark +3138362 KB1SSN Alex +3138363 AG7JS Warren +3138364 K9BVA Patrick +3138365 KA0MR Monte +3138366 AG7JS Warren +3138367 K8HSY Ronald +3138368 KB7GFE Daniel +3138369 N8MPF Ronald +3138370 W8BCC Barb +3138371 KC0ZEK Joshua +3138372 KB8LFP Jon +3138373 KD6AXX Patrick +3138374 W3WBM William +3138375 KK4LT Richard +3138376 K3CHB Jimmy +3138377 KA3VLF William +3138378 KC3GYU Dale +3138379 W3QXI Charles +3138380 K5WLR William +3138381 AA9LS James +3138382 KF5UYF David +3138383 KL4VT Jeffrey +3138384 KC8RJO Ronald +3138385 K7MK James +3138386 KC9ZGD Kevin +3138387 KC2AEV David +3138388 W1HLE Gianni +3138389 KE0TAL Mike +3138390 KE8LWT Gary +3138391 K8HAX Brian +3138392 K0TWO Thomas +3138393 KI5EGJ Calep +3138394 KN4TXM SHOAN +3138395 N8DNG Steven +3138396 KA4Y Terry +3138398 K7TWO Joseph +3138399 AC2XM Steven +3138400 KJ4JOF GREG +3138401 KE4PFW Charles +3138402 KD6OUB Christopher +3138403 W0RLR Ryan +3138404 KD6OUB Christopher +3138405 AG7GD Steven +3138406 KD2RXG William +3138407 KB0P Paul +3138408 KD7ZIO Benjamin +3138409 N9WYS Mark +3138410 KK4GGL Richard +3138411 KD9DZT Mathew +3138412 KB0MEC AREC +3138413 WZ8JML Jeffrey +3138414 KQ6GY Jeffrey +3138415 KE8LZE Jacalyn +3138416 KE8IBN Tim +3138417 KE8KHK Robert +3138418 KF5MEC Douglas +3138419 KF5MEC Douglas +3138420 W7EKD Jeremy +3138421 WB4IHY David +3138422 WB4IHY David +3138423 N9CAB Craig +3138424 N8ACA Jay +3138425 K5ZJQ Thomas +3138426 AD8DL Michael +3138427 W3IRL John +3138428 K6LOJ +3138429 KI6VNP Kimberly +3138430 KI7DUB Ian +3138431 N5TU William +3138432 WB6IWY Greg +3138433 KD9MEB Arthur +3138434 KH6PE Kurt +3138435 WA0STX John +3138436 KE0GZM Zackary +3138437 KN4TYX Daniel +3138438 KE5DHP Michael +3138439 KJ7FPD David +3138440 K1VOI John +3138441 KI5EHQ Lukas +3138442 KZ1ANT Anthony +3138443 KK4LT Richard +3138444 AE7OZ Michael +3138445 WB4KZI Randolph +3138446 KD9JZN Joshua +3138447 N0SMP Edward +3138448 AJ6JJ Heinz +3138449 KL4VS Tyler +3138450 KB2ELM William +3138451 W9FYI Justin +3138452 K0SWE Christopher +3138453 KD0NFS Jerry +3138454 KD0NFS Jerry +3138455 WB1BQE Albert +3138456 KC8HTR Justin +3138457 W4RK Vernon +3138458 KB8DTC Frank +3138459 KD2RVV Michael +3138460 K7NOW Daniel +3138461 K3VVV Ernest +3138462 KB6MP Michael +3138463 KK6MRN Timothy +3138464 N7NDQ Jeremy +3138465 NA6Z Donald +3138466 NN9F George +3138467 KD2RAI Alan +3138468 KD2RCU Larry +3138469 KE8LSD Larry +3138470 KC3HXF Jacek +3138471 N5LRE Lynwood +3138472 W5GRD George +3138473 K8SMG Scott +3138474 KE4KBN Shannon +3138475 KD9FXR Joseph +3138476 KC1LIJ DEREK +3138477 KA9TWO Linda +3138478 NM1S Matthew +3138479 KN4QXB Carole +3138480 KC3NGP Scott +3138481 AF4S Steven +3138482 K0KZO Douglas +3138483 N4JWA James +3138484 AB5OR Stephen +3138485 N5VGK Charles +3138486 KD9GRJ John +3138487 AC4VT Michael +3138488 W8DYY Steven +3138489 KE8EIP Jerry +3138490 N3MCO Chris +3138491 KK6FRK Kevin +3138492 N2EAC Edward +3138493 KC1LHW John +3138494 KC2ARX William +3138495 KE4DYI Patrick +3138496 N7IIJ Steven +3138497 KN4RGG James +3138498 KC1BLT Hai +3138499 KB7BYR Mitchell +3138500 W7EEE Timothy +3138501 WB4KZW Eugene +3138502 KD4HVZ Michael +3138503 N7NDQ Jeremy +3138504 KB5DMZ Daniel +3138505 KD2RWV Robert +3138506 KE2FV Harold +3138507 KM4SSO Joseph +3138508 KI6GTQ Edward +3138509 KE8KXT Richard +3138510 K7PDW David +3138511 KE8KXT Richard +3138512 NZ5J Eric +3138513 WW5RAD Richard +3138514 N5SWP Stephen +3138515 WV1Q Albert +3138516 KB0PMY Ronald +3138517 WB5VCO Donnie +3138518 KN6BAU Mark +3138519 N9ADW David +3138520 KE7JTU Mark +3138521 K6HSV Philip +3138522 W6YMJ Yair +3138523 WH6GCH Robert +3138524 N5NUK Bill +3138526 KH6LT Mark +3138527 KB0LSA Jonathan +3138528 WE0DX Joel +3138529 KN4TTH Christopher +3138530 K6VW Richard +3138531 AF7FO Michael +3138532 K3YK David +3138533 K5NER Noel +3138534 WA6FAL Gerald +3138535 KG7GJD Weldon +3138536 KE0CRF Thomas +3138537 KN4SMT James +3138538 N1BPD Ross +3138539 N4JLW James +3138540 W6LNT Mauricio +3138541 W6LNT Mauricio +3138542 W6VE Christopher +3138543 WB4BHK George +3138544 N3ERD Brandt +3138545 K8RGI Robert +3138546 KN6BAU Mark +3138547 K7MRU Norbert +3138548 W0SLJ Steven +3138549 KJ7ABN Tyler +3138550 KN4OJB Raymond +3138551 KE8LVV Larry +3138552 AB2ZU Nathan +3138553 KB3YUK Jason +3138554 KB3YUK Jason +3138555 WA8MCD Gary +3138556 AE7VX Donald +3138557 N4PIR Gary +3138558 KI5EFG Alec +3138559 KV4KQ David +3138560 KB9WTN John +3138561 KE6EMU Ellen +3138562 KV4KQ David +3138563 N9BUN Thomas +3138564 KM6TCC Patricio +3138565 KG5ZNF Dauntae +3138566 WR0J John +3138567 KE0CIU Brian +3138568 KB5EDR Richard +3138569 N0VZC Mike +3138570 KI6EAJ David +3138571 WB9UAR Jim +3138572 K0RAR Robert +3138573 WX3F Larry +3138574 N2UX Christopher +3138575 KE8EIB Connor +3138576 KB9RHB Aaron +3138577 KE8HDU Anthony +3138578 KN6ASO Jimmie +3138579 AD7I Paul +3138580 KM4EZP Michael +3138581 KJ4RBL William +3138582 KD0WMJ Hunter +3138583 KD8CMV Elizabeth +3138584 KJ6QGW Carlos +3138585 WB2EVX James +3138586 KE7CMD Brock +3138587 KJ6QGW Carlos +3138588 K1MJJ Robert +3138589 KI5DGG Kelly +3138590 W7LDN Elden +3138591 KC3NBX Gary +3138592 KJ5WO Richard +3138593 N8ZDL Robert +3138594 WA2L Douglas +3138595 KF4ZSC Edward +3138596 N2ERT Ted +3138597 N2ERT Ted +3138598 KM4CQV Lemuel +3138599 KD2ETN David +3138600 KG4AST William +3138601 K8UPE Reginald +3138602 KC4OJB Joey +3138603 KD9LVQ Benjamin +3138604 KD7TZG David +3138605 NI4S Richard +3138606 N4ANI Roxana +3138607 AE4G Michael +3138608 W4ROX Ismael +3138609 WR0J John +3138610 KD9LLX Theodore +3138611 W6CRJ Graham +3138612 KC4OJB Joey +3138614 KB3YQK Tim +3138615 K4YHE Nathan +3138616 K7SFQ Sam +3138617 K2MTC Michael +3138618 KD8TVG Jacob +3138619 N2BXT Thomas +3138620 KE6FSM Rosendo +3138621 W3ALG Rick +3138622 WH6GCE Daniel +3138623 KF7ECJ Steven +3138624 KS4VU John +3138625 KI7VZG Marylin +3138626 AG7IK Jerold +3138627 AB4FM John +3138628 W2BJM Brian +3138629 N2MLX Harvey +3138630 AB4FM John +3138631 N2BXT Thomas +3138632 WV5D Steven +3138633 KE0VIR Travis +3138634 N9MNU Larry +3138635 K1KRK Kenneth +3138636 KK4KIL Robert +3138637 AB3WW Joseph +3138638 KG5YOZ Mark +3138639 N3UED Joseph +3138640 K3CAN Adam +3138641 KB3POY Paul +3138642 KJ7FCX Stuart +3138643 KE8MBO Easton +3138644 KE8MBO Easton +3138645 N5JPV Jonathan +3138646 W1AVQ Alician +3138647 WA2CRL Luis +3138648 N3ERD Brandt +3138649 KM6PII Charles +3138650 KC3TVI Tom +3138651 KD5NVR Robert +3138652 KG5OQO Patrick +3138653 N2ZOU Michael +3138654 N4DHT Jeff +3138655 N7SJM Scott +3138656 KN6BJC Ryan +3138657 N4BKR Curtis +3138658 W5JSR John +3138659 KG4TPM Howard +3138660 KM4RGX Carrol +3138661 K2CS Christopher +3138662 N7GC Richard +3138663 AB3TJ George +3138664 KN4TPI Greg +3138665 KN6BKT Tom +3138666 NL7FQ Thomas +3138667 KN4TPI Greg +3138668 KC3LEE Lee +3138669 KC3LEE Lee +3138670 KF5TVG Robert +3138671 WA1SAY Sandra +3138672 N2GMA Jimmy +3138673 KB3YIR Leonard +3138674 N3YZN Joseph +3138675 KN4TJJ Roger +3138676 N0EAB Thomas +3138677 KN4JNX Eric +3138678 K1DXO Lawrence +3138679 AA3SW Stephen +3138680 KN4JNX Eric +3138681 KM6ASJ James +3138682 KM6ASJ James +3138683 KK4PIW Thomas +3138684 KE8EGF Paul +3138685 KE8JRO Ken +3138686 WX3F Larry +3138687 K5NKD Jerry +3138688 WA2EMS Ben +3138689 KN4SWU Victor +3138690 W6DFB David +3138691 KE0VMB Jon +3138692 W3AIX Gregory +3138693 N2KGO Robert +3138694 W3AIX Gregory +3138695 KA3VWW +3138696 KN4ACO Vernon +3138697 W9BVX Robert +3138698 KQ6EO Tom +3138699 W5JRJ Johnny +3138700 AB4CD Allen +3138701 K1DXM Dirk +3138702 KC3EVL Peter +3138703 KN6BAZ Oleksandr +3138704 KK4LCR Jim +3138705 KW7SES Stephensen +3138706 KE0KAD Stephen +3138707 WD0GCO Donald +3138708 KB2TJK Tyrell +3138709 KF4ANC John +3138710 KA4VRN David +3138711 KI4VMG David +3138712 K9RU James +3138713 W1TFK Tom +3138714 W1TFK Tom +3138715 AK7S Robert +3138716 K9SEK Steven +3138717 KE4IFQ Daniel +3138718 NY8H Rodney +3138719 N9LGY Mark +3138720 KF4ANC John +3138721 W7DMC Bernie +3138722 KE6PGN Rod +3138723 WH6FTW Md +3138724 AH6IO Glenn +3138725 W6VAN Larry +3138726 WB8SFY Mark +3138727 WB8SFY Mark +3138728 AG5EJ James +3138729 KF7GRQ Michael +3138730 AJ6GE Ken +3138731 KK4LCR Jim +3138732 KG5VEK Brian +3138733 KB2RJN John +3138734 WH6EKA Erick +3138735 KG5VEP Susan +3138736 W7DMC Bernie +3138737 W6RDX Disaster +3138738 KN6BJA Gak +3138740 KG4SET Arnold +3138741 KE0VJN Daniel +3138742 KM6PFM Jose +3138743 KE8HSW Aaron +3138744 KF6NXQ Jeffrey +3138745 W1FSR Richard +3138746 AD7OO Joseph +3138747 AF0XO Jose +3138748 WA6QQW Andrew +3138749 W2MRA Stephen +3138750 KD9NBG Ryan +3138751 KN4QAN Gabriel +3138752 KC7FYW Tony +3138753 N8JSW Joshua +3138754 K6CV Christopher +3138755 KI5EKQ Timm +3138756 KE0VMO James +3138757 KE0KAI Jason +3138758 NG0O Marvin +3138759 KD9LVQ Benjamin +3138760 AC4D Mark +3138761 KG5VEJ Len +3138762 N5FE Carlton +3138763 KK4KVA Todd +3138764 KE0VME Chris +3138765 N9KT David +3138766 K8TAE Tracy +3138767 K8TAE Tracy +3138768 W2CVB Joseph +3138769 KJ7ATP Richard +3138770 N4GLL Len +3138771 KL4LG Dennis +3138772 W3VIC Victor +3138773 W3LUZ LCARES +3138774 W8JG Tony +3138775 KD2MSD Shane +3138776 KC3KCG Joseph +3138777 KE4JJS Jay +3138779 KM8CC Mall +3138780 KI4LRC Zachary +3138781 KD9NBC Svetlin +3138782 KD9NBC Svetlin +3138783 K0MBG Marcus +3138784 NN1C Martin +3138785 NZ5J Eric +3138786 AG6VX David +3138787 KI5ELR Kyle +3138788 W1GPT Conrad +3138789 KG4SET Arnold +3138790 KM6LBW John +3138791 AF4ZQ Michael +3138792 KD0LKI Heino +3138793 N6YBX Gilbert +3138794 N6RXT Doug +3138795 W8WKY Silvercreek +3138796 KB8ZMI Robert +3138797 N1LTP Edward +3138798 KJ4OWJ James +3138799 K3DCR Christopher +3138800 KE0SZQ Frederick +3138801 W5RNJ Roger +3138802 KI6LOM James +3138803 N3TKM James +3138804 K1KC Christopher +3138805 K3DCR Christopher +3138806 WQ3P Paul +3138807 KE5TCM Charles +3138808 W8YBM Richard +3138809 KC0ZEK Joshua +3138810 KB8ZMI Robert +3138811 KB5SQG Robert +3138812 KE8LSB Richard +3138813 W3UC Jamie +3138814 KN4EZH Robert +3138815 KD9CBP Richard +3138816 K3SJL Sean +3138817 KF5KWB Kerry +3138818 K3SJL Sean +3138819 W7RSL Robert +3138820 W3QJ Robert +3138821 K7DZY Richard +3138822 KN4TII Steven +3138823 KE8LSB Richard +3138824 KB2VWD Hector +3138825 KN4UEM William +3138826 KC1EYO David +3138827 KM6LBA John +3138828 KG4ZQZ William +3138829 KD2RUB Robert +3138830 KC3LUM Joshua +3138831 W8IJG Robert +3138832 KD0YOP Scott +3138833 KG4ZQZ William +3138834 KM6LBA John +3138835 W8UFO Scott +3138836 KA5RAN Robert +3138837 KD9JIJ Jacob +3138838 N6DBH Varoujan +3138839 W7PPC Douglas +3138840 KC2SMB Steve +3138841 KF5VET Pamela +3138842 W8CH Ralph +3138843 KI4NGA Michael +3138844 KS0W Keith +3138845 KM6HJS Lance +3138846 KD7YOH Letcher +3138847 KD9MVI Eric +3138848 KD2LH Marc +3138849 NY7PD William +3138850 N4CL James +3138851 KI6VHO Alexander +3138852 KC5EIB Douglas +3138853 KJ4WZM Daniel +3138854 KB1MJU Michael +3138855 N8QO Roger +3138856 KB5ZNP David +3138857 W9AMA Andrew +3138858 KI5EDM Matthew +3138859 WH6LQ Linda +3138860 W3CHH Charles +3138861 KE0VMX Sharon +3138862 N2LO Robert +3138863 KC3MSC William +3138864 KN4UEU Douglas +3138865 KF5KNW Terry +3138866 KN4UGC Les +3138867 W8WDH Willard +3138868 W8WDH Willard +3138869 NB8P Andrew +3138870 W1TJW Timothy +3138871 KF6OJE Ray +3138872 KC7WVS Ronald +3138873 AB4NX Laurence +3138874 AG6EA James +3138875 W9LI Jose +3138876 K8DSC Ralph +3138877 W2RUN James +3138878 KW3LDR Dickie +3138879 KU4YA Lew +3138880 N4WC William +3138881 KE0VNI MATTHEW +3138882 NB8P Andrew +3138883 KG6AYT Scott +3138884 KC3NGP Scott +3138885 K2MTH Mark +3138886 KD9NCD Adam +3138887 KN4RRU Kevin +3138888 KG5LEU Kenny +3138889 N4GSD Dwight +3138890 AG6EA James +3138891 KE5TYX Jackson +3138892 W5BWH Billy +3138893 KN4TYY John +3138894 KC9FNR Kevin +3138895 KC3MSC William +3138896 KB9TZS Richard +3138897 K6TAB Tommy +3138898 K8TET Rodney +3138899 KI5EMR Hailey +3138900 AD7EU Peter +3138901 KE4JXD Gene +3138902 KI6AHX Robert +3138903 KB5BK Bob +3138904 N2RDU Jennifer +3138905 K7RCH Richard +3138906 WB5WNF Jonathan +3138907 W9AC Paul +3138908 W5BWH Billy +3138909 KC3NJE Jeffrey +3138910 N9ZTB Anthony +3138911 N2ZEV Zev +3138912 KM6ZZP Neil +3138913 KJ7DLC Scott +3138914 WX2Q Jason +3138915 N3QQZ Keith +3138916 N8TWU Kenneth +3138917 KB2VWD Hector +3138918 W1TCC Timothy +3138919 W0LFV Stormey +3138920 KG5SRA Terry +3138921 AE0KE Ervin +3138922 WB4FAX Richard +3138923 K7XPO Brien +3138924 W6XX Thomas +3138925 KN4UGZ Alexander +3138926 K4AZZ Ray +3138927 KD9NAD Michael +3138928 N0EMR Richard +3138929 KB8MAU John +3138930 AG6SD Alexander +3138931 N9ZTB Anthony +3138932 KF4SJU Donald +3138933 KE8DFH Charles +3138934 KC3NJL George +3138935 AK6QJ Jerome +3138936 N0MNB William +3138937 KB5NMC David +3138938 KD2JJY Stephen +3138939 KD7NMO +3138940 WN3Y La +3138941 AC5Q Dennis +3138942 KI5ZY Ken +3138943 WX4SKY Scott +3138944 K7MRT Marc +3138945 WA3LKZ Thomas +3138946 KD9MTG Jon +3138947 W4OFO David +3138948 KJ7COY Richard +3138949 NN5O Larry +3138950 K4VMT Johnny +3138951 WW4UFO Robert +3138952 K0UOG Alexei +3138953 NW0Q James +3138954 KA4PPM George +3138955 K9RCP Richard +3138956 KE8LTV Ricky +3138957 N9JYJ John +3138958 N5RV Gerald +3138959 KD2ROJ Thomas +3138960 N3IL David +3138961 WB8UDA Frederick +3138962 N0DT +3138963 KE0UDX Mark +3138964 K5TMN Thomas +3138965 KD5PQJ Herbert +3138966 W5BSP Robert +3138967 W8NUD Scott +3138968 W0JFH James +3138969 KC5KHR Steve +3138970 K6RZR Cole +3138971 W5PPR Glenn +3138972 KE0NZS Teresa +3138973 N1MJS Matthew +3138975 WH6EMC Dennis +3138976 KD2GEH Gary +3138977 W3JCT John +3138978 KC3MMI Alex +3138979 K8MID Kevin +3138980 KD7UCH David +3138981 W1FJF Frederick +3138982 N9LIA Jacob +3138983 KI7YOW Kendall +3138984 KC1KVY Robert +3138985 K7KDW Kirt +3138986 KD5YBE Eric +3138987 AI4JD Michael +3138988 KD5YBE Eric +3138989 KK4YEY Benoit +3138990 N1GNX Todd +3138991 KD2RNN Richard +3138992 K4CPN Brandon +3138993 KD5NSS Jacob +3138994 KD5FUN Cody +3138995 KJ4KJL James +3138996 N1XJT Robert +3138997 KG5Q Kevin +3138998 K0VLA Melvin +3138999 KC4TCK Daniel +3139000 KN4CXD Rudolph 3139001 W8AK Glenn 3139002 N7SCM Andrew 3139003 KC8GMR Gordon @@ -85914,7 +108322,7 @@ 3139034 WD8PIC Robert 3139035 WB9CPU David 3139036 KD8DRG -3139037 KD8SES Matt +3139037 N8NMB Matt 3139038 AB8YM Blase 3139039 N8LRN Roy 3139040 N8XLJ Timothy @@ -85936,6 +108344,7 @@ 3139056 N8QF Ron 3139057 K8ZCS Edward 3139058 KC8TXA Evan +3139059 KM6JEV Francisco 3139060 KD8QBH James 3139061 W8WDS William 3139062 KD8WYA Kevin @@ -85963,7 +108372,7 @@ 3139084 N8EPC Robert 3139085 KD8PYW Nathan 3139086 KC8YQL William -3139087 AB8RG Greg +3139087 AB8RG Gregory 3139088 N8OXC Chris 3139089 K8SRB Stan 3139090 N8YSC James @@ -86015,7 +108424,7 @@ 3139136 WT8MW Michael 3139137 WT8MW Michael 3139138 KK4MRR Lauren -3139139 KD8SES Matt +3139139 N8NMB Matt 3139140 KK4MRR Lauren 3139141 KD8EVR Arlin 3139142 WB8FXJ Wilhelm @@ -86038,7 +108447,7 @@ 3139159 KD8SEP Trevor 3139160 N1CTF John 3139161 N8OWV Jerry -3139162 AB8RG Greg +3139162 AB8RG Gregory 3139163 WB8VYS Rodger 3139164 KB8PMY Ryan 3139165 KD8ELU Melissa @@ -86086,8 +108495,8 @@ 3139207 W8JDA Justin 3139208 W8JDA Justin 3139209 KD8CHP Jesse -3139210 N8YAE Michael -3139211 N8YAE Michael +3139210 NC8A Michael +3139211 NC8A Michael 3139212 N8MXN Debbie 3139213 KC8CUN Mark 3139214 KC8CUN Mark @@ -86196,6 +108605,7 @@ 3139317 N8KEN Kenneth 3139318 KC2RCU Grant 3139319 KC8CFI Nicholas +3139320 N1VLF Timothy 3139321 KA8RVI John 3139322 K8WFL Timothy 3139323 KD8AN Clyde @@ -86301,7 +108711,7 @@ 3139423 KE8SO David 3139424 KD8EDT Marcus 3139425 N8GJ Jerald -3139426 N8JY +3139426 N8JY John 3139427 KE8DJL Edward 3139428 KB8ATE Wayne 3139429 KD8KEK John @@ -86357,7 +108767,7 @@ 3139479 KD8RID Randal 3139480 KC8QFA Michael 3139481 N1TVI Nicholas -3139482 W6LDS Lucas +3139482 W8LU Lucas 3139483 N8LID Stuart 3139484 N8ZQT Jason 3139485 KC8ORW Nick @@ -86512,6 +108922,7 @@ 3139634 KE8QR Clifton 3139635 AC8PZ Michael 3139636 KD8ZLB Dennis +3139637 KI7HPK Vernon 3139638 W8MM Michael 3139639 WB8AM Brian 3139640 NU8H David @@ -86554,6 +108965,7 @@ 3139677 W8QO Melvin 3139678 K8EAF Edward 3139679 KD8SWJ Steven +3139680 KE0BNC John 3139681 WD8OJL Paul 3139682 KA8FZS Mark 3139683 N8ZCN Jason @@ -86645,7 +109057,7 @@ 3139769 N8WGP Charles 3139770 KC8URC Scott 3139771 N8PVD John -3139772 KB8SSH Roy +3139772 KB8SSH Michael 3139773 WU8R Roman 3139774 WU8R Roman 3139775 N8ONI Pat @@ -86700,7 +109112,7 @@ 3139824 WW8JS Joshua 3139825 KE8FS Richard 3139826 WD8EHI Malcolm -3139827 KC8MLN Thomas +3139827 KC8MLN Tom 3139828 W8EJC Randal 3139829 N8HHR Jerad 3139830 N8DZD Alan @@ -86721,6 +109133,7 @@ 3139845 W8TWL Tracey 3139846 N8VUA Edward 3139847 N8VUA Edward +3139848 AE0KE Ervin 3139849 N8UVH Larry 3139850 N8MRS Michael 3139851 N8UVH Larry @@ -86770,7 +109183,7 @@ 3139895 N8DEA Dean 3139896 N8NOQ Richard 3139897 K8WBL Timothy -3139898 K8TAT Timothy +3139898 NS8B Timothy 3139899 KD8SCL Bret 3139900 KE8CQC Scott 3139901 KC8VJK Craig @@ -86778,7 +109191,7 @@ 3139903 KC8ARD William 3139904 KB8KMC Michael 3139905 KA8ZNY -3139906 K8TAT Timothy +3139906 NS8B Timothy 3139907 KC8DDQ Paul 3139908 KE8CIK Scott 3139909 N8BIL William @@ -86806,6 +109219,7 @@ 3139931 W8SCI 3139932 KB8YVY FRAT 3139933 KB8YVY FRAT +3139934 N8EWQ Timothy 3139935 KC8KXC Spencer 3139936 WA8LIU Dennis 3139937 KG7OF Christopher @@ -86815,6 +109229,7 @@ 3139941 KE8FNE Chris 3139942 KD8GVX 3139943 W8NOW Derrick +3139944 AK4IN Michael 3139945 N8LCY Terry 3139946 KD8UOU Ried 3139947 KD8UOU Ried @@ -86830,11 +109245,11 @@ 3139957 KD8WCK Richard 3139958 W8AII Allen 3139959 W8UPD W8upd -3139960 N8ASH Theodore +3139960 N8ASH Ted 3139961 W8WFP Wilbur 3139962 KE8EBF Drew 3139963 KD8JBS Benjamin -3139964 N8WED William +3139964 K8BI William 3139965 N8GQM Dennis 3139966 KB8KVP Dwight 3139967 KB8RRQ Jeffery @@ -86868,8 +109283,9 @@ 3139995 KA8HUZ Forrest 3139996 KC8VSD Gerry 3139997 KD8JAD Charles -3139998 KC8GXR Scott -3139999 KD8FYT Craig +3139998 W8GXR Scott +3139999 N8FAA Craig +3140000 W2IWW John 3140001 AE5DN Mark 3140002 AE5DN Mark 3140003 KE5BDG Leah @@ -86891,7 +109307,6 @@ 3140019 K5SNG Chad 3140020 WB5ANX Paul 3140021 WA5TXX Mike -3140022 KC5MW Raymond 3140023 W5BS Bradford 3140024 AE5RH Scott 3140025 AE5TD Tom @@ -86970,7 +109385,7 @@ 3140098 K5LUO Billy 3140099 WB5CGD Steve 3140100 KF5FKI Catherine -3140101 KF5RXZ Tim +3140101 W5USW Tim 3140102 KF5ZOI Ryan 3140103 KD5SDZ Jordan 3140104 KB5LSB John @@ -86983,7 +109398,7 @@ 3140111 KF5XK Gary 3140112 KF5VCT John 3140113 KG5FLN Carl -3140114 WX5DRS David +3140114 N5DRS David 3140115 KC5RBH Jeff 3140116 KG5DOH Larry 3140117 K5OKE Gerald @@ -87160,7 +109575,7 @@ 3140288 KE0GTA Johnathan 3140289 K5GBN Brandy 3140290 N5OSH Anthony -3140291 KE5OEX William +3140291 KR3LL William 3140292 N5YZA John 3140293 N5PTV Matthew 3140294 KF5GTX Bobby @@ -87216,9 +109631,10 @@ 3140344 NB5B David 3140345 N5TWB Bart 3140346 AF5SX William +3140347 N5WDW Wayne 3140348 KG5LQX Gary 3140349 KG5LQX Gary -3140350 KE5FCA Daryl +3140350 N5YAA Daryl 3140351 NB5B David 3140352 AD5JL Robert 3140353 WD5IDB Howard @@ -87264,7 +109680,7 @@ 3140393 N5TLJ Tommy 3140394 KG5MXA Luciana 3140395 KD5MUY Lloyd -3140396 KG5OCN Daniel +3140396 W5EKG Daniel 3140397 AE5MG David 3140398 N4THC William 3140399 WB5ONA Nelson @@ -87315,6 +109731,7 @@ 3140444 KG5GQ Richard 3140445 KG5QEY Ryan 3140446 AA1OU Bradley +3140447 N1XJT Robert 3140448 WB5IEK Donald 3140449 KA5STN Stanley 3140450 KB5STV Roy @@ -87390,6 +109807,7 @@ 3140520 N8RSQ Sean 3140521 AB5GX John 3140522 WB5VST Benjamin +3140523 KO4MA Andrew 3140524 W5QO Paul 3140525 KG5ILR Keith 3140526 W5MQC Michelle @@ -87428,11 +109846,14 @@ 3140559 AE5CJ John 3140560 K5OAM James 3140561 K5OAM James +3140562 KN6BPM Ron 3140563 W0KIE Michael 3140564 K5EB Earl 3140565 KC5DBH Matthew 3140566 KG5GOG Monte 3140567 KG5TEE Tom +3140568 W2GCM Gregory +3140569 KD8GLS Gary 3140570 K5ELO Jackie 3140571 N5BRB Bill 3140572 KF5SYP Bobby @@ -87497,10 +109918,13 @@ 3140631 KG5TGO Delbert 3140632 KR5B Terry 3140633 KR5B Terry +3140634 KN6BPM Ron 3140635 W5GFI John 3140636 AE5OF Gary 3140637 KG5OKC Bruce +3140638 KG4LIO Matthew 3140639 KG5NGD John +3140640 KN4TSK Philip 3140641 N5AFY Larry 3140642 W5ACA Charles 3140643 K0LOT Leo @@ -87511,8 +109935,10 @@ 3140648 WX5NXR David 3140649 KC5MXW John 3140650 KG5UVV Edward +3140651 KC0CJV Dennis 3140652 N5EDD Edward 3140653 N2OMG Steven +3140654 KM4ZXF Andres 3140655 AE5CI George 3140656 KG5KBX Earl 3140657 KG5RT Robert @@ -87521,7 +109947,7 @@ 3140660 KB5AWD Ray 3140661 KE5S Patrick 3140662 KE5YBC Andrew -3140663 WX5DRS David +3140663 N5DRS David 3140664 K5ERR Larry 3140665 N5OCO Eric 3140666 N9VAL Valoriee @@ -87575,6 +110001,7 @@ 3140714 K5WZE Glenn 3140715 N9QWR Craig 3140716 N9QWR Craig +3140717 KD7BTY Paul 3140718 KB5VDO Jay 3140719 N5BWP Brent 3140720 KD5ZMC Christopher @@ -87595,6 +110022,7 @@ 3140735 NO5R Barney 3140736 KG5UZC George 3140737 KD5FGU Corey +3140738 KI4LTK Christopher 3140739 KF5TIZ Thomas 3140740 WB5Y Kenneth 3140741 KG5SSK Jerry @@ -87616,7 +110044,7 @@ 3140757 KD5UTU James 3140758 KD5WA Louis 3140759 W5HLG H -3140760 W5ZT Daniel +3140760 W5ZT Dan 3140761 K5AED Allen 3140762 K5FJP Jerrold 3140763 W5RFG Phillip @@ -87629,7 +110057,11 @@ 3140770 KG5PPK Michael 3140771 KG5UIS Andy 3140772 KG5UIS Andy +3140773 KB9NXE Daniel +3140774 K8OCL Patrick 3140775 KC5WW Caleb +3140776 KD6DRW Chad +3140777 KD6DRW Chad 3140778 KG5FBN Richard 3140779 KG5FBN Richard 3140780 K5ZDP David @@ -87637,14 +110069,17 @@ 3140782 WX5JCL Justin 3140783 KC5PIQ Christopher 3140784 KC5PIQ Christopher +3140785 WA2EPI Samuel 3140786 AE5L Alfred 3140787 W5BE Burl +3140788 KO4LZ Paul 3140789 W5JHC John 3140790 W5ZP Jason 3140791 KG5YGM Daniel 3140792 W2ND Christopher 3140793 W2ND Christopher 3140794 KG5YRF Jake +3140795 KM6YSN Samuel 3140796 K5NTW Kent 3140797 K5NTW Kent 3140798 KG5YRM Dee @@ -87663,6 +110098,7 @@ 3140811 KK5EE Michael 3140812 KG5YBH Robert 3140813 KG5YKL Dana +3140814 N0NC Charles 3140815 KG5RT Robert 3140816 KE5NKM Gary 3140817 KE5NKM Gary @@ -87671,6 +110107,7 @@ 3140820 KG5YBI William 3140821 N5LUV Zach 3140822 N5BKH Bryan +3140823 K2UN Edgar 3140824 WD0CTA Michael 3140825 KD5FX David 3140826 KC9ILN Brandon @@ -87683,18 +110120,21 @@ 3140833 KG5SSU Michael 3140834 W5BS Bradford 3140835 KG5CLM Charles -3140837 KC5GRZ Francis +3140836 KD2PHC Frank +3140837 AG5RQ Francis 3140838 KG5OSV Randall 3140839 KF5CKO Brandon 3140840 KC0JOJ Larry -3140841 KG5ZGA Samuel +3140841 W5GZR Samuel 3140842 K0PKO Clarence 3140843 AF7GN Joseph -3140844 KC5ZZE Andrew +3140844 AK5NG Andrew 3140845 N2MOT John 3140846 KG5NCF John 3140847 KF5SVA David 3140848 KG5YSN William +3140849 W4KST Kennesaw +3140850 KN4JDZ Martin 3140851 KB5GVS Guy 3140852 KD5KDI Mark 3140853 W5KKY Billy @@ -87712,6 +110152,139 @@ 3140865 K5YM David 3140866 KA5ECX Howard 3140867 KG5SSW Carl +3140868 KZ2X Daniel +3140869 AK4NB +3140870 N2UX Christopher +3140871 AC4WK Warren +3140872 KN4TYX Daniel +3140873 K0NPS Nicholas +3140874 W0JEG James +3140875 KB5POZ Francis +3140876 KB1AZ Jim +3140877 KN4LUI Joseph +3140878 W1AST Larry +3140879 KN4NXA Stephen +3140880 KN4UEK David +3140881 W4IED Michael +3140882 KJ7FRQ Daniel +3140883 K5PTB Paul +3140884 NO4K Robert +3140885 KN4STM Steven +3140886 KE6PON Dwayne +3140887 KJ7GHG Rebecca +3140888 KJ7DTS Christian +3140889 KE4BKW Brian +3140890 KN4UES Donald +3140891 KE5LMT Michael +3140892 W4LEP Luther +3140893 NZ0B Carter +3140894 KM4ZXF Andres +3140895 KN4UES Donald +3140896 WB1K George +3140897 K6LUC Hung +3140898 KK4BVE James +3140899 K6LUC Hung +3140900 KG5WMX Ethan +3140901 W7DAB Dan +3140902 AC5JC John +3140903 W7PML Pedro +3140904 W9LVI Christian +3140905 KN4TPA John +3140906 KG5LRE Joseph +3140907 KG5LRE Joseph +3140908 W1FSH William +3140909 KD8ZHN Michael +3140910 KB1REJ David +3140911 KG6WGE Dale +3140912 KD8ZHN Michael +3140913 KG5ZNI Barbara +3140914 KI6RFN Ismael +3140915 KI5BZI Ellis +3140916 N7XRD Steven +3140917 KG5KBP James +3140918 KN4UEK David +3140919 KJ7CTJ Douglas +3140920 W0VEQ Genevieve +3140921 AF0O Randall +3140922 KN4KBB Anthony +3140923 NA6LA Robert +3140924 K7ZVZ Randell +3140925 KN6AUS Joel +3140926 N4OS Joshua +3140927 W7JSV Kevin +3140928 KN4BEM Daniel +3140929 N4NYY Vincenzo +3140930 W4KST Kennesaw +3140931 W4KST Kennesaw +3140932 W4KST Kennesaw +3140933 W4KST Kennesaw +3140934 W4KST Kennesaw +3140935 W4KST Kennesaw +3140936 W4KST Kennesaw +3140937 W4KST Kennesaw +3140938 W4KST Kennesaw +3140939 W4KST Kennesaw +3140940 KE3OG Lawrence +3140941 N4RDX Chris +3140942 KE0RJA Shane +3140943 KD2JRV Robert +3140944 K0SAY Benjamin +3140945 KB8TJM Tracey +3140946 N9CMA Christina +3140947 N1JXX David +3140948 KN4UIQ Jason +3140949 WB1EUC Francis +3140950 KB0JOY Tracy +3140951 KI7OHK Jimmie +3140952 KN4UIT stuart +3140953 W5FSW Floyd +3140954 KI5DJJ Joshua +3140955 KC4MEC John +3140956 N9MO Richard +3140957 NW8S LCWO +3140958 KQ1C Carlos +3140959 W5RL Charles +3140960 KX7RAY Thomas +3140961 KE0UVP Dexter +3140962 K7KBD Adam +3140963 KA3WOW Monte +3140964 N9ADW David +3140965 KL4NE Roberto +3140966 KB9UFN Donald +3140967 KC1LKG John +3140968 KM4RDS Rebecca +3140969 KW4HS Bruce +3140970 KW4HS Bruce +3140971 KJ7GIE Ryan +3140972 W0DMM Denis +3140973 WX2Q Jason +3140974 KE8MDC Jason +3140975 K2AOS Keith +3140976 K6PDL Gary +3140977 N2ZEC Mark +3140978 W3IHM Samuel +3140979 KI6SZE David +3140980 W5TJH Carl +3140981 W0ML Stephen +3140982 KE0GHU Michael +3140983 N5JPX James +3140984 W5HWK Calvin +3140985 KI5EOU Jeremy +3140986 K6DAK Dave +3140987 KO4GP Stephen +3140988 KC3NKI Ayyappan +3140989 KC2LIT Brian +3140990 KK4FPK Jeremy +3140991 K6OFM Tim +3140992 WA5TEF Jimmy +3140993 K7TT Stephen +3140994 WA5TEF Jimmy +3140995 N3JW Joseph +3140996 N5RNF Robert +3140997 K2DED Steven +3140998 KF7KGN Nathan +3140999 KE0UBK Jeffrey +3141000 KE8KPJ Brian 3141001 N7MAQ Jim 3141002 N7MAQ Jim 3141003 KC7HBU David @@ -87741,7 +110314,7 @@ 3141027 KG7LNX Wicks 3141028 KD7PJP Gabe 3141029 WA7BND Richard -3141030 K7MTW +3141030 K7MTW None 3141031 K4UAI Sara 3141032 KK6PR Frederick 3141033 WH6EXB @@ -87777,7 +110350,7 @@ 3141063 N7LGK Wade 3141064 KG7NRL Robert 3141065 N7YDI Matthew -3141066 K1KLW Ken +3141066 K7KLW Ken 3141067 N3RDZ Richard 3141068 W7OZM Randal 3141069 N7XZZ Thomas @@ -87840,6 +110413,7 @@ 3141126 KK6JEB Jerry 3141127 KI7IZT Kristopher 3141128 KI7IZT Kristopher +3141129 W4LHQ David 3141130 KS0F John 3141131 KJ7OB Ronald 3141132 K7MTL Michael @@ -87863,7 +110437,7 @@ 3141150 W7LRR Larry 3141151 KF7ELY Carroll 3141152 K7KLB Keith -3141153 KG6YLJ Matthew +3141153 KG6YLJ Matt 3141154 KG7TPX Andrew 3141155 WA7ROB Rob 3141156 WA7HOT Kelly @@ -87885,9 +110459,13 @@ 3141172 N7SJC Stephen 3141173 KD7RQ Ryan 3141174 AH6LE Kenneth +3141175 K2DED Steven 3141176 K7FMR Robert 3141177 K7FMR Robert +3141178 KK6VAD Brian 3141179 KC7ICI Joe +3141180 K8PIN Dirk +3141181 KC3NKI Ayyappan 3141182 KB7YZS David 3141183 KP2X James 3141184 KG7YJT Sylvia @@ -87903,6 +110481,7 @@ 3141194 NM7C Bryan 3141195 N7LGK Wade 3141196 KD7THQ Lee +3141197 KI7REL Anthony 3141198 KB1SVH Aaron 3141199 W4OMA Diane 3141200 N7AZE Ryan @@ -87926,11 +110505,12 @@ 3141218 K7NDC N 3141219 W7PRV Jeshiah 3141220 N7FIV Kenneth -3141221 K7MTW +3141221 K7MTW None 3141222 KI7GKH Joshua 3141223 KD7PJN Kevin 3141224 KD7PJN Kevin 3141225 W2YOT Mohd +3141226 W6RDX Disaster 3141227 KI7GOE Christina 3141228 KA3RFI Montel 3141229 WA7RPM Richard @@ -87943,6 +110523,7 @@ 3141236 AA1AO Ardi 3141237 KD7BCY John 3141238 W7SAK Shane +3141239 W6RDX Disaster 3141240 W1OES Jason 3141241 WZ7Q Joseph 3141242 KF7TGN Lyndon @@ -87961,10 +110542,12 @@ 3141255 K7KRH Kenneth 3141256 KX7EMT William 3141257 KX7EMT William +3141258 W6RDX Disaster 3141259 KD7NVM James 3141260 WA7TTD Fred 3141261 KC6UMK Reggie 3141262 KC6UMK Reggie +3141263 W6RDX Disaster 3141264 KC0DMV Donna 3141265 KD7WIO Brent 3141266 W7SY Sergio @@ -87976,6 +110559,8 @@ 3141272 N4UYA Andrew 3141273 WA7TEM Don 3141274 K7AOE Timothy +3141275 W6RDX Disaster +3141276 KB5DMZ Daniel 3141277 KI7RID Justin 3141278 KI7FK Gregory 3141279 KC7DMF Mark @@ -87987,6 +110572,7 @@ 3141285 N1SLO Sharon 3141286 N1SLO Sharon 3141287 KA7IUG Corrine +3141288 KX4SH William 3141289 N0KWE Jason 3141290 KC7DMF Mark 3141291 NJ3H George @@ -87997,6 +110583,7 @@ 3141296 KC7RJK Ross 3141297 KC7RJK Ross 3141298 N7PWW Douglas +3141299 W8VCR Ronald 3141300 KE7RQP Eric 3141301 K7SNR Stephen 3141302 AA7BG Bruce @@ -88020,6 +110607,7 @@ 3141320 WB7RAB Alfred 3141321 AF7FX Warren 3141322 AF7FX Warren +3141323 K0VET John 3141324 KC7YFE Dale 3141325 KG7GOR Dickie 3141326 AG7FZ D @@ -88049,14 +110637,649 @@ 3141350 KI7G Arden 3141351 N7GZN Jeffrey 3141352 KB6PEP Archie +3141353 KC3MLI Chris 3141354 KI7LIZ Mike 3141355 KG7FRZ Joshua 3141356 KI7PYY Arber 3141357 KI7PYY Arber +3141358 WB8DIM Thomas 3141359 W6UDF Justin 3141360 KC7VH Steven 3141361 W8RYA Bryan 3141362 KC7YZZ Timothy +3141363 K7DR David +3141364 KN4TUP Michael +3141365 NN4EM Etienne +3141366 KM4CPJ Jeff +3141367 W1FDW Donald +3141368 W4RIF Mark +3141369 AC9FM Ernest +3141370 K8III Jeremy +3141371 WW6WW John +3141372 KI4FZT John +3141373 AC9UZ Matthew +3141374 KC0QXX William +3141375 W4RIF Mark +3141376 KD7KLA Michael +3141377 KE0WHH William +3141378 W7COT William +3141379 WE0FUN Fun +3141380 W0KAS Alex +3141381 K4KCY James +3141382 KE8MEL Keary +3141383 KI5EMF Jonathan +3141384 N4CQR Craig +3141385 KO9V Robert +3141386 KN4TQZ Clyde +3141387 K1JBX John +3141388 K1JBX John +3141389 WA4VOL Scott +3141390 W2HDU Richard +3141391 KC1WDL Wayne +3141392 KE4UHC Scott +3141393 KI7BJO Ronald +3141394 KD2SBJ James +3141395 KE4ROQ John +3141396 KC9SIW Scott +3141397 KB3UCG Raymond +3141398 KE0VHD Patrick +3141399 AD0YJ Asa +3141400 AJ6JN Forrest +3141401 KB0AUG Jerry +3141402 KI7PSV John +3141403 KC3NEX Orville +3141404 KN4FYR Dan +3141405 KC1LJI James +3141406 KB3RFH Andrew +3141407 NZ0B Carter +3141408 KI5DJJ Joshua +3141409 KD2SBJ James +3141410 WB6AZB Larry +3141411 KN4UHC Noah +3141412 AH6U Arch +3141413 KI5EQE Ty +3141414 AB7ZQ Bonita +3141415 W9NVA Patrick +3141416 W3WNZ Philip +3141417 KE8MDL Toby +3141418 KK4BJY Bruce +3141419 KB3ZLU Brendon +3141420 KJ7FCA Ralph +3141421 KM6GZQ Jeffrey +3141422 W4JFF Jeff +3141423 KI5DSG Michael +3141424 AH6GT Robert +3141425 KD9CBP Richard +3141426 W1IDZ Leon +3141427 W7GMS Greg +3141428 KB5MDD Herman +3141429 KE5YOR Richard +3141430 KG4DLZ Jordan +3141431 AD8DN Daniel +3141432 AH6SN Peter +3141433 WD5AEJ Henry +3141434 K6ZGW Barry +3141435 K2BGP Daniel +3141436 WA9LFQ Herman +3141437 KF0GH Louis +3141438 AI6ZE Joseph +3141439 WB6BJN Mark +3141440 K6PMC Paul +3141441 NG7N Craig +3141442 KG5HHS John +3141443 WD5AEJ Henry +3141444 KK6QVW Robert +3141445 KJ7GJC James +3141446 KM6PS Daniel +3141447 K8OJ Jeffrey +3141448 KD0YLA William +3141449 K4NAE William +3141450 WG4P James +3141451 KK6VAD Brian +3141452 AE0FX Bruce +3141453 KN4SAC Richard +3141454 KE0VKM Beverly +3141455 N9QXW Aaron +3141456 N4CMZ Michael +3141457 N5PBF Manuel +3141458 KD2L John +3141459 W5AWM Patrick +3141460 KG4HMI Ray +3141461 KE0LSL Alan +3141462 K7DXA Tim +3141463 K5MIX John +3141464 KN4ROZ Frankie +3141465 N5YCE Cha-kei +3141466 K1NBT Neil +3141467 KC7NKP Adam +3141468 N8RJC Robert +3141469 KC0CJV Dennis +3141470 KB1DY William +3141471 KM6FFR Mckenzie +3141472 N3MQL Thomas +3141473 WA5FAC John +3141474 W1EMT James +3141475 KD0VYE Timothy +3141476 AB1XQ John +3141477 KG5RLQ Gary +3141478 K6SPS Stephen +3141479 N7SWG Edward +3141480 NW0Q James +3141481 KE0MNV George +3141482 KK6UAA David +3141483 KS4PB Mina +3141484 KJ6NDM Mark +3141485 KJ7GJZ Grant +3141486 W5RDL Rix +3141487 KK6JGD Gary +3141488 KD5ZQN RANDY +3141489 KD5KCG David +3141490 KC4UNA Kevin +3141491 NY4M Wayne +3141492 KN4TEL Paul +3141493 K4BBS Brian +3141494 W7LYD Lydiann +3141495 WA0ZVF James +3141496 N6GSE Ricky +3141497 W4VED Justin +3141498 KD8VQH Wesley +3141499 KD2OGB Craig +3141500 KE0VDA Brian +3141501 KG7WNF Michael +3141502 KR6TFD Steven +3141503 KG5RLQ Gary +3141504 KE8DVR Alexander +3141505 KM4HDL Brian +3141506 W5AWM Patrick +3141507 K5MIX John +3141508 KE6MTF Kirk +3141509 KE6MTF Kirk +3141510 KM6NN Johnnie +3141511 WB5PFL Phillip +3141512 N6EAJ Matthew +3141513 WX4ZAC Zachary +3141514 KD9RCL Clarence +3141515 KD6EZZ Glen +3141516 KN4DCO Bryant +3141517 KC9FSW Steven +3141518 KB1MDH Zachary +3141519 NM0V Jarret +3141520 NM0V Jarret +3141521 K0PSK Adam +3141522 KU4WQ John +3141523 W8LTR Walter +3141524 W3KTZ Ian +3141525 KB5YZB Brett +3141526 KM6WWY James +3141527 NG7G Warren +3141528 K5UAV Emmett +3141529 AD5KL Lance +3141530 KB9B Steven +3141531 KK4NMA Richard +3141532 N9HTF Robert +3141533 W2VAL John +3141534 KI7QQC David +3141535 WB0VAO James +3141536 KF6UGD John +3141537 KK6GM Gary +3141538 KK6FVI Max +3141539 K4ZAK Dean +3141540 W4CAC Carl +3141541 KN4IJS Ronald +3141542 NK3V James +3141543 KE5YKI Roger +3141544 KM4ZCX John +3141545 N4KV John +3141546 KC9FSW Steven +3141547 W1MOZ David +3141548 N6AOA Thomas +3141549 W1FJF Frederick +3141550 AD4WX David +3141551 KM4CPI John +3141552 N8GIT Frank +3141553 KM6PPY Paul +3141554 KC8KHS Daniel +3141555 KC1LKZ Hank +3141556 KH6HT Darrell +3141557 KC1LKZ Hank +3141558 KC3MXX Edward +3141559 KE8HEP Steven +3141560 K0EC Andrew +3141561 KE8HEN Laura +3141562 KE8HEP Steven +3141563 KE8HEN Laura +3141564 KJ7G Boris +3141566 KG6KCO Jeffrey +3141567 KG5RXS Christopher +3141568 N0RHA Paul +3141569 K5BTR Brent +3141570 K6AUR Alexander +3141571 KD4LQS Michael +3141572 KN0BDY Timothy +3141573 N9VL Kameron +3141574 KO4HG James +3141575 WB2KUQ Daniel +3141576 K7LVO Lewis +3141577 WB2KUQ Daniel +3141578 KD1LDO Michael +3141579 KC0WUV Philip +3141580 KJ4DDM Aaron +3141581 K8CAM Craig +3141582 KN4FCV Michael +3141583 WI5ARD Russell +3141584 N1KET Christopher +3141585 K0RES Randal +3141586 K0RES Randal +3141587 KB3DAS Danny +3141588 KD5IOZ Andrew +3141589 KG5KZS Justin +3141590 KH7FX Robert +3141591 KD8YZD Paul +3141592 KD5IOZ Andrew +3141593 KN4TMF Thomas +3141594 KI4AJF Mark +3141595 W3HNR Todd +3141596 K9TM Timothy +3141597 N5JAT Christopher +3141598 KJ7AFN Kiran +3141599 KM4EGK Jesse +3141600 KN4LRA John +3141601 KQ0Q Lance +3141602 W4MAF Michael +3141603 AD8DO Yi +3141604 N0ARN Carlyle +3141605 W0EAY Don +3141606 KX4OK Thorsten +3141607 W9CRJ Brian +3141608 KN4PKS Kevin +3141609 K4THP Max +3141610 AC3DY Wesley +3141611 KX5FUZ Steve +3141612 K8KPO Brian +3141613 K5HGR HAROLD +3141614 AD8DO Yi +3141615 KI5CKU Paris +3141616 KD0BVQ Henry +3141617 NN2H John +3141618 W9XQ Marc +3141619 N4ZJW Bryce +3141620 KC3MMJ Ian +3141621 WB5VYR Charles +3141622 K2JOR Jordan +3141623 N4ZJW Bryce +3141624 KC4BTS Bruce +3141625 KD9MKO Joseph +3141626 N4VOX Sean +3141627 KN4OOV Jeffery +3141628 KD0TUS James +3141629 AE5KS Paul +3141630 KG5OKL Emma +3141631 KD0TUS James +3141632 W2BA Melanio +3141633 KH6GKR Ronald +3141634 KE0IAI Aaron +3141635 KD2RBV Carsten +3141636 AA2CO Howard +3141637 KF7IRD Joseph +3141638 KK6DUB Dana +3141639 KE8IXK Margaret +3141640 KM4RGL Rene +3141641 KJ6JSR Regalado +3141642 KE0TVL Kevin +3141643 N0CJB Christopher +3141644 N7LEA Leonard +3141645 N1KEZ Rob +3141646 KN4ULM Graeme +3141647 WA4CYA Lester +3141648 K4ZAK Dean +3141649 KI5EGZ David +3141650 KC8PZA Michael +3141651 N1IVJ Charles +3141652 WA4ADT Daniel +3141653 KN4UMR Daniel +3141654 KJ7GLY Keegan +3141655 K3TMI Newberry +3141656 KN6BJA Gak +3141657 N0BXQ Terry +3141658 KN6GAK Gak +3141659 KI2L Robert +3141660 NZ6P Matthew +3141661 WA6SEK Corey +3141662 KE5NTA Justin +3141663 WB3JXL Glenn +3141664 W4JMF Jason +3141665 W4JMF Jason +3141666 W4JMF Jason +3141667 N6UM Jay +3141668 W7RMR Ryan +3141669 N1XJI Christopher +3141670 KE6DWA David +3141671 KM4KMH Rob +3141672 K1NKY Johnny +3141673 N6UM Jay +3141674 K7JKA Andy +3141675 K7DCJ David +3141676 KN6BQV Eli +3141677 N3JDZ Jeffrey +3141678 N8JDD John +3141679 KM5PZ Jonathan +3141680 KD6YFE Lloyd +3141681 KI5EOE Veda +3141682 K3WNZ Kimberly +3141684 W1JP Jon +3141685 AE0Z Howard +3141686 K6RSD Edward +3141687 KI5EDJ John +3141688 K9MPM Michael +3141689 KG5ABP George +3141690 W5AHA Charles +3141691 W3BT Julian +3141692 AB9AC David +3141693 KC3NKC Paul +3141694 N0DIY Mel +3141695 KM5PZ Jonathan +3141696 KB0LXE Gary +3141697 N3XKQ Richard +3141698 K5WRN Michael +3141699 W7TLC Thomas +3141700 W0AVQ John +3141701 K1PXF William +3141702 KG7GW Ken +3141703 KD4ZWB Carol +3141704 WA4VOC James +3141705 KJ4PEO Darrell +3141706 KJ4PEO Darrell +3141707 K0BSA K0BSA +3141708 K7JKA Andy +3141709 KE6ATJ Shawn +3141710 W7ACM Greg +3141711 KE0PDU Michael +3141712 N4STC Phillip +3141713 KN4TOB James +3141714 N4PEN William +3141715 N8FKG William +3141716 KC1LLN John +3141717 K7LRM Len +3141718 KA0DIE Rodel +3141719 W8ATE Stanley +3141720 KE7S Ronald +3141721 W8PPB Peter +3141722 W2AAS Victor +3141723 KC8COI Ted +3141724 KI5ESJ Christopher +3141725 KK6VLO Jon +3141726 KN4UKE Walter +3141727 KC3NKC Paul +3141728 WA4HLI Dawn +3141729 KA1EKS John +3141730 KC0BMH Joshua +3141731 KK4EMN Michael +3141732 KC4X David +3141733 N1PUG Janie +3141734 KG5YVU Walter +3141735 KM6OKV James +3141736 KN4RGG James +3141737 KJ5M Steve +3141738 W8DPV David +3141739 W0EJN Eric +3141740 N6CPU Bryan +3141741 KC8ULE John +3141742 KD7PHX Bob +3141743 KM6OKV James +3141744 N0ZHX Jon +3141745 KK6TOH Ricardo +3141746 KK4YIV Gary +3141747 W0CAT Dan +3141748 KJ7GHE Andrew +3141749 N8WLY Stuart +3141750 W5QLD Ronald +3141751 NJ4Y Matthew +3141752 W4GTF ESAR +3141753 AG7VS John +3141754 KN4RRN Terry +3141755 KN4RRN Terry +3141756 W9MRL Michael +3141757 N1BBT Brian +3141758 KE5WAN James +3141759 K7WYS Matthew +3141760 AA6IO Steven +3141761 KC8WOW Daniel +3141762 KC9EWY Richard +3141763 KR4XG Howard +3141764 KG4LRE Erich +3141765 KK6QMS Clifford +3141766 KK6QMS Clifford +3141767 KN4ONT Frank +3141768 W4HYC Everett +3141769 W5DCF Charles +3141770 KD8SEM Charles +3141771 KB7VPL Jeffery +3141772 KD9MVK Quinton +3141773 KB7VPL Jeffery +3141774 KE0DC Douglas +3141775 KJ6YXI Miguel +3141777 N9PYL Ryan +3141778 KG5BRM Dillon +3141779 AE9TH Thomas +3141780 W6GRD Grover +3141781 W4ZBB PARC +3141782 K0HMZ Robert +3141783 WA4ELK John +3141784 AA4OG Walter +3141785 K1YK Frank +3141786 WW2LL Leo +3141787 KE6ABZ Tim +3141788 KG5BRM Dillon +3141789 K5NKK Mario +3141790 W6OOF Christopher +3141791 KK4SSM Robert +3141792 AF5IX Jack +3141794 WA5CYR Danny +3141795 W5NTQ Paul +3141796 KN4MLW Jacob +3141797 KN4MLW Jacob +3141798 KE8MEK Richard +3141799 N8HF Robert +3141800 N8IR Jason +3141801 N5LK Charles +3141802 W4VRD Robert +3141803 K7MMC Michael +3141804 K7TEN Claude +3141805 WA7RJB Robert +3141806 WA8YXM John +3141807 KN4RAK Tina +3141808 KG4TAA Robert +3141809 KW3LDR Dickie +3141810 N8RXG Stephen +3141811 KD2JIP David +3141812 W7BEV Beverly +3141813 KI5CZJ Robert +3141814 KI5ETX Kevin +3141815 N6WV Chris +3141816 K8TRC Trevor +3141817 AA9OM Darrell +3141818 KB8IFX Michael +3141819 KE5DEV David +3141820 KA3BEX Gregory +3141821 N2STQ Joseph +3141822 K0EV Eric +3141823 K1ORQ Philip +3141824 KB3MLT John +3141825 WK2X William +3141826 KC4YMT Richard +3141827 AD6LV Raymond +3141828 KC4YMT Richard +3141829 WA3ZZU Charles +3141830 KB0JEG David +3141831 KN4SEE Bryan +3141832 N6GRG Michael +3141833 AC6JK Michael +3141834 KA8CLX Mark +3141835 KN4UNH Donovan +3141836 KE8JSS Kathleen +3141837 KE5IMK Britt +3141838 W6GRG Gregory +3141839 KI7WBG Kevin +3141840 KN4SDC Brian +3141841 N5IMJ Jerry +3141842 W1BDC Dustin +3141843 KB6VB Vance +3141844 KD2RYN William +3141845 KD2RYN William +3141846 WA8VZY Robert +3141847 N7GET Robert +3141848 KG7MYX Michael +3141849 KC2KJS Robert +3141850 KG7ZOK Robert +3141851 KN4UNJ Scott +3141852 W0WSA John +3141853 KE0QGL Isaac +3141854 N8BI Jack +3141855 KK6CLG Scott +3141856 NW2M Albert +3141857 N8SPW Kenneth +3141858 N8SPW Kenneth +3141859 N3JOX Edward +3141860 KJ7GMY Patrick +3141861 KJ5UFO Jerry +3141862 KE0TYC Dan +3141863 KN4TYI Carl +3141864 N8JLM Javan +3141865 KJ7GCI Lindsay +3141866 KD8KXK Eric +3141867 K8TDA Thomas +3141868 W7WRO Philip +3141869 KE0QGL Isaac +3141870 W8TZ Ross +3141871 K1BRM James +3141872 W4JBS Jimmy +3141873 W0EQU Heartland +3141874 N6WHZ Patrick +3141875 KE8EAJ Raymond +3141876 KN4UAJ Andy +3141877 NO8J Mark +3141878 N1KEZ Rob +3141879 KJ7DDR Wesley +3141880 AG6PN John +3141881 AA5KL Linsey +3141882 KJ7GLL Ivan +3141883 KD8CGH Robert +3141884 K9MGB Michael +3141885 KN4LKW Christopher +3141886 N9AJB Aaron +3141887 KE5PIP Jean +3141888 KE5PIP Jean +3141889 WA6BTK Stuart +3141890 KD4RZV Michael +3141891 K0TSA Western +3141892 KE5CJS Cindy +3141893 N5MXE Clint +3141894 KE0ADU Alessandro +3141895 WA9FRQ Gary +3141896 KE0USX Jeff +3141897 N6RDC Robert +3141898 KE8LCM Roger +3141899 N8KLZ Michael +3141900 AB7JH James +3141901 KC0DUI Michael +3141902 KC2GLY Patrick +3141903 KE8KWZ Taylor +3141904 NC9W Paul +3141905 KE8KTR Travis +3141906 KB8HTU Gary +3141907 K4ZLT Frederick +3141908 KI5ESM Michael +3141909 K4ZLT Frederick +3141910 AI0M Stanley +3141911 KD0INT Patrick +3141912 NJ0U John +3141913 KN4ERT Keegan +3141914 KG6LPQ Timothy +3141915 W6CEO Brian +3141916 AB7JH James +3141917 KB6TEQ Jeremiah +3141918 AK8X Frederick +3141919 WA2DZL Alan +3141920 KE8KPN Ian +3141921 W9KVM Francisco +3141922 N3QQZ Keith +3141923 KD7ZTZ Kerry +3141924 N0PFF Michael +3141925 W0JRL Jeremy +3141926 WA8EFK Dale +3141927 WA7KTM Daniel +3141928 KI5SX Stuart +3141929 N5DTR Gerald +3141930 KJ5UFO Jerry +3141931 KN4DKA Donald +3141932 W0XLD Loren +3141933 KE8MFW Douglas +3141934 KD8WLB Carl +3141936 KB3EYY Steven +3141937 KX4TXB Brandon +3141938 KA8RYR Gary +3141939 KC3MPB Gary +3141940 K6UB Raoul +3141941 KN4SNL Troy +3141942 KE8HVH Camden +3141943 N0CPU Scott +3141944 KI7GZS Dongjie +3141945 KM6FJF Leo +3141946 KE8MHT Kevin +3141947 K9JDW James +3141948 KF5WGF Michael +3141949 KE8LLQ James +3141950 N3HOM Dave +3141951 KE8MHP Seth +3141952 W8TAU Mike +3141953 KI5DNZ Brad +3141954 N2GWK George +3141955 AB4DE Timothy +3141956 W1EXZ Robert +3141957 KE8IOR Chirstopher +3141958 K4SFC Ronald +3141959 WA8APB William +3141960 W6MW Mark +3141961 AB4DE Timothy +3141962 KD6EBN Paul +3141963 KE8DXX John +3141964 W4JBS Jimmy +3141965 KN4ULT Paul +3141966 W3MSG Stewart +3141967 K5JKW James +3141968 KN4DKA Donald +3141969 KD1RI David +3141970 NR8R Robert +3141971 KC1LHF Matthew +3141972 KC2TCM Jay +3141973 WA7LNW Jack +3141974 KB0WSV Steven +3141975 K8JEH James +3141976 K6TE Wim +3141977 N8RFI Keith +3141978 N8ADO Robert +3141979 N8UVL Alan +3141980 KC3MAL Richard +3141981 KK6JWY Willard +3141982 KI6MU Eric +3141983 K8JEH James +3141984 WW5PA Paul +3141985 K6DKC David +3141986 KD9JVS Richard +3141987 N3TXU Bryan +3141988 N0RPM Jason +3141989 N0NY Michael +3141990 N0NY Michael +3141991 KB5UJI Michael +3141992 N8LGP Stephen +3141993 KE8MGP Robert +3141994 KB2CYF John +3141995 KE8IFR Joseph +3141996 KD9KQQ Robert +3141997 KD8OBR John +3141998 KG5OCW Gregory +3141999 KB2S Brian +3142000 KE0DYJ John 3142001 N3ST Bryan 3142002 K4MTP Mike 3142003 N3OBL Frank @@ -88235,7 +111458,7 @@ 3142176 N3FE Corey 3142177 N3KKU Randy 3142178 KN3M Eric -3142179 K3LEE Lamar +3142179 AB3RX Lamar 3142180 KC2IRV Joseph 3142181 KA3TIN Justin 3142182 N2JEH Justin @@ -88268,6 +111491,8 @@ 3142209 WA3NOA Jim 3142210 K3JSE William 3142211 K3XS Margaret +3142212 AC2NI Benett +3142213 KM4JQK Jim 3142214 KB3ABO Purcell 3142215 KE3JH James 3142216 KB3FHX Marc @@ -88341,7 +111566,7 @@ 3142284 KB3ZDW Michael 3142285 N3UGI Joseph 3142286 N3XAO Howard -3142287 KC3CWJ Robert +3142287 KN3G Robert 3142288 K3HHI Doug 3142289 N3YJ Glenn 3142290 N3YJ Glenn @@ -88378,7 +111603,7 @@ 3142321 W3BIF James 3142322 W3DCW Dennis 3142323 KC3HAS Thomas -3142324 N3XBO Terry +3142324 N3ETH Terry 3142325 KB3EAW Derron 3142326 KC3HAC Brian 3142327 KB3TOX Edward @@ -88407,6 +111632,7 @@ 3142350 KC3DLU Keith 3142351 K3RUN Danielle 3142352 KB3MTU Brian +3142353 K2LJ Joseph 3142354 W3MCP Michael 3142355 W2VZW Reed 3142356 W2VZW Reed @@ -88418,6 +111644,7 @@ 3142362 N3HTK John 3142363 N3CB Christopher 3142364 KB3YRJ Kevin +3142365 AB1EO Robert 3142366 KB3ZWI Kevin 3142367 N3SGU Brian 3142368 KC3CSU Mats @@ -88448,7 +111675,7 @@ 3142393 K3XR Daniel 3142394 N3DXE Joseph 3142395 N3HY Michael -3142396 WZ3RO Richard +3142396 WZ3RO Rick 3142397 WP4DQB Ivan 3142398 KB3ZTB Dewane 3142399 KC3DVH Dean @@ -88484,11 +111711,12 @@ 3142429 N3NCG Tim 3142430 N3KCR David 3142431 N3NCG Tim +3142432 AB1EO Robert 3142433 KC3BMZ Joshua 3142434 KE3JH James 3142435 N2QDZ York 3142436 KC3CVK John -3142437 N3VKK Remy +3142437 N3VKK 3142438 N3GYW A 3142439 WN3LIF Walter 3142440 W3VCS Philip @@ -88499,7 +111727,7 @@ 3142445 W3SF Thomas 3142446 KB3HMO Steven 3142447 KD3L Paul -3142448 WE3FD Lawrence +3142448 K3WNY Lawrence 3142449 KB3WIE Bryan 3142450 K3CWI Wayne 3142451 KB3DBA John @@ -88601,19 +111829,18 @@ 3142547 N3QWT John 3142548 WA3WTH Gilbert 3142549 N3GLH Carl -3142550 N3HFB Harris -3142551 N0DIP Dipspit +3142550 N3HFB 3142552 N3KMZ Patrick 3142553 KC1GXS Nicholas 3142554 KB3LAN Mike 3142555 KB3LAN Mike -3142556 KS3M Warren +3142556 KS3M Skip 3142557 W3UNO Houstin 3142558 KA3UBG Joseph 3142559 KA3PTF David 3142560 KB3VXB Francesco 3142561 N3XDI Jared -3142562 N3PEC Paul +3142562 KA3E Paul 3142563 KC3ILU Daniel 3142564 K3WF Gregory 3142565 WX3K Stephanie @@ -88627,7 +111854,7 @@ 3142573 KB3YWU Marianne 3142574 N3KMZ Patrick 3142575 W3KST Kief -3142576 N8BLK Arthur +3142576 N8BLK Art 3142577 KB6FOX Gregory 3142578 KB3TII Scott 3142579 W3JHK Jack @@ -88696,7 +111923,7 @@ 3142642 W3KKC Kevin 3142643 KB3TIJ Harry 3142644 K3LH Josh -3142645 KC3IGF Charles +3142645 W3CCB Charles 3142646 WA3OGQ George 3142647 AG3E Clayton 3142648 KC3GXI William @@ -88771,11 +111998,13 @@ 3142717 KB3FFL Reinol 3142718 KB3TSJ Michael 3142719 KC3IZK Brandon +3142720 KE8DPR Raymond 3142721 KC2BEF Francisco 3142722 KB3IV Edward 3142723 N3GBJ Christopher 3142724 N3YGH Carl 3142725 W3FJD Chip +3142726 KC2CYS Sherwin 3142727 KD3XC Richard 3142728 N2OWE George 3142729 KC3BJY Edward @@ -88789,6 +112018,7 @@ 3142737 WC3T Richard 3142738 AE3T Howard 3142739 KB3TQR Richard +3142740 KH6HPA Bill 3142741 KB3KJB Bradley 3142742 KB8SSS Greg 3142743 K3PSP Dennis @@ -88797,13 +112027,14 @@ 3142746 WB2SRI Matthew 3142747 WA3MVQ Glade 3142748 W3DEC Donald +3142749 KE4ROC Edward 3142750 N2PPK Timothy -3142751 KB2MXV Frank 3142752 KB3SHV Leroy 3142753 K3ZK George 3142754 N0JAX Joseph 3142755 W3JHK Jack 3142756 N8EUL Jonathan +3142757 WA0UXB Stephen 3142758 WB3HQE Joseph 3142759 N2ZJQ Richard 3142760 N2ZJQ Richard @@ -88820,9 +112051,10 @@ 3142771 KC3IVM Christopher 3142772 KB3WUD Leann 3142773 KB3IGG Michael -3142774 W2FUV Nj/Pa +3142774 W2FUV NJ/PA 3142775 KB1CU Richard 3142776 N3AB John +3142777 KJ7FSY Myron 3142778 W3FMH Kyle 3142779 KD3IJ Wesley 3142780 N3HLK Michael @@ -88843,7 +112075,6 @@ 3142795 AA3SO Robert 3142796 AA3SO Robert 3142797 W3ECA Edward -3142798 KB3LHT Donald 3142799 N3EDM James 3142800 KC3FNB Jerold 3142801 K3RTU James @@ -88852,6 +112083,7 @@ 3142804 N3RN Robert 3142805 WS2K Joseph 3142806 KC3FJB Shrinivas +3142807 N8RFI Keith 3142808 W3WOW Francis 3142809 W3WOW Francis 3142810 N3JDR William @@ -88872,6 +112104,7 @@ 3142825 W3EMT Jason 3142826 KC3IAR Drew 3142827 K3ROS Ross +3142828 WB5PFL Phillip 3142829 KC3JNB Daryl 3142830 WO3T Carmen 3142831 W3EMA William @@ -88902,9 +112135,13 @@ 3142856 N3KDJ Philip 3142857 KC3JJK Timothy 3142858 KA3SAW Peter +3142859 KJ7FSY Myron +3142860 KC4F Christopher 3142861 W3BPC Brian -3142862 W3OKU Richard +3142862 W3OKU Rich 3142863 KC3FNK John +3142864 KN4URL Joseph +3142865 N0JFK james 3142866 KA3SAW Peter 3142867 KC3HFG Connor 3142868 KC3DAD Gary @@ -88915,20 +112152,25 @@ 3142873 KA3WSO Herbert 3142874 N3XHO Larry 3142875 K3ACW Adam -3142876 KC3JRO Karl +3142876 W3KBG Karl 3142877 KA3RXY Charleen +3142878 WB8JB James 3142879 N3ZNT Aaron 3142880 KB3MAL Malcolm 3142881 KB3GUN William 3142882 KB3NIA Travis -3142883 N3JMN Miguel +3142883 ND3I Miguel 3142884 KE3PO Samuel -3142885 KC3IGN David +3142885 WA3DS David 3142886 KA3REK Nicholas 3142887 K3BVU Benjamin 3142888 K3BVU Benjamin +3142889 W8TVR Gary 3142890 W3MSB Michael -3142891 N3JMN Miguel +3142891 ND3I Miguel +3142892 KD8NYE James +3142893 W1DDR Cameron +3142894 W3JU Joseph 3142895 KC3JIO Darrell 3142896 WB3CTT Kyle 3142897 KC3IBL Joseph @@ -88993,6 +112235,7 @@ 3142956 N3NNL Paul 3142957 K3CKA John 3142958 KB3ATM Miguel +3142959 KC5RWP Bill 3142960 KA3AYY Robert 3142961 AB1HP Takao 3142962 WA3SEE Carl @@ -89015,23 +112258,1016 @@ 3142979 K3RON Ronald 3142980 KB1JEY Michael 3142981 KA3WXV George -3142982 W3LHT Donald +3142982 W3DON Donald 3142983 KW3HD Hugh -3142984 N3OUP George +3142984 N3OUP 3142985 W0ROY Roy 3142986 KB3UHM Derek 3142987 N3MLB Christopher 3142988 W3IW John 3142989 N6CAR Christian 3142990 KC3GYH Phillip -3142991 W2FUV Nj/Pa +3142991 W2FUV NJ/PA 3142992 AB3ZG John 3142993 K3QDU Malcolm 3142994 KC3BFS John +3142995 KI6WAO Anthony 3142996 N3DNX Richard +3142997 KC9NZA Gregory 3142998 KD3K Audra 3142999 N3NDU Llewelyn 3143000 N3WXW Edward +3143001 WA8RUO Charles +3143002 W0MJB Monte +3143003 KD7NGK Robert +3143004 W3FFW Fredric +3143005 KD8NYE James +3143006 KI5CLG Douglas +3143007 W8TVR Gary +3143008 NY2CW Robert +3143009 KI5EUF Marc +3143010 K5RLB Richard +3143011 KE9UW Charles +3143012 KC6YNF Robert +3143013 KN4ITV Michael +3143014 KN4OZJ Mark +3143015 KN6BZU William +3143016 N8MDS Mark +3143017 AJ9C Michael +3143018 N7JAJ Armin +3143019 KC0FYS Alan +3143020 KD2GRW Vincent +3143021 KA5STE Kevin +3143022 N8QQQ Nicholas +3143023 K4SMH Steven +3143024 K5FY John +3143025 KC2IGS Arthur +3143026 KB5VJV Richard +3143027 N3YRZ Michelle +3143028 KL7SB Stephen +3143029 KI5EUT Joseph +3143030 KI5EUT Joseph +3143031 KC8LJD Michael +3143032 WW7B Morgan +3143033 W1BRG Tim +3143034 W9JLP Jessica +3143035 KE4MCJ David +3143036 KL0R Wigi +3143037 W4KEB Kevin +3143038 N6AQQ Dale +3143039 K7BTF Brent +3143040 KN6CCB Danielle +3143041 KM6NLZ Rafael +3143042 N2SRT Steve +3143043 K0CWO Berend +3143044 W3RSF Rich +3143045 N2SRY Sybil +3143046 KK4TUU David +3143047 KE8LJH John +3143048 K8WGA David +3143049 N9RLA Robert +3143050 KB3OEP Nick +3143051 K1IF John +3143052 KN4UQX Noah +3143053 KC1LMF Justin +3143054 KE0TXD Levi +3143055 N1JTA Joe +3143056 NW7N Jason +3143057 WX5EMC Clinton +3143058 KN4SEE Bryan +3143059 KN4UTH Drew +3143060 NC8O Rob +3143061 KA8AOB Jack +3143062 AE4RY Ronald +3143063 AE0GK Timothy +3143064 WA6JWB Richard +3143065 KI7IF Rick +3143066 KN4QKT James +3143067 K3SLS Steve +3143068 KE8MJD Scott +3143069 KM6YKN David +3143070 AC8FR James +3143071 W4DWE Dennis +3143072 AF7QJ Michael +3143073 KF7RNT Joseph +3143074 WY7DK David +3143075 KD2SDD Joel +3143076 W5EMK Erick +3143077 KD5P Rudolf +3143078 NW8C Harry +3143079 KN4AVZ Deborah +3143080 WW8X Joseph +3143081 NY4F Louis +3143082 W9RY Thomas +3143083 KB7AZ Carl +3143084 K6KMW Kevin +3143085 K1HSY Dean +3143086 KU6V Don +3143087 N7LUF Larry +3143088 KM4TSD Lauren +3143089 KJ7DLV David +3143090 KE5EEZ Kourtni +3143091 KM6WVF Edvardo +3143092 KM6ZKV Miguel +3143093 N0BOK Arthur +3143094 KF7ZJH David +3143095 WA1UWU David +3143096 KJ4FEL Stephen +3143097 N1DGQ Francis +3143098 KC3NNP Trevor +3143099 W3TFI Robert +3143100 W5ZYX James +3143101 WA1UWU David +3143102 AJ6A Kentaro +3143103 KC8SKF Matthew +3143104 KC9NEX Gordon +3143105 KV4RL Charles +3143106 KC0GRA Eric +3143107 KC3NOE Zorie +3143108 K4DFS David +3143109 KE0VTX Kai +3143110 KN4RCB Carson +3143111 K4PBL Peter +3143112 KG5WEB Jason +3143113 W5ZYX James +3143114 KC4YPR David +3143115 WB4YDL James +3143116 KG5PYA Belarmino +3143117 N0PXT Shane +3143118 WA8YXY Tim +3143119 KI7ZI Rod +3143120 K6MDR Andrew +3143121 KN4ENI Jerry +3143122 N1MIE Chip +3143123 K0NKY Garrett +3143124 KN6BHN Richard +3143125 N5HAX Addam +3143126 KD5ZIT John +3143127 KF6ZSP Kevin +3143128 AD7NY Jonathan +3143129 WA0BER James +3143130 K6IWA Robert +3143131 N3DLU Warren +3143132 N7CJF Charles +3143133 WA2FRF Robert +3143134 K6IWA Robert +3143135 KM6MMO Erik +3143136 K2BNE Rick +3143137 K1RLC Robert +3143138 KW1O Mark +3143139 KE8MIL Roland +3143140 KD5KCG David +3143141 KB8VHI Steven +3143142 KX4SJ Ryan +3143143 W2RMT Richard +3143144 W5FRB Franz +3143145 N4URR David +3143146 KA0NZZ James +3143147 N2MA Harry +3143148 KB1GXW Ethan +3143149 N1NPC Stephen +3143150 KE6IXK Gary +3143151 N7CPM Christopher +3143152 KZ4FOX Mark +3143153 K7QDX Michael +3143154 KF6JXT Scott +3143155 KB2WKJ David +3143156 KC3NNI John +3143157 KD9JFH David +3143158 N5VJZ John +3143159 KK2ICU Robert +3143160 KM6IFL Joy +3143161 KE0QGF Joe +3143162 KN4QFR Richard +3143163 KE5OBY Arthur +3143164 KD4JZZ Henry +3143165 KD2QQQ David +3143166 KG4JWU Steven +3143167 K8JML Jacob +3143168 KE8MCP Michael +3143169 KE8KMM Shawn +3143170 K7QOG Erik +3143171 N4JHS Joel +3143172 KG7TUR Tory +3143173 KN4QFR Richard +3143174 W6IA Mark +3143175 KC7RD Robert +3143176 KD2SCR Jeffrey +3143177 KN4EBB +3143178 N2DDX John +3143179 KM6VKK Bruce +3143180 KN3B Brad +3143181 N4WCQ Richard +3143182 K5BCT Zach +3143183 K7MJO Michael +3143184 N0SWA Gary +3143185 KN4BYB Robert +3143186 K5DXF Steven +3143187 N5ETX Jon +3143188 KI7JKA David +3143189 KE6POR Jim +3143190 KB3CNE Theodore +3143191 KD4TEN Dave +3143192 W5RDL Rix +3143193 KC1FHZ James +3143194 W0CB J +3143195 W8RPX Edward +3143196 AA8WI Bernard +3143197 KC9YB Joshua +3143198 W9WI Douglas +3143199 KK4TVW Michael +3143200 N0SWA Gary +3143201 K4RIZ Ronald +3143202 KB3IUM Timothy +3143203 KG5LNL Ian +3143204 KC3LUV Bernard +3143205 KD0ETL Paul +3143206 AF7TH David +3143207 KB0DC Robert +3143208 KG5LNL Ian +3143209 KB1GXW Ethan +3143210 KB3IUM Timothy +3143211 WD4HF Lawrence +3143212 KG5RWA Robby +3143213 KN6SU Nicholas +3143214 W3RFM Roland +3143215 AD5DP Dan +3143216 K4UOJ William +3143217 KN4KIM Jon +3143218 AF4RK John +3143219 K9RYN Ryan +3143220 W6SWC Stephen +3143221 KJ4ZTP Brian +3143222 AE8AM Alfonso +3143223 KG4ECT Marion +3143224 KC8LGS John +3143225 KC7OLB John +3143226 K7PB Ralph +3143227 KM6ZKJ Nick +3143228 K6KTS Nicholas +3143229 WH6DLA Darren +3143230 KJ7GDX Jon +3143231 WA2AGA Howard +3143232 KE8LBY Dennis +3143233 K1ATF Matthew +3143234 N8UDQ Brian +3143235 N5JLQ Scott +3143236 W5PPP Jack +3143237 KM4MLS Brian +3143238 KM6SZP Sarah +3143239 N4CNR Richard +3143240 KC3NLF Gavin +3143241 KD8SEH Jason +3143242 KE8LBY Dennis +3143243 KG6LRI Vitaliy +3143244 KG6LRI Vitaliy +3143245 NV1K Ethan +3143246 KO1RNK Richard +3143247 WG5DCT Jeffrey +3143248 AE6O Arthur +3143249 N6KAM Khamvanh +3143250 N8ILR Steven +3143251 KV7MAR Maureen +3143252 K5MOW Roger +3143253 WG5DCT Jeffrey +3143254 KE5MTN Mark +3143255 KB3FMK Travis +3143256 N6TOC Joel +3143257 KD8ELJ Jonathan +3143258 KD9IQZ Chad +3143259 N4KCD Kenneth +3143260 KJ7GKZ Anthony +3143261 KD5JRJ James +3143262 KD8TQY Anthony +3143263 N3JMA Thomas +3143264 KJ7GKZ Anthony +3143265 KJ7DQX Gordon +3143267 KM6MDB Jessica +3143268 K0EKA Ronald +3143269 N6OIX Steve +3143270 W5EAA Tyler +3143271 KD8TQY Anthony +3143272 KD8USF Devan +3143273 KK4RUS Joshua +3143274 KD8USF Devan +3143275 W3TWB TIMOTHY +3143276 W3TWB TIMOTHY +3143277 KB3WGF J +3143278 KI4EHN Shane +3143279 KE5DBE Paul +3143280 KD9MDT Marcia +3143281 NK1N Glen +3143282 W5WRL William +3143283 KE8MCN Neal +3143284 NB1C Daniel +3143285 AA5GI Reginald +3143286 KG5PDD +3143287 N3XUS Gene +3143288 N8JK John +3143289 N6OIX Steve +3143290 W5GPN Gary +3143291 WG2D Park +3143292 WG2D Park +3143293 KD2SCR Jeffrey +3143294 KN6BTJ Steve +3143295 N3XUS Gene +3143296 KI5EXZ Chris +3143297 KG6NFG Chetan +3143298 K0CTR Ryan +3143299 KN4LTR Adam +3143300 AC6ZZ Donald +3143301 W9CCH Christopher +3143302 W0DEC Jesse +3143303 KI5ETJ Matthew +3143304 N5XJB Kirc +3143305 KF6ATL Don +3143306 AD8AG Thomas +3143307 KC1EPL Hayden +3143308 KI7TXT Brian +3143309 KE0TAE Reaghan +3143310 KJ7FNM Mike +3143311 N2LNO Fred +3143312 KE0CSH John +3143313 N0HDL Albert +3143314 KC0SGK Jason +3143315 WD8CMH Edwin +3143316 KB9YPR Troy +3143317 K6ZEQ James +3143318 W0CDM club +3143319 ND8G Bernard +3143320 KC0ACV Eric +3143321 ND7D John +3143322 KB1NE NE +3143323 W4RHP Ralph +3143324 KD6KHI Daniel +3143325 K6SQA Robert +3143326 KF7DQB Daniel +3143327 KA4HRT Hert +3143328 KA4HRT Hert +3143329 KN4UUZ Alex +3143330 KA5Q Steven +3143331 KN4UUZ Alex +3143332 W4IEE Thomas +3143333 N7TIE Frank +3143334 KG5TUD Philip +3143335 KC0ORD Steven +3143336 N8DVH Alan +3143337 KD8AMR David +3143338 KC0PDS Beth +3143339 KC7SBS Brice +3143340 N7ULC Floyd +3143341 N4AWA Thomas +3143342 KN4URZ Mitchell +3143343 AA2UP Richard +3143344 KC7SBS Brice +3143345 KN4NUL Benjamin +3143346 KM6YTW William +3143347 KA1HEW Roger +3143348 KM6YPS David +3143349 KJ7FNM Mike +3143350 K0WBC William +3143351 K6AH Andre +3143352 KB4DSF Wayne +3143353 KB6EC Grant +3143354 N0DZD Mike +3143355 W4JON John +3143356 AA1QA R +3143357 AC5XZ Charles +3143358 KG6JJM June +3143359 K7PSL Patrick +3143360 KM4TUR Cynthia +3143361 KE0VWZ +3143362 KC3HQX Thomas +3143363 AB8FR Paul +3143364 W8RZR Josh +3143365 AJ6GF Hector +3143366 W1UT Leslie +3143367 KI7KVL John +3143368 KB3DAS Danny +3143369 KE0URG Justin +3143370 KT1NA Christina +3143371 W1AI John +3143372 K9SPK Chuck +3143373 KA1AAA Raymond +3143374 W8ELM Eric +3143375 KI5EYC Mark +3143376 KS0S J +3143377 W5LMW Gregg +3143378 WW6USA Larry +3143379 W9GGG Patrick +3143380 N1KY Craig +3143381 KN4UUI Tirian +3143382 W5PR Charles +3143383 KK6ELW Loren +3143384 AA2UP Richard +3143385 KC3NLS Chris +3143386 KB5F Orin +3143387 KJ7GXC Morgan +3143388 KN4UVP Ronald +3143389 K7DSA Dean +3143390 KM6MO James +3143391 K4SSN James +3143392 KB4KTH Donnie +3143393 KC0DWH Gerald +3143394 AC0RV David +3143395 KG7ANX John +3143396 KC3NLS Chris +3143397 KN4UVI Justin +3143398 KN4TSQ David +3143399 KD5FMU Freddie +3143400 KN4UTW Enzo +3143401 W6GA Gary +3143402 K8AGH Robert +3143403 KG5CTR Tommy +3143404 KB5DXO Donnie +3143405 KE8LYG Philip +3143406 KE0SKO Koenraad +3143407 K4BWP Brandon +3143408 N8BCO Ronald +3143409 K6DQ Robert +3143410 AB7RU Michael +3143411 W5LPG Lafourche +3143412 KG7MPT Jesse +3143413 WA4UJM Wallace +3143414 WX5CJK Connor +3143415 KE0AUD Carol +3143416 KK6QOU Katharine +3143417 KA5Q Steven +3143418 KC3HQX Thomas +3143419 KB5DXO Donnie +3143420 W5OKL Richie +3143421 K1XAN Donald +3143422 K3WHC Stephen +3143423 N2LEN Leonard +3143424 W2JDM Jason +3143425 AA2PM Paul +3143426 KD0TYU Joe +3143427 KB0SVF Michael +3143428 W6RDX Disaster +3143429 KD2PBP Ethan +3143430 WX6D Mark +3143431 KJ6MVB Kathryn +3143432 KE4QCM Thomas +3143433 W2KP Scott +3143434 KD2HCC Richard +3143435 K8BJC Brian +3143436 WA4TBR Orin +3143437 N6DWB William +3143438 KG6VVN Daniel +3143439 N9CMC Jeffrey +3143440 W2RN John +3143441 KE8KCY +3143442 K3WOC Mark +3143443 W9CRJ Brian +3143444 KI5ESJ Christopher +3143445 KM4KIB Martie +3143446 W7FTC Richard +3143447 AF5WG Yuh +3143448 KF6RJS Randy +3143449 KM6BIP Eva +3143450 KK4UDX Paul +3143451 KI7YRC John +3143452 WE4SAR Richard +3143453 AG5UV Charles +3143454 KD6VGW Glenn +3143455 KX4HW Jefferson +3143456 KN4SNH Samuel +3143457 KC8MSU Robert +3143458 N3UFT Robert +3143459 KD8UEP Emery +3143460 KD8UEP Emery +3143461 K5BCT Zach +3143462 KN4PZT Arthur +3143463 WA3CTL Raymond +3143464 KX7N Michael +3143465 K9LZJ Lyman +3143466 K2LK Richard +3143467 KB0RJS Nicholas +3143468 WW3MM John +3143469 AJ0V Richard +3143470 W5ACB Alonzo +3143471 N4PCB William +3143472 N9RBE William +3143473 KB7SQF Richard +3143475 N7HUQ Steven +3143476 KK6NOW Fredric +3143477 KN4DHY Harry +3143478 N6OBY Mark +3143479 KB5ZVR Christopher +3143480 KD9ATD Terrance +3143481 KE7E Steven +3143482 KD8FYN Bryan +3143483 KJ7GWA Karim +3143484 KK6VIQ Danny +3143485 KD5FBA Scott +3143486 KN6CEI Matthew +3143487 NF0M Ted +3143488 N9LOB Randy +3143489 KJ7GWA Karim +3143490 KG4BIR David +3143491 KC5SDY John +3143492 AJ6JT Steve +3143493 W8VW John +3143494 KJ7CUY Ryan +3143495 KG4OLG John +3143496 K6CNC Sam +3143497 KA0INR Jason +3143498 KG7CXO Jerry +3143499 K7JEO Jim +3143500 KI6SUN Robert +3143501 AJ6JT Steve +3143504 W6DCB Donald +3143505 KK6DKX Daniel +3143506 WA0VZV Paul +3143507 K0BQB Gary +3143508 K1SJC Steve +3143509 W1MOW Gary +3143510 W1EYH Frank +3143511 WD4NFT James +3143512 K5FLI John +3143513 KN4PDL Patrick +3143514 KN4UVX Charlie +3143515 WD8NMZ David +3143516 KG5YTG Allen +3143517 K5FLI John +3143518 KG5YTG Allen +3143519 KI7TRN Alisha +3143520 W6DCB Donald +3143521 WA3ROW Vernon +3143522 KG4JPL Kyle +3143523 KI7KVL John +3143524 N6WV Chris +3143525 AD7TG Eric +3143526 KN4MWR Chason +3143527 KF7YQC Samual +3143528 N6HU +3143529 W6BKM Bill +3143530 W6BCW Bobby +3143531 W6MHS Francisco +3143532 KC9TAE Andy +3143533 NA7KR Kevin +3143534 KC5DCT Timothy +3143535 KF4UQU Victor +3143536 N0CM Rick +3143537 KD5BNG Orville +3143538 N6DAR James +3143539 KI7YCE Stephen +3143540 W6MHS Francisco +3143541 KE7ACY Jeffery +3143542 WA7KFP Robert +3143543 KB4NAF Robin +3143544 N6PWY Poway +3143545 KE5DFO Robert +3143546 K4ITQ Benjamin +3143547 K8AGH Robert +3143548 KC9TAE Andy +3143549 K6REW Royce +3143550 K4MPS MICHAEL +3143551 KE0RWC James +3143552 KE0VVU James +3143553 N3LER Lewis +3143554 KN4TKJ Roger +3143555 W7JFC Justin +3143556 AF6FB Michael +3143557 AC7NU Philip +3143558 KB3SSZ Gerald +3143559 KI5OWA Joe +3143560 W6HP William +3143561 KN6CJN Charlene +3143562 N3APP Leslie +3143563 KE8JNQ Emerio +3143564 N8KXI James +3143565 KM6SFI Michael +3143566 N8KXI James +3143567 KB9LFZ Benjamin +3143568 KD5RJK John +3143569 W1OMR Orlando +3143570 WB8VTW Kenneth +3143571 KQ6RS Randy +3143572 KA8PSH David +3143573 AC0GD Charles +3143574 N6BOY Josefino +3143575 KM6VIV Dylan +3143576 K6ANA Marianna +3143577 W6MUZ Mark +3143578 KD6PDD Ted +3143579 AA0JB Jimmy +3143580 WR1J Yasuyuki +3143581 WX4U David +3143582 KI5EHV Michael +3143583 N1SR Stefan +3143584 KM4LOR David +3143585 W4MLZ Robert +3143586 W5HP Lowell +3143587 KD0HZR Renee +3143588 KD0EXE Alvan +3143589 KF4KXN Albert +3143590 N2NJY Garrett +3143591 K4TCJ Ray +3143592 KI6LKY David +3143593 KV4AL Robert +3143594 KN4UXB John +3143595 KC9MLN Douglas +3143596 KC3NPE Dan +3143597 KN4UXM Chana +3143598 W8LIG Larry +3143599 KG5AWC Keith +3143600 WX0MIK Mike +3143601 KM6LDR Steven +3143602 KN4SVO John +3143603 KG7FMQ Austin +3143604 K6STN Andrew +3143605 K3JBC John +3143606 N0VLN Blake +3143607 AC5SD Ben +3143608 KM6OND Steven +3143609 KG7FMQ Austin +3143610 KB8YQS Joshua +3143611 W4ZXT Jerod +3143612 AC8GU Theodore +3143613 KD5BFF Christopher +3143614 K7NHL Erik +3143615 KR6AZ Larry +3143616 KM6LDR Steven +3143617 KE7MZV Lindsey +3143618 N2TC Timothy +3143619 KR6AZ Larry +3143620 KC1NE Craig +3143621 KR7W Richard +3143622 KG5DIW Andrew +3143623 KA3NJF Warren +3143624 WD8RAW Robert +3143625 KK4TIG John +3143626 KE4IFQ Daniel +3143627 KA5ETX Charles +3143628 WA1FOS Ronald +3143629 KD8QOL Keith +3143630 N5YYF Bob +3143631 KC2PKG Prentiss +3143632 KC9REX James +3143633 K5RHL Richard +3143634 KC8USA Frederick +3143635 KI5EXY Danny +3143636 KC2CEX Curtis +3143637 K4FRM Freddy +3143638 W4JCK Chris +3143639 KE6CIK Mark +3143640 KC2CEX Curtis +3143641 W2ZAV Gus +3143642 KJ7GLF Wayne +3143643 KN4NFO Dennis +3143644 KB1BRI Brian +3143645 KD9GUY Rollie +3143646 N4AIR Paul +3143647 N9CMC Jeffrey +3143648 KC3MQL James +3143649 W9KSD Kevin +3143650 KC1LMX John +3143651 K8GWH Dale +3143652 N7DLO Donald +3143653 KG5JMD Jude +3143654 KD2HQU Daryl +3143655 KN4UUV Veronica +3143656 KD9KLQ Jeffrey +3143657 KX4NT Jason +3143658 KX4NT Jason +3143659 KM4WRD Eric +3143660 KB1BRI Brian +3143661 KK6ZKM Christopher +3143662 KJ7JS Brian +3143663 KF6IAN Nicholas +3143664 KJ7CLT Eugene +3143665 AB9UZ Morgan +3143666 W1DPA Rudolph +3143667 KD0ERA Terry +3143668 KN4UTI Nicholas +3143669 KH6HDA William +3143670 KN4SMC Brett +3143671 KF6IAN Nicholas +3143672 KB2AWC Serge +3143673 KC5ISI Michael +3143674 W5FF Jeff +3143675 W1DPA Rudolph +3143676 NC4RP Robert +3143677 W2KDR Kevin +3143678 W3CWE David +3143679 N5EVO John +3143680 WW4CQ Ricky +3143681 N8XUB Aaron +3143682 KB5CTM Robert +3143683 W3MMR Perry +3143684 WV4TN Wayne +3143685 KI7SLS Blake +3143686 WW4CQ Ricky +3143687 KE8KEA Daniel +3143688 KC1GHT Scott +3143689 N9NLC John +3143690 K1CIA Christopher +3143691 KD0IKO Maurice +3143692 KE8LFE Quentin +3143693 AG4OJ William +3143694 KD5ILG Douglas +3143695 KI5FAO Jonathan +3143696 N1DU Mark +3143697 W8AIR Harold +3143698 KI5BQU Nicholas +3143699 W0UI Richard +3143700 KN6CKW Angelo +3143701 KN6PJ Thomas +3143702 N2HJA Steven +3143703 N6FS Frederick +3143704 N5YRB William +3143705 W8AIR Harold +3143706 N4NMF Barry +3143707 W4LTT Charles +3143708 KG5JMV Lowell +3143709 KD5RJK John +3143710 K3CLS Carl +3143711 KC9MHG Ryan +3143712 KE5PWX Anthony +3143713 KJ6ZQU Austin +3143714 N8ZPS Brian +3143715 WA5MS Martin +3143716 W9JMG Joshua +3143717 W4GRN Cary +3143718 W0KLV John +3143719 KR6W Joseph +3143720 N3LKZ Roy +3143721 KD8VHC mark +3143722 AD7VV Michael +3143723 AD6I Robert +3143724 KN4UXB John +3143725 W6DS David +3143726 W6SYS Peter +3143727 KT4NAZ Terry +3143728 KC2FAL Nicholas +3143729 K4TEP Timothy +3143730 N4EMP Eddie +3143731 AK7WS Lisa +3143732 AD6OG Steven +3143733 KC9UVC Adron +3143734 W5BKM Bruce +3143735 KJ7ETA Carl +3143736 KG5WEO Thomas +3143737 N6RP Geoffrey +3143738 KV7LC Lorenz +3143739 N8LCK Micheal +3143740 N9SSU Vasilios +3143741 K5GLT Gordon +3143742 KA4FAW Johnnie +3143743 W4JCK Chris +3143744 KD5ILG Douglas +3143745 WB2UFO Lawrence +3143746 AA8WI Bernard +3143747 AF5MN John +3143748 KC3KNI Howard +3143749 WA5TWT Michael +3143750 KF6RQZ Kevin +3143751 KI5EQZ Denton +3143752 KJ6PTX Richard +3143753 KJ7GDR Robert +3143754 N4VBS Carol +3143755 KN4ULB Michael +3143756 WA2WAP David +3143757 KI5EQZ Denton +3143758 KD2ALV Daniel +3143759 KD6OMV Norman +3143760 N2MMX J +3143761 N3TCG Thomas +3143762 KE8LDJ Stephen +3143763 KN4FBJ Daniel +3143764 KB7URX Douglas +3143765 AG5IJ Thomas +3143766 KG5P Richard +3143767 KN4BKX David +3143768 KG6EGD Patti +3143769 W7IEW Jerry +3143770 W6EZY Farrell +3143771 KB7URX Douglas +3143772 KI7JCY Timothy +3143773 KM6PCL Raul +3143774 KN4RDE Gregory +3143775 NK4Y Mark +3143776 W4PRT Peter +3143777 WA5LEO Leo +3143778 KB7YSW Justin +3143779 KI5DRV Gary +3143780 KF7ITF Verlon +3143781 KV5M Macka +3143782 KA3RVY Charles +3143783 KB7YSW Justin +3143784 KI6FPH Bryan +3143785 W1PRA Paul +3143786 KI5EMD David +3143787 K4CTD Timothy +3143788 WA1RJJ Robert +3143789 N8EI Jason +3143790 KE6YEP Marcelino +3143791 AB9QY Lee +3143792 K1NS William +3143793 KB3BYJ Michael +3143794 KC3JAK Daniel +3143795 KG5UAF Kyle +3143796 KM6UWG Michael +3143797 KT4DDS Dwight +3143798 KV4ZN Robert +3143799 N9KYZ David +3143800 W5PPD Elihu +3143801 W5WTH Patrick +3143802 WB0NSQ William +3143803 W5NEM NortheastMiss +3143804 KM6UWG Michael +3143805 KN4RXM Jarrod +3143806 KI7OOR Christopher +3143807 KI5FBP Gavin +3143808 KF5OLW Matthew +3143809 KE0VQX Cris +3143810 KD2QET Dennis +3143811 N9LBG Larry +3143812 KK5AB Larry +3143813 KC3NNK Brent +3143814 KJ7CWQ Roy +3143815 KE8MOM Shirley +3143816 KE5GXX Curtis +3143817 AC2GC William +3143818 AG5SK William +3143819 AG5UT Daniel +3143820 W6HP William +3143821 KC3KTZ Flonisha +3143822 KC3LYK John +3143823 KJ7EIF Corey +3143824 KN4FBI Janet +3143825 K0KHS Kim +3143829 KF0R T-ARC +3143830 KJ4EBE +3143831 W5XJ Grant +3143832 W7EJA Eric +3143833 W8MCG Kerrie +3143834 W1MBF Mark +3143835 KN4UYX Luke +3143836 KB3NRA Timothy +3143837 KG5KBK Michael +3143840 WB5TLT Samuel +3143841 KG5SCC Steven +3143842 K7DEG Douglas +3143843 KI5FCM James +3143844 KN4URH Adam +3143845 KL7HIM Michael +3143846 W3LAS Larry +3143847 WA7ZK Mark +3143848 KN4UYS Alex +3143849 KE7EJM Dennis +3143850 KN4UVZ Joseph +3143851 KX4NMC Noah +3143852 N1PFC Kurt +3143853 WB6REC Tamara +3143854 N4ELM William +3143855 K7PLK Pat +3143856 KI5EON Christopher +3143857 KD5JOY Henry +3143858 KE0VXY Jeffrey +3143859 KG7QEQ David +3143860 AG7WI Edmond +3143861 W6AUS Joseph +3143862 KC2PVM Tina +3143863 KW4KZ Charles +3143864 KN6BXA Jonathan +3143865 W8ED Edward +3143866 AD5DO Kenneth +3143867 K8NEZ Timothy +3143868 KB7PI Lyle +3143869 KC3HGV Kimberly +3143870 KD2QYK Patricia +3143871 KD5RKO Andrew +3143872 KE4TON Keaton +3143873 KF7ZTM Thomas +3143874 KG7GTC Robert +3143875 KN4TSE David +3143876 KN4UZF Nick +3143877 KG5ZTN William +3143878 N6JCB John +3143879 NC4KG Glenn +3143880 NP4RX Ricardo +3143881 W2GPJ George +3143882 KE4TON Keaton +3143883 KG7GTC Robert +3143884 K7KSN Brien +3143885 WB9TLH Dwight +3143886 K6AMD Anthony +3143887 N2NGP Federico +3143888 KB3SDE Carmelo +3143889 KC2VMP Robert +3143890 W9CWC Baraa +3143891 KE0TFY Brent +3143892 KE8BDI Jeremy +3143893 KI7ZSF Gatewood +3143894 N4RUM Charles +3143895 N5FPJ Donald +3143896 KJ7DTG Josh +3143897 KJ7DTG Josh +3143898 AD5DO Kenneth +3143899 KE8MLC Joseph +3143900 KM6KSM Bruce +3143901 KK4WNV Walter +3143902 KJ7HCU Joe +3143903 N4PRQ Richard +3143904 KC3NPO Rebecca +3143905 KO5RP Robert +3143906 KC0NPA Richard +3143907 K3KLC Samuel +3143908 KB5HPN John +3143909 KJ4GYJ Philip +3143910 N4VPM Howard +3143911 WA0RIM Bruce +3143912 WA4GVT David +3143913 W1MBF Mark +3143914 K7GDM George +3143915 N2UEM Mark +3143916 W1MCB Michael +3143917 KB2TXR Jack +3143918 K7JJM Jeffrey +3143919 WB2MOH Kenneth +3143920 WP3MH Milton +3143921 KN4UMM Adrian +3143922 KD2NFE Jordan +3143923 KG5ZID Hardy +3143924 KI0SX Stephen +3143925 W1ECR Robert +3143926 WP3MH Milton +3143927 N3IDM Matthew +3143928 KN4UZZ Rene +3143929 KK4CT Christopher +3143930 KI6LAV Georgia +3143931 KE4QEA Larry +3143932 W4VIA Robert +3143933 N8EMO Gary +3143934 N5IKH Dan +3143935 KN4UYS Alex +3143936 WB2JCC Matty +3143937 KB5DWX Ronnie +3143938 K4GHB Gary +3143939 KG6TR todd +3143940 W8LU Lucas +3143941 K5HWK William +3143942 N4JJP Jeffery +3143943 KG4FBR James +3143944 WN2Q Michael +3143945 WN2Q Michael +3143946 KC2KZK Lucas +3143947 KN4LGU John +3143948 KN4LGU John +3143949 W8GMF Garry +3143950 AA1MA Austin +3143951 K6AZZ Ted +3143952 K7ART Arthur +3143953 KE8MFJ Bruce +3143954 WX6D Mark +3143955 K5QS David +3143956 K4GUF James +3143957 K7MAL Kenneth +3143958 KA1YTL Joel +3143959 KB4BI Hans +3143960 KC2SDJ William +3143961 KI5FEN Terrill +3143962 KM4WGQ Charles +3143963 KN4G Jonathan +3143964 N3OMO Elayne +3143965 NM8O Jimmie +3143966 W0JCM John +3143967 W2GVR Galen +3143968 W4AS Sebastian +3143969 NT4D Mac +3143970 WA1RHS Roland +3143971 WP4KK Jose +3143972 W5DCB Dave +3143973 KG5ZSF Bradley +3143974 W5DCB Dave +3143975 WP4KK Jose +3143976 N9HLU John +3143977 K7MAL Kenneth +3143978 W4AS Sebastian +3143979 KW4TO Glenn +3143980 N5BT Helmut +3143981 N3NRG ROBERT +3143982 KN4QQF Jon +3143983 KG5ZTM Jerry +3143984 KG5ZGT Donald +3143985 KD9NJL Harley +3143986 KB9TBP Chad +3143987 W1MCB Michael +3143988 KQ1C Carlos +3143989 KJ6TCP Paul +3143990 W0ZNS Donald +3143991 W0DRG Donald +3143992 N8UAD Michael +3143993 AE5ZS Darrell +3143994 N7WQ Thomas +3143995 KI5FEM Austin +3143996 KG5QH Steven +3143997 KE5EGP Glenn +3143998 K0BTK Bryan +3143999 N7UNO Alan +3144000 NJ0R Hector 3144001 KB1ISZ William 3144002 KB1ISZ William 3144003 KC2FMI Joseph @@ -89055,6 +113291,7 @@ 3144021 N1RHH Octavio 3144022 KA1MXL Kevin 3144023 K3CAB Carol +3144024 KN4OIP Leonardo 3144025 W1WJB Wally 3144026 N1GMB Glenn 3144027 W1CFE David @@ -89067,7 +113304,7 @@ 3144034 N1CKT Charles 3144035 N1MGC Matthew 3144036 KC1GOW Patrick -3144037 KA1BB Bradley +3144037 N1BSB Bradley 3144038 N1EGS John 3144039 N1YNI Alfred 3144040 K1WYC Robert @@ -89122,12 +113359,911 @@ 3144089 W1RAC Robert 3144090 W1MCX Marc 3144091 W1MCX Marc +3144092 KE8KEH Clay 3144093 WA1GJF Leeds 3144094 WA1VIN Martin 3144095 W0LSR Lonn 3144096 KC1HLN Patrick 3144097 KC1FAA Donald 3144098 K1JST Jeremy +3144099 KB0JXR Ricky +3144100 WA0TXJ Keith +3144101 K6QB Lisa +3144102 K3TYE Joseph +3144103 KA2CAF Neal +3144104 KM6URS Holger +3144105 KN4QWG Troy +3144106 KR4LU David +3144107 N8WVE Mark +3144108 W9GVJ Remy +3144109 N3UFG Wayne +3144110 KE0VMG Jim +3144111 N4BOS Steve +3144112 W2YM Mark +3144113 WB2WUS Donald +3144114 KE0VMG Jim +3144115 WW6RY Richard +3144116 WE7EM Ed +3144117 WD5GWY James +3144118 N1LF Lester +3144119 KN4OYJ John +3144120 KD9NGM Jerry +3144121 W2RN John +3144122 KG7MPT Jesse +3144123 NC5K Bradford +3144124 KA1WXA Steve +3144125 KA3ZQX Ricardo +3144126 KC6HBB Samuel +3144127 KC9NZW Clifford +3144128 KE0STK William +3144129 KI5FCK Matthew +3144130 KM6RKX Henry +3144131 KN4UUQ Dennis +3144132 N1ISN Peter +3144133 N6UGN Jordan +3144134 W9KD John +3144135 W9NWR Charles +3144136 WB5OSM Merlin +3144137 WD8RVK John +3144138 KA3I Kenneth +3144139 KG5WLI Jose +3144140 KP4GRC German +3144141 KC9NZW Clifford +3144142 W5BED Bryan +3144143 W2ACC David +3144144 WF3J James +3144145 N6KYD William +3144146 N5EEA Roger +3144147 KD5BIS Edward +3144148 KN4KFL Robert +3144149 KE6RYX Ron +3144150 WM4RW Michael +3144151 N3ODH Randall +3144152 AF7KC Kenneth +3144153 W5BRJ Bruce +3144154 KI5DWL Matthew +3144155 KN4USY Benjamin +3144156 KI5FCL Roger +3144157 KJ6ZUM Hyochon +3144158 N1GKE Myrton +3144159 K4BYB James +3144160 KR2C Kurt +3144161 KN4EMF Arbee +3144162 N9YTB Tom +3144163 KI5FEU James +3144164 AE7BZ Chad +3144165 KB9AB James +3144166 K2DAK David +3144167 K3EZA Max +3144168 K4LLE Peter +3144169 K4WNZ Ron +3144170 K5MRS Michele +3144171 K9GLT Michael +3144172 KB1FGC Richard +3144173 KB7TUL John +3144174 KC9STU Thomas +3144175 KE5LRM Steven +3144176 KE8LYJ Andrew +3144177 KI5AWF John +3144178 KM4UDE James +3144179 KN4EJK Rene +3144180 KN4LIT Robert +3144181 WY7W Chris +3144182 W1RVT Robert +3144183 N4GUF Scott +3144184 W8AFK Paul +3144185 KJ7FYQ David +3144186 KN4EJK Rene +3144187 KA6UGS Steven +3144188 KB1FGC Richard +3144189 KB1KVJ Sandy-Joe +3144190 W7RXZ David +3144191 KT5U Russell +3144192 KC0ALE Adam +3144193 KK6VOV Ryan +3144194 KE5JGR Brian +3144195 N3ODH Randall +3144196 WB5TX Charles +3144197 W6BLS Bruce +3144198 K6DGN Jason +3144199 N3MLM Jason +3144200 KC1BKD Michael +3144201 W1RVT Robert +3144202 KK6VOV Ryan +3144203 W8WDM William +3144204 KN4DSF Patrick +3144205 KN4DTJ Aaron +3144206 KD9NIW Daniel +3144207 KC2SDK Ahren +3144208 AF6DW Mark +3144209 KE4IHG Winfield +3144210 N1JEE Richard +3144211 N8JPB Jason +3144212 N8AJ Lynn +3144213 KD8UE Mark +3144214 KD8NVN Neal +3144215 KD6CJI Sergei +3144216 AD0DX Ron +3144217 N7ULC Floyd +3144218 KG5UGX John +3144219 KD5QHW Alan +3144220 KJ7HFX Chad +3144221 N1CHK Alex +3144222 KC3JRP Richard +3144223 KE5HTB Frederick +3144224 KN4VEO Mark +3144225 KR6ISS Kriss +3144226 N5PV Sean +3144227 WA4PSO John +3144228 KN4VEO Mark +3144229 W4CYB Gerald +3144230 WJ4O James +3144231 N7UVA Louis +3144232 KN4ODS Burton +3144233 KD2POL John +3144234 WA3PNY Jeffrey +3144235 W5SGS Sterling +3144236 W2MCJ Jack +3144237 N4IGO Ted +3144238 KN4WOW Ed +3144239 KM6NCU Craig +3144240 KC6SNN Frederick +3144241 KM4YSB David +3144242 KE5MUX Theresa +3144243 WD9HBT Scott +3144244 KN4VFG Justin +3144245 KN4VFF Wyatt +3144246 WC4JC Jose +3144248 KC2US Howard +3144249 KM6NCU Craig +3144250 N9TGX Ross +3144251 KM6RCK Jonathan +3144252 KC0TEI Keith +3144253 KC5QPP Frank +3144254 KE4FRI Jason +3144255 KM6YYI Norman +3144256 KN4VFI +3144257 KB3ISF James +3144258 K0DVH Steven +3144259 KI5CNJ Gary +3144260 N1DRB Daniel +3144261 KG5VHD Alexander +3144262 KC1LNR George +3144263 W4MX Thomas +3144264 W1EQX Carmine +3144265 KK4UVG Sterling +3144266 W2MCJ Jack +3144267 N1DRB Daniel +3144268 W6BRW James +3144269 W4SPH Shea +3144270 KM4DO Brodie +3144271 KD8NPW John +3144272 KA6MUP James +3144273 KK2U Robert +3144274 KK4ZHD Shilo +3144275 K4KGM Kevin +3144276 KP3BR Jimmy +3144277 KN4UAQ Lauren +3144278 KD9NJW Matthew +3144279 AE1EZ Rowland +3144280 K5AKM David +3144281 KN4VER Fred +3144282 KP4ALR Felix +3144283 W3LJD Jacob +3144284 KN4NUI Steve +3144285 KK4HOR Mason +3144286 KG5ZWE John +3144287 KE5HRS C +3144288 WV5O James +3144289 KD2RLC Joseph +3144290 WD4MTK Wayne +3144291 NS3L Steve +3144292 KD9MYZ Austin +3144293 K9OBX Jeffery +3144294 K9OBX Jeffery +3144295 KD2DUK Anna +3144296 KD9HWK Matthew +3144297 W5DTB Daren +3144298 W5DTB Daren +3144299 KC7RD Robert +3144300 W5BKM Bruce +3144301 K8MIK Mike +3144302 KC0EQQ Tomas +3144303 KC4IBE Gale +3144304 N3YUW Randall +3144305 N2OBH Al +3144306 KD2LNG Korban +3144307 KI7N Mark +3144308 W6DTO Dave +3144309 KG7OXL Michael +3144310 W1AXB Matthew +3144311 KK4SXA Jeffrey +3144312 KO1V Daniel +3144313 KL0R Wigi +3144314 KD2SHM mauro +3144315 W1GCF Geoffrey +3144316 KD8CGM Jacob +3144317 KG6UTR Jason +3144318 NM7B Collier +3144319 KR6G Karl +3144320 N0OXF James +3144321 W9GF David +3144322 KJ7BAU Humberto +3144323 KC1JOZ James +3144324 KD0ENX Aaron +3144325 KD8HLL David +3144326 KE0RAB Crystal +3144327 KN4TAD Jonathan +3144328 N2YDF John +3144329 W2HLW Harold +3144330 K8DTP David +3144331 KI7VKM Keith +3144332 KP4ALR Felix +3144333 N7NHP Randy +3144334 KI6OML Costin +3144335 W2HCB John +3144336 K6TTK James +3144337 N4KDW Dale +3144338 KT0W Nicholas +3144339 KD8BTU Richard +3144340 K7ES David +3144341 K4HQ Kenneth +3144342 KC8PLY James +3144343 N3SB Stephen +3144344 KE0NOF Owen +3144345 KD8BTU Richard +3144346 N9IIF John +3144347 KD2RLU Kenneth +3144348 KD2RLU Kenneth +3144349 K4VXD William +3144350 KA7VEE Ralph +3144351 KG6AHV Jess +3144352 KG6AHV Jess +3144353 KD0THY Rachel +3144354 WB8RWV Lynn +3144355 KE0VUG John +3144356 KD8EPR Kenneth +3144357 N5NOB William +3144358 KA7VEE Ralph +3144359 KE0VDF Jennifer +3144360 WD8CRQ Armin +3144361 W6KCV Kelvin +3144362 W5FCX Ricky +3144363 N5HAX Addam +3144364 WA6AAI Stanley +3144365 KN6CTF Stephen +3144366 N8TUF Robert +3144367 W6PIX Sean +3144368 AH6MG Aimee +3144369 K6UB Raoul +3144370 WB7WGB Charles +3144371 KM4FJM John +3144372 KO6CG Glenn +3144373 KJ7HCQ Michael +3144374 K4DWN Josh +3144375 KM6FDI Walaa +3144376 N6DVC Diane +3144377 N6DVC Diane +3144378 KE5YZP Miranda +3144379 W6FTR Florin +3144380 KD2HTI Wyatt +3144381 KE0WBB John +3144382 KE0WBE Mohammed +3144383 KG5LYE Matthew +3144384 KE0WBC Mark +3144385 KB1DOO Vincent +3144386 KM6RKQ Lloyd +3144387 KM6UTN Daniel +3144388 KN6CSG Erich +3144389 KG5UTA Fei +3144390 N3WHQ Wayne +3144391 KC1LPP Timothy +3144392 N1WOF Shawn +3144393 W0OS James +3144394 N7BUP Philip +3144395 KG0BP Christopher +3144396 KC5JMJ Joshua +3144397 N1HTO HamTestOnline +3144398 KF8WU Keith +3144399 AC3EQ Michael +3144400 KE0TYG Mike +3144401 K6ZCO Albert +3144402 K3NOP Charles +3144403 KE0UNV Thomas +3144404 KK6WHE Robert +3144405 W9LBC Morgan +3144406 W9BOI David +3144407 W7JPF JP +3144408 WB5KGL Jerry +3144409 KM4KMS Sean +3144410 KN4UQM Thomas +3144411 KM4BRQ Thomas +3144412 WA2EXZ Robert +3144413 WA2EXZ Robert +3144414 KA0ZTL Albin +3144415 KG5NKD Kenny +3144416 K5EDJ Edward +3144417 NP2RF Kenneth +3144418 KC6IIH Jock +3144419 KM4BFU Joe +3144420 KK4LHD Christopher +3144421 KD9NDV Derek +3144422 KN4RVO Daniel +3144423 KG7DYO Liam +3144424 N9QKT Arlen +3144425 KJ7FOI Brian +3144426 KD8YFV Dwight +3144427 K8DOB Dale +3144428 W4JPG Jeffrey +3144429 KD9NDV Derek +3144430 K9JEM J +3144431 AC3EQ Michael +3144432 KN4MCA Mark +3144433 N9GN Gustavo +3144434 AD1MO Robert +3144435 AD8DU Michael +3144436 KB8JTJ Troy +3144437 KI7DRS Colleen +3144438 KD0CNC Richard +3144439 KG6TLA John +3144440 KN4UZG Todd +3144441 KM6GZW Jean +3144442 N2FEG Eric +3144443 KF7GAF Erik +3144444 W1HBO Howard +3144445 KC0ILK James +3144446 N3FTW Thomas +3144447 KI6TNN Robert +3144448 KM6KNU Stanley +3144449 K1JHS John +3144450 WB4FOH Michael +3144451 KE4TSP Curtis +3144452 N4MRN Steven +3144453 N0JIW Ralph +3144454 W4ARF Richard +3144455 N5AZQ Mark +3144456 KC9IEM Peter +3144457 W1AFM James +3144458 KE0DVW Stephen +3144459 KI5CWR Sam +3144460 KB1ISI Peter +3144461 W1AFM James +3144462 N4LUO Andrea +3144463 KN4FOH Luceal +3144464 KE8JSQ Chris +3144465 N4DOA Brian +3144466 KE5SEB Cameron +3144467 KN4SWS John +3144468 W5FJG Joseph +3144469 W6ZOD Christopher +3144470 K0DEG Donald +3144471 N2ESP Robert +3144472 KD9NKP Jeff +3144473 KC1LPX John +3144474 WB4FOH Michael +3144475 KE0UWX Christopher +3144476 K6QAZ Steven +3144477 N5TE James +3144478 KD4C Chip +3144479 N5TE James +3144480 KD9NKP Jeff +3144481 KD2JH Clark +3144482 KE8MLT Kevin +3144483 KJ7GYR Jack +3144484 KN4UXF Joshua +3144485 KQ4G Jeffrey +3144486 WA4QKV James +3144487 W5LOK Larry +3144488 N5ZRE Richard +3144489 K1PMP Paul +3144490 KE4JMJ Brian +3144491 KB1HKO Laurence +3144492 KM4VPG Douglas +3144493 KQ4G Jeffrey +3144494 KB1HKO Laurence +3144495 KC0ILK James +3144496 KM6LCJ Stephen +3144497 KJ4KVC Charles +3144498 KD9KVL Andrew +3144499 K7HTZ Mark +3144500 KD9KVL Andrew +3144501 KN4EMF Arbee +3144502 KG5ZIN Robert +3144503 KN4VED Jay +3144504 KG5ZIN Robert +3144505 KM6NMR Peter +3144506 KN6CBI Robert +3144507 K5JMM Joseph +3144508 KL1V Kevin +3144509 KM6EDE Stephen +3144510 K1SJC Steve +3144511 W1LQA George +3144512 KL7TC William +3144513 KA4BKA Mark +3144514 KD6UOI Todd +3144515 KK4CNV David +3144516 N1DXR Anthony +3144517 K6RCW Thomas +3144518 K3PNI Sheldon +3144519 K1SMP Steven +3144520 K6RGR Robert +3144521 N5XRQ James +3144522 AF4JR Robert +3144523 KB7VMS Ray +3144524 AF6RT Scott +3144525 KC6OHL Robert +3144526 KM6EDE Stephen +3144527 KC0GCJ Jason +3144528 NB6X John +3144529 K6RGR Robert +3144530 KD9MKI Adrian +3144531 KE0RTN John +3144532 AB1DR Robert +3144533 KE0WDO Clark +3144534 AD7AB Stephen +3144535 W8TQZ William +3144536 AB3NE Allen +3144537 KB3CTF David +3144538 K4JTM John +3144539 N3UFG Wayne +3144540 W8EOL William +3144541 W8EOL William +3144542 W7JBL James +3144543 N6JJ Tamir +3144544 N1KVS Joel +3144545 KE5RMU James +3144546 KD0MSP Anthony +3144547 KC9WQZ Robin +3144548 WA2UEH Robert +3144549 KC0FAC Jacey +3144550 W6MCS Mark +3144551 W1SMM Sean +3144552 N6NET Jason +3144553 N5SQK William +3144554 N3BR John +3144555 KX3F Dirk +3144556 KE8FZY William +3144557 KE9DQ Jeffrey +3144558 W6ZFX Cesar +3144559 KK6WBF Brian +3144560 KJ7HJX Darryl +3144562 N0OT John +3144563 KD0BRJ Thomas +3144564 W6JLP Jason +3144565 KA3JUJ Mark +3144566 N9MNM Austin +3144567 KC3MZX Evan +3144568 N3WCH Warren +3144569 KB4WDH Gregory +3144570 KW5AT KIRK +3144571 N1DVK Matthew +3144572 KL4WF Daniel +3144573 WC6DG Rogers +3144574 W1BRG Tim +3144575 W4CCZ Kenneth +3144576 W4CCZ Kenneth +3144577 K0MTA Todd +3144578 KA0TPG Mark +3144579 KB2NUI David +3144580 KF5ESV Jonathan +3144581 KM6OYY Charles +3144582 N5EKF Elmer +3144583 KM6IUK Charles +3144584 KM6IUK Charles +3144585 W4DEZ Wade +3144586 KN4LXL Brian +3144587 KN4LXL Brian +3144588 K7YHB George +3144589 NT8V Roy +3144590 KI5CER Russell +3144591 N6ZTE Harold +3144592 N8DGN Ariel +3144593 N8DXX Christopher +3144594 KF7BHQ Terrell +3144595 KI5FFS Javier +3144596 KF7BHQ Terrell +3144597 N4GOZ David +3144598 KD9HUI Kevin +3144599 K6GL Glenn +3144600 K8HC Jere +3144601 WB4BB David +3144602 W1LQA George +3144603 KJ4NLD Sean +3144604 K4AWL Arthur +3144605 KC3CFA Joseph +3144606 WB4BB David +3144607 KI7YCE Stephen +3144608 KM5VC Gregory +3144609 KF5VVB Marvin +3144610 KC0LAC Michelle +3144611 K3BAK Brian +3144612 KG7QXK Robert +3144613 KR0SIV Harold +3144614 W6BSD Fred +3144615 WA2PAY David +3144616 KA0TPG Mark +3144617 W8FSM Fred +3144618 W8FSM Fred +3144619 AI4M Winburn +3144620 KD2EAN Justin +3144621 KE4GNB John +3144622 KF5FIL Gregory +3144623 KI7GZI Benjamin +3144624 N8FNR Zachary +3144625 KE0DRF Thomas +3144626 KG7QXK Robert +3144627 W2UCJ William +3144628 KJ7HNG Marion +3144629 KN4VED Jay +3144630 KN4OVQ Joseph +3144631 KD7TWW Vincent +3144632 AE0GX Curtis +3144633 N5AAP Tony +3144634 W6DGR Dante +3144635 WL7LN Carl +3144636 KD7TWW Vincent +3144637 KN4JWZ Barry +3144638 KG6IMR Brian +3144639 KM9K KEVIN +3144640 W9STO Paul +3144641 KG4OZB Oris +3144642 N5IUD Johnny +3144643 KN4VCD Tony +3144644 KE5WPI Leland +3144645 K6ICK David +3144646 KD0KFR Von +3144647 KD9DIF Martin +3144648 KE0WDI Mark +3144649 KM6NHN Jesse +3144650 KZ8MAX Max +3144651 N1RDH Elizabeth +3144652 N2WZN Kit +3144653 KD2AOY Christopher +3144654 KE0WDB Norm +3144655 KB1YNO Henry +3144656 KB1YNO Henry +3144657 KQ6T David +3144658 KJ4ECP Michael +3144659 AD8CV Michael +3144660 KN9E Daniel +3144661 KC7KGT Chris +3144662 KD0VWA Alex +3144663 KC3NSE Austin +3144664 WH6GAJ Ernest +3144665 W5MUE Nicholas +3144666 W4GNA Lindsay +3144667 KC0IJY Jeremiah +3144668 K4PU Dennis +3144669 AG8R Brandon +3144670 KJ4COQ Lina +3144671 KJ4DSM Richard +3144672 AG8R Brandon +3144673 K7JRT James +3144674 KB1OOR Craig +3144675 KD5PTS Dominic +3144676 KF2GG Richard +3144677 KG5YNJ Stephanie +3144678 KI5CMN John +3144679 K6ICK David +3144680 KF2GG Richard +3144681 WD4HDL Carl +3144682 W2DQM Michael +3144683 KB1OOR Craig +3144684 KM4ARR Ronaldus +3144685 KD2SCZ Volney +3144686 KB4ABE Michael +3144687 W2DQM Michael +3144688 KD5PTS Dominic +3144689 KN6BNW Emerson +3144690 AC9VL Jason +3144691 K7CBD John +3144692 KD2ECT Joseph +3144693 KI4LVC Michael +3144694 KN6CQR Mark +3144695 W6OLI Oliver +3144696 WD8KGH William +3144697 WB7AWL Albert +3144698 W6OLI Oliver +3144699 W4TSX Robert +3144700 W4GLX John +3144701 WA8HUB James +3144702 WS6Y William +3144703 WS6Y William +3144704 WD5GRW Jim +3144705 K4HMM Hunter +3144706 KC1LPT Michael +3144707 KE5GWU Clayton +3144708 KN6CFW Toby +3144709 KB0TTL Sebastian +3144710 N2OUP Jon +3144711 KE8LGO Brian +3144712 W4DG Dennis +3144713 KI5ATN Victor +3144714 N7RHV Richard +3144715 KI5DHW Charles +3144716 KM4HRU Cecil +3144717 W8GWI David +3144718 N3WZO Peter +3144719 N0IIO Richard +3144720 KK6MVT Albert +3144721 KM4WOG Jeremiah +3144722 N7LB Craig +3144723 WX7EM Gordon +3144724 K5JEI Jerry +3144725 KC9WPR Nicholas +3144726 AK4SQ Daniel +3144727 K5LGV Terry +3144728 KC9WPR Nicholas +3144729 KM6OYV Stephen +3144730 KM6OYV Stephen +3144731 KN4SBC Violet +3144732 KB9JLG Scott +3144733 KN6ANQ Benjamin +3144734 KC3KTO Jeffrey +3144735 KM4PMP Scott +3144736 N9ABC Steven +3144737 KD7LRJ Doug +3144738 KC1LAG Aleksey +3144739 KC1LAG Aleksey +3144740 W8KRZ Richard +3144741 KD4JFD Bruce +3144742 WA3LXD David +3144743 KI5DVG Steven +3144744 KA4BRC Billy +3144745 KN4VIX Jason +3144746 K7ROE Alfred +3144747 KM4PMP Scott +3144748 KG5TQL James +3144749 K3QX Edward +3144750 KR4V Richard +3144751 KD2GDT Patrick +3144752 KG4SLK Tom +3144753 WD4FMQ Jimmie +3144754 KJ7GON Michael +3144755 K6BLT Alfio +3144756 W3YNE Wayne +3144757 KN4VMC Charles +3144758 K6RHF Rachel +3144759 KG4OJB Daniel +3144760 KI4RO John +3144761 KE0VUR Shawn +3144762 KD8TSN Brian +3144763 KE0VGE Carlos +3144764 KC3NSH Jordan +3144765 KJ6EWH Richard +3144766 K7SWT William +3144767 KE0TTD Edward +3144768 W2RRZ Ross +3144769 KE0TTD Edward +3144770 KE0VUR Shawn +3144771 KI5FKE Cedric +3144772 KD8GCZ Matthew +3144773 KD8GCZ Matthew +3144774 N5QDH Cowan +3144775 KI5FKB Joseph +3144776 AC3DX William +3144777 K7SGI Mark +3144778 K7SGI Mark +3144779 W6CAP John +3144780 KE8ILF James +3144781 W5KYZ Kenneth +3144782 N0BJE Brian +3144783 KD2SIJ Jeffrey +3144784 W0JBM James +3144785 KJ7GGJ Raymond +3144786 K3BAZ Bernard +3144787 KD8DGB Janese +3144788 KD8DGA Richard +3144789 KJ7FYC James +3144790 AK4G +3144791 KM4QQO Jonathon +3144792 KB7SAT Richard +3144793 KN4LJJ John +3144794 KB0JMP Nicholas +3144795 W5KCC Jeff +3144796 KE0WEN David +3144797 WB0SRP Doyle +3144798 W4LQA Lynn +3144799 KF5IMA George +3144800 KD9MZF David +3144801 KD9BZK Edward +3144802 KN4FYR Dan +3144803 WA2NYC Club +3144804 W7PED William +3144805 N0GRL Norman +3144806 KN6CQW Daniel +3144807 KK6QXA Michael +3144808 KE8KWS Noah +3144809 WM1C Michelle +3144810 KM6DEY Harold +3144811 KN6CXC Filipe +3144812 KM6AVT Melissa +3144813 W3SAX Douglas +3144814 KB7PI Lyle +3144815 KC2KZK Lucas +3144816 KE0RGC +3144817 KE0RGB Michael +3144818 KI5BUZ Paul +3144819 KK4HLU Alan +3144820 KD7ZKB Christopher +3144821 N0BEN Benjamin +3144822 N0HIT Paul +3144823 W6VOM Alameda +3144824 N7BAR Raul +3144825 N0BEN Benjamin +3144826 KI4CUP Robert +3144827 K7WHH Bill +3144828 KN6CUM Dang +3144829 N7EBG Andrew +3144830 NQ1C Robert +3144831 W0ARC Mark +3144832 KI7ZSX Malcolm +3144834 N4ETN Stacy +3144835 KD2NXD Robert +3144836 K0ATA Nathan +3144837 N3FHI Robert +3144838 N9MRQ Frederick +3144839 N5KVR Danny +3144840 KI5BQV Brett +3144841 KE7SWI Brandon +3144842 KF7LTS Tim +3144843 N1RCC Randy +3144844 KJ7GLB Jason +3144845 K4KKP James +3144846 KY2MMM Kymm +3144847 AD8CV Michael +3144848 K2WH William +3144849 KI4PYB Robert +3144850 NQ1C Robert +3144851 K6JSP John +3144852 W8TGB +3144853 N7SNW Champe +3144854 KB0AZJ Farren +3144855 KM6YYI Norman +3144856 N5ALH Al +3144857 KN4GBN Chad +3144858 KE0KII Charles +3144859 K8ZW Vincent +3144860 KA5WAX Casey +3144861 KC6ACT Greg +3144862 KD9MKR W +3144863 KE4VKS Cutler +3144864 N3ALJ Joseph +3144865 N3NTN David +3144866 KG7DYO Liam +3144867 K5JEH Jon +3144868 KC2CMO Danford +3144869 KD9FLZ Matthew +3144870 KD9IGL Logan +3144871 KI5CYM Raymond +3144872 KM6TVG Orlando +3144873 N5GAH George +3144874 KC2CMO Danford +3144875 NM7W Nicholas +3144876 W4CPU Paul +3144877 KB2JIM James +3144878 K4CI Richard +3144879 KN4PHS Byron +3144880 KN4FNE Jesse +3144881 KM6TWH Mark +3144882 KD0YCN Benjamin +3144883 KI4IQZ Martin +3144884 KC6SIT Philip +3144885 AA2C Paul +3144886 KC8DFD Roy +3144887 KD0ZYM Daniel +3144888 K7SRS Scott +3144889 KB0BZ n0bve +3144890 WC4EE Lonnie +3144891 KD2PZB Pat +3144892 KC9ULB Jeffery +3144893 AA5DK Gerald +3144894 AG7TX David +3144895 KD0TUN David +3144896 KE0WBM Andrew +3144897 K5TUX John +3144898 KN6BWZ Elsa +3144899 KD0SAQ Steve +3144900 WA4TPR Raul +3144901 AJ4LN Eric +3144902 AC9VI Anatoly +3144903 N8JJO John +3144904 KE8CBW Joseph +3144905 KC1LQM Brendan +3144906 AA5DK Gerald +3144907 KD8OCW Jim +3144908 KD9NLH Michael +3144909 W0NQ Kevin +3144910 W5EMK Erick +3144911 KN4UYM Louis +3144912 KC1BRV Lee +3144913 K7EMI Hisashi +3144914 AC2MX Ishan +3144915 KC5LJD James +3144916 WB5OOL John +3144917 KD0WWT David +3144918 N8JJO John +3144919 KB2SKP Christopher +3144920 WA7DRE Glen +3144921 K8ZAG Leon +3144922 K8ZAG Leon +3144923 K5CWO Michael +3144924 K9UUM Robert +3144925 KA3KZA Walter +3144926 K6CYB +3144927 N4UMM Stuart +3144928 N9NTM Martin +3144929 N9SNX Andrew +3144930 W9MCU Steven +3144931 WB8HHP Timothy +3144932 KC1JWE Kevin +3144933 N2ODQ Douglas +3144934 KE5ZZO David +3144935 KC3BJE John +3144936 W0FW Shawn +3144937 K0BVM Stephen +3144938 KF7ONV John +3144939 WP4RCL Eduardo +3144940 KA1ANW Sydney +3144941 WP4RCL Eduardo +3144942 KN4VDK Duey +3144943 KN4VDK Duey +3144944 KD5UJN James +3144945 KB0OPT Dayl +3144946 K2HZO Paul +3144948 KD5CNI Alan +3144949 K2HZO Paul +3144950 KM4MTT Keith +3144951 WF5N Benjamin +3144952 KE8EMK Eric +3144953 KI5DNY Charlyn +3144954 KD9JLZ Chester +3144955 N1QKD Timothy +3144956 KM6CBG Brent +3144957 WA8WKF Stephen +3144958 W7USN John +3144959 N7BKI Richard +3144960 KB1JPL Joseph +3144961 KC3GG Gary +3144962 KC3GG Gary +3144963 W7MBP Mark +3144964 KB7CLC Cecil +3144965 KB2QJH William +3144966 KA4GAV William +3144967 KH7UT Ronald +3144968 KE7IET Jason +3144969 KC9YVR Daryl +3144970 KC1KPQ Daniel +3144971 KE4BCN Ross +3144972 KE7IHC Jason +3144973 N3ZFO Mark +3144974 KJ4SMD Stephen +3144975 N9GCH Charles +3144976 N5EAN Sean +3144977 W7EMP Jennifer +3144978 KI5FKD Nikki +3144979 KF6OAA Jeffrey +3144980 AB7II James +3144981 KJ7JAB Jeffery +3144982 KX4I David +3144983 N8XUA Jack +3144984 KG5LAA Steven +3144985 K6ROY David +3144986 KU8L Curtis +3144987 KK6J Michael +3144988 KE0JSB Hiromi +3144989 KM4GXF Jerry +3144990 W6JAD James +3144991 KG7NVF John +3144992 KG7NVF John +3144993 WR4CV Central +3144994 KB1ZHH Jordan +3144995 W4HKM Heather +3144996 WA3GPP Richard +3144997 K3CSF Castle +3144998 KN4VLD Daniel +3144999 KK4ZUH John +3145000 KI7YWQ Evan 3145001 KN4SWB Eoc 3145002 KN4SWB Eoc 3145003 N4LRD Richard @@ -89139,7 +114275,6 @@ 3145009 KD4EOD Rock 3145010 KD4EOD Rock 3145011 WD4PLY Timothy -3145012 W9HPX Roland 3145013 N4ATX Darren 3145014 N2ZZ James 3145015 K4NJN Bob @@ -89216,6 +114351,7 @@ 3145086 W2VOL Jeffery 3145087 KM4CGF Robert 3145088 W4MSF Michael +3145089 N8JPH Jim 3145090 K4HI Clark 3145091 KK4TFH Michael 3145092 W4RDB Raymond @@ -89280,7 +114416,7 @@ 3145151 AK2H Andrew 3145152 WZ4O Hap 3145153 KK4FU Michael -3145154 KK4UMB Christopher +3145154 N5CAE Christopher 3145155 N4UFP Marc 3145156 W1WMS William 3145157 KK4F George @@ -89292,15 +114428,16 @@ 3145163 N4MSG Michael 3145164 KK4KJA Thomas 3145165 W4OSS Kim -3145166 WX4PDE +3145166 K4DEC 3145167 W4HKZ Kenneth 3145168 KK4EVI Warren 3145169 KF4JOD Robert 3145170 K4LTF Joseph +3145171 W9ABS Jesse 3145172 KO4MZ Eric 3145173 K4UFT Ted 3145174 WR4XM Herman -3145175 KE4TLC Dion +3145175 KE4TLC Paul 3145176 K4IHD Don 3145177 W1MRC Matthew 3145178 KB4ERT Bert @@ -89418,8 +114555,8 @@ 3145290 NV4I Joe 3145291 KM4DRN Darrel 3145292 N4SMH Joshua -3145293 KD4TXX John -3145294 KD4TXX John +3145293 K4IUG Archie +3145294 K4IUG Archie 3145295 W4LGR Larry 3145296 KB3IOZ Jim 3145297 KM4MPO Grayson @@ -89430,6 +114567,7 @@ 3145302 KI4KKB Chistopher 3145303 AD4RL Berry 3145304 KF4QXQ Walter +3145305 KI7VXV Michael 3145306 N2OBS Keith 3145307 K4BSC Brent 3145308 KF4ECK Edward @@ -89616,6 +114754,7 @@ 3145489 N9GSX Michael 3145490 WB4TZF Jane 3145491 W3PAL Andrei +3145492 KC4UCB Ralph 3145493 KM4QDC James 3145494 KN4QD Todd 3145495 W4KR Stanley @@ -89632,8 +114771,8 @@ 3145506 W4BFT Brag 3145507 K4TTR Peter 3145508 W4GTE David -3145509 W1SAE Stelio -3145510 W1SAE Stelio +3145509 W1SAE Alexander +3145510 W1SAE Alexander 3145511 NN4II Ernest 3145512 W4STR Willard 3145513 KM4IOK Stjohn @@ -89729,7 +114868,7 @@ 3145603 WA4TKM William 3145604 KM4JWP Brian 3145605 KM4JWP Brian -3145606 N4BQQ Michael +3145606 N4BQQ Mike 3145607 W4EGM Earl 3145608 N4SSC Edward 3145609 KM4WOX Andrew @@ -89823,7 +114962,7 @@ 3145697 KX4HP Stephen 3145698 K4RDL Ronald 3145699 W4LJS Lawrence -3145700 KM4VWL Michel +3145700 K4AFT Michel 3145701 W4LXG Dennis 3145702 WB5NHL David 3145703 KK4VWX Thomas @@ -89868,12 +115007,13 @@ 3145742 K4WCN Wayne 3145743 K4WCN Wayne 3145744 KM4MIF Matthew +3145745 KE6RKD Eric 3145746 KG4GKY Duwayne 3145747 AE4VJ Brad 3145748 KN4DTI Christopher 3145749 K4FPP Richard 3145750 KG4FQF Richard -3145751 N4KOP William +3145751 N4AHQ William 3145752 K2SLI Carl 3145753 W8DKR Joseph 3145754 KM4IDY Bryan @@ -89885,10 +115025,14 @@ 3145760 KN4CWB John 3145761 KK4WEE Liudmila 3145762 KM4YFU Peter +3145763 W9GLB Gary 3145764 AF4HL Oscar +3145765 KM6ZXG Kelly 3145766 K8JMA J +3145767 KE7SWI Brandon 3145768 NQ3P William 3145769 K4ZEV Monroe +3145770 AA3WB Walt 3145771 W1OJ John 3145772 KM4MPY German 3145773 KI4LXH Brian @@ -89910,6 +115054,7 @@ 3145789 KN4FHD Petr 3145790 N4WAC Matthew 3145791 WB4LJD Johnnie +3145792 K6VJ Richard 3145793 K4UXF Jesse 3145794 N4EHT Elaine 3145795 KJ4DIA Michal @@ -89921,6 +115066,7 @@ 3145801 KN4FNB David 3145802 KI4ZJI Randy 3145803 KM4YYF Richard +3145804 WI6H Peter 3145805 KG4AQG Michael 3145806 KI4KRW Bobbi 3145807 W4EHS Nathan @@ -89930,6 +115076,7 @@ 3145811 K3JF Jeffrey 3145812 KI4THP Chad 3145813 KI4ZJI Randy +3145814 AC2XI Dennis 3145815 WB4TC Todd 3145816 KM4WWE Tonya 3145817 N2MWH Michael @@ -89947,7 +115094,7 @@ 3145829 W4LVH William 3145830 KF4CEI Matthew 3145831 KF4JML Belinda -3145832 KN4FXI James +3145832 KD4DRJ James 3145833 K4FPP Richard 3145834 KI4YVJ Alan 3145835 N2WA Walter @@ -89956,6 +115103,7 @@ 3145838 WD8P Raymond 3145839 W4TWN Twin 3145840 KN4EIW Wally +3145841 W6WRD Karyn 3145842 KZ4O Terrence 3145843 KZ4O Terrence 3145844 KI4YVJ Alan @@ -90023,9 +115171,12 @@ 3145906 K6TAZ Steve 3145907 N8QEB Laurie 3145908 KK4AIF Michael +3145909 KC2ZVK James 3145910 N0IAN Ian +3145911 N3CCP Jeffrey 3145912 KB3PU James 3145913 W4ANG Scott +3145915 N6RAB Richard 3145916 KN4ILZ WJBD 3145917 KN4ILZ WJBD 3145918 KN4ILZ WJBD @@ -90037,7 +115188,7 @@ 3145924 KN4JTR Paul 3145925 N4HJA Noah 3145926 N4BAK George -3145927 KN4KBY Daniel +3145927 WD2DW Daniel 3145928 N4CRX Robert 3145929 KN4BIG Robert 3145930 AC4ML Michael @@ -90045,6 +115196,7 @@ 3145932 KN4BUW Jonathan 3145933 K4TGK Timothy 3145934 K4TGK Timothy +3145935 KC0KJG Mark 3145936 KJ4CMN James 3145937 WA1HJS Mel 3145938 K4RRT Ronald @@ -90061,6 +115213,7 @@ 3145949 W4DAX Thomas 3145950 AE4ZR David 3145951 W4EEY Gary +3145952 KG7FYZ Harley 3145953 KF4GGN Brian 3145954 KN4JEY Erik 3145955 W4BSS Brandon @@ -90079,7 +115232,36 @@ 3145968 N4JCM Chris 3145969 W4ANT Alan 3145970 N4VGE Van +3145971 K0OLD Brian 3145972 W1GUN David +3145973 NM8Q Franklin +3145974 N0BKI Richard +3145975 KF7ZA Stuart +3145976 K1RPN Michael +3145977 W4BVB Bradley +3145978 KG6YYT Jaime +3145979 N8UFV Paul +3145980 KC4LGM James +3145981 KD8YWF James +3145982 KJ4ZMO Brice +3145983 KY6V Gordon +3145984 KA2UTO Rick +3145985 AE0GQ Tom +3145986 KG7VUK Eugene +3145987 K6ZGN Richard +3145988 NA6US Dwayne +3145989 KM6EYV Paulo +3145990 NW7Z Cheryl +3145991 NW7Z Cheryl +3145992 KC4LGM James +3145993 KD0PWD Benjamin +3145994 KF4ESG Giovanni +3145995 KI5EVA Crystal +3145996 KJ7FRV Curtis +3145997 KN4PLG Dale +3145998 KN6CZW Luke +3145999 W0AEF Dan +3146000 W8DAY Roger 3146001 KG6JLB Thomas 3146002 AD0BN Aaron 3146003 KD0QYR Dustin @@ -90101,14 +115283,15 @@ 3146019 WB0HHM Raymond 3146020 WD0EXR Jeffrey 3146021 KE0LNB Gary -3146022 KD4KLD Michael +3146022 K0MDW Michael 3146023 WV8CW Charles 3146024 WV8CW Charles 3146025 KE0OFU Dean -3146026 W7LZN Bradley +3146026 W7LZN Brad 3146027 W0GTL Christopher 3146028 N6DMR Duane 3146029 N6DMR Duane +3146030 KI5DWB Curtis 3146031 KC0CAT Gerry 3146032 WG0F Michael 3146033 N0DER Doug @@ -90120,6 +115303,956 @@ 3146039 KA1IJA Norman 3146040 KG7QQE Jake 3146041 AD0IC Charles +3146042 N4KD David +3146043 WA7JH Jamie +3146044 KC9GZA Walter +3146045 K6BFG Justin +3146046 W0UGA William +3146047 KF5OIW Richard +3146048 KG5SNQ Jared +3146049 N5CQ John +3146050 W6AAX +3146051 KI5FLW Joseph +3146052 K2SHA John +3146054 KC9AAO Gregory +3146055 K4MME Junette +3146056 KD2OGT Paul +3146057 KD4UWU Anthony +3146058 KJ7HFW Eric +3146059 KI6BSL Bruce +3146060 KE0WGB Will +3146061 K0BRW Brendan +3146062 KJ6IMZ Ray +3146063 KJ6IMZ Ray +3146064 WB6ZAA Robert +3146065 KA7BVS Garth +3146066 KG5VFA Vernon +3146067 AJ4G Ralph +3146068 KB2QJH William +3146069 WA2OLZ John +3146070 KI5BPP Joseph +3146071 KM6IPL David +3146072 NJ8Y Ahmed +3146073 K4HG Steven +3146074 KI5FLX David +3146075 N1WR Wayne +3146076 N3BBQ Daniel +3146077 W9BBX Gordon +3146078 KA2UTO Rick +3146079 N0FYI daniel +3146080 KK7MA Michael +3146081 KN4VGU Orlando +3146082 KN4BGB Ronica +3146083 KN4BGB Ronica +3146084 KD7TRB Travis +3146085 WD0ADI Stephen +3146086 N7AYN David +3146087 NP2G Edward +3146088 K4MLB George +3146089 K4HG Steven +3146090 W6CMC Christopher +3146091 KX9R Neal +3146092 KE0QCI Robin +3146094 K4VMS Ricky +3146095 KC3KFY Robert +3146096 KN6BOR Donald +3146097 AC9VB David +3146098 K4VMS Ricky +3146099 WB5GVZ Glendal +3146100 KB0MOE Donald +3146101 KD9HBU Goran +3146102 KC2YWE Robert +3146103 W8KDC Kevin +3146104 KD2RDH Lawrence +3146105 AG7PY Gary +3146106 KE0WEE Sean +3146107 KI5FDC Christopher +3146108 KJ7FPT Michael +3146109 KM6ZCT Caleb +3146110 KI6HAW Shawn +3146111 KC9ZJM Greg +3146112 KD7JVO David +3146113 KB9FFR Ryan +3146114 KD0ZQZ Susan +3146115 K9SDS Stephen +3146116 WB2FHR Robert +3146117 KG4OJB Daniel +3146118 W8KDC Kevin +3146119 KD5QFO Robert +3146120 K4AJS Allen +3146121 KN6DAA Anthony +3146122 KD6BNQ James +3146123 W5IZZ Isauro +3146124 W7KJC Ryan +3146125 W2NDR Matt +3146126 KD6TQG Dino +3146127 K5RBZ Ryan +3146128 KD9NMC Robert +3146129 W5IZZ Isauro +3146130 KC1LRO JOSEPH +3146131 KC1LRO JOSEPH +3146132 KD0HBU Adam +3146133 KN4VIK Michael +3146134 KB9ACQ Robert +3146135 KE8KIJ Evan +3146136 KE8KII Michael +3146137 N5TYO Kevin +3146138 WA2DX Douglas +3146139 N5TYO Kevin +3146140 W7OYR Roger +3146141 K3RLD Roy +3146142 WB9RPL Chuck +3146143 KG7GSP Lucas +3146144 AG6JF Jay +3146145 WD8ASG Dan +3146146 WA9SHM Joseph +3146147 K7PMM Michael +3146148 K4BKM David +3146149 K7PMM Michael +3146150 KD7MPA Patrick +3146151 KH6WEB Ryan +3146152 AI4DX James +3146153 W0DBZ Rafael +3146154 KH6WEB Ryan +3146155 KE0CPR Mark +3146156 KN4SIL Shaun +3146157 N7XHI Arthur +3146158 KA3SEI Robert +3146160 KG5WKQ Michael +3146161 K4FLL Christopher +3146162 KI5FNU YONGFEI +3146163 KN4RBT Jonathan +3146164 KA2WQR Gerald +3146165 KA3EMS Billy +3146166 KC1LRN David +3146167 KM4YWT James +3146168 W6MUG James +3146169 KC5GSR Javier +3146170 K4BYB James +3146171 K4BYB James +3146172 K1WBW Wayne +3146173 K5ILD Elizabeth +3146174 N1BTM Benjamin +3146175 KJ7HIA Bruce +3146176 KM6ISJ Jeff +3146177 N7JWJ Jeremiah +3146178 WK4F William +3146179 N3RCN Michael +3146180 W7LJT Arthur +3146181 K9CTU Edward +3146182 KB3CB Keith +3146183 N1ZWG Jonathan +3146184 W5AHN Danny +3146185 KN4VCB Mark +3146186 N4MBF Butch +3146187 KN4RUC Christopher +3146188 N1PUZ Albert +3146189 KB3HQT Teresa +3146190 NN2NN Stephen +3146191 WA9GVK Bruce +3146192 KC3LZI Ken +3146193 KD2QQF Dustin +3146194 KC2GPJ Gregory +3146195 KI5FOA Allen +3146196 KC3LZI Ken +3146197 KC8WSK John +3146198 N6SGW Keith +3146199 KG6KJT Chris +3146200 WB5BL Brian +3146201 KG6KJT Chris +3146202 KG5YUO Bruce +3146203 KJ7HIA Bruce +3146204 KD8WCH Eric +3146205 N0KEW Kyle +3146206 KE0VUK Christian +3146207 K3CFG Carl +3146208 KN4VOT Frank +3146209 K6AVA Caleb +3146210 N9REI John +3146211 W5NC NARS +3146212 KN4VOT Frank +3146213 N6WJW William +3146214 KB3JGG Michael +3146215 K9JCS James +3146216 NE9DX Paul +3146217 KE0WFF Shaun +3146218 KB3UWC Steven +3146219 KN4MWQ Robert +3146220 W1KXV Cully +3146221 AA2UH Steven +3146222 N5ZPM Hardy +3146223 KF8MZ Clint +3146224 KE6BB Mark +3146225 K7XNT Larry +3146226 N4PJL Peter +3146227 KN4VOA Bryan +3146228 KM4DYA Rey +3146229 KD4LEC Richard +3146230 WX9CAH Craig +3146231 NS4H Maurice +3146232 KI5FHE Nathaniel +3146233 W1SR Steven +3146234 N5EEA Roger +3146235 K1LEO Lion +3146236 KJ7HVO Paul +3146237 KI5FKS Gabriel +3146238 KD0HYG Raj +3146239 AA1NH Mark +3146240 KD8AVB Joseph +3146241 KD9NMF Steve +3146242 W7SMS Grant +3146243 KI4BLU Bryan +3146244 K5ERC Edgar +3146245 N5EIC Lawrence +3146246 KB8SOE Keith +3146247 N0VYF Randy +3146248 KB0VHA Kevin +3146249 WD0EXF Christopher +3146250 KJ4UHI Daniel +3146251 KI5FHZ David +3146252 KB8SOE Keith +3146253 K5DWD Donald +3146254 K9SD Sammie +3146255 AB5TQ Charles +3146256 KE8LHA Michael +3146257 KC3NRI David +3146258 WE5MAG Wes +3146259 K7EAT Gary +3146260 KI5FOA Allen +3146261 KG5SBL Brinson +3146262 AA5E Felix +3146263 AB8XQ Clifford +3146264 N3RJV MICHAEL +3146265 N3RJV MICHAEL +3146266 KM6USE Brock +3146267 WH6FBK Marc +3146268 N6SGW Keith +3146269 NP3WN Martin +3146270 K2GX Joseph +3146271 KA6S Steven +3146272 KB0BOT +3146273 KC0TAF Michael +3146274 KC8MRB David +3146275 WB9BWP David +3146276 KC9QXL Steven +3146277 KD2SCP Lewis +3146278 KE0AZQ John +3146279 N5RDV Michael +3146280 NM2M Jay +3146281 WA1SSY Joseph +3146282 W3LAN Stephen +3146283 K2GFY William +3146284 KE8MGS David +3146285 KC9QXL Steven +3146286 KG5SBL Brinson +3146287 KC9EFP Joshua +3146288 KI7FIL Joanne +3146289 W1NDG Nathan +3146290 KD8MLY John +3146291 KB5LE John +3146292 N7KOA Steven +3146293 KI7FIL Joanne +3146294 WA3UHZ John +3146295 N3KAL Robert +3146296 KI5FOH Israel +3146297 NM2M Jay +3146298 WA5LHM Thomas +3146299 KK6IIU Eric +3146300 KC3FNE Karen +3146301 KA2TVX Mathew +3146302 KD8CQR Jeremiah +3146303 N9INK Curtis +3146304 N7KOA Steven +3146305 W1RTR Michael +3146306 WB6FOX Dylan +3146307 N7SNR Steve +3146308 W7EIS Michael +3146309 N5EKR Marvin +3146310 WP4QPZ Jose +3146311 KG5INE Steve +3146312 N9LYI John +3146313 KC8MSU Robert +3146314 KI5CZR Kurt +3146315 KC9E Troy +3146316 N7BPT Charles +3146317 KD2SXJ Shane +3146318 KE0TAC Scott +3146319 K8AMD Austin +3146320 N8RZL Jeffrey +3146321 K5RPM Ronald +3146322 K6KUF John +3146323 KE8MES David +3146324 AF6OK +3146325 WB0HSI Timothy +3146326 KE0VMD Richard +3146327 KB8TYD Ronald +3146328 W7AAC Bruce +3146329 K7TML Anthony +3146330 K5COD Ernest +3146331 KD2SCA Bruce +3146332 KE9AT Steven +3146333 W4QYV Avery +3146334 WB4UQT Christopher +3146335 W0JBM James +3146336 KN0B Anthony +3146337 KF7RFD Clement +3146338 KI5FPX Justin +3146339 W2RRZ Ross +3146340 N0AJS Andrew +3146341 KB9RRX Dennis +3146342 KC1KED +3146343 N5VMM Victoria +3146344 KC5FTN Donna +3146345 N9YZA Peter +3146346 KD2SJV Nicholas +3146347 KD0TIG Brian +3146348 WB7BYV Steven +3146349 W0ERE Allan +3146350 N3RCN Michael +3146351 KI5EMS Rick +3146352 KD2MDL Robert +3146353 KB7QHL David +3146354 KN4VSI Michael +3146355 KN4VSI Michael +3146356 KE8KVG Steven +3146357 K1DDJ Mark +3146358 KG7AAR Roy +3146359 KF7VZZ Coriander +3146360 W5HP Lowell +3146361 KN4MFB Rickard +3146362 KN4MFB Rickard +3146363 KE6QCO Dante +3146364 K7EIG Roger +3146365 KJ7GQU Jerry +3146366 KF4WNU +3146367 AA8KF Bryan +3146368 KA4WET Ramiro +3146369 AF6MQ Scott +3146370 KJ7HXJ Patrick +3146371 KN4PDO Clayborn +3146372 N2ECR Joseph +3146373 K4OEN Jonathan +3146374 KB9RRX Dennis +3146375 AD1AO Michael +3146376 W4PX John +3146377 K1RDD Doug +3146378 KA4BOE Dennis +3146379 KD9MOA Douglas +3146380 WD4RXD Mario +3146381 KD8HBL James +3146382 KJ4JOH Justin +3146383 K2CAD Clayton +3146384 WA6MQZ Danny +3146385 K5JWR Joseph +3146386 N5LRS Lawrence +3146387 K5JWR Joseph +3146388 N2MX Michael +3146389 KJ7HBE Evan +3146390 K0ITX Ethan +3146391 WP4QPP Jose +3146392 KF7VUT Tim +3146393 K7BTU Rulon +3146394 WB5GCL Gulf +3146395 KE0WFK Alexander +3146396 W7WRU Warren +3146397 N5LRS Lawrence +3146398 KN4VQV Austin +3146399 KF4DUE Dwight +3146400 KM6IIQ James +3146401 KY0LO Karl +3146402 K4HPC Daniel +3146403 KF0OU John +3146404 AB7RD Richard +3146405 AE4RM Roger +3146406 W4CPG Charles +3146407 KB6C Dennis +3146408 KD7HCW Louis +3146409 KC7DRI John +3146410 AB7RD Richard +3146411 K5KZK Adam +3146412 KI4MNR Paul +3146413 N5CER Christopher +3146414 W8AJF Daniel +3146415 AI5R Richard +3146416 K6HT Henry +3146417 KG7PMV Rick +3146418 N0AKN Susan +3146419 KG5JPW David +3146420 KD9JKH Daniel +3146421 K3RL Michael +3146422 N7SNR Steve +3146423 N5CER Christopher +3146424 W7AWH Dennis +3146425 N7GQP Robert +3146426 W6DQE Richard +3146427 KG7TCW Robert +3146428 KC7RCZ Steven +3146429 KM4OPK Nelson +3146430 N2MX Michael +3146431 W3ATT Brian +3146432 KM4JYM Robert +3146433 KC9SPP Sherwood +3146434 W6DQE Richard +3146435 WA7SH Gary +3146436 W6DTO Dave +3146437 WB2JOR Leopold +3146438 KJ7HMV Gary +3146439 WA7KPK L +3146440 WZ5S John +3146441 KD2SKE Raman +3146442 KF6MGI Travis +3146443 NC4CL Charlotte +3146444 KX4RO Daniel +3146445 KC1GQV Kim +3146446 KD2SKE Raman +3146447 K4VAT Anthony +3146448 KB6DEF Brian +3146449 KT4VQ Keith +3146450 KJ6VCM Peter +3146451 N1MQR William +3146452 KI5DZL Curtis +3146453 KD0AYL Christopher +3146454 K5CNU James +3146455 N6JOS Joshua +3146456 N5OLO Bobby +3146457 KG7DYH Calvin +3146458 KN4VSS Jack +3146459 KE0VYD Joshua +3146460 KE4RMO Donald +3146461 KE8GRY Eric +3146462 KC9KTB Leighton +3146463 KG6CLJ James +3146464 W6LXG Andrew +3146465 K0OPA Michael +3146466 KJ7HXD Jeremy +3146467 AA8MC Casey +3146468 KG5JBE Russell +3146469 KD5YJN David +3146470 KE0VTI Robert +3146471 KJ7HXI Andrew +3146472 WB3V William +3146473 KN4TZW Gabriel +3146474 K4EIT Joseph +3146475 KB3THX Scott +3146476 AA8MC Casey +3146477 KA8CLX Mark +3146478 KF4WSW Christopher +3146479 WY6T Donald +3146480 KC7LOX King +3146481 W1OBX Ronald +3146482 KN4UVP Ronald +3146483 K4SDL William +3146484 KN4ITK Luis +3146485 N5VSK Edward +3146486 W1DFM Dennis +3146487 W6URD Theodore +3146488 KK4EAS Scott +3146489 K0PM James +3146490 KI5SIE James +3146491 KE7ZAB Thomas +3146492 KA9WKK Gregory +3146493 KN6CTJ Michael +3146494 NQ0S Stacy +3146495 AJ6KQ +3146496 W4AJM Alan +3146497 W4CXN William +3146498 N2LYR Jeffrey +3146499 KC3MRQ Benjamin +3146500 W8SGM Michael +3146501 AA7P Richard +3146502 KE4SYV Larry +3146503 W1ESQ Neville +3146504 KD6STE Willie +3146505 KD7KTV James +3146506 KC1LNH John +3146507 W3AX Lorelei +3146508 KB3TDA Richard +3146509 KM6NUX Robert +3146510 KB3FMU Kevin +3146511 KC6CJV Edward +3146512 KL7RI John +3146513 N7GRH George +3146514 KN4VTK Norman +3146515 KG2V Charles +3146516 KJ7HIG Sergio +3146517 KI5EGK Wayne +3146518 KN4VJB Mark +3146519 KJ7HIG Sergio +3146520 N8PC Bradford +3146521 N8PC Bradford +3146522 W4VOL Terry +3146523 W4VOL Terry +3146524 KC3NFA Leland +3146525 KC1BCD Bruce +3146526 KC3KVF Larry +3146527 WB7VQX Roger +3146528 W0QYV Rowe +3146529 KD9NMQ Lawrence +3146530 K0WTF Jason +3146531 K0WTF Jason +3146532 KI5EJK Jason +3146533 N6HE Ray +3146534 KN4UNV Jeffrey +3146535 KA1VFG Mark +3146536 KB9NK Kenneth +3146537 KE0WGI Timothy +3146538 KK4QAF William +3146539 KB8QEU Edgar +3146540 K7MTW None +3146541 KG7MBR Ronald +3146542 KJ7GAZ Thad +3146543 K7AWK Anthony +3146544 KC1KDX Mark +3146545 WA4VOJ Larry +3146546 KB1SNB Richard +3146547 WB1W Richard +3146548 KA6RTL Robert +3146549 KB1GEO Michael +3146550 KE8BQQ Dellas +3146551 KU7T Andy +3146552 KN4IKU David +3146553 N0INF Danny +3146554 KC3NPG Thomas +3146555 N5KBP Marty +3146556 KN6CNU Joseph +3146557 KC3NPG Thomas +3146558 KC9QXO William +3146559 K5FNX Bette +3146560 KG7UYS Richard +3146561 KA4JSM Joseph +3146562 KE0WHY Thomas +3146563 KF6MGI Travis +3146564 AI6ZW Steven +3146565 K6RMG Romulo +3146566 KB1FUP Matthew +3146567 K4TIM Timothy +3146568 NA0ED R +3146569 WN6E Hans +3146570 WB4DKF Henry +3146571 K4ACS Smith +3146572 W1JJC Joseph +3146573 KN4EXU Jaime +3146574 KN4VRE Braddee +3146575 KE0UQY Timothy +3146576 KE7YZZ Brian +3146577 WP4N Carlos +3146578 KE7LWL Nicholas +3146579 KN4VVL Michael +3146580 KD2ECW Joseph +3146581 KM5TE John +3146582 KD8CQR Jeremiah +3146583 W9DDX Mitchell +3146584 WA0MDD Richard +3146585 W9DDX Mitchell +3146586 KN6CLM +3146587 WA1WEE John +3146588 KC3GKY Jason +3146589 NA4Q Charles +3146590 K4XLA Daniel +3146591 W9CMG Mark +3146592 W0ZVP Robert +3146593 KI7ZNG Donald +3146594 N8XT Eric +3146595 WA4HDW George +3146596 KD2ECW Joseph +3146597 KI5UB Robert +3146598 KG7UMQ Keith +3146599 K5KMR Kenneth +3146600 AC5UW Charles +3146601 KD8ZUI Robert +3146602 KG7MPN John +3146603 KZ7H Christopher +3146605 N2TDM Edward +3146606 KE8IGJ Leonard +3146607 N2YLO Steven +3146608 KI5CYO Erniel +3146609 KE8MOI Paul +3146610 KS0CBM Clint +3146611 ND7X Edward +3146612 K7HNX Todd +3146613 KF4IZY Ronnie +3146614 AF6FL Phyllis +3146615 N7PRS Pamela +3146616 AF6FN Joseph +3146617 KJ4KHM Gary +3146618 KE0WGA Brian +3146619 KN4VVQ Jeremy +3146620 KD2EPC Christopher +3146621 N2GKG Rene +3146622 KF4IZY Ronnie +3146623 KM6UPO Jaime +3146624 KD0CGF Kenneth +3146625 KE0KEA Jackie +3146626 KC1LSJ Matthew +3146627 AJ4NV William +3146628 KF9HL Thomas +3146629 WD4EEW William +3146630 KN6DHK Brandon +3146631 N4RNI Antonios +3146632 N6FB Paul +3146633 K7WWA George +3146634 KI5FRE Michael +3146635 KM6WSW Derek +3146636 KM5KM Doug +3146637 WH6FJR Adam +3146638 KB9OIV Matthew +3146639 KD8RFI Daryle +3146640 KD2SKJ Lila +3146641 KM6WSW Derek +3146642 N2PTI Timothy +3146643 KB0WRO Russell +3146644 KB1CAT William +3146645 KE7JFZ Patti +3146646 K3KDB Andrew +3146647 WP4OS Edwin +3146648 KN6DHM Jonathan +3146649 W5RCU Ralph +3146650 KE7VQF James +3146651 KG5DNG Collier +3146652 KG5WKV Luna +3146653 KN4HAE Russell +3146654 KE8AKR Adam +3146655 N7ITE Steven +3146656 KN4IKV Rebecca +3146657 KD2ONC Leon +3146658 AG4US +3146659 N8FND James +3146660 KE7VQF James +3146661 KD9NNR Ryan +3146662 KD9DJF Robert +3146663 KN6DHU Bryan +3146664 KE0QWA Martin +3146665 KM4FOS John +3146666 KG7MNK Robert +3146667 KF7TCS Astrid +3146668 KN4UOT Eric +3146669 N1DWG Daniel +3146670 W5IB Jay +3146671 KG7FIL Robert +3146672 KN4SVT Steven +3146673 KN6DGY Daniel +3146674 K8SR Steve +3146675 N0RSL James +3146676 N3AT David +3146677 KG5OKF George +3146678 KI5FQZ Larry +3146679 KI5FQZ Larry +3146680 KJ6HOU Brian +3146681 KE8JAS Chris +3146682 KD4GPE Gregory +3146683 KI5ACA Larry +3146684 WA8KLH Bruce +3146685 KX4PA Mark +3146686 WB4SA Radio +3146687 KN4MDJ Kenneth +3146688 KI7HSI Jon +3146689 K7DXF Hilland +3146690 W4MXZ Jason +3146691 KJ7IBE Miles +3146692 KD9EBF Lucas +3146693 N7TWT David +3146694 KD7LNX William +3146695 N7QLT Gene +3146696 KN4ORL Grant +3146697 K0LED Charles +3146698 KM4RNW Andy +3146699 W6SEJ Stephen +3146700 KF4ESG Giovanni +3146701 K7RPP Richard +3146702 N8UAD Michael +3146703 KM4DBF Brian +3146704 KM6DPJ Peter +3146706 KE3UF Michael +3146707 KN6DFW Lydia +3146708 W5ARV Andrew +3146709 N1AMP William +3146710 WB3END Michael +3146711 KN4KTM Joseph +3146712 KD8DEL Paul +3146713 KJ6YFD Andru +3146714 KM4GCP Rudy +3146715 KK6RVI Elizabeth +3146716 W2KBF Karl +3146717 KM4UYX Kenneth +3146718 WB4QQN Paul +3146719 KM4UYX Kenneth +3146720 W0KZ Jon +3146721 KN4SAS Juan +3146722 KN4VTA Gary +3146723 KN4VXX Craig +3146724 KN4SAS Juan +3146725 KN4VXH Will +3146726 KC2DIF William +3146727 KJ7IBY Josh +3146728 KB1TVS John +3146729 KN4VXH Will +3146730 W5TIN Michael +3146731 N2LIG Girard +3146732 W2CU Douglass +3146733 KC1LEU Nicholas +3146734 KG4FSE Coleman +3146735 W6HB Douglas +3146736 KD5VXH James +3146737 KN4VFJ Denny +3146738 KH6GJS Gene +3146739 KN1OBI John +3146740 KI5DBB Ryan +3146741 N8FKV Kenneth +3146742 KI5DBB Ryan +3146743 AB2KH Christopher +3146744 KC8VLD Terrance +3146745 KC8VLD Terrance +3146746 KF7DS Donald +3146747 KD9NLY Randy +3146748 KN4UOT Eric +3146749 KI5ACA Larry +3146750 KD5VXH James +3146752 AA9NN James +3146753 KN4SAR Neil +3146754 AI6RA Nathan +3146755 W0LT Tim +3146756 W7PM Marcus +3146757 AG5VO Randy +3146758 AE7OV Gary +3146759 KN4VRT Billy +3146760 KE5SQC Randy +3146761 KB8RVP Mike +3146762 N7OLQ Brett +3146763 WA7DJS Douglas +3146764 W9CWC Baraa +3146765 KJ7DMA Alex +3146766 AI4KA Chuck +3146767 N6UU Arturo +3146768 KN4LYS Daniel +3146769 N9MRJ Robert +3146770 KD9NNX Darren +3146771 WA7DLG Devin +3146772 KN4VYV Stephen +3146773 W9AA Hamfesters +3146774 K3REW Ronald +3146775 N9NJM Kyle +3146776 KJ7BNH Neil +3146777 WA1GON Darryl +3146778 KK6VBI Scott +3146779 N2AUO Gary +3146780 KB9MEQ Michael +3146781 N3VYZ Dennis +3146782 AK5U Robert +3146783 N1KAY Kathleen +3146784 K2NSA Felix +3146785 W4KAB Kenneth +3146786 K6RWW Robert +3146787 KE4CCB Anthony +3146788 KK6SJD David +3146789 W4LIP Robert +3146790 KE0PQV Stephan +3146791 KP4CJ Jose +3146792 KC1LPX John +3146793 N2AUO Gary +3146794 KD9ASD Katsumoto +3146795 W9AA Hamfesters +3146796 N1DAY David +3146797 N6LNL James +3146798 KG5MWJ John +3146799 WA7LOM Raymond +3146800 AB4XW David +3146801 N4DIQ Darrell +3146802 W9MNA Michael +3146803 KJ7ICJ Thomas +3146804 KE3R Alain +3146805 KA5Y Paul +3146806 K1SPD Scott +3146807 KM6ZKW David +3146808 KI5FMJ Timothy +3146809 K1ZW Larry +3146810 KE0WHC Christopher +3146811 KC1LQR Douglas +3146812 WB7ZAR Michael +3146813 W5CC Sammy +3146814 KI5FFC Donald +3146815 KI5FQC Karah +3146816 K1MTA Matthew +3146817 KE4JBP Jim +3146818 KN4VYC Daniel +3146819 KC2PHO Zachary +3146820 KC2PHO Zachary +3146821 KC1LKO Miguel +3146822 KA1EI Moe +3146823 K7ADK Doris +3146824 W3BUZ Robert +3146825 KI5FSF Jamie +3146826 KJ7BIH William +3146827 KI5FSF Jamie +3146828 K6IDJ Joel +3146829 K4DL Dennis +3146830 WB2BWS Millard +3146831 KG7UMQ Keith +3146832 W7JNB James +3146833 AB6TN Thomas +3146834 KG7AOI Scott +3146835 KF6FES Brian +3146836 KG7AOI Scott +3146837 KI5FFC Donald +3146838 KN4VNH Benjamin +3146839 K1NRA Paul +3146840 KB0Z Paige +3146841 KD4WLE Sean +3146842 KA1EI Moe +3146843 W9AA Hamfesters +3146844 W9AA Hamfesters +3146845 W9AA Hamfesters +3146846 W9AA Hamfesters +3146847 W9AA Hamfesters +3146848 W9AA Hamfesters +3146849 AD5MG Michael +3146850 W9FV Eugene +3146851 W9FV Eugene +3146852 W8SGM Michael +3146853 KD0DVR Sean +3146854 KI5DRC Lela +3146855 KE5PNR Dylan +3146856 KK4BK Brian +3146857 KC7TR Jeff +3146858 KC1LOT Corey +3146860 KG7SCQ Brandon +3146861 W3DLD Darren +3146862 KN6DKN Robert +3146863 KC5HCX Donald +3146864 KH6KO Kenrick +3146865 KK6ZFG Richard +3146866 W4LIP Robert +3146867 KE0MOF Jerald +3146868 KD5DAN Dan +3146869 KJ7IAU Yurii +3146870 KE8FPT Gregory +3146871 N8JBG Thomas +3146872 K9TNA Tina +3146873 KD0FBD Christopher +3146874 KI5DLS Kenneth +3146875 KH6ME Jesse +3146876 KC1KCC Adam +3146877 N7ZXH Elizabeth +3146878 KC3NDN Robert +3146879 W3FA James +3146880 K2PMT Peter +3146881 K4ZFD David +3146882 KE8IGF Jeffrey +3146883 KC2DIF William +3146884 N2VXD William +3146885 KM6PIB Evan +3146886 WP4GZA Daniel +3146887 N5NYM Allen +3146888 KM4JPA Charles +3146889 KN6DDF Taegan +3146890 N8JBG Thomas +3146891 KC1JTZ William +3146892 KK4WHO Ryan +3146893 KC3NVQ R +3146894 KG4ORQ David +3146895 KD9LZ James +3146896 K0TCC Thomas +3146897 W0ULD Lyle +3146898 W5MOO Cheryl +3146899 W3FGP Maurice +3146900 W3DMJ Daniel +3146901 W6EXT Paul +3146902 KV1P Edward +3146903 WB9VRT Bernard +3146904 AC4AM Paul +3146905 N5CAE Christopher +3146906 KE5THZ Adam +3146907 KP4PI Jose +3146908 KE0WJO Justin +3146909 KE4FSL Ed +3146910 KP4TPL Tito +3146911 K4EFJ Jason +3146912 KI5FGI +3146913 KP3FR Felipe +3146914 KD5EWF Dane +3146915 K8JME James +3146916 N5JHF John +3146917 WB2BXO Frank +3146918 KN6BFJ Manuel +3146919 KA6ZRJ Gustave +3146920 KI5FSV Chris +3146921 W0NXS Lonnie +3146922 WA1OXT Gary +3146923 KI5FSW Kendall +3146924 KN4WAA Tim +3146925 KI5ERF Ronald +3146926 KI7AY James +3146927 K5MWP Michael +3146928 KN4WAA Tim +3146929 KN6DMF Glen +3146930 AC7SG Steven +3146931 W8MDC Michael +3146932 KC5TY George +3146933 N5JE James +3146934 KG5ZSF Bradley +3146935 WP4GZA Daniel +3146936 KD9BPO Robert +3146937 KD2SJO Benjamin +3146938 KK6ZGB Michael +3146939 KN4JTZ Robert +3146940 WP4BE Enrique +3146941 KI4HTA Donald +3146942 KG5IEV Chad +3146943 W4TKX Tim +3146944 KK6FMD Todd +3146945 W4TKX Tim +3146946 AB5TB George +3146947 KC0MGG Brian +3146948 KN4PPD Bradford +3146949 W0NXS Lonnie +3146950 W8AJF Daniel +3146951 KB3PSN Matthew +3146952 KE0WKG Devon +3146953 KN4UMY Arthur +3146954 K2OSN Richard +3146955 KE8IIT Dustin +3146956 WZ3T Timothy +3146957 KF7RQR Kevin +3146958 KX4RE Charles +3146959 WG6F Jason +3146960 N8GNJ Steven +3146961 W9MRP Marty +3146962 KE8JPQ Christopher +3146963 KN4WAG Roy +3146964 KJ7HZZ Max +3146966 WA7DMR PNW +3146967 WD8AJJ Gary +3146968 KN4GCN Andrew +3146969 AK9FJ Patrick +3146970 KC6NNV William +3146971 KC2OFH Darrow +3146972 KD2SMG Adam +3146973 KE0WKG Devon +3146974 KE4JBP Jim +3146975 KI5FMB J +3146977 N5PA Alan +3146978 KD2QAG Christopher +3146979 KI5FSJ Ashley +3146980 AG5UR Sid +3146981 KJ7IEL Jeffrey +3146982 KD9NNZ Cynthia +3146983 NO1JW Larry +3146984 KT6HWK Jeremy +3146985 K4JBR Jesse +3146986 KM4CLO George +3146987 WA5RT Frederick +3146988 N5SHT Jeff +3146989 N5SHT Jeff +3146990 N3YYF +3146991 K2RCQ Rahuel +3146992 KD9EEE Mark +3146993 N7WEB Warren +3146994 KE0WEG Michael +3146995 W3FA James +3146996 N8AGO Gerald +3146997 KK4CSX James +3146998 NM7A Larry +3146999 AF5FS Jose +3147000 KJ6KHX Judy 3147001 WB4JGI Stuart 3147002 K1LNX Stephen 3147003 K1LNX Stephen @@ -90223,7 +116356,7 @@ 3147101 KB4REC Joe 3147102 WD4BKY Richard 3147103 K4OZE Vincent -3147104 AI4BE Victor +3147104 W3UO Victor 3147105 K4BLB Barry 3147106 W4CLH Larry 3147107 WB4TVW Charles @@ -90237,8 +116370,8 @@ 3147115 KI4SVJ Gary 3147116 KK4PFU Richard 3147117 W4PGM Paul -3147118 KD4CWB Daniel -3147119 KD4CWB Daniel +3147118 KD4CWB D +3147119 KD4CWB D 3147120 KK4WAS Tom 3147121 WB4VNE Jim 3147122 KD4CBM Jason @@ -90248,7 +116381,7 @@ 3147126 K4TJY Ron 3147127 W5EMA Gary 3147128 KI1Q Aaron -3147129 KE4CE William +3147129 K4TCE Mike 3147130 KV4OU Matthew 3147131 KV4OT Douglas 3147132 W4NCS Frank @@ -90289,7 +116422,7 @@ 3147167 KD4HBW Phillip 3147168 WB4CGG David 3147169 K4ODA Matthew -3147170 WA5ZAY Jack +3147170 K0BW Jack 3147171 KG4HTS Charles 3147172 AJ4WP 3147173 N4MQB Robert @@ -90357,7 +116490,7 @@ 3147235 KF4NUZ Edgar 3147236 KM4PAO Brian 3147237 KC4XT Laimon -3147238 N4SNG Steve +3147238 K4SJS Steve 3147239 N4RGC Clint 3147240 K4QFM Russ 3147241 K4BCL Bryan @@ -90425,8 +116558,8 @@ 3147303 KM4HWB Kirk 3147304 KM4HXR Todd 3147305 KM4PAS Martha -3147306 N4ZFA Earl -3147307 K4EZE Jim +3147306 N4ELO Earl +3147307 W3UG Jim 3147308 WD4JMS Jared 3147309 N2QX William 3147310 KE4AXW Mark @@ -90476,7 +116609,7 @@ 3147354 WA6GGM Shaun 3147355 KK4HYO Brighton 3147356 KJ4NTK Gregory -3147357 KY4RJ Randall +3147357 KY4RJ Randy 3147358 W4TAC Randall 3147359 KE4BFG Roger 3147360 AC4TR Joseph @@ -90529,6 +116662,7 @@ 3147407 AI4IC Kay-Uwe 3147408 KK4ZDV Daniel 3147409 WA4NEJ Harold +3147410 KI5FGJ Jack 3147411 KM4TED Harold 3147412 WB4AZG Kevin 3147413 KC4TIQ William @@ -90556,6 +116690,7 @@ 3147435 KK4OVW Randy 3147436 WE4MS Wadie 3147437 N9IWJ Robert +3147438 N3YYF 3147439 W4EMZ Jeffrey 3147440 N3FO David 3147441 W4JLT James @@ -90584,12 +116719,12 @@ 3147464 KM4IRU Bradley 3147465 KF4IOG Michael 3147466 K4KKH Charles -3147467 KG6ANX Rodney +3147467 WG4USA Rodney 3147468 W4DER David 3147469 KF4BGW Stephen 3147470 N4MOS Eric 3147471 KK4UTS Carl -3147472 KK4SKU Daniel +3147472 N4NDJ Daniel 3147473 KM4ITW Barry 3147474 KD4VTZ Jeffrey 3147475 N3SAM Samuel @@ -90606,7 +116741,7 @@ 3147486 KC5YTS Martin 3147487 WB4UAH Joshua 3147488 N2AL Andrew -3147489 KM4FXK Edward +3147489 NN1Q Edward 3147490 KF4BGW Stephen 3147491 KK4VZT Steven 3147492 N4KV John @@ -90656,7 +116791,7 @@ 3147536 K4GNR Stewart 3147537 KD4SH John 3147538 N9PNA Daniel -3147539 AB9ZD Kenneth +3147539 K9ZT Kenneth 3147540 KE4IQS Terry 3147541 KC4YQK Kevin 3147542 KM6Q William @@ -90730,14 +116865,14 @@ 3147610 W4JPT Jeff 3147611 NG3X Mark 3147612 KN4CTM Karoline -3147613 W4EBY Carl +3147613 W4EBY Wayne 3147614 K4VIA Todd 3147615 KN4CTV Thomas 3147616 KN4CTV Thomas 3147617 KM4USQ James 3147618 AG4KB Timothy 3147619 KW4WX Anthony -3147620 N4RMK Robert +3147620 KT4RK Robert 3147621 W4TFS David 3147622 N4MEB Mary 3147623 W4TFS David @@ -90747,12 +116882,14 @@ 3147627 WX0EMT William 3147628 KE4CGL Nick 3147629 KD4MIG Kash +3147630 W5RLA Raymond 3147631 WA4NOE William 3147632 N1OMG Ron 3147633 K4HLT Henry 3147634 KB4JHU Michael 3147635 N2YCX Ramon 3147636 N2YCX Ramon +3147637 KF7MW James 3147638 KF4IVV Joseph 3147639 KE4LQY Alvis 3147640 KF4KKC Robin @@ -90762,8 +116899,8 @@ 3147644 KJ4IGR Bobby 3147645 WR4MS William 3147646 KJ4SHW James -3147647 WD4BUD Bud -3147648 WD4BUD Bud +3147647 N6UHH Bud +3147648 N6UHH Bud 3147649 KI4QMJ Thomas 3147650 KD4VLC Danny 3147651 K4AOL Michael @@ -90773,7 +116910,7 @@ 3147655 KG4WXX Matthew 3147656 KG4WXV Holly 3147657 KM4OJK Bradley -3147658 K4AKK Ronald +3147658 WV4P Ronald 3147659 K4IDE Eric 3147660 K4EQX Terry 3147661 KM4MPF James @@ -90789,12 +116926,14 @@ 3147671 WI3B Dana 3147672 N4JBN Jimmy 3147673 KF4IIL Alan +3147674 KF4WSW Christopher 3147675 KC4WTI Scott 3147676 KM4RBP Fredrick 3147677 KX6F John 3147678 KX6F John 3147679 KG4WXW David 3147680 KJ4RMA Austin +3147681 KE0VII Harold 3147682 WS4S Conard 3147683 NK4I Tighe 3147684 W4JZE Jacob @@ -90807,7 +116946,9 @@ 3147691 KE4KMG Michael 3147692 KG4LHC Christopher 3147693 KK4DWU Geoffrey +3147694 KX2V Joe 3147695 N4KAC Gregory +3147696 W7QLI William 3147697 KN4DGI Rickie 3147698 WA4AR James 3147699 WA4AR James @@ -90827,6 +116968,7 @@ 3147713 K3LM Edward 3147714 K4WYC Dakota 3147715 K4QX Maurice +3147716 KJ4VKF Steven 3147717 N4WBC William 3147718 KG4FUM Timothy 3147719 N4KKH Omer @@ -90839,14 +116981,17 @@ 3147726 AG4OA Mark 3147727 N4CES William 3147728 K1QKZ Charles +3147729 KD9NPA Daniel 3147730 AI4SI Ricky 3147731 KM4PMW Christopher 3147732 KN4FVO Tom 3147733 W4TGB Richard +3147734 NU5P Benjamin 3147735 KD4V Michael 3147736 KJ4RVN Chad 3147737 KN4DZL Zachary 3147738 N4EOL Michael +3147739 KD5DLH Donald 3147740 KI4ZMM Johnny 3147741 KN4EWU James 3147742 KK4ZNA Wayne @@ -90862,16 +117007,17 @@ 3147752 KF4ZUN James 3147753 KN4EZH Robert 3147754 KF4DLK Tyrel -3147755 KN4SO Marc +3147755 AD4CW Marc 3147756 K4RAE Matthew 3147757 N4AJE John +3147758 KC0LAB Matthew +3147759 KG7WFQ John 3147760 KC5GGE David 3147761 N4VSD Kenneth 3147762 KI4OTR Larry 3147763 WR5X William 3147764 K4HWS Howard 3147765 WR5X William -3147766 KD4KSO Robert 3147767 KC4QT William 3147768 KJ4LEB Jerry 3147769 KG4KFX Ronald @@ -90884,6 +117030,7 @@ 3147776 KK4ECU Kenneth 3147777 K7KAS Dennis 3147778 K4MPH Francis +3147779 KI4GT Owen 3147780 WB4FWQ Tom 3147781 KN4GMC Daniel 3147782 N4RFT James @@ -90899,6 +117046,7 @@ 3147792 KN4FXD Bryan 3147793 W4WTK David 3147794 KN4EHX Nathaniel +3147795 KN6DOV Walter 3147796 KN4ELA Trevor 3147797 NN1H Allan 3147798 N6MMX Christopher @@ -90918,6 +117066,7 @@ 3147812 KE4OJI Bill 3147813 KE4OJI Bill 3147814 KI4ZDD Michael +3147815 W3WDD Daniel 3147816 KX1H Clarence 3147817 K5DLG Donnie 3147818 K5DLG Donnie @@ -90925,6 +117074,7 @@ 3147820 W4UO Christopher 3147821 KM4BAH Kevin 3147822 WS4JM Stanley +3147823 W3WDD Daniel 3147824 KM4BAH Kevin 3147825 K4TYS Ernest 3147826 KM4LKX Joshua @@ -90932,7 +117082,7 @@ 3147828 KN4GBO Sylvester 3147829 K8KO Emile 3147830 W4IKE David -3147831 KD4CWB Daniel +3147831 KD4CWB D 3147832 KJ4OYW Wallace 3147833 N5RLC Raymond 3147834 K4SLB Sawyer @@ -90957,6 +117107,7 @@ 3147853 KC4CBD Brenda 3147854 KG4UJD Jordan 3147855 KJ4YBO Charles +3147856 KM4RWG Joe 3147857 KM4NYH Marc 3147858 KN4ISN Aaron 3147859 KJ4FBU Bryan @@ -90995,6 +117146,8 @@ 3147892 KK4XA Robert 3147893 KK4XA Robert 3147894 KM4CDF Shawn +3147895 WB4JRO +3147896 NM2V Lesly 3147897 KM4MAX Terry 3147898 KG4KWE Mark 3147899 KW4RJ Robert @@ -91019,7 +117172,7 @@ 3147918 KA6UHV Paul 3147919 KK4DNV Jared 3147920 KI4ZLH Michael -3147921 KN4AER David +3147921 N4AER David 3147922 KA4BNI Alan 3147923 WA4DJP George 3147924 KA3CTP Brian @@ -91032,6 +117185,7 @@ 3147931 KC4ZOA Larry 3147932 KG4KNB Jimmie 3147933 W5MMW Matthew +3147934 KY4KY BULLITT 3147935 WA4YZT Laymon 3147936 WV4TN Wayne 3147937 KN4JSG Anthony @@ -91044,7 +117198,7 @@ 3147944 KN4EIG Cletus 3147945 KI4POA Aaron 3147946 KN4JFK Monvel -3147947 KF4NZV Glen +3147947 KF4NZV Lee 3147948 KN4EZW William 3147949 KG4ENM Britt 3147950 KI4POA Aaron @@ -91056,8 +117210,10 @@ 3147956 AA4DE Daniel 3147957 KC4NX Kurt 3147958 KM4USQ James +3147959 N7WFK Richard 3147960 N8PPY Russell 3147961 WB4LHD Randy +3147962 W4IIA David 3147963 WX4MEM NWS 3147964 N9KMY David 3147965 N9PNL Andrew @@ -91081,6 +117237,7 @@ 3147983 KY4TN Areca 3147984 W4BWW Bobby 3147985 KY4TN Areca +3147986 KR4EL Ronald 3147987 KC9GWE Joseph 3147988 KI4UHK Chris 3147989 KF4DNA Timothy @@ -91137,7 +117294,7 @@ 3148040 WY5V Andrew 3148041 AE5IV Mike 3148042 KB5NFT Dale -3148043 WQ9I Marc +3148043 K4WZG Marc 3148044 N5TPS Todd 3148045 WA5LXS Dennis 3148046 W5GM Jay @@ -91170,7 +117327,7 @@ 3148073 N5TXN William 3148074 KD5UTR Mark 3148075 KF5RM Mario -3148076 KD5ROK Cory +3148076 KD5ROK Anastasia 3148077 K3TD Tad 3148078 K3TD Tad 3148079 KD5UJL Roger @@ -91384,12 +117541,13 @@ 3148287 K5JMH Jimmy 3148288 KJ5RM Jory 3148289 KG5EIU David +3148290 KD5PX Michael 3148291 K5FDC Maxine 3148292 K5QZQ Chuck 3148293 K5FDC Maxine 3148294 KG5IAI Wilfried 3148295 KF5HVZ Michael -3148296 N0FIB Garold +3148296 N0FIB Gary 3148297 AA8RT Thomas 3148298 KF5SLN Adam 3148299 W5LHC Lee @@ -91421,7 +117579,6 @@ 3148325 W5MCR Kevin 3148326 KG5HTH Philip 3148327 AA3NB Cheryl -3148328 KD5ARS Kris 3148329 K5TOY Traci 3148330 AF5JQ Jonathan 3148331 KG5EEL Charles @@ -91440,7 +117597,7 @@ 3148344 K5UTR Jeffery 3148345 KF5YDW Alfredo 3148346 KC5DAQ Gary -3148347 KV4XB Larry +3148347 N5GR Larry 3148348 W5HK Stephen 3148349 K5SJT David 3148350 K5SJT David @@ -91526,7 +117683,7 @@ 3148430 KK4ZUZ Andrew 3148431 W5TLJ Terry 3148432 N9BAV Daniel -3148433 KG5LPJ Tim +3148433 K5MCG Tim 3148434 KE5CDK Doug 3148435 W5AWB Aaron 3148436 AF5HC Andrew @@ -91604,6 +117761,7 @@ 3148508 W5FOS Asa 3148509 K5PAC Christopher 3148510 KE5KPC Chris +3148511 KF7OHP Nopadol 3148512 KE5DI Richard 3148513 KC5BAL Willie 3148514 N5TRS N5trs @@ -91679,6 +117837,8 @@ 3148584 N0JY Gerald 3148585 KD5JUM Edward 3148586 WB5YFX Wilburn +3148587 WA1OXT Gary +3148588 KD4AKM Pete 3148589 K5MOS Kevin 3148590 KE5CDK Doug 3148591 K5RCM Rebekah @@ -91818,7 +117978,6 @@ 3148725 KC5FML Dustin 3148726 AC9KV Romie 3148727 KE5MSE John -3148728 KF5CXT Stephen 3148729 N5TEQ Brent 3148730 WB5ANN Mark 3148731 WE5TXS Russell @@ -91826,7 +117985,7 @@ 3148733 WB5EKW Howard 3148734 K5DMA Ryan 3148735 N5MHI Jon -3148736 N5VFD Robert +3148736 AC5FD Robert 3148737 W0BCG David 3148738 N0UWY James 3148739 KF5SYB Anne @@ -91841,7 +118000,7 @@ 3148748 AB5R Gerald 3148749 KG5OSC Cecil 3148750 KB5JXO Benny -3148751 W5ZTX James +3148751 NA5D James 3148752 KF5OAS Greg 3148753 K5VOP Paul 3148754 K5EXX Mark @@ -91882,7 +118041,7 @@ 3148789 N5LUB Michael 3148790 KF5WDJ James 3148791 K5EBQ John -3148792 KF5WAY Scott +3148792 KE5EO Scott 3148793 K3QS David 3148794 WD9GET Keith 3148795 KE5YOY Evan @@ -91891,6 +118050,7 @@ 3148798 K5ILS Robert 3148799 W3DH David 3148800 AG5GY Thomas +3148801 K6CYB 3148802 AG5GY Thomas 3148803 N5ECG Ronald 3148804 W5BRY Roscoe @@ -91937,7 +118097,7 @@ 3148845 KC5AMN Michael 3148846 W5XTT Thomas 3148847 WX1TEX Kenneth -3148848 W5TUX David +3148848 W5TUX Rick 3148849 KG5PKU Aristoteles 3148850 KG5PKU Aristoteles 3148851 KG5JRA Dominick @@ -91974,7 +118134,7 @@ 3148882 W5SJT Steve 3148883 NX5D David 3148884 KG5ONF Michael -3148885 KD5GJE Timothy +3148885 AE5NA Timothy 3148886 KE5UT Stewart 3148887 W5FZ David 3148888 N5TXR Sammy @@ -91993,7 +118153,7 @@ 3148901 KC5MOL Javier 3148902 KF5RVR Steven 3148903 K5MSZ Matthew -3148904 KA1GMN Philip +3148904 W1ZOT Philip 3148905 AB5JK Jimi 3148906 KC5NLP Michael 3148907 N9PBJ Jorge @@ -92009,6 +118169,7 @@ 3148917 K5MSZ Matthew 3148918 KG5ILJ Martin 3148919 K5SMD Shannon +3148920 KF7H Kevin 3148921 WW5NX Neil 3148922 N5OGD Gerald 3148923 N5MAT Matthew @@ -92088,6 +118249,7 @@ 3148997 AG5AA Luis 3148998 N5TMZ Kenneth 3148999 KG5BZI Bradley +3149000 K5RUP Edwin 3149001 N6DVZ Roger 3149002 KC7WSU Chris 3149003 WR7O Douglas @@ -92096,7 +118258,6 @@ 3149006 N7SLC Dan 3149007 W7RSS Phil 3149008 K7MWB Michael -3149009 AA7J Joseph 3149010 KC7WST DMR 3149011 W7XDX Darin 3149012 K7OPD Glenn @@ -92118,10 +118279,12 @@ 3149028 KG7DGH Brad 3149029 W7FJN Terry 3149030 AF7FH Wallace +3149031 KJ7IFN Jeff 3149032 K7KGK Richard 3149033 WB7ODA Ken 3149034 KF7VRN Harrison 3149035 KC7WST DMR +3149036 K5RJL Ronald 3149037 K7WRD Wayne 3149038 N7KOB David 3149039 KK7DV Gary @@ -92186,13 +118349,16 @@ 3149099 AG7DI Christopher 3149100 KD7BKO Chad 3149101 AC7JT Jeffrey +3149102 KN4MLM Jeffrey 3149103 KF7GNV Ben 3149104 KD7VEA Jacob 3149105 K8BKT Kate 3149106 WA7PMR Kent 3149107 K7BBR Brandon 3149108 N5RKO +3149109 KD9MUI Phillip 3149110 K7IVO Daniel +3149111 AD8EC Jamie 3149112 KB7YOX Gregary 3149113 KD7RTO Gary 3149114 KI7LEI Jeff @@ -92221,6 +118387,7 @@ 3149137 W7DBO Johnathan 3149138 N6RBV Robert 3149139 KA5RTV Mckay +3149140 KN4VUX Mitchell 3149141 W7BAS Bruce 3149142 AA1HE Harry 3149143 N7TCP Ted @@ -92228,16 +118395,23 @@ 3149145 KS7P Kelly 3149146 K7UHP Greg 3149147 W7CRC Craig +3149148 KC4NRI Ross +3149149 KF5VGS Bryan 3149150 K7UMD Jamie +3149151 K7KDP Kelli 3149152 W7WJB Jay 3149153 W1TAD Tad 3149154 N7MEM Matthew 3149155 KB7OUU Elliott 3149156 W7FJ Rob 3149157 KD7MKD William +3149158 KD0CXH Aaron 3149159 KD7BHB Robert 3149160 WG7JM James +3149161 N0YDQ Matthew +3149162 N0YDQ Matthew 3149163 K7LNP Pat +3149164 W4SDP Steven 3149165 N7GAD Alan 3149166 WA7UAH Douglas 3149167 KG7HSL Allan @@ -92245,10 +118419,11 @@ 3149169 N6RTR Marshall 3149170 KZ1B Robert 3149171 AE7ZB Rex +3149172 KN4SWF Allan 3149173 KC7IIB Brett 3149174 NF9C Dan 3149175 N7DGN Douglas -3149176 N1JWN Joseph +3149176 NO0J Joseph 3149177 K2STG Jeremy 3149178 KC7RAF C 3149179 N7WCX Lance @@ -92259,13 +118434,20 @@ 3149184 KI7SID Robert 3149185 KE7ELF Beth 3149186 KA7EII Rocky +3149187 W4SDP Steven 3149188 KC7CPT William 3149189 KF7SBE Travis 3149190 KG7HYV Kurtis +3149191 KN4TBT William 3149192 KC0JRE Michael 3149193 KE7BZT Kevin +3149194 W0ELY Connie +3149195 KE5GDB Andrew 3149196 KB7QYI Glen +3149197 AG5MQ Nancy +3149198 KE6VRI Vance 3149199 K1LAR Larry +3149200 KF7TWH Thomas 3149201 KI7TWG Jared 3149202 NS7A George 3149203 WB6YOK Charles @@ -92273,10 +118455,17 @@ 3149205 N7DND Gary 3149206 KF7GFS Tara 3149207 KI7PGV Willard +3149208 KD0YFO Hugh +3149209 KG7VBI Robert 3149210 K7ZZQ Johnny +3149211 KK4CO Gustavo +3149212 KD5FEE Robert +3149213 KF5MHC Robert 3149214 AA7VA Bart +3149215 KN4WAM Robert 3149216 N7GTE Robert 3149217 KB7YSP Alan +3149218 KX3F Dirk 3149219 KK7TH Timothy 3149220 KE7NGG William 3149221 K7VMR Vern @@ -92290,12 +118479,15 @@ 3149229 K2MJM Mat 3149230 W6MJS Michael 3149231 AG7LY Steven +3149232 N0SLA Tyler 3149233 KG7GWN Kg7gwn +3149234 KM6LAJ Congetta 3149235 KM1E Joe 3149236 KE7IRO Scott 3149237 KI7WBR Peter 3149238 WN7A Gary 3149239 KD4LOE Ron +3149240 N8VW Patrick 3149241 K7LAC Lisa 3149242 KG7WI Bruce 3149243 N7PCS Joseph @@ -92308,13 +118500,747 @@ 3149250 K7ZZV Gary 3149251 NS7K Richard 3149252 KG7VUC Gerald +3149253 N6QAD Angelo 3149254 AD7QF Gerald 3149255 N7IE William 3149256 KI7UAP Chad 3149257 KB1KRC Gavin 3149258 KI7WRN Camden 3149259 KD7RR Randy -3150001 N1CIV Bob +3149260 KI6AZI Lyle +3149261 WA7UIB Larry +3149262 K1JHH Raymond +3149263 W4GLX John +3149264 KC4NRI Ross +3149265 N6NXK Kenneth +3149266 N5IXA Randall +3149267 KM6ZKQ Colby +3149268 KJ6ZEB Robert +3149269 N9LCR Matthew +3149270 KM6CQ Daniel +3149271 KM6JID Brandon +3149272 K0GUY Guy +3149273 N5IXA Randall +3149274 K8DTF Delbert +3149275 WW4PW Paul +3149276 KN4VPO Donald +3149277 WA1AR Alan +3149278 KJ7BBI Sean +3149279 KC5WDW David +3149280 KA7AZE Kataze +3149281 KC1AIZ Johannes +3149282 N4XZV Charles +3149283 N4XZV Charles +3149284 KA7AZE Kataze +3149285 KX1ZYN Mark +3149286 AB9QZ John +3149287 AJ1S Andrew +3149288 KE8DZI William +3149289 KM6LAK Declan +3149290 KD4RKO Shawn +3149291 KM4BBY David +3149292 WP3OY Diego +3149293 KE0CIQ Wayne +3149294 WA0YDO David +3149295 KJ7GWR Benjamin +3149296 K2LTM Lester +3149297 K9AOS Michael +3149298 N0JSD John +3149299 KJ7IEA Peter +3149300 K2LTM Lester +3149301 KN6BFJ Manuel +3149302 KD9NPA Daniel +3149303 N4FLB Frankie +3149304 KX4KU Kevin +3149305 KD9NNC James +3149306 K9EFM Eric +3149307 W3VL John +3149308 W3MGZ Marc +3149309 K3GMQ Dan +3149310 KJ7IGF Paul +3149311 KE8CCD Allen +3149312 KM4RT Scott +3149313 W2AJT Anthony +3149314 W7AJN John +3149315 NB2A Thomas +3149316 WX5JMD Samiee +3149317 WD0AFP Shannon +3149318 N0HPU Michael +3149319 KA2BYU William +3149320 KK4ZQB Susan +3149321 N4ULM Michael +3149322 N6RDU Kenneth +3149323 KF5ZLA Adam +3149324 N2LWY Dale +3149325 KG5BWC Craig +3149326 N0FPF Steven +3149327 N4ULM Michael +3149328 WD6BNY Jonathan +3149329 K4VAA John +3149330 K5GMS Martin +3149331 W2FKG Robert +3149332 WA7CH Craig +3149333 KB7YVX Jerry +3149334 KM6WBO Raul +3149335 W9DDL Douglas +3149336 W3WBZ Robert +3149337 KN4WBV Isa +3149338 K4NRC Bill +3149339 K2NWC Jason +3149340 N5AET Landon +3149341 N2DLN Jan +3149342 WB5TTY Tony +3149343 KN6DON Wendy +3149344 KD9JGT David +3149345 KM4ECS Emery +3149346 KE0RUE Mark +3149347 N9ITW Ricky +3149348 KK4JCH Joseph +3149349 KE8MPJ Kent +3149350 KN4DJO Jon +3149351 KC3ETV Sara +3149352 AD6PE Gary +3149353 KD9KKP Edward +3149354 K6LAS Joerg +3149355 KD7PJW Kathleen +3149356 KE7LET Christopher +3149357 AC7RH Ronald +3149358 KC3NWJ Paul +3149359 KB3GBO Michael +3149360 KD2LSM Craig +3149361 KI5FWJ Ryan +3149362 N4JAJ Jerry +3149363 KD2HVC David +3149364 W1ACY Adam +3149365 KN4WBV Isa +3149366 WX4JSC Jason +3149367 KD2QMT Christopher +3149368 KV4NK Steven +3149369 WA6NDR Rick +3149370 KD9NGW Sean +3149372 WB8LLN Robert +3149373 K7AZU Erin +3149374 AF7JA Robert +3149375 N0SMD Shane +3149376 KD0VMX Dustin +3149377 KJ6IMX Alberto +3149378 KN6ASM Shawn +3149379 KE0RSO Brian +3149380 KI5FTH Alex +3149381 KC0LBH Justin +3149382 KM4WGN Jeffrey +3149383 WA4UJT Joseph +3149384 KJ7RED Lawrence +3149385 KC5MW Michael +3149386 N3CFX Geoffrey +3149387 KB7UZY Ryon +3149388 KN6DLS Vincent +3149389 WD6GNH David +3149390 KK4ZQB Susan +3149391 W0ARL Andrew +3149392 KE0FBB Jeff +3149393 KC3FYZ Jhett +3149394 W2BWC Brian +3149395 W6NCK Verner +3149396 WB2CLH Israel +3149397 KI4SUG James +3149398 KE5EXX Andrew +3149399 KE7WWL Oakley +3149400 KA1AL Al +3149401 KE0WKU Joseph +3149402 KE0WKO Chris +3149403 WB8EMA Licking +3149404 KC5UKK Russ +3149405 KG5ECE Timothy +3149406 W4AWS Andrew +3149407 KJ6GBD Roger +3149408 N9OVR Eric +3149409 KB7PPC Matthew +3149410 KD8YSI Austin +3149411 KI4BGY Neil +3149412 KE0WIG Nicholas +3149413 KC9ZWA Joshua +3149414 KB4SGA John +3149415 KI5FEG Russell +3149416 W4AZT John +3149417 KG7UAE Don +3149418 KI5FPT Mark +3149419 N3VMM Dennis +3149420 W5LTZ Matthew +3149421 KF5MJU Sunday +3149422 W6ZFA William +3149423 N7XDL Daniel +3149424 N4HMB Jason +3149425 KG5UFT Lynda +3149426 K8AJJ Angelito +3149427 N6SL Stephen +3149428 KN0H Alan +3149429 N7JKR Jon +3149430 WB6ENV Joseph +3149431 KM6LCP Robert +3149432 W5GSF Gregory +3149433 WA3IGU Dennis +3149434 N2LEC Robert +3149435 KC1KXK Raymond +3149436 N9TEA Edward +3149437 KN4AO Allen +3149438 W4FMD Steven +3149439 W4FMD Steven +3149440 AK6KA Robert +3149441 KF4DVW Joshua +3149442 KA4YCE Richard +3149443 KN6DRD Khanh +3149444 KD4NH Gerald +3149445 K1MEL Mark +3149446 K2WM Albert +3149447 KD2SNF PEDRO +3149448 KN6DRD Khanh +3149449 W4PHS Phil +3149450 W4PHS Phil +3149451 KI4ZIU Stephanie +3149452 KA7FOX Kyle +3149453 AA0CW James +3149454 KB1YSK Stanley +3149455 KC2TD G +3149456 KD2SHN Pascual +3149457 KK6PXH John +3149458 N6MRS Michael +3149459 W4KN Bobby +3149460 KB0RUD John +3149461 N9MHC Michael +3149462 KI5FTG Paul +3149463 K0SW Pioneer +3149464 KG5UFT Lynda +3149465 AA0CW James +3149466 KI5FTG Paul +3149467 N6MRS Michael +3149468 KD9NGM Jerry +3149469 AD0BY Ron +3149470 N7JKR Jon +3149471 KK6GZC Frederick +3149472 KD0QFT Grant +3149473 KM6RSD Todd +3149474 KJ6GBD Roger +3149475 KB8KET John +3149476 WA6DC David +3149477 KJ7IAC Partrick +3149478 N5EER Daniel +3149479 N2DAN Daniel +3149480 AK4FA Andrew +3149481 WD0HHU David +3149482 N5AAO Richard +3149483 K2WM Albert +3149484 N3ANO Torrance +3149485 K7AZU Erin +3149486 KB8KET John +3149487 KN4QBI John +3149488 KJ7IGY Joseph +3149489 N5DDS James +3149490 KB2BK Robert +3149491 KC2JAV Robert +3149492 N5EKO Jerry +3149493 N3FM Robert +3149494 KC8ECC Arthur +3149495 N6FOD Frank +3149496 KN4WGE Andrew +3149497 KJ6OSP Aramis +3149498 KC0LHE Alex +3149499 W4OGR Frank +3149500 K4LPQ Leo +3149501 K5AWE Amy +3149502 W4OGR Frank +3149503 KN6DHM Jonathan +3149504 KM6SOX Anthony +3149505 KG3TAG Stephen +3149506 KJ7IJM Charles +3149507 KN6DGV Anthony +3149508 KI5CRD Mauricio +3149509 K9JDO John +3149510 KN6DEZ Ricardo +3149511 KJ7IKB Nolan +3149512 KJ7BKH Luke +3149513 KI5FKD Nikki +3149514 K1NIK Nikki +3149515 W5WVY John +3149516 KN4BED Dean +3149517 KJ4AHN Rickey +3149518 KE0AZH David +3149519 AB1MC Michael +3149520 KN4WIS Thomas +3149521 KD9FXC Arthur +3149522 W4DOE David +3149523 KI6YJS Ward +3149524 KF7OHU Nicholas +3149525 WP4AKF Alvin +3149526 KD9FXC Arthur +3149527 KF6COQ Rufino +3149528 KG5WVM Tracy +3149529 KG5FZ Charles +3149530 KM4DQI John +3149531 KC8ZIK Ronald +3149532 KB5TVC Thomas +3149533 K6OP Andrew +3149534 WB4SQC Robert +3149535 KN4WJC Jason +3149536 KA7CJH Christopher +3149537 W1PGE Patrick +3149538 KM4DQK Stephanie +3149539 KD2SNG Thomas +3149540 KG4VIQ Peter +3149541 KE0AZ David +3149542 KB3ZQD Jelly +3149543 W4CPP Alexander +3149544 KI5JH Mark +3149545 KI5JH Mark +3149546 KI5FYG Blayne +3149547 KD9NNW Jason +3149548 KJ4C Dale +3149549 KB0SWS Guy +3149550 KJ6JJU Katrina +3149551 KJ6INP Wilfred-Xavier +3149552 N0WOI Emery +3149553 WA6GBW Marvin +3149556 KE5FXT Michael +3149557 KN4NOL Ricky +3149558 KC9ZWA Joshua +3149559 KI5BTA Cody +3149560 KJ4C Dale +3149561 W2MSW Mark +3149562 KN6COQ Matthew +3149563 KI5DIP Glenn +3149564 N3ACJ Claude +3149565 KC3BFW Scott +3149566 K0ZAK John +3149567 W5MDS Michael +3149568 KD9IPH Bryan +3149569 N9MKF Donald +3149570 N5RJN Robert +3149571 W8TJO Thomas +3149572 KD5OH Greg +3149573 W8TJO Thomas +3149574 KD9MUJ Clyde +3149575 K3UIN Ronald +3149576 NU3Q Robert +3149577 KB5EIL Johnnie +3149578 KN4WIZ Reagan +3149579 KN4OCY Christina +3149580 WA1CFX Howard +3149581 KS0HAM Kairy +3149582 WA7ZRG Thomas +3149583 KM4RLN Jamy +3149584 KB7DRT Daniel +3149585 K6CV Christopher +3149586 W2POP Thomas +3149587 N2OSO Philip +3149588 K6AMG Alfredo +3149589 KE6PXT Wenn +3149590 KF6QPY Miles +3149591 N6ENJ James +3149592 KB1RBT Benjamin +3149593 KB8PMI Bartley +3149594 AG9J Yodsapon +3149595 WB9TCB Patrick +3149596 WB4NQF Henry +3149597 KD0KCC Charles +3149598 W1JMP John +3149599 W7AIN Donald +3149601 KA8EOA Michael +3149602 WA8KOC Frederick +3149603 W5USW Tim +3149604 W5KBD David +3149605 KK6VEJ Thanadech +3149606 KM4JFG Christopher +3149607 N8RYN Randy +3149608 KK4WTO Floyd +3149609 N0PUN Cory +3149610 WB6ARC Richard +3149611 KF4USR James +3149612 W6KAJ Brandon +3149613 KN4VYF Steven +3149614 KN4VTX Stephen +3149615 KG7VEP Esteban +3149616 W4KRN Karen +3149617 N7IEI Jake +3149618 KN4WJA Macasiiyakae +3149620 W8ELI John +3149621 KC3HEK Andrew +3149622 KN4WIY Willard +3149623 NY6S Edward +3149624 KE8MNG Patrick +3149625 N7IEI Jake +3149626 KC1BCD Bruce +3149627 W7JWC Jeffrey +3149628 KB5RWX Michael +3149629 KE0WMZ Jerry +3149630 KE0SSS Sarah +3149631 W8JDZ Joshua +3149632 K4JJR James +3149633 KE0VVZ Jordan +3149634 KI1R Clarence +3149635 N9MII Steven +3149636 KM4AEC Steven +3149637 W2REC Robert +3149638 KD9NRG Adam +3149639 K6JCI John +3149640 N8MI Ryan +3149641 KI4LJP Philip +3149642 KB1EMG Kye +3149644 K7MWD Matthew +3149645 KE5QEO Mark +3149646 KI5FVV Douglas +3149647 WB7SWW Allen +3149648 KF4YI Breck +3149649 WP4CIE Victor +3149650 KE7LOI Mark +3149651 W0CDG Craig +3149652 W4HAC Drew +3149653 WP4CIE Victor +3149654 K0TWF Timothy +3149655 W4AGP Alvin +3149656 W3WAS William +3149657 W9HAX +3149658 K3WHD David +3149659 K3WHD David +3149660 W2EE Walter +3149661 W2EE Walter +3149662 KX4LD Mark +3149663 KF5LKG David +3149664 W5DPJ Gary +3149665 N8MI Ryan +3149666 W8JDZ Joshua +3149667 W3MOM Robin +3149668 KJ7IDZ Dalton +3149669 KN4OGD Joshua +3149670 W7WDM Ward +3149671 W1IUP Thomas +3149672 KB9WXE Joe +3149673 WB1FWW William +3149674 KK6IPL Jerrold +3149675 KB3ZCC Nathan +3149676 KE7JMQ Bruce +3149677 W4WMM Alan +3149678 KE8JUI Kevin +3149679 KI7FEH El +3149680 K6NIV David +3149681 KN6DMA Manuel +3149682 KD4DUO George +3149683 W1TJK Timothy +3149684 WA1GON Darryl +3149685 W1IUP Thomas +3149686 KC4CSD Scott +3149687 KJ7BLY Harlan +3149688 KC3ILV Alex +3149689 K7ILH Anthony +3149690 K7ILH Anthony +3149691 KD9NRH Robert +3149692 KB8RV +3149693 WA2DNR Richard +3149694 KN6DGJ Patrick +3149695 KE0WLT Matthew +3149696 N7KVN Kevin +3149697 KK5IY Daniel +3149698 N7LFL Gene +3149700 AC2AU Jeffrey +3149701 KF4GXM Sam +3149702 KM6DEL Erik +3149703 W6TC Joel +3149704 KC4CSD Scott +3149705 KC5UNP Russell +3149706 WI6X James +3149707 KK4PH Lowell +3149708 W9EN John +3149709 KN0H Alan +3149710 KE0RPP Matthew +3149711 KI5FZX Brian +3149712 KD4UJF Stephen +3149713 KD0RUN Rodney +3149714 KB7VCE Stephen +3149715 AC1DC Jamey +3149716 KN4DJO Jon +3149717 WH6GEA Murillo +3149718 N7GPU Sean +3149719 KN6DSS Manuel +3149720 K7TAA Charles +3149721 W8ALM Allen +3149722 KE0DAN Brandon +3149723 KT5MSR Mark +3149724 K1ENG Richard +3149725 KB4CFP Gregory +3149726 KP4HCC Herbert +3149727 KE0DAN Brandon +3149728 NF3E Luke +3149729 KP4JCP Jose +3149730 KD2SNT Joshua +3149731 WB2PCV George +3149732 KQ6K Edward +3149733 KM6YTV Anthony +3149734 NE6PM Gary +3149735 KN4VGV Fred +3149736 W7ZNM Christopher +3149737 W0BW Robert +3149738 KB9NCC Eugene +3149739 AE0GV Neil +3149740 KI5EFB David +3149741 KD9NPL James +3149742 KE6CIM Earl +3149743 KN6DSG Brandon +3149744 N0UJT Andrew +3149745 KD2QIP Stephen +3149746 KJ7ARR James +3149747 KI5FCN Steven +3149748 KN4KGI Ricky +3149749 KN4WGC Rodney +3149750 N7IBG William +3149751 K7ENN Kenn +3149752 KG5QOS John +3149753 AC2OK Eric +3149754 KC1GBZ Peter +3149755 WB4EQJ Terry +3149756 K8ALH Alfred +3149757 KA1ANW Sydney +3149758 KA7CJH Christopher +3149759 KC6ZCF Jeffrey +3149760 NX6E Leonard +3149761 K5AKM David +3149762 WA3PRR Raymond +3149763 KI5FLH Lewis +3149764 KE0WNQ Michael +3149765 KN6AXE Yazan +3149766 W9KID James +3149767 WB7JIM Homer +3149768 K6EDW Edward +3149769 WA4JGH John +3149770 AE4OU Elio +3149771 KB3OSX Amber +3149772 AD0JG Stephen +3149773 WD6DZS Wayne +3149774 W5SQI Clifford +3149775 KD6MC Kenneth +3149776 KI5EYB William +3149777 KC0SJU Emiel +3149778 NA6IA Jeffrey +3149779 N4CZ Douglas +3149780 N2WXP Darshan +3149781 KI4WHF Alfred +3149782 WA4VGZ James +3149783 N6HPO Alan +3149784 KK4KJF John +3149785 W6UAK Lorin +3149786 KN4TPZ Robert +3149787 KE0WNM Ricardo +3149788 KE8MUJ Paul +3149789 KD0PGV Weston +3149790 N5PUV Loren +3149791 KK4KJF John +3149792 N5PUV Loren +3149793 KN4VXX Craig +3149794 W2RWM Robert +3149795 K9AFT Arthur +3149796 KI5FXM Shawn +3149797 KE0WMN Zach +3149798 W0KTM Trevor +3149799 KX4TW Craig +3149800 N5RAE Robert +3149801 NA5XX Kelly +3149802 KK6LXK Ronit +3149803 K4WRC +3149804 WA2QYA Ralph +3149805 WD2AFW Alfred +3149806 K4WO Ronald +3149807 WB4LHM Stephen +3149808 KE0TSD Edward +3149809 K4WO Ronald +3149810 AG1P Ronald +3149811 KB0UNJ Chris +3149812 N4DBH David +3149813 KK4UWF Bradley +3149814 KC6QLS Paul +3149815 N7HRI Jonathan +3149816 KJ4OXM Jay +3149817 KN4WOV Tyler +3149818 K6QW Gary +3149819 N6HPO Alan +3149820 KN4FZF Jeffrey +3149821 KG5DGJ Shelbie +3149822 N3IS EPARA +3149823 KN6CVB Robert +3149824 AG5WC John +3149825 N5CTS Pascal +3149826 AK4ME Clint +3149827 W0TRR Timothy +3149828 WD0FAA Aaron +3149829 KF7YEN Steve +3149830 K7DCM Mark +3149831 KA0FWC John +3149832 AK6OM Jefferson +3149833 W4EVV Philip +3149834 N4RFB Denise +3149835 KK4JUD Joseph +3149836 W5YRZ Stanley +3149837 KC4POD Jeffrey +3149838 KE5LWY Terry +3149839 AK6OM Jefferson +3149840 KK4JUD Joseph +3149841 KF4ALB Christopher +3149842 KA6GYU Norman +3149843 KJ7BBU Dale +3149844 KF5FXR William +3149845 KD2QQU Jan +3149846 KE8IHQ John +3149847 KE5WEO Cheryl +3149848 N3JJL Joseph +3149849 WA6ILQ Michael +3149850 KI7SLQ Chilton +3149851 K5CBC Cromwell +3149852 KM6RXQ Douglas +3149853 KN4VQE Phillip +3149854 KD4SWF Catherine +3149855 KE5WEO Cheryl +3149856 KE5WEO Cheryl +3149857 KE0WMN Zach +3149858 W4BIY Rafael +3149859 KN6DLR Cherish +3149860 KX4HA James +3149861 KB4FDK Manuel +3149862 AI6MM Mark +3149863 KC3MZR Douglas +3149864 AI6MM Mark +3149865 WJ5K William +3149866 N3WJY Bryan +3149867 N0TI Theodore +3149868 KC7O Allen +3149869 N4RLI Ralph +3149870 KN4WJF Steven +3149871 KB5TYF Michael +3149872 NN4NT Robert +3149873 KE8KZI William +3149874 KD9MSN Daniel +3149875 KG4CVC Donald +3149876 KC2WWZ Martin +3149877 K6NIV David +3149878 KN6DLR Cherish +3149879 KN4VPN Ali +3149880 KL7EA Joshua +3149881 W9CTR Charles +3149882 KT7L Robert +3149883 AJ4CN Frederick +3149884 KW4FAB Agnaldo +3149885 AJ4QR Eric +3149886 WA5LRC LOUISIANA +3149887 KJ4FSU Joseph +3149888 KC7DRB David +3149889 KW4FAB Agnaldo +3149890 KD8MEP Joseph +3149891 KC4YLK Terry +3149892 KD7KOA Ryan +3149893 KC3NXT +3149894 WB4OX Ronald +3149895 W4EAE Ryan +3149896 KG7ADQ Chris +3149897 KA4ANA Albert +3149898 KB3ISI David +3149899 KG7ADQ Chris +3149900 KD4TFS Kevin +3149901 KE8LAC Scott +3149902 KC6UVM George +3149903 KD8RCU Douglas +3149904 KD2PZM Mark +3149905 W7RJR Robert +3149906 KD9MSN Daniel +3149907 AG4AW Gary +3149908 N0SYS George +3149909 N0SYS George +3149910 N0SYS George +3149911 K7HNX Todd +3149912 K0PAW Mark +3149913 AD0RI Michael +3149914 N5DLS A +3149915 N5DLS A +3149916 KC1KGU Ronald +3149917 KB9MHH Craig +3149918 N2VIX Scott +3149919 KB0SPO Harold +3149920 KD7ILP Wade +3149921 KB0SPO Harold +3149922 KG5PDR Terrill +3149923 KB3FSB Theresa +3149924 KB3FSB Theresa +3149925 KN6DVC Jean-Pierre +3149926 KE4WX Robert +3149927 KC5YIZ Adam +3149928 KE0VQC Matthew +3149929 KG4UVN Steven +3149930 N4JWD Joseph +3149931 KN4HUM Joseph +3149932 KI7DTM Ronald +3149933 KE6FQS Adam +3149934 AG4HC Hubert +3149935 KI5GCC Steven +3149936 N8UUC David +3149937 N5DDW Daniel +3149938 KI7ICL Steve +3149939 KE8KDF Michael +3149940 KE0OEH Curtis +3149941 KG5ZDB Andrew +3149942 KH6CUJ Leslie +3149943 KD8NYB Charles +3149944 KE0OEH Curtis +3149945 N8UUC David +3149946 KK6BY Paul +3149947 W4WOM Lloyd +3149948 KA7ZMB Aaron +3149949 KC1LNZ Michael +3149950 WB9JPH John +3149951 N0BAZ Steven +3149952 N8JYV Stephen +3149953 W5RM James +3149954 N6MNN Ralph +3149955 K9VMY Dennis +3149956 AJ6LB Matthew +3149957 AE0CJ Carl +3149958 W0UCC Martin +3149959 KN4WCC Eric +3149960 KN4TNY Megan +3149961 NI5G Louis +3149962 W4GGH Gregory +3149963 N6MNN Ralph +3149964 WG5EEK Michael +3149965 KD7OAB Kevin +3149966 KK6NEK Kevin +3149967 KK4OXI Edwin +3149968 WY4X Frederick +3149969 KU4MP Mark +3149970 AF7JM Eugene +3149971 W7KLV Antony +3149972 WD6DNY Ronald +3149973 KC2HVN Kenneth +3149974 K4VBR Richard +3149975 WA7CB Curt +3149976 KM6TRT Raul +3149977 K5GAD George +3149979 KD9NSL Kristin +3149980 KG5FRQ Gardner +3149981 KI6HRR +3149982 AG6XH Scott +3149983 KD8WSB Brian +3149984 KJ7IOI Sean +3149985 WA2TND Andrew +3149986 KE8HIF Thomas +3149987 KD4TNX Fred +3149988 KA4ZDR Dale +3149989 KI7EZU Norman +3149990 N5JYQ Joseph +3149991 KG5KTS +3149992 N7XOT Joe +3149993 W2EUS Richard +3149994 W2WDS Walter +3149995 KD0IQV Justin +3149996 KB1ZJB Patrick +3149997 KI7TYH Andrejs +3149998 AA4KY Jeremy +3149999 KN4WAG Roy +3150000 KN4WPV Anthony +3150001 N1CIV WaveComm 3150002 KC5CNT Russ 3150003 KC5CNT Russ 3150004 K1CZA Chad @@ -92436,8 +119362,9 @@ 3150120 KB1KPO Jerry 3150121 KC1DGT Anthony 3150122 KA1RW Elyse +3150123 KD0KYA Michael 3150124 KC1HKR Timothy -3150125 AC1CX Ronald +3150125 AG1W Ronald 3150126 KC1HRN Benyamin 3150127 KB1IVE Stephen 3150128 KA4NMA Randy @@ -92448,13 +119375,15 @@ 3150133 K1EGL Charles 3150134 W1WRW Wayne 3150135 N1MTS Michael +3150136 KD0KYA Michael +3150137 N7OEP Thomas 3150138 KC1JBF David 3150139 K1CSF Carol 3150140 KC1DPM Patrick 3150141 N1VEM 3150142 KB1ODO Andrew 3150143 KC1DPM Patrick -3150144 KC1GQU Michael +3150144 W5XVT Michael 3150145 KC1ZR Thomas 3150146 NG1K Douglas 3150147 N1ZIG Dennis @@ -92464,7 +119393,7 @@ 3150151 KA1PXZ Phil 3150152 KE1LEY Kelley 3150153 KC1CDI Riley -3150154 KC1GQU Michael +3150154 W5XVT Michael 3150155 K1SRM Scott 3150156 K1SRM Scott 3150157 KB1NBJ Ture @@ -92487,6 +119416,825 @@ 3150174 W1SBW Scott 3150175 AB1YZ Kenneth 3150176 KM4GNR Keith +3150177 KJ7IOH Whitney +3150178 AG5VX Jeff +3150179 KN4WQQ Stephen +3150180 N5ZDG Paul +3150181 KI7YQW Wayne +3150182 W2DHS David +3150183 KC9JJJ Darren +3150184 KB2UAL Leslie +3150185 KD4AMV Anthony +3150186 WB5QYZ William +3150187 W7AUF Arthur +3150188 KD9IDI Robert +3150189 KI5GCY Joel +3150190 W2EF BARRY +3150191 N2LYP Dorothy +3150192 N2LYM Michael +3150193 KC3NUS Jason +3150194 N5NXL Roger +3150195 N2LYM Michael +3150196 KD2SOK Andre +3150197 KN6CSD Robert +3150198 KE7WHE Joseph +3150199 K8DCC Alexander +3150200 AE6BH Bud +3150201 KM6PFO Guillaume +3150202 KE0VOX Ronald +3150203 N9AAA Norbert +3150204 KC2VON Anthony +3150205 WF2V Leonard +3150206 KG7ALS Lynn +3150207 N8DZX David +3150208 KD9FHX Jacob +3150209 KJ7FXZ Richard +3150210 KC9JGG Roger +3150211 KC3MBR Don +3150212 AE6BH Bud +3150213 WB4PPW Jesse +3150214 N1RCC Randy +3150215 KK6BCY John +3150216 KJ7CQO Matt +3150217 WH6FZY Joseph +3150218 KD5TFR Thomas +3150219 K9ROG Roger +3150220 KK6LES John +3150221 KB0LYW Johnny +3150222 W2KX Robert +3150223 K6WR John +3150224 K6WR John +3150225 KN4VQY Mike +3150226 KB1ZSK Bobby +3150227 KC0LDY Mark +3150228 N0LKS Lars +3150229 N5SPG Donald +3150230 AA0BC Billy +3150231 W4DNK Thomas +3150232 WA4ERM Eric +3150233 KN4USC Eric +3150234 N0LKS Lars +3150235 K9UTH Lewis +3150236 AK6TG Jeffrey +3150237 KN4QBK Samuel +3150238 K7OAC Omar +3150239 KD0WCR Russell +3150240 N2FWL Franklin +3150241 AB6CD Jang +3150242 KD9ADH Mark +3150243 W5PX Phillip +3150244 KN4AGQ Robert +3150245 KA5GNM Billy +3150246 W7MJS Michael +3150247 WA3UEV Daniel +3150248 W1TLK John +3150249 KC9ECI Thomas +3150250 KC1AKX John +3150251 KD7ETE Roy +3150252 K0DKL Dennis +3150253 KN6DXY Alexander +3150254 N7GWA Ian +3150255 KN6DXY Alexander +3150256 KJ7IPM James +3150257 KI7SLU Autumn +3150258 KJ6FZM Kathren +3150259 K2DEG Donald +3150260 KN6DVV Catinca +3150261 W6BLD Robert +3150262 KE8MCM Larry +3150263 KB1WE Richard +3150264 KI5FYP +3150265 KB1FBI Gary +3150266 KY4E Terry +3150267 KE0KPN +3150268 KD0VGG Joleene +3150269 AE6XC George +3150270 KM5L Patrick +3150271 K2AOS Keith +3150272 KN4SYE Jefferey +3150273 W7ZJL Austin +3150274 KD0WCR Russell +3150275 AK6TG Jeffrey +3150276 N0ZCW Brent +3150277 KN4WSX Mario +3150278 KD8BBT Andrew +3150279 KN4WSX Mario +3150280 KG5TJF Michael +3150281 KI5FWX Rodney +3150282 KK0TT Mark +3150283 KN4WPG Eric +3150284 KE0UFU Brandon +3150285 WA9CQ Eric +3150286 KB2NER Jaime +3150287 K8NPI Warren +3150288 KE8HNO Zebulon +3150289 KI5FPY Gregory +3150290 KI5GAM Byron +3150291 KG5OBI Mark +3150292 WB6JVJ Laurence +3150293 KE8HNO Zebulon +3150294 WB6JVJ Laurence +3150295 KB2NER Jaime +3150296 KB3OMX John +3150297 KE5UGA Gabriel +3150298 WH6GDY Braden +3150299 K4NDJ L +3150300 KA5BGQ Joseph +3150301 KM6ZKI David +3150302 KN6DXJ Hope +3150303 K1VCZ Kenneth +3150304 KI7UQU Johann +3150305 KE8MKB Tyler +3150306 KN6DOQ Colleen +3150307 KN6DOQ Colleen +3150308 WB0RJQ Mason +3150309 KC8IDM Steven +3150310 N0BEL Kevin +3150311 KE0WBH Scott +3150312 KD9KAK David +3150313 W9WJU Joel +3150314 KG5HHL Cliff +3150315 KI4HEB David +3150316 KJ7INU Frank +3150317 AE0HD Matt +3150318 AD9OV Okaw +3150319 KE9UR Gregory +3150320 KC3MGN Craig +3150321 K3MJ Richard +3150322 WP4QPP Jose +3150323 NA0NA Bill +3150324 KN6DYQ Nicholas +3150325 KM4TUK Mark +3150326 KA4ONX Lawrence +3150327 KG7NRT Justin +3150328 KN4VDJ Christopher +3150329 KC2MUY Paula +3150330 KF5RVQ Steven +3150331 KC9MIJ Jason +3150332 KD2SNU Erin +3150333 KN4WSB Jason +3150334 KJ7PLR Daniel +3150335 N9DPP Dennis +3150336 KI5CYP Mark +3150337 KK6VZD Christopher +3150338 WW4AL Albert +3150339 KI6VXT Gregg +3150340 KM6HVC Mark +3150341 KN6DXB Daniel +3150342 KC1LVF Joshua +3150343 KI6WVA Rosalinda +3150344 KD9KJX Richard +3150345 W5GT David +3150346 K0WIZ Gary +3150347 W1WJE Edward +3150348 WA4ROB Robert +3150349 KI7PRK +3150350 KB3SIG Alfred +3150351 WA2DFN James +3150352 N0JDE John +3150353 KM4GWK Jeremiah +3150354 KD9NRQ Juan +3150355 K5DEC Duane +3150356 KF5SQL Jeremiah +3150357 KC2QXN Chris +3150358 W7HLO Dale +3150359 KE8KKQ Jaimie +3150360 KB7LA James +3150361 KN4WGM Marc +3150362 N4JU John +3150363 N3OOK Robert +3150364 KD4IYQ David +3150365 KB2EA Harvey +3150366 W8DL Donald +3150367 KD7SV Daniel +3150368 KN6DXB Daniel +3150369 KD9ADH Mark +3150370 N5LAL Louis +3150371 N9DPP Dennis +3150372 KB7DNG Kim +3150373 WP4OHL Miguel +3150374 KC3NYR John +3150375 KE5GNY Charles +3150376 N0GPL Michael +3150377 KK4FBP Bernado +3150378 N5SQK William +3150379 KI7WHO Brendon +3150380 KE8JKF Marc +3150381 N9DAN Rex +3150382 N1RWX Pedro +3150383 N8JJA Jeremy +3150384 W9GIL WOJTEK +3150385 AG5DL Joe +3150386 WB6IVF Gerard +3150387 KI5GFA Dylan +3150388 W7OTP Michael +3150389 KI5GFA Dylan +3150390 W5LTZ Matthew +3150391 KM6PMD Therese +3150392 AC2FV Scott +3150393 KN4SYH Cleveland +3150394 KN6CZQ Matthew +3150395 KF8KI Steven +3150396 KM6UVR Donald +3150397 KN4WVX Douglas +3150398 KM4PJN James +3150399 N0BVR James +3150400 KE8GOA Norman +3150401 KK6NQW Andrew +3150402 NB3P James +3150403 KA6GYU Norman +3150404 N1RWX Pedro +3150405 KC6QLS Paul +3150406 KS5D Bob +3150407 N5CP Chuck +3150408 AB5QC Ramona +3150409 WW4AL Albert +3150410 KN6DKU Heidi +3150411 KE8MWE Courtney +3150412 W2CDY Cody +3150413 WT0B Gary +3150414 N6AKO Luis +3150415 KN4RXP Stephen +3150416 KJ7ISD Stanley +3150417 N5SYG Gayla +3150418 KF4ETR John +3150419 KI5PG Robert +3150420 W1LB Milton +3150421 KF4KYZ Arleen +3150422 KB8LLW Michael +3150423 K0XHF Kenneth +3150424 KM4ZST Joel +3150425 W1DGS Dalton +3150426 KN6DXL Kevin +3150427 KN4SAK Uzzy +3150428 KN4VLT Matthew +3150429 KJ4CN Ronald +3150430 N5GB G +3150431 KN4WUD Chad +3150432 WP4QAP Ivan +3150433 N1IAH Harry +3150434 KE8MWO Andrew +3150435 KE8LSN Lee +3150436 KE8MWO Andrew +3150437 KC1LAH Benjamin +3150438 NY0W Mark +3150439 N4MDF Martin +3150440 KD2PCQ Christopher +3150441 K6AMS Aaron +3150442 N6NYX Gregory +3150443 KN4EDV Matthew +3150444 W8PDH Philip +3150445 KF5VFW Jeffry +3150446 W2QCY John +3150447 NA1CN Chuck +3150448 KF5VFW Jeffry +3150449 KE8MWB Richard +3150450 K4QJS Richard +3150451 KJ7DX Matthew +3150452 KI7EWB Jerry +3150453 KJ7ITX Sean +3150454 KK6TRN Roberto +3150455 KN4WKN Aidan +3150456 KI7EWB Jerry +3150457 KE0CLN Shelia +3150458 N7GWR Zed +3150459 KN6DQB Joe +3150460 KC0DAS William +3150461 KD8GNY Nicholas +3150462 KN4NLS +3150463 KD2QLO John +3150464 KN4APU Douglas +3150465 KC2JEK William +3150466 KB4JAC Joel +3150467 KB5TWG Anthony +3150468 KA8UQN Duane +3150469 W8TCZ Edward +3150470 N2TKX Stephen +3150471 KG6WKS Rick +3150472 N9KMV CJ +3150473 N9KMV CJ +3150474 KD2MCF Jason +3150475 WP3JJ Jonathan +3150476 N7BSH Greg +3150477 KD0JMP Carrie +3150478 WF1RE William +3150479 KC9PFW Jonathan +3150480 K7SHN Shane +3150481 K3RCB Garry +3150482 W5DBJ David +3150483 K3RCB Garry +3150484 N3CX Eric +3150485 W1GEE Philip +3150486 KC3EFP Christopher +3150487 KN4GNK Steven +3150488 K8JJL Joseph +3150489 KN4NSF Gregory +3150490 KC3EFP Christopher +3150491 N4GYN Sheridan +3150492 N4TV Thomas +3150493 KM4LHH Ramece +3150494 KN4IYG Fred +3150495 N0NTW Keith +3150496 KF7E James +3150497 WP4RDV Efrain +3150498 KC3NXP Joshua +3150499 KF4ZPN David +3150500 K3MBN Arthur +3150501 N4FDT Elmer +3150502 AC7AP Martin +3150503 W4DED Danny +3150504 W5MW Michael +3150505 KE4UAR Jason +3150506 KJ4QQM Richard +3150507 KI5GGA Renee +3150508 KD5ZKV Thurman +3150509 WA3GFZ Paul +3150510 KE0WRP Mike +3150511 KC4OOV Otis +3150512 N1USA VECA +3150513 K6KY Adrian +3150514 W4JWJ James +3150515 W4RSS Dick +3150517 KE8BDQ Robert +3150518 KD4AMV Anthony +3150519 K2FLL Jonathan +3150520 KE8MKY Jordan +3150521 KM6QAQ Jeremy +3150522 KB4NPX Wayne +3150523 KN4GNK Steven +3150524 WW2PT Paul +3150525 KJ4DLA Hunter +3150526 KN4VJL Gregory +3150527 N1EBC Jason +3150528 N2QH Richard +3150529 KN4WDR Sloan +3150530 W1WAR David +3150531 KN4SMY Mac +3150532 KG5SGL James +3150533 KN4AGX Derek +3150534 KI4ZKE Mark +3150535 N9PS Phillip +3150536 KI4ZVH Ian +3150537 KF5QIK Michael +3150538 WV5D Steven +3150539 KF5QIK Michael +3150540 W3TCP Ernest +3150541 KF5TEU William +3150542 WB3AXX Dennis +3150543 N5TTI Tom +3150544 N3JJL Joseph +3150545 KJ7ITE Anthony +3150546 N7GR Gregory +3150547 N2JNR David +3150548 KK4YSA Darryl +3150549 N9PIT Joseph +3150550 KD0NPI Bryan +3150551 KC3NYD Michael +3150552 W9JW John +3150553 WA7FIV Hal +3150554 K8WRD Merrick +3150555 KI7FXE Glenn +3150556 K6ITR Steven +3150557 KN4UOD Evet +3150558 AJ4WL Jose +3150559 KN6DRK Colin +3150560 KN4VRB James +3150561 KJ7IHB Daniel +3150562 KD8QPZ John +3150563 W8EWH Mark +3150564 KJ4RWH Jeff +3150565 KC9LEQ Michael +3150566 W7GER Thomas +3150567 KE0NRZ Benjamin +3150568 KE0NRZ Benjamin +3150569 KI7FXE Glenn +3150570 KD9IBT John +3150571 NB0Z James +3150572 WB0RJQ Mason +3150573 W5KYP +3150574 K6UK Michael +3150575 W7PML Pedro +3150576 AD5EZ Lloyd +3150577 KM6U Peter +3150578 KI5GCU Ty +3150579 WB5MCT Harvey +3150580 AC7KH Robert +3150581 W2YJL Alexander +3150582 AJ4RH Raymond +3150583 AJ4RH Raymond +3150584 K1GLF Paul +3150585 KI7OPF Lucas +3150586 KB0EOR Frank +3150587 KG4YWL William +3150588 W4GMM Alexander +3150589 N7ID Michael +3150590 W1IRK Bruce +3150591 N5WRJ Jean +3150592 N7BWX John +3150593 WB5EYF James +3150594 KG7PBX Linda +3150595 KG1MPY Chris +3150596 KD9KOO Jared +3150597 KC4KMG William +3150598 N7SRR Stephan +3150599 KI5GDA Jeff +3150600 KD4ZYA Mark +3150601 K7LNA Ray +3150602 N8HUS Timothy +3150603 KG5ABB Marc +3150604 KG4BOJ Peter +3150605 KE4RNB Edward +3150606 K2KJD D +3150607 KN6DZJ Robert +3150608 KN4WHL Jared +3150609 KN4VCM Robert +3150610 K5CJH Cody +3150611 W1VET Ronald +3150612 K7AZJ Jerry +3150613 ND5F John +3150614 W3RGE Virgil +3150615 KN4WSV Ethan +3150616 KG4NHX John +3150617 NV1Q Juergen +3150618 KJ7FGF William +3150619 KD9NPF Michael +3150620 KC1HMH Joshua +3150621 KC1LVI Tyler +3150622 WA6RDH Richard +3150623 KI5BDN Sean +3150624 KY4CJ Cleve +3150625 KC2IFV Doreen +3150626 KG7OCO William +3150627 N7HPE George +3150628 KN4ODT Kevin +3150629 N7TRG Rodney +3150630 KE8MVV Joshua +3150631 WB3JSW Dave +3150632 KF5JWL Gordon +3150633 KC3KYH Chase +3150634 WD8NFL Philip +3150635 KD4FRB William +3150636 KI5CGU Bert +3150637 W6LOW Christopher +3150638 KC3NUM Brett +3150639 KI5FTT Brian +3150640 KB3KJO John +3150641 N5WRJ Jean +3150642 KN4UAE James +3150643 NU0V John +3150644 N8DXS John +3150645 KD8BKB Robert +3150646 KB0MXE Mark +3150647 KJ6TNH Robert +3150648 KD4HGN Reid +3150649 KM4JAZ Donald +3150650 KD2EWZ +3150651 NV7SS Kenneth +3150652 KE6HGL Patrick +3150653 W8ATS +3150655 KA7LEX Jeffrey +3150656 KD0HV Alan +3150657 KG5DAC Michael +3150658 K6LER Lynn +3150659 WA0AEC Dennis +3150660 KE0PWL Nanette +3150661 WB5DO Danny +3150662 KA5QFW Michael +3150663 KD0RYZ Caleb +3150664 N6LDP Larry +3150665 KI5FJS Paul +3150666 KF7OFI Darren +3150667 KN4WXN Bobby +3150668 KF5NIX Stuart +3150669 KK4UAH Alan +3150670 KM4FKN Charles +3150671 KE6YKX Evan +3150672 KJ6TNH Robert +3150673 W4TOT Gerald +3150674 KD9NUA Alex +3150675 KE0FFY Nicholas +3150676 AB2R Barbin +3150677 KG5DOL Mark +3150678 WB2FZC Alan +3150679 AB4D James +3150680 KE8CCD Allen +3150681 K8MIK Mike +3150682 K7AAT Edward +3150683 WF6TC Timothy +3150684 KG5EPW Forrest +3150685 KI6GRY Dylan +3150686 KA6LMS John +3150687 K7DJW Donald +3150688 KR1ST Alex +3150689 WS7JIM James +3150690 N4BRT Albert +3150691 AE4IY Don +3150692 N6DOZ Rudy +3150693 KN4WNA Joseph +3150694 WB0YQM Fred +3150695 KC5KLW Ottis +3150696 KE0WRF Zalman +3150697 WI5F Paul +3150698 N0QJI Rob +3150699 KC9WHY Daniel +3150700 KD8KFK Paul +3150701 KF4WMB James +3150702 N5WFF James +3150703 KI6TWP Micah +3150704 N2MEP Michael +3150705 K1UNI William +3150706 N1SMT John +3150707 K7EOD Scott +3150708 K0EG Karl +3150709 KN4REE Michael +3150710 N5QV Ronald +3150711 K6VVR Peter +3150712 N5QV Ronald +3150713 KJ6KHT Barbara +3150714 K5ZMM Edward +3150715 KF5TTU Steven +3150716 KG0LM Henry +3150717 K6RKB Robert +3150718 KB7VOO Thomas +3150719 WE1RDO Randall +3150720 KC5FRQ Donald +3150721 WH6GED Jonathan +3150722 KC1AFM Michael +3150723 KF5TTU Steven +3150724 K6CYC California +3150725 N6RPG Theodore +3150726 KB7RM Mike +3150727 W5MDS Michael +3150728 KA1PQR Joseph +3150729 KD2SPW Adam +3150730 WU3U Curt +3150731 W5SEL Austin +3150732 KE4GC Paul +3150733 AI4JA Gary +3150734 KI5GHL Kevin +3150735 KF5FRZ Jeff +3150736 KN4VVV James +3150737 N9LVV Jonathan +3150738 KG5ZQH Karl +3150739 N4AJW Andrew +3150740 KC1LSM Wayne +3150741 KJ6LJP Chad +3150742 ND0SX Robert +3150743 K4SMC Stephen +3150744 W1FKF Donald +3150745 N3DJD Cordelia +3150746 K4BUF James +3150747 W2RQR Rosalio +3150748 W6WEZ Arnold +3150749 N4DOD Michael +3150750 KI5SGT Charles +3150751 KD4FWJ Thomas +3150752 AB0J Thomas +3150753 K2DDD Dwayne +3150754 AJ4BN Jose +3150755 KN6BQK Adobin +3150756 KD4CCO Dallas +3150757 KD4CCO Dallas +3150758 WP3B +3150759 K1RSK Robert +3150760 AG5VW James +3150761 K5KQO James +3150762 KE6MAK Howard +3150763 AF4CZ Todd +3150764 KI5FEN Terrill +3150765 KM1TTT Manouel +3150766 N7STO Corey +3150767 K7JNM Joel +3150768 KD2RCY Robert +3150769 KE0ROM Dane +3150770 KE0SFK Jennifer +3150771 KE8CYB Brent +3150772 KF5HJM Ramona +3150773 KN4KJN Edward +3150774 AJ6LT Edward +3150775 K7JNM Joel +3150776 KN4VCJ Charlie +3150777 KD8YME John +3150778 KN4KJN Edward +3150779 KI5FQJ Sam +3150780 KN4TPZ Robert +3150781 KD9JOL Catherine +3150782 KC2UEV Roger +3150783 KD0AJT Michael +3150784 N4NAK Arthur +3150785 WN3NIU George +3150786 KN6EEC Samuel +3150787 N0KKY Stanley +3150788 W1SDR Steven +3150789 KD9CVI David +3150790 KE7CFM Dee +3150791 KC2DMT Darlene +3150792 KK3U Gary +3150793 KM4KTD Billy +3150794 N2NSV Thomas +3150795 KN4WLO Colleton +3150796 KN6EEC Samuel +3150797 KD9NPL James +3150798 KP4FC Francisco +3150799 KA0YTG John +3150800 K9LPA Mark +3150801 KJ4EZE Terry +3150802 KN4JGH JOSEPH +3150803 KM6EZO Bill +3150804 KN4MVA Peter +3150805 W6TUZ Ronald +3150806 WB4AIZ Charles +3150807 KD9IVL Patrick +3150808 KD9NUM Bryan +3150809 KC9OET Henry +3150810 KN3G Robert +3150811 KC9OET Henry +3150812 K4UGK Louis +3150813 KQ4LA Jeffrey +3150814 WX6O Paul +3150815 KL7JPL John +3150816 N7STO Corey +3150817 N5WCW Steven +3150818 KB2MEZ Richard +3150821 KB7VOO Thomas +3150822 KN6DZV Yohan +3150823 KE0SWO Cody +3150824 WB1ACE Armand +3150825 W9PEM Paul +3150826 W9PEM Paul +3150827 KN6DZV Yohan +3150828 KD0YGO Steve +3150829 N1UIO Robert +3150830 K6TEK Jerrod +3150831 KE0APU Jefffrey +3150832 KZ1K John +3150833 W6KSJ Robert +3150834 WB4EGE David +3150835 KC1LTS Sajin +3150836 KL7SR Michael +3150837 W9HPX Roland +3150838 K4FOY David +3150839 W9HPX Roland +3150840 KC0HWS Roger +3150841 W6SON SCRA +3150842 W2VL +3150843 WA6HBM William +3150844 W6SON SCRA +3150845 KN6AEV Carl +3150846 N2SUB James +3150847 KC1IKA Charles +3150848 KG7SJR William +3150849 KG7SJR William +3150850 N7JAJ Armin +3150851 KI5SGT Charles +3150852 W6KSJ Robert +3150853 KE4HUB David +3150854 KK5PAC Charles +3150855 KC0PP Keith +3150856 K4DDR Darin +3150857 KD8FAL Kevin +3150858 N1UIO Robert +3150859 AB5SB Lacy +3150860 KF4NMH Brian +3150861 KN4VIR Raymond +3150862 KN6EDN Craig +3150863 KC1HXR Merrill +3150864 N3PLM Christian +3150865 WA3YUE Bruce +3150866 KG7POF Benjamin +3150867 K1VSJ Howard +3150868 WA5RHF John +3150869 K3RLW Bob +3150870 KC3NLT Anthony +3150871 W3KM David +3150872 KN4VVV James +3150873 W5QLT Lisa +3150874 WP4ITE Luis +3150875 K5DPL David +3150876 KD8JQE Darryl +3150877 KK5LO Walter +3150878 WR4H Robert +3150879 KG5IJQ John +3150880 KB0VLZ Le +3150881 WP4ITE Luis +3150882 KE8JUJ Nicholas +3150883 KC8ERI Jason +3150884 N2FBV Kenneth +3150885 KI6SAQ Susan +3150886 KC1IZC Michael +3150887 K7GND Larry +3150888 KC3NZN MAX +3150889 WA6LDT Robert +3150890 K1DT David +3150891 KK4NHY Michael +3150892 W6CJ James +3150893 WB0IEN Lyman +3150894 KD6KHI Daniel +3150895 KB0LCR Kevin +3150896 N5XJL John +3150897 N9RJU Raymond +3150898 KD2REA Luis +3150899 N0LGR Raymond +3150900 K5ATA Steven +3150901 N8AJD Bradford +3150902 KD2EWE William +3150903 N6KZW Paul +3150904 K7MRS Melody +3150905 WP4Q Dennis +3150906 N3TQK George +3150907 WP4Q Dennis +3150908 N0LGR Raymond +3150909 W9SUS Taylor +3150910 KF5NSN Chad +3150911 N0ABB Andrew +3150912 W8UTC Arthur +3150913 KD2SQI David +3150914 KB0LCR Kevin +3150915 AA2UK William +3150916 KG7DTP Erik +3150917 N8KUF Michael +3150918 W1OP +3150919 K6RVC Shawn +3150920 WX7P Janet +3150921 KN4GPD John +3150922 WD9DD Russell +3150923 KM4GXR Kyle +3150924 K9ROG Roger +3150925 K7ENN Kenn +3150926 N7EVL Eric +3150927 K0MDA Michael +3150928 KN4WSN Matthew +3150929 W6MAP Michael +3150930 KN4WJW Bruce +3150931 W6MAP Michael +3150932 W6JDR James +3150933 K7XFE Christopher +3150934 KG5KCB Carlton +3150935 WA8SPN Robert +3150936 KM4MVT George +3150937 N5MMC Michael +3150938 KG6AKV Dean +3150939 W7KRH Kenneth +3150940 KI6TAM Brian +3150941 KB0SRS Kim +3150942 KS4VB Charles +3150943 N7HG Herbert +3150944 KE0WTE Collyn +3150945 KC1HXR Merrill +3150946 KN4CPA Robert +3150947 KI5FVA Kent +3150948 N7HG Herbert +3150949 K7MFC Matt +3150950 K1UNI William +3150951 NE7BO +3150952 KN6DYJ Dennis +3150953 KB2EA Harvey +3150954 N5EJ Jesse +3150955 WI9AJR Andre +3150956 K5AEA Gary +3150957 KI5GJW Steven +3150958 KI5FVA Kent +3150959 KI5GJX John +3150960 N1NGK Nina +3150961 K5AEA Gary +3150962 AD0VM Wayne +3150963 KN4VVB Paul +3150964 KC2SDZ Eric +3150965 KJ6DIN Joel +3150966 KM4MVT George +3150967 N5ZHB Wayne +3150968 KI5BGK Robert +3150969 KX4CF Gary +3150970 W3YUT Michael +3150971 KG5HCJ Richard +3150972 KE6JJO Humberto +3150973 W5CH Frank +3150974 N9UCV Dallas +3150975 KK6OMZ Bruce +3150976 KP4MHG Maria +3150977 KJ7CMU Laura +3150978 K9EX John +3150979 KK6OMZ Bruce +3150981 NG5X Roy +3150982 N1XED Chad +3150983 KK6DHQ Kevin +3150984 AE0HF Phil +3150985 N2RGI Gary +3150986 KJ6WCS Phong +3150987 KG4NFJ Michael +3150988 KG4NFM Christopher +3150989 KM6FDI Walaa +3150990 N2FRF Neal +3150991 WV9A Scott +3150992 WB4MLP Ray +3150993 N5WE Charles +3150994 AD0WP Robert +3150995 KF6WDY Robert +3150996 N5AN Paul +3150997 KE0WLD Dominic +3150998 KE0WLD Dominic +3150999 WH6GEE Geoffrey +3151000 KD9NDJ Kenneth 3151001 N8RK Ralf 3151002 W4YP Bob 3151003 W4YP Bob @@ -92539,6 +120287,7 @@ 3151050 N4HDF Doug 3151051 KM4BTK Dennis 3151052 N7HPO Jesse +3151053 NR1R Reynolds 3151054 K8LF Jerome 3151055 WB4NVA Jeff 3151056 AE4ML Michael @@ -92614,7 +120363,7 @@ 3151126 N1VCU Reid 3151127 K4MTK Matthew 3151128 KM4ICA Madi -3151129 N4EJ Jokers +3151129 N4EJ Paul 3151130 KI4RIT Richard 3151131 KA2SPH Michael 3151132 W4JAB Andy @@ -92788,7 +120537,7 @@ 3151300 W4HLD Bryan 3151301 KM4NGW Gregory 3151302 WA4KFZ Mark -3151303 NA3P Richard +3151303 NA3P Dick 3151304 KG4AEP Jason 3151305 KG4AEP Jason 3151306 KJ4VHS Aaron @@ -93074,9 +120823,10 @@ 3151586 KU4OM Ronald 3151587 K4VVV James 3151588 AC5PT Michael -3151589 K4XDJ Donald +3151589 N4DJD Don 3151590 WD4IDJ Ann 3151591 N3JES James +3151592 W3TWZ Anthony 3151593 K8LIN Bradley 3151594 AD4JF Joseph 3151595 K8LIN Bradley @@ -93136,6 +120886,7 @@ 3151649 KG4YXP Anthony 3151650 W2SKI Richard 3151651 N4IWI John +3151652 WB5EXY Robert 3151653 N4IWF Glenn 3151654 WA2SWX Don 3151655 N4ETQ Dennis @@ -93159,7 +120910,7 @@ 3151673 K4MCO Sean 3151674 N4WTG Barry 3151675 N3UC Michael -3151676 N4USI The +3151676 N4USI AO-27 3151677 K4JB Jim 3151678 N3UCC James 3151679 KF4IRR Teresa @@ -93261,6 +121012,7 @@ 3151775 KE4CIR William 3151776 K4RBT Frederick 3151777 KD4DUW James +3151778 KC3HRS Francisco 3151779 K4YS Jon 3151780 W4KEL Peter 3151781 W4KEL Peter @@ -93319,7 +121071,7 @@ 3151834 N3EV Gene 3151835 KS1G Stephan 3151836 KG4INO Bayani -3151837 KM4GIY Michael +3151837 K4MJV Michael 3151838 W3VAR Charles 3151839 N2DMH David 3151840 N1RM Rick @@ -93332,6 +121084,7 @@ 3151847 KI4DHW Charles 3151848 KG4TKA James 3151849 KM4LLF Paul +3151850 AD8CT Ronald 3151851 K4AVM Andrew 3151852 KK4EBG John 3151853 KN4DFL David @@ -93339,6 +121092,7 @@ 3151855 KB4MIC Donald 3151856 KK4RWB Ronald 3151857 KI4SYS Edward +3151858 KF5MYS Zachary 3151859 KN4DTA Michael 3151860 K4DND David 3151861 K4PZZ Fred @@ -93368,7 +121122,8 @@ 3151885 KN4FAP Daniel 3151886 W1PAB Patrick 3151887 N3UW Richard -3151889 W4ONH Owen +3151888 KD9NDJ Kenneth +3151889 W4ONH owen 3151890 K4KOM Kevin 3151891 W1SPY Joseph 3151892 N3IXY Peter @@ -93382,6 +121137,7 @@ 3151900 CX1EK Luis 3151901 CX1EK Luis 3151902 N4UTF Jeffery +3151903 KD5JRS William 3151904 W3BMH Judith 3151905 W3LNA Michael 3151906 KM4IIY John @@ -93398,7 +121154,7 @@ 3151917 K4LYL Larry 3151918 K4LBG John 3151919 W2JWP John -3151920 KI4IHC Danny +3151920 KI4IHC Daniel 3151921 KJ4WQ Tom 3151922 KQ6IN Miguel 3151923 KN4U Ronald @@ -93418,10 +121174,11 @@ 3151937 K8JLW Reid 3151938 W4JAM John 3151939 WD4BNO John -3151940 KB2CDY David +3151940 KX4OP David +3151941 AD8EP Keith 3151942 AC4BT Jerry 3151943 K4YNO Harold -3151944 K2LLC Leroy +3151944 K2LLC Linwood 3151945 WA1ZMS Brian 3151946 W4JAA James 3151947 W4JAA James @@ -93435,6 +121192,7 @@ 3151955 KC8KHL Mark 3151956 N4IW David 3151957 KK4RVB Rhonda +3151958 KC2YIY Albert 3151959 K4ESC Edward 3151960 W4MEV Mark 3151961 KN4DDA John @@ -93451,6 +121209,8 @@ 3151972 KK4BIS Carrie 3151973 KK4BSL Derrick 3151974 KK4BIT Julie +3151975 4G4S Sonny +3151976 KB9UOY Timothy 3151977 WD4RKL John 3151978 K4NUC Jeffrey 3151979 KK4JAE Perry @@ -93460,6 +121220,7 @@ 3151983 KC3GZL Kevin 3151984 N3BYE Maurice 3151985 KD4OOM Jeffrey +3151986 KN4TGU Todd 3151987 WA4YVM Bradley 3151988 N4LVP David 3151989 KI4SHC Jason @@ -93470,15 +121231,1017 @@ 3151994 KM4YIA Peter 3151995 KV3W Joseph 3151996 AA1RB John +3151997 K6DMR David +3151998 AE7TG Allen +3151999 KA1BKR John 3152000 KJ4ASE Michael +3152001 KE0WQW Mark +3152002 KB1SDK James +3152003 KN4PRQ Michael +3152004 KF5LHT Ian +3152005 K3MR Matthew +3152006 KD5QYV Kris +3152007 KC1CFQ John +3152008 K3MR Matthew +3152009 KA1BKR John +3152010 K9ACM Michael +3152011 KD9DVP Thomas +3152012 KF7LJP Lee +3152013 KI5GKA Aaron +3152014 KC1KWF Wayne +3152015 KG5PCA Thomas +3152016 N9JCX Daniel +3152017 W4WNE Terry +3152018 KL7EBE Edward +3152019 KN6EGD Brooke +3152020 KM6WZP Brandon +3152021 K7SWC Steven +3152022 KB1UBW Christine +3152023 K5WLY Walter +3152024 N4OOJ Thomas +3152025 KB1SZL Donald +3152026 KE0WTM +3152027 N5AVY Stanley +3152028 KC9FQW Betty +3152029 KJ6OUK Ariel +3152030 KD9ANU Richard +3152031 W8LES Louis +3152032 KB3YVV Julius +3152033 KE8MWL Kyle +3152034 W2DZ David +3152035 KN4BWS Ricky +3152036 KE0WTJ Travis +3152037 K6TMX Erin +3152038 KN4YDL Drew +3152039 KC2MGH Joseph +3152040 N8FAA Craig +3152041 KF5AHH Matthew +3152042 KE8WES Robert +3152043 KC1LXH BRANDON +3152044 KN4YCU Hector +3152045 KN6DAW James +3152046 KU4RW John +3152047 N2OFL Karen +3152048 N9UNX Chad +3152049 W7PHX Ronald +3152050 N6KZW Paul +3152051 KE4TLC Paul +3152052 W5ETT Kent +3152053 KB1PSB Colin +3152054 N1NUG Robert +3152055 W0LQ Stanley +3152056 W8VHS Vern +3152057 AC1IC Luis +3152058 KC6SST Kenton +3152059 KM4RWO Larry +3152060 KM4JB John +3152061 KC8WUX Michael +3152062 WA7AQH Donald +3152063 N7GCO James +3152064 K5LMB Larry +3152065 KN4YCT Rebecca +3152066 AG7MU Billy +3152067 KJ7IWO Edward +3152068 KI5BWX Sharon +3152069 KC3MHO Michael +3152070 KC1GDO Vincent +3152071 KN6CVR Benjamin +3152072 K4SCR Nicholas +3152073 KG7AIM Benjamin +3152074 AA7RS Ralph +3152075 W6SE Alan +3152076 W4BMO Michael +3152077 KI5BUA Matthew +3152078 K5KIM Kimberly +3152079 KB2DZD Eric +3152080 KK6LMC Carolyn +3152081 KN4FRW Terry +3152082 KE5TAU Lisa +3152083 KE5TAT Jessica +3152084 KJ6HNP Jason +3152085 N3TNZ William +3152086 KN4WWF James +3152087 KB9VPX James +3152088 N8RLC Ryan +3152089 W1KZP William +3152090 N5AVF Andrew +3152091 KE0TIJ Kelly +3152092 W6DNS Dennis +3152093 N6JAK Adam +3152094 AJ6KA Ahmad +3152095 KC9CBX Laris +3152096 KC9IIU Alex +3152097 W7UPS Steven +3152098 KN6COT James +3152099 K8MPW Claude +3152100 WB7TSQ Michael +3152101 KD5YS Houston +3152102 N5MKY Glenn +3152103 KF4CLN Robert +3152104 AG7QW Michael +3152105 N3TNZ William +3152106 AD6WQ Stephen +3152107 KJ4WIA Richard +3152108 W5LD Dennis +3152109 KE5WQA Audrey +3152110 KE0WRC Rodney +3152111 KN4YCY Joseph +3152112 KN4YEH Patrick +3152113 KE0CJQ Michael +3152114 KE8MXW Daniel +3152115 KE0EAH John +3152116 KN4OFJ Jim +3152117 AE4BT Curtis +3152118 KD9LSB Kristoffer +3152119 N2JM Jim +3152120 WE7BEN Benjamin +3152121 KG7SXD Allen +3152122 KN4WYU Ryan +3152123 KN4IGK Jay +3152124 KE4VMQ Bryan +3152125 KN4MPC Dwyane +3152126 KN4RXO Juan +3152127 KM4JBL David +3152128 KB0ORZ Thomas +3152129 KE0SCR Jason +3152130 N1CXW Richard +3152131 KI7LDK Harold +3152132 AG7AD John +3152133 KK4WZR Patrick +3152134 KN4YES Joe +3152135 KI6ADN Michael +3152136 K4HVF Jeffery +3152137 N4BOZ Jason +3152138 KF5LLY David +3152139 KN4YEJ Gabriel +3152140 AC3EZ James +3152141 KN4WBH Randy +3152142 N8MWY Donald +3152143 KB0OZN Mike +3152144 K8IH James +3152145 W6TYD David +3152146 KG4OXO Jaime +3152147 KN4WOU Matthew +3152148 WA4LBN Allen +3152149 KI5GHJ Scott +3152150 KS4ETC Ernest +3152151 KJ4DEM Ben +3152152 WB6DLV John +3152153 KN4RXO Juan +3152154 KE7JOE Russell +3152155 W9BFP Richard +3152156 KG4AUJ Edward +3152157 KN4YCD Jim +3152158 N2WIS William +3152159 N2JP Joe +3152160 WW8DDP Dennis +3152161 K5LAU Adam +3152162 KD4QEK Jeffrey +3152163 KD2SAR Raymond +3152164 N1EBC Jason +3152165 KK4NHY Michael +3152166 KJ7ISN Douglas +3152167 KG7UMO Biff +3152168 WB6WTM David +3152169 KC0WEB Stewart +3152170 KI7FXJ Tyson +3152171 KI7WDC Jon +3152172 K6SMG Johan +3152173 WF1L William +3152174 KM6ZHP Robert +3152175 W7OTL Otto +3152176 KE0WOZ Thomas +3152177 KI7ILG Randall +3152178 KE8MXD Randy +3152179 KN4UCN Bobby +3152180 N4PWS Patrick +3152181 KN4UCN Bobby +3152182 KN4YDY +3152183 KD9NGZ Russell +3152184 KI7HAE Richard +3152185 KI5GIB Alicia +3152186 KD9NGZ Russell +3152187 KC1LWF Chester +3152188 KI5GKM Roger +3152189 WB8OFU Gary +3152190 N0QFH Jeremy +3152191 KC2YXU Ian +3152192 K2IMT Isaac +3152193 WA2NYC Club +3152194 KD8PZV Jack +3152195 KJ6JSF Jayson +3152196 KJ6JSF Jayson +3152197 KD2RDL Glen +3152198 KE5LHC Daniel +3152199 N8FMB Frank +3152200 KC2NXR Paula +3152201 WM7H Donald +3152202 KD9NSC Tavas +3152203 KN4JVH Micah +3152204 W1OYI Bo +3152205 KN4YHM Troy +3152206 K9BZY Noah +3152207 KE0DJK David +3152208 W1OYI Bo +3152209 KD8YYA James +3152210 K2SDJ Scott +3152211 KE0WOZ Thomas +3152212 KF7RNG Clifford +3152213 KK7TEX Timothy +3152214 KN6CTP Steve +3152215 N2MLN Jose +3152216 WH6EPH Gregory +3152217 W0YES Patrick +3152218 NW9M Mark +3152219 KI7QNS Michael +3152220 KC3OBE Susan +3152221 KW4HM David +3152222 KN6EHS Da-Wei +3152223 KE5WHR Trey +3152224 KG5RZT John +3152225 WA4RW James +3152226 KE0WPG William +3152227 KN6EHS Da-Wei +3152228 K6RYW Kevin +3152229 AA2C Paul +3152230 KC9WGN Patricia +3152231 K1ARM Angela +3152232 K1WGU ROBERT +3152233 KI5FRR Ralph +3152234 WL7M John +3152235 KI5FGS James +3152236 KF7SDQ Hedy +3152237 KC1KTC Ant +3152238 KC0DHZ Benjamin +3152239 KB8UFD Michael +3152240 KP4PNP Jaime +3152241 KD9LOF Ken +3152242 KE0WUB Brian +3152243 NP3CK Walter +3152244 KP4IT Jason +3152245 WP4QDH Carlos +3152246 KP4PNP Jaime +3152247 W9AA Hamfesters +3152248 W9AA Hamfesters +3152249 K5APM Alan +3152250 WB8VCR Warren +3152251 KN4GTU Neal +3152252 K5AZZ Kevin +3152253 KP4IT Jason +3152254 KC4MNE Manuel +3152255 KD2DRM Paul +3152256 KN4YID Harry +3152257 NC4LA Charles +3152258 W5DVZ David +3152259 ND0SX Robert +3152260 W6DBI Dean +3152261 KN4WZO Brian +3152262 KI5GLR David +3152263 WA4BLM John +3152264 KI5GLX Anthony +3152265 KD7GUP Christopher +3152266 K2IW Zachary +3152267 KE0WVA Stephan +3152268 K2VTT John +3152269 WB5YNI Samuel +3152270 W5KAV Charles +3152271 KI4ETY Christopher +3152272 KE0WVA Stephan +3152273 N2MLN Jose +3152274 KF5GPQ Jesse +3152275 KD2PGP Richard +3152276 KC9JMD Lars +3152277 KI3T John +3152278 K6EFJ Kenneth +3152279 KM6GMY Bo +3152280 KE8MRQ John +3152281 W2BOY Resat +3152282 N0CAH Elizabeth +3152283 KF5LMS Vernon +3152284 KE8MJJ Oleksiy +3152285 N1VQM Dirk +3152286 KN4WUM Christopher +3152287 KC2YFT Gladys +3152288 KE5QG Wayne +3152289 KC3IT Donald +3152290 N4SCK Robert +3152291 WW1TA John +3152292 N2XIF Anthony +3152293 KN6EHP Anthony +3152294 W4TWG Thomas +3152295 K1GMM Steven +3152296 KN4NIQ Jeffery +3152297 KE8MYL Matthew +3152298 K4BBA Edward +3152299 K2DMC Douglas +3152300 KD2QYU Sergio +3152301 KG4IKT Jeffrey +3152302 N4XIR William +3152303 KD0YGM Jeffrey +3152304 KN4UCZ Dustin +3152305 K0MFJ Brian +3152306 KC1LXW Alexander +3152307 KD2QYU Sergio +3152308 KE8MUW Ronald +3152309 N5MBN Stephen +3152310 AE7JS James +3152311 K8OMS Robert +3152312 WB7CNV Linda +3152313 KI4PMJ Timothy +3152314 KM6KOO Rick +3152315 KS1U George +3152316 KN4VVR Arnold +3152317 KI5GMM Sean +3152318 WB4IPB George +3152319 KB1TBI Kevin +3152320 W7TLC Thomas +3152321 K8OMS Robert +3152322 KN4YEL Charles +3152323 KB2RLB Timothy +3152324 KE8MYJ Renee +3152325 KE0WPR Andrew +3152326 WD5JK John +3152327 KN4YET Sean +3152328 KI7RNJ Brian +3152329 KA3PSK Richard +3152330 KN4YGC Dale +3152331 N3WHJ William +3152332 KK6RNV Kathleen +3152333 K1RKT Roy +3152334 AK7DD Phillip +3152335 K7DWP Daniel +3152336 KD2SCD Thomas +3152337 KN4YAQ Gabriela +3152338 K5COD Ernest +3152339 KJ6WWM George +3152340 KF4IWX Claire +3152341 AG5RP Roger +3152342 KE0WSZ Larry +3152343 K4PGD Gregory +3152344 KM6VLU Ryan +3152345 WF8U Christopher +3152346 KZ4FOX Mark +3152347 KC7BFU Samuel +3152348 KE8MTG Norberto +3152349 W9VG John +3152350 KC3NWA Richard +3152351 KJ7IEG Kun +3152352 KB3ICU Jim +3152353 KG7WWB Jeffrey +3152354 N2QGK Jose +3152355 KK4ZFT Luis +3152356 KD0BWP Lyndell +3152357 K4DBS Douglas +3152358 KF7VOI James +3152359 KF7VOI James +3152360 N8MIJ James +3152361 W0SDK Shannon +3152362 W9PDS Patrick +3152363 KN4WJY Justin +3152364 KN4YFL Charles +3152365 KE0YI John +3152366 W9MI Wayne +3152367 N2QGK Jose +3152368 KD2LPM John +3152369 K1BVK Paolo +3152370 WM9C Jeremy +3152371 K2GSG John +3152372 N5XIE Joseph +3152373 KM6VLU Ryan +3152374 KB4S John +3152375 KD1SM Ralph +3152376 KM7O John +3152377 KK4ZFT Luis +3152378 K4XEM Matthew +3152379 W1BIU Paul +3152380 KD8ZAT Daniel +3152381 W9RCB Rolley +3152382 KM6ZZQ Rob +3152383 KB9RCQ Michael +3152384 WD9AZB Stephen +3152385 K6BEF Brent +3152386 KC9UZW Jason +3152387 N4ZQA Conrad +3152388 K0FYI Robert +3152389 W4JFS John +3152390 KI5CRV Bobbie +3152391 KM4DTT Jose +3152392 KK6TCC Michael +3152393 K3BMT Braeden +3152394 KN6DAM William +3152395 KA7TVM Alan +3152396 KI7JLK Don +3152397 KM6EMR Songbin +3152398 KK4REC Noel +3152399 KN4YED Joseph +3152400 NL7XT Lowell +3152401 K3DCA Cameron +3152402 N4OXX David +3152403 N4OXX David +3152404 AD7MY Ralph +3152405 KD9MCB Robert +3152406 K4KZR Kenneth +3152407 N4UCO Gerald +3152408 WA1QCE Ronald +3152409 KN4YMM Bart +3152410 KC3OBO +3152411 K4NPZ Bobby +3152412 WB4PPW Jesse +3152413 KC0RZK Robert +3152414 KI7MYY Patricia +3152415 NE1Y Victor +3152416 N7SAC Scott +3152417 KN4YLO Antonio +3152418 N0YPW Jeremy +3152419 W1JSB Johann +3152420 KN6DWY Brian +3152421 N3EUS Scott +3152422 KN6EIE Matthew +3152423 KC9NFL Justin +3152424 KA2YED Angel +3152425 KD2OMQ Thomas +3152426 KB9UZK Carrie +3152427 KN4YLO Antonio +3152428 K6TEK Jerrod +3152429 KB9NFV Ryan +3152430 KN4POP Steven +3152431 K0ESQ Jesse +3152432 KM6MEF Gary +3152433 K7QCK James +3152434 N0WJN Arin +3152435 KG5PTQ Timothy +3152436 N8FN Donald +3152437 KC2MUY Paula +3152438 W5RRR Johnson +3152439 KD9NIV John +3152440 KF5CS Stephen +3152441 KC4ZRE Ralph +3152442 WD5CXX Ryan +3152443 N0RTD Joseph +3152444 KM6WZP Brandon +3152445 KN4VZW Joseph +3152446 KV8DER Mattlock +3152447 K1HG Raymond +3152448 W2RIK Rik +3152449 NT4TH Todd +3152450 N8TWJ Jeremy +3152451 WB9GNC Mark +3152452 KI7UIN Bryce +3152453 KI4YWQ James +3152454 W0LTC Ernest +3152455 KE0WNL Michael +3152456 KB3VAJ Dominic +3152457 K5FRT Garner +3152458 KC8ACO Leon +3152459 KC8ACO Leon +3152460 KN4YNW Nicholas +3152461 K8DIT Luis +3152462 KG5STP Thomas +3152463 W3ICF Phillip +3152464 N8TWJ Jeremy +3152465 KC6RZW Cornelius +3152466 KA9GRY Alan +3152467 KA2PUN Matthew +3152468 AI4DH David +3152469 N4TW Ted +3152470 KG7HEF Tyler +3152471 KN4YDZ Noah +3152472 KE0EBY Alan +3152473 KB9ZDS Andrew +3152474 W5PPP Jack +3152475 N4AEB Anthony +3152476 WB0YX Jeffrey +3152477 AG5QF Young +3152478 AE6DS Dale +3152479 AC3EY Eric +3152480 KD8ROT James +3152481 W3ISR Alan +3152482 WB8SAR Midland +3152483 KB9AH James +3152484 KE0WQI Ryne +3152485 KJ3EPN Brian +3152486 KD8WIL Jeffery +3152487 AA1WA Prabhasadanam +3152488 KC3NVS James +3152489 KC3OCD Phillip +3152490 W6GEZ Anthony +3152491 WA6DIJ James +3152492 KM6GMY Bo +3152493 KD2DOE Simon +3152494 N0EC Ronald +3152495 KJ4IAM Roderick +3152496 W7HPM Ron +3152497 KD9NIV John +3152498 KN4TZC Justin +3152499 KB3HXA Kenneth +3152500 WA6DIJ James +3152501 WA7VFQ James +3152502 N5YFT Heath +3152503 K4ZNO John +3152504 KD2QQP Brian +3152505 W1TLK John +3152506 KA8T Steven +3152507 KG4YYY Curtis +3152508 KD2RBM Glen +3152509 N0SR Gerald +3152510 KA6GWF Lewis +3152511 N3DHR Daniel +3152512 WX4AJM Austin +3152513 KC1ATW Dong +3152514 KP3DA None +3152515 K7AEZ Douglas +3152516 W1TMC Thomas +3152517 KI7TAV David +3152518 KC3OCA Daniel +3152519 K4KQX Raymond +3152520 KD2SRK Peter +3152521 KE6MVS Chi +3152522 KE4JMJ Brian +3152523 KN6EOB Michael +3152524 KB8UTM Jerry +3152525 KD8MKW Jeff +3152526 KE6MVS Chi +3152527 N1NMW Ian +3152528 K1LOU Louis +3152529 W7TBE Rob +3152530 KI4NCT Robert +3152531 KG5PVQ Scott +3152532 K9RGF Robert +3152533 W4DKW David +3152534 AD7LO Douglas +3152535 KN4LYG Stephen +3152536 KG7NTO Erin +3152537 KI5GNL Ron +3152538 K1LOU Louis +3152539 WB6KWJ John +3152540 KI5MM Lee +3152541 KA1YSA Robert +3152542 KI5MM Lee +3152543 KN4NGD Caleb +3152544 N9NLC John +3152545 KI5GNL Ron +3152546 KE8JWE Victor +3152547 KN6ECD James +3152548 KK6JDA Jade +3152549 W2GFJ Kurt +3152550 KD9LTL Kenneth +3152551 KC6KZX Eric +3152552 KM4WBW Louis +3152553 KN4YHO Hubert +3152554 W2GFJ Kurt +3152555 KE4GWW James +3152556 KE4GWW James +3152557 W3PRL Paul +3152558 W3LR Donald +3152559 KX4CF Gary +3152560 N0NUV William +3152561 N0NUV William +3152562 W6KLF Kevin +3152563 N6SKI Robert +3152564 KN6EOB Michael +3152565 KD2SQP Christopher +3152566 N2LDV Leonard +3152567 KD2SQP Christopher +3152568 W8FLH Adam +3152569 K5RLH Robert +3152570 K4VHX Victor +3152571 KF4OKI Joyce +3152572 N9BH Bruce +3152573 W6MGV Marc +3152574 W6CRC Ron +3152575 AF6MQ Scott +3152576 AJ1S Andrew +3152577 KC1LPP Timothy +3152578 KG6NYY Ronald +3152579 W4IMM Michael +3152580 KA0NSO Frank +3152581 KC1GHR Christopher +3152582 KJ7FZC Joshua +3152583 W4CNA John +3152584 KE4SUL Darin +3152585 KF4NHM Michael +3152586 KD8THQ Joshua +3152587 WD9E Daniel +3152588 N0SR Gerald +3152589 W4CNA John +3152590 KZ4FLL Barry +3152591 N7WEM Thomas +3152592 KI5GJK Daniel +3152593 KE4VCF James +3152594 NI9DX Leslie +3152595 KD2NFO Ian +3152596 KD2NFO Ian +3152597 KD5RXP Brian +3152598 W0SVS Robert +3152599 KD1MU Gregg +3152600 KD2RBM Glen +3152601 KD9MSX Mark +3152602 KB4NUC John +3152603 W5PYR Edward +3152604 KA0VWC Gregory +3152605 K2VNT Jeffrey +3152606 N1YNY Peter +3152607 KN4OHX Joshua +3152608 KE0OPY John +3152609 N1BBM Gilbert +3152610 KG5PDF Jake +3152611 N1LIU William +3152612 KD9NXG Patrick +3152613 W5EKG Daniel +3152614 KG7WRK Brian +3152615 K1RKT Roy +3152616 KI7DPE Brad +3152617 K6JGW Justen +3152618 AB3PU William +3152619 N2LEB William +3152620 KE0WHA Wesley +3152621 N8BAR Brian +3152622 KJ4UHF Jack +3152623 KE0KEL James +3152624 KK6VNO Jay +3152625 WP3JO Airangel +3152626 WB5LFS Marcus +3152627 KJ7JAW Benjamin +3152628 NR3H Kevin +3152629 W5DGR Oleg +3152630 KI0GU Hauns +3152631 K6MW Michael +3152632 KC2UGI Stuart +3152633 KI6LAT Quinn +3152634 W2LJ Lawrence +3152635 KE7AV Douglas +3152636 KD8JQG Brian +3152637 KF7SIW Austin +3152638 NG2G Mark +3152639 KG5ZAU Heidi +3152640 N7YXQ Matt +3152641 KB4BOQ Dan +3152642 K6MW Michael +3152643 W0CTS Troy +3152644 W5LPG Lafourche +3152645 AE6XO Richard +3152646 AA3HD Anthony +3152647 KD4JQX Joel +3152648 KF5HHC John +3152649 WA8CCU Alfred +3152650 KC3NVS James +3152651 WA5GXP Ira +3152652 N9JH Dale +3152653 W1CA George +3152654 KM6MEF Gary +3152655 KC3CDV James +3152656 KJ7HYR Darren +3152657 KA7SGQ Clayton +3152658 KJ0EEP James +3152659 KE0WWY Lorna +3152660 KN4VAE Joseph +3152661 KD7YTJ Bradley +3152662 N5RWF Richard +3152663 KN6EFX Vijay +3152664 KD9NUX Michael +3152665 KK6SFM Ronald +3152666 KN4KGD Samuel +3152667 W6XTR Paul +3152668 W7WSL Weston +3152669 KF5QGD Frank +3152670 KD4GCF James +3152671 KN4VVA Richard +3152672 KB0MCS Matthew +3152673 W8RBD Robert +3152674 KE7KER Robert +3152675 KK6AOT Ron +3152676 N2VJV Howard +3152677 N2DEQ Michael +3152678 KD8YOW Roland +3152679 K3QY Fort +3152680 KJ6JVH Mark +3152681 W8NRD Bryan +3152682 KC5C Colton +3152683 KA9YHU Adam +3152684 KG5DEA Gary +3152685 KJ7JFF Jeff +3152686 KM6MJI Barry +3152687 KE8NAM Kirk +3152688 KE0WWS Alexander +3152689 KN4YQP Dustin +3152690 KI7DPF Julie +3152691 K9BBN Michael +3152692 WO0DEN Steve +3152693 KD9NXZ Brian +3152694 N6TNI Danny +3152695 K5RIC James +3152696 WB3KGT Anthony +3152697 K9AQ Donald +3152698 KJ6QEQ Joel +3152699 K5RIC James +3152700 KJ7JDD Scott +3152701 WA3VDJ David +3152702 AG5WT Johnnie +3152703 KM6PNU Rudy +3152704 KD2STC Michael +3152705 KC1LXX Nathan +3152706 N7EGY Dennis +3152707 KG7BCC James +3152708 AD4RM ROCO +3152709 N1DMZ Seth +3152710 KA5MAC Micah +3152711 K0FET Lawrence +3152712 KL2HF Kenneth +3152713 KC1KBF Joshua +3152714 W2SJ Robert +3152715 KF8YK Eric +3152716 AA9HM Marc +3152717 KB8ZIO Arthur +3152718 KN4KDD Robert +3152719 KJ7JFZ Kevin +3152720 KN6EHL Krzysztof +3152721 KB8ZIO Arthur +3152722 KG7YOD Ryan +3152723 KO4Z Robert +3152724 KD2JSM Steve +3152725 KK4UJX William +3152726 W9DPC Donald +3152727 N3MRB Bernadette +3152728 AG5WG Miguel +3152729 KD9NXF Miroslav +3152730 KJ4CZR Donald +3152731 KG5MG Harold +3152732 KI0GU Hauns +3152733 KD5GKH Kenneth +3152734 W9NLU Tomokazu +3152735 KJ4SKB Jeremy +3152736 KN4JNT Gerard +3152737 KD9HZZ Darren +3152738 KG5ZAU Heidi +3152739 KD2PIH Barbara +3152740 KN4KDD Robert +3152741 KD2GIY David +3152742 N7UJU Christopher +3152743 KN4YLB Christopher +3152744 KN4YOG Jason +3152745 KC1KBF Joshua +3152746 W7VAN Jerry +3152747 W7WND Michael +3152748 K9DTF Charles +3152749 KN6EQQ Christopher +3152750 KN4WCG Nathan +3152751 KI5GQX Kevin +3152752 KI5ELK Steve +3152753 KI4CJJ David +3152754 KA9SEY Fred +3152755 KR2JC Russell +3152756 KD8GCN Daniel +3152757 KC1DDM Benjamin +3152758 AB4SL Scott +3152759 KC9BZY Kieran +3152760 W5BRO Thomas +3152761 KG6HJE William +3152762 N6PA James +3152763 WA2IGD Charles +3152764 KG6LJY Scott +3152765 N5JLM Joshua +3152766 KG6HJE William +3152767 N9ZGE Donald +3152768 K6FPV Frederic +3152769 N6HXT Regis +3152770 KN4VKN Michael +3152771 N2XEW John +3152772 N0TKN James +3152773 KM4FPB Christopher +3152774 KD2SXJ Shane +3152775 KD2MAH Stephen +3152776 W5FIX David +3152777 KA9SEY Fred +3152778 KN4OVV Bonnie +3152779 KJ6TAN Shirley +3152780 KM6TFC +3152781 W9DAW Dennis +3152782 KD9NYX Paul +3152783 KN4TIQ Roger +3152784 KN4YRM Randon +3152785 N8OVA Thomas +3152786 N8OVA Thomas +3152787 W0HR Michael +3152788 KI5FYI Michael +3152789 KC3ARQ Barry +3152790 KB5CTM Robert +3152791 W7WND Michael +3152792 KB3EFS David +3152793 WA1SH Pat +3152794 KN4VAV Darrell +3152795 KE0WWV Kevin +3152796 KI5CSC Donald +3152797 KI5AMZ Franklin +3152798 WA1MIC Jeremiah +3152799 WA1MIC Jeremiah +3152800 KD4MPI Robin +3152801 WA4CZD Jill +3152802 K7GUU Robert +3152803 N8DMC Darrin +3152804 KN4YNM Carlos +3152805 KC9GGX Aaron +3152806 KM6IHC Daniel +3152807 N9TJX Jonathan +3152808 KB3EFS David +3152809 N9KFL Max +3152810 KC1GAD Richard +3152811 K0JOH John +3152812 KI5AUR Christopher +3152815 KC7SGP Michael +3152817 KI6WBX Eric +3152818 KF6AVI James +3152819 WI9ARC D +3152820 KD2OHD Genevieve +3152821 KI4TUY Chad +3152822 KI4TUY Chad +3152823 N6ADU Andres +3152824 KG5ODD John +3152825 WD5DNH Gary +3152826 KO6RB Gene +3152827 WD5DNH Gary +3152828 K2KJM Kyle +3152829 KF6PDY Edwin +3152830 K5GRA Jimmy +3152831 N6ADU Andres +3152832 KE0VZP Aubrey +3152833 KM6PNS Karl +3152834 KN4YMG Scott +3152835 KJ6MYP Al +3152836 N7LUS Troy +3152837 KN6EFJ Steven +3152838 KB7RYY Daniel +3152839 KB6CUT Terrell +3152840 KD6PSB Ralph +3152841 N5QVF Dario +3152842 WB0TSG Bradley +3152843 KB5GU Ronny +3152844 N2BMN Ralph +3152845 KD2DJU Shawn +3152846 NB1Z Frank +3152847 N2BMN Ralph +3152848 W2CPO David +3152849 W6REY Reynold +3152850 N3PPH Robert +3152851 KJ6QYN Shelley +3152852 KC8JWT Matthew +3152853 N2FJ Carlos +3152854 KC5TWR Terry +3152855 KB9FQB John +3152856 K4JDA Troy +3152857 KJ7JFE Daniel +3152858 KC7ZUH Scott +3152859 KK6KTQ Kenneth +3152860 K5APM Alan +3152861 KF4AXE Louis +3152862 KD8AVB Joseph +3152863 KJ7HRC Jonathan +3152864 KM6ZNX Thanasis +3152865 KA5IPF Clifford +3152866 KI5GBN William +3152867 KA5IPF Clifford +3152868 KD2HLK Michael +3152869 KN4YJK Christopher +3152870 N9LVP Janet +3152871 KN4URY Joseph +3152872 N3RSE Anthony +3152873 K4BTA Luis +3152874 N7SGT Richard +3152875 KC4ECR Britt +3152876 K0CV Carl +3152877 K7YPH Cliff +3152878 KE0JDN Robert +3152879 K9CLD Christopher +3152880 KE0JDN Robert +3152881 KC5PCS Boliver +3152882 K8SIX Albert +3152883 KC1LZV Adrian +3152884 AG6NB Jon +3152885 W0QS Richard +3152886 KC3NGH Guy +3152887 K7GGM Raymond +3152888 N6MRB Michael +3152889 KC6CHL Jorge +3152890 W3LWH William +3152891 WA4NVI Reid +3152892 KM6PNT Chuck +3152893 WD6FGB Lawrence +3152894 KF5ZRT Gary +3152895 KC0WNG Douglas +3152896 KB8PLT James +3152897 KJ7JIP Jim +3152898 KF5VLZ Robert +3152899 K6ET Jae +3152900 KC3NRQ Daniel +3152901 W5TKO Torence +3152902 N5BIL William +3152903 K5FQ Al +3152904 N0HQG Harry +3152905 N1EP Philip +3152906 KI5BZO Eric +3152907 KC4YNB James +3152908 KU4DE George +3152909 KD9LBL Cianan +3152910 N8CCQ Matthew +3152911 KN1VES Robert +3152912 KD2SND Brian +3152913 N1RTS Robert +3152914 N1RTS Robert +3152915 KD8HAG Timothy +3152916 AC9LP Robert +3152917 KE0WSR Micah +3152918 NI8S Charles +3152919 K4HEW Joseph +3152920 N3JYD Brian +3152921 K3RRY Kerry +3152922 N9XCO Richard +3152923 AC9LP Robert +3152924 KD2SSB Henry +3152925 KI5EYA Cody +3152926 KB0XT Robert +3152927 WA4SWF Curtis +3152928 KD9NXJ Jacob +3152929 KC3NTJ Thomas +3152930 WL7KV Gary +3152931 KF4VAH John +3152932 KJ7JIP Jim +3152933 KD0WAQ Peter +3152934 KJ7IKG Brian +3152935 AJ6JA Jonathan +3152936 KM6OTQ Charles +3152937 KE0WUL Brant +3152938 WX4DRG Casey +3152939 W4BTW Joel +3152940 N9DVD Branden +3152941 KC3ARL John +3152942 KU4DE George +3152943 W5RJM Rudy +3152944 KM6YDJ Andrew +3152945 KJ7BCF Claudio +3152946 K4PMD Philip +3152947 KJ7JJG Luis +3152948 KC1KUP George +3152949 N6ROQ Kent +3152950 WA3UFN Bryan +3152951 KJ7JJG Luis +3152952 KE8DAF Gregory +3152953 WA3SRU Joseph +3152954 KM6TES +3152955 N1OHM Leo +3152956 AD5DJ THOMAS +3152957 WB2ONA Warren +3152958 N4GSP Bryan +3152959 KK4JJL James +3152960 K6WBC Seng +3152961 AJ6ME Harry +3152962 KD0RHA Tyler +3152963 KI6KSV William +3152964 KN4M Kevin +3152965 KA0WJZ Robert +3152966 KD0NT Lee +3152967 N0FVF Judith +3152968 WD4SEY John +3152969 KD0DKS Benton +3152970 KN4SSR Brandon +3152971 KX6S Rudy +3152972 K5WGB William +3152973 N5DWB Darlene +3152974 KI6WGK Christopher +3152975 KE0WSF Luke +3152976 W9DLP Dave +3152977 W9WIN Club +3152978 KI7HCU Ronald +3152979 KE0WZC Jaymy +3152980 KE0WZD Earl +3152981 WA9U Alva +3152982 K4WHL William +3152983 KN4YWO Fred +3152984 KC3Z Lance +3152985 K6FPV Frederic +3152986 N7TE Les +3152987 KI5GTH +3152988 KD9NTR Robert +3152989 K4WHL William +3152990 KM6KIW Robert +3152991 WA0US Robert +3152992 KM6MDF Thomas +3152993 K7YWT Tye +3152994 N0FRK Craig +3152995 KC5ILO Thomas +3152996 KC5ILO Thomas +3152997 KD9NYQ Steven +3152998 KC9KRB Patrick +3152999 K7MR Robert +3153000 KE8MYN James 3153001 KD7AKB Chris -3153005 W7DME David +3153002 N0TN Steven +3153003 W6OOM Eric +3153004 KF6SFC James 3153006 KK7TR Andrew +3153007 KI5GTR Frederick 3153008 W2IO Robert 3153009 KG7CDH Michael 3153010 K7RHM Rob 3153011 K7RHM Rob -3153012 W7DME David 3153013 K7MJE Mary 3153014 K7RED Bruce 3153015 K7RED Bruce @@ -93594,7 +122357,7 @@ 3153125 KE7SSS 3153126 KE7SST Peter 3153127 KE7SSU Liz -3153128 AB7MR Steven +3153128 AB7MR Steve 3153129 AB7NI Gary 3153130 KG7SKB Jeff 3153131 AF6FR Mark @@ -93620,7 +122383,7 @@ 3153151 AA9AR Juan 3153152 AA9AR Juan 3153153 KG7DVO Rex -3153154 KE7JIM James +3153154 KE7JIM Jim 3153155 KC7HTL Chris 3153156 AD7BF Eric 3153157 KA7BZA Kurt @@ -93675,7 +122438,7 @@ 3153206 KE0CO Brian 3153207 N7MTC Bill 3153208 KI7FKL Anthony -3153209 N6ZO William +3153209 N0LT William 3153210 AA7US John 3153211 AF7NZ Piotr 3153212 W0WME James @@ -93738,15 +122501,18 @@ 3153269 N7UIC Michael 3153270 KE8AAJ Dan 3153271 N7CDM Cecil +3153272 W7ZI Michael 3153273 N7AHE Gregory 3153274 KG7THL Brian 3153275 W7FAQ Mary 3153276 W7QA Robert 3153277 KE7GBT Brian +3153278 KN0WN Brian +3153279 KC1ENG Jason 3153280 K6WLF Robert 3153281 KI7BKK James 3153282 W7CEB Charles -3153283 W8JLV James +3153283 W8JLV Jim 3153284 W5RZG John 3153285 N7ESI David 3153286 KE7LSS Kevin @@ -93773,12 +122539,12 @@ 3153307 N3KPU Mike 3153308 KI7DMJ Leeray 3153309 AG7S Raymond -3153310 KE4EWB Abigail +3153310 AA4ZM Abigail 3153311 W7NDN Daniel 3153312 WA7ZUS Michael 3153313 K7ZVV Seth 3153314 W6DLM Donald -3153315 W7PAN Lawrence +3153315 W7PAN Larry 3153316 KA7FVV Scott 3153317 KB7GP Dave 3153318 N7WPM Joshua @@ -93807,8 +122573,8 @@ 3153341 KG7WGY Cody 3153342 N7BMX Dan 3153343 W1JDB Jonathan -3153344 NA7Q Michael -3153345 NA7Q Michael +3153344 NA7Q Mike +3153345 NA7Q Mike 3153346 KF7QNM Joshua 3153347 KF7SCN Jonah 3153348 K7ZXO Christophe @@ -93827,12 +122593,15 @@ 3153361 N7DDC David 3153362 N7TAU Monte 3153363 K3ISI Amelia +3153364 KD9NZG Jeffrey 3153365 AJ7MH Michael -3153366 KI7JLL Charles +3153366 KI7JLL Chuck 3153367 KJ7YL Stephen 3153368 KJ7YL Stephen +3153369 KD2SUJ Jason 3153370 W7FED Neil 3153371 NO0D Christopher +3153372 W7LAL James 3153373 KG7LNZ Whit 3153374 KG7QJD Marc 3153375 KG7QJD Marc @@ -93850,7 +122619,7 @@ 3153387 KF5VTH William 3153388 KF5VTH William 3153389 KA7RRA David -3153390 KE7ZMA Stephen +3153390 K7NUP Stephen 3153391 WP4KUW Fernando 3153392 KI7JFU Randall 3153393 KJ7TY Michael @@ -93859,7 +122628,7 @@ 3153396 KC7SND Teresa 3153397 W7FED Neil 3153398 KD7ZMC Morgan -3153399 KE7EVP Michael +3153399 KE7EVP mike 3153400 N0NLC Toni 3153401 WD4KAV Joseph 3153402 W9JMB John @@ -93906,6 +122675,7 @@ 3153443 WL7CES Timothy 3153444 N6HTY Michael 3153445 WL7CES Timothy +3153446 KC1LXW Alexander 3153447 KI7ATZ Peter 3153448 WA9ONY David 3153449 KG7RTQ Catherine @@ -93921,8 +122691,14 @@ 3153459 W7UFI Les 3153460 KG7LAA James 3153461 KG7LAA James -3153462 WA7JH James +3153462 WA7JH Jamie +3153463 WB9RPL Chuck +3153464 KB2UZY Bryan +3153465 K1NIN Darin +3153466 KE4VMU Joe +3153467 KX4TH Vladislav 3153468 AE7TD David +3153469 N2NGO Carlos 3153470 K7RGK Ryan 3153471 AE7GZ Jeffrey 3153472 WA7ZWG Robert @@ -93950,10 +122726,11 @@ 3153494 NC7Q Michael 3153495 KC1CYT Robert 3153496 KF7UDP Steven -3153498 KC9AD Christopher +3153497 KD9MBB Micah +3153498 KC9AD Chris 3153499 AE7HP Thomas 3153500 KI6LWC Diana -3153501 AB7MR Steven +3153501 AB7MR Steve 3153502 KC7GX Doyle 3153503 AE7HP Thomas 3153504 N7LNS Robert @@ -94012,11 +122789,13 @@ 3153557 WA2BFW Marvin 3153558 AG6IE Eric 3153559 KI7JXL Mark -3153560 N7BIT Billy +3153560 AG7VI Billy 3153561 WB7DOB Bruce +3153562 KN6DJM John 3153563 AF7LT Chris 3153564 KE7AKX Matt 3153565 N7UFK Richard +3153566 KN4SZZ Robert 3153567 AG7GJ Richard 3153568 AF7PQ Monte 3153569 AG7ID Jeffrey @@ -94039,6 +122818,7 @@ 3153586 KD7BBJ Wiley 3153587 KE7UIU Jason 3153588 KI7PXF Chad +3153589 K7XRL Ronald 3153590 KE7FBE Lorne 3153591 KF7EEL Eric 3153592 N5SVT Stanley @@ -94079,16 +122859,17 @@ 3153627 NN7P Joshua 3153628 N7WJC David 3153629 K7SCN Mark -3153630 KD7DK Douglas +3153630 KD7DK Doug +3153631 KC1LYV Wylie 3153632 KC9GWK Edward 3153633 KI7ACA Matthew 3153634 WA7WSP Danny 3153635 K3IVL Jonathan 3153636 KJ7P Christopher 3153637 KI7LJU Chung -3153638 KD0FFP James +3153638 WW0O James 3153639 KG7HQ Michael -3153640 KI7JLL Charles +3153640 KI7JLL Chuck 3153641 N7UFK Richard 3153642 AE7TD David 3153643 N7JCW Jane @@ -94129,12 +122910,15 @@ 3153678 W7KLM Kerry 3153679 KI7SBI Dylan 3153680 WJ7H Wayne +3153681 N8YM Michelle 3153682 KI7SBI Dylan 3153683 AD7UF Charles 3153684 KC7UG Thomas 3153685 KF7MOA Ryan 3153686 KC7IAY Bruce 3153687 K7JB Ren +3153688 KN4YYV Aaron +3153689 KB9RCV Christopher 3153690 N7JP Jack 3153691 WB7WSP Mark 3153692 KI7SIZ David @@ -94143,6 +122927,9 @@ 3153695 W7HEE Harry 3153696 KB7HDX Mark 3153697 W7RCC +3153698 WA1POX Stephen +3153699 N8GZ David +3153700 KI5BXL Festus 3153701 KE6QHY Joe 3153702 AG7EY Kirk 3153703 W7CDE Greg @@ -94154,6 +122941,7 @@ 3153709 KI7MVY Kevin 3153710 KI7SZZ Toby 3153711 KE7W Peter +3153712 KC1ENG Jason 3153713 KK6BBI Steve 3153714 N7BUK David 3153715 KG7IEN Greg @@ -94162,21 +122950,23 @@ 3153718 KE9Q Marlena 3153719 KG7HZT Jeffrey 3153720 KG7BPX Gerald -3153721 KB7QFZ John +3153721 KC7JPC John 3153722 W7WHX David 3153723 KI7EST Val 3153724 N7PB Paul 3153725 N7PB Paul -3153726 KB7QFZ John -3153727 WA4BDY Ronald +3153726 KC7JPC John +3153727 K7VP Ronald 3153728 KG7VG Kelly 3153729 WA7TBP George 3153730 NC7Q Michael +3153731 AI6HH Josh 3153732 KI7TAZ Desmond 3153733 KI7TAZ Desmond 3153734 KE7TJK Michael 3153735 W7NSI James -3153736 KI7QPJ Jake +3153736 N7GEG Jake +3153737 AD4RM ROCO 3153738 KD7MUK Aaron 3153739 N7GJW Scott 3153740 KI7LPN Junzhuo @@ -94184,7 +122974,7 @@ 3153742 KG7JWW Joseph 3153743 KD7NER Christopher 3153744 K7GJT Gary -3153745 WB7SKI Christopher +3153745 WB7SKI Chris 3153746 KI7CBA Christopher 3153747 AG7LF Eric 3153748 KM7LJ John @@ -94194,15 +122984,16 @@ 3153752 W7AMN Robert 3153753 KI7SHE James 3153754 KC7AF David +3153755 N7BNR Larry 3153756 K7TBM Tom 3153757 KE6VCT Stephen -3153758 KI7JLK Donald +3153758 KI7JLK Don 3153759 N7RZR Jon 3153760 KE7LFY Paul 3153761 KI7TRR Casey 3153762 W7WHX David 3153763 KI7TRU John -3153764 KD7X William +3153764 KD7X Willie 3153765 KF7WKV Douglas 3153766 KE7LFY Paul 3153767 K4RNT Alexander @@ -94256,16 +123047,17 @@ 3153815 WB0SRJ Richard 3153816 KG7KPX Jeff 3153817 KG7QVP William -3153818 KI7NHO Jeffrey +3153818 W7GPG Jeff 3153819 KI7CMU Larry 3153820 KF7LLA Craig 3153821 N7JP Jack 3153822 W7INK Richard +3153823 KI5GJR Harlan 3153824 N6NR Richard 3153825 KB7ST Dennis -3153826 N9LCK Christopher +3153826 NK9W Christopher 3153827 AB9GY William -3153828 N9LCK Christopher +3153828 NK9W Christopher 3153829 AF9W Bob 3153830 W5UMQ William 3153831 K2AMF Neil @@ -94300,7 +123092,7 @@ 3153860 WA7C Donald 3153861 KJ7V Roger 3153862 KI7MMY James -3153863 KI7JS James +3153863 KI7JS Jay 3153864 KG7PIV Michael 3153865 W7JFJ William 3153866 K2IND Pareekshit @@ -94310,6 +123102,8 @@ 3153870 N2MSU Jayne 3153871 KG7CHJ Rashed 3153872 N8DB Douglas +3153873 KJ6RPF Gregory +3153874 W4CMG Catherine 3153875 KI7QCL Samuel 3153876 K7RBC Richard 3153877 KG7WRX Donna @@ -94319,6 +123113,8 @@ 3153881 N6DJM Douglas 3153882 KI7VRH Adam 3153883 K7BA Donald +3153884 KD5EBZ Jeffrey +3153885 AJ6DU Ted 3153886 KA7HRR Linda 3153887 KD7SPO Rodney 3153888 W7NCX David @@ -94333,32 +123129,113 @@ 3153897 K2IND Pareekshit 3153898 W0WKT Kaydell 3153899 KC7FBN Rob +3153900 KB9LMJ Travis 3153901 WB6AWO Richard 3153902 N7RHW Lindsay 3153903 K6WLF Robert 3153904 KC0EVP Mike -3153905 KI7WLL Mark -3153906 KI7WLL Mark +3153905 K6MCZ +3153906 K6MCZ +3153907 KI4GVR Kerry +3153908 KI5CEG Rosemary +3153909 KB9LMJ Travis 3153910 KF7YCE John 3153911 KF7WKV Douglas 3153912 KC7VQR Rodney -3153913 WB7SKI Christopher +3153913 WB7SKI Chris +3153914 KJ4VZT David 3153915 KG7RJJ Tuomas 3153916 KC7IRH John 3153917 KC7IRH John +3153918 K8RTR William +3153919 N0FRK Craig +3153920 KI7KIM Scott +3153921 W2MTD Matt 3153922 AF7YT Timothy 3153923 W7BSD Tracy +3153924 KE0RFZ Benjamin +3153925 WD8JTJ Wesley +3153926 W4GX O 3153927 KC6FJO Ronald 3153928 KA7FVV Scott +3153929 KB0YNR Shirliana +3153930 WH6GBX 3153931 KF7FYN Mark +3153932 WA4URF Lee 3153933 KI7WGY 3153934 K0KAD Chad +3153935 KC1LZV Adrian +3153936 KJ4IYZ Kevin +3153937 KE8KWV Glenn +3153938 KA8ENB Michael +3153939 WW1CAT Michael +3153940 KN4WRE Ryan +3153941 W1DTH Mike +3153942 KE0WZI Timothy +3153943 KA5VVD Robert +3153944 KA6ETE James +3153945 KN6DQB Joe +3153946 KN6EGE Joshua +3153947 N6HMR Gary +3153948 KJ7JGL Jason +3153949 KE8LIY Nicolas +3153950 K5GDN George +3153951 KN4VXN Matthew +3153952 KG5JVM Joshua +3153953 KJ7JFA Stephen +3153954 KN4YRL Nelson +3153955 W1WMJ Howard +3153956 KD9NZE Camden +3153957 KM6SVQ Thomas +3153958 W9SNE Timothy +3153959 WA3EHD James +3153960 KN4GML Niklo +3153961 WB7CON Susanna +3153962 AA1UI Douglas +3153963 KE0TYO Nicholas +3153964 N2SKY SkyHub +3153965 N0GP Mark +3153966 KE7ONX Steven +3153967 K6HMS William +3153968 KA4CSM Michael +3153969 KD8ROT James +3153970 N1AMP William +3153971 KJ7INO James +3153972 WA6TOZ Jeff +3153973 K0MGF Rolland +3153974 W0RTB Robert +3153975 KJ4SAJ Daniel +3153976 W7SGD Scott +3153977 KP4IA Antonio +3153978 KP4IA Antonio +3153979 N5KIR Raymond +3153980 K2MPW Michael +3153981 KC3EZP Justin +3153982 KG0ZR Monty +3153983 N6SL Stephen +3153984 KN4YNB Ethan +3153985 KD2SRX Johnny +3153986 KC9ETS Paul +3153987 W1DDR Cameron +3153988 WX5USN Earl +3153989 KN4YEB Alexander +3153990 WA3DRC Edward +3153991 WB4CPJ Rick +3153992 W3GAD Donald +3153993 AC3EU Clifford +3153994 KB3NMV Gregory +3153995 W1ABC Peter +3153996 N6CPN Charles +3153997 K3JJZ Elliott +3153998 W2BOY Resat +3153999 KG7RQL Dan +3154000 KG5RVF Bobby 3154001 WV8VFD Tyler 3154002 WB3JPB Bruce 3154003 WB8WKO Mike 3154004 KC8AJH Douglas 3154005 N8FMD Dick -3154006 W8LG Gregory +3154006 W8LG Greg 3154007 N8LVE Mike 3154008 N8ZVA Tim 3154009 W8VT Ed @@ -94415,6 +123292,7 @@ 3154060 KC8PRG Aaron 3154061 KC8PDP Aprile 3154062 WV8SAR Ryan +3154063 KN4YEB Alexander 3154064 NA8E Paul 3154065 KD8JLM Jimmie 3154066 N8YZU John @@ -94492,8 +123370,10 @@ 3154138 N8ILO Donald 3154139 N8ILO Donald 3154140 K8DLT Danny +3154141 N3FVP Gerald 3154142 K8WBS William 3154143 KE4WVU Floyd +3154144 KN4CDM John 3154145 N8FSM Mark 3154146 KC8LTG Charles 3154147 KD8SUY Charles @@ -94513,6 +123393,7 @@ 3154161 N8QJL Darla 3154162 KE8EWP Charles 3154163 KE8ERA Lance +3154164 KM6KUB Stephen 3154165 KB8PIC Larry 3154166 W8DEB Debbie 3154167 KE8CSD Clifton @@ -94553,7 +123434,6 @@ 3154202 WA4WVU Aaron 3154203 WG8D Douglas 3154204 KE8EKJ Robert -3154205 N8DJR David 3154206 KJ8D Gary 3154207 KF4TNX Charles 3154208 KB8QXP Colin @@ -94579,7 +123459,7 @@ 3154228 N8GXF James 3154229 KE8HSL Donald 3154230 KE8FYS Isaac -3154231 KE8IEA Gary +3154231 K8GDG Gary 3154232 N7WV Samuel 3154233 KE8DCG Blaine 3154234 KE8DCG Blaine @@ -94606,6 +123486,7 @@ 3154255 K2WWC Raymond 3154256 K8MAN Maurice 3154257 KE8FHQ Oliver +3154258 K2KJ Lloyd 3154259 K8ELS William 3154260 KD8CRW Paul 3154261 K8SOB Michael @@ -94615,6 +123496,735 @@ 3154265 N8SRT Lance 3154266 WV8GNH Gregory 3154267 N8NLM Jeffrey +3154268 KN4ZBG Peter +3154269 KD2SUR Igor +3154270 KN4YWQ Ethan +3154271 KD8RWO Christopher +3154272 KD7LA Marshall +3154273 KD9AWQ Nick +3154274 AC1AZ Cory +3154275 KA4JGN George +3154276 KM6QFM Kraig +3154277 KJ7JMH Carrie +3154278 KM6KUB Stephen +3154279 KJ7JMH Carrie +3154280 KJ7PLR Daniel +3154281 KN4YMM Bart +3154282 KK4GRT Stephen +3154283 KI7OAE Alvin +3154284 KJ7AVX Nick +3154285 KL0YO Patrick +3154286 KJ7JED Tamra +3154287 KP4LAW Pedro +3154288 KP4MSR Manuel +3154289 KG5YXA David +3154290 KG5RPV William +3154291 KJ7IXW Stephen +3154292 W4XRY Neil +3154293 KN4ZBZ Thomas +3154294 KD9Z Robert +3154295 KE0YAJ Jordyn +3154296 KN0MAP Dan +3154297 KI6LMI Tyler +3154298 KI5MW John +3154299 KE7ADD Don +3154300 K9YAN Rick +3154301 KN6EWM michael +3154302 KE0WYN Charles +3154303 WQ9F Kevin +3154304 KN4ZBK Keith +3154305 KX4UR Chad +3154306 K6YXH Norm +3154307 W4JCL James +3154308 KE4OHK Travis +3154309 KM4BXQ Jeremy +3154310 N6WTC David +3154311 NE4Q Jefferson +3154312 KG5SKM Andrew +3154313 KB7RR Jeffrey +3154314 KA3FQS Thomas +3154315 WB4CLW William +3154316 KN4YDW Joe +3154317 W0TIS Aiden +3154318 KD9NTQ Graham +3154319 AI6UA Kyle +3154320 AE7KZ Jake +3154321 KD2QLT David +3154322 AE7KZ Jake +3154323 KC8AWR William +3154324 W5RAY Timothy +3154325 KC1FEG +3154326 W7IHJ Michelle +3154327 N0WBJ BJ +3154328 KN6CWX Mark +3154329 N8STI Randall +3154330 W3UI Lino +3154331 K4SPB Adam +3154332 KC1MAV Gil +3154333 W4MWM Marc +3154334 N0NSN Jimmy +3154335 KE8NCZ Nicholas +3154336 KC1MAS Daniel +3154337 N5VZH Alvin +3154338 KN4ZBW Charles +3154339 KN4YBU Michael +3154340 KE8EUX Matthew +3154341 NA4RA Ranford +3154342 W7AMM Alex +3154343 KD2SSH Andrew +3154344 KB0MCS Matthew +3154345 KC0NKB Mark +3154346 KI5GVK Chris +3154347 KE0WSA Clark +3154348 W1FAY Benjamin +3154349 KE8ICG Jeffrey +3154350 W7AMM Alex +3154351 KI7AML Thomas +3154352 KN4VPE Nicholas +3154353 KB1VEM Charles +3154354 N8GGC Glen +3154355 N7RCL Randy +3154356 N2MH Mark +3154357 KD2KHJ Karen +3154358 KE7NHK David +3154359 KC5GGL Robert +3154360 KI4JHB David +3154361 KK7MIK Michael +3154362 W0WHE Garry +3154363 KM6BHV Michael +3154364 KK7MIK Michael +3154365 KN4VPE Nicholas +3154366 N8GGC Glen +3154367 N4WFK John +3154368 W4CZP George +3154369 KD0ZXR Gregory +3154370 N3CEC James +3154371 K5VIT Tony +3154372 W7FTC Richard +3154373 KF4UBK Donald +3154374 KC8BCH James +3154375 WS5Q John +3154376 KK6WLD Gregory +3154377 W6JKL Justin +3154378 W6JKL Justin +3154379 KC8BCH James +3154380 KE0YBQ Cade +3154381 NA6CM CNARN +3154382 KB1SBG Scott +3154383 KC1MAY Rhys +3154384 WP4RBO Antonio +3154385 KD4MDW Ronnie +3154386 KI5GTH +3154387 KE0WYV Lukas +3154388 W3DFP David +3154389 KB3HOV Thomas +3154390 KJ6EAC Brian +3154391 KC9LYB Matthew +3154392 KD9NAL Joseph +3154393 K8CKM Carlos +3154394 KE0WYN Charles +3154395 KI5CEY Aaron +3154396 KN4YND Steven +3154397 K0YY Roger +3154398 KK4YEM Christopher +3154399 KC6UJT Tony +3154400 KN4ZDZ Raymond +3154401 KK5QP Mark +3154402 N1CWV Scott +3154403 KD2STV David +3154404 KC9LYB Matthew +3154405 WD8OMX Michael +3154406 KJ4WYZ Richard +3154407 KC1IVZ Alfred +3154408 KN4YSW Michael +3154409 K5HDM Harmon +3154410 AB8Y Lance +3154411 KN4ZBD Michael +3154412 KN4ZDZ Raymond +3154413 KB8PDU Robert +3154414 KB0EDF Jason +3154415 KM6SJO Kenneth +3154416 N4VZY Eddie +3154417 K8CKM Carlos +3154418 KN4QWY Kevin +3154419 K0CCC Abraham +3154420 KC1KMP Robert +3154421 W4EZD Dennis +3154422 WK1T Matt +3154423 KN4YZP Robert +3154424 KJ7ISH Mark +3154425 KI5GVH Eric +3154426 NP2MR David +3154427 K6IPE Robert +3154428 KD2SVH Angela +3154429 KD2SVI Ronald +3154430 KN4TBZ Donnie +3154431 NE6C Michael +3154432 KG5MRB Robert +3154433 KC2ZFZ Andrew +3154434 KN6EAA Mario +3154435 KJ7AVX Nick +3154436 KG4FUJ Casey +3154437 KM6PTU Julian +3154438 KF5RJQ Michael +3154439 KE8FT Giuseppe +3154440 K7SXC Al +3154441 KB9KTG Matthew +3154442 KJ7ISM Michael +3154443 KN4UDS Joseph +3154444 KE4DYI Patrick +3154445 N6RXT Doug +3154446 KN4VHI Robert +3154447 N1LYC David +3154448 W1JPI John +3154449 K4YBN Phillip +3154450 KD8MEE Brett +3154451 KN4ZDN Ralph +3154452 KM4LKX Joshua +3154453 K0HYT Michael +3154454 KB3LVB Dan +3154455 KD8RIJ Zechariah +3154456 KJ6HVO Danelle +3154457 W4TWG Thomas +3154458 W1WAG Wayne +3154459 K0FE James +3154460 KC0AJY Evan +3154461 KN4ZEG Rick +3154462 KN4ZEG Rick +3154463 KC3ODM David +3154464 KC8VDQ Gregory +3154465 KI6HOB Mark +3154466 KN4ZFM Luke +3154467 KN4WXX Mckenzie +3154468 K3WAR Andrew +3154469 K5PM Arthur +3154470 WA5DKW James +3154471 W5SLR Aaron +3154472 KN4ITA Keith +3154474 KN4ZEI George +3154475 W3UI Lino +3154476 WD8RZA David +3154477 KE0SCX William +3154478 WA1PW Michael +3154479 N1AIZ Jeffrey +3154480 W1ORD Arthur +3154481 K4RMR Ryan +3154482 KI5GVS Christopher +3154483 NM5C Patrick +3154484 N0NNE Todd +3154485 N1OXG Bryan +3154486 N4KMM Sean +3154487 KD2JRK Colton +3154488 W4DFD Roy +3154489 KI6MTG Jamie +3154490 N4SUO David +3154491 WA2FOF Paul +3154492 KN4HWG Kenneth +3154493 K6CNC Sam +3154494 KD2FLS Peter +3154495 N2CV Al +3154496 KN4ZDM Manuel +3154497 KN6ESS Jim +3154498 KJ7JJP John +3154499 N0YJV Opal +3154500 KE0WVO Treyton +3154501 KN6EYA Maximilian +3154502 N7TFM John +3154503 KE0YDX Constantine +3154504 KE0YDX Constantine +3154505 KB8WVK Terrence +3154506 WA1MBA Thomas +3154507 KT6L Vernon +3154508 KE0RQB Debra +3154509 KN4ZHE J +3154510 KE5MTW Rebecca +3154511 KD5LII Jerry +3154512 KE4CWE Charles +3154513 KA2KUH Francis +3154514 KF6HWY Paul +3154515 KB3SCB Richard +3154516 W6MYT John +3154517 WA6HHQ Eric +3154518 K6IYK James +3154519 K1RMR Rick +3154520 K1RMR Rick +3154521 KE4CWE Charles +3154522 W5CLP Christopher +3154523 KE0UNT Jacob +3154524 KN4ZHR Quentin +3154525 KI5FCW Vidya +3154526 KE0UZN Darrell +3154527 WP4PUX Julio +3154528 W6MYT John +3154529 KE6YEP Marcelino +3154530 K6IYK James +3154531 KJ7JSR Todd +3154532 W6EDT Eugene +3154533 KN6EHV Christopher +3154534 WA4WEQ Robinson +3154535 KM6DLE Marco +3154536 KE8JWD Phillip +3154537 KJ6PVR +3154538 KJ7JSR Todd +3154539 KM6DLE Marco +3154540 KE0JMF Isaac +3154541 WS3J Lee +3154542 AK4EM Walter +3154543 WW5CAT Scotty +3154544 KN4ZGK Jason +3154545 KN4ZGL SCOTT +3154546 KE5DZE Loren +3154547 KN4ZEC Stephen +3154548 KC2JKR Edward +3154549 KD9OAZ Gregory +3154550 N3PPD Peter +3154551 KE5SDW David +3154552 W9SBJ Rodney +3154553 W0WXL David +3154554 KI7DMS Daniele +3154555 KC1IB Robert +3154556 K3KFC Jean +3154557 N1MAS Peter +3154558 KF5MTU Ron +3154559 KJ7JQI Michael +3154560 N1ATL Myles +3154561 KE0NAM Jerry +3154562 KG5IID Homar +3154563 WB5FBJ George +3154564 KF5MTU Ron +3154565 N0GWM Leon +3154566 AC4AM Paul +3154567 K5HDM Harmon +3154568 N6SGT William +3154569 K8LEA Stuart +3154570 KN4TXR Shafford +3154571 K1MPR Michael +3154572 N7AOK Ralph +3154573 KD9NXU Anthony +3154574 KM6NWD Joseph +3154575 KD8RTC Joseph +3154576 KE0WSH Kirk +3154577 WA8OWL John +3154578 KI5GPE David +3154579 KD4ADJ Steven +3154580 KN4YWN Miguel +3154581 W4EAY Sebastian +3154582 KJ4DVS Derek +3154583 AB6QX Stephen +3154584 KL1US Phillip +3154585 W6CUB Josh +3154586 KD2JRK Colton +3154587 KF9NL Marvin +3154588 KF7UOV Rick +3154589 K7GVB Barry +3154590 WA6NJI Gregory +3154591 KD2SWO Peter +3154592 NP4LM Luisa +3154593 KM4ZSB Koset +3154594 NP3IB Angel +3154595 AI4GI Robert +3154596 WV9P Peter +3154597 N0PGM Peter +3154598 KI5DYW Thomas +3154599 KC9PQT Brandon +3154600 KD4GCN David +3154601 KN4ZDX Richard +3154602 KC9PQT Brandon +3154603 KN4ZDX Richard +3154604 KI5DYW Thomas +3154605 KJ4FDQ Kevin +3154606 KF5VQL Eugene +3154607 WV3AZO Ronald +3154608 NA7C Ted +3154609 KF3EMS Frederick +3154610 KC3OAK Timothy +3154611 KN6EYX Daniel +3154612 KF7TUT Darrell +3154613 N6TRC John +3154614 W1TEJ Thomas +3154615 KN4WGD Donald +3154616 WA4QFI John +3154617 KB5GU Ronny +3154618 W2PNE Ted +3154619 KE0JLM David +3154620 K0TPP Larry +3154621 AC2VI Scott +3154622 KM4RYN Kevin +3154623 KN4ZJW Carlos +3154624 WB5LWP Francis +3154625 W5SWB Ronald +3154626 AJ6MI Michael +3154627 KJ7JMO Dan +3154628 KM4ZSC Kelly +3154629 KL4VX Shawn +3154630 KG5WCC Billy +3154631 KC0QVY Michael +3154632 W5KPO Benjamin +3154633 W0TLP Teak +3154634 KJ7JNK Gov +3154635 KC2YLP Edgar +3154636 K0MIS Michael +3154637 K3TMS Timothy +3154638 K1NZA +3154639 K1NZA +3154640 K3TMS Timothy +3154641 KC3HMA Norman +3154642 KJ7JTV Julia +3154643 K0VAX David +3154644 KA0IUH Lee +3154645 N7TZK David +3154646 WW0SE Kevin +3154647 W3DE William +3154648 KF5BWU Thomas +3154649 WA2LUL Clay +3154650 NK4Y Mark +3154651 KE0OWM James +3154652 N3OVQ John +3154653 AE0ME Mark +3154654 KE0ROK Owen +3154655 WB4HZA John +3154656 K0BAC Brian +3154657 AE0HP Roger +3154658 N3WMB Mathew +3154659 W4SJZ Stephen +3154660 KM6CZW Greg +3154661 KL6M Michael +3154662 KE8NBC James +3154663 KD0Y David +3154664 KD0Y David +3154665 KD0Y David +3154666 KD2SVY Michael +3154667 KN4WCD Kayla +3154668 KN4YOL Michael +3154669 KN4UWF Adam +3154670 NP4AM Ramon +3154671 KE6HSO Jason +3154672 KE8NEV Brandon +3154673 KB0PMN Timothy +3154674 KC7LHU Allen +3154675 W7VTS Dale +3154676 K7JUN Marcelino +3154677 KI4FMB Carl +3154678 KF7RSF Thomas +3154679 KE0WRK Eric +3154680 KB3SCA Margaret +3154681 KN4ZKM Robert +3154682 W5YZA Rodney +3154683 KB8WUL Mark +3154684 KF7RSF Thomas +3154685 N7PHY Edward +3154686 KC2VRY James +3154687 W4ALH Harold +3154688 KI4CKC Rick +3154689 KJ6ZUG Douglas +3154690 KN4DLR Kenneth +3154691 KC2PKO Kevin +3154692 W6KVC Gerald +3154693 K4MDA DANIEL +3154694 W4OLE Bruce +3154695 N3ZJM James +3154696 KE8CUD Douglas +3154697 K9CIY Steven +3154698 WB4AU Bruce +3154699 KE0SYB Daniel +3154700 W3ATT Brian +3154701 KD2SXD Mike +3154702 KL3JH Pat +3154703 K4BXD Matthew +3154704 KM5XK Donald +3154705 KD9NFC Christopher +3154706 KM6HYK William +3154707 W6CDR Wynn +3154708 KG4LEY John +3154709 K4TJS Thomas +3154710 K9PAL Bill +3154711 KI7WGH Lawrence +3154712 KD9ODG Jon +3154713 AE2EY Edward +3154714 KB1KPE William +3154715 KM4TUH James +3154716 KC1KDX Mark +3154717 KN4ZGZ Ovidiu +3154718 KL3IT Takeshi +3154719 KQ4AZ Richard +3154720 W2CAC Clay +3154721 W2DK William +3154722 KD0ZGC Travis +3154723 K6IOK Northern +3154724 AB7UV Christine +3154725 KD2SWN Eric +3154726 KN4ZAM Scott +3154727 W7PDF Regan +3154728 AK6KA Robert +3154729 WA8AXE James +3154730 KF0WF Frank +3154731 KI4YUT Jacky +3154732 W1MWM William +3154733 KC2LFV Daniel +3154734 KI4YUT Jacky +3154735 N3JAR Clifton +3154736 KN4LNG Dudley +3154737 W6VYC David +3154738 KE8NFC Andrew +3154739 NG4E Walter +3154740 W0CSG Chet +3154741 KD2DBS Richard +3154742 KP4ILO Joaquin +3154743 KM6ZHS Brandon +3154744 KC2LFV Daniel +3154745 W0CSG Chet +3154746 K5DUR Drake +3154747 KF7NGQ Erik +3154748 WB5TZN Richard +3154749 KN6FFC Charles +3154750 N5EXB Daniel +3154751 W6AVO Kurt +3154752 N7ZUM Mark +3154753 W7JCR JeffCo +3154754 N7HMS Erik +3154755 WD9BEH Randall +3154756 K9PAL Bill +3154757 AC0MW Jerry +3154758 WE4MT James +3154759 KE0WWZ David +3154760 KM4NPX Benjamin +3154761 WA0ELM Eric +3154762 KD4BAO Anthony +3154763 KD8RIJ Zechariah +3154764 KJ6ECR Rey +3154765 KG4NJW Jarome +3154766 KC2ICD Steven +3154767 KE6HVK Curtis +3154768 AG4LR Allen +3154769 W7JCR JeffCo +3154770 KN6EYY Jenniffer +3154771 KD9ODI Cheryl +3154772 WA5EIY Donald +3154773 N2WNW James +3154774 W6OOM Eric +3154775 K0EMT Bryan +3154776 N6IO Craig +3154777 KD0MKM Robert +3154778 KB1JLG Cameron +3154779 KG4LEY John +3154780 KI7ZZE Edmond +3154781 KC1IB Robert +3154782 N5KGT Billy +3154783 KC7JMB Everett +3154784 N5KGT Billy +3154785 KJ4FKK Jesse +3154786 WW4MV Mitchell +3154787 KE7PPQ David +3154788 KE0TJL Aaron +3154789 KE8NFO Kevin +3154790 W4PHJ Craig +3154791 KN4VTO Charles +3154792 KG5WMG Billy +3154793 KE7PPQ David +3154794 KD9ODX samuel +3154795 KN4UTY David +3154796 KC1MCG BJ +3154797 KC4LXM Richard +3154798 N1XXI Wayne +3154799 W8HW Bruce +3154800 KE0TJL Aaron +3154801 N3QPG Rey +3154802 KD9NYP Ernest +3154803 KC1MAF Edwin +3154804 N1PPM Donald +3154805 WA4LVR Jack +3154806 KC1KXM Charles +3154807 KI5EUE Michael +3154808 N4JSY John +3154809 WB4TWQ Francisco +3154810 KJ7JYP Carlos +3154812 KC0SRD Scott +3154813 KE6YZY Jeffrey +3154814 KE0HJP A +3154815 KJ7JZE +3154816 N4RCZ Christopher +3154817 KN4VIK Michael +3154818 KA3MEG Steven +3154819 KC1MBS Melvin +3154820 AB6TY Richard +3154821 KC1MAM Robert +3154822 AD7AV Douglas +3154823 KB0ORN Matthew +3154824 KC2KNS Claus +3154825 KD8VAX Geoffrey +3154826 KJ7JXO Gary +3154827 KD2SWS Jonathan +3154828 W1JEF Joseph +3154829 KD2SPF Christopher +3154830 KN6FBO Nahiyan +3154831 KT7TT Mark +3154832 KD2SWS Jonathan +3154833 KI5GVE Greg +3154834 N6KV Kristyanna +3154835 KN4MJL Aaron +3154836 AB3LS Geoffrey +3154837 KN4YOK Angela +3154838 KN4YKU Charles +3154839 KN4UBR Trevor +3154840 KB7Q Gene +3154841 KC1IWU Kyle +3154842 N7XDF Dale +3154843 W0EPK Gregory +3154844 N6PRG Philip +3154845 KC2SBR Michael +3154846 KD4MQI Charles +3154847 WA6CP Christopher +3154848 KB2YAX Cecil +3154849 KF6SPD Gordon +3154850 WA2UFU Joel +3154851 KE0FEB Christopher +3154852 KN4ZLB Jeff +3154853 KJ6ZOE Cameron +3154854 KN6FIC Albert +3154855 KI5FBT Cliff +3154856 KD9OBM Reginald +3154857 K6JPC Jason +3154858 KB3YWY Robert +3154859 W0KAH Kenneth +3154860 KE4MUR Christopher +3154861 K4WZG Marc +3154862 KA6TOD Todd +3154863 KB8SAF Raymond +3154864 N6CLX Michael +3154865 KN4ZDT Marty +3154866 KD9OAZ Gregory +3154867 KJ7AMC James +3154868 WA2UEM Barry +3154869 N1PAU Paul +3154870 KD7OSW Jason +3154871 KJ7BRE Evan +3154872 KC3NDU Keith +3154873 KN6FHL Martin +3154874 KC0EKR Robert +3154875 W4PWB Philip +3154876 KC0ITD T +3154877 KD2SLV Stephen +3154878 KN4ZJE Richard +3154879 K7LAD Everett +3154880 KJ4NPM Emil +3154881 K9CPU Rim +3154882 KI5GYX William +3154883 KW4TA Stephen +3154884 KD9OCX Aaron +3154885 KE8NCS Thomas +3154886 W4NWT Bobby +3154887 K9CPU Rim +3154888 N8DOD James +3154889 AI9F Alan +3154890 N3OVI Ovidio +3154891 K9DAG Thomas +3154892 KW4CF Stephen +3154893 K9QJS James +3154894 KG6DI Robin +3154895 N6SXT Brian +3154896 N6PGA Joon +3154897 W2DRT T +3154898 KN4ZED James +3154899 KC0GDN Ian +3154900 K3KTM Joseph +3154901 KI5HAF James +3154902 K3BEQ Murray +3154903 KC1MBA Dean +3154904 KF7UZJ Ron +3154905 KD2RIT Albert +3154906 KE0WSC Andrew +3154907 N8PPZ Gregory +3154908 KM6OQY Anton +3154909 KD2SYH Jared +3154910 W4MC Eric +3154911 KD0ZXR Gregory +3154912 N6KEN Kenneth +3154913 N1NON Napont +3154914 KM6CFH Juan +3154915 AL7JR Ronald +3154916 KM6YIB Laurel +3154917 KD9LDE William +3154918 K4KBT William +3154919 N1TT William +3154920 WD8KAA Keith +3154921 WH6GFP +3154922 KI5HAG Terri +3154923 KE5UIT Kevin +3154924 KI4KGK William +3154925 WD8KXL Ken +3154926 KG7EMS MIKE +3154927 W1SPS Richard +3154928 N2PES Philip +3154929 K4TQL Bruce +3154930 KM4UVZ William +3154931 KM4UVZ William +3154932 KN4GDZ Mickey +3154933 KC0SDQ Douglas +3154934 N3RZL Michael +3154935 K7QBW Robert +3154936 KD4VPO David +3154937 KM4AF Chip +3154938 KC1LCZ Leon +3154939 KD6KCA Edward +3154940 KA4EZY Michael +3154942 KC1LGF Karl +3154943 KN6ELH Joshua +3154944 KE0WWX Mark +3154945 KM6OQY Anton +3154946 KN4ZJW Carlos +3154947 KE8JZE Michael +3154948 KC1MBB Earl +3154949 K6ZL Bruce +3154950 KM6AXJ Joshua +3154951 KB3SBC Walter +3154952 K4NE Charles +3154953 N5VET Michael +3154954 N9JGC John +3154955 KI5EMQ Stephen +3154956 KE6MTO Christopher +3154957 KG4DWB David +3154958 K7BGW Paul +3154959 KE4SKA Troy +3154960 KI5GYS Michael +3154961 KC0KGS Dale +3154962 KK4KBY Bryan +3154963 KN4ZMQ Carolyn +3154964 KB1TEC John +3154965 KE8JZE Michael +3154966 KB6RMT Michael +3154967 KJ7IXC Amy +3154968 KF7CJE Hubert +3154969 WA7KQS David +3154970 KJ7JTZ Michael +3154971 KD2SUR Igor +3154972 KC9EFP Joshua +3154973 KC4EGP Elsa +3154974 N6OYV Scott +3154975 W3UF Frank +3154976 ND8KA David +3154977 KM6PLC Tony +3154978 KM6QAG Samuel +3154979 KD2PLU Bernardo +3154980 W6INP Eric +3154981 AB1Q Richard +3154982 KE8DIN Oliver +3154983 ND8KA David +3154984 W3UF Frank +3154985 AC9LZ Stuart +3154986 KI7COM Raymond +3154987 KE5MUZ Eldon +3154988 KE5MUZ Eldon +3154989 KN4OIK Humberto +3154990 N6DBA Christian +3154991 KN4ZEI George +3154992 WD8KAA Keith +3154993 KD2SYX William +3154994 N4FBN Paul +3154995 KV7JWL Jerry +3154996 KD9OCA Craig +3154997 KE5BNV Rodger +3154998 N1II Paul +3154999 KW4RG Jon 3155001 N9NLZ Craig 3155002 KB9VLL Dan 3155003 KB9ENO William @@ -94636,12 +124246,13 @@ 3155019 KC0WKP Aaron 3155020 W9JW John 3155021 KC9UHI Matthew -3155022 N9OIG Drissel +3155022 N9OIG Kevin 3155023 KC9GMY Ryan 3155024 KC9GMY Ryan 3155025 W9DCS Dan 3155026 KB9KTR John 3155027 KC9RAT Francis +3155028 K5RWW Rachel 3155029 KB9YDK Dean 3155030 KB9LPP Phil 3155031 KB9JXZ Michael @@ -94665,14 +124276,14 @@ 3155049 N9FBF Emil 3155050 N9RPX Ray 3155051 KC9RAT Francis -3155052 N9OIG Drissel +3155052 N9OIG Kevin 3155053 WX9KVH Kyle 3155054 KD9AEZ Matthew 3155055 KC9UHI Matthew -3155056 K9AYL Albert +3155056 K9AYL Bert 3155057 KP3JOS Jose 3155058 N9NRA Andrew -3155059 N9OIG Drissel +3155059 N9OIG Kevin 3155060 KB9LTE Steven 3155061 KC9HYY Nathan 3155062 AG9V Roman @@ -94683,7 +124294,7 @@ 3155067 N9KRG Jake 3155068 N9KRG Jake 3155069 K9FZ Alexander -3155070 WA9RFT +3155070 WA9RFT Patrick 3155071 WB9COW Robin 3155072 N9FAV Tim 3155073 N9PAY Chad @@ -94697,7 +124308,7 @@ 3155081 N3IVK Matt 3155082 KC9UNK Kelsey 3155083 WI9EMS Cory -3155084 N9OEZ Michael +3155084 W2WAY Michael 3155085 K9MAR Omar 3155086 K9MAR Omar 3155087 KJ4UWI Dana @@ -94719,7 +124330,7 @@ 3155103 W9WLX Charles 3155104 KD9DIA Daniel 3155105 KD9CXU Joseph -3155106 WA9RFT +3155106 WA9RFT Patrick 3155107 KB9JXQ Jack 3155108 KC7TGL Rick 3155109 KA1RB Patrick @@ -94811,6 +124422,7 @@ 3155195 N9PMR Richard 3155196 K9EMD Michael 3155197 KD9CPW Nicholas +3155198 KD2RZI Lorenzo 3155199 N9WLF Tyler 3155200 KC9UDA 3155201 N9WLF Tyler @@ -94826,7 +124438,7 @@ 3155211 N9LKF Robert 3155212 N0EEM Edward 3155213 N4UCM Douglas -3155214 K9AYL Albert +3155214 K9AYL Bert 3155215 KD9ANT Ryan 3155216 W9JOL Christopher 3155217 KD9HDR Blake @@ -94878,7 +124490,7 @@ 3155263 KC9QQC Aaron 3155264 W9RWO Roger 3155265 NS9Y Robert -3155266 KC9CTK Benjamin +3155266 KC9CTK Ben 3155267 KE9LZ Steve 3155268 KC9TXK James 3155269 K9EVA Ed @@ -94902,7 +124514,7 @@ 3155287 KA9EMS Marlon 3155288 W9TJP Thomas 3155289 KC9WWH Josh -3155290 WW9RS +3155290 WW9RS Western 3155291 WA9JOB Nels 3155292 KD9DZP Josh 3155293 KB9G Marshal @@ -94913,6 +124525,7 @@ 3155298 N9JNQ David 3155299 W9AUA Richard 3155300 KC9O Paul +3155301 KD2RZI Lorenzo 3155302 KD9IMX Margarita 3155303 W9TJO Tj 3155304 K9RZL Timothy @@ -94923,6 +124536,7 @@ 3155309 KB9CBL Raymond 3155310 AB9DW Dale 3155311 KD9BKC Mathew +3155312 KZ3L Kevin 3155313 N9XSG Mike 3155314 N9XSG Mike 3155315 W9UZK Michael @@ -94939,13 +124553,14 @@ 3155326 W9NIA Donald 3155327 KD9IPX Stanley 3155328 KC9TGM Dean +3155329 N4WTN Darrin 3155330 KC9RFZ Adam 3155331 KB9MNP Connie -3155332 WD8JKM Norman 3155333 KB9DRZ Alan 3155334 W9JAR Jeffrey 3155335 W9KJB Kenneth 3155336 AB8ZJ Andrew +3155337 W9BA Navreet 3155338 K9MS Mark 3155339 N9WBN Perry 3155340 K9JWM Jack @@ -94965,8 +124580,8 @@ 3155354 N9LOH Steven 3155355 KV9O David 3155356 KV9O David +3155357 K0MJG Mark 3155358 KD9FHJ Dawn -3155359 WD8JKM Norman 3155360 KC9MLE Matthew 3155361 KC9TFM John 3155362 WC9AAG Wisconsin @@ -94987,6 +124602,7 @@ 3155377 KC0RNS Douglas 3155378 KC9GSK Jay 3155379 NA1PR Mario +3155380 WP4RBO Antonio 3155382 K9ANA Nancy 3155383 K9ANA Nancy 3155384 AB9L Michael @@ -95003,6 +124619,7 @@ 3155395 N9UOK Kevin 3155396 K9GPN Keith 3155397 KE4RNY Joshua +3155398 KE5PUX James 3155399 KC9UPE Matt 3155400 W9WK Milwaukee 3155401 N9SLR Frederick @@ -95020,11 +124637,11 @@ 3155413 KB9TYC Paul 3155414 KD9QL Gary 3155415 WG9V Jan -3155416 AJ9AL Andrew +3155416 AJ9L Andrew 3155417 KD0EBT Rodney 3155418 KD9IZL Janine 3155419 KD9IZM Paul -3155420 W9TRW Thomas +3155420 N8RXZ Larry 3155421 KD9HAE Joseph 3155422 KC9VXV Bowen 3155423 W1MHC Michael @@ -95052,6 +124669,7 @@ 3155445 KD8BYH Joel 3155446 N9PAR Nick 3155447 W9WLX Charles +3155448 KI5HBB Rishu 3155449 WO9B Michael 3155450 KC9AOC Peter 3155451 KC9GPL Andrew @@ -95072,6 +124690,8 @@ 3155466 KC9PSS Anthony 3155467 KC9VXZ Douglas 3155468 KC9VXZ Douglas +3155469 K5TTI Adam +3155470 N8HG Dick 3155471 K9MMK Gary 3155472 KD9CNQ Kevin 3155473 AL7RH Peter @@ -95080,8 +124700,10 @@ 3155476 W9JAR Jeffrey 3155477 KD9GCP Nathan 3155478 KD9GCP Nathan +3155479 KG6RUT Craig 3155480 KD9BBN Matthew 3155481 KD9BBN Matthew +3155482 KN4YKW Jose 3155483 K9UTQ Eugene 3155484 N9VHX Herb 3155485 WB9RJB Richard @@ -95090,7 +124712,7 @@ 3155488 KQ9N Brett 3155489 KD9JBY Robert 3155490 KD9JBY Robert -3155491 KG9B Joseph +3155491 KG9B Joe 3155492 K9HCW Lee 3155493 W9DJP David 3155494 KD9CJX Joseph @@ -95108,6 +124730,7 @@ 3155506 KC9WUR David 3155507 KC9SZW Anthony 3155508 KD9IPX Stanley +3155509 KD9OET Ralph 3155510 KD9DC David 3155511 N9NTC Michael 3155512 WX9EP Eric @@ -95115,6 +124738,7 @@ 3155514 KC9DGO Brian 3155515 KC9DGO Brian 3155516 WO9U Timothy +3155517 W1PNS Bradley 3155518 KD9KPV Ella 3155519 KG9RH William 3155520 KG9RH William @@ -95133,6 +124757,7 @@ 3155533 W9KMJ Kenneth 3155534 WI9MED Derrick 3155535 N9DXQ Russell +3155536 KJ7GXN Derek 3155537 W0NG Peter 3155538 KD9KKY Amber 3155539 KD5TCZ William @@ -95140,14 +124765,31 @@ 3155541 KD9JTI Gregory 3155542 W9RK Robert 3155543 AB9RH Dennis +3155544 KC5IMN Robert 3155545 N9EBB Steven 3155546 N9KPH William 3155547 KD9HSH Michael +3155548 KM6ZXT Lisette +3155549 W4HBZ Bradley +3155550 KC0IFQ Dennis +3155551 KN4HJT Marshall +3155552 KI4KZN Jimmie +3155553 KI5CID Vitalino +3155554 KI4KZN Jimmie +3155555 N6PMI Dennis +3155556 N0NOA Noah +3155557 W5KYP +3155558 KN6FKW Paul +3155559 KG4KGW Brian +3155560 KC1DYF Christopher +3155561 AB3ZK Joseph +3155562 KC3NPD Alexander +3155563 KB1UWH Donald +3155564 AC0EC Muscatine 3156001 KC7YRA Brad 3156002 KC7YRA Brad 3156003 KC0ZHF Rodney 3156004 N0CSH Adam -3156005 N7EMA Rob 3156006 N7BAM Brian 3156007 KA7VIS Joe 3156008 N7CSO Ralph @@ -95173,7 +124815,6 @@ 3156028 KG7K Frederic 3156029 KD7GXU Jason 3156030 KF7YEQ Matthew -3156031 N7EMA Rob 3156032 WY7EOC Beth 3156033 WY7EOC Beth 3156034 WY7EOC Beth @@ -95237,7 +124878,7 @@ 3156093 W7MOH Mark 3156094 N7HYF Eric 3156095 N7MYR Donald -3156096 KF7LO James +3156096 W7JNB James 3156097 N7RON Kenneth 3156098 N7ZEF Michale 3156099 N7CST Chuck @@ -95285,7 +124926,7 @@ 3156141 WA7SNU Terry 3156142 KF7BR Donald 3156143 KA7PJK Patricia -3156144 KI7MOT David +3156144 N7WOT David 3156145 KE7UUJ Steven 3156146 KI7SGG Jaime 3156147 KG7LXA Duane @@ -95429,13 +125070,13 @@ 3157144 WX4US Fred 3157145 KK4ZKW John 3157146 KM4ZEB Daniel -3157147 K4NDJ Lee +3157147 K4NDJ L 3157148 KM4ZEB Daniel 3157149 KK4WFW Timothy 3157150 W4AZJ Richard 3157151 K4ZXI Scott 3157152 K0LUX John -3157153 KF4ZW Michael +3157153 KF4ZW Mike 3157154 KN4FCJ Bill 3157155 KN4DST Garson 3157156 KN4ETY Steven @@ -95489,7 +125130,7 @@ 3157211 NV1U Tom 3157212 KJ4GJB James 3157213 W2DNR Ellory -3157214 KF4DDY Terry +3157214 KA4FHP Terry 3157215 KK4HP Charles 3157216 K4VJ Michael 3157217 KI4QVC Lee @@ -95601,7 +125242,7 @@ 3157332 KC4JES Joseph 3157333 NK4AA Jeffrey 3157334 KM4WHB Sean -3157335 KJ4HBW Jonathan +3157335 N1COC Jonathan 3157336 N6YAV Patrick 3157337 N6YAW Work 3157338 W5JI Joseph @@ -95664,7 +125305,7 @@ 3157403 K9NMR Neal 3157404 N4TSC Jerrold 3157405 WA4WPQ Carl -3157406 KB0UZF Bradley +3157406 W1PNS Bradley 3157407 KM4DQM Albert 3157408 N4SCY Robert 3157409 KM4IDP Gary @@ -95734,7 +125375,7 @@ 3157477 KN4HXA William 3157478 WB8DSD Craig 3157479 KM4QWM Jayson -3157480 KE2TI Jose +3157480 KE2TI Ramon 3157481 K4EDP Ed 3157482 WB8DSD Craig 3157484 W4LCO Ares @@ -95771,7 +125412,7 @@ 3157516 KA4VAS Kevin 3157517 W9LJT Lawrence 3157518 KN4IHW Mark -3157519 KN4BKK Michael +3157519 W4PPM Michael 3157520 W4KEF Kenneth 3157521 KN4IIS Louis 3157522 KN4GVF Don @@ -95802,8 +125443,8 @@ 3157549 WA4AWD Douglas 3157550 K4AMF Andrew 3157551 KM4ANH Bonnie -3157552 WD4DTG Richard -3157553 K4KCL Kenneth +3157552 KF4Y Richard +3157553 K4KCL Ken 3157554 K4AW David 3157555 K8WRP Jim 3157556 KI4LUY Patrick @@ -95854,7 +125495,7 @@ 3157607 KC9BCS James 3157608 KC9BCS James 3157609 KB1NTB Alex -3157610 WD4DTG Richard +3157610 KF4Y Richard 3157611 KG4TGC Mark 3157612 KM4BAO Bob 3157613 W4KDR Kaleb @@ -95990,7 +125631,6 @@ 3157758 WE4L Terry 3157759 KR0RAT Clifford 3157760 KV4SE Robert -3157762 KF4ZW Michael 3157763 WE4L Terry 3157764 K6RXX James 3157765 K4FP Francis @@ -96002,14 +125642,14 @@ 3157771 KK4KT Robert 3157773 W4KJA Ken 3157774 KJ4PGS Edwin -3157775 KE4HCD Robert +3157775 KK3S Robert 3157776 KM4EDV Amateur 3157777 KJ4FJV Steve 3157778 KJ4HDJ Mary 3157779 KD0USA Barry 3157780 K6RXX James -3157781 WD9BEN Ben -3157782 WD9BEN Ben +3157781 WD9BEN Florida +3157782 WD9BEN Florida 3157783 WD4NET Walter 3157784 KB4FHP Joseph 3157785 KG4NJS Nicholas @@ -96032,6 +125672,7 @@ 3157805 KE4MSG Douglas 3157806 KK4DGA Michael 3157807 KK4UIW Harold +3157808 W2MF Manny 3157809 WW4EOC Sean 3157810 KN4GGH Michael 3157811 KM4TJB Sarah @@ -96240,7 +125881,6 @@ 3158050 NP4NQ Jose 3158051 K5XB Larry 3158052 N5MBK Belinda -3158053 WB6RQN Brian 3158054 J79BPL Brian 3158055 K5PA Francis 3158056 AB5JK Jimi @@ -96473,7 +126113,7 @@ 3158307 KC5WX Gene 3158308 KG5SIR Sandra 3158309 WD4IFU Lester -3158311 W5AAQ Ronald +3158311 W5AAQ Skip 3158312 W5FUN Terry 3158313 W5FUN Terry 3158315 KG5UHP James @@ -96659,7 +126299,7 @@ 3158509 K5DFJ Dagfinn 3158510 NE5U Michael 3158511 NE5U Michael -3158512 KI5SR Carter +3158512 KI5SR Ross 3158513 K5MKS Darren 3158515 WA5PMO James 3158516 KW5RQ Gregory @@ -96706,7 +126346,7 @@ 3158560 N5UTG Eric 3158561 N5YAK Don 3158562 KF5YDR Mark -3158563 AG5DL Joseph +3158563 AG5DL Joe 3158564 KE5LRK Doug 3158565 N5JLB Jack 3159001 N4JPG John @@ -96742,7 +126382,7 @@ 3159032 KM4UHU Robert 3159033 KB3ASY Adam 3159034 KN4GTX Tanya -3159035 KN4CKZ Allen +3159035 KN4AO Allen 3159036 W2TWO James 3159037 KN4HPK Jason 3159038 W4MSF Michael @@ -96771,8 +126411,8 @@ 3159063 KN4DUX Stephen 3159064 NO4FX Joseph 3159065 W4CWA Frank -3159066 W4CIL LKeith -3159067 W4CIL LKeith +3159066 KC4YPH LKeith +3159067 KC4YPH LKeith 3159069 KJ4ADZ Joseph 3159070 AK4IT Mark 3159071 K2EZX Eric @@ -96810,7 +126450,7 @@ 3159108 N4WLR Michael 3159109 N4CDJ Christopher 3159110 KN4KCW Michael -3159111 KN4ICY Gary +3159111 W5GDW Gary 3159112 KG4PCR Pete 3159113 KJ4MSV Jason 3159114 K4MJH Jeff @@ -96923,7 +126563,7 @@ 3160008 KE8IXB Gregory 3160009 WB2DFC David 3160014 KE8HER Barry -3160016 KQ8H James +3160016 KQ8H Jim 3160017 KE8IXJ Dana 3160018 WB3HIY Frank 3160019 WB3HIY Frank @@ -96975,12 +126615,12 @@ 3160069 K8KNR Kevin 3160070 K8FCM Frederick 3160071 W8ADA Douglas -3160072 KD8RUQ Michael +3160072 N8ND Michael 3160073 WB5OD Harold 3160074 KE8FSB Gary 3160075 AC8NW Scott 3160076 W8DKA Douglas -3160077 KB8ESH Eric +3160077 W8ESH Eric 3160078 K8ISS John 3160079 W8AZO Marvin 3160080 KE8IZQ David @@ -96996,10 +126636,9 @@ 3160091 KE8JGE Stephen 3160092 KE8JGE Stephen 3160093 K8EC Daniel -3160094 WA8DBW Richard -3160095 WA8DBW Richard +3160094 W8DBW Rich 3160096 N8EOO -3160098 KB8ESH Eric +3160098 W8ESH Eric 3160099 KD8ZU Lester 3160100 KE8BJQ Greg 3160102 NA8J William @@ -97017,7 +126656,7 @@ 3160116 N8NIR Charles 3160117 N8HP Barney 3160118 KD8IF Robert -3160119 KE8JJI Scott +3160119 W8IES Scott 3160120 W8NEE John 3160121 W8TBS Todd 3160122 KE8HFK Kyle @@ -97026,7 +126665,7 @@ 3160125 W8DRM David 3160127 KE8IOS John 3160128 KD8DGH Mark -3160129 W8RIK Joseph +3160129 W8RIK JOSEPH 3160130 W8WJW J 3160131 AC8XU Jon 3160132 N1EZZ Maurice @@ -97091,7 +126730,7 @@ 3160197 N8XRV Brian 3160198 KD5GUU John 3160199 KD8ZFF Bryan -3160201 KB8ZUR Lee +3160201 AC8R Lee 3160202 N8CZZ Bruce 3160203 KE8FRL Robert 3160204 W8AFW John @@ -97132,7 +126771,7 @@ 3161019 N6YTB 3161020 KI6NJU Ryan 3161021 N6RKH Robert -3161022 KM6QIN Endi +3161022 KC6DBN Endi 3161023 KI6CCW Robert 3161024 KI6WWV Roberto 3161025 KD6YTE Juanito @@ -97176,14 +126815,13 @@ 3161070 K0DYS Paul 3161071 W1LWU Rick 3161072 KD6ELK Fred -3161073 N6PTS Richard +3161073 N6PTS 3161074 KB6JAG Scott 3161075 KC6NVX Dennis 3161077 K6MDS Michael 3161078 KA6MEM Nate 3161079 K6LDQ Jon 3161080 KB1VZR David -3161081 KC6NDU Khamvanh 3161082 KM6QIO Kim 3161083 KD6OKK Joe 3161084 KD6OKK Joe @@ -97198,7 +126836,7 @@ 3161094 AG7R Thomas 3161095 W6GSQ Albert 3161096 KM6ROF Robyn -3161097 KB6FTW Randy +3161097 K4FTW Randy 3161098 KC6LDN Brian 3161099 KG6EXQ Carla 3161100 N6NZI Peter @@ -97231,7 +126869,7 @@ 3161130 KJ6HSF Carol 3161132 N6ACG Albert 3161133 N6ACG Albert -3161134 KF6FP Harris +3161134 KF6FP Harry 3161135 KK6KQS Lynn 3161136 KM6IPX Guillermo 3161137 KT6JK Todd @@ -97361,7 +126999,7 @@ 3161275 K6UJO Philip 3161278 AJ0SE Jose 3161279 KB6RKO Gary -3161280 KM6NVA Chris +3161280 N6CJT Chris 3161281 KK6QVR Richard 3161282 KE6CWP Stephen 3161283 KE6CWM Louisa @@ -97370,7 +127008,7 @@ 3161286 AD6AF Ray 3161288 WA6VPL James 3161289 K6EBK Erik -3161290 KB6SAL Yvette +3161290 KB6SAL 3161291 KM6SJX Elijah 3161292 YS1RH Rodolfo 3161293 AI6EY David @@ -97393,7 +127031,7 @@ 3161310 KK6AFL Christopher 3161311 KM6SHE Michael 3161312 KM6DZX David -3161313 W6DVI Reynaldo +3161313 W6DVI Rey 3161315 KM6SHE Michael 3161317 KG6OFR Pamela 3161318 KM6MHR Rolf @@ -97448,7 +127086,7 @@ 3162022 KD2DNO William 3162023 AG2I James 3162024 KD2DNO William -3162025 N2CID Jamie +3162025 N2CID Jay 3162026 KB2PIW Edward 3162027 K2EGL Brian 3162028 KB2MJV Moses @@ -97513,7 +127151,7 @@ 3162098 KD2PPG Roger 3162099 W2ALB William 3162100 KC2FDQ Matthew -3162102 N2CID Jamie +3162102 N2CID Jay 3162104 KB2MSE John 3162105 KC2WEX John 3162106 KC2NCI Raymond @@ -97549,6 +127187,118 @@ 3162140 KD2PRY Desmond 3162141 KD2PRY Desmond 3300001 KP4RMR Ramon +3300002 WP3JM James +3300003 KP4TR Ramon +3300004 WP4PTG Juan +3300005 KP4EGY Edgardo +3300006 KP4JS Jose +3300007 NP4DS David +3300008 KP4FJC Felix +3300009 KP4FJC Felix +3300010 KP4CRN Carlos +3300011 KP4CRN Carlos +3300012 WP4KY Wilberto +3300013 WP4JR Jonathan +3300014 WP4JSJ Jose +3300015 WP4MAD Ana +3300016 WP4JSJ Jose +3300017 WP4FHO Angel +3300018 WP4PZG Felix +3300019 KP4CHU Jesus +3300020 KP4CHU Jesus +3300021 WP4QQN Roberto +3300022 WP4PZG Felix +3300023 WP4NST Felipe +3300024 KP4HGD Hector +3300025 WP4PVP Sergio +3300026 WP4OXY Benjamin +3300027 WP4AOH Carlos +3300028 WP4PWR Luis +3300029 WP4PWR Luis +3300030 WP4OCO Marcos +3300031 WP4KUK Ivan +3300032 WP4CL CESAR +3300033 NP4PS JUAN +3300034 KP3JD Julio +3300035 NP4XM Xilefmarie +3300036 WP3OD Ruperto +3300037 WP4NYI Isabel +3300038 NP3IR Hector +3300039 KP4KHF Armando +3300040 NP4WW Uris +3300041 NP4EG Edgardo +3300042 WP4PXF Francisco +3300043 KP3BB Roger +3300044 WP3DT Martin +3300045 KP3AV Julio +3300046 KP4RGD Raul +3300047 WP4KEY Emilio +3300048 WP4KEY Emilio +3300049 WP3BM Gabriel +3300050 KP4JS Jose +3300051 KP4ZA Jose +3300052 NP4CQ Angel +3300053 KP4AG Hilda +3300054 KP3JD Julio +3300055 NP4UG Angel +3300056 NP3HA Rafael +3300057 KP4PDU Wilfredo +3300058 NP4JB Jose +3300059 WP3EF Eddie +3300060 KP4NRR Nicolas +3300061 NP4GT Glidden +3300062 NP4GT Glidden +3300063 KP4LP Roberto +3300064 WP4YT Yolanda +3300065 NP4JS Jorge +3300066 WP4NTH Edgardo +3300067 NP4EP George +3300068 NP4EP George +3300069 KP4BOY Angel +3300070 WP4QAZ Wilberto +3300071 KP4OSP Osvaldo +3300072 WP4QWR Octavio +3300073 WP3LJ Luis +3300074 WP3LJ Luis +3300075 WP4QYE Yolanda +3300076 NP3IH Radames +3300077 KP4WOR Wilfredo +3300079 WP4CG Carlos +3300080 WP4QDA Frank +3300081 WP4QDA Frank +3300082 WP4KMB Nelson +3300083 WP4MUY Ana +3300084 KP4JLF Jose +3300085 KP4KB Samuel +3300086 KP4ARA +3300087 WP4FD Osvaldo +3300088 KP4RG Enrique +3300089 KP4RG Enrique +3300090 KP4RO Ramon +3300091 WP3BL Irvin +3300092 WP4RCB Felix +3300093 KP4LR Luis +3300094 WP4PSY Vladimir +3300095 WP4RCW Ruben +3300096 WP4JDM Jose +3300097 KP4KPQ Cristobal +3300098 KP4HDL Hector +3300100 WP4QWR Octavio +3300101 KP4IGI irving +3300102 WP4SK Henry +3300103 WP4SK Henry +3300104 WP4JR Jonathan +3300105 WP4RGC Ricardo +3300106 WP4OPO Herbert +3300107 WP4QHW Jorge +3300108 WP4QDI David +3300109 WP4PQQ Juan +3300110 WP4OXZ Abiezer +3300111 WP4MAS Luis +3300112 WP4MAS Luis +3300113 KP4TG Nerihobet +3300114 KP4TG Nerihobet +3300115 WP4DMD Felipe 3301001 WP4OV Juan 3301002 WP4OTW Carla 3301003 NP4ET Jose @@ -97557,7 +127307,7 @@ 3301006 WP4RD Alfonso 3301007 KP4BKD Hector 3301008 KP3IV Ivan -3301009 KP3A AsdrBal +3301009 KP3A AsdruBal 3301010 WP4PIT Aneudi 3301011 WP3BOL Bernardy 3301012 KP4TP Jose @@ -97603,7 +127353,6 @@ 3302009 KP4EC Ernesto 3303001 KP4RMR Ramon 3303002 KP4GA Jose -3303003 KP4AG Hilda 3303004 WP4KY Wilberto 3303005 WP4KMB Nelson 3303006 WP4MUY Ana @@ -97625,7 +127374,7 @@ 3303022 KP3AV Julio 3303023 WP4OXG Naubert 3303024 KP4AAN Hubert -3303025 KP4CBI Martin +3303025 WP3DT Martin 3303026 WP4PMQ Juan 3303027 WP3GU Dane 3303028 KP4MCG Lester @@ -97657,42 +127406,169 @@ 3305015 WP3L Alberto 3305016 WP4LU Osvaldo 3320001 KP2L Carl -3340001 XE3REM Radio +3340001 XE3REM REM 3340002 XE3N Zalo 3340003 XE3LEO Ruben 3340004 XE2VY Homero 3340005 XE1ALE Alejandro 3340006 XE1ALE Alejandro 3340007 XE2YBR Ramiro -3340008 XE1IM Duarte -3340009 XE1IM Duarte +3340008 XE1IM Hector +3340009 XE2BHL Jose 3340010 XE2RLA Ruben 3340011 XE2WI Julio -3340012 6F0XXO Unam +3340012 6F0XXO UNAM 3340013 XE1JP Jorge 3340014 XE1JP Jorge 3340015 XE2MSN Sergio 3340016 XE2GJJ Arturo -3341001 XE1QRP -3341002 XE1QRP +3340017 XE1OGC Antonio +3340018 XE1OGC Antonio +3340019 XE3KRE Rigoberto +3340020 XE3KRE Rigoberto +3340021 XE1USG Salvador +3340022 XE1CLE Aidan +3340023 XE1AO Omar +3340024 XE1YHX Crescencio +3340025 XE1DGC Victor +3340026 XE2KIQ Roberto +3340027 XE1ZIG Ildefonso +3340028 XE2MVX Eloy +3340029 XE1YDK Juan +3340030 XE1SGT Guillermo +3340031 XE2KIQ Roberto +3340032 XE2PKZ Juan +3340033 XE1E Enrique +3340034 XE2WK Benigno +3340035 XE1X RCM +3340036 XE1GNU Alejandro +3340037 XE2KTL Tomas +3340038 XE1WA Joel +3340039 XE2SAG Salvador +3340040 XE2LGA Luis +3340041 XE2GFS Nemesio +3340042 XE2HCC Catario +3340043 XE2EGI Eliazar +3340044 XE2UAR Jacinto +3340045 XE2VDR Francisco +3340046 XE2JLB Jose +3340047 XE2YUL Alma +3340048 XE2MPR Roman +3340049 XE1GIT Juan +3340050 XE1YHP Heber +3340051 XE1DOC Gabriel +3340052 XE1FJM Francisco +3340053 XE1XSP Roberto +3340054 XE2FGC J +3340055 XE2ARF Fernando +3340056 XE1DRM David +3340057 XE1LOV Maria +3340058 XE2ARF Fernando +3340059 XE1RIA Adonis +3340060 XE2AD David +3340061 XE2PNB Itzcoatl +3340062 XE1E Enrique +3340063 XE1XSP Roberto +3340064 XE2AGS Jose +3340065 XE2B Luis +3340066 XE2GFS Nemesio +3340067 XE1YD Miguel +3340068 XE1YD Miguel +3340069 XE1ILG Marco +3340070 XE2UF Antonio +3340071 XE2XQV Ruben +3340072 XE2TPJ Eliseo +3340073 XE2HIR Ignacio +3340074 XE1LGM Leonardo +3340075 XE1KKK Gustavo +3340076 XE2KAF Jesus +3340077 XE2GOL Leticia +3340078 XE2JC Julio +3340079 XE2CGR Ramon +3340080 XE2PMP Pablo +3340081 XE2WYD Hector +3340082 XE2IMA Isidro +3340083 XE1ZRG Ulises +3340084 XE1DQM Macedonio +3340085 XE1FZF Mauricio +3340086 XE2VHF Radio +3340087 XE2NRG Jose +3340088 XE2NRG Jose +3340089 XE2RGA Roberto +3340090 XE1SLA Oscar +3340091 XE1SJC Juan +3340092 XE1NK Alberto +3340093 XE2ASM Miguel +3340094 XE1SGW Andres +3340095 XE1BST Pedro +3340096 XE2WYD Hector +3340097 XE1M Felipe +3340098 XE1SRV Ramon +3340099 XE2MCF Alberto +3340100 XE1SNG Alfredo +3340101 XE1YVH Victor +3340102 XE2IF Oscar +3340103 XE1YGC Gerardo +3340104 XE1SFT Abraham +3340105 XE2TC Carlos +3340106 XE1SRD Rey +3340107 XE2JLF Fernando +3340108 XE1C Jean-Paul +3340109 XE1DJL Jose +3340110 XE1MYO Mayolo +3340111 XE1MYO Mayolo +3340112 XE1VVE Victor +3340113 XE1FMA Jorge +3340114 XE1TUX Iliana +3340115 XE1GFJ Jose +3340116 XE1YYG Veronica +3340117 XE1XLZ Edi +3340118 XE1XLZ Edi +3340119 XE1CKJ Erik +3340120 XE1MAJ Juan +3340121 XE2MEH Eduardo +3340122 XE2AAG Antonio +3340123 XE2NCH Jorge +3340124 XE2NCH Jorge +3340125 XE3PNO Alvaro +3340126 XE1MIM Mario +3340127 XE2AAG Antonio +3340128 XE1DM Mario +3340129 XE1MTB Ernesto +3340130 XE2JIM jose +3340131 XE2LVM Jose +3340132 XE3MAZ Miguel +3340133 XE2CVR Rabindranath +3340134 XE2SCS Eliseo +3340135 XE1BTC Guido +3340136 XE2PXN Jorge +3340137 XE2FGT ORLANDO +3340138 XE2FGT ORLANDO +3340139 XE1LAC Leticia +3340140 XE1LAC Leticia +3340141 XE2M Francisco +3340142 XE2FGC J +3340143 XE3AA Julio +3341001 XE1QRP Oleg +3341002 XE1QRP Oleg 3341003 XE1YED Edgar 3341004 XE1EFQ Jose 3341005 XE1B Marcos -3341006 XE1LM -3341007 XE1FXT Jose -3341008 XE1F -3341009 XE1F -3341010 XE1F -3341011 XE1F +3341006 XE1LM FMRE +3341007 XE1EL Jose +3341008 XE1F Juan +3341009 XE1F Juan +3341010 XE1F Juan +3341011 XE1F Juan 3341012 XE1YRM Roberto 3341013 XE1XTK David 3341014 XE1GEN Amado -3341015 XE1ENL C4fm +3341015 XE1ENL RC 3341016 XE1GQP Ricardo -3341017 XE1FXT Jose +3341017 XE1EL Jose 3341018 XE1FUZ Jose 3341019 XE1FOS Santiago -3341020 XE1F +3341020 XE1F Juan 3341021 XE1YJG Arturo 3341022 XE1YAM Jesus 3341023 XE1YCH Benjamin @@ -97700,7 +127576,7 @@ 3341025 XE1EFQ Jose 3341026 XE1EFQ Jose 3341027 XE1EFQ Jose -3341028 XE1HEQ Jos +3341028 XE1HEQ Jose 3341029 XE1EFQ Jose 3341030 XE1EFQ Jose 3341031 XE1EFQ Jose @@ -97710,8 +127586,6 @@ 3341035 XE1PON Alfonso 3341036 XE1HAX Miguel 3341037 XE1EFQ Jose -3341038 XE1YYD Miguel -3341039 XE1YYD Miguel 3341040 XE1MW Carlos 3341041 XE1EFQ Jose 3341042 XE1SPK Pablo @@ -97724,25 +127598,25 @@ 3341049 XE1GQP Ricardo 3341050 XE1GYY Margarita 3341051 XE1GYY Margarita -3341052 XE1FXT Jose -3341053 XE1GUU Ricardo +3341052 XE1EL Jose +3341053 XE1GUU ARJAC 3341054 XE1YUN Jose 3341055 XE1GQ Enrique -3341056 XE1RQC JesS +3341056 XE1RQC Jesus 3341057 XE1UCA Carlos 3341058 XE1ROQ Radio 3341059 XE1GK Ignacio 3341060 XE1GXI Francisco 3341061 XE1ROJ Jose 3341062 XE1AY Ismael -3341063 XE1HRK Juan +3341063 XE1WR Juan 3341064 XE1RTI Ulises 3341065 XE1VP Victor 3341066 XE1HAX Miguel 3341067 XE1JEG Jose 3341068 XE1R Joaquin 3341069 XE1HDM Gabriel -3341070 XE1GUU Ricardo +3341070 XE1GUU ARJAC 3341071 XE1IAH Alejandro 3341072 XE1YWK Ludwig 3341073 XE1YWK Ludwig @@ -97761,18 +127635,17 @@ 3341086 XE1GYH Luis 3341089 XE1D Dorian 3341090 XE1FDR Francisco -3341091 XE1CV Fernando 3341092 XE1FFZ Jose -3341093 XE1GCH Gutierrez +3341093 XE1GCH Higinio 3341094 XE1SRD Rey 3341095 XE1GYF Andres 3341096 XE1VNT Ricardo 3341097 XE1RZ Roberto -3341098 XE1S Club +3341098 XE1S Roberto 3341099 XE1ZLG Luis -3341100 XE1F -3341101 XE1RF VCtor -3341102 XE1YJR Julio +3341100 XE1F Juan +3341101 XE1RF Victor +3341102 XE1TTS Julio 3341103 XE1JPR Joel 3341104 XE1YED Edgar 3341106 XE1BST Pedro @@ -97782,9 +127655,9 @@ 3341110 XE1GXO Jorge 3341111 XE1HJQ Antonio 3341112 XE1NW Guillermo -3341113 XE1ICI Lopez -3341114 XE1S Club -3341115 XE2SJA Castro +3341113 XE1ICI Jorge +3341114 XE1S Roberto +3341115 XE2SJA Mauricio 3341116 XE1RBV Mariano 3341117 XE1AMF Daniel 3341118 XE1GNU Alejandro @@ -97792,28 +127665,28 @@ 3341120 XE1PON Alfonso 3341121 XE1DWA Witvrun 3341122 XE1HMX Alfonso -3341123 XE1HRK Juan -3341124 XE1HRK Juan -3341125 XE1XWI Op +3341123 XE1WR Juan +3341124 XE1WR Juan +3341125 XE1XWI Alfonso 3341126 XE1HMX Alfonso 3341127 XE1ICN Cuauhtemoc 3341128 XE1YR Francisco 3341129 XE1KYA Arturo -3341130 XE1XMS Mendez -3341131 XE1XMS Mendez +3341130 XE1XMS Leonel +3341131 XE1XMS Leonel 3341132 XE1HJT Pablo 3341133 XE1FBH Efren 3341134 XE1HKS Roman 3341135 XE1IFT Roman 3341136 XE1ZMP Raul -3341137 XE1YJR Julio +3341137 XE1TTS Julio 3341138 XE1IHD Abraham 3341141 XE1SPM Patricia 3341142 XE1SOV Ricardo 3341143 XE1TAZ Armando 3341144 XE1TJB Joel 3341145 XE1YO Hugo -3341146 XE1RCQ Radio +3341146 XE1RCQ RCQ 3341147 XE1JC Ismael 3341148 XE1ZKC Antonio 3341149 XE1ZKC Antonio @@ -97824,8 +127697,7 @@ 3341154 XE1LJI Teodoro 3341155 XE1GL Jose 3341156 XE1GL Jose -3341157 XE1SC Cruz -3341158 XE2A Ararm +3341158 XE2A ARARM 3341159 XE1GIP Miguel 3341160 XE1TOM Apolonio 3341161 XE1DVI Reynaldo @@ -97835,13 +127707,13 @@ 3341165 XE1OBA Octavio 3341167 XE1HPC Armando 3341168 XE1FAP Jose -3341170 XE1TJG Garcia +3341170 XE1TJG Julio 3341172 XE1ODN Edgar 3341173 XE1ODN Edgar -3341174 XE1ENL C4fm -3341175 XE1ENL C4fm -3341176 XE1ENL C4fm -3341177 XE1DVC Varela +3341174 XE1ENL RC +3341175 XE1ENL RC +3341176 XE1ENL RC +3341177 XE1DVC Diego 3341178 XE1BRX Jonathan 3341179 XE1GYQ Abraham 3341180 XE1HJJ Nicolas @@ -97864,11 +127736,11 @@ 3341201 XE1YCB Oscar 3341202 XE1HKI Francisco 3341203 XE1MGA Antonio -3341204 XE1UNQ Ortiz +3341204 XE1UNQ Ursino 3341205 XE1SPK Pablo 3341206 XE1DUJ Jaime 3341209 XE1JRP Jose -3341210 XE1EBD Jos +3341210 XE1EBD Jose 3342001 XE2PMP Pablo 3342002 XE2JEG Eduardo 3342003 XE2JEG Eduardo @@ -97888,17 +127760,15 @@ 3342017 XE2JI Rafael 3342018 XE2NBL Ramiro 3342019 XE2SI Juan -3342020 XE2NB Alex +3342020 XE2NB Alejandro 3342021 XE2N Jose -3342022 XE2PNA Jorge 3342023 XE2MZL Luis 3342024 XE2DLC Dora 3342025 XE2MBE Eliud -3342026 XE2LRS Serrano +3342026 XE2LRS Luis 3342027 XE2BHL Jose -3342028 XE2LRS Serrano +3342028 XE2LRS Luis 3342029 XE2PTS Instituto -3342030 XE2WYD Hector 3342031 XE2TPJ Eliseo 3342032 XE2CE Alfredo 3342034 XE2MVB Jose @@ -97909,7 +127779,7 @@ 3342039 XE2NL Asociacion 3342040 XE2XCX Joaquin 3342041 XE2MGA Antonio -3342042 XE2AZA Rojas +3342042 XE2AZA Juan 3342044 XE2BSS Alejandro 3342045 XE2DNN Red 3342046 XE2RCP Radio @@ -97917,9 +127787,9 @@ 3342048 XE2EL Federico 3342049 XE2EQV Eli 3342050 XE2VLO Victor -3342051 XE2AVO Vazquez +3342051 XE2AVO Jose 3342052 XE2PJE Jesus -3342053 XE2KEC Edgar +3342053 XE2RZ Edgar 3342054 XE2MBE Eliud 3342055 XE2O Alfonso 3342056 XE2EOS Juan @@ -97927,19 +127797,19 @@ 3342058 XE2XWS Jose 3342059 XE2YCP Juan 3342060 XE2EY Domingo -3342061 XE2RHT Ruvalcaba +3342061 XE2RHT Tobias 3342062 XE2PEF Juan 3342063 XE2HOS Arturo 3342064 XE2DII Audencio 3342065 XE2JE Jose 3342066 XE2PEF Juan 3342067 XE2PEF Juan -3342068 XE2CVR Cervantes +3342068 XE2CVR Rabindranath 3342069 XE2SIV Antonio 3342070 XE2OR Rafael 3342071 XE2MFT Oscar -3342075 XE2LPX Salas -3342076 XE2LPX Salas +3342075 XE2LPX Juan +3342076 XE2LPX Juan 3342077 XE2GRM Gildardo 3342078 XE2KGS Gerardo 3342079 XE2LAT Jorge @@ -97949,17 +127819,17 @@ 3342085 XE2GMA Manuel 3342086 XE2AIJ Carlos 3342087 XE2OFG Feliciano -3342088 XE2FLR Lozano -3342089 XE2KEC Edgar +3342088 XE2FLR Juan +3342089 XE2RZ Edgar 3342090 XE2PN Jorge -3342091 XE2AGM Gomez +3342091 XE2AGM Salvador 3342092 XE2MBJ Jose 3342093 XE2MBJ Jose -3342094 XE2RZM Zambrano +3342094 XE2RZM Roberto 3342095 XE2KFA Lorena 3342096 XE2EVG Efren 3342097 XE2KIO Fernando -3342098 XE2HTD Arballo +3342098 XE2HTD Jose 3342099 XE2EVG Efren 3342100 XE2PFW Chalita 3342101 XE2OCC Jesus @@ -97969,7 +127839,7 @@ 3342105 XE2FLO Francisco 3342106 XE2GPP Maria 3342107 XE2JLG Jose -3342108 XE2BEZ Espinosa +3342108 XE2BEZ Jose 3342109 XE2BVI Ildefonso 3342110 XE2NDL Dora 3342111 XE2MFT Oscar @@ -97980,8 +127850,8 @@ 3342116 XE2KUI Kiyoshi 3342117 XE2KOS Rolando 3342118 XE2RAS Renato -3342119 XE2HIH Jos -3342120 XE2HIH Jos +3342119 XE2HIH Jose +3342120 XE2HIH Jose 3342121 XE2BVM Melquiades 3342122 XE2GHL Ricardo 3342124 XE2CDA Carlos @@ -98015,11 +127885,11 @@ 3343026 XE3RCJ Jorge 3343027 XE3PVW David 3343028 XE3RA Guillermo -3343029 XE3GAP Perez -3343030 XE3RCC Radioclub +3343029 XE3GAP Tomas +3343030 XE3RCC RCC 3343031 XE3RLB Walter 3343032 XE3RNK Manuel -3343033 XE3RL HCtor +3343033 XE3RL Hector 3343034 XE3ROI Marlon 3343035 XE3RLU Rene 3343036 XE3VK Rafael @@ -98033,15 +127903,15 @@ 3343044 XE3RLS Carlos 3343045 XE3RKY Manuel 3343046 XE3GER Guillermo -3343047 XE3GAP Perez +3343047 XE3GAP Tomas 3343048 XE3RNK Manuel 3343049 XE3OAR Oscar 3343050 XE3RLB Walter 3343051 XE3BT Israel 3343052 XE3VAA Miguel -3343053 XE3RCC Radioclub -3343054 XE3RCC Radioclub -3343056 XE3REM Radio +3343053 XE3RCC RCC +3343054 XE3RCC RCC +3343056 XE3REM REM 3343057 XE3NAH Luis 3343058 XE3MAS Eduardo 3343059 XE3XOX Sergio @@ -98067,6 +127937,9 @@ 3344002 XE1GXO Jorge 3344003 XE1GXW Jorge 3344004 XE1CF Arturo +3380002 6Y5WW William +3380003 6Y5WW William +3380004 6Y5SJ Junior 3400001 FM5EB Dominique 3400002 FM1HN Julien 3400003 FM1LF Ferdinand @@ -98074,14 +127947,32 @@ 3400005 FM1II Chris 3400006 FM1HM Fm1hm 3400007 FG4KL Radio +3400008 FM1HN Julien +3400009 FG1GW Jean-Francois 3400010 FG8OJ Burt 3400011 FG8PW Salomon +3400012 FM4SA Daniel +3400013 FM4OL Etienne +3400014 FG5GH Edgar +3400015 FG5GH Edgar +3400016 FG5GP alain +3400017 FG4NN Jules +3400018 FG5GP alain 3420001 8P6PD Wilfred 3420002 8P6GC Emerson 3420003 8P6GJ Jasper 3420004 8P6GJ Jasper 3420005 8P6QA Emerson 3420006 8P9EL Vince +3420007 8P6DY Adrian +3420008 8P6ET Charles +3420009 8P6ET Charles +3420010 8P5AB Kammie +3420011 8P5AA Philip +3420012 8P6NW Glenroy +3420013 8P4JC Jeffrey +3420014 8P6RC Robert +3420015 8P6RC Robert 3421001 8P6PE Ishmael 3421002 8P6FB Desmond 3421003 8P6EC Trevor @@ -98092,15 +127983,30 @@ 3423001 8P6RY L 3425001 8P6BQ Douglas 3425002 8P6JK Courtney +3440001 V21RW Renville +3440002 V21RW Renville +3480001 VP2VFK Kazim +3480002 VP2VAO Ronald +3480003 VP2VAO Ronald +3500001 VP9KF Paul 3520001 J39JQ Cletus +3520002 J35X Derek 3521001 J35JG Jasper 3521002 J35JG Jasper 3541001 VP2MV Wilbert +3560001 V44KM Hugh 3580001 J69DS Frans 3580002 J62DX Frans 3580003 J69DS Frans 3580004 J66CD Ian 3580005 J69EL Vince +3580006 J69IH Johnny +3580007 J69FL Fabian +3580008 J69BB Rosemond +3580009 J69CU Lindsley +3580010 J69BP Euphretus +3580011 J66MA Michael +3600001 J88DM Reni 3601001 J88BP Curtis 3601002 J88BP Curtis 3601003 J88CU Sean @@ -98120,17 +128026,36 @@ 3620013 PJ2RAW Reginald 3620014 PJ2ND Jeffrey 3620015 PJ2T Caribbean +3620016 PJ2LJG Jimmy +3620017 PJ2RAW Reginald +3620018 PJ2KA Anthmar 3630001 P41RA Robert 3630002 P43R Rodrick 3630003 P43P Jacobo +3630004 P41S Safdar +3630005 P41E Etienne +3630006 P41E Etienne +3630007 P43DP Donald +3630008 P43JC Juan +3630009 P43T Anthony 3640001 C6ANM Tom 3640002 C6AWB Bill 3640003 C6APS Paul 3643001 C6ATH Timothy 3645001 C6AKE Ken +3650001 VP2EIH Ira +3650002 VP2EIH Ira 3660001 J73MBQ Roger 3660002 J73MBQ Roger 3660003 J73RJ Joseph +3660004 J72PJW June +3660005 J72ACD Aretha +3660006 J72JBT Ju-Lee +3660007 J72JLT Jules +3660008 J72VLW Valencia +3660009 J72AZ Achille +3660010 J72IMS Ishmael +3660011 J72ATJ Aikuali 3661001 J73GAR Gordon 3661002 J73CC John 3661003 J72HGL Hilkiah @@ -98140,16 +128065,71 @@ 3661007 J72ANR Anna 3668001 J72KW Kelvin 3669001 J72OSS Osacr -3680001 CL5LIC Livan -3680002 CL5LIC Livan +3680001 CM5LIC Livan +3680002 CM5LIC Livan +3680003 CL5LEG Luis 3700001 HI8DL David 3700002 HI8SEW Rafael 3700003 HI8K Alfredo 3700004 HI8EES Efrain -3700005 HI8EFS Elio +3700005 HI8CW Elio 3700006 HI8REC Fernando 3700007 HI8MAR Miguel 3700008 HI8EES Efrain +3700009 HI8NDG Daniel +3700010 HI3TT (Franky) +3700011 HI8GAM Guaroa +3700012 HI3MVL sergio +3700013 HI3NCF cristian +3700014 HI3CMM Cesar +3700015 HI5RFP Ruddy +3700016 HI3GPA Gustavo +3700017 HI8BAE Daniel +3700018 HI8JTE Thomas +3700019 HI3MAC Manuel +3700020 HI3MRF Michel +3700021 HI3MFR Michel +3700022 HI6DMM DANIEL +3700023 HI8NFB felix +3700024 HI3MAC Manuel +3700025 HI3H Julio +3700026 HI3RMP Ramon +3700027 HI3JJF Johnny +3700028 HI5NMS Manuel +3700029 HI8AM Fausto +3700030 HI8RG Ruben +3700031 HI3RDI Luis +3700032 HI3STS santos +3700033 HI8ESF Eduardo +3700034 HI8ESF Eduardo +3700035 HI8PIZ Victor +3700036 HI8PIZ Victor +3700037 HI3NCD cosme +3700038 HI3ALM ARNALDO +3700039 HI3GSB Givetto +3700040 HI3GSB Givetto +3700041 HI8ADK A +3700042 HI8RO Robinson +3700043 HI8NFB felix +3700044 HI3RAM Rafael +3700045 HI8EMT Ernesto +3700046 HI5ATA Lenin +3700047 HI5ATA Lenin +3700048 HI5FIW Fulvio +3700049 HI3RBO Bencosme +3700050 HI3U Juan +3700051 HI6JRD Jose +3700052 HI6JAJ Juan +3700053 HI3JJF Johnny +3700054 HI5KKK Kenny +3700055 HI6RAB Rafael +3700056 HI8NLO Luis +3700057 HI6SSP Siviel +3700058 HI3JEA Jonathan +3700059 HI6JCA Julio +3700060 HI4AMG Andres +3700061 HI8CCE Gil +3700062 HI5YJM Yeudy 3701001 HI8RCD Dominican 3701002 HI8VP Vantroi 3701003 HI8JSG Juan @@ -98192,7 +128172,7 @@ 3705008 HI5RSO Union 3705009 HI5CBB Carlos 3705010 HI5LT Loma -3706001 HI6DMM Daniel +3706001 HI6DMM DANIEL 3706002 HI6DTC Domingo 3706003 HI6AYC Alexis 3707001 HI7RRE Roberto @@ -98322,7 +128302,7 @@ 3708125 HI8LPT Luis 3708126 HI8SAV Sucre 3708127 HI8EJP Juan -3708128 HI8ADK Apolinar +3708128 HI8ADK A 3708129 HI8NON Jose 3708130 HI8TVL Teo 3708131 HI8VSP Viriato @@ -98346,16 +128326,24 @@ 3709003 HI9GAH Gregorio 3709004 HI9GAH Gregorio 3709005 HI9LT Loma -3720001 HH2MJF Johnny +3720001 HH2MJF HH2MJF +3720002 HH2CCD Cledor +3720003 HH2ECA Edva +3720004 HH2JRF Jean +3720005 HH2MJB Mardoche +3720006 HH2MCJ Michelet +3720007 HH2QRG Dorticos +3720008 HH2NCI Fritz +3720009 HH2SUD Samuel 3728001 HH2GD Gregory -3728002 HH2MJF Johnny -3728003 HH2MJF Johnny +3728002 HH2MJF HH2MJF +3728003 HH2MJF HH2MJF 3728004 HH2GD Gregory -3740001 9Y4DH +3740001 9Y4C Dexter 3740002 9Z4RG Ravindranath 3740003 9Z4JAG Bramie +3740004 9Z4HX Carlton 3740005 9Y4T Tommy -3740006 9Y4C Dexter 3740007 9Z4A Anthony 3740008 9Z4CG Jeff 3740009 9Y4DG Dev @@ -98380,20 +128368,132 @@ 3740028 9Z4PRG Pradeep 3740029 9Y4AT Jeffery 3740030 9Y4TL Keith +3740031 9Z3JC Jerome 3740032 9Y4IS Ivan +3740033 9Y4SH Steve +3740034 9Z3WIG Wesley +3740035 9Z4KM Kim +3740036 9Z4PZB Pat +3740037 9Z4G Gerald +3740038 9Z4AD Albert +3740039 9Z4LH Latchman +3740040 9Z4CP Eric +3740041 9Y4CAJ Calmette +3740042 9Z4Y Mark +3740043 9Z4Y Mark +3740044 9Z4HX Carlton +3740045 9Z4DAA David +3740046 9Z4DAA David +3740047 9Z4JBK James +3740048 9Z3GAM Garth +3740049 9Z4S Gary +3740050 9Z4HP Herbert +3740051 9Y4RRM Richard +3740052 9Y4NG Arnold +3740053 9Z4C Cuthbert +3740055 9Y4C Dexter +3740056 9Z4K Krishnan +3740057 9Y4BK Kenneth +3740058 9Z4RG Ravindranath +3740059 9Y4LAS Andy +3740060 9Y4VF Francis +3740061 9Z4RGN Ronald +3740062 9Z4C Cuthbert +3740063 9Y4CL Ramlall +3740064 9Z4FR Rohan +3740065 9Z4WD PHILIP +3740066 9Z4WD PHILIP +3740067 9Z4JC Junior +3740068 9Z3ADG Aaron +3740069 9Y4NW Neil +3740070 9Y4J Jeff +3740071 9Y4J Jeff +3740072 9Z4DMA Dinesh +3740073 9Z4KJ Kurt +3740074 9Z4W Anthony +3740075 9Y4BJ Jadoo +3740076 9Z4DMA Dinesh +3740077 9Z3SKG Shane +3740078 9Z3UB Urvyn +3740079 9Z4BRA Bridgelal 3760001 NP2Q Anthony 3760002 NP2DZ Russell 3760003 KP2O Klaus 3760004 KP2E Thomas 3760005 NP2OX Stanley +3760006 NP2LP Lawrence +3760007 NP2LP Lawrence +3760008 KP2BC Calvin +3760009 WP2Y Mark +3760010 NP2SA Timothy +3760011 NP2RN Ronda +3760012 NP2RN Ronda +3760013 WP2AHA Leonard +3760014 WP2AHA Leonard 3761001 WP2SC Sean 3761002 NP2X Fredk9vv +4000001 TA4IDR Suat +4000002 TA4IDR Suat 4010001 UN7ZAO Artyom 4010002 UN7ZAR Vitaliy 4010003 UN7ZAI Evgenij 4010004 UN7ZAO Artyom 4010005 UN7ZAI Evgenij 4010006 UN7ZAR Vitaliy +4010007 UN7FFA Vyacheslav +4010008 UN7FFA Vyacheslav +4010009 UN7PDP Nikolay +4010010 UN7PDP Nikolay +4010011 UN9GDI Aleksey +4010012 UN9GDI Aleksey +4010013 UN3PB Boris +4010014 UN3P Vladimir +4010015 UN7EG Gennady +4010016 UN0PA ALEXANDER +4010017 UN7PBK Vladimir +4010018 UN7BBJ Anatoly +4010019 UN7BBJ Anatoly +4010020 UN7UZA Hytera +4010021 UN7UZA Hytera +4010022 UN6GOO Oleg +4010023 UN7ECA Oleg +4010024 UN7ECY Vladimir +4010025 UN1EAE Viktor +4010026 UN7PBK Vladimir +4010027 UN1EAK Sergey +4010028 UN1EAK Sergey +4010029 UN7PDA Sergey +4010030 UN7BCF Alexey +4010031 UN1EAE Viktor +4010032 UN7ECY Vladimir +4010033 UN1EAU Yuriy +4010034 UN7PFN Andrey +4010035 UN7PFN Andrey +4010036 UN7ECK Yuri +4010037 UN7BLI Aleksei +4010038 UN7BCE Lyssenko +4010039 UN6QDV Danil +4010040 UN1EAU Yuriy +4010041 UN7BCF Alexey +4010042 UN7ZAF Dmitriy +4010043 UN6GLT Evgenii +4010044 UN6GLT Evgenii +4010045 UN7EGH Igor +4010046 UN7EGH Igor +4010047 UN7EG Gennady +4010048 UN2E Andy +4010049 UN2E Andy +4010050 UN6GDM Alexandr +4010051 UN6GDM Alexandr +4010052 UN5GFI Irina +4010053 UN6GIA Igor +4010054 UN6GIA Igor +4010055 UN5GEL Alexandra +4010056 UN7IY Yevgeniy +4010057 UN7ECE Viktor +4010058 UN8G Michael +4010059 UN7OGG Ibragim +4010060 UN1EAW Vadim 4016001 UN9LEI Valery 4018001 UN7FF Vyacheslav 4040001 VU3KAZ Krishna @@ -98411,6 +128511,7 @@ 4040013 VU2SON (Ms) 4040014 VU3TLR Sujay 4040015 VU3FPB Peter +4040016 VU3BGI Jyoti 4040017 VU3DCY Dinesh 4040018 VU2PJP Peter 4040019 VU3RGP Rakesh @@ -98448,6 +128549,129 @@ 4040051 VU3OWC Mathew 4040052 VU3OWC Mathew 4040053 VU2LRL +4040054 VU3MEN +4040055 VU3MEN +4040056 VU2OB SREEKUMAR +4040057 VU3MSW Sudhir +4040058 VU2XQ Nuwais +4040059 VU3OBN NISHA +4040060 VU2XQ Nuwais +4040061 VU3TOL Rahul +4040062 VU3TOL Rahul +4040063 VU3WOM Devank +4040064 VU3WOM Devank +4040065 VU3ZPT mehfuz +4040066 VU3ZPT mehfuz +4040067 VU3WGC +4040068 VU2JIO Jaison +4040069 VU2DTH Manoj +4040070 AU2PKD Palakkad +4040071 VU2DJ +4040072 VU3AYN Reghunadh +4040073 VU3MTY Asraf +4040074 VU2UCC SUNIL +4040075 VU3OBD Balamurali +4040076 VU2ITI Mani +4040077 VU2RBI DBharathi +4040078 VU3PPL +4040079 VU2CAC Shabu +4040080 VU3PFR Pradeep +4040081 VU3PFR Pradeep +4040082 VU2JPC Joseph +4040083 VU2GOJ Geo +4040084 VU2GOJ Geo +4040085 VU3WPW Sarath +4040086 VU2HW Rajani +4040087 VU3NGB +4040088 VU3NGB +4040089 VU2DED Ajaya +4040090 VU2NW Kuldip +4040091 VU3BHC Anita +4040092 VU3WYF Shikhar +4040093 VU3RUU Saurabh +4040094 VU3DQR Anuj +4040095 VU3LIV Nitant +4040096 VU3LMN NINAN +4040097 VU3OBR Saro +4040098 VU3LMN NINAN +4040099 VU2ICI Mohan +4040100 VU3OPR Sathish +4040101 VU3OBR Saro +4040102 VU3YPC Prashant +4040103 VU3YPC Prashant +4040104 VU3MFA MOHAMED +4040105 VU2KWJ Jatin +4040106 VU2XSB Satyendra +4040107 VU2XSB Satyendra +4040108 VU3RJY BSV +4040109 VU2GRM +4040110 VU2KWJ Jatin +4040111 VU3BYD Sachin +4040112 VU3BCN Priyasloka +4040113 VU3OQK +4040114 VU2TQC Jayant +4040115 VU2ORO Rajesh +4040116 VU2ORO Rajesh +4040117 VU3BVT B +4040118 VU3BOJ Bejoy +4040119 VU3ONY Srinivas +4040120 VU3ONY Srinivas +4040121 VU2JZK +4040122 VU2GKJ George +4040123 VU2RDN +4040124 VU3DWN Aravind +4040125 VU3UYV Sriram +4040126 VU2MHM DrVR +4040127 VU2MHM DrVR +4040128 VU3VXF SYEDJUNAID +4040129 VU2KUC Ramakrishnan +4040130 VU2KUC Ramakrishnan +4040131 VU3OQK +4040132 VU3DYR JAINENDRAN +4040133 VU2CH Amit +4040134 VU3WXH Vineesh +4040135 VU3IJX Subairulijas +4040136 VU2VEW Dhanesh +4040137 VU3IAF Sanjay +4040138 VU3YWK Ajay +4040139 VU2JFA Ambarish +4040140 VU3OSW Vimal +4040141 VU3LST LEO +4040142 VU3LST LEO +4040143 VU3YDA Abhrajit +4040144 VU3YDA Abhrajit +4040145 VU3OKT Dipak +4040146 VU3YWY Joe +4040147 VU3OKT Dipak +4040148 VU3VGP Arun +4040149 VU2WB West +4040150 VU2WB West +4040151 VU2JFA Ambarish +4040152 VU2JFB Rinku +4040153 VU3HVU Biswajit +4040154 VU3GQP Abul +4040155 VU3GQP Abul +4040156 VU3XRY Arunava +4040157 VU3JXF Saurav +4040158 VU3JXF Saurav +4040159 VU3SZG SUNIL +4040160 VU2ELD +4040161 VU2ELD +4040162 VU3DYH +4040163 VU2XVR +4040164 VU2MAU Adhir +4040165 VU2TLF Ram +4040166 VU3RQX Gaurav +4040167 VU3RQX Gaurav +4040168 VU3ZLS Likith +4040169 VU2DPN N +4040170 VU2DPN N +4040171 VU2MYH Ram +4040172 VU2MYH Ram +4040173 VU3WTJ Sirsendu +4040174 VU7RI SREEKUMAR +4040175 VU3MKH Malav +4040176 VU3RFG Ajai 4041002 VU3XVT Savitha 4041003 VU3XVT Savitha 4041005 VU2EOJ Suresh @@ -98461,7 +128685,7 @@ 4043005 VU3CKG Yudh 4043006 VU3TEG Raman 4043007 VU2YEP Karan -4043008 VU2OB Sreekumar +4043008 VU2OB SREEKUMAR 4043009 VU2UUU Kaustav 4043010 VU2VUV Tarveen 4043011 VU2BNH Mousumi @@ -98482,10 +128706,40 @@ 4043026 VU3BDN Prakash 4044001 VU2CMV Arnab 4100001 AP2CJ Shehzad +4100002 AP2ARS PARS +4130001 4S7JL Jaliya +4130002 4S6RYD RIYAD +4130003 4S6SJY Santhusht +4130004 4S5SC SA +4130005 4S5SC SA +4130006 4S7RS The +4130007 4S7RS The +4130008 4S6WAS Senarath +4130009 4S6WAS Senarath +4130010 4S7EF Ekendra +4130011 4S7EF Ekendra 4150001 OD5VJ Jean +4150002 OD5MY Youssef +4150003 OD5MY Youssef +4150004 OD5ZF Omar +4150005 OD5VB Anthony +4150006 OD5VB Anthony +4150007 OD5TI Hussein +4150008 OD5UP Radwan +4150009 OD5SF Ali +4150010 OD5VM Mohamad +4150011 OD5QY Bassam +4150012 OD5VN RIEMER +4150013 OD5NG Jean +4150014 OD5WN Normand +4150015 OD5WN Normand +4150016 OD5TV charly +4150017 OD5LP Nabil +4150018 OD5VK Jad +4150019 OD5WE Walid 4151002 OD5TE Hani 4151003 OD5VJ Jean -4151004 OD5YA Ghassan +4151004 OD5YA Gus 4151005 OD5ZV Moujab 4151006 OD5HP Amin 4151008 OD5VM Mohamad @@ -98502,11 +128756,33 @@ 4154005 OD5YU Sudad 4157001 OD5RW John 4160001 JY8HR Hani +4160002 E41WT Walaa +4160003 E41MT Mai 4180001 YI1RM Raaed +4180003 YI1SAL Salam 4190001 9K2MI 4190002 9K2OF Abdulla 4190003 K2SLI Carl 4190004 9K2RF Mohamad +4190005 9K2FM Ayesh +4190006 9K2AC Tareq +4190007 9K2AA Nabeel +4190008 9K2OK Waleed +4190009 9K2RR Faisal +4190010 9K2RX Basil +4190011 9K2RX Basil +4190012 9K2RR Faisal +4190013 9K2OW Hamad +4190014 9K2OK Waleed +4190015 9K2RF Mohamad +4190016 9K2OO Ahmad +4200001 HZ1SK Samir +4200002 HZ1CH Hussein +4200003 7Z1TT Hamdi +4200004 7Z1TT Hamdi +4200005 HZ1LG Nasser +4200006 HZ1LG Nasser +4200007 HZ2FZ Faisal 4201001 HZ1SK Samir 4201002 HZ1ZH Maan 4201003 7Z1IS Ibrahim @@ -98517,17 +128793,128 @@ 4203002 7Z1AL Abdulaziz 4203003 7Z1OO Ahmed 4220001 A41MO Sameer -4220002 A41KL Abdsamad -4220003 A41KL Abdsamad +4220002 A41KL Sam +4220003 A41KL Sam 4220004 A45TT Sangeeth 4220005 A41RF Aasim 4220006 A41RF Aasim 4220007 A45ZZ Arulkumar +4220008 A45ZZ Arulkumar +4220009 A41KC Idris +4220010 A41KC Idris +4220011 A41KT Hamed +4220012 A45VU Prince +4220013 A45VU Prince +4220014 A41CK Khalid +4220015 A41CK Khalid +4220016 A41JM Jamal +4220017 A41JM Jamal +4220018 A41RO Aziz +4220019 A41RO Aziz +4220020 A41KB Abdalla +4220021 A47RS Clubstation +4220022 A47RS Clubstation +4220023 A41KQ Ali +4220024 A41ZZ Khalid +4220025 A41RG Waleed +4220026 A41LP Adnan +4220027 A41LP Adnan +4220028 A41HA Hassan +4220029 A41HA Hassan +4220030 A41RE Khalifa +4220031 A41RD Masoud +4220032 A41CC Alwaleed +4220033 A41SH Faham +4220034 A41CC Alwaleed +4220035 A41SP Bader +4220036 A41LD Waleed +4220037 A41HF Haitham +4220038 A41RK suleiman +4220039 A41ZA Ali +4220040 A41LE Karam +4220041 A41KJ Siddiq +4220042 A41SS Talal +4220043 A41JT Abdi +4220044 A41SS Talal +4220045 A41RE Khalifa +4220046 A41LU Khalfan +4220047 A41OI Adnan +4220048 A41JZ Mohibulla +4220049 A41PG Ameen +4220050 A41QQ Fawziya 4250001 4Z1JD Jeffrey 4250002 4X1MA Ohad 4250003 4Z1AC Irad -4250004 4Z1AC Irad +4250004 4Z1YR Yoram 4250005 4Z5CF Yaniv +4250006 4X1EL Ehud +4250007 4X1VL David +4250008 4Z4ZQ Ronen +4250009 4Z1KD Gil +4250010 4X5MY Yoni +4250011 4Z4GX Ovadia +4250012 4Z5TR Avi +4250013 4X6ZE David +4250014 4X5KW Avi +4250015 4Z5LI Itzik +4250016 4X5DL Yaniv +4250017 4Z5OI Jurgen +4250018 4X1XR Benjamin +4250019 4X1XR Benjamin +4250020 4Z5PB Brandes +4250021 4X5EW Oleg +4250022 4X5IS Itamar +4250023 4X5CS Haim +4250024 4X1KD Dudu +4250025 4Z1AR Amir +4250026 4X4MDA Magen +4250027 4Z5OT Louis +4250028 4X5CQ Yehoshua +4250029 4X1KS Mark +4250030 4X1GP Peleg +4250031 4X1BA Amnon +4250032 4X5MT Avi +4250033 4X1KN Moti +4250034 4Z4WD Aharon +4250035 4X5VG Avishay +4250036 4X5EW Oleg +4250037 4X5AD Idan +4250038 4X5AC Avi +4250039 4Z9IBA hezi +4250040 4Z1SH Shimon +4250041 4X5DO Doron +4250042 4X5KQ Shai +4250043 4Z5BA Boaz +4250044 4X1ZW Zalman +4250045 4X5NM Mordechai +4250046 4X5YH Yehuda +4250047 4X5YM Yoram +4250048 4X5EF Eli +4250049 4Z5UE Borcho +4250050 4Z1RS Rich +4250051 4X6UL Lior +4250052 4Z5UE Borcho +4250053 4Z7CAC Amir +4250054 4X1GM Geoffrey +4250055 4Z1AR Amir +4250056 4X6YA Hilik +4250057 4Z5PI Mike +4250058 4Z7CAC Amir +4250059 4X1WB Itzhak +4250060 4X6AS Aharon +4250061 4Z4TK Dany +4250062 4X5IP Pasternak +4250063 4Z9XOR Yuval +4250064 4X5IQ Roy +4250065 4X5YU Sasha +4250066 4X5SO Gili +4250067 4X1HJ Itzhak +4250068 4X5FD Doron +4250069 4Z5ZO Nahum +4250070 4Z5ZB Shahar +4250071 4X5EF Eli +4250072 4X4OQ Zvi +4250073 4Z5TL David 4251001 4X1ZZ Howard 4251002 4Z1MB Moshe 4251003 4Z1JS Jack @@ -98541,7 +128928,7 @@ 4252003 4Z5YY Alon 4252004 4Z4DR Richard 4252005 4Z9HBC Rotem -4252006 4Z9BDD Haim +4252006 4Z1HL Haim 4252007 4Z1PS Siman-Tov 4252009 4Z7FCF Itamar 4252010 4Z1RZ Zurial @@ -98602,7 +128989,7 @@ 4253010 4X5RU Ranan 4253011 4Z7GEL Omer 4253012 4Z4BA Avi -4253013 4Z7WON Yoni +4253013 4X5MY Yoni 4253015 4X1BG Nimrod 4253016 4X1BG Nimrod 4253017 4Z5OY Ayran @@ -98613,7 +129000,8 @@ 4253022 4Z1IZ Avraham 4253023 4Z4RM Anatol 4253024 4Z1RM Naftaly -4253026 4X1UFM Israel +4253025 4X5MY Yoni +4253026 4X1UF Izzy 4253027 4Z1RM Naftaly 4253028 4Z5QL Irina 4253029 4X5AL Arie @@ -98622,7 +129010,7 @@ 4253032 4Z7HBB Meir 4253033 4X5BT Zvi 4253034 4Z5PT Valery -4253035 4X6AN Daniel +4253035 4Z1AN Daniel 4253036 4Z5AN Moshe 4253037 4X4OE Yechiel 4253038 4X6FU Yossi @@ -98635,7 +129023,6 @@ 4253046 4X5BH Hayden 4253047 4Z7DBH Dani 4253048 4X5MT Avi -4253049 4Z7IDN Idan 4253050 4Z7AZD Alexander 4253051 4X5KB Benzi 4253052 4Z7CSA Hen @@ -98644,14 +129031,14 @@ 4253055 4Z1WF Nestor 4253056 4X5HF IIan 4253057 4X5HF IIan -4253058 4Z7BOZ Boaz +4253058 4Z5BA Boaz 4253059 4Z5WB Louis 4253060 4X1VE Arieh 4253061 4X5EY Ephraim 4253062 4X1GP Peleg 4253063 4X5DB Dani 4253064 4X5AD Idan -4254001 4Z5YR Yoram +4254001 4Z1YR Yoram 4254002 4X5AA Tal 4254003 4X1HF Albo 4254004 4X1DA Rich @@ -98688,8 +129075,7 @@ 4254035 4Z7WTF Peleg 4254036 4X1FW Simha 4254037 4Z5PM Maxim -4254038 4X7BOZ Boaz -4254039 4Z7DVX David +4254039 4X5PI David 4254040 4X1YS Yoram 4254041 4Z5PG Israel 4254042 4Z1VC Yosef @@ -98706,13 +129092,13 @@ 4254054 4X5ER Mark 4254055 4X1OM Israel 4254056 4Z7ABR Ayre -4254057 4Z9BDD Haim +4254057 4Z1HL Haim 4254058 4Z5DF Aryeh 4254059 4Z1ED Elad 4254060 4Z4IX Keith 4254061 4X5CA Aviram 4254063 4Z4VH Noam -4254064 4Z7MAX Max +4254064 4X5RM Max 4254065 4X1YV Avri 4254066 4Z7KSA Kfir 4254067 4Z1TL Isaac @@ -98740,7 +129126,7 @@ 4255005 4Z4KR Dan 4255006 4X6KM Michael 4255007 4Z7DFI Kobi -4255008 4X1TI Efraim +4255008 4X1TI Efi 4255010 4X6KM Michael 4255011 4X5DF Doron 4255012 4X4FD Eli @@ -98756,15 +129142,19 @@ 4255023 4X5GA Guy 4255024 4X6AA Alon 4255025 4X5RS David -4255026 4Z7ROY Roy +4255026 4X5BR Roy 4255027 4X1MJ Dany 4255028 4Z5TT Issac -4255029 4Z7GBB Ronen -4255030 4Z7GBB Ronen +4255029 4X5GB Ronen 4260001 A92AA Fawaz 4260002 A93DX Steven 4260003 A93LT Ely +4260004 A92GR Mohamed 4260005 A92AB Ahmed +4260006 A92FF Adel +4260007 A92FF Adel +4270001 A71AE Mubarak +4270002 A75GD Krishna 4271001 A75GA Wlodzimierz 4271002 A71FJ Jameel 4271003 A71GO Aziz @@ -98785,6 +129175,28 @@ 4300003 A65BP Alexander 4300004 A65BP Alexander 4300005 A65A Nader +4300006 G8RBA Martin +4300007 A65CP Tony +4300008 A65FN Talal +4300009 A61AW Abdalla +4300010 A61AW Abdalla +4300011 A65GA Thomas +4300012 A61Q Abdullah +4300013 A61FJ Faisal +4300014 A65IT Maheir +4300015 A65DJ Paul +4300016 A61NN Khalid +4300017 A65AM Abbas +4300018 A65I +4300019 A65GF Andre +4300020 A65DP Manoj +4300021 A65RV Ramachandran +4300022 A65EP Mukhles +4300023 A65AT +4300024 A65EB rashed +4300025 A65CB Gerald +4300026 A61D Mohamed +4300027 A61TT Ahmad 4310001 A65IT Maheir 4311001 A65DC Martin 4311002 A65DR Paul @@ -98795,12 +129207,20 @@ 4311007 A61BN Mohammed 4311008 A65TD 4311009 G8RBA Martin -4312001 A65FH Zoltn +4312001 A65FH Zoltan 4312002 A65FN Talal 4312003 A61QQ Obaid 4320001 EP2KL Khalil 4320002 EP2CM Roshanak 4340001 UK8FFB Aleksey +4340002 UK8AMH Vasiliy +4340003 UK8AMH Vasiliy +4340004 UK8FFB Aleksey +4340005 UK8FBI Vera +4340006 UK8FF Anvar +4370001 EX0AA Ross +4380002 TA2NYQ Yusuf +4380003 TB4GMI None 4400001 JJ0NNU Toshirou 4400002 JJ0NNU Toshirou 4400003 JR0ZFR Mano @@ -98809,6 +129229,7 @@ 4400006 JA0YJK Yakifunanosato 4400007 JA0BXU Yoshiaki 4400008 JH0BDK +4400009 JG7ALI masafumi 4400010 JH0XYV Katsuhiro 4400011 JR0TBN Honzawa 4400012 JH0EYA Toshihiro @@ -98818,10 +129239,12 @@ 4400016 JG0KHR Yuuichi 4400017 JR5LLA Koichi 4400018 JH0CJH Toru +4400019 JR4DAJ Kazunori 4400020 JA0CQP Toyo 4400021 JR0DIL Gori 4400022 JK3LFV Yasuyuki 4400023 JA0EAK +4400024 JS6QMR sakamoto 4400025 JR0ZGB Yamaoku-Mura 4400026 JA0YJK Yakifunanosato 4400027 JA0BXU Yoshiaki @@ -98830,9 +129253,10 @@ 4400030 JA1PBV Sadao 4400031 JA1PBV Sadao 4400032 JO4JBW Ejnert -4400033 JF0WBW Masaki +4400033 JF0WBW Masa 4400034 JJ1JNM Garfield 4400035 JJ1JNM Garfield +4400036 JA1QML Yoshio 4400037 JH0YCQ 4400038 JD1BNY Kazuki 4400039 JJ0BGR Tozawa @@ -98843,12 +129267,330 @@ 4400044 JQ1ZZS Radioclub 4400045 JQ1ZZS Radioclub 4400046 JH6PPX Shinji -4400047 JE1BTJ Tsuyoshi(Gou) +4400047 JE1BTJ Tsuyoshi 4400048 JQ1YRD Yoshitec 4400049 JS1YAE Yoshitec 4400050 JS1YAE Yoshitec 4400051 JN1VFF Kobayashi 4400052 JH8FWD Akihiro +4400053 JR8YNX Takashima +4400054 JR8YNX Takashima +4400055 JR8YOM Komatsu +4400056 JI1XAC Junichi +4400057 JM8DBL Takashima +4400058 JI1XAC Junichi +4400059 JI1TWC Yousuke(Yoh) +4400060 JA9WWH shunsuke +4400061 JA9WWH shunsuke +4400062 JE3EMV Masatoshi +4400063 JE3EMV Masatoshi +4400064 7N4TWL Futoshi +4400065 7N4TWL Futoshi +4400066 JN4TBI Kassy +4400067 JN4TBI Kassy +4400068 JQ1YUX (Club) +4400069 JI1TWB Syunsuke(Syun) +4400070 JI1UDM Kenji +4400071 JH4GQC IsaoKoro +4400072 JI1UDM Kenji +4400073 JR4CQW Kazuo +4400074 JH4GQC IsaoKoro +4400075 JH7GLZ HIDEHO +4400076 JH1HMI Takashi +4400077 JP3UYP Minoru +4400078 JH7KAG Ito +4400079 JJ1CHF Hiro +4400080 JR1WFW Motoyoshi +4400081 JR1WFW Motoyoshi +4400082 JJ1CHF Hiro +4400083 JE8OPD Kotani +4400084 JP2RXU JUNJI +4400085 JS3ERV Kenji +4400086 JG3AGB T_Yukii +4400087 JH6PPX Shinji +4400088 JG3AGB T_Yukii +4400089 JR4CQW Kazuo +4400090 JE6RQN Takefuji +4400091 JO1UYH Sakae +4400092 JG4FFU Koichi +4400093 JE3KOV Masatosi +4400094 JE3MDJ FUKUI +4400095 JE3AVS Katsumi +4400096 JH6HXQ Koji +4400097 JJ3BTB TAKAFUMI +4400098 JH1WXW HIROSHI +4400099 JR2TTA Naoki +4400100 JQ1ZOR Radio +4400101 JJ5NEL Mikichan +4400102 JN1GUW Nobumasa +4400103 JQ1ZCZ 16 +4400104 JH6BMH Masanori +4400105 JA6VQA Akio +4400106 JA3DYM Yoshimitsu +4400107 JJ1OKX MOREY +4400108 JJ3BTB TAKAFUMI +4400109 JE1RAB Yasuo +4400110 JA1VDJ Shigeo +4400111 JE1RAB Yasuo +4400112 JP3TYY Norio +4400113 JR4CWB Hirai +4400114 JO4HHL Naoki +4400116 JO4HHL Naoki +4400117 JG4FFU Koichi +4400118 JG2ILO Hajime +4400119 JQ6QYA kenichi +4400120 JG6YDF kenichi +4400121 JG4BLW Koji +4400122 JH1NJN +4400123 JG6YKY Nekosafari +4400124 JA6GLD Nori +4400125 JG6YLB Nekosafari +4400126 JR0GPY Naoto +4400127 JL1CWC Nori +4400128 JA4EWS Miyoshi +4400129 7N3UCN arata +4400130 JG6YLB Nekosafari +4400131 JA6EKC Yoshiro +4400132 JL1CWC Nori +4400133 JA1BBX Yutaka +4400134 JR2PAU Nagy +4400135 JA6EKC Yoshiro +4400136 JR2PAU Nagy +4400137 JQ1ZLD Yasu +4400138 JS1YBS Tochigi +4400139 JA1ADP Nobuyasu +4400140 JG6YHS mikasamaru +4400141 JG6YHS mikasamaru +4400142 JA2GUO Masaaki +4400143 JJ5PCJ Nozomu +4400144 JA1NGA Kenji +4400145 7K2BPT Tsutomu(tom) +4400146 JP3RJR Kinya +4400147 JN1KVA Toshiya +4400148 JH0LRC Shigeru +4400149 JJ1PJI Kevin +4400150 JR0ZGN Shigeru +4400151 JK1QLR Keisuke +4400152 JJ2YTG Susumu +4400153 7N2CCK Yoshino +4400154 JH1HAT Kashiwa +4400155 JI1CAL Jun +4400156 JA1QML Yoshio +4400157 JL2SRP Yoshiaki +4400158 JI1CAL Jun +4400159 JH1MTK Keiji +4400160 JH0IEY H-Tamiya +4400161 6K2IXH +4400162 JR1NNV Kei +4400163 JH0IEY H-Tamiya +4400164 JA3AQV Toshinari +4400165 JP7FSO Shinya +4400166 6K2IXH +4400167 JJ1OKX MOREY +4400168 JP3EJC K +4400169 JA7BSU +4400170 JE3PRM Shingo +4400171 JA0AQX takeuchi +4400172 JI1DUU Yuto +4400173 JL3ZHI hamukurabu +4400174 JA0AQX takeuchi +4400175 7L1RMY MIkiwo +4400176 JL3ZJV Osaka +4400177 JL3ZJV Osaka +4400178 JA1QQV Akio +4400179 JE1FHG Ted +4400180 JA1KOO H-Tamiya +4400181 JA1MWF Kazuo +4400182 JJ1MXR Mitsuru +4400183 JA1KOO H-Tamiya +4400184 JJ1PMZ Yoshikazu +4400185 JA5WWD Iwamoto +4400186 JH3FNC MItsuru +4400187 JE6HOU Hayata +4400188 JA4QZD Tooru +4400189 JE6HOU Hayata +4400190 JA4QZD Tooru +4400191 JR2SWD Yoshikazu +4400192 JJ1QIH Kentaro +4400193 JH9XXF M-Imahori +4400194 JF3AND Shuhei +4400195 JO3XXM SUGAHARA +4400196 JH6JFO Ujikawa +4400197 JL4EHA Kawasaki +4400198 JI4EHA Kawasaki +4400199 JH1TWC Yasuji +4400200 JA7DNO Masahiro +4400201 JA3PNT kazuo +4400202 JE1GQM Mitsuyoshi +4400203 JR0ZFI Nagano +4400204 JJ1POL Dave +4400205 JJ1POL Dave +4400206 JP3VMU hiroaki +4400207 JA9DIJ NAKATA +4400208 JE4UZZ Maeda +4400209 JE6BVY maekawa +4400210 JG6YDV maekawa +4400211 JE6BVY maekawa +4400212 JH4SPU TSUYOSHI +4400213 JS2GUV yasu +4400214 JO2QIP Kiyoharu +4400215 JL1RTY Minoru +4400216 JR5YDB Tosacho_Bosai +4400217 JP7PCQ toshinori +4400218 JA6QGF Megumu +4400219 JO6RMM TOMINAGA +4400220 JA7IIZ Tsuneyasu +4400221 JK1EUG Naohito +4400222 JI1ELD OGURA +4400223 JL3QGA tosi +4400224 JO6NIK IKEDA +4400225 JA5ERQ Hitoshi +4400226 JK1KVL SADAO +4400227 JF3GOH May +4400228 JL1LTU kaz +4400229 JJ3CYE tetsuro +4400230 JN4WFW Shimono +4400231 JJ3OCN yamazaki +4400232 JR4JFL SHINGO +4400233 JH8YGJ hokkaidouDX +4400234 JF3GOH May +4400235 JA7NR Takahashi +4400236 JA7NR Takahashi +4400237 JJ3XBI Arai +4400238 JA3XBI Arai +4400239 JK1JXY Shinichi +4400240 JG2REE Shinba +4400241 JR2MGD Furuta +4400242 JA5CU Watanabe +4400243 JG1EVH Masayasu +4400244 JE8OFH Sadashi +4400245 JE8OFH Sadashi +4400246 JF1ULY Akio +4400247 JA8DKJ Takeshi +4400248 JA8DKJ Takeshi +4400249 JJ3XDM Kira +4400250 JO4GJG Takeshima +4400251 JG6JSV IMANAGA +4400252 JM2IPI Max +4400253 JA6DWF Akio +4400254 JF1RYU Masaaki +4400255 JF1RYU Masaaki +4400256 JF6YCQ jcmhamcrab +4400257 JJ6HZN ASAKURA +4400258 JA1EXH Norihiro +4400259 JA1VJB Fumio +4400260 JH1ITM Tsuneo +4400261 JA8KLS Takeda +4400262 JH1BRY ICHIRO +4400263 JN4WFW Shimono +4400264 JL6LCQ Asakura +4400265 JQ1RTA YOUICHI +4400266 7M2CKH kazuhiro +4400267 JM1YOV SAGAMI-NET +4400268 JS6UAM Nao +4400269 JF3NUQ Koji +4400270 JF3NUQ Koji +4400271 JI3BCS Ohashi +4400272 JI3BCS Ohashi +4400273 JH1NJN +4400274 JG1WNO Hiro +4400275 JH1HNB Shaun +4400276 JK1FQW Hirotugi +4400277 JK1FQW Hirotugi +4400278 7M4MON Hideaki +4400279 JS1YCB 225 +4400280 JP3WLF Umemoto +4400281 JA0CBU Chihiro +4400282 JP7NPI Ryu +4400283 JP1KZB Yoshio +4400284 JR2NVP Masahiro +4400285 JG1WBB Makioka +4400286 JE4TOP Yoshimi +4400287 JA5AZQ Kunihiro +4400288 JQ1SOA Katsumi +4400289 JH4MZD Takeda +4400290 JQ1SOA Katsumi +4400291 JA4SVS Jou +4400292 JO4EAY KIMURA +4400293 JP1GSI KEIICHI +4400294 JA1NSH eizo +4400295 JA1NSH eizo +4400296 JA4SEI Santo +4400297 JR5YBQ SETOUCHI +4400298 JO4BMK Toshinari +4400299 JH5GYF Toshinari +4400300 JI2GEG Kazuo +4400301 JS3XAM Sadahiro +4400302 JI2GEG Kazuo +4400303 JK1LDQ Kanaya +4400304 JI3XVB Kato +4400305 JK8BJA Muneo +4400306 JK8BJA Muneo +4400307 JI5ERZ Mie +4400308 JM1MTE Yoshikazu +4400309 JM1MTE Yoshikazu +4400310 7L4MCV TAKA +4400311 7L1GOS Kenji +4400312 JF6HQA KUSUHARA +4400313 JH4IEB Yasuyuki +4400314 JL7HHS Yoichi +4400315 JI1BPM Masami +4400316 JH6LIM TANAKA +4400317 JI1BPM Masami +4400318 JJ1IUX Takashi +4400319 JJ3FMP Shigehiro +4400320 JE4FNC Mamoru(Mamo) +4400321 JP3WUP okada +4400322 JN1JYD Ken +4400323 JA3KAR Hiroki +4400324 JG3IHE Seiichi +4400325 JG3IHE Seiichi +4400326 7L1RMY MIkiwo +4400327 JO2IQS HIROSHI +4400328 JO2IQS HIROSHI +4400329 JE4YOT Kazuo +4400330 JG4PAA marimon +4400331 JQ6QOP Tsuyoshi +4400332 JE6URE Yurichin +4400333 JA1XRN Yoichi +4400334 JO6WCE Suminori +4400335 JA4ZIX Yasuyuki +4400336 JS2VVH Kiichi +4400337 JP3LRG yoshinori +4400338 JJ1RDW Hiroyuki +4400339 JS1HEO fujita +4400340 JE6TUN Nakayama +4400341 JP3KEL Niina +4400342 JS2EMA yamaguchi +4400343 JS2EMA yamaguchi +4400344 JO4KBY Hitoshi +4400345 JG3JLC Hitoshi +4400346 JJ1DSU Kentaro +4400347 JM6BKG YKuroda +4400348 JJ0VBE Kanabe +4400349 JJ1PJI Kevin +4400350 JP7VHA Gotou +4400351 JR4LED Fujitsu +4400352 JA6EDJ Takefumi +4400353 JA1AVS YASUO +4400354 JR6JTO CHONO +4400355 JP3DSX Yutaka +4400356 JA0FLI Tashiro +4400357 JA0MIZ Tashiro +4400358 JP7MRS Monary +4400359 JA9JAC Hiroshi +4400360 JP7MRS Monary +4400361 JQ2SAI Tatsuya +4400362 JS1QIZ Takeshi +4400363 JP2LEY Sagou +4400364 JF9MSO HIROKAZU +4400365 JF3BIL SATAKE +4400366 JJ2YAE Kamenoko +4400367 JF6OTT YAMAUCHI +4400368 JR2JJP hitoshi +4400369 JA7KCL Fuchio +4400370 JA4FKO Masanori +4400371 JH5RFT Hideyasu 4401001 7M4MAS Tatuo 4401002 JQ1ZKG Sammu 4401003 JR1NVW Saito @@ -98942,9 +129684,9 @@ 4401094 JG1DOZ Hiro 4401095 JI1DHF Kazuya 4401096 7K4UBY Hiroyuki -4401098 JJ1EGA Yoshiaki -4401099 JQ1ZWX Yoshiaki -4401100 JQ1ZWX Yoshiaki +4401098 JJ1EGA Tashiro +4401099 JQ1ZWX Oneworld +4401100 JQ1ZWX Oneworld 4401101 7N4XAN Keisuke 4401102 7N4XAN Keisuke 4401104 JA1IPJ Fumio @@ -99019,13 +129761,13 @@ 4401179 JA1XEQ Yutaka 4401180 JE1BMF Okada 4401181 JH1TWX Yoshimi -4401182 JA1RTS +4401182 JA1RTS Teruo 4401183 JH1VOX Tiger 4401184 JM1FVO Yasuaki -4401185 JE1PIU +4401185 JE1PIU Taka 4401186 JI1DHR Angela -4401187 JQ1ZWX Yoshiaki -4401188 JJ1EGA Yoshiaki +4401187 JQ1ZWX Oneworld +4401188 JJ1EGA Tashiro 4401189 JQ1ZKF Orarion 4401190 JJ1YEG Sotobo 4401191 JJ1IQT Satoshi @@ -99057,7 +129799,7 @@ 4401217 JH1DUK Ikuma 4401218 JA1KZM Ken 4401219 JO1JVD Noboru -4401220 JE1PIU +4401220 JE1PIU Taka 4401221 JH1VOX Tiger 4401222 JJ1YYG Taka 4401223 JM1ZIL Taka @@ -99092,7 +129834,7 @@ 4401273 JL1PPL Jun 4401274 JH1RTU Hiroshi 4401275 JL1SRD Hiroyasu -4401276 7L2PBJ Naomichi +4401276 7L2PBJ Nao 4401277 JA1RCN Nagaosa 4401278 JK1QNO Kazuaki 4401279 JA2GKP Hiroyuki @@ -99103,12 +129845,12 @@ 4401285 JO1CTH Takashi 4401286 JN1IIH Masakazu 4401287 7K1BIB Takahiro -4401288 JA1BBX Yutaka(Yuh) +4401288 JA1BBX Yutaka 4401289 JJ1RMP Toshiyuki 4402001 JR2SRH Gosei 4402002 JR2MOK Masaru 4402003 JN2JWA Minoru -4402004 JA2NID Akira +4402004 JA2NID ASANO 4402005 JE2VQT Hiroyuki 4402006 JE2VQT Hiroyuki 4402007 JR2YJC Far @@ -99125,7 +129867,7 @@ 4402018 JJ2YQH Toshi 4402019 JR2TTS Jeffrey 4402020 JI2ATL Yuji -4402021 JA2NID Akira +4402021 JA2NID ASANO 4402022 JA2BYW Susumu 4402023 JA2WSM Tooru 4402024 JR2VSM Hisashi @@ -99184,7 +129926,7 @@ 4402091 JA5CUU Kazuyuki 4402092 JA5CUU Kazuyuki 4402093 JF2LHC Toshimoto -4402094 JP2RXU +4402094 JP2RXU JUNJI 4402095 JG2UKF Nagai 4402096 JR2YTU Owariasahi 4402097 JA2RZF Hiro @@ -99235,7 +129977,7 @@ 4403043 JI3IBK Masao 4403044 JS3BTW Masato 4403045 JQ3OTN Yuichi -4403046 JA3NCL Sumitoshi +4403046 JA3NCL Kataoka 4403047 JP3JXC Katsuya 4403048 JL3ZEO Mahoroba 4403049 JP3JXC Katsuya @@ -99243,7 +129985,7 @@ 4403051 JH3CMD Kugitani 4403052 JH3PBV Setsuo 4403054 JG3BVK Atuya -4403055 JA3NCL Sumitoshi +4403055 JA3NCL Kataoka 4403056 JL3ZEO Mahoroba 4403057 JH3FDH Hatsumi 4403058 JA3RTU Shizuka @@ -99290,8 +130032,8 @@ 4403107 JA3HHV Taichi 4403108 JL3VSE Kurokawa 4403109 JA3IYX Okuno -4403111 JA3HOY Toshi -4403112 JA3HOY Toshi +4403111 JA3HOY Schn +4403112 JA3HOY Schn 4403113 JP3LTM Junichi 4403114 JL3ZHR Ikenohata 4403115 JL3ZIN Okuno @@ -99389,9 +130131,9 @@ 4404050 JA4IXI Yasuaki 4404051 JA4UNI Masakatsu 4404052 JA4UNI Masakatsu -4404055 JH4JVT Teruto -4404056 JH4JVT Teruto -4404057 JO4GJG Yasuyuki +4404055 JH4JVT Maeda +4404056 JH4JVT Maeda +4404057 JO4GJG Takeshima 4404058 JE0ATD Kouichi 4404059 JR4ZKS Yurakukai 4404060 JG4XGD Tooru @@ -99656,12 +130398,12 @@ 4500040 6L5SMV Gwang 4500041 6K5CMY Kim 4500042 HL5BHZ Hee-Soo -4500043 6K5DJG +4500043 6K5DJG Byeung 4500044 DS2XWE Guck 4500045 6K5ADC Yong-Gyu 4500046 6K5DDD Jong -4500047 6K5ATY -4500048 6K5ATY +4500047 6K5ATY Jeong-Min +4500048 6K5ATY Jeong-Min 4500049 6K5CVK Do-Yeong 4500050 6K5CVL Gu-Chan 4500051 6K5CVM Gu-Yun @@ -99686,6 +130428,7 @@ 4500070 HL5IDV Rhee 4500071 DS5KCI Kwon 4500072 6K5CNR In +4500073 DS2NCV Park 4500074 DS5FRT Gab 4500075 HL5UQA Nam 4500076 6K5DKW Lucy @@ -99709,6 +130452,7 @@ 4500094 DS5HVJ Duck-Ho 4500095 HL5BXG Sungwha 4500096 6K5DOW Ki +4500097 HL2DTY Park 4500098 DS5NLP Park 4500099 HL5UBZ Kim 4500100 6K5DRJ Sung @@ -99717,10 +130461,21 @@ 4500103 DS5NST Ockjae 4500104 DS5NDW Shin 4500105 DS5NDW Shin +4500106 HL2DTY Park +4500107 DS2LQI BAE +4500108 HL2IGB Seung +4500109 HL2IGB Seung +4500110 DS1TNZ sangwoo 4500111 DS5BWI Sung 4500112 6K5COU Tarkdon 4500113 HL5PPT Jeong +4500114 DS3IFR Soo +4500115 HL2XJV Um +4500116 HL2XJV Um +4500117 6K5XEQ Young +4500118 HL2SUF 4500119 DS5FHZ Seong +4500120 HL2XWU Won 4500121 HL5BPF Bae 4500122 DS1LPC Tae 4500123 HL5PTH Ji-Bong @@ -99735,7 +130490,7 @@ 4500132 DS5DYN Jin-Ho 4500133 6K5BII Kang 4500134 6K5BII Kang -4500135 6L5SUR +4500135 6L5SUR Noh 4500136 HL5BUV Kim 4500137 6K5DTS Junheon 4500138 6K5DTS Junheon @@ -99776,6 +130531,8 @@ 4500173 HL5UTO Kim 4500174 DS5LOO Bang 4500175 HL5URV Moon +4500176 HL2XWU Won +4500177 HL2SUF 4500178 HL5JCB Kwak 4500179 DS5MBL Kang 4500180 HL5BPW Kim @@ -99783,10 +130540,15 @@ 4500182 DS5EPC Song 4500183 DS5ANB Jung 4500184 DS5OBN Sang +4500185 DS2QDY IN +4500186 HL3VP Kyoung-Sik +4500187 HL3VP Kyoung-Sik +4500188 DS5VHU Jin-heum 4500189 DS5LKI Tae 4500190 6M0TV Tae 4500191 DS5BLV Kim 4500192 DS5BVD Jae +4500193 HL5NOR Joeng-soek 4500194 DS5ZUX Lee 4500195 6K5DKG Cheol 4500196 6K5DBT Jae @@ -99798,9 +130560,14 @@ 4500202 HL5JFF Dongyoung 4500203 DS5BVW Park 4500204 DS0XX Busan +4500205 DS2NCV Park 4500206 DS5CSN Jaegeun 4500207 DS5CSN Jaegeun +4500208 6K2KKR Kim +4500209 6K2KKR Kim 4500210 6K0XL Haeundae +4500211 6L5SCO Kyu-sub +4500212 6K5VNY LEE 4500213 DS5DDP Jaekweon 4500214 6K5CMY Kim 4500215 6K5DDN Sang @@ -99809,11 +130576,18 @@ 4500218 DS5EOC Sang 4500219 DS5ENL Park 4500220 6K5DRX Sung +4500221 DS2KEI KI-SIK +4500222 6K5VNY LEE +4500223 DS3PTR Choi 4500224 DS5KYO Kim 4500225 DS5LIE Kim 4500226 DS5MGF Kim +4500227 DS3PTR Choi +4500228 6K5WQZ Young-Man +4500229 6M0UJ 4500230 DS5ANW Kim 4500231 HL5USN Yun +4500232 HL2DHE Taeguk 4500233 DS5VBK Tukkun 4500234 6K5DVM Lim 4500235 HL5USN Yun @@ -99836,6 +130610,7 @@ 4500252 HL5PPD Park 4500253 6K5DUH Seongdae 4500254 6K5DJH Jae +4500255 DS1SDQ Park 4500256 6K5DCR Jae 4500257 DS5NXY Kim 4500258 DS5LBG Kyoung-Won @@ -99843,6 +130618,7 @@ 4500260 DS5NXY Kim 4500261 6M0UM D-Star_repeater 4500262 6K5BKL Han +4500263 DS5NTA JongGan 4500264 6K5CZN Yang 4500265 6K5DMY Kang 4500266 DS5OXQ Shin @@ -99851,6 +130627,165 @@ 4500269 DS4WKI Sangho 4500270 DS5CIC Park 4500271 DS5CIC Park +4500272 DS1TMR Sonny +4500273 HL3FAI Peelsoon +4500274 HL3FAI Peelsoon +4500275 DS5BPW Kwak +4500276 DS5BPX Kwak +4500277 HL2ASZ Don +4500278 DS2KIT HYEON-CHEOL +4500279 DS2BXI Bubsung +4500280 6L5RCH Soo +4500281 6K5DOY Moonjae +4500282 KD2QAX Moonjae +4500283 HL5ZKM Zarina +4500284 DS5ZMH dong +4500285 DS2ENS Jong +4500286 HL1HG Woo-Yong +4500287 DS5DZD Lee +4500288 DS3DND Jonghyub +4500289 DS5BCS Maan-Hoe +4500290 6K5VZM SEONGO +4500291 DS3DND Jonghyub +4500292 DS5DYD Hee-Soon +4500293 6K2IMO Kim +4500294 DS5AJD HaeHyun +4500295 DS5FEO park +4500296 DS3FYA JEONG +4500297 DS1TND Sun +4500298 6K5YTM Kim +4500299 DS4HGH Kim +4500300 DS4HGI Kim +4500301 DS4HGJ Kim +4500302 HL4GKR Ki +4500303 DS4HGH Kim +4500304 DS4HGI Kim +4500305 DS4HGJ Kim +4500306 6K2KJP Moon +4500307 6K2KJP Moon +4500308 6K2KCW Mun +4500309 6K2KCW Mun +4500310 DS3PKP Pyeonghan +4500311 DS5AJD HaeHyun +4500312 6K5DVW Tae +4500313 HL3WQB SEUNG-TAE +4500314 DS2NWY Park +4500315 DS2NWY Park +4500316 DS5WKE Kwang-Ub +4500317 DS5WKF Kwang-Ub +4500318 6K5RGB Hee-chul +4500319 DS5WSS Kim +4500320 6N0YN Dalseo +4500321 6K2HMJ Kwang +4500322 HL5IL Suh +4500323 HL5IL Suh +4500324 6K2HMJ Kwang +4500325 6K5DBD +4500326 6K2KJR Seung +4500327 6K2KJR Seung +4500328 DS4DJT Nam +4500329 DS4DJT Nam +4500330 DS3PST Byung +4500331 DS1NMA Darien +4500332 HL2MHU Kyung +4500333 HL2DRY Kim +4500334 DS1TIH Sung +4500335 DS2RGH Kim +4500336 HL5FPE +4500337 HL2DRY Kim +4500338 DS1TLH Pang +4500339 HL1ADD MoonJae +4500340 HL1ELR BAN +4500341 HL1ELR BAN +4500342 HL1WLH Doosik +4500343 D80YL Doyoung +4500344 D80YP FDU +4500345 DS5DIS In +4500346 DS2FHR Seok +4500347 DS4HHU Park +4500348 6K5DWZ Hyung +4500349 HL4HMS +4500350 DS1TEC +4500351 6K5DXD Hyeon_ +4500352 DS1TOG WONDAE +4500353 DS1TOG WONDAE +4500354 6K5DWD Chol +4500355 6K2IXG Kim +4500356 6K2IXG Kim +4500357 DS1TBN younghwa +4500358 HL4CTI Sung-Ju +4500359 6L5SUO Jae-Moon +4500360 HL4CTI Sung-Ju +4500361 DS1SMG Seung +4500362 6K5TKK ChangSuk +4500363 DS1NSZ +4500364 HL5FZG EunPyo +4500365 D90IU +4500366 HL5QY Yang +4500367 DS4RGN Seung_chan +4500368 DS4RTH Cheol +4500369 DS4RAX Seongsu +4500370 HL1CCD PARK +4500371 HL1CCD PARK +4500372 DS4CIB Jae +4500373 DS5KKI SoungJe +4500374 DS5NUI Sim +4500375 DS5KKI SoungJe +4500376 DS5NUI Sim +4500377 DS4CIB Jae +4500378 DS4DCI Dong +4500379 DS4DCI Dong +4500380 DS4PJJ Jae-Sang +4500381 DS4PJJ Jae-Sang +4500382 DS5CYH Kevin +4500383 DS4HJM KIM +4500384 DS4HJR KIM +4500385 DS4RMY Hyeontae +4500386 DS4HGB Min +4500387 DS1SQN Taeho +4500388 DS5EOB shin +4500389 DS4RTM SANG +4500390 DS5FHE Dong +4500391 HL5KP Hyeonseung +4500392 6K5BPA Sundeok +4500393 DS4WIY Seonggeol +4500394 DS3POZ Junseok +4500395 DS3POZ Junseok +4500396 DS4RAX Seongsu +4500397 6L5SWV Dong +4500398 DS3DKW jihoon +4500399 DS4RQL None +4500400 DS4QMG +4500401 DS1SWB youngnoh +4500402 DS5RHT OuSooK +4500403 DS1SWB youngnoh +4500404 DS1SZC Sangyong +4500405 HL1ZIJ Niina +4500406 HL5PBM +4500407 6K2BKL +4500408 D70ZZ D70ZZ +4500409 DS5YJL +4500410 HL5UF Won +4500411 HL2DEA Hyeondeok +4500412 HL2DEA Hyeondeok +4500413 DS2UAT Jae +4500414 DS2UOL jin +4500415 DS5DPB DAE-GEUN +4500416 DS5DPB DAE-GEUN +4500417 DS2UOL jin +4500418 DS2UAT Jae +4500419 HL1LVW None +4500420 DS1AGC kim +4500421 HL0KTG KT +4500422 HL5NDO Kwang +4500423 DS4HJT Insang +4500424 DS1SEG Junbae +4500425 HL2IOR Huh +4500426 HL5PMM Jin +4500427 HL1QN Moon +4500428 HL1QN Moon +4500429 D90IN Hanam +4500430 6K2KMZ Chulhwan 4501001 6K2GBE 4501002 DS4GYP Won-gil 4501003 DS5TUK Joon @@ -99897,7 +130832,7 @@ 4501044 HL5FTC Kyongwon 4501045 HL5FTC Kyongwon 4501046 6L5SUM Dae-Soo -4501047 6L5SUR +4501047 6L5SUR Noh 4501049 6L5SUS Young 4501050 HL3BAT Tae-Sik 4501051 6K5XXN Jonghyeon @@ -99910,13 +130845,13 @@ 4501058 HL0KHQ 4501059 HL0KHQ 4501060 6L0LO 6lolo -4501061 DS4AEZ Jang-Saeng -4501062 DS4AEZ Jang-Saeng +4501061 DS4AEZ Jang +4501062 DS4AEZ Jang 4501064 HL5FAZ Lee 4501065 DS4FQS Seung-Hwan 4501066 6L5SVM Yongdae -4501067 D70YS -4501068 D70YS +4501067 D70YS daegujaenan +4501068 D70YS daegujaenan 4501070 DS4HFX Jong 4501071 DS4FQS Seung-Hwan 4501072 D73G Gwangju @@ -100030,7 +130965,7 @@ 4504057 6K5DFX Kwang-Soon 4504058 6K5CJE Sun 4504059 DS1JPI Youngjin -4504060 HL5FZG Eunpyo +4504060 HL5FZG EunPyo 4504061 DS5XJZ Sung 4504062 6K5RCH Soo 4504063 HL5PLB Jinhoon @@ -100067,7 +131002,7 @@ 4505030 HL3FR Jin 4505031 HL3EYL Kim 4505032 HL3EYL Kim -4505033 HL3BOS Won +4505033 HL3BOS WON 4505034 HL3ERJ Choi 4505035 DS3PEI 4506001 HL2KZJ Kwang-ok @@ -100164,7 +131099,7 @@ 4506098 HL2WJA Jung 4506099 HL0LYA Anyang 4506100 6K2IMV Junho -4506101 DS3ENR Kang +4506101 DS3ENR Kim 4506102 6K2EBN Hyeon 4506103 6K2EBN Hyeon 4506104 6K2IKE Hyoungsoo @@ -100239,13 +131174,13 @@ 4507032 DS1KPP Seongwon 4507033 DS1SQR Yj 4507034 DS3DNC Jongil -4507036 DS1ILL Jong 4507037 DS1TGF Han-Byeol 4507038 HL2DJV Yang 4507039 DS2NDD Yoo 4507040 DS2NDD Yoo 4507041 HL1DAQ Seokjae 4507042 HL1MCN So +4507043 DS5LRJ Sang 4507044 HL1WSA Ki 4507045 HL1ZIX Derek 4507046 6K2JEP Woo @@ -100258,7 +131193,7 @@ 4507054 HL1VSH Park 4507055 HL0J Dongguk 4507056 DS2KQA Jaejoon -4507057 6L5STH +4507057 6L5STH In 4507058 DS3ONV Jungwoo 4507059 DS1TFM (David) 4507060 DS1NVZ Youngchang @@ -100279,7 +131214,7 @@ 4507075 DS2YPT Kwon 4507076 HL1DCF Won 4507078 HL2WAE Jae -4507079 HL1SCI Lo_iksu +4507079 HL1SCI 4507081 DS1TLR Young 4507082 DS1SZK Eung-Pil 4507083 HL2BPP Sun-Kyum @@ -100324,9 +131259,10 @@ 4507138 6K2FJJ Jung 4507139 DS2AAW Choi 4507140 DS1TMU Hyunjun -4507141 HL1SCI Lo_iksu +4507141 HL1SCI 4507142 DS1IWR Song 4507143 DS1CAH Ahn +4520001 XV9JQC Kim 4521001 XV9JM Laurent 4521002 XV9JM Laurent 4521003 XV9OK Ken @@ -100591,13 +131527,13 @@ 4540258 VR2VHW Ho 4540259 VR2UCC Chung 4540260 VR2ZWR Sai -4540261 VR2VPW C +4540261 VR2HX C 4540262 VR2YEM David 4540263 VR2USP Rudy 4540264 VR2USX Nelson 4540265 VR2WMV Sze 4540266 VR2ZGZ Chan -4540267 VR2XKP Lee +4540267 VR2XKP Francis 4540268 VR2ZDX Christopher 4540269 VR2YYW 4540270 VR2XZK Lam @@ -100626,25 +131562,28 @@ 4540293 VR2UHO Ho 4540294 VR2UHI Raymond 4540295 VR2UJG To -4540296 VR2XKP Lee +4540296 VR2XKP Francis 4540297 VR2GM David 4540298 VR2IP 4540299 VR2IP 4540300 VR2UHV Y 4540301 VR2UJG To +4540302 VR2YWD MAK 4540303 VR2WAP Mui 4540304 VR2YSK Siu 4540305 VR2VIQ Kenny +4540306 VR2YWD MAK 4540307 VR2WWM Thomas 4540308 VR2VIQ Kenny 4540309 VR2WXZ Siu +4540310 VR2WPD Ronald 4540311 VR2URD Chi -4540312 VR2VRT +4540312 VR2VRT Theo 4540313 VR2ZXP Alfred -4540314 VR2UIP +4540314 VR2UIP Andy 4540315 JJ1CHR 4540316 VR2VFA Stanley -4540317 VR2UIP +4540317 VR2UIP Andy 4540318 VR2WFB Lau 4540319 VR2ZMK Joe 4540320 VR2ZMK Joe @@ -100657,10 +131596,13 @@ 4540327 VR2UWE Ho 4540328 VR2UWE Ho 4540329 VR2VUY Waihing +4540330 VR2AIR Isaac 4540331 VR2UQE Edward +4540333 VR2XXC Andrew 4540334 VR2VRC Leung 4540335 VR2WOR Jackie 4540336 VR2WOR Jackie +4540337 VR2ZTY Lai 4540338 VR2VMR Li 4540339 VR2YPZ 4540340 VR2YPZ @@ -100672,6 +131614,7 @@ 4540346 VR2VVR C 4540347 VR2LY 4540348 VR2XZX Man +4540349 VR2WGM Maximilian 4540350 VR2UND Cheung 4540351 VR2UIW Ho 4540352 VR2VSD @@ -100680,23 +131623,54 @@ 4540355 VR2CS 1555th 4540356 VR2YOO 4540357 VR20VVR C -4540358 1L5E C 4540359 VR2XRA Tony 4540360 VR2XGF Chi 4540361 VR2VZG Tc 4540362 VR2VZG Tc +4540363 VR2VGM CHAN +4540364 VR2ZHM Wai 4540365 VR2UOD 4540366 VR2ZAJ Andrew 4540367 VR2UGR 4540368 VR2UGR +4540369 VR2UJU Wing 4540370 VR2YTL K 4540371 VR2WUK Wu 4540372 VR2LO 4540373 VR2XAV Alan 4540374 VR2VQB Louis 4540375 VR2UOD +4540376 VR2VGM CHAN 4540377 VR2XLJ Koonwing 4540378 VR2XLJ Koonwing +4540379 VR2YBY Randy +4540380 VR2URF Fu +4540381 VR2WKL Lam +4540382 VR2XAI Seym +4540383 VR2XAI Seym +4540384 VR2XPE Robin +4540385 VR2XNO Anthony +4540386 VR2WTN Jacky +4540387 VR2WTN Jacky +4540388 VR2USE Charles +4540389 VR2UYV +4540390 VR2UJU Wing +4540391 VR2ZTY Lai +4540392 VR2YVK ison +4540393 VR2YUW YUK +4540394 VR2VKC Wing +4540395 VR2UQY Choi +4540396 VR2WES Wesley +4540397 VR2YVK ison +4540398 VR2ZRC KWONG +4540399 VR2YAU PANG +4540400 VR2WAO Cheung +4540401 VR2UKQ Simon +4540402 VR2ZZR Andrew +4540403 VR2ZFE Kenny +4540404 VR2YGM Rondy +4540405 VR2ZTW +4540406 VR2ZTZ None 4541001 VR2HKP 4541002 VR2ML 4541003 VR2WUM @@ -100715,6 +131689,7 @@ 4541028 VR2HKP 4541029 VR2HKP 4541030 VR2HKP +4550001 XX9AS Alberto 4551001 XX9DV Law 4551002 XX9CM Chan 4571001 XW6OU Larry @@ -100730,6 +131705,7 @@ 4600009 BG1PMS Li 4600010 BG4JJS Tao 4600011 VR2USB Cross +4600012 BG2DNT donglai 4600013 VR2UEA Sui 4600014 VR2UGX Yuen 4600015 VR2VUU Ka @@ -100745,7 +131721,6 @@ 4600025 VR2YDF Po 4600026 BG4DIB Yu 4600027 VR2VXD Ng -4600028 VR2ZZR Andrew 4600029 VR2YOQ Yat 4600030 VR2AAA Walter 4600031 VR2AAA Walter @@ -100765,22 +131740,23 @@ 4600045 BH3PZS Bin 4600046 BI3NFU Li 4600047 BH3PZS Bin +4600048 BG2AZX 4600049 BH8SXD Peng 4600050 BG5EIB Ding 4600051 BG8NRN Zhou 4600052 BG7FKC Hao 4600053 BG7THK Liao -4600054 BG6QYE Wenxian 4600055 BG0AQM Wu 4600056 BG0BQN Hongbin 4600057 BH3SJN Wang 4600058 BG8AZO 4600059 BG7DON Hao -4600060 BI7JTA Huang 4600061 BG0AVI Zhixi 4600062 BI8BLR Liou 4600063 BG0AVI Zhixi 4600064 BG8AZO +4600065 BG2ANE WEIQING +4600066 BD7MNP KAI 4600067 BH8SEL Li 4600068 BG0BZH Gao 4600069 BG0CAB Chao @@ -100790,6 +131766,7 @@ 4600073 BG0BSA 4600074 BH7PUE Wu 4600075 BH7NCW Jianhua +4600076 BG7JBJ YONG 4600077 BG0BPZ Faguang 4600078 BH4QBO Shi 4600079 BG0BNN Zhaochen @@ -100804,12 +131781,15 @@ 4600088 BG0AWQ 4600089 BG0AWQ 4600090 BG0BQN Hongbin +4600091 BG5UTJ Jian 4600092 BH8NOX Yushang 4600093 BH8NJX Ping +4600094 BG4NWB Lin 4600095 BD7YA Li 4600096 BG0BQK 4600097 VR2LT 4600098 BH3OXY Zuo +4600099 BG4NWB Lin 4600100 BG0BOI 4600101 BG8JNT Qinlin 4600102 BG7EVG Bin @@ -100825,18 +131805,26 @@ 4600112 BG2GA 4600113 BG8DZN Hua 4600114 BI4LTY -4600116 BG0CDN +4600115 BG8KCF Jianglin +4600116 BG0CDN Qun +4600117 BH1RPW Zhong +4600118 BH2UAV Wu +4600119 BD7MNP KAI 4600120 BG7ECA 4600121 BH7KCJ Eric +4600122 BD7IOX Huang +4600123 BH4EOB 4600124 BR2AG 4600125 BD7NJC Zhang 4600126 BR2AH +4600127 BH2UAV Wu 4600128 BG0BNK Zhengrong 4600129 BG7TON Zhou 4600130 BG8IKG Zhangong 4600131 BG7HVG Jing 4600132 BD7MRD Miaoxia 4600133 BG0BHX Feng +4600134 BA5DA Zhizhong 4600135 BG0AUP 4600136 BG0AQW Tiejun 4600137 BG0BMK Jun @@ -100847,8 +131835,8 @@ 4600142 BG0ARE 4600143 BG0AXS Yun 4600144 BG2WX -4600145 BI7ATA Ata 4600146 BG2WX +4600147 BD4QYG Yu 4600148 BH4EAI Chu 4600149 BG0AQW Tiejun 4600150 BD0BK Wenli @@ -100858,21 +131846,27 @@ 4600154 BH4ARI 4600155 BG0AVK Wang 4600156 BH5BMZ +4600157 BG5DCF lu 4600158 BG0BZN Xin 4600159 BG4ESO 4600160 BG4IIA 4600161 BI4LUU Wu -4600163 BH3CRO +4600162 BH1PWA LI +4600163 BH3CRO Guo +4600164 BG3SAQ zhijun 4600165 BG0AFA 4600166 BG0BUU Jincheng 4600167 BH8NXT GUANGLIN +4600168 BD4QMB 4600169 BG3OTT Gao 4600170 BG0CAA Tao +4600171 BD4QMB 4600172 BG0BDI Shiping 4600173 BG0BCD +4600174 BG3SAQ zhijun 4600175 BG3IAA Jian -4600176 BG4INP JNg -4600177 BH3BBJ +4600176 BG4INP JiNg +4600177 BH3BBJ Zuo 4600178 BH6KEU Haoyuan 4600179 BH5HDR Haoyuan 4600180 BG6RJC Hua @@ -100881,20 +131875,23 @@ 4600183 BG5DMA Wang 4600184 BG8HXW 4600185 BG0AUP -4600186 BG3MBB Yan 4600187 BG0AYY Qibin +4600188 BD4SRI 4600189 BG0AVP Shu 4600190 BG8EJT Wang +4600191 BD4SRI 4600192 BG0BVK 4600193 BG0BVQ 4600194 BD7LPO Zhiming 4600195 BG0BWJ Wong +4600196 BG7YVZ Hans 4600197 BH7KQB Guo 4600198 BH7JTB Li 4600199 BG0AYY Qibin 4600200 BG0BNK Zhengrong 4600201 BG7TVF Luo 4600202 BG4API Yi +4600203 BG7YBF Jackey 4600204 BG4API Yi 4600205 BD7JBE Lin 4600206 BG3OTT Gao @@ -100905,34 +131902,45 @@ 4600211 BG9XX Wang 4600212 BG9XX Wang 4600213 BD7LXP +4600214 BH1UKW Hong 4600215 BD7MCI Ling +4600216 BH4QCM Yang 4600217 BD7KVG Xiong 4600218 BH4EHQ 4600219 BH4EGN Xiaojun 4600220 BH4EGN Xiaojun +4600221 BI4XQQ Zhou 4600222 BG7YQ Xiaoshan +4600223 BG7YBF Jackey 4600224 BG2RKL Jiwei 4600225 BG3TJB Fan 4600226 BG0BUO Guoqiang 4600227 BG0BAC 4600228 BG0BBC +4600229 BI1GUL Fang 4600230 BG0BWM Zhang 4600231 BG0EK Li 4600232 BH4IWK Wentao +4600233 BG7YVZ Hans +4600234 BI1GJL Chen 4600235 BH3ASP Shijie +4600236 BG2KMU 4600237 BH4EGT Heng 4600238 BG4NFU 4600239 BH3BWI Xiaoming 4600240 BH3BWX Chen +4600241 BG7RPU Wang 4600242 BD3SN Zhen 4600243 BA7JG Yan 4600244 BD4XW Lixin +4600245 BG2DAR Yang 4600246 BH3SJM Jianmin 4600247 BG0BES Xi 4600248 BG7IVP Junmin 4600249 BH3BWH 4600250 BG3DYD Jian 4600251 BG7IVQ +4600252 BG4RVN hong 4600253 BG4CRJ 4600254 BG7ENO Lei 4600255 BD7JQO Thomas @@ -100945,6 +131953,8 @@ 4600262 BG0CHC Zhu 4600263 BG7IFP Haolue 4600264 BG8SOK Miao +4600265 BG3OZ cui +4600266 BH1WOG He 4600267 BH4DMQ Wen 4600268 BG7XYK Zhu 4600269 BH4ECI Zhao @@ -100955,30 +131965,47 @@ 4600274 BH4DMQ Wen 4600275 BD7LWI Zhi 4600276 BG0AXY Xiao +4600277 BH1WOG He +4600278 BH1NRY Wang +4600279 BG4XYE chun 4600280 BI7IOB Lin 4600281 BD7LMA Waico 4600282 BH4AIU Jia +4600283 BG4XYE chun 4600284 BH4EGM +4600285 BY4RSA +4600286 BG7BSM Wang 4600287 BG4AIZ Xu 4600288 BG0ARL Zhao 4600289 VR2UIW Ho +4600290 BD4SRW 4600291 BG0CJC Wei 4600292 BG0CJC Wei -4600294 BG0CFD +4600293 BD4SRD Yuanyuan +4600294 BG0CFD Mai 4600295 BG0CHC Zhu +4600296 BI3SCL Wenxing 4600297 BG0CFI Chen +4600298 BG7BSM Wang 4600299 BG0COD Zhao +4600300 BH1RPW Zhong 4600301 BG7HLA Lingyuan 4600302 BH7CQ -4600303 BI4JNV Han +4600303 BI4JNV han +4600304 BG1JAV JUNJIE 4600305 BG0AOV Chen +4600306 BI1GMG Zhang 4600307 BG4OXV Lei +4600308 BG6WSF Siman 4600309 BG7YRN Wang 4600310 BG4FUI Sheng 4600311 BD7OAY 4600312 BG4FVI -4600313 BD4QHI +4600313 BD4QHI Biao +4600314 BG6FHP Liu +4600315 BH3RBQ QIAN 4600316 BH4EOM +4600317 BG6FHP Liu 4600318 BH1CQB Zhan 4600319 BG6WFD Yu 4600320 BG6WFD Yu @@ -100996,15 +132023,680 @@ 4600332 BD7OIC Xie 4600333 BG5HGU Yang 4600334 BI1DSA Xiang +4600335 BH1OTD Zhenjing +4600336 BG6GTU Zhengfeng +4600337 BG7XYC Kai +4600338 BG7XYC Kai +4600339 BI4XGD Lu +4600340 BI4XHE Lu +4600341 BG1PHV Liu +4600342 BG1PHV Liu +4600343 BG7XXQ Tang +4600344 BH7BUJ +4600345 BG3KZE Yanbin +4600346 BH7BUS +4600347 BH5HGP LUN +4600348 BG1THS Ma +4600349 BG1THS Ma +4600350 BG6SMY +4600351 BH4BJQ jianting +4600352 BA4MY Ma +4600353 BA4MY Ma +4600354 BG7DWV +4600355 BG9AU Zhang +4600356 BG9FQS +4600357 BG6SMM Liming +4600358 BG6SMM Liming +4600359 BG6RER Too +4600360 BG9FQS +4600361 BG1CHA shaoliang +4600362 BG7FGE Yumiao +4600363 BG6TYT Hui +4600364 BG6TYT Hui +4600365 BG6TOT +4600366 BG1MB dai +4600367 BG6SSM Sheng +4600368 BG6SSM Sheng +4600369 BH4EGD Zhonghua +4600370 BI4MJX Zhen +4600371 BI4MJX Zhen +4600372 BH4OSN Yu +4600373 BD7JMN Ruiwei +4600374 BI4SID Sha +4600375 BH1VCS Liang +4600376 BG3HBR Yang +4600377 BI4XGA Tang +4600378 BH4BNQ Zhou +4600379 BG6VYU feng +4600380 BI4LKI Twister +4600381 BG5RGE HONG +4600382 BD4ROS Hui +4600383 BG3KBH men +4600384 BD4ROS Hui +4600385 BH3APK jiasheng +4600386 BG3AKC yougao +4600387 BH7BUJ +4600388 BH4LLP Yang +4600389 BH2TVR Li +4600390 BG7TJK Chen +4600391 BI4MXN +4600392 BI4KNM Zhang +4600393 BH4JND Tang +4600394 BH4EBS Shen +4600395 BH4EBS Shen +4600396 BH8SBE Liankai +4600397 BD7JQR Yujie +4600398 BD7OMA Xenon +4600399 BH1UGN Zhang +4600400 BH4VAA yong +4600401 BG2DMO Nanami +4600402 BG3HIT Ning +4600403 BH9DYX +4600404 BH9DYX +4600405 BH1XRQ Jiang +4600406 BH9CA Xiao +4600407 BH7BWV Zhu +4600410 BD7OQF Li +4600411 BG6VHG Wei +4600412 BH8PEH LIN +4600413 BG3IMW Wen +4600414 BH4EMN Xu +4600415 BG1FJS Jong +4600416 BH4PQP Xiao +4600417 BI3NDE xinghua +4600418 BD5BLY Xiao +4600419 BH6KVY +4600420 BG2IWK Fang +4600421 BD7NIG +4600422 BI3NDE xinghua +4600423 BD7OFK ZhenGuang +4600424 BH9CA Xiao +4600425 BH3DYU XINGLONG +4600426 BG7TNN Chen +4600427 BG9FQP li +4600428 BH7JTM He +4600429 BH4CQC +4600430 BD7ONQ jianfeng +4600431 BG0CFS Qicai +4600432 BD4RBX +4600433 BD4RBX +4600434 BA5DA Zhizhong +4600435 BH9DRG +4600436 BI4XXJ XiaoMan +4600437 BH4CAZ +4600438 BG9FFP li +4600439 BI7IZD +4600440 BG3CTD Jing +4600441 BG7NYT Neo +4600442 BG7NYT Neo +4600443 BG4MAO song +4600444 BI4MZA Chen +4600445 BG4MAO song +4600446 BI4MYM Jihong +4600447 BH4KOB Peng +4600448 BH4KOB Peng +4600449 BH7BTC Li +4600450 BG4UYS Gu +4600451 BH7BTC Li +4600452 BH9BAK +4600453 BH9BAK +4600454 BI7IZO Yu +4600455 BH9DVE He +4600456 BH3DVH XU +4600457 BH3DVH XU +4600458 BG4UYS Gu +4600459 BD4SDN Jiakang +4600460 BH4CQC +4600461 BD4QBF Song +4600462 BG5DCF lu +4600463 BH4DBZ +4600464 BG3MQM Xuejun +4600465 BD4SRN Haohao +4600466 BD4SRN Haohao +4600467 BH9AZU Qu +4600468 BI3TYI Ren +4600469 BI4TOM Sun +4600470 BH4BCS zhu +4600471 BH4VAP +4600472 BI4MJL Li +4600473 BH9AKW Yu +4600474 BH9AZT Su +4600475 BI6KSC Li +4600476 BH4ERL Xiaodong +4600477 BG3LGV +4600478 BG6UEM Hongxiang +4600479 BG6UEM Hongxiang +4600480 BH4ERI +4600481 BI4OSX Liu +4600482 BI7IZM LIANGMIN +4600483 BH9CQ Jioutian +4600484 BH3DZG +4600485 BH3DZG +4600486 BI4NFM Zhang +4600487 BG2DRN haijun +4600488 BH4ERI +4600489 BI4KQY Jia +4600490 BG2DIE peng +4600491 BG2DNO xuesong +4600492 BG2DRH Lu +4600493 BH9DZC Li +4600494 BG5USM CUNJIAN +4600495 BI4MEW Mingming +4600496 BH3EAT zhang +4600497 BI4MJM +4600498 BI4MIP Wang +4600499 BG2BZO +4600500 BG5USS +4600501 BG2RKH Lin +4600502 BG2RKH Lin +4600503 BI4MJM +4600504 BG5USS +4600505 BG6SZD +4600506 BG2CBD hao +4600507 BG7JDM xuesheng +4600508 BG3JZO +4600509 BG7YFP Qilin +4600510 BG9GYH Zhenglu +4600511 BI3OVY Shouwang +4600512 BG5USN Weihong +4600513 BG7JBJ YONG +4600514 BG7JDM xuesheng +4600515 BG4BWW +4600516 BH3PHG +4600517 BI4TXP Liu +4600518 BG9GYH Zhenglu +4600519 BI4VLG +4600520 BI1GLT Xu +4600521 BG6THE Yifu +4600522 BG5UTM YONG +4600523 BG5USP JIANGFU +4600524 BG4REG jing +4600525 BH1KSC Tian +4600526 BD7NMC Huang +4600527 BH9ELJ Shiyao +4600528 BI1EXF +4600529 BD4RCV Zheng +4600530 BG1DZQ Xing +4600531 BI1EXF +4600532 BH9ELJ Shiyao +4600533 BG9MXK Yulong +4600534 BH5EDQ Wu +4600535 BG9AMU Shi +4600536 BG4NCL Liu +4600537 BG9MXK Yulong +4600538 BG1MXQ zhang +4600539 BD7OGW Xuelin +4600540 BI4KQL Hejun +4600541 BG5FIM Hu +4600542 BG5FIM Hu +4600543 BH2UCB Zi +4600544 BH2UCB Zi +4600545 BG2DUG +4600546 BG1MXQ zhang +4600547 BI4ORU liu +4600548 BH4TCC SUN +4600549 BA9TX Xiangqian +4600550 BG9MQC Bozhao +4600551 BG2TPK ZHONG +4600552 BH4RPN Cheng +4600553 BH4RPN Cheng +4600554 BH4RWP +4600555 BH4RWP +4600556 BI3SQI Zhiwang +4600557 BI4TLB wei +4600558 BD4SRH ELLE +4600559 BG9NAB Hui +4600560 BG9NFH +4600561 BG9NUD Fuhong +4600562 BD4SRH ELLE +4600563 BI4TLB wei +4600564 BD4SRW +4600565 BD4SRD Yuanyuan +4600566 BG7YVB Zhi +4600567 BH1PIA +4600568 BG8SYB Cheng +4600569 BG8SYB Cheng +4600570 BH3WHN Peng +4600571 BI4KQL Hejun +4600572 BG9OHR Yong +4600573 BD4QBZ +4600574 BI4TXW Wang +4600575 BD4QBZ +4600576 BG4VGJ Jian +4600577 BG9NFN Xinzhong +4600578 BH4QIC Wu +4600579 BH6BGF +4600580 BH7JXW JN +4600581 BG7NQF +4600582 BG9NBX Bin +4600583 BH4VJV Shi +4600584 BH4ESA Jiazhou +4600585 BG3NIT Yongqiang +4600586 BI1EEK +4600587 BD9MI Jiqing +4600588 BI1CQF Bingbing +4600589 BI1CQF Bingbing +4600590 BG3LKF chao +4600591 BG3LKG xinyong +4600592 BG3LKI Li +4600593 BD7NYZ +4600594 BH4ERU Chunyu +4600595 BD5HLI +4600596 BG7GRE Yi +4600597 BD5HLI +4600598 BH3BBM Lu +4600599 BG5HHP Xiao +4600600 BG5DCG xiaohua +4600601 BG2CPE Yan +4600602 BG5DAT Feng +4600603 BG5DCG xiaohua +4600604 BA9TX Xiangqian +4600605 BG9EE Chengxiaohong +4600606 BH3STL Zhanqiang +4600607 BI3RYK +4600608 BH3STF Jinping +4600609 BI3RYK +4600610 BG9EE Chengxiaohong +4600611 BI8EIZ wenda +4600612 BI6KEL Cui +4600613 BD7JAI WeiLiang +4600614 BG4CLH Dong +4600615 BG4RJT qun +4600616 BG5EOE Wang +4600617 BG4RJT qun +4600618 BG2AXG Zhao +4600619 BH4ETL zhang +4600620 BH3EBK Kong +4600621 BH4DVX Gu +4600622 BH4DVX Gu +4600623 BH4VJV Shi +4600624 BI1ADA Lei +4600625 BH4ETE Zhijie +4600626 BI1EZI shanya +4600627 BH7CSH Xuan +4600628 BH4VAP +4600629 BH9DX Lin +4600630 BH7CSH Xuan +4600631 BI4UMB qinjun +4600632 BI4UMB qinjun +4600633 BH9DX Lin +4600634 BH4DYI +4600635 BG1KSQ juntao +4600636 BI8DEA Ma +4600637 BI8DEA Ma +4600638 BG1KSQ juntao +4600639 BH2TPV Xin +4600640 BH2TPV Xin +4600641 BH3DPD Jiashun +4600642 BG7MMN +4600643 BH4ETE Zhijie +4600644 BH3DPD Jiashun +4600645 BG7MMN +4600646 BH3EBK Kong +4600647 BD4RCL +4600648 BG2CMM Zhi +4600649 BI3SSJ Haixu +4600650 BG7DTJ Hao +4600651 BD3NK Cao +4600652 BI1GIB +4600653 BG4CRF +4600654 BI1GIU Yi +4600655 BI1GIU Yi +4600656 BG7YWQ Wat +4600657 BG7YWQ Wat +4600658 BH9EMI LiYu +4600659 BA8SX He +4600660 BH3BFE Xin +4600661 BH3BFE Xin +4600662 BG3UME Chen +4600663 BA8SX He +4600664 BH2TUV Zhe +4600665 BG3UME Chen +4600666 BI3PIE Fengxiao +4600667 BI3PIE Fengxiao +4600668 BI4MKA Zhang +4600669 BG9IHY Libao +4600670 BI3SUE +4600671 BI4WRQ +4600672 BI4WRQ +4600673 BI4TZM +4600674 BI4MJD haipeng +4600675 BG9HXO +4600676 BH6AOK Liu +4600677 BI3QMI Shi +4600678 BG3NCT Wang +4600679 BG3NCT Wang +4600680 BI3QMI Shi +4600681 BH2UEA Yue +4600682 BH3NME LiYong +4600683 BH4USZ +4600684 BI4MJL Li +4600685 BI4MJD haipeng +4600686 BG5EKR +4600687 BG5EKR +4600688 BH3NME LiYong +4600689 BD3NK Cao +4600690 BH1TZO Ning +4600691 BH3PAO Gao +4600692 BH3PAO Gao +4600693 BG8FZ Tu +4600694 BI3SSJ Haixu +4600695 BH4ETZ Wei +4600696 BH4ETZ Wei +4600697 BH4USZ +4600698 BH1FVL +4600699 BH1FVL +4600700 BI7IHP SONYFU +4600701 BI3QCF Liang +4600702 BG6CUV Lirong +4600703 BG6CUV Lirong +4600704 BG4SOM GONG +4600705 BG4MJR Xiangqian +4600706 BG4MJR Xiangqian +4600707 BG4FCU +4600708 BH4EUT ZHICHAO +4600709 BH3SKU Yonghong +4600710 BG4UVD Zhou +4600711 BH4AAD Jie +4600712 BH4AAD Jie +4600713 BI4SNE Peng +4600714 BG3ITB Chen +4600715 BG3UDT JUNGANG +4600716 BH3EAN Tian +4600717 BG4FLR Keke +4600718 BI4WPR HUANG +4600719 BG4FFG Gu +4600720 BG3OIU wang +4600721 BG4FFG Gu +4600722 BG3ITB Chen +4600723 BI7JTA HUORONG +4600724 BI7JTA HUORONG +4600725 BI7IZQ Liang +4600726 BG5TWQ Ye +4600727 BG7JBT GUOFANG +4600728 BI6KXX Cherry +4600729 BI6KSS +4600730 BG9ICM +4600731 BI7LSH Jianjun +4600732 BI7LVC wang +4600733 BG9ICM +4600734 BG9HXO +4600735 BG9IHY Libao +4600736 BH3SVL None +4600737 BD4RGU +4600738 BG7JBT GUOFANG +4600739 BD4AGK Ni +4600740 BH4DGY Wenqing +4600741 BI4XGO Yao +4600742 BH4DGY Wenqing +4600743 BG3LKI Li +4600744 BH4BKF Fan +4600745 BG3HUQ Si +4600746 BH4BKF Fan +4600747 BI7LVC wang +4600748 BG8KFI Star +4600749 BG9HRK Xinqing +4600750 BG4ESI Zhu +4600751 BG9HRK Xinqing +4600752 BI1DZY Hai +4600753 BH4AEA Guan +4600754 BG9IJT Fanchu +4600755 BG4EEY Qian +4600756 BI1DZY Hai +4600757 BG4DSI Ren +4600758 BH1NEK Tian +4600759 BH2UAJ Lu +4600760 BH2UEL Zhang +4600761 BH2UAJ Lu +4600762 BI4KQY Jia +4600763 BH1WJQ yibing +4600764 BH1WJQ yibing +4600765 BD7JML wang +4600766 BG8VE QiYong +4600767 BI1CBF shanyong +4600768 BH1LGO Wang +4600769 BD3MMA Xiaolin +4600770 BG7AUW zhouhaitao +4600771 BI1HSC +4600772 BD3MTX linpeng +4600773 BD3MTX linpeng +4600774 BA3NM Xingwang +4600775 BA3NM Xingwang +4600776 BI4SBK Liu +4600777 BI4SBK Liu +4600778 BG5FPP XinGuo +4600779 BG5FAE XiaoHua +4600780 BG5FAA HuaDong +4600781 BD3OKI Hua +4600782 BA3QU Yanan +4600783 BA3QU Yanan +4600784 BD3OKI Hua +4600785 BI3NET ren +4600786 BI3MWU Hongyu +4600787 BG9ILY Wei +4600788 BG9ILY Wei +4600789 BI3ODE zhang +4600790 BG9ILX +4600791 BG9ILX +4600792 BG3ILE Ruixin +4600793 BG3ILE Ruixin +4600794 BG9IJT Fanchu +4600795 BG2DVL HongXing +4600796 BI7NPU bo +4600797 BG7ITM Weifan +4600798 BH4OCJ Tao +4600799 BI3SQH Zhihui +4600800 BH4EVB xiaomeng +4600801 BG3TQS +4600802 BH2QKU Yuehui +4600803 BG2SXJ Jingli +4600804 BD3MVR pengcheng +4600805 BG3RXA chen +4600806 BH2QKU Yuehui +4600807 BD7IKT liao +4600808 BH4EHS Qiao +4600809 BG3PNS liang +4600810 BD4RVC Cao +4600811 BH7NWE +4600812 BD3OOO +4600813 BH7NWE +4600814 BD4RVC Cao +4600815 BD3NDD +4600816 BH3WNL Wenzhao +4600817 BI3NFA kaowu +4600818 BI3NBZ zhengyu +4600819 BG3PEA xiaohui +4600820 BG3RY zhanguo +4600821 BG3TAY Zhao +4600822 BG6VLU LU +4600823 BH2UJC DingRui +4600824 BI7JHA Zeng +4600825 BD7KCY Fei +4600826 BI7JHA Zeng +4600827 BH3NDZ Gang +4600828 BD7MCJ Wei +4600829 BH3RQT +4600830 BD4SMM Xudong +4600831 BD4SMM Xudong +4600832 BG2QGY +4600833 BD7NKD Liu +4600834 BD7NKD Liu +4600835 BG7GV Liu +4600836 BI1BKL weiwei +4600837 BG7GV Liu +4600838 BI4ISG Fujian +4600839 BG5UTC LIN +4600840 BA8SY +4600841 BG6SHR Dongming +4600842 BA8SY +4600843 BG2DWH Guo +4600844 BG2DWL Jiang +4600845 BH4EOU guan +4600846 VR2VAV Gary +4600847 BH4EOU guan +4600848 BG7WJG Wei +4600849 BH3WTX +4600850 BD4TNN Nannan +4600851 BG2DWK zhao +4600852 BG9IML Zhao +4600853 BG7WZN Zhang +4600854 BG2JET Jin +4600855 BG2QGY +4600856 BH2UJC DingRui +4600857 BD2QQ Tao +4600858 BI1AFL gai +4600859 BG7WYT Wu +4600860 BD4TNT Liu +4600861 BI1ETJ xin +4600862 BH1UYR wang +4600863 BI8DON +4600864 BI8DON +4600865 BG7XYG Yi +4600867 BG7LMT Zhe +4600868 BG5USZ WEI +4600869 BG5UTA WEI +4600870 BG5UTD SU +4600871 BG5UTB XU +4600872 BD4TMM Lu +4600873 BI7IZE yudong +4600874 BI8DHZ Xufei +4600875 BG7XWK Huang +4600876 BA3OA +4600877 BG4ECN Liu +4600878 BD4TOA Wang +4600879 BI1GIN Wei +4600880 BG4ECN Liu +4600881 BI8CQD Wang +4600882 BG7XWE Miao +4600883 BD3NYQ xin +4600884 BG7YID haidi +4600885 BG7XWE Miao +4600886 BG7OSE wei +4600887 BA8SZ Jiang +4600888 BA8SZ Jiang +4600889 BD3MQM Yan +4600890 BA3ON JIaXing +4600891 BI7OJL +4600892 BA3OC Zhi +4600893 BG7XVX huang +4600894 BH3RRT yong +4600895 BG6JAI Xiaoli +4600896 BH3RRT yong +4600897 BG7XVX huang +4600898 BG3RBE YaNing +4600899 BG2DUW QI +4600900 BG2EEE Yun +4600901 BG3LNZ None +4600902 BG9ICH Quan +4600903 BG9HXK +4600904 BG9HXK +4600905 BG9ICH Quan +4600906 BI7NTK wizard +4600907 BG2DUW QI +4600908 BG9GSP guosheng +4600909 BD4SDW liangdong +4600910 BI1GDF +4600911 BI3OXH Xiao +4600912 BG7XVV +4600913 BG9IMM +4600914 BG9IMM +4600915 BD3NFV +4600916 BD3NFV +4600917 BI4VGQ None +4600918 BI7KGB Zhong +4600919 BG5TQE Xiaohui +4600920 BA7JAN XiaGuang +4600921 BG5TQE Xiaohui +4600922 BA7JAN XiaGuang +4600923 BD4TNF ZHANG +4600924 BG0CSU GuoWei +4600925 BG0BPL Xiangzhou +4600926 BG0CSU GuoWei +4600927 BG0BPL Xiangzhou +4600928 BG0CSC Yun +4600929 BH4EWI Zhiyong +4600930 BG7TSA Qin +4600931 BG0CSC Yun +4600932 BH4EWI Zhiyong +4600933 BG4QL +4600934 BG8KJC Cheng +4600935 BG4CIZ Jie +4600936 BG4CIZ Jie +4600937 BG8KJC Cheng +4600938 BI8DSC +4600939 BH8VIJ Cheng +4600940 BH4BCT Jing +4600941 BG3RRJ Yongming +4600942 BI4SWX Zen +4600943 BI1ETJ xin +4600944 BI4XGL Xi +4600945 BI4XGL Xi +4600946 BI3MYJ +4600947 BI3NAJ Qinghe +4600948 BG5DEF None +4600949 BG0BEV zhao +4600950 BG0CKM Zhao +4600951 BG6WII Gao +4600952 BI4PGN Wei +4600953 BA7JAX adam +4600954 BI7NPF Qihong +4600955 BG0CKM Zhao +4600956 BI7NPF Qihong +4600957 BH4EPM yiping +4600958 BH5HOH Tao +4600959 BH6AOV Gong +4600960 BG3LDS +4600961 BG6WII Gao +4600962 BD7LFH +4600963 BG0CNS +4600964 BG0CNS +4600965 BG8NG YI +4600966 BH3EFP Jin +4600967 BH3EFP Jin +4600968 BG8NG YI +4600969 BG6SEP Lin +4600970 BA3QY +4600971 BG0CJF yang +4600972 BG0CJF yang +4600973 BH5HOH Tao +4600974 BG0CQV Pang +4600975 BG0CQV Pang +4600976 BG6TWT Tim +4600977 BI3PNV +4600978 BI3PNV +4600979 BH4CAD Hongfei +4600980 BG4FUI Sheng +4600981 BI3OGT gui +4600982 BI8CAK Wei +4600983 BG7RXQ ludy +4600984 BG7RXQ ludy +4600985 BG3MKE Xiaoming +4600986 BI7NPX Feng +4600987 BG6TDG Dong +4600988 BD4SNK WenShuai +4600989 BG1EJS +4600990 BD4SMC Si +4600991 BD4SMC Si +4600992 BD4SNS Shuai +4600993 BD4TNK Yao +4600994 BD7IBN Li +4600995 BA7JDR wei +4600996 BA3OA +4600997 BG5ERG +4600998 BI4LWL zhixin +4600999 BG5ERG +4601000 BD2QQ Tao +4601001 BG7TZL Luo 4601002 BG0CAB Chao 4601003 BH3QBY Wu 4601004 BH1BWE Shuo 4601005 BH1MCB Xiaojian 4601006 BH1MNM Chunhai -4601007 BH1SZV Liu 4601008 BH1OZF Dong +4601009 BH3BBU Fengliang 4601010 BI1AMN Wan 4601011 BD1CN Jingwei +4601012 BD3NMU 4601013 BH1NSN 4601014 BH1RZY 4601015 BI1BID @@ -101030,6 +132722,8 @@ 4601035 BH1SLP 4601036 BH3TOH Ming 4601037 BG1QAH Bo +4601038 BD4RVM Wang +4601039 BG7TZL Luo 4601040 BG1KJQ Shibin 4601041 BG1KJQ Shibin 4601042 BH1UVS Song @@ -101040,7 +132734,9 @@ 4601047 BH1ONQ 4601048 BG1LUO Zhongyu 4601049 BG5TZZ Bin +4601050 BD4RVM Wang 4601051 BH1VSA +4601052 BL7JV Gary 4601053 BG1LSN Zhang 4601054 BG1UFC Li 4601055 BH1WZT Zhang @@ -101051,20 +132747,26 @@ 4601060 BH1GJT Wang 4601061 BH1GJT Wang 4601062 BH1BOQ Du +4601063 BD4TMT Ni 4601064 BH1RYS 4601065 BH3QHI 4601066 BI4VTT Lu 4601067 BH3QHI +4601068 BH3BBU Fengliang 4601069 BG8HNM Yuyu 4601070 BD1RT Lv +4601071 BD3MQM Yan +4601072 BD3NMU 4601073 BH1NSD Liang 4601074 BG1PDU Cheng 4601075 BH1TYU Tao +4601076 BD4TMT Ni 4601077 BH1RIO Chi 4601078 BH1TTE Baokai 4601079 BG1LQV Pan -4601080 BG3FJF +4601080 BG3FJF Guo 4601081 BH1UPO Terry +4601082 BI1IAD None 4601083 BH1UVJ Fu 4601084 BI1AGD Shuying 4601085 BI1AGD Shuying @@ -101072,22 +132774,33 @@ 4601087 BH1VVI Zhang 4601088 BG1PC Ze 4601089 BG1PC Ze +4601090 BI1IAD None +4601091 BG5UTN Xi 4601092 BH1ORH 4601093 BH1TSL Yang 4601094 BH1TSL Yang 4601095 BG1GXG Zongsheng +4601096 BH3BBM Lu 4601097 BH1VOR Jin 4601098 BG1NZR Li 4601099 BG1NZR Li 4601100 BH1RIR Tianrui +4601101 BH6AOV Gong 4601102 BH1ITW +4601103 BD4UK Xia 4601104 BH1SWF Yuning 4601105 BG1VIS Xuelin 4601106 BI1AKD Chao 4601107 BI1AXR Ting +4601108 BD4UK Xia +4601109 BG2CPM Jun +4601110 BG2CPM Jun +4601111 BA7JCW Tang +4601112 BG2DUY 4601113 BH1SMQ 4601114 BH1RYS 4601115 BG1VOX song +4601116 BA7JCW Tang 4601117 BG8JNQ Gong 4601118 BI1CIV Wu 4601119 BI1CIW Zhang @@ -101099,12 +132812,14 @@ 4601125 BG8JNP Yang 4601126 BI1CIV Wu 4601127 BG9ALO Yingjie -4601128 BH3MS +4601128 BH3MS Hui 4601129 BI1CIW Zhang +4601130 BG7YXY 4601131 BG8JNS Feng 4601132 BI1BTZ Kai 4601133 BI1BTZ Kai 4601134 BH1RJC +4601135 BH3MPK Chi 4601136 BG1HTH Jin 4601137 BH1BWE Shuo 4601138 BH1RQN Zhang @@ -101113,7 +132828,10 @@ 4601141 BH1XRH Xiaobing 4601142 BI1BYG He 4601143 BH1WVL Jayden +4601144 BG6QYE Wenxian 4601145 BH1JFB Guowei +4601146 BG6QYE Wenxian +4601147 BD3MKD qing 4601148 BH1XUW Shuyu 4601149 BH1JWR Zhang 4601150 BH1KAU Zhou @@ -101135,7 +132853,7 @@ 4601168 BG1HVU Ji 4601169 BI1CWX Fan 4601170 BI1CWX Fan -4601173 BH1XDU +4601173 BH1XDU Wei 4601174 BA1GM Wang 4601177 BG1SYM Zhang 4601178 BI1DDQ Liu @@ -101146,14 +132864,14 @@ 4601184 BD1MM Wang 4601185 BD1MM Wang 4601186 BH1ONM Wang -4601189 BH1WUL -4601190 BH1WUL +4601189 BH1WUL Hong +4601190 BH1WUL Hong 4601191 BI1BJT Zhifeng 4601192 BH1RUL Fu 4601193 BH1KZQ 4601194 BH1SLR 4601196 BG1DX Song -4601197 BH1XQJ +4601197 BH1XQJ Ai 4601198 BH1DCY Liu 4601199 BG1MCR Bin 4601200 BH1TOH Bao @@ -101188,6 +132906,7 @@ 4601262 BG4FVI 4601263 BG4NAA 4601264 BG1VOE +4601267 BG2COP Cyrus 4601268 BH1XAO Zirui 4601269 BH1XAO Zirui 4601271 BG1ICA Wang @@ -101254,9 +132973,9 @@ 4602064 BG2RSJ Jiaxing 4602065 BG2CPF 4602066 BG2CUV Lina -4602067 BG2KHR -4602068 BG2TDC -4602069 BG2TDC +4602067 BG2KHR He +4602068 BG2TDC Yu +4602069 BG2TDC Yu 4602071 BG2BEL 4602072 BG2DID 4602074 BG2CPW @@ -101288,12 +133007,12 @@ 4602102 BD2UYY Ma 4602104 BH2SRR Guang 4602105 BG2WUD Jiang -4602106 BG2KHX +4602106 BG2KHX Wang 4602107 BG2CPN Xiu 4602108 BG2CTF 4602109 BH2RZH Kane 4602110 BD2RUE Zhang -4602111 BG2IB +4602111 BG2IB Song 4602112 BG2CHC Qing 4602113 BG2KMX 4602114 BH2SWB @@ -101339,6 +133058,7 @@ 4602175 BG2DNQ 4602176 BG2DNL Huabin 4602178 BG2CQP +4602179 BG2COP Cyrus 4602180 BG2DCS Hong 4602181 BG2DAB 4602183 BG2CUI @@ -101349,16 +133069,15 @@ 4603002 BH3VNS Qiang 4603003 BG3HBR Yang 4603004 BI3OGV Kun -4603007 BG3CTD Jin +4603007 BG3CTD Jing 4603008 BG3HCM Jingsheng 4603009 BG3MDO Wang 4603010 BH3DEH Jiaxing 4603012 BI3QVT 4603013 BG3IZM -4603014 BG3MBB Yan 4603015 BH3DHE Niu 4603016 BH3TOH Ming -4603017 BG3INP +4603017 BG3INP Wei 4603018 BG3IZM 4603019 BH3PXX Sun 4603020 BH3VNS Qiang @@ -101376,25 +133095,26 @@ 4603039 BG3PVL 4603040 BI3NCS 4603041 BG3IAD Yuping +4603042 BG3DCJ Wang 4603043 BI3NVT 4603044 BG3IAA Jian -4603045 BG3JRN +4603045 BG3JRN Miao 4603046 BH3DHE Niu 4603047 BI3NPY Jie 4603049 BH3SJM Jianmin 4603050 BH3VVH 4603051 BH3UTH Dang 4603052 BH3OLB Wenqing -4603057 BH3CRO +4603057 BH3CRO Guo 4603058 BG3JJT Liqiang 4603059 BI3QIY 4603060 BI3OOX Li -4603061 BH3MS +4603061 BH3MS Hui 4603062 BG3QYI Shuzeng 4603063 BI3QCF Liang 4603064 BI3OBQ Yongqiang 4603065 BI3OBQ Yongqiang -4603068 BH3MWX +4603068 BH3MWX Jian 4603069 BI3QHE Zhijia 4603070 BH3NVO Zhang 4603071 BH3SJN Wang @@ -101408,7 +133128,7 @@ 4603079 BH3TSZ Liu 4603081 BI3NPY Jie 4603082 BI3QWJ Wang -4603083 BH3BSN +4603083 BH3BSN Yang 4603085 BI3QMO Wang 4603086 BI3QVI Zhao 4603087 BI3QWJ Wang @@ -101431,12 +133151,12 @@ 4603106 BH3DMS Lu 4603107 BH3CLP Mao 4603108 BI3RKD Shiquang -4603109 BH3BSN +4603109 BH3BSN Yang 4603110 BI3POI 4603111 BH3CLC 4603112 BI3NKI 4603114 BH3DFO Zhiyong -4603115 BG3JQL +4603115 BG3JQL Yan 4603116 BH3BWI Xiaoming 4603117 BH3AHA Qi 4603118 BH3DEE Su @@ -101447,9 +133167,9 @@ 4603123 BH3BGD Yu 4603124 BH3CCB Wang 4603125 BI3OXY -4603126 BH3VWL +4603126 BH3VWL Zhao 4603128 BH3CTA Hu -4603129 BH3VWL +4603129 BH3VWL Zhao 4603133 BH3ORW Rongsen 4603135 BH3AHA Qi 4603137 BH3ORW Rongsen @@ -101463,7 +133183,7 @@ 4603148 BG3BXO 4603149 BG3ILS Jiawei 4603151 BG3BMX Cheng -4603159 BH3ASZ +4603159 BH3ASZ Wei 4603160 BG3TAI Xiuwei 4603162 BD3GDC 4603164 BH3BXV @@ -101520,13 +133240,13 @@ 4604007 BI4IIK Bi 4604008 BI4TLE Houlin 4604009 BI4TLE Houlin -4604010 BG4TGO Tianwen +4604010 BG4TGO Cai 4604011 BG4IAJ Qu 4604012 BI4TRM Huang 4604013 BI4JJO Kong 4604014 BG4JJS Tao 4604015 BH4USR Yinyin -4604020 BI4NFS +4604020 BI4NFS Yi 4604021 BH4JPA Ma 4604022 BH4QBO Shi 4604023 BI4WOU @@ -101545,7 +133265,7 @@ 4604041 BH4IRA 4604042 BG4MVL Bu 4604044 BG4REO Zhu -4604045 BG4TGO Tianwen +4604045 BG4TGO Cai 4604046 BG4AKZ Ran 4604047 BG4AKZ Ran 4604048 BI4JPQ Cao @@ -101567,7 +133287,7 @@ 4604065 BI4QZA Wang 4604066 BH4OFM Liu 4604067 BI4LGS Liu -4604068 BR4URG +4604068 BR4URG Ye 4604069 BI4SWY Zhu 4604070 BI4VTD Jiang 4604071 BH4UQD Zhang @@ -101596,13 +133316,13 @@ 4604094 BG4ULW Qi 4604095 BG4PJO Huai 4604097 BI4VIP Jian -4604100 BI4NFP +4604100 BI4NFP Qing 4604101 BI4SQD Wang 4604102 BI4UWW Xu 4604103 BG4IAK Yanguo 4604104 BH4JAC Zhao 4604105 BI4JJQ Liu -4604107 BI4JNV Han +4604107 BI4JNV han 4604108 BI4OPH Ronghuan 4604109 BI4UUK Shen 4604110 BI4LGL Shi @@ -101616,31 +133336,31 @@ 4604118 BI4KCU Tao 4604119 BI4OYV Shi 4604120 BH4ARI -4604121 BI4NFP +4604121 BI4NFP Qing 4604122 BI4MNG 4604123 BG4IIC -4604124 BI4NFE +4604124 BI4NFE Teng 4604125 BI4JYG Yao -4604126 BI4NTV -4604127 BI4JDA +4604126 BI4NTV Liang +4604127 BI4JDA Di 4604129 BG4RIE Ling 4604130 BA4WI Li 4604131 BA4WI Li 4604132 BI4JAO Zhao 4604133 BI4NFT Yu -4604134 BH4PQI -4604135 BH4PQI +4604134 BH4PQI Wu +4604135 BH4PQI Wu 4604136 BI4KBD Yi -4604137 BH4OFX -4604138 BI4MVP -4604139 BI4VOR +4604137 BH4OFX Cui +4604138 BI4MVP Yu +4604139 BI4VOR Guo 4604140 BH4JBC Xiangbin 4604141 BI4XJA Dong 4604142 BI4MNG 4604144 BI4JOB Baoliang 4604145 BI4KNY Hongbo 4604146 BH4WFH Lei -4604148 BI4MYY +4604148 BI4MYY Dao 4604149 BI4VNM 4604150 BD4QBH Pan 4604151 BG4XTA Huang @@ -101658,11 +133378,11 @@ 4604166 BH4IDR Wu 4604167 BH4AOC Xue 4604168 BG4IIA -4604169 BG4INP JNg +4604169 BG4INP JiNg 4604170 BD4UH Dongping 4604173 BH4OXP Zhenwei 4604175 BH4DZK Xiao -4604176 BD4RKH +4604176 BD4RKH Zhu 4604177 BD4XW Lixin 4604178 BG4AGE Wang 4604180 BI4IDF @@ -101681,7 +133401,7 @@ 4604199 BI4TAM Shi 4604200 BG4WAH Xiong 4604201 BH4SJK Jun -4604208 BD4QHI +4604208 BD4QHI Biao 4604209 BI4WTX 4604211 BG4WAH Xiong 4604214 BI4OYD Lixin @@ -101717,7 +133437,7 @@ 4604259 BG4NCM Feng 4604260 BG4HHG Xu 4604262 BH4QLF Xiaoxiang -4604263 BH4WKZ Yongyong +4604263 BH4WKZ Chen 4604264 BI4UBP Hua 4604265 BG4OXV Lei 4604266 BI4SRJ @@ -101741,8 +133461,9 @@ 4604288 BD4RVY Ruibin 4604289 BH4ECL Hong 4604292 BH4EFO Yu +4604293 BD4AMS Weiming 4604295 BG4ETR Lu -4604297 BH4WKZ Yongyong +4604297 BH4WKZ Chen 4604298 BH4AVM Chen 4604301 BH4DWO Cong 4605001 BG5UEZ Xu @@ -101753,7 +133474,7 @@ 4605006 BG5CNL 4605007 BG5CHI Jianyi 4605009 BG5HHP Xiao -4605010 BG5CPW +4605010 BG5CPW Bao 4605011 BG5CNT Mai 4605012 BG5CQZ Wang 4605013 BG5ILX Fu @@ -101761,7 +133482,7 @@ 4605015 BG5HWL Xin 4605016 BG5HME Lihua 4605017 BD5HXL Tong -4605018 BG5CPW +4605018 BG5CPW Bao 4605019 BG5DDO Yu 4605020 BG5HXE Shen 4605021 BG5DKG Gang @@ -101795,7 +133516,7 @@ 4605055 BG5HAB Yufei 4605056 BG5FPH Chuanguang 4605057 BH5HAR -4605058 BH5HEH +4605058 BH5HEH Shang 4605059 BG5DVX Yang 4605060 BG5DYZ Wu 4605061 BG5HRC Yaoyun @@ -101823,7 +133544,7 @@ 4605092 BG5BRG Wenjie 4605093 BH5HZJ Jie 4605094 BG5UOR -4605096 BG5EOP +4605096 BG5EOP Dong 4605097 BG5FPX Xinyu 4605099 BG5UBZ Zhikai 4605100 BG5DXB @@ -101874,7 +133595,7 @@ 4606021 BG6GTU Zhengfeng 4606022 BG6GAY Jian 4606023 BH6KEU Haoyuan -4606024 BG6SSL +4606024 BG6SSL Wei 4606025 BG6WWH Huijun 4606026 BG6GNE Lu 4606027 BG6TAD Wang @@ -101913,7 +133634,7 @@ 4606064 BG6TUE Lei 4606066 BG6SFR Lu 4606067 BG6TWT Tim -4606068 BG6RER Tao +4606068 BG6RER Too 4606069 BG6WYX Yan 4606070 BG6BSP Jiang 4606071 BG6WNP Lianyun @@ -102031,7 +133752,6 @@ 4607060 BD7IPD Li 4607061 BH7NWK 4607062 BH7MMM -4607064 BI7JTA Huang 4607065 BG7BLJ Huimin 4607066 BH7CQ 4607067 BG7FYY Cheng @@ -102078,7 +133798,7 @@ 4607111 BD7NAU Chen 4607112 BI7ISX Wang 4607113 BG7TOR Chen -4607114 BG7GDP +4607114 BG7GDP Tang 4607116 BI7INT Hai 4607119 BG7FKK Hao 4607120 BH7ABX Ze @@ -102103,10 +133823,10 @@ 4607142 BD7MMC 4607143 BD7JZG Zhiyuan 4607144 BH7AHE -4607145 BG7YN +4607145 BG7YN xi 4607148 BI7MTD Zhang 4607149 BG7YQ Xiaoshan -4607150 BG7YID +4607150 BG7YID haidi 4607153 BH7ABV Xiaobin 4607154 BD7KGQ Liao 4607155 BG7SZQ Xilin @@ -102129,7 +133849,6 @@ 4607175 BD7PCA Xianyu 4607176 BI7IN Tan 4607177 BD7MQB Michael -4607178 BG7XZZ Yuming 4607180 BG7GBE Tang 4607181 BG7GBE Tang 4607182 BD7MWI Wang @@ -102175,7 +133894,8 @@ 4607236 BD7MSB Darong 4607237 BD7MRM 4607239 BG7RJR Hua -4607240 BG7TOI +4607240 BG7TOI Zeng +4607241 BD7JMN Ruiwei 4607242 BI7LLB Yehua 4607243 BD7MRZ 4607248 BD7MPK @@ -102240,7 +133960,7 @@ 4607343 BI7KCD Xian 4607344 BI7MCY Cai 4607345 BD7HV Ying -4607346 BG7FPY Yijian +4607346 BG7FPY Yijian* 4607347 BD7LBZ Saikuen 4607348 BD7MWO Qiuyuan 4607349 BD7MWO Qiuyuan @@ -102250,7 +133970,7 @@ 4607356 BH7IWF 4607357 BG7JRA Li 4607360 BD7NKN -4607361 BG7BAG +4607361 BG7BAG yuan 4607363 BD7KYG Jinwei 4607364 BD7NVZ Luo 4607365 BD7NRV Tianbin @@ -102390,8 +134110,8 @@ 4609017 BG0BMK Jun 4609018 BG0AVP Shu 4609019 BG0BDI Shiping -4609020 BG9HUT -4609021 BG9HUT +4609020 BG9HUT JiNg +4609021 BG9HUT JiNg 4609022 BG0AXS Yun 4609023 BG0CCD Dexin 4609024 BG0BYM Wei @@ -102424,7 +134144,7 @@ 4609062 BG0BYZ Hong 4609063 BG9HUF He 4609064 BG3SRX Yue -4609070 BG0CFD +4609070 BG0CFD Mai 4609071 BG0COC 4609072 BG0COC 4609073 BG0AOV Chen @@ -102433,6 +134153,48 @@ 4609077 BG9GKF Jian 4609079 BG9FJD 4609081 BG0CJM Jie +4660001 BV2EL +4660002 BM4AIK Chen +4660003 BM3JAS chia +4660004 BM2NND Jos +4660005 BM2NGU Andy +4660006 BX4ACE Stark +4660007 BM3JAF Yi +4660008 BM2NNC BO-HSIANG +4660009 BM2NGU Andy +4660010 BV3UL +4660011 BV3UL +4660012 BM3JBQ Cheng +4660013 BV9AB BEN +4660014 BX6ABJ yun +4660015 BM6HEU TSUNG +4660016 BM6HFL CODY +4660017 BV9AB BEN +4660018 BV3UN David +4660019 BX9AAD +4660020 BX9AAD +4660023 BM6HHU Yi-Ju +4660025 BV6KC YUN-CHIEN +4660026 BV6KC YUN-CHIEN +4660027 BM6HFL CODY +4660028 BM3JCL LU +4660029 BX6ABM tsung +4660030 BV5DJ Gabriel +4660031 BM2MTT Aaron +4660032 BM2NUL Flyer +4660033 BX2AGO BEAR +4660034 BX2AGV Stephen +4660035 BM7BHL Macphil +4660036 BM7BHL Macphil +4660037 BX2AHE CHANG +4660038 BX2AHE CHANG +4660039 BX1AAD Shao +4660040 BV5PD Chih-Jen +4660041 BX7ABO +4660042 BV3UJ Tzu +4660043 BM2HVU Yu-Chi +4660044 BM2HVU Yu-Chi +4660045 BM3JAS chia 4661001 BX2ABT Hans 4661002 BU2EA Yngwie 4661003 BV2NT Lee @@ -102466,9 +134228,8 @@ 4661031 BV5AC Lee 4661032 BM2LSM Zhong 4661033 BV5OO Yaojun -4661034 BM4ISC Wu -4661035 BX4ACB Felix -4661036 BX4ACB Felix +4661035 BV4WW Felix +4661036 BV4WW Felix 4661037 BX3AH Miracle 4661038 BV1EQ Hsu 4661039 BM2MQL Laurence @@ -102496,7 +134257,7 @@ 4661063 BM4KEG Jhan 4661064 BM2LBC Diao 4661065 BV3UB Jie -4661066 BX2AFV Tien +4661066 BU2ER Tien 4661068 BM2MEM Wu 4661069 BM4HVW Chen 4661070 BM4KFG Wei @@ -102504,14 +134265,12 @@ 4661072 BM4KCR Lee 4661073 BM8CQF Huang 4661074 BM2IPY Peng -4661075 BM4BYX +4661075 BM4BYX Wei 4661076 BM4KLL Syve 4661077 BM3ANR Shen 4661078 BM2KRJ Yue -4661079 BM2AYR Jeng 4661080 BM2GJP Hyman 4661081 BV2FB Ralph -4661082 BM2AYR Jeng 4661083 BU2CC 4661084 BM2KVV Lin 4661085 BM1BKB Jang @@ -102611,13 +134370,13 @@ 4661181 BX2AN Jiann 4661184 BU2BV Yung-Jen 4661185 BM2JFN Yulin -4661188 BM4BYX +4661188 BM4BYX Wei 4661189 BM2MGG Luo 4661190 BM4KWP Wen 4661191 BX2AET Rupert 4661192 BM2JKG Yi 4661193 BM2LAM Yu -4661194 BM4AIK Wenming +4661194 BM4AIK Chen 4661195 BM2AAS Chang 4661196 BM2AAS Chang 4661197 BU2BO Zhong-Hong @@ -102639,8 +134398,8 @@ 4661215 BM2NKU Jack 4661217 BU2EE Andy 4661219 BM2HOL Hsiao -4661222 BU2BN -4661223 BM2ALC +4661222 BU2BN Zi +4661223 BM2ALC Chen 4661224 BM1CDD Hung-Ying 4661225 BU2DE Kai-Ze 4661226 BV3TL CM @@ -102653,7 +134412,7 @@ 4661235 BV5DD 4661236 BU2DR YC 4661237 BM5AVX Shuh -4661239 BM4LDJ +4661239 BM4LDJ Wei 4661240 BM3BIA Cheng 4661241 BM4GNC Ching 4661243 BM4KUF Lai @@ -102674,17 +134433,17 @@ 4661261 BM2EMV Wang 4661262 BV5ON Solo 4661264 BM2NLM Cheng-Ling -4661265 BX5AAU Chih-Jen +4661265 BV5PD Chih-Jen 4661266 BV3UE Vincent 4661269 BV2IH ChengHsiung -4661272 BX2AGC Jen +4661272 BU2ET Jen 4661274 BU2EC Hsin 4661275 BV3UI Jau 4661278 BX6ABC Henry 4661280 BX6ABC Henry 4661282 BV8BS Shieh 4661283 BM3HTU Zeng -4661284 BX3ACB David +4661284 BV3UN David 4661286 BM2AOS Lu 4661290 BU2EE Andy 4661291 BU2BG Fan @@ -102708,7 +134467,7 @@ 4661323 BM6AHR Wu 4661325 BM2NMP 4661326 BM2NMV Su -4661327 BX2AFW Tzu +4661327 BU2ES Tzu 4661328 BM2HCE Jiabin 4661329 BM2HCE Jiabin 4661330 BM6AHR Wu @@ -102726,6 +134485,7 @@ 4661349 BM2MWA Ching 4661350 BM2NOQ Tinghui 4661353 BM2NOR Wei +4661354 BM2MLV 4661355 BM2JRW Cheng 4661356 BM4HFK YH 4661357 BM4HFK YH @@ -102739,12 +134499,255 @@ 4700006 S21ED Syed 4700007 S21CN Md 4700008 S21DT Tawfiq +4700009 S21AF Abdullah +4700010 S21IC None +4700011 S21TP SM +4700012 S21PL Md +4700013 S21MK Mohsinuzzaman +4700014 S21MK Mohsinuzzaman +4700015 S21CJ Md +4700016 S21CJ Md +4700017 S21HK deepta +4700018 S21FC ADM +4700019 S21FC ADM +4700020 S21IT Tahsin +4700021 S21HB Belal +4700022 S21RU Md +4700023 S21RU Md +4700024 S21TN Touhidul +4700025 S21VU ABM +4700026 S21VU ABM +4700027 S21FR Rasel +4700028 S21BP Md +4700029 S21EJ Anowar +4720001 8Q7HI Sascha 5020001 9W2VHN Hafiznaimi 5020002 9W2RGH Mohd 5020003 9W2RUT Weerut 5020004 9W2ALS Alias 5020005 9W2POP Edison -5020006 9W2KJS Khor +5020006 9W2KJS Matthew +5020007 9W2VAC Cavyn +5020008 9W2CPN CHIN +5020009 9W2CPN CHIN +5020010 9W2UOA Guo +5020011 9W2VAC Cavyn +5020012 9W2FVA +5020013 9W2XDD Mohd +5020014 9M2TDX Wan +5020015 9M2TDX Wan +5020016 9M2NP Narayanan +5020017 9M2AWU Khairul +5020018 9W2JEQ Mohd +5020019 9M2KLH Lai +5020020 9W2LWO ONG +5020021 9W2BES TANG +5020022 9W2PFB Lim +5020023 9W2TIW Ineng +5020024 9W2VHF Muhammad +5020025 9W2RED Mohamed +5020026 9W2PGW WILLIAM +5020027 9W2KVO KEVIN +5020028 9W2TWC CHONGHM +5020029 9W2ZXG Muhammad +5020030 9W2YOK Mohd +5020031 9W2NNA Adnan +5020032 9W2SFX Muhammad +5020033 9W2NJH JUN +5020034 VU2BDN ALEN +5020035 9W2NJH JUN +5020036 9W2IKZ Imran +5020037 9M2EDU Mohd +5020038 9W2VZT Zaid +5020039 9W2BHL Mohd +5020040 9W2ZZD AZRI +5020041 9M2NIA Nirwan +5020042 9W2BWS Barrawsdinata +5020043 9W2JQD Amir +5020044 9M2MY Shamsul +5020045 9W8KTK Kho +5020046 9M2KRZ Khairul +5020047 9W2VHF Muhammad +5020048 9W2PXM AZRUL +5020049 9W2LEV Naz +5020050 9W2LEV Naz +5020051 9W2EJJ Mohd +5020052 9W2XNC Abdul +5020053 9W2SSO Hj +5020054 9W2ZVB ZULKIFLI +5020055 9W2RED Mohamed +5020056 9W2TLB Abdul +5020057 9W2JSV Shyfudin +5020058 9W2ELS Anita +5020059 9W2JIL Mohd +5020060 9W4GWK Malaysia +5020061 9W4GKH Malaysia +5020062 9W2TXJ Norashraf +5020063 9W2EUV Mohd +5020064 9M2LLH Ahmad +5020065 9M2SRS Saifuzzaman +5020066 9W2XEZ IZWAN +5020067 9W8STA TECK +5020068 9W8MAD Ren +5020069 9W8LIM Andy +5020070 9W2GLV Danny +5020071 9W2PAW Hafiidz +5020072 9W2PAW Hafiidz +5020073 9W2KJS Matthew +5020074 9W2FNZ Mohd +5020075 9W2FNZ Mohd +5020076 9W2YDB Muhamad +5020077 9W2YDB Muhamad +5020078 9W2UUD mohamad +5020079 9W2IKY Imran +5020080 9M2DLL Daneil +5020081 9W2OPS Mohd +5020082 9W2XAG Rohaida +5020083 9M2AAA Hithayatulla +5020084 9M6WST Wong +5020085 9W6YCT +5020086 9W2OTO Mohamed +5020087 9W2MPU lee +5020088 9M2SQL Abdul +5020089 9W2VJP An +5020090 9W2LGX Mohamad +5020091 9W2LGX Mohamad +5020092 9W2MXM Masruddin +5020093 9M2AUS Mohammad +5020094 9W2EBI Emizan +5020095 9W2JJK Mohd +5020096 9M2AUS Mohammad +5020097 9W2XDG Fadil +5020098 9W2RWH Weng +5020099 9W2XEB Agaziman +5020100 9W2EJX +5020101 9W2PPS Mohd +5020102 9W2VQS Mohamad +5020103 9W2VCO Sahrun +5020104 9W2MPC Khairul +5020105 9W2BKN Nor +5020106 9W2RTR Ahmad +5020107 9W2YOF Mohd +5020108 9W2XZJ Maizura +5020109 9W2XZU Fadiln +5020110 9W2XDH Mohd +5020111 9W2XRV ZurAzly +5020112 9W2TFP Abdullah +5020113 9W2KLG Muhammad +5020114 9W2ZBM Zainal +5020115 9W2GSR Tengku +5020116 9W2OET Mohd +5020117 9W2BCT Amran +5020118 9W6PLD Azmain +5020119 9W2WNK Mohd +5020120 9W2TZJ Zafni +5020121 9W2SXK Muhammad +5020122 9W2MFE Mohd +5020123 9W2FAS Farudin +5020124 9W2FUN Mohd +5020125 9W2UVE Mohamad +5020126 9W2YZS Muhamad +5020127 9W2WLG Muhammad +5020128 9W2VJP An +5020129 9W2FHG Mohd +5020130 9W2YHK Muhammad +5020131 9W2SDH Mohd +5020132 9W2GCD Mohd +5020133 9W2KXT Yusoff +5020134 9M8MBB Shaheedan +5020135 9M8MBB Shaheedan +5020136 9W2PVH Mohamad +5020137 9W2ANO Ahmad +5020138 9W8AAM Azrifaizul +5020139 9W8AAM Azrifaizul +5020140 9M8DEN Dennis +5020141 9W2HKY Ahmad +5020142 9W2UIZ Muhamad +5020143 9W2XWB Mohd +5020144 9W2YCC YC +5020145 9W2YNL Jamali +5020146 9W8ASH Ashdee +5020147 9W2DCM Mohd +5020148 9W2SHF Shamsyul +5020149 9W2IBF Ahmad +5020150 9W2SBR Shamsudin +5020151 9W2ZSH Zainal +5020152 9W2GTD Mohamed +5020153 9W2OOB Ahmad +5020154 9M2LLH Ahmad +5020155 9W2GIA Abdul +5020156 9W2DBO Zul +5020157 9W2DBO Zul +5020158 9W2KEA Asrul +5020159 9W2KEA Asrul +5020160 9W2SSO Hj +5020161 9W2MPR Adel +5020162 9W2YBJ Azlee +5020163 9W2BQT Badrul +5020164 9W2ULR Mohd +5020165 9W2BEO None +5020166 9W2MPR Adel +5020167 9W2VAV Mohd +5020168 9W2ZJO +5020169 9W2JQQ Mohd +5020170 9W2SQU Nur +5020171 9W2SQU Nur +5020172 9W2CFO None +5020173 9W2ENW EDHI +5020174 9W2KXZ Mohd +5020175 9W2VAV Mohd +5020176 9W2WAM Wan +5020177 9W2IHY Ezam +5020178 9W2IHY Ezam +5020179 9W2TDG NOR +5020180 9W2UBQ RAMLAN +5020181 9W2LRZ ZAFRUL +5020182 9W2LRZ ZAFRUL +5020183 9W2TDG NOR +5020184 9W2PEE None +5020185 9W2GKG Mohd +5020186 9W2XNE DIN +5020187 9W2XNE DIN +5020188 9W2BDT Fuadd +5020189 9W2BDT Fuadd +5020190 9W2UAO Chun +5020191 9M2VAC Cheng +5020192 9W2GAL CINDY +5020193 9W2KID Jason +5020194 9W8AKN Abang +5020195 9W8AKN Abang +5020196 9M2EDU Mohd +5020197 9W2XIG Nurzaidi +5020198 9W2EJX +5020199 9W2AXF Airilannuar +5020200 9W6PWS WEE +5020201 9W2POK Hishamuddin +5020202 9W2POK Hishamuddin +5020203 9W2GUB rozuddin +5020204 9W2WWC Wan +5020205 9W2GUB rozuddin +5020206 9W2TSA Celine +5020207 9M2PJU Piju +5020208 9W2BMG Megat +5020209 9W2UHS Rosnani +5020210 9M4CCC Persekutuan +5020211 9M4CCC Persekutuan +5020212 9W2KVG +5020213 9W2KVB yong +5020214 9W2JPX Mohd +5020215 9W2ROB Mohd +5020216 9M2AIA Ahmad +5020217 9W2YIX William +5020218 9M2VAC Cheng +5020219 9W2TIW Ineng +5020220 9W2XTD Madzlan +5020221 9W2ODR HABIBULLAH +5020222 9M4SJJJ Scout +5020228 9W2DTZ MOHD +5020229 9W8VYY Voon +5020230 9M2RUL Asrul +5020231 9W2MDL Md +5020232 9W2DME Mohd 5022001 9M2AOC Alexander 5022002 9M2SF See 5022003 9M2PEN Soon @@ -102971,13 +134974,13 @@ 5022232 9W2WYK 5022233 9W2BQK Tony 5022234 9W2PGP Pak -5022235 9W2EUM Zarizan +5022235 9W2EUM Pak 5022238 9W2DFZ Mohd 5022239 9W2BQH Sarudin 5022240 9W2VTZ Mohd 5022241 9W2LWK Eddie 5022242 9W2PGP Pak -5022243 9W2EUM Zarizan +5022243 9W2EUM Pak 5022244 9M2TEE Tee 5022245 9W2EFH Muhammad 5022246 9W2MVG Han @@ -103006,14 +135009,14 @@ 5022272 9W2FTG Azrul 5022273 9W2FTQ Nurhawani 5022274 9W2FIG Muhammad -5022275 9W2DFL Dobot +5022275 9W2DFL 5022276 9W2LCF Oon 5022277 9M4CSJ StJohn 5022278 9W2PTH 5022281 9W2VNN Mohd 5022282 9W2SZR Sharizal 5022283 9W2UZB Mohd -5022284 9W2TWC Hon +5022284 9W2TWC CHONGHM 5022285 9W2CWF Wan 5022286 9W2JFT Beng 5022287 9W2KGW Chun @@ -103106,9 +135109,660 @@ 5050007 VK3JS Ian 5050008 VK3VXQ Daryl 5050009 VK3NRD Ben -5051001 VK1VMA Mathew -5051002 VK1VMA Mathew -5051003 VK1VMA Mathew +5050010 VK5KTP Trevor +5050011 VK5KTP Trevor +5050012 VK8VTX Joe +5050013 VK1XT Mathew +5050014 VK3AXH Ian +5050015 VK3VBI Ron +5050016 VK4WSS Southside +5050017 VK3MBK Brian +5050018 VK8LOL Ian +5050019 VK3SMS Mark +5050020 VK3EXE Christopher +5050021 VK2ID Ir +5050022 VK4YH Trevor +5050023 VK4VSI Simon +5050024 VK3XTV Paul +5050025 VK3XTV Paul +5050026 VK4VSI Simon +5050027 VK3VMM Michael +5050028 VK4UQ David +5050029 VK3ARX Rex +5050030 VK5GD Greg +5050031 VK3ARG Rg +5050032 VK5GD Greg +5050033 VK4YIC Ron +5050034 VK3HFZ Chris +5050035 VK5HCF Col +5050036 VK1EV Ban +5050037 VK1EV Ban +5050038 VK3HFZ Chris +5050039 VK2AR Andrzej +5050040 VK4ED Rod +5050041 VK3JMX John +5050042 VK4ZZ Gavin +5050043 VK4ZM Lyndall +5050044 VK4ZZ Gavin +5050045 VK3KTM Conrad +5050046 VK4BKF Keith +5050047 VK3KTM Conrad +5050048 VK6RO Graham +5050049 VK6JAH John +5050050 VK4ECW David +5050051 VK2HEZ Jason +5050052 VK3TBS Benjamin +5050053 VK2YAP Mat +5050054 VK4CPS Paul +5050055 VK3BWM Bryan +5050056 VK3BWM Bryan +5050057 VK2NMZ Brad +5050058 VK5HDT DAVID +5050059 VK3MH Brendan +5050060 VK4ZM Lyndall +5050061 VK3UV Bruce +5050062 VK5ZCU Michael +5050063 VK4RC Redcliffe +5050064 VK2NP Cliff +5050065 VK3HAG Ashley +5050066 VK5QI Mark +5050067 VK3ZD Charlie +5050068 VK3ZD Charlie +5050069 VK3SV Ian +5050070 VK3IFM Ian +5050071 VK3TBS Benjamin +5050072 VK7KTC Timothy +5050073 VK4DMC Dale +5050074 VK8SIX +5050075 VK3ST Ian +5050076 VK3NRD Ben +5050077 VK3MRG Marshall +5050078 VK2CSI YUNG +5050079 VK2GSM Benny +5050080 VK2LEA Leigh +5050081 VK2LEA Leigh +5050082 VK4LTF Robert +5050083 VK2KEL Kelly +5050084 VK5KBJ Barry +5050085 VK6FG Greg +5050086 VK3DXJ Joseph +5050087 VK4YA James +5050088 VK4AN Mark +5050089 VK8AG Allan +5050090 VK4HAT Robert +5050091 VK7BEE Nicholas +5050092 VK7ZTA Anthony +5050093 VK7TG Terry +5050094 VK5NG Nick +5050095 VK2FCVD Stephen +5050096 VK6NK Adrian +5050097 VK3CRT Paul +5050098 VK3SLR Allan +5050099 VK4YAC Peter +5050100 VK8JG Joel +5050101 VK8JG Joel +5050102 VK3PMR Jason +5050103 VK3BYS Robert +5050104 VK5WTF Marcus +5050105 VK5WTF Marcus +5050106 VK4NJR Neil +5050107 VK3ARH Allen +5050108 VK6RX John +5050109 VK4YWG Wayne +5050110 VK3ALI +5050111 VK5FLHR Lawrence +5050112 VK5ZKU Percival +5050113 VK2NAD Dan +5050114 VK2NAD Dan +5050115 VK5ZKU Percival +5050116 VK3MV Peter +5050117 VK1AL Alan +5050118 VK2IPT Ian +5050119 VK3JOX David +5050120 VK6QC Mark +5050121 VK6QC Mark +5050122 VK8MT Mal +5050123 VK3UT Gregory +5050124 VK3PBZ Roy +5050125 VK2MK Jim +5050126 VK8NSB Stuart +5050127 VK4XV Bob +5050129 VK4YST Cameron +5050130 VK4YWG Wayne +5050131 VK6BMM Melvyn +5050132 VK2CRT Col +5050133 VK4YIC Ron +5050134 VK2AZG Rex +5050135 VK2HF Geoff +5050136 VK2XDT Don +5050137 VK2MIX Adam +5050138 VK2AIY William +5050139 VK2EGC Errol +5050140 VK2AIR Jeff +5050141 VK5KYZ John +5050142 VK2XDT Don +5050143 VK2CPD Peter +5050144 VK5HCW Paul +5050145 VK4EHT Bruce +5050146 VK6FREE Mark +5050147 VK4YAC Peter +5050148 VK4MUG Kein +5050149 VK2FDSD Daniel +5050150 VK2DLP John +5050151 VK2UE Andrew +5050152 VK5JG Paul +5050153 VK8ZJZ Simon +5050154 VK5WAM Alan +5050155 VK5WAM Alan +5050156 VK8VWA Philip +5050157 VK3KSD Nigel +5050158 VK6CPU nigel +5050159 VK3ARM Robert +5050160 VK3ARM Robert +5050161 VK2KWX Bob +5050162 VK1MDP Murray +5050163 VK6JI Chris +5050164 VK6KBY Dudley +5050165 VK2FLEA Lindsay +5050166 VK3YX Terry +5050167 VK3ONE Tim +5050168 VK3HPC Philip +5050169 VK2MRX Brett +5050170 VK2ABA John +5050171 VK3PDC Paul +5050172 VK3PDC Paul +5050173 VK3MSG Grant +5050174 VK5ADE Stuart +5050175 VK2MAL Malcolm +5050176 VK7AU Anthony +5050177 VK6MK Stuart +5050178 VK5FACE Alistair +5050179 VK5AK Bob +5050180 VK4MOT Phillip +5050181 VK2HEK David +5050182 VK4EA Peter +5050183 VK6UMR Mahesh +5050184 VK2TPM Peter +5050185 VK2KYB Brett +5050186 VK7NJW JOHN +5050187 VK3HPC Philip +5050188 VK3FS Andrew +5050189 VK3FS Andrew +5050190 VK2GOD Mark +5050191 VK2YM Benjamin +5050192 VK2CCR Mark +5050193 VK2NDQ Oleksiy +5050194 VK4IIO Phil +5050195 VK3WOW Brad +5050196 VK3WOW Brad +5050197 VK2YK Adam +5050198 VK3DHI Helmut +5050199 VK3DHI Helmut +5050200 VK3ARV Iw +5050201 VK4WIR ROCKHAMPTON +5050202 VK3BFT Bruno +5050203 VK2ATC +5050204 VK2ATC +5050205 VK7VAL Bill +5050206 VK2QA James +5050207 VK3KME John +5050208 VK3KME John +5050209 VK4CMD PETER +5050210 VK3JLM Bernhard +5050211 VK2PE Garry +5050212 VK4BY Don +5050213 VK2VVX Bree +5050214 VK3UBU Frank +5050215 VK3JUZ Justin-Ley +5050216 VK3PKT Mark +5050217 VK2HTV Glenn +5050218 VK2HFA Michael +5050219 VK2EFA Randall +5050220 VK3BQO Albert +5050221 VK3PKT Mark +5050222 VK5GY Gordon +5050223 VK4EU Wayne +5050224 VK3TLW Mark +5050225 VK3TLW Mark +5050226 VK4BBC Mark +5050227 VK4BBC Mark +5050228 VK2YG Ian +5050229 VK6FDWA David +5050230 VK3MCM Geoff +5050231 VK3HDV Andrew +5050232 VK3EET Mark +5050233 VK3FPEM Steven +5050234 VK3ZYC Jim +5050235 VK4TSB Stewart +5050236 VK3FMLO Matt +5050237 VK4HMV Rodney +5050238 VK8NNB Neil +5050239 VK4IHW Ivan +5050240 VK2LRD Robin +5050241 VK6ET Raymond +5050242 VK5COR John +5050243 VK4DAM David +5050244 VK3ZSG Simon +5050245 VK5NFT Thomas +5050246 VK3JR Frank +5050247 VK2DET Dennis +5050248 VK2DET Dennis +5050249 VK3ZAI Allan +5050250 VK3ZAI Allan +5050251 VK3JR Frank +5050252 VK3WWB Brendan +5050253 VK7DC Dj +5050254 VK8ZMX +5050255 VK2KCF Gary +5050256 VK2KCF Gary +5050257 VK4VDC Rick +5050258 VK2IMD HADARC +5050259 VK3PF Peter +5050260 VK4VDC Rick +5050261 VK4WIS SUNSHINE +5050262 VK1FSWB Steve +5050263 VK1FSWB Steve +5050264 VK2KWW Kris +5050265 VK4BYF Robert +5050266 VK4ZD WH +5050267 VK4DI Diane +5050268 VK6XAM Adrian +5050269 VK5MDF David +5050270 VK3JLM Bernhard +5050271 VK4VKX Kevin +5050272 VK5CV A +5050273 VK5CV A +5050274 VK3EU John +5050275 VK3PCJ Jb +5050276 VK2DCF Ron +5050277 VK8LJB JOHN +5050278 VK3MIC Michael +5050279 VK3DPM David +5050280 VK3YP Ioannis +5050281 VK3QX Tony +5050282 VK3QX Tony +5050283 VK3XIN weiyuan +5050284 VK2NB nigel +5050285 VK3NRB Ross +5050286 VK2IE Ian +5050287 VK6XS Ronald +5050288 VK2MG Alan +5050289 VK2HPR Jarrod +5050290 VK3SOT Chris +5050291 VK2QQ Brad +5050292 VK5JON John +5050293 VK4QL Robert +5050294 VK3HFA Andrew +5050295 VK2AOJ Port +5050296 VK3LLL Greg +5050297 VK3LLL Greg +5050298 VK3HFA Andrew +5050299 VK6XC Ben +5050300 VK2CBD Brett +5050301 VK3AMH Matt +5050302 VK3FKAM Ken +5050303 VK1FAAV +5050304 VK2BEH Eddie +5050305 VK2JGV Gunter +5050306 VK7WIA REAST +5050307 VK3BPH Kevin +5050308 VK2JCT Greg +5050309 VK4TAU Darryl +5050310 VK2JCT Greg +5050311 VK4DAM David +5050312 VK4NRD Rhonda +5050313 VK4SE Jeff +5050314 VK3AIG John +5050315 VK2EI Graham +5050316 VK3PBJ Steven +5050317 VK4AMN Marty +5050318 VK2HPN Phillip +5050319 VK2ONE +5050320 VK2HPN Phillip +5050321 VK2ARN Shane +5050323 VK8ZZ Peter +5050324 VK2UHI Steven +5050325 VK4AHT Daniel +5050326 VK3VI Mike +5050327 VK6LIN Jacob +5050328 VK2YE Stephen +5050329 VK3DNH Christoher +5050330 VK3ZT Paul +5050331 VK5JC James +5050332 VK5JC James +5050333 VK3MJT Murray +5050334 VK3XIN weiyuan +5050335 VK3BEB Rick +5050336 VK2CBD Brett +5050337 VK3KQT David +5050338 VK2JW James +5050339 VK3TIM Tim +5050340 VK2YE Stephen +5050341 VK3ALS Tony +5050342 VK3NDJ Dean +5050343 VK3BYR Luke +5050345 VK3TFH Jeremy +5050346 VK2FAHO Christopher +5050347 VK2VOO Andy +5050348 VK3KQT David +5050349 VK3SE Steve +5050350 VK2VZ Peter +5050351 VK2GFE P +5050352 VK3MSG Grant +5050353 VK2WEZ Peter +5050354 VK3ZZX Oscar +5050355 VK3BEK Andrew +5050356 VK3ALS Tony +5050357 VK3ATO Tom +5050358 VK3VAT Tony +5050359 VK1MV Mike +5050360 VK7JS Joseph +5050361 VK4PRS Deon +5050362 VK3USA Lou +5050363 VK2JW James +5050364 VK2JIM Jim +5050365 VK2XDA David +5050366 VK2SGP Paul +5050367 VK3AH Simon +5050368 VK3AH Simon +5050369 VK2GIB Marty +5050370 VK3KG Craig +5050371 VK4YJ Garry +5050372 VK6XN Johannes +5050373 VK3TX Oscar +5050374 KJ7GJQ Richard +5050375 VK4TP Kerry +5050376 VK5ACX Michael +5050377 VK2BAZ +5050378 VK2BAZ +5050379 VK4DF Daniel +5050380 VK5PL David +5050381 VK4DF Daniel +5050382 VK7HSC Shirley +5050383 VK6HAE Coiln +5050384 VK2MIS Shane +5050385 VK3NXT Tom +5050386 VK4YP Jim +5050387 VK5YP Wayne +5050388 VK3VRS Richard +5050389 VK3FJM James +5050390 VK3BUF Ian +5050391 VK3FIN Russell +5050392 VK3EXE Christopher +5050393 VK3VB Phil +5050394 VK8PI Peter +5050395 VK5ZIK Robert +5050396 VK2WAR Jason +5050397 VK2US Peter +5050398 VK2DRH David +5050399 VK2US Peter +5050400 VK3ANZ Susan +5050401 VK3BCU Neil +5050402 VK4PX Bj +5050403 VK1TZ Phil +5050404 VK1TZ Phil +5050405 VK5ZEY Phil +5050406 VK3HEN Darren +5050407 VK7ZSB Stefan +5050408 VK3DRX Duncan +5050409 VK3CI Ian +5050410 VK4GRB Gary +5050411 VK4SKI Stuart +5050412 VK6XZ Bruce +5050413 VK4KWS Kent +5050414 VK3ZTR Tony +5050415 VK2CB David +5050416 VK5CG Craig +5050417 VK4SKI Stuart +5050418 VK3JNI Philip +5050419 VK3JNI Philip +5050420 VK4AAN Alan +5050421 VK4KWS Kent +5050422 VK3NZD Daniel +5050423 VK2AWJ John +5050424 VK4NEU Isaac +5050425 VK4RE Andrew +5050426 VK4AHR Johann +5050427 VK2POP Greg +5050428 VK3SAA Scout +5050429 VK3SAH Scout +5050430 VK3SAK Scout +5050431 VK3SAP +5050432 VK3SAT +5050433 VK3SAW Scout +5050434 VK5MRE Ron +5050435 VK3SAY Scout +5050436 VK3SBA Scout +5050437 VK3SBB Scout +5050438 VK2PAW Craig +5050439 VK4AAB ANGELOS +5050440 VK2OR Shayne +5050441 VK3SBG Scout +5050442 VK3SBH Scout +5050443 VK3SBR Scout +5050444 VK3SCD +5050445 VK3SCG Scout +5050446 VK3SCM Scout +5050447 VK3SDJ Scout +5050448 VK3SDA Scout +5050449 VK3SCP Scout +5050450 VK3FEUG Eugene +5050451 VK3FCVT Graeme +5050452 VK3FTJS Terry +5050453 VK3FAFD Richard +5050454 VK3FCON Con +5050455 VK4FBRO Steve +5050456 VK3FNQS Jason +5050457 VK3FJBM James +5050458 VK3FTZD Tim +5050459 VK6FBDT Brayden +5050460 VK3FJBM James +5050461 VK4FMMM Neil +5050462 VK3FEUG Eugene +5050463 VK2FDGB Damien +5050464 VK2FABG Joel +5050465 VK2FDGB Damien +5050466 VK2FABG Joel +5050467 VK6FLMM LEWIS +5050468 VK4FLIR Jake +5050469 VK3FAVI John +5050470 VK4FNIQ Colin +5050471 VK4FAKE Michael +5050472 VK4FADB Andy +5050473 VK4FTCM Tony +5050474 VK2FMAP Matt +5050475 VK6FWCK Paul +5050476 VK2FSJF JASON +5050477 VK4FSCC Glenn +5050478 VK3FFCE +5050479 VK3AMN Jim +5050480 VK3FCDM Daniel +5050481 VK3FAHL Josh +5050482 VK2FSJF JASON +5050483 VK3FJAL Jarrod +5050484 VK3FDSD Kerri-May +5050485 VK3FJAL Jarrod +5050486 VK3BZF Peter +5050487 VK3BZF Peter +5050488 VK2FMAZ Geoffrey +5050489 VK3FDRS David +5050490 VK2FGGL Megan +5050491 VK1FLBK Luke +5050492 VK2FATS Lee +5050493 VK4FLCR Cath +5050494 VK2FDAT David +5050495 VK3FSEC Carl +5050496 VK3FLJD Lee +5050497 VK3FADI Frank +5050498 VK3FADR Adrian +5050499 VK2FBDX Ian +5050500 VK4FRJY Robert +5050501 VK4FAAO Peter +5050502 VK2FBDX Ian +5050503 VK3FITW Bernard +5050504 VK4FLDR Lois +5050505 VK3SF Ross +5050506 VK1FREB Rebecca +5050507 VK6FANG Daniel +5050508 VK4FDGM Daryl +5050509 VK2FALD Lee +5050510 VK2FPHD Terry +5050511 VK2FAVL Jason +5050512 VK4FJJJ Brian +5050513 VK4FIAN Ian +5050514 VK5FGAA Andrew +5050515 VK4FMCU Martin +5050516 VK7FBHL Fiona +5050517 VK4FNSA Jeff +5050518 VK2FMIC Michael +5050519 VK2FIAN Ian +5050520 VK3FDGO Mark +5050521 VK4FAAP Fred +5050522 VK5FFAU Dave +5050523 VK2FCAM Cameron +5050524 VK2FJCM Angelo +5050525 VK3FRDL Ron +5050526 VK2FAAF Heath +5050527 VK4FUNN Carole +5050528 VK5VAT Andrew +5050529 VK3FAAD Albert +5050530 VK4FDWE David +5050531 VK2FAJW Angus +5050532 VK4MJ Mick +5050533 VK4FBRO Steve +5050534 VK4FINX Greg +5050535 VK3FRJD Chris +5050536 VK4FBIC Sven +5050537 VK3LPH Lia +5050538 VK5FMLO Michael +5050539 VK1FMAC Ian +5050540 VK5FMLO Michael +5050541 VK6FKAT Kathryn +5050542 VK2FROS Ros +5050543 VK6FKAT Kathryn +5050544 VK3FBCN Benjamin +5050545 VK3AUS Vaughan +5050546 VK2FTRA Tony +5050547 VK5FBZT Sarah +5050548 VK2FZPS Peter +5050549 VK4FABY Greg +5050550 VK6FDMW Dale +5050551 VK3CH Michael +5050552 VK3LDY Donna +5050553 VK3FCIM Dom +5050554 VK4FWLG Wayne +5050555 VK3CH Michael +5050556 VK3FRTM Mike +5050557 VK3FAAW Aaron +5050558 VK2GK Greg +5050559 VK2FPBA Paul +5050560 VK4FCIO Trent +5050561 VK3FCJP Chris +5050562 VK3FCJP Chris +5050563 VK3FUEO PETER +5050564 VK2FBAG Anthony +5050565 VK3FBKS Barry +5050566 VK2FMJK Michael +5050567 VK2JTP Terry +5050568 VK2WHO Michael +5050569 VK2FACF Timothy +5050570 VK4KCS Andy +5050571 VK3NF Stephen +5050572 VK7FBHL Fiona +5050573 VK1NFI Peter +5050574 VK7FILL Anthony +5050575 VK1MV Mike +5050576 VK2FRJP Rosie +5050577 VK2FAAR Peter +5050578 VK6FJON John +5050579 VK6FBMW Simon +5050580 VK6FJON John +5050581 VK2FDRU David +5050582 VK2UVP Vic +5050583 VK3FADN Ayden +5050584 VK1FZEL Simon +5050585 VK2FSOL Shane +5050586 VK3III Wimmera +5050587 VK2FRCC Richard +5050588 VK4WBX wilfred +5050589 VK1FAAS Simon +5050590 VK1BP The +5050591 VK2FBRY Bryan +5050592 VK1BP The +5050593 VK6FAAP Gerald +5050594 VK6FAAP Gerald +5050595 VK3FMTT Therese +5050596 VK5FDEC Damien +5050597 VK3FJDD Jarrod +5050598 VK2FBID Jon +5050599 VK3LTD Ross +5050600 VK2RZ Alex +5050601 VK2FRKO Richard +5050602 VK4HWP Wesley +5050603 VK5VC Charlie +5050604 VK6FWCB Colin +5050605 VK3ERS Ross +5050606 VK3ERS Ross +5050607 VK3EI Lino +5050608 VK3DW Zdzislaw +5050609 VK2FBWE Brody +5050610 VK5LX Mj +5050611 VK5LX Mj +5050612 VK3FVKV Robyn +5050613 VK3BRW Bruce +5050614 VK2FLAG Nathan +5050615 VK4FDJM Darren +5050616 VK6FLTC Terry +5050617 VK5FNVT Richard +5050618 VK2CO Joo +5050619 VK3FHSB Hans +5050620 VK2YG Ian +5050621 VK7JAM James +5050622 VK3FAPH Aaron +5050623 VK5FSJA William +5050624 VK8PRD Arik +5050625 VK4FNTH Paul +5050626 VK4FNTH Paul +5050627 VK3FDRL Dean +5050628 VK2FLRW Laurence +5050629 VK2FABF Martin +5050630 VK3AES Manfred +5050631 VK2KAL Leigh +5050632 VK2KAL Leigh +5050633 VK4ANI Ck +5050634 VK3FNDR David +5050635 VK5AV Tim +5050636 VK3ACG Chris +5050637 VK3ZQB Russell +5050638 VK3ZQB Russell +5050639 VK1FWMB William +5050640 VK4FBMV Brett +5050641 VK2FMWP Mark +5050642 VK5FPKR John-Paul +5050643 VK3FVIC Trevor +5050644 VK2TRK Ralph +5050645 VK2FQEV Colin +5050646 VK3VZS Alan +5050647 VK2LO Peter +5050648 VK3TST Marcus +5050649 VK2FMAK +5050650 VK6LAP Jeff +5050651 VK2FMAK +5050652 VK3BIA Harry +5050653 VK3KIY Roger +5050654 VK5BS David +5050655 VK1FCZP David +5050656 VK4ZEN Paul +5050657 VK4ZEN Paul +5050658 VK4MWB Murray +5050659 VK4LIP Ian +5050660 VK5PTT Scott +5050661 VK3ZUA David +5050662 VK1FAAA James +5050663 VK4AGL Ron +5051001 VK1XT Mathew +5051002 VK1XT Mathew +5051003 VK1XT Mathew 5051004 VK1ANK Neil 5051005 VK1NRU Sue 5051006 VK1ZDJ Doug @@ -103155,7 +135809,7 @@ 5051047 VK1AAH Malcolm 5051048 VK1RZ Roald 5051049 VK1JR Jim -5051050 VK1SP Paul +5051050 VK2SGP Paul 5051051 VK1OC Owen 5051052 VK1BF Brian 5051053 VK1POP Dale @@ -103244,7 +135898,7 @@ 5052067 VK2XRL Ryan 5052068 VK2THZ Simon 5052069 VK2OE Ian -5052070 VK2KEV Kevin +5052070 VK2KEV Kev 5052071 VK2DOC Benno 5052072 VK2BOS Steven 5052073 VK2MRC Matt @@ -103256,7 +135910,7 @@ 5052079 VK2HRT Paul 5052080 VK2JDW Lewis 5052081 VK2AH Brian -5052082 VK2PSF Alexander +5052082 VK2PSF Alex 5052083 VK2BWF Brian 5052084 VK2EVB Peter 5052085 VK2EVB Peter @@ -103289,7 +135943,7 @@ 5052112 VK2LAX Jarman 5052113 VK2KXN Nicholas 5052114 VK2GG Dan -5052115 VK2PSF Alexander +5052115 VK2PSF Alex 5052116 VK2GX Paul 5052117 VK2WIH Hunter 5052118 VK2GP Colin @@ -103604,7 +136258,7 @@ 5052448 VK2WOW Robert 5052449 VK2WOW Robert 5052450 VK2YT Tateno -5052451 VK2CRB Rm +5052451 VK2CRB Richard 5052452 VK2YU Simon 5052453 VK2FAJC Lewys 5052455 VK2DWG David @@ -103614,7 +136268,7 @@ 5052459 VK2MSS Simon 5052460 VK2HOY Andrew 5052461 VK2BTQ Craig -5052462 VK2LJM Leo +5052462 VK2WTF Leo 5052463 VK2BEN Ben 5052464 VK2TGJ Dj 5052465 VK2DGH Donald @@ -103623,7 +136277,7 @@ 5052470 VK2CMP Mick 5052471 VK2ATT John 5052472 VK2WPJ Pa -5052473 VK2KAZ Rr +5052473 VK2KAZ Robert 5052474 VK2YAD Roland 5052475 VK2FATE William 5052476 VK2XDS Grant @@ -103712,7 +136366,7 @@ 5052571 VK2NSG S 5052572 VK2MBD Bruce 5052573 VK2ZMO Michael -5052574 VK2MAS Christopher +5052574 VK2CAS Christopher 5052575 VK2ZIC Ian 5052576 VK2NJP John 5052577 VK2AJP Josef @@ -103769,7 +136423,7 @@ 5053037 VK3LJB Jan 5053038 VK3TWO Heath 5053039 VK3FRC Frankston -5053040 VK3VRX Daniel +5053040 VK3AMJ Daniel 5053041 VK3TEN Gordon 5053042 VK3JMA Mark 5053043 VK3BA Nik @@ -103781,8 +136435,8 @@ 5053049 VK3ER 5053050 VK3YZP Peter 5053051 VK3YZP Peter -5053052 VK3GL Lewis -5053053 VK3GL Lewis +5053052 VK3GL Graeme +5053053 VK3GL Graeme 5053054 VK3MHY Michael 5053055 VK3AS Andy 5053056 VK3EME Mark @@ -103833,7 +136487,7 @@ 5053101 VK3WV Dennis 5053102 VK3CSJ Clint 5053103 VK3CE Ross -5053104 VK3EEE +5053104 VK3EEE Dallas 5053105 VK3OU Mark 5053106 VK3AWJ David 5053107 VK3TUL Jj @@ -103921,7 +136575,7 @@ 5053197 VK3KHT Bill 5053198 VK3XJ D 5053199 VK3MET Craig -5053200 VK3VRX Daniel +5053200 VK3AMJ Daniel 5053201 VK3ZWA Robert 5053202 VK3TQ Peter 5053203 VK3NAD Peter @@ -103980,7 +136634,6 @@ 5053262 VK3FTHS Terry 5053263 VK3FDES Doug 5053264 VK3MIT Timothy -5053265 VK3MJM Mathew 5053266 VK3ZMX Markos 5053267 VK3HB Brian 5053268 VK3LSD Alan @@ -104106,7 +136759,7 @@ 5053398 VK3AGL George 5053399 VK3ABC Matthew 5053400 VK3ZKV Gr -5053401 VK3CDE Robert +5053401 VK3CDE Bob 5053402 VK3EHT Robert 5053403 VK3LSK Shane 5053404 VK3MPR Stephen @@ -104115,7 +136768,7 @@ 5053407 VK3VB Phil 5053408 VK3CAT Tony 5053410 VK3NTU Gavan -5053411 VK3WRW Robert +5053411 VK3IE Robert 5053412 VK3VFX Joe 5053413 VK3PTW Robert 5053414 VK3ALM Lachlan @@ -104161,7 +136814,7 @@ 5054031 VK4TVT Vicktor 5054033 VK4TIM Tim 5054034 VK4BS Howard -5054035 VK4TUX Adrian +5054035 VK4TUX 5054036 VK4FSD Peter 5054037 VK4WA 5054038 VK4DU Glenn @@ -104180,7 +136833,6 @@ 5054051 VK4SC Stew 5054052 VK4HG Iva 5054053 VK4NBL Peter -5054054 VK4BQ Waratah 5054055 VK4XH Peter 5054056 VK4YKI Helmut 5054057 VK4VIP Brandon @@ -104191,7 +136843,6 @@ 5054062 VK4VBU Gregory 5054063 VK4AA Sam 5054064 VK4AA Sam -5054065 VK4BQ Waratah 5054066 VK4FP Lloyd 5054067 VK4APM Aidan 5054068 VK4NBL Peter @@ -104209,7 +136860,7 @@ 5054081 VK4HOG Tony 5054082 VK4FD Dave 5054083 VK4YOK Peter -5054084 VK4NRL Richard +5054084 VK4FN Richard 5054085 VK4UQ David 5054086 VK4ZJE Wj 5054087 VK4DAK David @@ -104297,7 +136948,7 @@ 5054175 VK2TRD Eric 5054176 VK4CEB Colin 5054177 VK4NIX Geoffrey -5054178 VK4YRS Raymond +5054178 VK4KU Raymond 5054179 VK4SDD Stuart 5054180 VK4FI Steve 5054181 VK4AKA Keith @@ -104375,8 +137026,9 @@ 5054266 VK4APF Robert 5054268 VK4WOD Wayne 5054269 VK4FMVC Mike -5054270 VK4YRS Raymond +5054270 VK4KU Raymond 5054271 VK4WMW Peter +5054272 VK4PK Glenn 5054273 VK4PK Glenn 5054274 VK4PK Glenn 5054275 VK4DCM Russ @@ -104389,7 +137041,7 @@ 5054285 VK4TL John 5054286 VK4PP Nick 5054288 VK4PI P -5054290 VK4NRL Richard +5054290 VK4FN Richard 5054291 VK4DHF Adolf 5054292 VK4GF Bryn 5054293 VK4HC Richard @@ -104440,7 +137092,7 @@ 5054341 VK4TB Les 5054343 VK4FUF Ivan 5054344 VK4SAP Bob -5054345 VK4TUX Adrian +5054345 VK4TUX 5054346 VK4IL Mark 5054347 VK4AHG George 5054348 VK4IPG Ian @@ -104463,7 +137115,6 @@ 5054365 VK4SED Michael 5054366 VK4KHS Howard 5054367 VK4FDHC David -5054368 VK3FTRI Marco 5054369 VK4JSH Josh 5055001 VK5FBFB Brendan 5055002 VK5FBFB Brendan @@ -104535,7 +137186,6 @@ 5055072 VK5ZAR Arno 5055073 VK5PCE Mark 5055074 VK5KCT Andrew -5055075 VK5JKS Joseph 5055076 VK5IU Jeffrey 5055077 VK5FLEA John 5055078 VK5RJ Bruce @@ -104544,6 +137194,7 @@ 5055081 VK5ZRT Paul 5055082 VK2ZJB Jesse 5055083 VK5BD Bevan +5055084 VK5BD Bevan 5055085 VK5NEM Csaba 5055086 VK5KJG John 5055087 VK5ZUC Andrew @@ -104555,7 +137206,7 @@ 5055095 VK5VAB Bruce 5055096 VK5AOS Paul 5055097 VK5DP Darren -5055098 VK5DM J +5055098 VK5DM John 5055099 VK5NNN Ivan 5055100 VK5LBW Robert 5055101 VK5NNN Ivan @@ -104598,7 +137249,7 @@ 5056035 VK6LB Peter 5056036 VK6PAW Glynn 5056037 VK6LDX Lewis -5056038 VK6KIF Alasdair +5056038 VK6ATX Alasdair 5056039 VK6NJW Norman 5056040 VK6DMR Matthew 5056041 VK6AAH Robert @@ -104688,8 +137339,8 @@ 5056131 VK6VLF Steve 5056132 VK6TWJ Ian 5056133 VK6YBZ Harry -5056134 VK6HKE Keith -5056135 VK6HKE Keith +5056134 VK6HKE +5056135 VK6HKE 5056136 VK6HRC Richard 5056137 VK6KDX Jacques 5056138 VK6FEEE Martin @@ -104765,7 +137416,7 @@ 5057051 VK7BD Bernard 5057052 VK7ALH Ross 5057053 VK7XDM David -5057054 VK7DG Dg +5057054 VK7DG Dale 5057055 VK7BE Barry 5057056 VK7PLR Peter 5057057 VK7HSE Scott @@ -104828,11 +137479,26 @@ 5057117 VK7HK Hk 5057118 VK7HSD Huon 5058001 VK8AA David -5058002 VK8MT Malcolm +5058002 VK8MT Mal 5058003 VK8HF John 5058004 VK8FLSD Ashley 5058005 VK8LEE Dustin 5058006 VK8MS Mark +5100001 YB0AZ Wisnu +5100002 YD0RFM Agus +5100003 YD2DVD +5100004 YD0OXZ Budi +5100005 YD3YLT Yulianto +5100006 YB2WB Bagus +5100007 YD0SJA Matias +5100008 YD1FAH Giri +5100009 YD1FAH Giri +5100010 YD7JBA Miftah +5100013 YC1ICC Juliar +5100018 YD1ART Ardi +5100019 YD1ART Ardi +5100020 YH1AJY Gerakan +5101001 YB0AZ Wisnu 5101002 YD0DIO Amadio 5101003 YB0AZ Wisnu 5101004 YG0DEA Andrea @@ -104842,7 +137508,6 @@ 5101008 YB1GJS Gjellani 5101009 YD0OAS Danny 5101010 YD0NSH Wiyanto -5101011 YB0SWI Sukwan 5101012 YB0BP Junus 5101013 YD1HZY Tunin 5101014 YB0YM Hanafi @@ -104879,6 +137544,7 @@ 5150008 DU3ZM Matthias 5150009 DW3JXT Jay 5150010 DU7JAY +5150011 DU8CDJ Rustico 5150012 4F2CXI Carlo 5150013 4F2CXI Carlo 5150014 DU1XRF Noel @@ -104886,9 +137552,11 @@ 5150016 DU2ATX Arwyn 5150017 DU7CK Randy 5150018 DW1ZVB Jojo +5150019 DU1AZ Gerald +5150020 4I1ANL Titony 5150021 DV1ZDR Audie 5150022 DV1ZDR Audie -5150023 DZ7OVB Oliver +5150023 DU1FD Marvin 5150024 DU6YX Joshuar 5150025 DW7MLX Anthony 5150026 DW7FCV Oliver @@ -104896,6 +137564,8 @@ 5150028 4F3XAN Alexander 5150029 DU3ETM Ernie 5150030 DU3ETM Ernie +5150031 4I1ABS Romel +5150032 4H1AXL Marilou 5150033 DV3NZR Alvin 5150034 DU1INZ Pet 5150035 4F7DD Daniel @@ -104923,15 +137593,15 @@ 5150057 DV3ZID Gaudencio 5150058 DW3CHR Melchor 5150059 DX3NE Tamaraw -5150060 DV3DXR Dexter +5150060 DV3DXR Dex 5150061 DV3XCD Dennis 5150062 DU1YLR Joel -5150063 DV1YZD Pjay +5150063 DU1OC Pjay 5150064 4F2AJ Lito 5150065 DW1YIO Don 5150066 DU7AAM Edgardo 5150067 DV1UK Ryan -5150068 DV1YZD Pjay +5150068 DU1OC Pjay 5150069 DU7CLZ 5150070 DV7EEE Sidney 5150071 DV7JAM Jo @@ -104944,14 +137614,357 @@ 5150078 DU1JW Jeffrey 5150079 DU1SPB Evaristo 5150080 DV4JDX Joseph -5150081 4I1BFT Tina -5150082 4I1BFT Tina +5150081 4I1BFT -=Tina=- +5150082 4I1BFT -=Tina=- 5150083 4G1BFV Gaia 5150084 4G1BFV Gaia 5150085 DW1ZTC John 5150086 4G1CNZ Neal -5150088 DU1JUI Willie +5150087 DV4SMA Servillano +5150088 DW1JUI Willie 5150089 DV1YNM Hilarion +5150090 DV1VUL Lucio +5150091 4F1GNW Andrew +5150092 DX4CS Camarines +5150093 4F1HMR William +5150094 DU2FA Edward +5150095 4F1HMR William +5150096 DZ1PUP PUP +5150097 DZ1PUP PUP +5150098 4G1BBZ Aldwin +5150099 4G1BBZ Aldwin +5150100 DX3ARC CHRISTIAN +5150101 DX3ARC CHRISTIAN +5150102 DV3AZS Christian +5150103 DX26APR Boy +5150104 DU1HMR w +5150105 DU1HMR w +5150106 DU1TOR Nestor +5150107 DW1VVY Freddie +5150108 4G1BNO Allan +5150109 4G1BNO Allan +5150110 DV7MOV Paulo +5150111 DX1P San +5150112 DV2LWT Wilfredo +5150113 DV1XHB Adelfo-Sean +5150114 4G1LIA Rondell +5150115 DV8BRZ Rikko +5150116 DX4CS Camarines +5150117 DV1PVZ Jing +5150118 DV2JIE Kenan +5150119 4G1BNK Kenneth +5150120 DU1FV Ramon +5150121 DU1DT Ricardo +5150122 DX4NC Francisco +5150123 DU1DPE Ed +5150124 DU1DPE Ed +5150125 DW8COO Charlie +5150126 DU8RAM Ram +5150127 DU8BRF Albert +5150128 DW1RFM michael +5150129 DU6REN Renoso +5150130 DW8CGS Lucio +5150131 DV8CEY Joel +5150132 DX2BBB Barkada +5150133 DW8CGD JAY-AR +5150134 DW8CGD JAY-AR +5150135 DU1RR Ricky +5150136 DV3GKA Gerardo +5150137 DU8LEI Leodegario +5150138 DU1RR Ricky +5150139 DW1SMT Erik +5150140 DW1SMT Erik +5150141 DV3KLT Karen +5150142 DU6REN Renoso +5150143 DU9AX Franco +5150144 DU1TEE Ferdinand +5150145 DU1ON Sofronio +5150146 DW1OSK Orlando +5150147 4G1TER Terence +5150148 4G1TER Terence +5150149 DV4AEX Arnel +5150150 DV4AEX Arnel +5150151 DV8CHI MICHAEL +5150152 DV1ZEJ Andrew +5150153 DU3JGN Eugenio +5150154 4H1ATQ Conrad +5150155 DY3JOP Josephine +5150156 4G1NNK Kevin +5150157 DX86PAR Philippine +5150158 DW4KRT Kurt +5150159 4I7RAZ Frederick +5150160 4I1AYZ Roy +5150161 4I1AYZ Roy +5150162 DV9HTL Loriel +5150163 DV9HTL Loriel +5150164 DV8CBZ Frederick +5150165 DU1UTJ Alberto +5150166 DV4KIZ Calmar +5150167 DV4KIZ Calmar +5150168 DU3EJP Edwin +5150169 DX8ZAC Zanorte +5150170 DU2ZA Armando +5150171 4G8CGL +5150172 DY8CGO +5150173 4F1MBC Filip +5150174 DW1VJN Arianne +5150175 DV1VKB Victor +5150176 DW2FWG Flor +5150177 DW7MAU Arnold +5150178 DU2RD RD +5150179 4H1AXD Jeffrey +5150180 4G1MHL Gilbert +5150181 DU6XAH Jay +5150182 DY2AUO JJ +5150183 DY2AUO JJ +5150184 4I9CBR TEDDY +5150185 DW4ATJ Antonio +5150186 DX8FAR Fare +5150187 DV8CCO Diomedes +5150188 DV8ADO Agelo +5150189 DU2DXX Frances +5150190 4F9DOC DocPiciong +5150191 DU1TC Marcial +5150192 DU8HC Ferdinand +5150193 DV1QTO Lou +5150194 DV1OMV Rolando +5150195 DV8WX Marlou +5150196 4F1UX Allan +5150197 DU1WT Edwin +5150198 DU8BGA Irving +5150199 DW8BHB Richard +5150200 DV3GDY Gody +5150201 DX8ZAC Zanorte +5150202 DV8CAT Mitchel +5150203 DV2JB Jharwin +5150204 DV2JB Jharwin +5150205 DV2BLZ Jaywe +5150206 DX1PUP +5150207 DU6PEW Lito +5150208 DX1ARC Amateur +5150209 DX1BSP DX1BSP +5150210 DU1RFN Guian +5150211 4G1DDM Joel +5150212 4G1DDM Joel +5150213 DU8ACN Cyrus +5150214 DU1MIG Ogie +5150215 DX8ZC +5150216 DW7FFA rolfredo +5150217 DU1EIB +5150218 DV3CEP Emerson +5150219 4F7KAT Katherine +5150220 DW1HBF Jason +5150221 DW1WIP MILO +5150222 DW8VZV DINA +5150223 DX9RAG RAGDARI +5150224 DX9RAG RAGDARI +5150225 DU8MM Antonio +5150226 DU8AVS Silvestre +5150227 DV9XTG Carlos +5150228 DW7FJB +5150229 DU8AYB Glenn +5150230 DU8CBU Lope +5150231 DU8NIL Nil +5150232 DV8BVK Lee +5150233 DU6PEW Lito +5150234 DX6CN CENARL +5150235 4G1AMS Neil +5150236 DW8BRU Marcher +5150237 DW2FAM Roderick +5150238 DV2ZAX Vladimir +5150239 4F8BSS Maurito +5150240 DU8BQY Garvo +5150241 4G1AMS Neil +5150242 DV8CAE Antonio +5150243 DW1TCV Victor +5150244 DV7DSU Aubrey +5150245 DW2BRU Rogelio +5150246 DY9IFF Cesario +5150247 DY9IFF Cesario +5150248 4F7MHZ Jesus +5150249 DV1YTZ Rein +5150250 DU1VGC Alberto +5150251 DV4VX nomer +5150252 DW1SRJ Rommel +5150253 DX9TX Race +5150254 DW2BRU Rogelio +5150255 DU3CX Arnold +5150256 DU3CX Arnold +5150257 DU1ON Sofronio +5150259 DV1RFM michael +5150260 DW5CIA Marvin +5150261 DX1PAR Philippine +5150262 DX1PAR Philippine +5150264 DU1PA Amphriend +5150265 4G1DFQ Ruel +5150266 DY1T Thelma +5150267 DX1BSP DX1BSP +5150268 DW1VVM Benjamin +5150269 DV4JMZ James +5150270 4G1AOU John +5150271 DV1VXK Francis +5150272 DV5NAS Jonas +5150273 DU1GS Gerald +5150274 4G1AZZ Rodel +5150275 DW1YHO Neall +5150276 DW4NEO Nomer +5150277 DU1AZ Gerald +5150278 4D1Z Gerald +5150279 DV1UL Rene +5150280 4F2JSC Jerry +5150281 4F2JSC Jerry +5150282 4G1AQV Ponciano +5150283 DV3DKK Efren +5150284 DU4IX Francisco +5150285 DV1ZGI Raj +5150286 DV3DKK Efren +5150287 DW7FRN Rodel +5150288 4G1DYK Karl +5150289 4G1AZZ Rodel +5150290 4G1DXT Charles +5150291 DU1JSL Jaime +5150292 4G1ABP Angelo +5150293 4G1ABP Angelo +5150294 DU1FEY Simon +5150295 DX1ARC Amateur +5150296 DU1EQ Efipanio +5150297 DW7FVR Victor +5150298 DU1VLZ LUZVIMINDA +5150299 DU1VLV +5150300 DW1SMD Julius +5150301 DW9ARR Jairus +5150302 DV9IGT Norman +5150303 4F1AR Alejandro +5150304 DU7LEN Lawrence +5150305 4G1BDJ Dennis +5150306 4G1KIX Franky +5150307 DW1PDC Paul +5150308 DW1ZCF Randell +5150309 DW3MLO Baby +5150310 DW7FJS Johan +5150311 DY7MVP Antonio +5150312 DW1PDC Paul +5150313 DX1CI Compass +5150314 DW3MLO Baby +5150315 DW5AZK Erwin +5150316 4I1MXJ Renino +5150317 DV1YNJ Lauro +5150318 4I1DYK Karl +5150319 DZ1R Richard +5150320 DW5AZK Erwin +5150321 DV3GA Gerald +5150322 4G1MZD Jojo +5150323 DU2C Dir +5150324 DX3L LATITUDE +5150325 4G1NNK Kevin +5150326 DV1K Kiko +5150327 DV1K Kiko +5150328 DY3TKJ Dar +5150329 DV1ECR Johnson +5150330 DV1ECR Johnson +5150331 4F1SVY LAWRENCE +5150332 DW3DWF Edgar +5150333 DW4MLQ Mc +5150334 DV3RT Ricardo +5150335 DU4DF Joselito +5150336 DU1SCJ Boy +5150337 DU2R Ronald +5150338 DU2R Ronald +5150339 DW7BQW Reynaldo +5150340 DV1YLL Lino +5150341 DU3JS James +5150342 4G1EBG Ronaldo +5150343 4G1MZF Jose +5150344 DW8CER Peter +5150345 DV8CER Peter +5150346 DW4RNX Ralph +5150347 4G1BMX None +5150348 4G1BMX None +5150349 4F2V Rollydel +5150350 4F2V Rollydel +5150351 DX1HB 480 +5150352 4G1EEP Carmelo +5150353 4H1EEO Lito +5150354 DW3PDS Dong +5150355 DU2A Armando +5150356 DU2A Armando +5150357 DW8CDQ Neil +5150358 DW1HLH Jay +5150359 DW1HLH Jay +5150362 DW8CDQ Neil +5150363 4I8CFN Cecilio +5150364 DV7RAR Lloyd +5150365 DZ1D DON +5150366 DW7LBB Bob +5150367 4I1RAC Angelo +5150368 DU1PRF Cesar +5150369 4F1LDR Leonardo +5150370 4I1ANG Guillermo +5150371 DX1CW CWPhilippines +5150372 DV9BMA Bayani +5150373 4E1BHP Michael +5150374 DU9A Ariel +5150375 DV9KAT Ramon +5150376 DV9IHK Jose +5150377 4F1EBC Ernesto +5150378 4G1LDM roderick +5150379 DV1CRJ Jaime +5150380 DZ1Z Zshornack +5150381 4G1DXR None +5150382 DX9BSP Davao +5150383 DU9BC Victor +5150384 DU6DKL Kako +5150385 DU6DKL Kako +5150386 DV8HK +5150387 4I7RCC Prime +5150388 4I7RAZ Frederick +5150389 DU1EV Eduardo +5150390 DU7DVE Chuck +5150391 DX1AFP 701St +5150392 DW8CRF Rudy +5150393 DV7HAA Arthur +5150394 DV7HAA Arthur +5150395 DY7MOW John +5150396 4I1EBD +5150397 DU4MX Gerard +5150398 DV7FAQ Martin +5150399 DV4VSG Vicente +5150400 DW4KC Jarvis +5150401 DW8FM Felix +5150402 DX7NRD DX7NRD +5150403 DX7NRD DX7NRD +5150404 DU9IGY Romeo +5150405 DZ2J Joseph +5150406 DZ2J Joseph +5150407 DX7HQ CUERA +5150408 DU1SMQ Romy +5150409 DX1ARM +5150410 DX1ARM +5150411 4I1RAC Angelo +5150412 DV6XDS Gilbert +5150413 DU8HK George +5150414 DX3L LATITUDE +5150415 DU1ZC Ramon +5150416 DV7FJB +5150417 DV7DYH Dencio +5150418 DX1UP Dx1Up +5150419 DY8CLE Reynaldo +5150420 DU9B Romeo +5150421 DW1ZVW Rishel +5150422 4I1PUZ Rainier +5150423 DU5AOK Cyril +5150424 DU5AOK Cyril +5150425 4F1SMB Lorenz +5150426 4G1ESS Clifford +5150427 DV9IUA edwin +5150428 DW3JHC Jimmy +5150429 DW3JHC Jimmy +5150430 DV3CAL Jeffrey +5150431 DY8GAY Rosauro +5150432 DW7DZL Bonifacio +5150433 DW2MCD Jhordan +5150434 DU9AX Franco +5150435 4G1QBU Danroe 5151001 DV2RWA Robert 5151002 4F2LVI Lovelle 5151003 DW2HER Hector @@ -104973,7 +137986,7 @@ 5151019 DV1VLZ Luzviminda 5151020 DU1ERV Errol 5151021 DU1EA Errol -5151022 DV1OZR Ricardito +5151022 DV1OZR Ditoy 5151023 DU1MIR Dennis 5151024 DU1KC Cesar 5151025 DU1LWQ Rei @@ -104984,11 +137997,11 @@ 5151030 DV1ZDQ Gazelle 5151031 DW1WLL Redel 5151032 DU1YP Willie -5151033 DV2EVE Emmanuel +5151033 DV2EVE Manny 5151035 DW3EUN Linda 5151036 DW2ZAF Annie 5151037 DW1IRF Lot -5151039 DU1YIQ Romualdo +5151039 DU1YQ Romualdo 5151040 DU1FV Ramon 5151041 DU1ZC Ramon 5151042 DV1UBY Alex @@ -104999,7 +138012,7 @@ 5151048 DU1REY Rey 5151049 4G1MVP Agustin 5151050 4G1MVP Agustin -5151051 4I1EGH Emmanuel +5151051 4E1EGH Emmanuel 5151052 DV1YKM Jonathan 5151053 DW1NOL Luis 5151054 DU1ZDR Audie @@ -105010,7 +138023,7 @@ 5151059 4I1AGD Ariel 5151060 DV1MG Mario 5151061 DV1MG Mario -5151062 DV1XQX Kiko +5151062 DV1XQX -=Kiko=- 5151063 DW1YTZ Reinier 5151064 DX1HB 480 5151065 DU1AJ Alvin @@ -105019,24 +138032,24 @@ 5151068 DV1SVY Lawrence 5151069 DV1YMM Elviro 5151070 DW3TLD Arnold -5151071 DU1SGD Cordell +5151071 DU1SGD Banjo 5151072 DV1XHF Julian 5151073 DU1FA Felino -5151079 DV1XQX Kiko +5151079 DV1XQX -=Kiko=- 5151081 DU1JD Jhun 5151082 DU1UD Dindo 5151084 DU1UD Dindo 5151085 DU1UD Dindo -5151086 DU2RD Ronald -5151087 DU1T David +5151086 DU2RD RD +5151087 DU1T Kitch 5151088 DU1XUN Anna -5151089 4H1AKC Don +5151089 4G1AKC Don 5151090 DW1DDZ Don 5151091 DV1APO Allen 5151092 DV1ZBX Joel 5151093 DV1VXC Alvin 5151094 4I1BAM Arces -5151095 DW1SER Jimjay +5151095 DW1SER Jay 5151096 DW1ZGS Albert 5151097 4I1BAM Arces 5151098 DU1AVC Carlo @@ -105044,7 +138057,7 @@ 5151101 4G1BAJ Arthur 5151102 4G1BGC Jaybee 5151103 4G1BCV Dodgie -5151104 4G1BIL Benedict +5151104 4I1BIL Benedict 5151105 DV1ZEJ Andrew 5151106 4G1BAK S 5151107 4H1SSL Sherwin @@ -105054,7 +138067,7 @@ 5151111 DV1NPK Edmund 5151112 4I1AGJ Edsel 5151113 4I1AGJ Edsel -5151114 DW1SER Jimjay +5151114 DW1SER Jay 5151115 DU1NA Nicodemus 5151116 DU1NA Nicodemus 5151117 DU1IVT Thelma @@ -105071,8 +138084,8 @@ 5151132 DY1ZBV Sherwin 5151133 4I1LCT Arman 5151134 DW1YTZ Reinier -5151135 4G1BGS -5151136 4G1BIR Manny +5151135 4G1BGS Lawrence +5151136 4I1BIR Manny 5151137 DU1MS Brian 5151138 4G1BGC Jaybee 5151139 DX1MMM Mamamayan @@ -105080,11 +138093,10 @@ 5151141 DU1JI Jose 5151142 DU1FIL Boyet 5151145 DW1OOZ Francis -5151146 4G1BIL Benedict -5151147 4G1BIR Manny +5151146 4I1BIL Benedict +5151147 4I1BIR Manny 5151149 4F1SB Salvador 5151150 DU1VEK Arnulfo -5151151 DX1BSP Boy 5152001 DU2DXE Edison 5152002 DW3PLR Patrick 5152003 DV2ATQ Melvin @@ -105157,7 +138169,7 @@ 5153004 DU2WHS Josefino 5153005 4F2PAU Paulo 5153006 4F2PAU Paulo -5153007 DV2EVE Emmanuel +5153007 DV2EVE Manny 5153008 DW3ZIA Aurea 5153009 DU3XAA Armie 5153010 DU3HC Larry @@ -105191,7 +138203,7 @@ 5153044 DU3LZ Lowell 5153045 DY3FGV Felix 5153046 DW3PCB Carlos -5153047 DW3CEP Emerson +5153047 DV3CEP Emerson 5153048 4G1BKX Mark 5153049 DW1ZTC John 5153050 DW3TDJ Tristan @@ -105205,7 +138217,7 @@ 5154006 DW4XF Rey 5154008 DU4EAG Edwin 5154009 DX4ARE Amateur -5154010 DW4COM Kallos +5154010 DV4COM Kallos 5154011 4F4JMS Jay 5154012 DV4HAM Hilary 5154013 4F4JMS Jay @@ -105223,7 +138235,7 @@ 5155004 DW5JAB Albrecht 5155007 DW5CIA Marvin 5157001 DW7CDG Jun -5157002 DW7LFU Dw7lfu +5157002 DW7LFU Juan 5157003 DX7CA Cebuano 5157005 DV7FCC Nicholas 5157006 DU7EYM Rj @@ -105231,7 +138243,7 @@ 5157008 DV9HQU Geraldo 5157009 DV7MLX Anthony 5157010 DW7FHC Lorenzo -5157011 DW7LFU Dw7lfu +5157011 DW7LFU Juan 5157012 DV7MIS 5157013 DV7EZD Francis 5157014 DV7EZD Francis @@ -105240,21 +138252,21 @@ 5157018 DU7DR Cruz 5157019 4F7DAD Danny 5157020 DU7LEN Lawrence -5157021 DU7RV Galicano +5157021 DU7RV Sonny 5157022 DU7P Ricna 5158001 DU8BRS Eric 5158002 DU8BRS Eric 5158004 DW8BRQ Peter 5158005 DW8BRQ Peter 5158006 DU8EE Edward -5158008 4G8CFN Clieford +5158008 4I8CFN Cecilio 5158009 DX8ZWC Zamboanga 5158010 DU9AR Ariel 5158012 DW8CER Peter 5158013 DV8AWC Bennard 5159002 DV9HRV Clint 5159003 DV9HRV Clint -5159004 DV9BNW Roman +5159004 DV9BNW Jun 5159006 4I9WSR 5159008 4I9WSR 5159009 4F9AR Ariel @@ -105262,9 +138274,9 @@ 5159012 DU8BTZ Robert 5159013 DU9AOZ Alfred 5159014 DW9AQS Berna -5159015 4I9AN Norman -5159016 4I9AN Norman -5159018 K8RIQ Gary +5159015 4I9AN NORMAN +5159016 4I9AN NORMAN +5159018 4F9RIQ Gary 5159019 4G9IRJ Rolly 5159021 4G9IRJ Rolly 5159022 DW9IQM Melvin @@ -105303,7 +138315,7 @@ 5200033 HS8HEX Uaychai 5200034 HS1EAX Subin 5200035 HS8NDF Visuthsiri -5200036 HS8KAY +5200036 HS8KAY PHARAN 5200037 HS8NDE Guntapith 5200038 E29KVZ Yuhontorn 5200039 HS8GKR Chanachon @@ -105311,6 +138323,7 @@ 5200041 E20BFQ Prapon 5200042 HS9ZKE Abdulloh 5200043 E29TXA Thanadech +5200044 HS9COZ Wanchai 5200045 HS9JBT Baseero 5200046 E29TXB Thavorn 5200047 E29TXB Thavorn @@ -105341,7 +138354,7 @@ 5200072 HS1IWX Amnat 5200073 E20VWT Apiluck 5200074 E20VWT Apiluck -5200075 HS1ZHY Mr +5200075 HS1ZHY Nopadol 5200076 HS1QFX Worawan 5200077 HS1QBZ Amnuay 5200078 HS0ZKJ Joerg @@ -105398,13 +138411,13 @@ 5200129 HS0BYW Kittithorn 5200130 E22ZMG Krittaphon 5200131 E23FXX Rachar -5200132 HS2JQC Weera +5200132 HS2JQC Kim 5200133 HS0QKD Chartchawan 5200134 HS7IKS Apichai 5200135 HS0QKD Chartchawan 5200136 E27ITJ Nan 5200137 E24UES MrThanasak -5200138 HS2JQC Weera +5200138 HS2JQC Kim 5200139 E24UEM Sahas 5200140 HS2NOM Suthep 5200141 E24UEM Sahas @@ -105431,6 +138444,8 @@ 5200162 E23VPN Wiroongroj 5200163 E23VPO Wiboonsil 5200164 E27ANY Wichai +5200165 HS6VAA Saowanit +5200166 E25ET Somchai 5200167 HS1OLQ Lek 5200168 HS1OLQ Lek 5200169 E23PKO Ray @@ -105441,6 +138456,7 @@ 5200174 HS6TUS Surasit 5200175 HS1OVF Virakich 5200176 HS6TUS Surasit +5200177 HS6TUX Choochai 5200178 E24WNX Namfon 5200179 E23HFV Ritthichai 5200180 E27DVP Vissanu @@ -105452,7 +138468,10 @@ 5200186 E22GPC Sanguam 5200187 E22FDM Kris 5200188 E22OZU Namthip +5200189 HS4MTA Rakop +5200190 E24VJX Weeraphan 5200191 E24OTJ Passakorn +5200192 E24VVY Sakda 5200193 E27FWM Patomchai 5200194 HS6KLJ Mr 5200195 E23GWN Sompong @@ -105463,23 +138482,26 @@ 5200200 HS3EFM Suksan 5200201 HS9IDM 5200202 E29WWT Wuttipong -5200203 HS5QQT -5200204 HS5QQT +5200203 HS5QQT Suphol +5200204 HS5QQT Suphol 5200205 E29MFJ Sakrin 5200206 HS8PID Chatchai 5200207 HS8WWY Chalong -5200208 HS5QGH +5200208 HS5QGH Wanna 5200209 HS7WXU Pisit +5200210 HS0OOP Surachet 5200211 E20WMJ Yodsapon 5200212 E23FEE Tada 5200213 E21IZC Tony 5200214 HS8PID Chatchai 5200215 E24NVW Matthana +5200216 HS5SOV Boromwit 5200217 HS8RMI Kannamit -5200218 HS6XHH Chayuti +5200218 HS6XHH CHAYUTI 5200219 E24NQN Danuopol 5200220 E24NQN Danuopol 5200221 E23YOH Narupon +5200222 E22WKZ SAKKARIN 5200223 HS0EPO Prinya 5200224 HS8DVP Praphan 5200225 E29UNI Bunchut @@ -105494,7 +138516,7 @@ 5200234 HS5IHQ Max 5200235 HS5IHQ Max 5200236 E24UON Kachen -5200237 HS5AU Suphol +5200237 HS5AU 5200238 HS2BJE MrKeitpong 5200239 HS1JHG Chompoo 5200240 E24UON Kachen @@ -105508,11 +138530,11 @@ 5200248 E21RJB Montree 5200249 E21RJB Montree 5200250 HS1PGS Mr -5200251 HS8KF Pornnurak +5200251 HS8KF PORNNURAK(PAUL) 5200252 E21CLD Burin 5200253 E20JOE Arthasit 5200254 E20JOE Arthasit -5200255 HS8KF Pornnurak +5200255 HS8KF PORNNURAK(PAUL) 5200256 HS6NDK Sonthaya 5200257 HS6NDK Sonthaya 5200258 E23THG Prasong @@ -105520,14 +138542,14 @@ 5200260 E20VIA Nuttaporn 5200261 E20VIA Nuttaporn 5200262 E23YWA Metee -5200263 E24OJT -5200264 E24OJT +5200263 E24OJT Kriengsak +5200264 E24OJT Kriengsak 5200265 E21HSY Ekabutr 5200266 HS8TFX Pomgpun 5200267 E20JFX Suebsak 5200268 HS6PPZ Narongchai 5200269 E22ZZH Supasek -5200270 E24OYI Acting +5200270 E24OYI Sarawut 5200271 HS3PIK Wattanapon 5200272 HS3PIK Wattanapon 5200273 E29BAY Kittirat @@ -105536,15 +138558,17 @@ 5200276 E29AWE Yossapon 5200277 E29AWE Yossapon 5200278 HS1JHG Chompoo +5200279 E21ZCO Sophon 5200280 HS9IFG Sanathat(Pong) 5200281 HS9IFG Sanathat(Pong) 5200282 HS0FVS Sarach 5200283 E20EHQ Kamol 5200284 HS5SQI Youngyot -5200285 E25EG Cpo1Suphol -5200286 E25EG Cpo1Suphol +5200285 E25EG Suphol +5200286 E25EG Suphol 5200287 HS5BLO Chaiyush 5200288 HS0BXF Namchoke +5200289 HS3PNN Worrachot 5200290 E22ZZH Supasek 5200291 HS0QCN Phaporn 5200292 HS0ZMG Rudy @@ -105552,9 +138576,13 @@ 5200294 E20UWM Siriraj 5200295 HS0AB Nbtc 5200296 HS9LPQ Naser +5200297 E29AHU Chokeumnuay 5200298 E20MNT Napaporn 5200299 HS1FDW Komprasert 5200300 E20JFX Suebsak +5200301 HS8IYS somchai +5200302 E20GMH Jumpol +5200303 E24YKW chatphicht 5200304 HS6UKE Prem 5200305 HS6UYL Gitar 5200306 HS6WBF Hs6wbf @@ -105567,7 +138595,9 @@ 5200313 HS9REQ Sutap 5200314 HS9REQ Sutap 5200315 HS8BAR Sarun +5200316 E21XA Worawoote 5200317 HS8JSA Watcharapong +5200318 E22DPI Tanachai 5200319 E29UYZ Jirote 5200320 HS0GWL Thanin 5200321 HS5CXL Nattapat @@ -105575,43 +138605,584 @@ 5200323 HS1ZBT Jeerapun 5200324 HS8LVC MrPhanuwat 5200325 HS8LVC MrPhanuwat +5200326 HS0VIZ SUKIT +5200327 E22YEP Kitipong 5200328 E25ET Somchai 5200329 E24FTU Pranioul 5200330 HS6BUE Sonthidej +5200331 E20GMH Jumpol 5200332 HS8JRA Bancha 5200333 HS1PRQ Charoenpron 5200334 HS6PAU Paisarn +5200335 HS9XYX wisut +5200336 HS0RGD Pakorn 5200337 HS7OAY Anuphan 5200338 E27GXT Nattawat 5200339 HS5LYE Sakdaret 5200340 E24GEY Rawiphol 5200341 HS7ZSX Supanutt +5200342 HS2EOY THARATHIP 5200343 HS6IEN Sudaporn 5200344 HS6MSE Prapol 5200345 HS6IEN Sudaporn 5200346 HS0ZLW Scott 5200347 E24YVI Narapat -5200348 HS3NOQ MrThaweeporn +5200348 HS3NOQ Thaweeporn 5200349 E24MTA Sibpabhas 5200350 HS0EBS Jeerakorn 5200351 HS8KVH Anusorn +5200352 HS2GGA Phairote +5200353 HS2GGA Phairote +5200354 E25AAY Suttida +5200355 HS3GEH Phaisan +5200356 HS0ZLZ Henning +5200357 HS0ZLZ Henning +5200358 E24DL Nakhonratchsiam +5200359 HS3GEH Phaisan +5200360 HS8DVU Chaising +5200361 E29RZQ MrThanayos +5200362 E29DMD sawong +5200363 E29DMD sawong +5200364 HS3RP NooM +5200365 HS1ZBT Jeerapun +5200366 E23PKK Pattarapon +5200367 HS1ZHY Nopadol +5200368 HS9YS Anawat +5200369 HS9YS Anawat +5200370 HS7SSN Pratew +5200371 E24OUW chakphanu +5200372 E24OUW chakphanu +5200373 HS7SSN Pratew +5200374 HS0DJU Jitrayut +5200375 HS7PFS Supod +5200376 E25DQT Krittipong +5200377 E25DQT Krittipong +5200378 HS5RIY Prachak +5200379 E23JKQ Satit +5200380 E22DRK Montree +5200381 HS0ZNT Markus +5200382 HS3RP NooM +5200383 E24IKY Pornchai +5200384 HS6HJP krit +5200385 HS3NOQ Thaweeporn +5200386 HS2ZY MrPhudit +5200387 E24OCS SAJIT +5200388 E24OCS SAJIT +5200389 E23RJI Anan +5200390 E25FYX Bundith +5200391 E20FMJ Kitkamon +5200392 HS6XHH CHAYUTI +5200393 E29UVH dusit +5200394 HS6SRY Phairot +5200395 HS3ICB Poht +5200396 E20VKD TAWATCHAI +5200397 HS0XHG Pramonsut +5200398 E24NGN Teerapat +5200399 HS8EDW SOMCHAI +5200400 E24YUJ Napont +5200401 HS0ZER Rudolf +5200402 HS0ZER Rudolf +5200403 HS6IQD Camron +5200404 HS6TXN Phiphop +5200405 HS6XPR Thanomphong +5200406 HS6SDC phumet +5200407 HS6NYW Phlaingam +5200408 HS1EFA Pakorn +5200409 HS4QUP Authai +5200410 HS5XLY Chairat +5200411 HS2AAW Lertrit +5200412 HS0ACS Mr +5200413 HS6MYW Wanlop +5200414 HS0JST APINYO +5200415 E25ECY Pitupong +5200416 HS1EFA Pakorn +5200417 HS1YQR Pornchai +5200418 E21DYQ Suradej +5200419 HS2DV Pansin +5200420 E24PLA Chainarong +5200421 HS6MYW Wanlop +5200422 HS3YXT SOMCHAI +5200423 HS5CXL Nattapat +5200424 E20VKD TAWATCHAI +5200425 E21FYK Kitsada +5200426 HS1WPR Viroj +5200427 E21DYQ Suradej +5200428 HS3SRS Prompiriya +5200429 HS9CA Somchai +5200430 HS3RYG Santi +5200431 HS6RT Silchai +5200432 E22KOI Kriengkrai +5200433 E21WQY sikarin +5200434 E20WDP Anak +5200435 E25FEU Jakkawarn +5200436 E20WDP Anak +5200437 HS2AQG Panya +5200438 HS1RJF PIYATAT +5200439 HS3RYG Santi +5200440 HS2AQG Panya +5200441 HS1KEI Vudhikrai +5200442 HS6JER Jutaluk +5200443 E24ZVH Ammarit +5200444 E24YPM Arnon +5200445 E24ZVH Ammarit +5200446 HS1EDI Mr +5200447 E29HX Ruttaaut +5200448 HS1RMG ussavamak +5200449 HS3YXT SOMCHAI +5200450 E25AAB NATTAPOL +5200451 HS7CK Pornpoj +5200452 E25BEI Pholsin +5200453 E25ABK Chonlavit +5200454 HS0OOP Surachet +5200455 E23PNK Chartchai +5200456 E25GSS Nuttawut +5200457 HS2GJG Jakkrit +5200458 E23YPF Jinda +5200459 HS3TGP Alonggot +5200460 HS4GLG Teerapol +5200461 E29QZB Dusit +5200462 HS5NMF MrNikorn +5200463 E27EVK Kittisak +5200464 E27EVK Kittisak +5200465 HS5GDX Chamnan +5200466 E27AYG Naphakphatcha +5200467 E25CRG Phisanu +5200468 HS3TCE MrSaman +5200469 HS3TCE MrSaman +5200470 E25CRF mrmanatchai +5200471 HS2LXA MrKriangkai +5200472 HS2LXA MrKriangkai +5200473 E25CRF mrmanatchai +5200474 E20IRJ Sirichai +5200475 E24PLA Chainarong +5200476 E20IRJ Sirichai +5200477 HS5GDX Chamnan +5200478 E27AYG Naphakphatcha +5200479 HS2NEF Ketmala +5200480 HS2NEF Ketmala +5200481 HS2SXE MrThananwat +5200482 HS2SXE MrThananwat +5200483 E24XFA Pankumyat +5200484 HS1ZCN Mr +5200485 E24XFA Pankumyat +5200486 HS1ZCN Mr +5200487 E24XFB MrChaiphiphat +5200488 E24XFB MrChaiphiphat +5200489 HS4AXO Naruthai +5200490 HS2MTM Boonlue +5200491 HS6SDB MrWanlop +5200492 HS1BFB Suchoke +5200493 E24VVY Sakda +5200494 HS9XYX wisut +5200495 HS7GX Channarong +5200496 E21STS RATTANAPOL +5200497 E20TWR Sanee +5200498 E21OKY Anuwat +5200499 E21OKY Anuwat +5200500 E24SSN karin +5200501 HS8IVZ sopit +5200502 HS8IAV Sahongsak +5200503 HS4POQ Akrarudech +5200504 E23HSW Pitipat +5200505 E25CHO THARINTHORN +5200506 E22PSN Pakorn +5200507 HS1EQF Jin +5200508 E29JCH Chalongrat +5200509 HS0ZNN David +5200510 E23RFC suprawee +5200511 E24ORA Thosawat +5200512 E21DIX Koratak +5200513 HS1EQF Jin +5200514 E29JCH Chalongrat +5200515 E24ORA Thosawat +5200516 E24MMV Theerawat +5200517 HS0SZU PATTANAKIAT +5200518 HS6CJZ Rachen +5200519 HS6CJZ Rachen +5200520 E20TGU Nopporn +5200521 E20TGU Nopporn +5200522 HS5SOV Boromwit +5200523 E21MPG Veerawat +5200524 E21MPG Veerawat +5200525 HS5XWY SIRAMATH +5200526 HS3NTQ MrCheattha +5200527 E23RFC suprawee +5200528 E23HMS Boy +5200529 E25DBQ ????? +5200530 HS6XYS Komson +5200531 E27ASY MrSomporn +5200532 HS9HRR Niroj +5200533 E21QWZ Akechai +5200534 HS0QDZ MrSatid +5200535 HS0QDZ MrSatid +5200536 E27ELR Sarawut +5200537 E27GEA Tanundorn +5200538 E24QND Nanon +5200539 HS8KAY PHARAN +5200540 E27ASY MrSomporn +5200541 E23FXX Rachar +5200542 HS2MYR Thurdsak +5200543 E29THF Thanawat +5200544 HS2FCR MrThongbai +5200545 HS5XWY SIRAMATH +5200546 HS2FCR MrThongbai +5200547 HS1CAA Thanakorn +5200548 HS3UBX settawut +5200549 HS0AC Radio +5200550 HS1IFU Nimit +5200551 HS1IFU Nimit +5200552 HS1ERP Chackapoj +5200553 E20YTI Ukrit +5200554 E20YTI Ukrit +5200555 HS0EBS Jeerakorn +5200556 E23PBE MrThanat +5200557 E23PBE MrThanat +5200558 HS4HGH Apichet +5200559 HS7IKS Apichai +5200560 HS6LFC PIWAN +5200561 HS1SEY CHUTITHEP +5200562 E25GQS Wiboon +5200563 E24OWX Kittikhom +5200564 HS1AOB Prasit +5200565 HS1EY Surachai +5200566 HS1APZ supakit +5200567 E24YKW chatphicht +5200568 HS2AOB Prasit +5200569 HS6KLJ Mr +5200570 E24XUH Tanormsak +5200571 HS2QOJ sopon +5200572 HS5QGH Wanna +5200573 E24OWX Kittikhom +5200574 E29SZE Parinya +5200575 E20MRW MrsSirimard +5200576 E23DDO Parun +5200577 E21NZC Chayuth +5200578 HS0KRM Mr +5200579 E23DDO Parun +5200580 HS6TFM Channarong +5200581 HS1AMT VEERAKIT +5200582 HS1DQ Sanchai +5200583 HS4WKB Thongsuk +5200584 HS1JAN Tanan +5200585 HS0GWL Thanin +5200586 E29TGW WEERAPAT +5200587 HS9XIC Asree +5200588 HS5LYE Sakdaret +5200589 HS0OXT Prasong +5200590 HS3NTQ MrCheattha +5200591 HS9IYN KERKCHAI +5200592 HS4WKB Thongsuk +5200593 HS6TVA Natthaphong +5200594 E23YQY Kongjak +5200595 E29THF Thanawat +5200596 E29IRX Songkran +5200597 HS1DMM Mr +5200598 E20OGB Pattarachai +5200599 E21HSY Ekabutr +5200600 HS5GLD Pich +5200601 E21VDW somkid +5200602 E21VDW somkid +5200603 HS8AFA Anan +5200604 E24UXT Dechathon +5200605 HS1CZD Amnat +5200606 E20WTD SIWAT +5200607 E24ZGL Bunlert +5200608 E20FWF +5200609 HS5XQW Kittipich +5200610 E22MAL Jettapol +5200611 HS0ONI Attawit +5200612 E25EOL Nianan +5200613 HS5XQW Kittipich +5200614 E23SCY Niwat +5200615 E23SCY Niwat +5200616 HS0RGD Pakorn +5200617 HS9HKY niwat +5200618 E20FIT Phanu +5200619 E25HZX Ruaam +5200620 E20GYX Siriporn +5200621 HS1AGE HS1AGE +5200622 HS1AFN Tana +5200623 HS9KOL Khalil +5200624 HS7IKF MrRadchapon +5200625 HS7NPT Somporn +5200626 HS1ITC chatri +5200627 HS1HTW Poramate +5200628 E24PIA weerasak +5200629 HS5NUT Thaworn +5200630 HS6TUX Choochai +5200631 E24TXH Wattanasak +5200632 HS8HWE Wirot +5200633 E24TXH Wattanasak +5200634 HS3OZW Sirichai +5200635 HS2PID MrAtipat +5200636 HS2PID MrAtipat +5200637 E25DWT Narongkorn +5200638 E25DWT Narongkorn +5200639 E23GLI Warit +5200640 HS0KOQ Montree +5200641 E20WGV Kittipong +5200642 E20LSO Chatree +5200643 HS0KOQ Montree +5200644 HS5VVV Chutimon +5200645 E21GMP somchay +5200646 HS5VVV Chutimon +5200647 HS1HTW Poramate +5200648 HS0QLN Vivatvong +5200649 E24WAZ Woranuch +5200650 HS0WBV Prathin +5200651 E20QVD Surachart +5200652 HS1NNO PAKORN +5200653 E27ANR anurak +5200654 HS2WTD natree +5200655 E21FOY Surawit +5200656 E21FOY Surawit +5200657 HS7FG Danai +5200658 E27JBQ Yuttana +5200659 HS7WMU Watcharapat +5200660 E24ZJG Tawatchai +5200661 E20LSO Chatree +5200662 E20WGV Kittipong +5200663 E24UVL Somkiat +5200664 HS8JTE Naphuket +5200665 E24UVL Somkiat +5200666 HS2VSN MrKaveesak +5200667 HS2VSN MrKaveesak +5200668 HS6YUK Thawat +5200669 HS4ADN Thanakon +5200670 E29ZIL Thitima +5200671 HS4ADN Thanakon +5200672 E27JBQ Yuttana +5200673 E23OLC Komsan +5200674 HS3QGB Paeosoongnoen +5200675 HS2ZJN Wicharn +5200676 HS0RAA CHAIYOT +5200677 HS5WYM Phattarawin +5200678 HS5WYM Phattarawin +5200679 E20SPI Thaveechai +5200680 E25EPD Maasmee +5200681 HS9WOF Wisarut +5200682 HS9QMG MrWaeasming +5200683 E21HYR Suthirug +5200684 HS2TPN Phutrat +5200685 HS2TPN Phutrat +5200686 HS0BXF Namchoke +5200687 E27DRU Arwut +5200688 HS6HYO THISSADEE +5200689 E24LXL Weerayut +5200690 E24LXL Weerayut +5200691 E27CVI Sakorn +5200692 E27CVI Sakorn +5200693 E27DRU Arwut +5200694 E25CRG Phisanu +5200695 HS9LJV Anuwat +5200696 E29TXA Thanadech +5200697 E27EVR Amornkarn +5200698 HS9LWR Phongsaphon +5200699 HS9LWR Phongsaphon +5200700 HS3QGB Paeosoongnoen +5200701 E25EQL ISMAIL +5200702 E22BBM Banhdit +5200703 HS3OAR chainakharin +5200704 E25DZY warawut +5200705 E25DZY warawut +5200706 E24HZU Tipat +5200707 E24HZU Tipat +5200708 HS5BOG Winai +5200709 E25IID Kunlanat +5200710 HS5GQO prasartpon +5200711 HS3OAR chainakharin +5200712 E25EPD Maasmee +5200713 HS9KOL Khalil +5200714 E21HYR Suthirug +5200715 E25DXS BOONKERD +5200716 E21XBL Sompoom +5200717 E21XBL Sompoom +5200718 HS8FQF Trirat +5200719 HS2CBP Thanasak +5200720 HS2CBP Thanasak +5200721 E24WKS Phattanapong +5200722 E24WKS Phattanapong +5200723 E24OWF Sittichok +5200724 E24OWF Sittichok +5200725 E29SL pichit +5200726 HS2EBX wanchai +5200727 E20MKH siripong +5200728 E29UOO Sirin +5200729 E24NHD Samart +5200730 E24DPP Jirapol +5200731 E25IMD MONGKOLCHIT +5200732 E25IMD MONGKOLCHIT +5200733 E25ILU Paiboon +5200734 E22JPF chalermpol +5200735 E24NHD Samart +5200736 E24PKQ Prakasit +5200737 HS9MDQ JARIYASAK +5200738 E22UYH Phongphanot +5200739 E22UYH Phongphanot +5200740 E22ULT Prachuab +5200741 E23PIR Charoen +5200742 E25FGL Watchara +5200743 E25HBZ MrVicharn +5200744 HS3MUF saphonced +5200745 E24OYI Sarawut +5200746 E23ITH Auttapun +5200747 E23ITH Auttapun +5200748 HS7KWD PARINYA +5200749 HS6HBC Mr +5200750 HS9XID Dean +5200751 HS3EEA THANARAKS +5200752 HS3EEA THANARAKS +5200753 E24PUX witsanu +5200754 E24PUX witsanu +5200755 HS6JEQ +5200756 HS6JEQ +5200757 E25BBF Kitthiyapong +5200758 E21AOY Wara +5200759 E25BBF Kitthiyapong +5200760 HS9XTB Wasan +5200761 HS9XTB Wasan +5200762 E25GTC Sani +5200763 E27GHD None +5200764 E25GTC Sani +5200765 HS3BCK Phiraphong +5200766 E20HQV Khomsan +5200767 E20HQV Khomsan +5200768 HS3BCK Phiraphong +5200769 E27GAQ +5200770 HS8HXQ Supot +5200771 HS8HXQ Supot +5200772 E25ETT Pumiphat +5200774 E25ETT Pumiphat +5200775 E24UUW Wutthichai +5200776 E24UUW Wutthichai +5200777 E24ZRX Krit +5200778 E24ZRX Krit +5200779 E20PNG +5200780 E25IMM Pruepruk +5200781 HS6RNN Maitree +5200782 HS6RNN Maitree +5200783 E25FKA Mr +5200784 E20MFS Anan +5200785 E20SZU Withaya +5200786 HS3ZIY None +5200787 HS5LOO Chairus +5200788 HS5LOO Chairus +5200789 E20TWR Sanee +5200790 E25CHP Jirayus +5200791 HS2KYA Sathaporn +5200792 HS3SXW Paisal +5200793 HS3SXW Paisal +5200794 HS9ELF None +5200795 E25EUK Tassana +5200796 E25EUK Tassana +5200797 E20VUE Chanus +5200798 E24DGV Kriangsak +5200799 E24WYZ akachai +5200800 HS1GAB Anan +5200801 HS1GAB Anan +5200802 E24LIW Phonphawit +5200803 HS2QEA Apichart +5200804 HS2QEA Apichart +5200805 E25JAF Tanida +5200806 E25JAF Tanida +5200807 E24KHS Narainthon +5200808 HS5TXB Mr +5200809 HS0ZED Martin +5200810 HS4BPX Boonlert +5200811 E24LIW Phonphawit +5200812 HS8LR Ocha +5200813 E24RGD chaiyot +5200814 E24RGD chaiyot +5200815 HS4CPI Manoch +5200816 E25BKK Thachanon +5200817 HS8LR Ocha +5200818 E25JDI Mungmart +5200819 E25JDI Mungmart +5200820 HS7UCQ Capitan +5200821 E21IZC Tony +5200822 HS7UCQ Capitan +5200823 E25JHX Anusit +5200824 HS1BJP ITTIPAT +5200825 HS1DXE Sorayuth +5200826 E23NGC Jakkapong +5200827 E22CYE Dumrongsak +5200828 HS2MIF Phaisal +5200829 E22CVI Nonerorand +5200830 E24ZVT Cherdchai +5200831 HS8BOL Panwong +5200832 E24ZVT Cherdchai +5200833 HS0QOB Worawit +5200834 HS3VON Mr +5200835 HS0QOB Worawit +5200836 E25ILU Paiboon +5200837 HS8MNO kajonsak +5200838 E25JHX Anusit +5200839 E25EAS Vorapon +5200840 E25EAS Vorapon +5200841 HS0TK Ronarong +5200842 E25JWN Krittin +5200843 HS1PRT Montren +5200844 HS1PRT Montren +5200845 E22HDA rangsan +5200846 HS6XYS Komson +5200847 HS5GLP None +5200848 HS5GLP None +5200849 HS1FXB montree +5200850 E20IME apichart +5200851 HS4BPX Boonlert +5200852 HS5KEK songkran +5200853 E25KHL Supakorn +5200854 HS5KEK songkran +5200855 E27GAQ +5200856 HS1DSX +5200857 HS0ZMA Djamal +5200858 E28OI Chaiyaphat +5200859 HS1XRD Prarinya +5200860 HS2UJE Panupong +5200861 HS4FTZ sutipun +5200862 HS2UJE Panupong +5200863 HS1XRD Prarinya +5200864 HS0ZOE Komkit +5200865 E22CCO Kitiwuti +5200866 E25KCV Bandit +5200867 E25KCV Bandit +5200868 HS0ZOL David +5200869 HS9HXJ jumras +5200870 E25GEQ Apinan 5201001 HS0ZNJ 5201002 HS8JDX Sakonthon 5206001 HS0ZET Ralf 5206002 HS3LIQ Wiwat 5250001 9V1JC Wiyanto 5250002 9V1PK Peter -5250003 9V1KB Benjamin +5250003 9V1KB 5250004 9V1LY 5250005 9V1WO Aaron 5250006 9V1DY Danny +5250007 9V1DY Danny 5250008 9V1GQ Danny +5250009 9V1AF Aw 5250010 9V1YW Yingwang 5250011 9V1CD Arnold 5250012 9V1LH Stephan 5250013 9V1CD Arnold 5250014 9V1LH Stephan 5250015 9V1HY Haoyuan +5250016 9V1MH Matt +5250017 9V1KB +5250018 9V1WO Aaron +5250019 9V1OG Ogie +5250020 9V1YW Yingwang +5250021 9V1AR Kenneth +5250022 9V1SGS SARTS +5250023 9V1CL Deng +5250024 9V1CL Deng +5250025 9V1AR Kenneth +5250026 9V1TX Ricky +5250027 9V1XV Xavier +5250028 9V1LW Lih +5250029 9V1OG Ogie +5250030 9V1AP Bernard 5251001 9V1CJ Joel 5251002 9V1CJ Joel 5280001 V89DJD @@ -105625,6 +139196,160 @@ 5300008 ZL3WNG Brian 5300009 ZL3EP Scott 5300010 ZL3CLD Chris +5300011 ZL3ADB Graham +5300012 ZL3GAV Gavin +5300013 ZL2MNM Mike +5300014 ZL3FLY John-Willaim +5300015 ZL3FLY John-Willaim +5300016 ZL3TOY +5300017 ZL1AFZ Jonathan +5300018 ZL2BRM Eddie +5300019 ZL1LAC Leith +5300020 ZL1LAC Leith +5300021 ZL3MIL Maree +5300022 ZL2NW Nate +5300023 ZL2JEL John +5300024 ZL3BCC Ronald +5300025 ZL2XT Mike +5300026 ZL1KFM Kevin +5300027 ZL2XLX XLX +5300028 ZL2XLX XLX +5300029 ZL2XLX XLX +5300030 ZL2XLX XLX +5300031 ZL2ADO James +5300032 ZL2BD Bernard +5300033 ZL1KAN Michael +5300034 ZL1KAN Michael +5300035 ZL2KRIS Kris +5300036 ZL4TE Pete +5300037 ZL3RCK Ron +5300038 ZL4NB Nick +5300039 ZL4HD Tom +5300040 ZL4BLF Thomas +5300041 ZL1PRT S +5300042 ZL1FJ Brendan +5300043 ZL3TGR Ian +5300044 ZL4SGB Stewart +5300045 ZL4AU Roland/Roly +5300046 ZL2KEJ Kimberly +5300047 ZL2XLX XLX +5300048 ZL1UTH Trevor +5300049 ZL1UTH Trevor +5300050 ZL4GJ Trevor +5300051 ZL2AUX Dave +5300052 ZL4ARG Alex +5300053 ZL1LAP Graham +5300054 ZL2CJR Colin +5300055 ZL1KCJ MsK +5300056 ZL2DOC Dave +5300057 ZL2DOC Dave +5300058 ZL4WPS Warren +5300059 ZL1MPW Mark +5300060 ZL3CAR Canterbury +5300061 ZL2SN +5300062 ZL2BCI Benjamin +5300063 ZL3CAR Canterbury +5300064 ZL3HAM Tony +5300065 ZL1VE VENKATESAN +5300066 ZL2ATH Wynne +5300067 ZL4IA Mike +5300068 ZL3TMB Mike +5300069 ZL4GDM Graham +5300070 ZL4GDM Graham +5300071 ZL3CJH Chris +5300072 ZL2ELL Elliot +5300073 ZL2RMC Robert +5300074 ZL4MV G +5300075 ZL4LOL Dean +5300076 ZL4DVG Daniel +5300077 ZL1VCR N +5300078 ZL3TSD Tony +5300079 ZL1JWB John +5300080 ZL2FOX Adam +5300081 ZL1AOX Ian +5300082 ZL1BTS Terence +5300083 ZL4ND Nick +5300084 ZL4DK David +5300085 ZL4WDR +5300086 ZL2KH Roger +5300087 ZL2ELL Elliot +5300088 ZL3TOM Thomas +5300089 ZL2THS Tom +5300090 ZL1JHE Ian +5300091 ZL3PRA Rob +5300092 ZL2UB David +5300093 ZL2UB David +5300094 ZL2WT David +5300095 ZL2WG Wayne +5300096 ZL4SY Norman +5300097 ZL1CVD Chris +5300098 ZL1WBZ Neil +5300099 ZL4FG Peter +5300100 ZL1PID Stuart +5300101 ZL2IQ Murray +5300102 ZL2XM Barrie +5300103 ZL1BHD Steve +5300104 ZL4CEL Terry +5300105 ZL2JTL John +5300106 ZL2AQY Eddie +5300107 ZL2AQY Eddie +5300108 ZL2XLX XLX +5300109 ZL1MDR Matt +5300110 ZL2RSA Shaun +5300111 ZL4KN R +5300112 ZL2VAX Philip +5300113 ZL1DL Dave +5300114 ZL1DL Dave +5300115 ZL1RAH Rodger +5300116 ZL1SLC shannon +5300117 ZL2MRT Murray +5300118 ZL2BZH G +5300119 ZL2BAC T +5300120 ZL2CWA Craig +5300121 ZL1VR Charlie +5300122 ZL1TOA Ocean +5300123 ZL2GX Giovanni +5300124 ZL1OW Raymond +5300125 ZL3KBL Alex +5300126 ZL2DW David +5300127 ZL2FAD Frederik +5300128 ZL2FAD Frederik +5300129 ZL2EW Matthew +5300130 ZL2EW Matthew +5300131 ZL2TEC Bryce +5300132 ZL1LDP Lance +5300133 ZL1AB North +5300134 ZL1VAK Allan +5300135 ZL3HGN Stuart +5300136 ZL3HGN Stuart +5300137 ZL2SH Shane +5300138 ZL3HR Paul +5300139 ZL3HR Paul +5300140 ZL4LC Lindsay +5300141 ZL1UCH Chris +5300142 ZL2XS Brian +5300143 ZL1MVL Ian +5300144 ZL2WKS Will +5300145 ZL4MY Mike +5300146 ZL4MY Mike +5300147 ZL2SH Shane +5300148 ZL1HMD Simon +5300149 ZL1GW Paul +5300150 ZL3MC Mark +5300151 ZL2SY Seymour +5300152 ZL2FJ Frank +5300153 ZL3GP Philip +5300154 ZL1OBI Sam +5300155 ZL1GER Kieran +5300156 ZL4RM Eb +5300157 ZL3SST Shaun +5300158 ZL1CLH Chris +5300159 ZL1LAS Liam +5300160 ZL2TYR Don +5300161 ZL2SB Brendin +5300162 ZL2SB Brendin +5300163 ZL3GP Philip +5300164 ZL2TD Peter 5301001 ZL4JY John 5301002 ZL4JY John 5301003 ZL4JY John @@ -105654,9 +139379,13 @@ 5301027 ZL2FC Colin 5301028 ZL2BA David 5301029 ZL1THG Tom +5301030 ZL2KB Kapiti +5301031 ZL2KB Kapiti +5301032 ZL2KB Kapiti +5301033 ZL2KB Kapiti 5301034 ZL2BEZ PG 5301035 ZL4SJ Steve -5301036 ZL2KBFL Kapiti +5301036 ZL2KB Kapiti 5301037 ZL2FX Scott 5301038 ZL2UN Neil 5301039 ZL2MGS Mike @@ -105723,8 +139452,8 @@ 5301100 ZL1BAK Graeme 5301101 ZL1WBZ Neil 5301102 ZL1LK Roy -5301103 ZL1CTS Clifford -5301104 ZL1CTS Clifford +5301103 ZL1CTS Cliff +5301104 ZL1CTS Cliff 5301105 ZL1OLE Ole 5301106 ZL1DAM David 5301107 ZL1AQC Vic @@ -105810,7 +139539,7 @@ 5301187 ZL2ADP M 5301188 ZL1SWW Simon 5301189 ZL1DEF Nicholas -5301190 ZL1CTS Clifford +5301190 ZL1CTS Cliff 5301191 ZL2DR David 5301192 ZL2KI Kenneth 5301193 ZL2KI Kenneth @@ -105836,8 +139565,8 @@ 5301215 ZL1BQA E 5301216 ZL1MY G 5301217 ZL1BCO Taupo -5301218 ZL1KU K -5301219 ZL1KU K +5301218 ZL1KU Kelvin +5301219 ZL1KU Kelvin 5301220 ZL1BU Graeme 5301221 ZL1BCO Taupo 5301222 ZL1HX Bowden @@ -105887,7 +139616,7 @@ 5302045 ZL2NAT Nathan 5302046 ZL4RFC 4rf 5302047 ZL4RFC 4rf -5302048 ZL1AFZ J +5302048 ZL1AFZ Jonathan 5302049 ZL1AZT Ian 5302050 ZL3JON Jon 5302051 ZL2TH Trevor @@ -105947,7 +139676,7 @@ 5302107 ZL2AUS Brett 5302108 ZL1UBE Jim 5302109 ZL1DEF Nicholas -5302110 ZL2KEJ Kim +5302110 ZL2KEJ Kimberly 5302111 ZL2JEL John 5302112 ZL2DEK David 5302113 ZL2WLR Wayne @@ -105985,9 +139714,9 @@ 5302145 ZL2WL Wayne 5302146 ZL2WLR Wayne 5302147 ZL2RCL Robin -5302148 ZL2LO C +5302148 ZL2LO Chris 5302149 ZL2OR D -5302150 ZL2LO C +5302150 ZL2LO Chris 5302151 ZL2TFG Warren 5302152 ZL2JML Warren 5302153 ZL2KEA Juno @@ -105998,7 +139727,7 @@ 5303004 ZL3DMC Don 5303005 ZL3AC Christchurch 5303006 ZL3AC Christchurch -5303007 ZL3TOY Blair +5303007 ZL3TOY 5303008 ZL3RCK Ron 5303009 ZL3RX Rob 5303010 ZL3ROD Rodrigo @@ -106131,7 +139860,7 @@ 5303137 ZL2IA Jim 5303138 ZL3TNK H 5303139 ZL4LDY Dave -5303140 ZL1KJ Gary +5303140 ZL1KJ Gertjan 5303141 ZL3DMH Douglas 5303142 ZL2UCX Steve 5303143 ZL3TDF B @@ -106183,7 +139912,7 @@ 5303200 ZL2JGW Gordon 5303201 ZL4OM M 5303202 ZL4SN N -5303203 ZL1KJ Gary +5303203 ZL1KJ Gertjan 5303204 ZL2BBK Steve 5303205 ZL2BAZ Barry 5303206 ZL3SI Simon @@ -106194,6 +139923,10 @@ 5303211 ZL3CJB Carey 5303212 ZL4CJF Chris 5350001 KB6IDK Richard +5350002 NH2LU Bart +5350003 KN4IAS Shane +5350004 NH2LU Bart +5350005 KN6DWW Cody 5351001 KH2MM Jochen 5351002 WH2F Stephan 5351003 NH2CY Bradley @@ -106205,18 +139938,27 @@ 5351009 NH2KW Brett 5351010 KN4IAS Shane 5351011 KE4YSP Mark +5370001 DW1YSI Nelson 5371001 P29ZTC Terry 5371002 P29LZ Lowell 5371003 P29JV Joris 5371004 P29LZ Lowell -5460001 FK8HM Pesque -5460002 FK8HM Pesque -5460003 FK8HM Pesque +5410001 YJ8DX Trevor +5440001 KH8AC Gary +5460001 FK8HM PESQUE +5460002 FK8HM PESQUE +5460003 FK8HM PESQUE 5460004 FK4RD Yves 5460005 FK1UW Tardivel 5460006 FK4RH Gilles +5480001 E51DOM Dom +5500001 V63JB John +5500002 V6PBE Berthold +5520001 T88KY +5520002 T88KZ Jery 6030001 7X2VX Abdelkrim 6030002 7X2UV Hakim +6030003 7X4CZ CHAREF 6040001 CN8VX Youness 6040002 CN8FK Rachid 6040003 CN8IC Mourad @@ -106229,21 +139971,84 @@ 6040010 CN8DN Cn8dn 6040011 CN8WW DIPLOMAT 6040012 CN8YY YOUSSEF +6040013 CN8DDC Zerhoun +6040014 CN8EAA ADIL +6040015 CN8ECM Hamdache +6040016 CN8MFR MUSTAPHA +6040017 CN8LA Abdou +6040018 CN8HAQ ABID +6040019 CN8YM Lhaj +6040020 CN8QLI Ali +6040021 CN8AKT AKACHAR +6040022 CN8GX Momo +6040023 CN8SG Hassan +6040024 CN8JB CN8JB +6040025 CN8QR RAJI +6040026 CN8INS Saber +6040027 CN8GC GC +6040028 CN8KG Najib +6040029 CN8ANT ANT +6040030 CN8ZER ZER +6040031 CN8SCS Kamal +6040032 CN8KAM El +6040033 CN8ADC Hassan +6040034 CN8FF Larbi +6040035 CN8AAI LHADJ +6040036 CN8AAD Moh +6040037 CN8KHO ABDELLATIF +6040038 CN8WO BAF +6040039 CN8CMB Choufani +6040040 CN8AMI Khalid +6040041 CN8SAH Ameur +6040042 CN8MAA Mohammed +6040043 CN8HQ El +6040044 CN8HRA Hamid +6040045 CN8MEE Soufyane +6040046 CN8SYY Youssef +6040047 CN8JJB Abdallah +6040048 CN8DAR Mohammed +6040049 CN8VO Abderrahim +6040050 CN8HAN Hassan +6040051 CN8IT INDIATANGO68 +6040052 CN8NY None +6040053 CN8DY Simo-DMR +6040054 CN8XB X-B +6040055 CN8HF Patrick +6040056 CN8CJ Moh +6040057 CN8SO SAMIR63 +6040058 CN8ABO ALALAE +6040059 CN8MMC MMDVM-DMR-P25-C4FM +6040060 CN8TAG MMDVM-DMR-P25-C4FM +6040061 CN8QY Abdou73 +6040062 CN8PQ HOSSIN +6040063 CN8WT NISRINE +6040064 CN8FK Mohamed +6040065 CN8KF Lido +6040066 CN8DN Cn8dn 6080001 6W1ST SERGE 6090001 5T1A Fawaz 6130001 XT2MAX Max 6150001 5V1JE John 6170001 3B8CW Clive +6170002 3B8DM Ismet +6180001 EL2BN Bassam +6180002 EL2JJ Jean 6200001 9G5AF Haim +6200002 9G5AR Richard +6200003 9G5GS MAT 6210001 5N0SVL Izzy +6220001 TT8JLH Jean-Louis 6230001 TL7DX TL7DX +6340001 ST2JB John 6380001 J28PJ Jean-Philippe 6390001 5Z4XB Mark 6400001 5H3DX Charles 6430001 C91PM Paulo 6430002 C91UZC Freitas 6430003 C91WDL C91WDL +6430004 C91GC MiguelAngelo 6450001 9J2YO Gabi +6450002 9J2RD Rob 6460001 5R8AE Tonton 6470001 FR4NP Jacky 6470002 FR4QK Jerome @@ -106295,10 +140100,17 @@ 6470048 FR5GI Louis 6470049 FR4PM HENRI 6470050 FR1FF FR1FF +6470051 FR5ZX ANDRE +6470052 FR1GV Alain +6470053 FR5AO Jean +6470054 FR4TA Daniel 6480001 Z21NRT David +6480002 Z21EK Howard 6490001 V51RS Robert 6490002 V51WF Fritz 6490003 V51DM Derek +6490004 V51DR Eduan +6490005 V51MA Mike 6491001 V51JP Werner 6491002 V51V Victor 6530001 3DA0MF Louis @@ -106339,15 +140151,47 @@ 6551035 ZR1SWB Schalk/Wim 6551036 ZR1AGV Gerrit 6551037 ZS1DON Don +6551038 ZS1BCD Bernie +6551039 ZS1G ZS1G +6551040 ZS1SJ ZS1SJ +6551041 ZS1RIC Richard +6551042 ZS1GRC ZS1GRC +6551043 ZS1TS Timothy +6551044 ZS1RIC Richard +6551045 ZS1JDM Jacques +6551046 ZS1VBC Virgil +6551047 ZS1CDG Chris +6551048 ZS1EI Peet +6551049 ZS1RBT James +6551050 ZS1OIN Oleg +6551051 ZS1ANF Oleg +6551052 ZS1OSS Danie +6551053 ZS1FX Bruce +6551054 ZS1X Dirk +6551055 ZS1MR Michael 6552001 ZS2ABF Peter 6552002 ZS2AFB Andrew 6552003 ZS2AFB Andrew 6552004 ZS2VA Les 6552005 ZS2VA Les +6552006 ZS2PE PEARS +6552007 ZR2TX Tony +6552008 ZS2MDL Mike +6552009 ZS2BD Bernice +6552010 ZS2MHN Michael +6552011 ZS2N Nev +6552012 ZR1E Andreeksteen +6552013 ZS2GV Glen +6552014 ZS2X Tim_ZS2X 6553001 ZS3DT Rudi 6553002 ZS3PS PAT 6553003 ZU3J Junior +6553004 ZS3AP Anthony +6553005 ZS3LAM Anton 6554001 ZS4OIL Mark +6554002 ZS4PR Riaan +6554003 ZS5SF Monk +6554004 ZS4OM Louis 6555001 ZS5GR Tony 6555002 ZS5BG Bradley 6555003 ZS5BG Bradley @@ -106409,6 +140253,13 @@ 6555059 ZS6SID Sidney 6555060 ZS5GAV Gavin 6555061 ZS5MAX MAX +6555062 ZR5BCB Brian +6555063 ZS5TWJ Troy +6555064 ZS5JY NORMAN +6555065 ZS5GM ZS5GM +6555066 ZS5KT Justin +6555067 ZS5LG Leo +6555068 ZS5KM Mike 6556001 ZS6RVC Ronald 6556002 ZS6DR Derek 6556003 ZS6ARG Lee @@ -106559,6 +140410,62 @@ 6556148 ZS6RM Hennie 6556149 ZS6LDV Louise 6556150 ZS6KRW Kelvin +6556151 ZS6EMS Hannes +6556152 ZR6TG Tom +6556153 ZR6CP Shrek-Polly +6556154 ZS6BML Machael +6556155 ZR6RB Romeo +6556156 ZS6CHS Corlie +6556157 ZS6JT Henk +6556158 ZS6MAW Marinus +6556159 ZS6BYT Scott +6556160 ZS6OK Liv +6556161 ZS6RHZ Rod +6556162 ZS6AW Danny +6556163 ZS6ART ZS6ARTG +6556164 ZS6ANE Nigel +6556165 ZS6JNG John +6556166 ZR6HYW Marinus +6556167 ZS6GGA Glen +6556168 ZS6WY Wynand +6556169 ZR6HYW Marinus +6556170 ZS6WPD WILLEM +6556171 ZR6WR Richard +6556172 ZS6GBD Boesman +6556173 ZR6CP Shrek-Polly +6556174 ZS6JSJ JJ +6556175 ZS6ECF Elize +6556176 ZR6ATS Stretchy +6556177 ZS6CSV CONRAD +6556178 ZS6VIL Bertus +6556179 ZS6GLN Glynn +6556180 ZS6SSB Quintin +6556181 ZR6ZAK Zak +6556182 ZS6KB Kevin +6556183 ZS6RAR Richardt +6556184 ZS6SNY AdrSny +6556185 ZS6DGS Dirk +6556186 ZS6S Al +6556187 ZS6ZYM Jan +6556188 ZS6AGE Gordon +6556189 ZS6JGL John +6556190 ZS6RPL Roelof +6556191 ZS6ELX Edward +6556192 ZS6PGN Peet +6556193 ZS6GTK Gerrie +6556194 ZS6STE Stephen +6556195 ZS6DVG Danie +6556196 ZS6BMN Jan +6556197 ZS6IW Johan +6556198 ZR6DBE Bernhard +6556199 ZS6ACC Dave +6556200 ZS6DVD Schalk +6556201 ZS6C Geoff +6556202 ZS6ALH AndreH +6556203 ZS6MC Henry +6556204 ZS6HR Rainer +6556205 ZS6CVM Chris +6556206 ZS6ZA Etienne 7020001 V31MP Martin 7020002 V31DL Andre 7020004 V31BZ Monika @@ -106566,6 +140473,8 @@ 7020009 V31SH Steven 7020010 V31SH Steven 7020011 V31SH Steven +7020012 V31OU Stephenson +7020013 V31XE Joseph 7040001 TG9AFX Christian 7040002 TG9AOR Jose 7040003 TG9ASO Omar @@ -106584,20 +140493,49 @@ 7040016 TG9AUO Jose 7040017 TG9ADM Dante 7040018 TG0AA Club -7040019 TG8NFF Julio -7040020 TG9NCS Carlos +7040019 TG8AFF Julio +7040020 TG9CQM Carlos 7040021 TG6NOP Otto +7040022 TG8AMX Raul +7040023 TG9AMD Dani +7040024 TG8LGR LIGA +7040025 TG8AOQ Edgar +7040026 TG9SRP Sigfrido +7040027 TG9NJM Joel +7040028 TG6NOO Otto +7040029 TG9NLF Luis +7040030 TG6NER Manuel +7040031 TG8NAH Alvaro +7040032 TG9CQM Carlos +7040033 TG9ADQ Mario +7040034 TG9ANF Francisco +7040035 TG9ANF Francisco +7040036 TG9AXF Edgar +7040037 TG9AXF Edgar +7040038 TG5RBH Rudy +7040039 TG8ARP Reynaldo +7040040 TG4NJG Jorge +7040041 TG4NJG Jorge 7060001 YS3VE Louis 7060002 YS3GRR Jose 7060003 YS1SPY F 7060004 YS3YBL Alba -7080001 HQ2DDL David +7060005 YS1LRR SILVIA +7060006 YS1RM Enrique +7060007 YS1GC Salvador +7060008 YS1GC Salvador +7080001 HR2DDL David +7080002 HQ1BJB Benjamin 7081001 HR1LEO Leonardo -7082001 HQ2DDL David +7082001 HR2DDL David 7082002 HR2MD Marco 7087002 HR2RCH Radio 7087003 HQ2NBO Noe 7087004 HR2JAC Juan +7100001 YN1J Juan +7100002 YN1D Jaime +7100003 YN1ZFQ Felipe +7100004 YN8HR Jose 7101001 YN1ZJK Erich 7101002 YN1OB Orlando 7101003 YN1OB Orlando @@ -106617,16 +140555,37 @@ 7120014 TI2ENA Enrique 7120015 TI2RE Ronny 7120016 TI4NJ Martin -7120017 TI2ALF Gustavo +7120017 TI2ALF Gus 7120018 TI4OP Oscar 7120019 TI4PHP Gregory -7120020 TI2ALF Gustavo +7120020 TI2ALF Gus 7120021 TI2JHS Jorge 7120022 TI5LCA Luis 7120023 TI2HMJ Jorge 7120024 TI4VAA Victor 7120025 TI2RCG Rodrigo 7120026 TI5LUA Luis +7120027 TI2BSH Carlos +7120028 TI2BSH Carlos +7120029 TI2SLS Greivin +7120030 TI2OTO Otto +7120031 TI4DMR RONNY +7120032 TI4DMR RONNY +7120033 TI3RKM Rogelio +7120034 TI2AIM EDWIN +7120035 TI2PCT Pedro +7120036 TI2JV Jorge +7120037 TI4OLS Oscar +7120038 TI4OLS Oscar +7120039 TI2CJJ Jorge +7120040 TI2NMV Noel +7120041 TI7DBS Daniele +7120042 TI4MVV Victor +7120043 TI4MVV Victor +7120044 TI2CLX Luis +7120045 TI2RFV Ronnie +7120046 TI7DBS Daniele +7120047 TI2FIS Benedicto 7123001 TI2HMJ Jorge 7123002 TI4ERM Elpidio 7123003 TI4RFM Rodolfo @@ -106635,7 +140594,7 @@ 7125002 TI2RU Renato 7125003 TI2RPT Olman 7125004 TI2AKN Arturo -7125005 TI2DYS Alejandro +7125005 TI2ALZ Alejandro 7125009 TI2VHS Victor 7125010 TI2PMR Rodolfo 7125011 TI2JPA Jose @@ -106643,6 +140602,104 @@ 7125013 TI2RCG Rodrigo 7125015 TI2VLM Victor 7140001 HP3ICC Esteban +7140002 HP2AOA Alberto +7140003 HP2AT Jose +7140004 HP2STE Steven +7140005 HP2NIC Nicolas +7140006 HP2SA Lisa +7140007 HP2CNL Candy +7140008 HP2WCN Wendy +7140009 HP1GAS Gabriel +7140010 HP1DET Belkys +7140011 HP3ARC Ariel +7140012 HP3ARC Ariel +7140013 HP3MFC Maximo +7140014 HP2LCD Luis +7140015 HP2LCD Luis +7140016 HP1JAD Jose +7140017 HP1LAA Luis +7140018 HP1LAA Luis +7140019 HP3AEC Alex +7140020 HP3AEC Alex +7140021 HP1ABM Joel +7140022 HP1ABM Joel +7140023 HP3ICC Esteban +7140024 HP1PD Demetrio +7140025 HP1PD Demetrio +7140026 HP1LNK Javier +7140027 HP1GJT Gilberto +7140028 HP1RG RAFAEL +7140029 HP1FPA FELIPE +7140030 HP1TPS RAFAEL +7140031 HP3BLM Bochin +7140032 HP3BLM Bochin +7140033 HP2BTT RENATO +7140034 HP1APR Allan +7140035 HP1APR Allan +7140036 HP1CPE Gustavo +7140037 HP1ALP Agustin +7140038 HP1LDF Luis +7140039 HP1RCR Roxana +7140040 HP3BSM Bellomiro +7140041 HP1ASH Ana +7140042 HP2AP ALBERTO +7140043 HP1GCM Carlos +7140044 HP2AJP Johnnie +7140045 HP1CMA Cristobal +7140046 HP1JFG Joel +7140047 HP1FJW Federico +7140048 HP1JFC Julio +7140049 HP1SCF Sandra +7140050 HP1JCH Jean +7140051 HP1DJJ Teodoro +7140052 HP1AIC Ivan +7140053 HP1SEW Saul +7140054 HP1SEW Saul +7140055 HP1JDL Jahir +7140056 HP1DAL Gustavo +7140057 HP1GAV GUSTAVO +7140058 HP1CAB JAVIER +7140059 HP1SEB Terry +7140060 HP1DBK Edwin +7140061 HP1DBK Edwin +7140062 HP1AC Camilo +7140063 HP1RIS Ricardo +7140064 HP1JAO Anibal +7140065 HP1CBS Julio +7140066 HP1DWG Ferix +7140067 HP1NGD Norman +7140068 HP2IVA Ivan +7140069 HP1JAO Anibal +7140070 HP1SRI Ramses +7140071 HP5VDM Denis +7140072 HP1CGR Crispulo +7140073 HP1MMP Malvina +7140074 HP2PKV Pedro +7140075 HP1DHS Ronaldo +7140076 HP1RMR Rodolfo +7140077 HP1JJL Diogenes +7140078 HP2DX CDXG +7140079 HP3DCW Edgardo +7140080 HP1HGO Herminio +7140081 HP1CNI Silvano +7140082 HP1CXD Jorge +7140083 HP2JAE Rolando +7140084 HP2ROC Roger +7140085 HP2MAW Mauricio +7140086 HP2BOF Federico +7140087 HP1MTR Matilde +7140088 HP1BRK Rene +7140089 HP1CSL Cecilio +7140090 HP1BAS Javier +7140091 HP1BRK Rene +7140092 HP1ANC Ariel +7140093 HP4GAH Roney +7140094 HP1SEC Sergio +7140095 HP1THS Tobias +7140096 HP1AEP Andres +7140097 HP1THS Tobias +7140098 HP3QQ Erick +7140099 HP2LEE Ricardo 7141001 HP1CQ Manolis 7141002 HP2NG 7141003 HP2DB Dorian @@ -106651,7 +140708,7 @@ 7141006 HP2BWJ Jose 7141007 HP2LCT Lars 7141008 HP2BWJ Jose -7141009 HP2MAH +7141009 HP1MAH 7141010 HP2SAJ Sebastian 7141011 HP2SAJ Sebastian 7141012 HP1ABK Abel @@ -106712,6 +140769,23 @@ 7141072 HP1RAR Rolando 7141073 HP1FJR Francisco 7141074 HP1LEA Alfredo +7160001 OA4GL Gustavo +7160002 OA4O Radio +7160003 OA4YX David +7160004 OA4DPX Jose +7160005 OA4DSO Rocio +7160006 OA4CLM Giovanni +7160007 OA4DOH Augusto +7160008 OA4CC Cesar +7160009 OA4AHJ Felipe +7160010 OA4AHJ Felipe +7160011 OA4WM Walter +7160012 OA6DSG Jose +7160013 OA2DUP Eduardo +7160014 OA2DUN Jorge +7160015 OA2ACV Mario +7160016 OA2ABP Miguel +7160017 OA4DUZ Rafael 7161001 OA4AI Pablo 7161002 OA4AI Pablo 7161003 OA4CLU Cesar @@ -106732,7 +140806,7 @@ 7161018 OA4CKN Francisco 7161019 OA4DKN Diego 7161020 OA4DW Manuel -7161022 OA4DSH VCtor +7161022 OA4DSH ViCtor 7161023 OA4CKN Francisco 7161024 OA4DSQ Jackson 7161025 OA4CBC Luis @@ -106772,11 +140846,12 @@ 7220020 EA1GHW Edmundo 7220021 LU4ENP Marcelo 7220022 LU9DIL Mariano -7220023 LU5DTF Pablo +7220023 LU5DTF 7220024 LU4CN Carlos 7220025 LW4DBE Marcelo 7220026 LW6DSM Miguel -7220027 LU5DTF Pablo +7220027 LU5DTF +7220028 LU2ICA Marcelo 7220029 LU2EP Julio 7220030 LW7DQC Santiago 7220031 LW3DQE Facundo @@ -106787,6 +140862,7 @@ 7220036 LU6EED Manuel 7220037 LU6EED Manuel 7220038 LU8AQL Andres +7220039 LU2ICA Marcelo 7220040 LU5AGQ Gaston 7220041 LU3ELR Sergio 7220042 LU3DUF Ariel @@ -106836,8 +140912,11 @@ 7220086 LU3DCL Leonel 7220087 LU5DMP Luis 7220088 LW3DHN Nestor +7220089 LU1AH Jorge +7220090 LU1AH Jorge 7220091 LW9DJG Ariel 7220092 LW9DJG Ariel +7220093 LW9EDZ Roberto 7220094 LU8EAA Bernabe 7220095 LU8EQ Guido 7220096 LU1BGI Alejandro @@ -106899,6 +140978,7 @@ 7220152 LU3DW Chas 7220153 LW5DM Simon 7220154 LW5DHG Fabian +7220155 LW9EDZ Roberto 7220156 LU9CYN Matias 7220157 LW2EQS Sergio 7220158 LU8XAF Bernardo @@ -106909,6 +140989,7 @@ 7220163 LU7CRM Conrado 7220164 LU9DIC Cristian 7220165 LU5DMP Luis +7220166 LU9DPD Daniel 7220167 LU3DP Nestor 7220168 LU7DNA Nestor 7220169 LU9EMJ Maximiliano @@ -106919,9 +141000,10 @@ 7220174 LW4DAE Alejandro 7220175 LU3DJ Daniel 7220176 LU1EF Eduardo +7220177 LU2FGN Alberto 7220178 LU8DJP Juan 7220179 LU9DWU -7220180 LW9ENF Eduardo +7220180 LU5VQV Eduardo 7220181 LU2DG Jorge 7220182 LU4IAB Omar 7220183 LU7AUU Miguel @@ -106929,14 +141011,150 @@ 7220185 LU1AEX Adrian 7220186 LU6DFZ Guillermo 7220187 LU7DOT Guillermo +7220188 LU5DMT Marcelo +7220189 LU5DMT Marcelo +7220190 LU4FKB Jorge +7220191 LU9FVS Andres +7220192 LU5DUN Carlos +7220193 LU5DUN Carlos +7220194 LU1FKR Karlos +7220195 LU2CPJ Jose +7220196 LU6DTJ Tauliczek +7220197 LU6ADL Carlos +7220198 LW7DTM Juan +7220199 LU1DPZ Hernan +7220200 LW9EUC Adriel +7220201 LU5VQV Eduardo +7220202 LU9EES Santiago +7220203 LU4DRC Centro +7220204 LU1FDF eduardo +7220205 LU4FKB Jorge +7220206 LU2FM Fabian +7220207 LU2FTO Juan +7220208 LU7FDZ Osvaldo +7220209 LU7DQP Horacio +7220210 LU5ALS Miguel +7220211 LU1HGF Gerardo +7220212 LU4FBU Roberto +7220213 LU4FBU Roberto +7220214 LW1EOI Luis +7220215 LU2FGN Alberto +7220216 LU8APD ArgLink +7220217 LW5DRP Pablo +7220218 LU7EAT Fernando +7220219 LU6ARN Martin +7220220 LU3ADL Eduardo +7220221 LU6FGH Alejandro +7220222 LU4CDL Damian +7220223 LU4AUG walter +7220224 LU4CAC Jose +7220225 LW5EGA Gabriel +7220226 LU1AVU Alberto +7220227 LU2ESW +7220228 LU3FMA Marcelo +7220229 LU9FMO Marcelo +7220230 LW4DMS Marcelo +7220231 LU2EFI Fernando +7220232 LU9AED Daniel +7220233 LU4FGH Gustavo +7220234 LU4AAY Roberto +7220235 LU6FQM Raul +7220236 LU3FXX Julio +7220237 LU9DSA Sergio +7220238 LU6FFW Hugo +7220239 LU8ANB Claudio +7220240 LU4FM Lu4Fm +7220241 LW8DAS David +7220242 LU5CTW Diego +7220243 LU9ERV Ruben +7220244 LU3HBC Martin +7220245 LU9DER Fernando +7220246 LU3DX LUCIANO +7220247 LU4EME Jose +7220248 LU6EPY Oscar +7220249 LU9FMO Marcelo +7220250 LW2DDS Nestor +7220251 LU2FHS Miguel +7220252 LU1DLA Alejandro +7220253 LU2VFO Alberto +7220254 LU5YAC Gustavo +7220255 LU1EUK Luis +7220256 LW9DOU Fernando +7220257 LU2ESW +7220258 LU1DBQ Radio +7220259 LW9EVW Diego +7220260 LW9DCR Carlos +7220261 LW6ESN Omar +7220262 LU6EGP Guardia +7220263 LW1DOW Diego +7220264 LU3MHT Jorge +7220265 LU4AWQ Daniel +7220266 LW2EDM Juan +7220267 LW1EAM Jorge +7220268 LU1AXV Francisco +7220269 LU5BRS Mario +7220270 LU2ERK Raul +7220271 LW8EMS Jose +7220272 LW8EMS Jose +7220273 LU9DHJ Jose +7220274 LU1CBQ Luis +7220275 LU8FAU Juan +7220276 LU3IEA Hector +7220277 LU3IEA Hector +7220278 LU2ELO Claudio +7220279 LU7FDG David +7220280 LU7FDG David +7220281 LW2EJR Juan +7220282 LU1BMD Fabian +7220283 LU3DEG Daniel +7220284 LU1BMD Fabian +7220285 LU7EXX Alejandro +7220286 LU2BAM DANTE +7220287 LU7AOW Leonardo +7220288 LU3DYN Jose +7220289 LU7FMA Maximiliano +7220290 LU3DVN Raul +7220291 LU3DVN Raul +7220292 LU7DID Pedro +7220293 LU9FAR Daniel +7220294 LU9BLS Leopoldo +7220295 LU2FHX Daniel +7220296 LU2HGG Gianfranco +7220297 LU8AIE Ignacio +7220298 LU7FAM Alexis +7220299 LU2AFE Daniel +7220300 LU2AFE Daniel +7220301 LU2EHR Hernan +7220302 LU7FUF Leonardo +7220303 LU1KCQ Augusto +7220304 LU9DJB Joaquin +7220305 LU5BJM Jorge +7220306 LU6EGA Gabriel +7220307 LU6EGA Gabriel +7220308 LU5AM Enrique +7220309 LW2DGT Octavio +7220310 LU4EBG guillermo +7220311 LU5MDO Jorge +7220312 LU8DQ Carlos +7220313 LW9DVZ Victor +7220314 LU9BAU ALBERTO +7220315 LU8EMD Javier +7220316 LU8EAJ Alejandro +7220317 LU1MC Eduardo +7220318 LU7FUF Leonardo +7220319 LW1DPG Gerardo +7220320 LU9AJK Jose +7220321 LU1DFM Nahuel +7220322 LW1EMG Mauro +7220323 LU9EHV Humberto 7221001 LU5CLD Jorge 7221002 LU8CAT Tomas 7221003 LU3ARE Juan 7221004 LU3AGM Aldo 7221005 LU4AEY Claudio 7221006 LU2CHP Horacio -7221007 LU5AFE FabiN -7221008 LU5AFE FabiN +7221007 LU5AFE FabiaN +7221008 LU5AFE FabiaN 7221009 LU7DW Claudio 7221010 LU1ASP Marcelo 7221014 LU8ANS Antonio @@ -106979,7 +141197,7 @@ 7229016 LU2FM Fabian 7229017 LU9FZQ Norberto 7229018 LU4FDV Ricardo -7229019 LU1FD CortS +7229019 LU1FD CorteS 7229020 LU8FJH Juan 7229021 LU8FJH Juan 7229022 LU7FZW Alfredo @@ -107004,7 +141222,7 @@ 7240013 PU5BVM Vanderlei 7240014 PU6BVM Vanderlei 7240015 PY1JD Joaquim -7240016 PU2ENG Luiz +7240016 PU2XSK Francisco 7240017 PT2AST Marcos 7240018 PT2ER Ernani 7240019 PT2ARR Roosevelth @@ -107018,8 +141236,8 @@ 7240027 PU3RGM Geraldo 7240028 PU2YPP Cristiano 7240029 PY4AAZ Ricardo -7240030 PU2OKB Edson -7240031 PU1SSB Joao +7240030 PY2OKB Edson +7240031 PY1IP Joao 7240032 PY2MI AssRadiomadores 7240033 PY2FI Fabio 7240034 PU2TTB Tiago @@ -107048,10 +141266,13 @@ 7240057 PU8BDJ Delcimar 7240058 PU7FMO Flavio 7240059 PU2CRA Cleitom +7240060 PU5PAE Anderson 7240061 PU4NQZ Nilton 7240062 PY2AAB Reginaldo 7240063 PU7RAA Alberto -7240066 PU1SSB Joao +7240064 PU2PAM Maurico +7240065 PU2OMN Marcelo +7240066 PY1IP Joao 7240067 PU5ISL Aislan 7240068 PU5ISL Aislan 7240069 PU5SMS Sergio @@ -107066,11 +141287,924 @@ 7240078 PU4RON Ronualdo 7240079 PU1TAP Armenio 7240080 PU1TAP Armenio +7240081 PY2MPM marcio +7240082 PP5DZ Daniel 7240083 PY2KK Cesar -7240085 PU2UBF Jos -7240086 PY5BK Ricardo -7240087 PU2UAB Andre -7241001 PY1EGG +7240084 PY4TEL Venancio +7240085 PU2UBF Jose +7240086 PY5BK AURELIO +7240087 PU3TFO ALESSANDRO +7240088 PY2ARR Sebastiao +7240089 PY2AJB Amarildo +7240090 PY5GM Amarildo +7240091 PY5GM Amarildo +7240092 PY5NF Moises +7240093 PU2LXM Airton +7240094 PY3UK Cristiano +7240095 PU2OIP Paulo +7240096 PY1TC Teonas +7240097 PY1TC Teonas +7240098 PU4COS Camila +7240099 PU2OLK OSNI +7240100 PU2GSS Gilmar +7240101 PY2GIG Gigio +7240102 PY2GIG Gigio +7240103 PY3LK Jairo +7240104 PY3LK Jairo +7240105 PY3RG Rogerio +7240106 PY3RG Rogerio +7240107 PU2XID +7240108 PY4RVA +7240109 PY4CL Ilton +7240110 PY4CL Ilton +7240111 PU2SYJ Joao +7240112 PU2SYJ Joao +7240113 PU5FVT Sergio +7240114 PY6USA Diego +7240115 PU1NCI Christophe +7240116 PY2JR Raul +7240117 PU1PHS Paulo +7240118 PU1PHS Paulo +7240119 PU2MXD Marcio +7240120 PU1RFL Ricardo +7240121 PY3EA Eduardo +7240122 PY3EA Eduardo +7240123 PY2JR Raul +7240124 PY3FC Fabio +7240125 PY1FF Fabio +7240126 PY2BA Wilson +7240127 PU1RFL Ricardo +7240128 PY4AUN Delson +7240129 PY2MA Mauricio +7240130 PU3WSB Jorge +7240131 PU1XIF Lauro +7240132 PU5FJS Frank +7240133 PU3WSB Jorge +7240134 PU2LJY Luis +7240135 PU2LAY Lenandro +7240136 PY5BK AURELIO +7240137 PU2VAT Airton +7240138 PY4AUN Delson +7240139 PY2LH MAURILIO +7240140 PY1MI Francisco +7240141 PU2MVE Marcio +7240142 PY6RS Ricardo +7240143 PY2FAC Fabio +7240144 PU6JDB Marcus +7240145 PU2OZD Lilian +7240146 PU2AKA Armando +7240147 PU2LII Aparecido +7240148 PU1YHL Ricardo +7240149 PY1SAN Sandro +7240150 PY2PMI Carlos +7240151 PY5DV Eduardo +7240152 PU2MOM Mauricio +7240153 PU1CMA Cleber +7240154 PU2YJK Leonidas +7240155 PY2GTA Joao +7240156 PY1CG Carlos +7240157 PU2KBI francisco +7240158 PU2MYN Eduardo +7240159 PY5LZA Luiz +7240160 PY1GB Bruno +7240161 PY1GB Bruno +7240162 PY5PLL LUIZ +7240163 PY2VTC Rafael +7240164 PY5AJ Jose +7240165 PP5CFL Claudio +7240166 PY2LGR Laercio +7240167 PU2NZW claudinei +7240168 PY2YJV JERONIMO +7240169 PU4UGO Hugo +7240170 PU2PWS Angelo +7240171 PP6II Jose +7240172 PU2KGL Glauco +7240173 PY1EPC SERGIO +7240174 PU2YAJ Anderson +7240175 PU4RMN Ramon +7240176 PU4CEH Carlos +7240177 PU2NDI Jose +7240178 PU7PAR RICARDO +7240179 PU7PAR RICARDO +7240180 PU2SFY Jorge +7240181 PU4NQZ Nilton +7240182 PY2ABH Andre +7240183 PY2ABH Andre +7240184 PU2LGA Luis +7240185 PU2LGA Luis +7240186 PU7GEC giancarlo +7240187 PT2EBR Tiago +7240188 PU3LDS Luciano +7240189 PU2YGM Gustavo +7240190 PY3MU Rodrigo +7240191 PU5ELY fabio +7240192 PU2OZK Tito +7240193 PY2TED Tiago +7240194 PY3NE Nelson +7240195 PP5ACP Alexsander +7240196 PU3ELD Eduardo +7240197 PY2TI +7240198 PU2ROE Paulo +7240199 PU2YHU FABIO +7240200 PU2YHU FABIO +7240201 PU3GCM GABRIEL +7240202 PU3TOM Manoel +7240203 PU1KJA Francisco +7240204 PU3IKE Henrique +7240205 PU2IAT AMERICO +7240206 PU5YBB Antonio +7240207 PU1XIF Lauro +7240208 PY2IGO Jackson +7240209 PP6RF Ricardo +7240210 PY3KZ Jayme +7240211 PU2WXL Wagner +7240212 PU5MCM Miltom +7240213 PU2VYZ Claudemir +7240214 PU2SKN Norbertho +7240215 PP5MGT Marcelo +7240216 PY2RNK ROBSON +7240217 PU2YJL JULIANO +7240218 PU2YJL JULIANO +7240219 PY2FAU Fausto +7240220 PY2RNK ROBSON +7240221 PU3RTF Raul +7240222 PU1LDD Dilermando +7240223 PU5MLB MAURICIO +7240224 PU7VIP AGUINALDO +7240225 PU2LJX JOAO +7240226 PY2VGA Eduardo +7240227 PY4AFV Edvaldo +7240228 PU2KPJ Jair +7240229 PU2LRM Leandro +7240230 PP5MGT Marcelo +7240231 PP5FMM Mateus +7240232 PU2ONS Leandro +7240233 PU4PSD Paulo +7240234 PU2OCK Carlos +7240235 PY5MTA Rogerio +7240236 PU5YCB Cleiton +7240237 PU2LRL LUIZ +7240238 PU5RYC Ricardo +7240239 PU4DPG Davi +7240240 PY1PX Nelson +7240241 PY2UEP Demilson +7240242 PP6FB Fernando +7240243 PP6FB Fernando +7240244 PY2FAC Fabio +7240245 PY2PCZ paulo +7240246 PU5NPR Valdomiro +7240247 PY1IP Joao +7240248 PU2OZS SAMUEL +7240249 PU2ONE Lucas +7240250 PY5HI francisco +7240251 PY5BD WILSON +7240252 PU6LRM lucas +7240253 PU5NCL CELSO +7240254 PU1UDS Angelo +7240255 PU1USM VALDETE +7240256 PY6JM JEANETTE +7240257 PY2KD Luiz +7240258 PU2NTZ Nilson +7240259 PU1JLC JORGE +7240260 PU2RZM Celso +7240261 PU4MIT CARLOS +7240262 PU4MIT CARLOS +7240263 PY2MET Guilherme +7240264 PU2TDR Magno +7240265 PU1LWB Lisnik +7240266 PU1KCS marcelo +7240267 PU2YNS Luiz +7240268 PU2XCC Altair +7240269 PU2MIB Bruno +7240270 PY3GJ Luiz +7240271 PY2PX VALTER +7240272 PY3GJ Luiz +7240273 PY2SR Sandro +7240274 PY4QE Carlos +7240275 PY2OVH Alexandre +7240276 PY4QE Carlos +7240277 PY2UGO Hugo +7240278 PY2WCN Wellington +7240279 PU2KUF Rodrigo +7240280 PU2WMO Willian +7240281 PR8DX Reginaldo +7240282 PU5MLQ leandro +7240283 PU4ERF Edgard +7240284 PU8WES Edinei +7240285 PY5MM Mauricio +7240286 PU1RET PAULO +7240287 PU4WJR William +7240288 PU2MHG Mario +7240289 PU4WEB Eduardo +7240290 PU2VLR EMERSON +7240291 PU2SUA Sueli +7240292 PU2YZL Reginaldo +7240293 PU2TJG Elvio +7240294 PU2WER GEOVANE +7240295 PU4SAB Carlos +7240296 PU2KOA Marcos +7240297 PU5MZZ LUIS +7240298 PU1VJS Valduardo +7240299 PU2TMC Luiz +7240300 PY4QM TADEU +7240301 PU2MBR Ciro +7240302 PY2YUM Iuma +7240303 PP8FA Fabio +7240304 PU2WYN Antonio +7240305 PU1VJS Valduardo +7240306 PU1JDN Maicon +7240307 PU1JDN Maicon +7240308 PY6SB Ricardo +7240309 PU4BIO Fabiano +7240310 PY2LGF Luiz +7240311 PY4ATB Alberto +7240312 PU4HMP Henderson +7240313 PU6WIF Joao +7240314 PY6NFS NAYLSON +7240315 PU4TAC Targino +7240316 PU4TAC Targino +7240317 PU5TTJ Joelson +7240318 PY2CDR Vagner +7240319 PU2TNI Fabiano +7240320 PU4DBS Dislenio +7240321 PU7ERA Cesar +7240322 PU2HEN Henrique +7240323 PU1LCR Carlos +7240324 PU2SGN Manoel +7240325 PU1WMA Alessandro +7240326 PU5RAV Roderley +7240327 PU7TBL ALBERTO +7240328 PY7EV Edivaldo +7240329 PY2PDZ Sandro +7240330 PU5APL Leandro +7240331 PU3IAF Igor +7240332 PU9RTO Jeferson +7240333 PY2CVM Celso +7240334 PY3BOM Diogo +7240335 PY3CZ Carlos +7240336 PY2NL Fernando +7240337 PY2NL Fernando +7240338 PS7EK Erberson +7240339 PU2VLW Vinicius +7240340 PU2KUF Rodrigo +7240341 PU5SMM Sergio +7240342 PU2SAM SERGIO +7240343 PU4CRD Claudio +7240344 PY2CP ENRIQUE +7240345 PY3SA Cleito +7240346 PU4LED Alexsandro +7240347 PY4PI Ismael +7240348 PY2ATW Valter +7240349 PU7RLT LUCIA +7240350 PY4EDU Eduardo +7240351 PU2WZA Alexandre +7240352 PU2WZA Alexandre +7240353 PP6AAA LABRE-SE +7240354 PY4BT (Nem) +7240355 PU1MLK BRUNO +7240356 PY2NE JOSE +7240357 PU7SAL ANDERSON +7240358 PU7MJN Antonio +7240359 PU2NUR BERNARDO +7240360 PU2LZC jardel +7240361 PY3SA Cleito +7240362 PU2LAV Dimitri +7240363 PY2ATD Ari +7240364 PU4EVP Guilherme +7240365 PU3TFO ALESSANDRO +7240366 PU4WAD Waltair +7240367 PU4RFC Reynaldo +7240368 PU7TCA Paulo +7240369 PU2NJF Naor +7240370 PY2EO Eduardo +7240371 PY2EO Eduardo +7240372 PY3IZA Rinaldo +7240373 PU3IAF Igor +7240374 PU2TIY Fred +7240375 PU2RHX Roberto +7240376 PY6EAT ERNESTO +7240377 PR7DD DARLAN +7240378 PU2KRD EUCLIDES +7240379 PU2YWP Almir +7240380 PY5OV Adilson +7240381 PY1AJB Mario +7240382 PU2TRA Roberto +7240383 PY1JH Campos +7240384 PY6ZEV Eystein +7240385 PY1AYH Alcemar +7240386 PY7VBV VANILDO +7240387 PY1AJB Mario +7240388 PU3POD Paulo +7240389 PU5YBT Jose +7240390 PU4LCD LUCIANO +7240391 PU4LCD LUCIANO +7240392 PU4LMC Laudson +7240393 PU3MCM Mayque +7240394 PU8MGB Robervaldo +7240395 PY2NE JOSE +7240396 PU2KZE +7240397 PY5WAO Luis +7240398 PU1KJA Francisco +7240399 PY5VY VALMIR +7240400 PU5AAG Adriano +7240401 PU4WDG Waldeci +7240402 PU2KGA Ademar +7240403 PU5WMA Marcelo +7240404 PU5MFL anderson +7240405 PU4FLB Andre +7240406 PU4FLB Andre +7240407 PU2WXP Francisco +7240408 PU1WMD WILSON +7240409 PU5SGJ Jackson +7240410 PU5JJF JOANI +7240411 PU2PQP Marcelo +7240412 PU2THN Fabio +7240413 PU1PPA JORGE +7240414 PY1RCM Roberto +7240415 PY3ML Marcelo +7240416 PU1RBC Alcino +7240417 PP6PP Fernando +7240418 PY5IQ Henrique +7240419 PY5FOC Fabio +7240420 PU5SZN Aurelio +7240421 PU2XRZ EDUARDO +7240422 PU2LHJ Joao +7240423 PU3SVP Flavio +7240424 PU5WPW FELIPE +7240425 PU5MUD Eder +7240426 PU5MUD Eder +7240427 PU4DSF Darcilei +7240428 PY2KJ Artur +7240429 PU4YEN David +7240430 PU4YEN David +7240431 PY5QW Vigand +7240432 PY3SOL Marlon +7240433 PU5YST MATEUS +7240434 PU4JMV Jose +7240435 PU4DSF Darcilei +7240436 PU7RII Girles +7240437 PY5LE Coco +7240438 PY5LE Coco +7240439 PY7TS Nelson +7240440 PU7RMD CARLOS +7240441 PU7MDN David +7240442 PP6GM Rezende +7240443 PY2KRK Jose +7240444 PU7MDN David +7240445 PU2MNF miguel +7240446 PU2LXY Leandro +7240447 PU4SAX Sergio +7240448 PU1JAM ANTONIO +7240449 PU2MNF miguel +7240450 PS7JAP JOSE +7240451 PY5CNM Ciro +7240452 PU2XMZ Marco +7240453 PU2XMZ Marco +7240454 PY7BF Joao +7240455 PY1CDR Valdair +7240456 PU1JHG Alexandre +7240457 PR7JD Doja +7240458 PU2YYA Jose +7240459 PY4WEG Walter +7240460 PU9HMT Halonso +7240461 PY2DR Ronaldo +7240462 PU2KKR EDWALDO +7240463 PY6NSS NELSON +7240464 PU5DEC Mario +7240465 PY3PY Velcis +7240466 PU2SNT ALEXANDRE +7240467 PU2WRV Milton +7240468 PY2TT Igor +7240469 PY2NN RAIA +7240470 PY2APW Wilson +7240471 PY6MC Manoelito +7240472 PY2MZR Marcio +7240473 PU4NPR NELSON +7240474 PY2PAG PAULO +7240475 PU1SLG JOAO +7240476 PU2KUV Luis +7240477 PU1MGK Allan +7240478 PY1LX Luiz +7240479 PU2KKR EDWALDO +7240480 PU2SHM Samuel +7240481 PY2RAR Ronan +7240482 PY1AZ Carlos +7240483 PU2XTP Marcelo +7240484 PY2TIL CELSO +7240485 PU2PKZ DIMAS +7240486 PU3KPR Pedro +7240487 PY9VRS MAZIM +7240488 PT7VF Francisco +7240489 PY2KDU Kadu +7240490 PU2WAP David +7240491 PU2PGO SERGIO +7240492 PU1NCO Nilson +7240493 PU5MGC Celso +7240494 PY4PS Claudio +7240495 PQ2RBD Antonio +7240496 PU2NDG ALESSANDRO +7240497 PU2SJH Sandro +7240498 PU3FFT Fernando +7240499 PU1NJS Joel +7240500 PY1HZ Vladimir +7240501 PU5THI Thiago +7240502 PU5ALK Anderson +7240503 PY2FIT Fernando +7240504 PU4BRG Bruno +7240505 PY1MBP Erico +7240506 PY1MBP Erico +7240507 PY1LZ Luiz +7240508 PY9VRS MAZIM +7240509 PU4SGJ Simei +7240510 PU4MNK Max +7240511 PU2YPA ANDRE +7240512 PU5CAP NILSOMAR +7240513 PP5LDO Lourival +7240514 PP5LDO Lourival +7240515 PU2KZJ MANUEL +7240516 PU3CEJ Gilmar +7240517 PU1JPK Felipe +7240518 PU2MIN Fabio +7240519 PU2WOL Luciano +7240520 PU2TKX Gerson +7240521 PU2RQO Renato +7240522 PU2SJH Sandro +7240523 PU2VVG V +7240524 PY5MP Paulo +7240525 PU2PYH Hamilton +7240526 PU9OZE Jose +7240527 PU2PHM PAULO +7240528 PY4DH Luiz +7240529 PU7KRL Rodrigo +7240530 PU1VFO Celso +7240531 PU7ULJ LUCIO +7240532 PU7TLP JOSE +7240533 PU4ELC EDUARDO +7240534 PT9JC JOSE +7240535 PU2YJQ Joaquim +7240536 PY2CEM Carlos +7240537 PY5TSP AILTON +7240538 PU2LMW MARCELO +7240539 PU7OHS Marco +7240540 PU3BOE Carlos +7240541 PU7OHS Marco +7240542 PY2MSR Gustavo +7240543 PP7GP Gilvan +7240544 PU3RDG Rogerio +7240545 PU5TUV Emerson +7240546 PU4NEU Neuzivan +7240547 PU5SEC ELTON +7240548 PY5KAL Jose +7240549 PY5OZ Andre +7240550 PU1JGA Alexandre +7240551 PY5OZ Andre +7240552 PP1BT Benedicto +7240553 PY1ED Eduardo +7240555 PU4JCE Julio +7240556 PU2YFN FLAVIO +7240557 PY5RTC RICARDO +7240558 PU5RTM Jose +7240559 PT2ANG Angelo +7240560 PT2ANG Angelo +7240561 PY2YDV David +7240562 PY2CGE Casa +7240563 PY7RD RINALDO +7240564 PU7SSN Sylvio +7240565 PU3PNC pedro +7240566 PU1JKI Paulo +7240567 PU2KZJ MANUEL +7240568 PU2RVS Roberto +7240569 PY2LYB Perez +7240570 PY2RTB Rodrigo +7240571 PU3EAM Anderson +7240572 PY2DCE David +7240573 PY2WZR PAULO +7240574 PY2LM Luiz +7240575 PY4XB CLAUDIO +7240576 PY5CT Peter +7240577 PU1JPX Paulo +7240578 PY2WD Alessandro +7240579 PU3JGS Jorge +7240580 PT7MGS Marcondes +7240581 PY7JM Jose +7240582 PU2WRS Silvio +7240583 PY6ZL Zelito +7240584 PU8RGM Wilian +7240585 PU2OFL Fabio +7240586 PU4TEM Leandro +7240587 PY2FUI Waltamir +7240588 PY5RM Marcelo +7240589 PY2JB Edilson +7240590 PP2UBJ UBIRATAN +7240591 PU2LYZ Sebastiao +7240592 PY6ZF Zenobio +7240593 PU1JPY Glauco +7240594 PU2TOX LEANDRO +7240595 PY5SG Luiz +7240596 PY6CLQ Roquinaldo +7240597 PU7RIL Jadiel +7240598 PS8PL Fernando +7240599 PU2TTE Fernando +7240600 PU2PUY CARLOS +7240601 PU2OMN Marcelo +7240602 PU2RYM Ricardo +7240603 PU2OYA Jane +7240604 PP1GL Gilson +7240605 PU2YTA Carlos +7240606 PT2ASR Vamberto +7240607 PU2OMD Orlando +7240608 PU4NRA Robinson +7240609 PY5IF Inacio +7240610 PU2SBE BENEDETI +7240611 PU8WVL Valdir +7240612 PY2AAL Luiz +7240613 PU1MAV Morais +7240614 PU5TJA Luciano +7240615 PU2XWS Marcel +7240616 PY5MRF Marcos +7240617 PU7RFD MARCOS +7240618 PY4CAB Carlos +7240619 PU2SOE JOAO +7240620 PY2MJP Marcio +7240621 PU1WLW Wiliam +7240622 PU2NSB Nelson +7240623 PU7ORN Nonato +7240624 PU5SBJ Salazar +7240625 PU2RAH Rubens +7240626 PP6MS Marcio +7240627 PU6RSS Raimundo +7240628 PU2SCC Santos +7240629 PU2XGG Guilherme +7240630 PU7MDH +7240631 PU2NHT Fernanda +7240632 PU7KRL Rodrigo +7240633 PU2RPM Ricardo +7240634 PY5JRM Joao +7240635 PY2FSR Rafael +7240636 PP6DA Braz +7240637 PY4RCE Rogerio +7240638 PU2SBE BENEDETI +7240639 PU7MCG Francisco +7240640 PU5CWB Alexandre +7240641 PP5SE Edson +7240642 PU2UDC +7240643 PY4RAU PALINHA +7240644 PY4RAU PALINHA +7240645 PU2MQN Sonia +7240646 PU2MQN Sonia +7240647 PU7NFH Helsing +7240648 PU7NFH Helsing +7240649 PU7RCF Carlos +7240650 PP6PM ANDERSON +7240651 PY2WAL Walter +7240652 PU4HCV Heron +7240653 PY2OC Luiz +7240654 PU8WAF ALTENES +7240655 PU5TCM adriano +7240656 PY5AX Angelino +7240657 PU3FSN FERNANDO +7240658 PU2XTR carlos +7240659 PU2SBY Luiz +7240660 PU2RGD Ricardo +7240661 PU2LQF Afonso +7240662 PU7SGJ Jose +7240663 PU7LCS Maria +7240664 PU2TCQ Marcos +7240665 PU7VEG Edimar +7240666 PU7WJI Aragao +7240667 PU7WJI Aragao +7240668 PU7SGJ Jose +7240669 PU2PEK Francisco +7240670 PU2PYB Decio +7240671 PU8NOW Jarbas +7240672 PU2TNC Sergio +7240673 PU2PFH Jose +7240674 PU5WIF Marcos +7240675 PU2KCA CARLOS +7240676 PY8GAS JOSE +7240677 PY5KJ Marco +7240678 PY5FOC Fabio +7240679 PU2LYJ Valdomiro +7240680 PP6EDS Soares +7240681 PU1NCO Nilson +7240682 PU4BYZ Brendel +7240683 PU4BYZ Brendel +7240684 PP6EDS Soares +7240685 PP6DA Braz +7240686 PU3SWR RONALDO +7240687 PY2FIT Fernando +7240688 PY2YV Fabiano +7240689 PU2BJJ Joao +7240690 PY2ABW Rafael +7240691 PP5TPC Jorge +7240692 PU5CZR Everton +7240693 PU5ATS Ricardo +7240694 PU5ATS Ricardo +7240695 PU2VIN Fabio +7240696 PU2VIN Fabio +7240697 PY2OK Marcio +7240698 PY5EZ Esequiel +7240699 PU4WMG PAULO +7240700 PY5SX Usiel +7240701 PU3SDF Franco +7240703 PU4AFV Adenilson +7240704 PU4AFV Adenilson +7240705 PU2SNR Reinaldo +7240706 PU2XCM Alexander +7240707 PU7TAN Eraldo +7240708 PU4BRU Bruno +7240709 PY7JY Joao +7240710 PU4BRU Bruno +7240711 PU2XPM Marcelo +7240712 PU2OXW Adriano +7240713 PU2NUE Emilio +7240714 PU4JKM Jean +7240715 PU4ATB Elizeu +7240716 PU4ATB Elizeu +7240717 PU4EHB Euller +7240718 PU2LJD JOSE +7240719 PY3MO Marcelo +7240720 PU2PAB Paulo +7240721 PU7JKC Joelson +7240722 PU4VHG Victor +7240723 PU7VLL Leonardo +7240724 PU2KOM Marco +7240725 PU3LRP Lucio +7240726 PU1UNO Marcos +7240727 PU1JUL Julio +7240728 PU1UNO Marcos +7240729 PU2KEY Roberto +7240730 PU2RRW Rui +7240731 PP8CP Cromwell +7240732 PU2RZR Rodrigo +7240733 PY7DM Jose +7240734 PU2YJK Leonidas +7240735 PU4EHB Euller +7240736 PU4MSC Moises +7240737 PU4MSC Moises +7240738 PU4GAM Geraldo +7240739 PU2OVX JOSE +7240740 PU5NVT Julio +7240741 PU5NVT Julio +7240742 PU2TFP Tadeu +7240743 PY7RRB Jose +7240744 PY2CLI Cristiano +7240745 PU3GYE Evandro +7240746 PY2CLI Cristiano +7240747 PU5NFM Nelson +7240748 PU5NFM Nelson +7240749 PU5CWC CARDOSO +7240750 PU5DOR ROBERTO +7240751 PU4SBP Carlos +7240752 PU1RUD Rudival +7240753 PU2WLX Leandro +7240754 PR7WC Fernando +7240755 PY5SJO Joaquim +7240756 PU2WAP David +7240757 PY3ZVN Vladimir +7240758 PY3RK Luis +7240759 PU1KMO Alan +7240760 PU3SDL Leandro +7240761 PU3SDL Leandro +7240762 PU4RFC Reynaldo +7240763 PY2SR Sandro +7240765 PP5DR Cesar +7240766 PY6AAJ Alberto +7240767 PU2YGG Guillermo +7240768 PP5HI VALDIR +7240769 PU5JRR jose +7240770 PU5JOI ROBERTO +7240771 PU7KMO KERGINALDO +7240772 PU5JRR jose +7240773 PU1JRP cid +7240774 PU4JRF JONES +7240775 PY5TSP AILTON +7240776 PP5DR Cesar +7240777 PU4MLS Marcio +7240778 PU1WHM Pedro +7240779 PU5ADC Alexandre +7240780 PY7WM Pedro +7240781 PU7FCZ CARLOS +7240782 PU2SJR JUNIOR +7240783 PU4XVB Ivo +7240784 PU1YHL Ricardo +7240785 PU4SIM Luiz +7240786 PU2SWB Sidney +7240787 PU3CUB Luciano +7240788 PY1LIF Angelo +7240789 PU2UDK DANIEL +7240790 PU5YGK Gustavo +7240791 PP6CI ELMO +7240792 PP6JPJ Jose +7240793 PY2TB Lucas +7240794 PY7AN Lucas +7240795 PU2SIG Antonio +7240796 PU3LBC Leandro +7240797 PU5PAD DANIEL +7240798 PU2WHC Wagner +7240799 PU2KMV Marcio +7240800 PU2KMV Marcio +7240801 PY1YK Luiz +7240802 PY2PWR Tadeu +7240803 PR8SLZ Jose +7240804 PY3TX Cleber +7240805 PU4JEC Jorge +7240806 PY2PWR Tadeu +7240807 PU1NGE ANGELO +7240808 PU4WJB WILLIAM +7240809 PU4WJB WILLIAM +7240810 PU7RMO SAULUS +7240811 PU2NVT Aristofanes +7240812 PU4VIZ VIRGILIO +7240813 PY2YJV JERONIMO +7240814 PU4VIZ VIRGILIO +7240815 PY5YIN Joao +7240816 PU5LHK Luiz +7240817 PU5KFR Anderson +7240818 PU1RVG Ricardo +7240819 PU1RVG Ricardo +7240820 PY5ZA Verglio +7240821 PU4MGT Luis +7240822 PU4PHJ Pedro +7240823 PU4PHJ Pedro +7240824 PU2MEJ Marco +7240825 PU4YZQ Luiz +7240826 PU05OPS +7240827 PY2GOE Cabral +7240828 PU4LGW Leandro +7240829 PU2TQD Jose +7240830 PU1SMJ Marcos +7240831 PY5NCD Nilson +7240832 PU2VLZ Benedito +7240833 PU1MYM Samuel +7240834 PY2BB Pepe +7240835 PU5DSB Davi +7240836 PU5DSB Davi +7240837 PU2NIW Leonardo +7240838 PU2PXW Paulo +7240839 PU7TMA MOABE +7240840 PY2LV Fernando +7240841 PY3JLS Joao +7240842 PU5JSR Stefan +7240843 PU4WQI Fabricio +7240844 PU2YRK Elias +7240845 PU2YRK Elias +7240846 PY4FP Siegfried +7240847 PY3JLS Joao +7240848 PU8YEE Elliank +7240849 PU4SDR Rafael +7240850 PU1WES Wesley +7240851 PW8PM Paraiba-ARSATC +7240852 PW8PM Paraiba-ARSATC +7240853 PY7ZB Rodrigo +7240854 PU2TKM Fabio +7240855 PY2HRM Masahiro +7240856 PY7SLB Marcos +7240857 PU2TCD Thiago +7240858 PU4JSC CUSTODIO +7240859 PU2NUU Christiano +7240860 PU2NUU Christiano +7240861 PU4NEU Neuzivan +7240862 PU4ARB JOSE +7240863 PU4BRA Wolney +7240864 PU4ARB JOSE +7240865 PU2LWQ FABIO +7240866 PY3CAD Cesar +7240867 PP5NM Leandro +7240868 PP5NM Leandro +7240869 PU1XJN Jose +7240870 PU1XJN Jose +7240871 PU5MFM Joao +7240872 PU2MNQ Miguel +7240873 PU2MNQ Miguel +7240874 PU5JPU Jaison +7240875 PU5JMF Mauricio +7240876 PU4TNT ROBSON +7240877 PU2YIR James +7240878 PU8OCW FABIANO +7240879 PY5GN PAIVA +7240880 PY5BC Edison +7240881 PY5VBP Fabricio +7240882 PU2SCB Edison +7240883 PU5OPS ARILDO +7240884 PU4DSB Deivisson +7240885 PT2AW Paulo +7240886 PU4DSB Deivisson +7240887 PY5MDI Marcos +7240888 PU2YEI Paulo +7240889 PY1LOF Virgilio +7240890 PR8SCG Saint +7240891 PY4XX Carlos +7240892 PP5LD Aldo +7240893 PY2UEB Uniao +7240894 PY7LZ Luiz +7240895 PP5LD Aldo +7240896 PU2LYR ANTONIO +7240897 PY2HN Martins +7240898 PU4WSR Wemerson +7240899 PU2LMP William +7240900 PY2ABA Willian +7240901 PU1MNO Carlos +7240902 PY6JSR JEOVA +7240903 PY3TTL Jeferson +7240904 PU2MES Alessandro +7240905 PY2ABA Willian +7240906 PU2TED Djalma +7240907 PU2SDM Fernando +7240908 PU2MOK Wevithon +7240909 PU5VMA Emerson +7240910 PU2WRV Milton +7240911 PU7TMR ALMIR +7240912 PU5XFB Fernando +7240913 PY2DHL Paulo +7240914 PU2YXB Marcio +7240915 PU5GTO Gustavo +7240916 PU5GTO Gustavo +7240917 PY5FA Eduardo +7240918 PY2SI Eduardo +7240919 PU2MUS Marco +7240920 PP5ANO Jeferson +7240921 PP5BV Charles +7240922 PU2NDU Douglas +7240923 PU2SEG Carlos +7240924 PU2AAQ Derival +7240925 PY2AQN ANDRE +7240926 PY2CEG Edvan +7240927 PU1LSS Luiz +7240928 PY2NAM Nelson +7240929 PU2NME Eder +7240930 PU2VHC HALLAN +7240931 PY1EV Eduardo +7240932 PU2ODD DJAIR +7240933 PU5JPG Sadi +7240934 PU7RGH Gustavo +7240935 PU7RGH Gustavo +7240936 PY2NAM Nelson +7240937 PU2SKG Jnior +7240938 PU4FMS Felipe +7240939 PP5ZBJ Norman +7240940 PY2WAO WASHINGTON +7240941 PU4FMS Felipe +7240942 PU2STR Silvio +7240943 PY2TG Carlos +7240944 PU8MCA Carlos +7240945 PY3LR Luiz +7240946 PY2MRY MERCIANO +7240947 PU7MGO JOAO +7240948 PY2SPW Fabio +7240949 PU2RNC Renato +7240950 PU3LOB Gerson +7240951 PU5AHV NoneHAMILTON +7240952 PU4OAB Cristiano +7240953 PU5CNK +7240954 PU5AMK +7240955 PP5FE Glenn +7240956 PU2KCO Valentim +7240957 PU5ASH AFONSO +7240958 PP5VWV Aguinaldo +7240959 PY6KAT Carlos +7240960 PU2AKA Armando +7240961 PU2TRO Carlos +7240962 PU2MDD Edgard +7240963 PU1KEY mauro +7240964 PU5TJV Jane +7240965 PU2VFP Jefferson +7240966 PU2VFP Jefferson +7240967 PU1WKC William +7240968 PU8MNM Marcelo +7240969 PU5AZA Carlos +7240970 PY5JRM Joao +7240971 PU7RDY CESAR +7240972 PY2FDC Fernando +7240973 PY2CRA Craja +7240974 PU5WSS Wellington +7240975 PU5APL Leandro +7240976 PY2IZ Andre +7240977 PU5WSS Wellington +7240978 PU5WWS Flavio +7240979 PY5ZOZ Adir +7240980 PY2GBS Gentil +7240981 PS8AFR Jose +7240982 PU2WFF Sylvio +7240983 PR8NC Nagib +7240984 PY2PRC Carlos +7240985 PS8AFR Jose +7240986 PU5PEO Eduardo +7240987 PU5PEO Eduardo +7240988 PU7MKQ Pedro +7240989 PU7MKQ Pedro +7240990 PU2REI Ivan +7240991 PY2ANL Alexandre +7240992 PY5KO Ivoney +7240993 PU2OEM Erik +7240994 PU2OEM Erik +7240995 PY2XO Helton +7240996 PY2XO Helton +7240997 PT7MIR Ailton +7240998 PU4MDO Marcio +7240999 PY1WE Marcos +7241000 PU2VDG Vito +7241001 PY1EGG Carlos 7241002 PU1LOY Luiz 7241003 PY1EU Eudoxio 7241004 PU1OEB Eric @@ -107094,7 +142228,7 @@ 7241022 PY2HO Nelson 7241023 PY2TK Max 7241024 PY2TK Max -7241025 PU1CMA Cleber +7241025 PY2PWL Rafael 7241026 PY2ZFY Fritz 7241027 PY2HO Nelson 7241028 PY4ED Emmanuel @@ -107115,23 +142249,26 @@ 7241043 PU1LOY Luiz 7241044 PY1FR Fernando 7241045 PY1FR Fernando +7241046 PY2PWL Rafael 7241047 PY1USK Fernando 7241048 PY1LUA Jasiel 7241049 PU1YCP Marcio 7241050 PY1VHF Anderson -7241051 PY1EGG +7241051 PY1EGG Carlos 7241052 PY1AHD Alexandre 7241053 PY1USK Fernando 7241054 PY1FT Florisval 7241055 PU1MAF Alexandre 7241056 PU1TRD Marcio 7241057 PY1UAP Ubiracy -7241058 PU1SGF GonAlo +7241058 PU1SGF GoncAlo 7241059 PU1COR Gilmar 7241060 PY1KG Vitor +7241061 PY3GWN Newton +7241062 PY4WW Edio 7241063 PY1JU Jose 7241064 PY1MRH Luiz -7241065 PU1KSU FBio +7241065 PU1KSU FaBio 7241066 PY1UC Ulisses 7241067 PU1URL Renato 7241068 PU1PZZ Paulo @@ -107140,33 +142277,55 @@ 7241071 PY1DJ Aldo 7241072 PY1IOL Irineu 7241073 PU1MEK Rogerio +7241074 PU2TKF Anderson +7241075 PY2SWL Levi +7241076 PY2BBQ Hilton +7241077 PU2TKF Anderson +7241078 PU5XNL Flavio 7241079 PU1LMX Jos 7241080 PU1LMX Jos 7241081 PU1PRK Jg +7241082 PP2REI Reinaldo 7241083 PU2PKA Leandro 7241084 PY2VG Ariovaldo 7241085 PU2VLO Luiz +7241086 PU2WJB franciso 7241087 PY2VLA Adalberto 7241088 PY2VK Antonio 7241089 PU2VWR Rodrigo +7241090 PU2YSJ Sandro 7241091 PU2PWR Marcelo 7241092 PY2OQ Cristiano +7241093 PU2NPX Carlos +7241094 PY5PC Luiz +7241095 PU2VBI VANDERLEI 7241096 PU2OJF Jose +7241097 PU7JSH Antonio 7241098 PU1DES Daniel 7241099 PU2VDL Vitor 7241100 PU2VLU Luiz +7241101 PU4AML Alexandre 7241102 PY2LSD Jose 7241103 PU2PYF Nilson 7241104 PU2WIM Israel +7241105 PY2LD FABIO 7241106 PU2PYF Nilson -7241107 PY2GPS Rafael +7241107 PU2RLS ROGERIO 7241108 PY2PER Gerson 7241109 PU2LRK Rodrigo +7241110 PU1PFC Francisco +7241111 PY9BKW Euclydes +7241112 PU5PYR Rodrigo +7241113 PU5WBA Wilson 7241114 PU2LJH Fabiano 7241115 PU2TIR Enildo +7241116 PU1LIG Gil +7241117 PP5CG Luiz +7241118 PU1LIG Gil 7241119 PY2BIL Guillermo 7241120 PY2LY Fabio 7241121 PY2LY Fabio +7241122 PY1TP Julio 7241123 PU2SZC Erlon 7241124 PU2TMW Mateus 7241125 PY2BIL Guillermo @@ -107177,8 +142336,10 @@ 7241130 PU2TFG Ricardo 7241131 PU2TFG Ricardo 7241132 PU2RUD Marcos +7241133 PY1TP Julio 7241134 PP1GRI 7241135 PU2RUD Marcos +7241136 PU2RTC Joao 7241137 PU2YKJ Paulo 7241138 PU2NMA Gerson 7241139 PU2VYD Gerson @@ -107192,51 +142353,70 @@ 7241147 PU2RZP Rafael 7241148 PU2TYA Edgar 7241149 PU2RTO Roberto +7241150 PU1OBM HILTON +7241151 PU1OBM HILTON 7241152 PY2CAT Antonio 7241153 PU2KUU Kurt 7241154 PU2NJO Julio +7241155 PU1HLB Henrique 7241156 PU2NJO Julio +7241157 PY4CIS Luiz 7241158 PU2KUU Kurt 7241159 PY2SNR Jose 7241160 PU2SHF Henrique 7241161 PU2KHZ A 7241162 PY2GPS Rafael -7241163 PY2BB Jose +7241163 PY2BB Pepe 7241164 PU2TWS Cid 7241165 PU2KON Emerson 7241166 PU2WDA Danilo 7241167 PY2PTV Eduardo 7241168 PY2AB Mauricio -7241169 PU2YPS Bruno +7241169 PY2BPS Bruno 7241170 PY2DPM David -7241171 PU2NHF FBio +7241171 PU2NHF FaBio 7241172 PU2OOI Marcelo 7241173 PU2LRO Luiz +7241174 PU3CSL Altamiro +7241175 PU5VOI Angelo +7241176 PU2TYA Edgar +7241177 PU5TBD ANDREI +7241178 PU2MUS Marco +7241179 PU2YVX RICARDO +7241180 PU2KLS Evandro +7241181 PU2KLS Evandro 7241182 PU2MLW Ariovaldo -7241183 PY2URP Uniao +7241183 PY1PFL Paulo +7241184 PU2WRH Adriano +7241185 PU2YVX RICARDO 7241186 PY2VPC Caca 7241187 PY2FO Aurelio -7241188 PU2RRK Renato +7241188 PY2REC Renato 7241189 PU2WLO Welber 7241190 PY2TWI Rogerio 7241191 PY2TWI Rogerio -7241192 PU2RRK Renato -7241194 PU2MUW Marcio +7241192 PY2REC Renato +7241193 PU1KTC Edson +7241194 PU2NLX JACIR 7241195 PU2MUW Marcio 7241196 PU2MUW Marcio 7241197 PU2PEG Gabriel -7241198 PU2MMD Gallao +7241198 PY2UG Gallao +7241199 PU2PID Adriano 7241200 PY2KEP Gerson 7241201 PY2KEP Gerson 7241202 PY2RPP Rene 7241203 PY2RPP Rene 7241204 PU2LYJ Valdomiro 7241205 PU2OFA Fernando +7241206 PU2PID Adriano 7241207 PU2UGO Hugo 7241208 PY2OFJ Osvaldo -7241210 PY2VR Eduardo +7241209 PU7VAR Leonardo +7241210 PY2VR Ed 7241211 PU2RPB Ricardo 7241212 PU2PKA Leandro +7241213 PU5RMM Rovelton 7241214 PU2VLO Luiz 7241215 PU2LAQ Luiz 7241216 PU2UGO Hugo @@ -107244,18 +142424,24 @@ 7241218 PY2XAT Eder 7241219 PU2RLG 7241220 PY2DEL Pedro -7241221 PU2UAB Andre -7241222 PU2TIY Frederico -7241223 PU2MMD Gallao +7241221 PY2UAB Andre +7241222 PU2TIY Fred +7241223 PY2UG Gallao 7241224 PU2RAW Bruno 7241225 PU2KLD Luiz 7241226 PU2RAW Bruno 7241227 PU2KLD Luiz +7241228 PY2WPF Waldemar 7241229 PU2TWI Claudia -7241231 PU2OIP Pedro +7241230 PY2PAC Pedro +7241231 PU2OIP Paulo +7241232 PS8DMS Luiz +7241233 PS8DMS Luiz 7241234 PU2SDO Edmundo 7241235 PY2DSA Daniel 7241236 PY2DSA Daniel +7241237 PU2YYJ josue +7241238 PP5GN Antonio 7241239 PU2UAF Chico 7241240 PY2AJ Paulo 7241241 PU2TWD Fernando @@ -107267,13 +142453,18 @@ 7241247 PU2WTY Sandra 7241248 PU1APR Reginaldo 7241249 PY2MTI Fernando -7241250 PY2RJ +7241250 PY2RJ Roberto 7241251 PU2UQS Elio -7241253 PY2RJ +7241252 PP5GN Antonio +7241253 PY2RJ Roberto +7241254 PU5WHB Henrique +7241255 PU2LPI Francisco 7241256 PY2KR Jose 7241257 PY2UJB Luiz 7241258 PY2KR Jose -7241260 PU2YPS Bruno +7241259 PU5NFH FLAVIO +7241260 PY2BPS Bruno +7241261 PY2IML Julio 7241262 PU2WSQ Fabricio 7241263 PY2PVT Jorge 7241264 PY2FPL Filipe @@ -107302,6 +142493,7 @@ 7241287 PU2NSC Diego 7241288 PY2GN William 7241289 PU2SNE Rodrigo +7241290 PU4ARR Amancio 7241291 PU2NSC Diego 7241292 ZZ2PVI Andre 7241293 PY2LK Antonio @@ -107310,19 +142502,28 @@ 7241296 PU2KSN (Ale) 7241297 PY2NX Adilson 7241298 PU2KNK Fabiano +7241299 PU5KOD Daniel +7241300 PU5KOD Daniel +7241301 PY5JR Mario +7241302 PU4FAC Fabricio +7241303 PU5RGM Robson +7241304 PU5ASH AFONSO 7241305 PU2WTT Delcio 7241306 PU2YOX Daniel 7241307 PU2YEN Roberto 7241308 PW2J 7241309 PU1JRE Jorge 7241310 PU2SAK Marco +7241311 PU9BPC JOSE 7241312 PU2PKU Claudio 7241313 PY2KGK Elge +7241314 PU9BPC JOSE 7241315 PU2OZC Fernando 7241316 PU2KGC Gilsom 7241317 PU2WCX Marcos 7241318 PU2KGC Gilsom 7241319 PU2OZC Fernando +7241320 PU8WZT Fernando 7241321 PY2YES Benedito 7241322 PY2EAW Evandro 7241323 PU2PGJ Paulo @@ -107331,15 +142532,16 @@ 7241326 PY2IQ Fabiano 7241327 PU2PTS Andrey 7241328 PY2MAM Marcos -7241329 PU2XAH Jose +7241329 PU2XAH Ribeiro 7241330 PY2QE Sergio 7241331 PU2KFL Flavio 7241332 PU2WCX Marcos 7241333 PU2KQG Diego -7241334 PY2OK Marcio +7241334 PY1ZK Antonio 7241335 PU2SFM Geraldo 7241336 PY2MRM Maxwell 7241337 PY2ATH Aymore +7241338 PU3HMB HELENO 7241339 PU2KWX Carlos 7241340 PY2EIO Manoel 7241341 PY2ISS Diderot @@ -107351,15 +142553,19 @@ 7241347 PU2WDF Ferreira 7241348 PU2PGK Hozano 7241349 PU2PGJ Paulo +7241350 PU9OJZ Jose 7241351 PU2LRT Leandro 7241352 PU2RKW Rickard 7241353 PU2SLO Samuel 7241354 PU2RKW Rickard 7241355 PU2NEM Amarildo 7241356 PU2NEM Amarildo +7241357 PU9YLL Kelly 7241358 PU2LEB Muller 7241359 PU2YRG Lucas -7241360 PU2KLZ JoO +7241360 PU2KLZ JoaO +7241361 PU2MLE Neto +7241362 PU2TBB Claudney 7241363 PU2YYD Wagner 7241364 PY2FEB Fabio 7241365 PU2TMT Carlos @@ -107379,6 +142585,7 @@ 7241379 PY2RN Edu 7241380 PU2VAF Joao 7241381 PY2WDX Wilians +7241382 PU9DIA Douglas 7241383 PU2KAV Marcelo 7241384 PU2XIH Alberto 7241385 PY2DY Tony @@ -107397,9 +142604,11 @@ 7241398 PY2ZN Marcos 7241399 PY2GV Denizar 7241400 PY2RT Cabral +7241401 PU3GBL Gustavo 7241402 PU2XCN Francisco 7241403 PY2TA Windy 7241404 PP2FAX Sebastiao +7241405 PU2YMQ Yves 7241406 PU2NVP Aecio 7241407 PU2NSA Nilson 7241408 PY2LFI Agnaldo @@ -107410,6 +142619,7 @@ 7241413 PY2THO Tiago 7241414 PY2RMF Samuel 7241415 PU2TJG Elvio +7241416 PU4ARR Amancio 7241417 PU2TEP Tiago 7241418 PU2ORR Marco 7241419 PY2MHO Jose @@ -107420,8 +142630,135 @@ 7241424 PU2NVR Amaro 7241425 PY2KQ Rubens 7241426 PU2NVR Amaro -7241427 PU2KZE Ricardo +7241427 PU2KZE 7241428 PU2RFS Rafael +7241429 PU5RDL Marcelo +7241430 PU1JLN ELIAS +7241431 PY1NMG Manoel +7241432 PU2USE Flavio +7241433 PU2UKE Ricardo +7241434 PY2XQ Dri +7241435 PU7RJB Jesus +7241436 PU1XPQ Francisco +7241437 PU1XPQ Francisco +7241438 PU2CBM ECLEDINALDO +7241439 PU5RBA FERREIRA +7241440 PU2KWZ FLAVIO +7241441 PU2XUB Silvio +7241442 PU5SGP Gilmar +7241443 PU5MDX Mailon +7241444 PU4RVV Rodrigo +7241445 PU2SUK FRANCISCO +7241446 PY2EAK Gaston +7241447 PU2WUK Waldir +7241448 PU7ONG Francisco +7241449 PU2KFU Carl +7241450 PU2KFU Carl +7241451 PU1WAP armando +7241452 PU2BVG Persio +7241453 PU2LOC Eduardo +7241454 PU1JBO Luiz +7241455 PU5OPM Adriano +7241456 PU1JBO Luiz +7241457 PU2VBG Persio +7241458 PU2VBG Persio +7241459 PY5OO SITTA +7241460 PU2MOK Wevithon +7241461 PU5CBT Thiago +7241462 PY5PF Edemilson +7241463 PY4ET Roger +7241464 PU2LNV Claudio +7241465 PU2PNY Dario +7241466 PU2OQR MAXWELL +7241467 PU2LPB Ricardo +7241468 PU2RMD Leandro +7241469 PY2RPD Wagner +7241470 PU4PSI Barroso +7241471 PU2RYW Francisco +7241472 PY2ETO Renato +7241473 PY2DM Mamiro +7241474 PU2MIW Moises +7241475 PY2TD Jose +7241476 PU1NDC Nilo +7241477 PU1NDC Nilo +7241478 PY2UDT Rafael +7241479 PU7REI Onildo +7241480 PY4OLM Orlando +7241481 PY2FXA Eduardo +7241482 PU3RAX Radames +7241483 PY5AMT Amilton +7241484 PU5RRC ROBERTO +7241485 PU5APU Valter +7241486 PU7KPM Geneilson +7241487 PU2RKS RICK +7241488 PU2KLL Darli +7241489 PY2FLP Marcos +7241490 PY3KV Alexandre +7241491 PU5JFM Marcelo +7241492 PU5NCD NEY +7241493 PU2UCG Carlos +7241494 PU2UTR RENATO +7241495 PY2ETO Renato +7241496 PP5AF Joao +7241497 PU2LZK Antonio +7241498 PU2WRY Wesley +7241499 PU2UTR RENATO +7241500 PU1SNF Flavio +7241501 PU1SNF Flavio +7241502 PU4PWR Carlos +7241503 PY3KZ Jayme +7241504 PU5GRS Geneide +7241505 PU2PEU Delco +7241506 PU2NFD Nilson +7241507 PY3AIT Joao +7241508 PU2PEU Delco +7241509 PU2MDF Lucas +7241510 PT9BM Gustavo +7241511 PY2HW Fabio +7241512 PY7DA DJALMA +7241513 PY4UB Blair +7241514 PU2YMH Carlos +7241515 PY2SQ Rafael +7241516 PY2SYJ Joao +7241517 PY1DV Divino +7241518 PU2OJI Carlos +7241519 PQ2HX Hermes +7241520 PR8KW Gustavo +7241521 PR8MET Augusto +7241522 PU2OJI Carlos +7241523 PU4PWR Carlos +7241524 PU4SMC Acacio +7241525 PU4TCT claudio +7241526 PU2PNY Dario +7241527 PU2MOR Marcio +7241528 PU2MOR Marcio +7241529 PY2ACE Marco +7241530 PT9CX Rafael +7241531 PU5WAO Luis +7241532 PU2LLE Leonardo +7241533 PU2LLE Leonardo +7241534 PU1LGR Alexandre +7241535 PU2KDX Valter +7241536 PU5TDC Joao +7241537 PU2VEM HEMERSON +7241538 PU7TJO Josenaldo +7241539 PU2OPJ gilberto +7241540 PU5RUI Rui +7241541 PU2KBD emerson +7241542 PY2EDU Eduardo +7241543 PY2MD Moises +7241544 PY2GNU Wilson +7241545 PU7RVE Leandro +7241546 PU7RVE Leandro +7241547 PU7PST Severino +7241548 PU2LRI Alcides +7241549 PU2UEA Adriano +7241550 PU2SAR Cristiano +7241551 PU2YAF Newton +7241552 PY2XL Danilo +7241553 PU2XMP Durval +7241554 PU3TIO Leonar +7241555 PY8AC Andrei 7242001 PY2EQJ Julio 7242002 PY2IV Igor 7242003 PU2TKL Gilvin @@ -107430,7 +142767,7 @@ 7242006 PY2ASG Glaucio 7242007 PU2WAT Fabio 7242008 PU2MLA Mauro -7242009 PU2LRZ Rubens +7242009 PU2LRZ RUBENS 7242010 PU3AAD Rubins 7242011 PY2JMJ Julio 7242012 PY2AMX Rogerio @@ -107442,7 +142779,7 @@ 7242018 PY2IV Igor 7242019 PY2NBS Nilton 7242020 PY2NBS Nilton -7242021 PU2PHK Paulo +7242021 PU2PHK Paulinho 7242022 PY2CAT Antonio 7242023 PU2RQV Roque 7242024 PY2JD Sergio @@ -107462,7 +142799,7 @@ 7242038 PY2HJ Raul 7242039 PY2KXH Nelson 7242040 PY2PT Ricardo -7242041 PU2PHK Paulo +7242041 PU2PHK Paulinho 7242043 PY2GAB Gabriel 7242044 PY2GAB Gabriel 7242045 PT9AL Andre @@ -107482,14 +142819,14 @@ 7242061 PU2NRT Ibere 7242062 PY2HY Glaucio 7242063 PU2WLF Paulo -7242064 PU2TSN AntNio -7242065 PU2TSN AntNio +7242064 PU2TSN ANTONIO +7242065 PU2TSN ANTONIO 7242066 PY2DZA Dennis 7242067 PY2RN Edu 7242068 PY2AG Fernando 7242069 PU2LHQ Fabiano -7242070 PU2KIH Hamilton -7242071 PU2KIH Hamilton +7242070 PU2KIH HAMILTON +7242071 PU2KIH HAMILTON 7242072 PU2MRS Aparecido 7242073 PU2KTX Clayton 7242074 PU2KTX Clayton @@ -107516,14 +142853,14 @@ 7242095 PY2BEN Marcelo 7242096 PU2KKO Vagner 7242097 PU2OAF Oreste -7242098 PU2XID Cid +7242098 PU2XID 7242099 PY2NO Isaias 7242100 PU2OAF Oreste 7242101 PY2HP Gertjan 7242102 PY2JD Sergio 7242103 PY2CO Jose 7242104 PY2HY Glaucio -7242105 PY2DZ Thiago +7242105 PY2VP Thiago 7242106 PY2CN Luiz 7242107 PU2YEN Roberto 7242108 PY2GYL Amaral @@ -107534,24 +142871,22 @@ 7242114 PY2NMS Bruno 7242116 PU2RHU Luis 7242117 PU2YLR (11)96238-7247 -7242118 PU2LRZ Rubens +7242118 PU2LRZ RUBENS 7242119 PY2ARB Alexandre 7242121 PU2LZL Michel 7242122 PY2KXH Nelson 7242123 PU2OES Marcelo -7242124 PY2DZ Thiago +7242124 PY2VP Thiago 7242125 PY2KMD Marcelo 7242126 PU2VWR Rodrigo 7242127 PY2VU Helcio 7242128 PU2KWX Carlos -7242129 PY2KCA Clube -7242130 PU2MKJ Marco +7242130 PY2ACE Marco 7242131 PU2MMW Noberto 7242132 PU2LRO Luiz 7242133 PU2MTS Tiago 7242134 PU2RTO Roberto -7242135 PU2XAH Jose -7242137 PY2KCP AssociaO +7242135 PU2XAH Ribeiro 7242138 PY2UTR Lucas 7242139 PU2VEG Alexsandro 7242141 PU2RML Pedro @@ -107559,7 +142894,7 @@ 7242145 PU2KNK Fabiano 7242146 PU2TBC Helio 7242148 PY2WW Mauro -7242149 PY2VR Eduardo +7242149 PY2VR Ed 7242150 PU2SNW Silvio 7242151 PY2GC Pedro 7242152 PY2JCM Josias @@ -107631,7 +142966,7 @@ 7243003 PY3NY Andre 7243004 PY3PT Donaldo 7243005 PY3CC Jorge -7243006 PY3OR JoO +7243006 PY3OR Joao 7243007 PU3WIW Vicente 7243008 PP5AK Joao 7243010 PY3PCF Paulo @@ -107647,8 +142982,8 @@ 7243020 PU3KDU Carlos 7243021 PY3IBZ San 7243022 PY3TM Matheus -7243023 PU5AOA JoO -7243024 PP5KO JLio +7243023 PU5AOA JoaO +7243024 PP5KO JuLio 7243025 PU5DSM Sandro 7243026 PY3NY Andre 7243027 PY3BB Donaldo @@ -107676,7 +143011,7 @@ 7243052 PU3CBM Alex 7243053 PU3MEM Marlon 7243054 PP5AE Marco -7243055 PP5JLA JoO +7243055 PP5JLA JoaO 7243056 PU3CSD Claudio 7243057 PY3NP Emerson 7243058 PU5EGL Gustavo @@ -107748,7 +143083,7 @@ 7244057 PU4HSL Jonas 7244058 PU4BNL Marcelo 7244059 PU4JMP Jose -7244060 PU4KET Wellington +7244060 PY4WR Wellington 7244061 PY4JB Joao 7244062 PY4IG Georgenito 7244063 PY4JB Joao @@ -107758,6 +143093,7 @@ 7244067 PU4RAP Paulo 7244068 PY4LK Lincoln 7244069 PY4AC Claudio +7244070 PY4FS Manoel 7244071 PY4BR Leonardo 7244072 PY4RAT Joao 7244073 PU4JKK Julius @@ -107768,7 +143104,7 @@ 7244078 PY4PL Tiago 7244079 PY4WQN Ignacio 7244080 PY4WQN Ignacio -7244084 PU4MML MaurCio +7244084 PU4MML MauriCio 7244085 PU4OTO Otoniel 7244087 PU4OTO Otoniel 7244088 PY4YAB Adnilson @@ -107796,7 +143132,7 @@ 7245002 PY5RCB Renato 7245003 PY5JAP Jose 7245004 PU5YTN Claudia -7245005 PU5UAI Martins +7245005 PU5UAI MARTINS 7245006 PU5SVE Evandro 7245007 PU5XNS Nelson 7245008 PU5XNS Nelson @@ -107835,9 +143171,7 @@ 7245041 PU5MEC Eraldo 7245043 PY5JY Jackson 7245044 PY5JY Jackson -7245045 PY5RBR Repeater 7245047 PY5AX Angelino -7245050 PY5ETI JAo 7245051 PU5SME Elio 7245053 PY5JJA Joao 7245055 PY5JJA Joao @@ -107880,12 +143214,11 @@ 7246002 PY6UN Bruno 7246003 PU6USA Barbieri 7246004 PP6AIR Paulo -7246005 PP6PP Jose +7246005 PP6PP Fernando 7246006 PU6USA Barbieri 7246007 PP6CFN Carlos 7246008 PP6AJM Alberto 7246009 PY6MV Marcone -7246010 PY6MR Rpt-C4fm-Brasil 7246011 PY6UN Bruno 7246012 PU6BVM Vanderlei 7246013 PY6ZIM Juergen @@ -107897,12 +143230,12 @@ 7246020 PY6TL Yuri 7246021 PY6AHX Moacyr 7247001 PU7MKI Fabrizio -7247002 PU7LLS Lucivaldo +7247002 PU7LSB Lucivaldo 7247003 PT7KO Junior 7247004 PT7ZYH Barros 7247005 PU7OBX Geovani -7247006 PU7LLS Lucivaldo -7247007 PT7MV Josemar +7247006 PU7LSB Lucivaldo +7247007 PT7MV JOSEMAR 7247008 PS7RK Mauricio 7247009 PU7MCV Marcos 7247010 PT7PTX Evandro @@ -107918,14 +143251,13 @@ 7249006 PU7RAA Alberto 7249007 PY7AHA Alexandre 7249008 PY7BMJ Benjamim -7249009 PY7DIG Jadilson 7249010 PU7RCE Severino 7249011 PY7AR Romeu 7249012 PY7MBL Manoel 7249013 PY7MBL Manoel 7249014 PY7BMJ Benjamim 7249015 PU7RAQ Florisval -7249016 PU7EEM Claudio +7249016 PR7CJ Claudio 7249017 PU7RAO Raimundo 7249018 PY7MS Marcos 7249019 PS7MW Christian @@ -107960,17 +143292,22 @@ 7300004 CE3LWU Juan 7300005 CE3LWU Juan 7300006 CA6AMV Roberto +7300007 CA2SLD JORGE 7300008 CD1HCO Ricardo 7300009 CA1MTV Victor -7300010 CD3CLF Cristian +7300010 CA3CLF Cristian +7300011 CE1CVI Carlos 7300012 CD3HML Hector 7300013 CD3CTU Cristian 7300014 CA1JMP Jose +7300015 CD1YPC Yerko 7300016 CD3PGX Patricio 7300017 CD3GSN Matias 7300018 CA6MVW Ignacio 7300019 CD1JDX Jonathan 7300020 CE8WDB Rodrigo +7300021 CA4RIA Rodrigo +7300022 CD1JMH Juan 7300023 CD1CDU CELENY 7300024 CA6RDH ROBERTO 7300025 CE3CB HERNAN @@ -107978,11 +143315,395 @@ 7300027 CE2NJW Freddy 7300028 CA6CCV Cristian 7300029 CA1MMA Mauricio +7300030 CE3RRU Ponce-Hille +7300031 CA3OCP Enrique 7300032 CE5JA Radio 7300033 CE2HRW Jorge 7300034 CE2HRW Jorge 7300035 CD3DCS Danilo 7300036 CD3ASK Alexis +7300037 CA5FBO Francisca +7300038 CA3AWA Rodrigo +7300039 CA3SLP SANDRA +7300040 CE2AND Radio +7300041 CE2PZJ Tito +7300042 CA3MVK Miguel +7300043 CA3MVK Miguel +7300044 CD1DZR David +7300045 CD1DZR David +7300046 CD4PKZ Patricio +7300047 CD4PKZ Patricio +7300048 CD3KBG Luis +7300049 CA3WTV Luis +7300050 CA1OLR ricardo +7300051 CA2LPA alejandro +7300052 CA1PEF Rene +7300053 CD2JQW Jhosstin +7300054 CE2OV Radioclub +7300055 CE4KTM Richard +7300056 CE4KTM Richard +7300057 CE2OV Radioclub +7300058 CB3ET Eternautas +7300059 CE6RYO Adolfo +7300060 CE6RYO Adolfo +7300061 CA3WTV Luis +7300062 CE3TAJ Julio +7300063 CD6FRV FELIPE +7300064 CA5GGB Gonzalo +7300065 CE3RKW Mario +7300066 CE3OJX Alfonso +7300067 CE3OJX Alfonso +7300068 CE4RTT Radio +7300069 CA2VMP Francisco +7300070 CE3RSC Radio +7300071 CE4RWS Hector +7300072 CE3RSC Radio +7300073 CD3GOZ Juan +7300074 CE3UTK Alejandro +7300075 CE3TVR Juan +7300076 CE3CCP Emilio +7300077 CD3ALR Ricardo +7300078 CD3DBL Dario +7300079 CA2UDC andres +7300080 CA2NRD Neto +7300081 CA2UDC andres +7300082 CA2WNG JOSE +7300083 CE3BUQ Daniel +7300084 CE1OCA Carlos +7300085 CD2GSK RUBEN +7300086 CE6ATV Herardio +7300087 CD2GSK RUBEN +7300088 CE2SLU Alejandro +7300089 XQ3EO Mario +7300090 CA2FOC rosa +7300091 CA2FOC rosa +7300092 CA3UZC Bernardino +7300093 CA3UZC Bernardino +7300094 CA2CQG CHRISTIAN +7300095 CA2HVK MARCO +7300096 CE2OFF Orlando +7300097 CA2HVK MARCO +7300098 CD2VPN ANANIAS +7300099 CE4UGI juan +7300100 CD5GSH Gonzalo +7300101 CE4ILM Pedro +7300102 CD1JNA Juan +7300103 CA1KHJ Jorge +7300104 XQ1KK Jonathan +7300105 CD2NVE NELSON +7300106 CE4WDL fernando +7300107 CD2JZC JORGE +7300108 CD2GSU GUILLERMO +7300109 CD3MXC Matias +7300110 CA3HYE Octavio +7300111 CD2GDE GERARDO +7300112 CD3FIR Cristian +7300113 CD1MKU Mauricio +7300114 CE1WCV Nelson +7300115 CA2SHF sergio +7300116 CA1WGX Pedro +7300117 CA2RPG Alfredo +7300118 CE2REV Radio +7300119 CA2COU Cristian +7300120 CD2AVU ricardo +7300121 CA3SBB Francisco +7300122 CE1RSM Jonathan +7300123 CA2RSE TORO +7300124 CA2RSE TORO +7300125 CE2ATS Alejandro +7300126 CE2ICD Juan +7300127 CE2ICD Juan +7300128 XQ3AX ROMELIO +7300129 CA3WOU Juan +7300130 CD1WBZ Wilfredo +7300131 XQ2PSP Romelio +7300132 CE3HOT HERNAN +7300133 CA1DSA Domingo +7300134 CA2PSM Pablo +7300135 XQ3AX ROMELIO +7300136 CE2RDD ANGELICA +7300137 CE3DAH demis +7300138 CA3MBV Marcelo +7300139 CA3MBV Marcelo +7300140 CA3SML LUIS +7300141 CE4PEC Cristian +7300142 CE4PEC Cristian +7300143 CD3MXG Mariano +7300144 CD2ETU Emilio +7300145 CE3TTL Ruben +7300146 CE1IQQ Radioclub +7300147 XQ1JKS Carlos +7300148 CD4PAX PATRICIO +7300149 XQ1WKX Exequiel +7300150 CA1AAG Ana +7300151 CA2MPK Hernan +7300152 CE8CAU Carlos +7300153 CE8CAU Carlos +7300154 CA3JGI Jose +7300155 CD2KGE JORGE +7300156 CA3PBL Marcelo +7300157 CD5NPF NELSON +7300158 CD5NPF NELSON +7300159 CE7JLR Jose +7300160 CE1OAD Juan +7300161 CE4UJP DAVID +7300162 CE3GP GERMAN +7300163 CE3FAI Fernando +7300164 CA3SDF Cristian +7300165 CD1HEN Hernan +7300166 CA2BVO Yerko +7300167 CE3UO Manuel +7300168 CD2RON ramon +7300169 CE4ER Waldo +7300170 CE3BXW Jorge +7300171 CE4KBL miguel +7300172 CE3BCK Hector +7300173 CD3CNT Claudio +7300174 CE5WDG Oscar +7300175 CD2BMA patricio +7300176 CE3JGV Luis +7300177 CA3NRH RODRIGO +7300178 CD5LVN LUIS +7300179 CE2RL Radio +7300180 CE2RL Radio +7300181 CD1HSQ Hernan +7300182 CA2CDA Diaz +7300183 CD3GVY Gino +7300184 CD1YPC Yerko +7300185 CA5PHJ Ariel +7300186 CA4WQP Sebastian +7300187 CD4RUM Rodrigo +7300188 CE2VGK David +7300189 CE3HOT HERNAN +7300190 CA3MPR Manu +7300191 CD1MZV Miguel +7300192 CA2FDL JUAN +7300193 CA2FDL JUAN +7300194 CE5BIO Radio +7300195 CA2STP patricio +7300196 CA2WTQ Gloria +7300197 CE2UAM daniel +7300198 CD2CFK Cristian +7300199 CA3PGN marcelo +7300200 CA3CAB Manuel +7300201 CD1BJH Luigi +7300202 CA3CAB Manuel +7300203 CE1PAL Patricio +7300204 CE8LGW Juan +7300205 CD2HOP Hernan +7300206 CE6TC Radio +7300207 CD3NIN Nora +7300208 CA2CCK Carlos +7300209 CD3FOT Felipe +7300211 CE1TWE Juan +7300212 CA7TWY Benavides +7300213 CD3IME Ivan +7300214 CD3IME Ivan +7300215 CE1TWE Juan +7300216 CD2GFQ Anuar +7300217 CE3OCQ Jaime +7300218 CE4LNM Marcelo +7300219 CE3OCQ Jaime +7300220 CE3IBW RENATO +7300221 CE7JD cesar +7300222 CE7PJA Jorge +7300223 XQ8GLQ Jerman +7300224 CD2EJR Eduard +7300225 CD2EJR Eduard +7300226 CD2SLM Samuel +7300227 CE2UDA MIGUEL +7300228 CE3EOA Patricio +7300229 CE2RVE Radio +7300230 CA3MRD Aldo +7300231 CD2ATI Luis +7300232 CD3GOT Christian +7300233 CA6UTA Carlos +7300234 CA3PTZ Claudio +7300235 CA3ILJ IBERE +7300236 CE2CKL Carlos +7300237 CD2JJF JORGE +7300238 CD2GFQ Anuar +7300239 CD2AQE Eduardo +7300240 CD2MVU Milton +7300241 CD2AJA Alejandro +7300242 CD3CKW Cristian +7300243 CD7HIV HECTOR +7300244 CD7HIV HECTOR +7300245 CA2EYK juan +7300246 CD1AGQ Arnaldo +7300247 CA4TUE ROMAN +7300248 CA4TUE ROMAN +7300249 CA2MLS Mauricio +7300250 CA4TUN JULIO +7300251 CA4TUN JULIO +7300252 CE6MTO Oscar +7300253 CA4KHL rodrigo +7300254 CE4MFE MARCIAL +7300255 CA6PTC Jacqueline +7300256 CE2MT Marisa +7300257 CE2MT Marisa +7300258 CE1EBS Elena +7300259 CD2CJL Christian +7300260 CD2CJL Christian +7300261 CE4MFE MARCIAL +7300262 CA3CLF Cristian +7300263 CD3EHH Eduardo +7300264 CE3RZL Jorge +7300265 CA2LGE Leonardo +7300266 CA7VWD Fredy +7300267 CE3AOL Hugo +7300268 CD3HOG Hernan +7300269 CD3HOG Hernan +7300270 CE2SCZ Andres +7300271 CE3VTK Rodrigo +7300272 CD3PVL pablo +7300273 CA3GNR Rodrigo +7300274 CA1YPC YERKO +7300275 CE5WMV Walter +7300276 CA1YPC YERKO +7300277 CD3DBT David +7300278 CD3DBT David +7300279 CD4CCO Jose +7300280 CA1KMF vinko +7300281 CD5LVN LUIS +7300282 CD7MUV Marcos +7300283 CA2LGC Adolfo +7300284 CD5BEJ Benjamin +7300285 CE1NTD Gilberto +7300286 CA1KMF vinko +7300287 CE4UTC Milton +7300288 CA4JIX Jaime +7300289 CA7PPK None +7300290 CD2SEO Sergio +7300291 CE2HOL Jose +7300292 CD3JZU Jeison +7300293 CA2NBS Jaime +7300294 CD8EDE None +7300295 CA2SEO Sergio +7300296 CE3GKU Juan +7300297 CE3PPY Jorge +7300298 CE3VNH Luis +7300299 CE3VNH Luis +7300300 CA3SCR Sebastian +7300302 CD2PMO Luis +7300303 CA5GJC Carlos +7300304 CE3RCJ Ramon +7300305 CD4JYA Jorge +7300306 CE3SCS Carlos +7300307 CD7MUV Marcos +7300308 CE3PGM Gino +7300309 CE2VLR Ruben +7300310 CA2JAM jorge +7300311 CA2WNG JOSE +7300312 CE2TPH Raul +7300313 CD1MXA mario +7300314 CE3GC Pedro +7300315 CE4JAV Jorge +7300316 CD1MXA mario +7300317 CE1NAH Cesar +7300318 CE8GWZ Jose +7300319 CE4STG Gaston +7300320 CD3GDI Gustavo +7300321 CE2TPX Guillermo +7300322 CA3RLR CRISTIAN +7300323 CD2CIP Carlos +7300324 CD2EIA Eduardo +7300325 CD2PTO Pablo +7300326 CE3DR Alex +7300327 CD2OMR Rodrigo +7300328 CE2PAH Alejandro +7300329 CA5LET Luis +7300330 CD2HEQ Hector +7300331 CA5LET Luis +7300332 CD1GNB +7300333 CD2RDP ROMAN +7300334 CE2WGD Randall +7300335 CE2WAI Oscar +7300336 CE5RQP ROBERTO +7300337 CE5RQP ROBERTO +7300338 CA3WHA Orlando +7300339 CD2PDD alexis +7300340 CD3JQE Joel +7300341 CE7IKY Victor +7300342 CE4UYP Radio +7300343 CD6LKZ LUIS +7300344 CE5JFS Francisco +7300345 CE3DR Alex +7300346 CE7VCM Manuel +7300347 CE7VCM Manuel +7300348 CD3JJE Juan +7300349 CE5LJZ Juan +7300350 CD1GNB +7300351 CE3FGB Francisco +7300352 CD5MWZ Manuel +7300353 CD2DCC Daniel +7300354 CD5MWZ Manuel +7300355 CD1JTS Jorge +7300356 CE4FVS Jorge +7300357 CA6LLC Christian +7300358 CA1ANM Alejandro +7300359 CA1ANM Alejandro +7300360 CE2RTK Joel +7300361 CE6JOC Manuel +7300362 CE2LOH Pedro +7300363 XQ2BIT fernando +7300364 CE2RTK Joel +7300365 CE4FPA Pedro +7300366 CA3KRF Marcelo +7300367 CD4RPT Rodrigo +7300368 CD3JRS Jose +7300369 CD2AEZ Aldo +7300370 CE6DKB Ricardo +7300371 CA2LAN LUIS +7300372 CE3TLI Cristian +7300373 CE6DKB Ricardo +7300374 CE2IAL Roberto +7300375 CE4RSF Radio +7300376 CD2SLJ Samuel +7300377 CE2SKG Jose +7300378 CE3JVU Victor +7300379 CA3UHP Italo +7300380 CE2HSF Emilio +7300381 CD1RVR Ricardo +7300382 CD7PLP Pablo +7300383 CD7PLP Pablo +7300384 CE3UOB Miguel +7300385 CD3PEE Pedro +7300386 CA2MEL Marcelo +7300387 CA2MEL Marcelo +7300388 CA1WPL Sergio +7300389 CE4RSF Radio +7300390 CA2MTV Victor +7300391 CD5RPY Rodrigo +7300392 CD5RPY Rodrigo +7300393 CA3VUX Juan +7300394 CE6RLA Radio +7300395 CE6SZY Rodrigo +7300396 CE4VAP Manuel +7300397 CE6SZY Rodrigo +7300398 CE6RLA Radio +7300399 CD4CUX Carlos +7300400 CD4CUX Carlos +7300401 CE3MVX Francisco +7300402 CE3MVX Francisco +7300403 CD1MKO Manfred +7300404 CA7RMR Renato +7300405 CA7RMR Renato +7300406 CA1MBN Manuel +7300407 CD3HBO Hernan +7300408 CE5ROS Oscar +7300409 CD3GDI Gustavo +7300410 CE4TAH Miguel +7300411 CE2CTV Carlos +7300412 CD4CNR Jorge +7300413 CE6ROX Rodrigo +7300414 CD2VLO Juan +7300415 CD4TPZ Thomas +7300416 CE6ROX Rodrigo +7300417 CD1JJY Jacqueline +7300418 CE6MVJ Julian +7300419 XQ4JKX Juan +7300420 CD6ELH carlos 7301001 CE1PDL Ricardo 7301002 CA1MMA Mauricio 7301003 CE1CPI @@ -108023,7 +143744,7 @@ 7301038 CA1FJW Francisco 7301039 CE1WOY Mauricio 7301040 CE1GCJ Juan -7301041 CE1UWL +7301041 CE1UWL Willy 7301042 CA1JNN Jhon 7301043 CA1ROY Rodrigo 7301044 CA1IZA Ivan @@ -108087,10 +143808,10 @@ 7301112 CD1JPP Jose 7301113 CE1SII Mervyn 7301114 CE1SJJ Claudio -7301115 CD1JWE Jos +7301115 CD1JWE Jose 7301117 CE1WGO Cristian 7301118 CE1UKQ Juan -7301119 CD1FVE FabiN +7301119 CD1FVE FabiaN 7301120 CE3HIA Hector 7301122 CA1VZQ Duberli 7301123 CA1GVN Abdul @@ -108141,7 +143862,7 @@ 7301181 CE1RSG Ruben 7301182 CE1JGS Juan 7301183 XQ1KC Ismael -7301185 CE1UWL +7301185 CE1UWL Willy 7301186 CA1FAA Fernando 7301187 CE1UMN Carlos 7301189 CE1PEK Pedro @@ -108154,8 +143875,8 @@ 7301196 CE1WML Pedro 7301197 CE1WML Pedro 7301198 CD1LVH Luis -7301199 CD1RDR Ricardo -7301200 CD1RDR Ricardo +7301199 CA1RDR Ricardo +7301200 CA1RDR Ricardo 7301201 CA1JVZ Jonathan 7301202 CA1JVZ Jonathan 7301203 CD1DSG Rene @@ -108189,7 +143910,7 @@ 7302004 XQ2RPC Carlos 7302005 CE2RTB Jaime 7302006 CE2UTJ Jose -7302007 CA2HEU Cesar +7302007 CE2HEU Cesar 7302008 CA2FCZ Fernando 7302009 CA2RVN Nelson 7302010 CA2PVO Orlando @@ -108258,7 +143979,7 @@ 7302073 CA2FAF Waldo 7302074 CE2ODJ Carlos 7302075 CE2WUQ Enrique -7302076 CE2OBA Jos +7302076 CE2OBA JosE 7302077 CE2SVQ Waldo 7302078 CE2UQM Juan 7302079 CA2CVC Cristian @@ -108331,7 +144052,7 @@ 7302149 CA2FGF Ernesto 7302150 CD2KDA Luis 7302152 CD2FLC Cristian -7302156 CD2LEH +7302156 CD2LEH Leonardo 7302157 CD2KDA Luis 7302159 CE2UGO Hugo 7302160 CA2RMD Francisca @@ -108371,7 +144092,7 @@ 7302201 CD2HEY Haroldo 7302202 CD2MEX Mario 7302203 CE2IEN Guillermo -7302204 CE2GVM +7302204 CE2GVM Radio 7302205 CE2RGM Gabriela 7302206 CA2HJA Jose 7302208 CD2CZJ Juan @@ -108385,13 +144106,13 @@ 7302216 CA2UDY Edinson 7302217 CA2UDY Edinson 7302218 CA2KVA Pablo -7302219 CD2JLX Jose +7302219 CA2JLX Jose 7302220 CE2SJT Edgardo 7302221 CE2SJT Edgardo 7302222 CE2ECV Edgardo 7302223 CE2STD Hector 7302224 CE2PVP Patricio -7302226 CD2JLX Jose +7302226 CA2JLX Jose 7302227 CD2LGI Luis 7302228 CD2SHF Sergio 7302229 CE2NJW Freddy @@ -108415,7 +144136,7 @@ 7302247 CE2BYE Vicente 7302248 CA2WTX Claudio 7302249 CE2UFN Christian -7302250 CE2SKE Cristin +7302250 CE2SKE Cristian 7302251 CE2REF Felipe 7302252 CE2LKI Carlos 7302253 CE2LFT Luis @@ -108424,7 +144145,7 @@ 7302257 CD2ASF Rodrigo 7302258 CA2MGP Mario 7302259 CE2UX Pedro -7302260 CE2PZJ Fuentes +7302260 CE2PZJ Tito 7302261 CE2DDB Humberto 7302262 CE2JLA Joel 7302264 CA2MEF Mario @@ -108432,9 +144153,9 @@ 7302267 CA2JBQ Jose 7302268 CD2VAM Vladimir 7302269 CE2SJV Marcelo -7302270 CD2DRB Danilo +7302270 CA2DRB Danilo 7302271 CA2JLH Juan -7302272 CD2DRB Danilo +7302272 CA2DRB Danilo 7302273 CA2VMZ Graciela 7302274 CD2BCE Bernardino 7302275 CE2RGJ Luis @@ -108453,7 +144174,7 @@ 7303011 CA3BKN Cristian 7303012 CA3AHV Alvaro 7303013 CA3IRO Ivan -7303014 CE3EPN Eduardo +7303014 CE3TL Eduardo 7303015 CE3EDW Luis 7303016 CA3HAW Henry 7303017 CE3VHV Raphael @@ -108475,14 +144196,14 @@ 7303034 CD3JBU Juan 7303035 CE3AA Radio 7303036 CA3NEP Nibaldo -7303037 CA3JUD Ricardo +7303037 CE3JUD Ricardo 7303038 CA3RIO Ruben 7303039 CA2DSM Daniel 7303040 CD3GMH Gonzalo 7303041 CD3GMH Gonzalo 7303042 CE3DOC Darko 7303043 CD3ESB Eduardo -7303044 CE3EPN Eduardo +7303044 CE3TL Eduardo 7303045 CA3VSP Jaime 7303046 CD3HFM Hector 7303047 CD3HAJ Javier @@ -108571,7 +144292,7 @@ 7303132 CE3TMK Carlos 7303133 CA3JOG Juan 7303134 CD3DAE Daniel -7303135 CE3LWV Jos +7303135 CE3LWV Jose 7303136 CE3MSB Miguel 7303137 CA3AUG Alejandro 7303138 CD3APH Alfredo @@ -108604,7 +144325,7 @@ 7303169 CE3JRM Rodrigo 7303170 CA3HML Hector 7303171 CA3RHP Raul -7303172 CD3EPA Edgar +7303172 CA3EPA Edgar 7303173 CD3DCS Danilo 7303174 CE3DEP Oscar 7303175 CD3DJJ Cristian @@ -108691,7 +144412,7 @@ 7304023 CD4GVX Gerardo 7304025 CD4JKV Jose 7304027 CE4VZY Mario -7304028 CE4JVU Victor +7304028 CE3JVU Victor 7305001 CE5RHS Miguel 7305002 CE5KBR Mauricio 7305003 CA5SBT Esteban @@ -108728,11 +144449,11 @@ 7305040 CA5WZU Lautaro 7305041 CA5MYR Alvaro 7305042 CA5MYR Alvaro -7306001 XQ6UMR Guillermo -7306002 XQ6UMR Guillermo -7306003 XQ6UMR Guillermo +7306001 XQ6AK Guillermo +7306002 XQ6AK Guillermo +7306003 XQ6AK Guillermo 7306004 CE6TTL Ruben -7306005 XQ6UMR Guillermo +7306005 XQ6AK Guillermo 7306006 CE6TTL Ruben 7306007 CA6JAU Jose 7306008 CE7RFS Hugo @@ -108769,7 +144490,7 @@ 7306041 CA6TRT Rodrigo 7306044 CA6TRT Rodrigo 7306045 CD6NFR Richard -7306046 CD6LLC Christian +7306046 CA6LLC Christian 7306048 CE6DFY 7307001 CE7RVF Jose 7307002 CE7UVK Olaf @@ -108791,7 +144512,7 @@ 7320006 HK5VD Liga 7320007 HK5JOR Alberto 7320008 HK5LAM Francisco -7320009 HJ5JUP Juan +7320009 HK5JUP Juan 7320010 HJ5SPD Susana 7320011 HK5NBE Carlos 7320012 HK5NBE Carlos @@ -108835,15 +144556,23 @@ 7320050 HK5LFK Horacio 7320051 HK3LR Liga 7320052 HK7ORC Oscar +7320053 HK4D Juan +7320054 HJ4CBE Juan +7320055 HJ5VEL JUAN 7320056 HK4EI Juan 7320057 HK4GSO Mauricio 7320058 HK4L Luis +7320059 HJ5VEL JUAN +7320060 HK2NKG Valerio +7320061 HK6NHF Jorge +7320062 HJ1MOY Julio 7320063 HK5PND Alvaro 7320064 HJ5NIJ Fernando 7320065 HJ5CIC Carlos 7320066 HK5HAC Hernando 7320067 HJ8JKN Jonnathan -7320069 HJ5YFC YoliN +7320068 HJ5HCK Juan +7320069 HJ5YFC YoliaN 7320070 HJ3MMM Mauro 7320071 HK3PQI Eduardo 7320072 HK3EU Eugenio @@ -108851,6 +144580,7 @@ 7320074 HK5OZO Jose 7320075 HK3FUE Jorge 7320076 HK3FUE Jorge +7320077 HJ7IN Ildefonso 7320078 HJ6JAI Jairo 7320079 HK3Z Aquilino 7320080 HK6JHD Jaime @@ -108864,11 +144594,14 @@ 7320088 HK6AIV Carlos 7320089 HK2YO JOSE 7320090 HK5KVZ Hernan -7320091 HJ3JDG Jorge +7320091 HK3JDG Jorge 7320092 HK1AC Alfredo 7320093 HK3MOF ANA +7320094 HJ7IN Ildefonso 7320095 HK1AC Alfredo 7320096 HJ6SCF Fernando +7320097 HK7JMV Jorge +7320098 HK3LEN Jorge 7320099 HJ3MRJ Juan 7320100 HJ3MRJ Juan 7320101 HK3VHZ Lic @@ -108877,13 +144610,13 @@ 7320104 HK3KZP Norman 7320105 HK3QAL Edgar 7320106 HK3UAV Jilmer -7320107 HK4NDF +7320107 HK4NDF Joa 7320108 HK4PT Gustavo 7320109 HK4BES Jorge 7320110 HK3OUN Paulo 7320111 HJ4EIC Luis 7320112 HK6HIC Javier -7320113 HK3ER Eliu +7320113 HK3ER ELIU 7320114 HJ4CRF Camilo 7320115 HK3VFE Fernando 7320116 HK3VFE Fernando @@ -108892,13 +144625,76 @@ 7320119 5K3W Siso 7320120 5K0W Siso 7320121 HK8EJZ Heriberto -7320122 HK3MMM Mauro -7320123 HK3MMM Mauro +7320122 HK3A Mauro +7320123 HK3A Mauro +7320124 HK3DC Daniel +7320125 HJ3ATA ALEJANDRO +7320126 HK3MES Manuel +7320127 HJ3YFA Yimi +7320128 HJ3KZO Pedro 7320129 HK3AA Alan 7320130 HK3LPF Rubiel 7320131 HK4D Juan 7320132 HK3DFZ Fabio 7320133 HK6NGR Luis +7320134 HK3DRF Hernan +7320135 HJ5CHV Carlos +7320136 HK6LRQ Liga +7320137 HK6JSP Nair +7320138 HJ4DVC Diego +7320139 HK6GPJ GABRIEL +7320140 HJ5LFR Leornardo +7320141 HJ6OAA Ortilio +7320142 HK1JIK Pedro +7320143 HJ6OAA Ortilio +7320144 HJ5HEN Henry +7320145 HJ5HEN Henry +7320146 HJ5JBU Javier +7320147 HJ4JRI Juan +7320148 HJ3ZDY Jose +7320149 HK3UEJ Norberto +7320150 HK3EJB Michael +7320151 HK3UEJ Norberto +7320152 HK3JB Jose +7320153 HJ6MTK Martin +7320154 HJ6XKD Nicolas +7320155 HJ3CGC Carlos +7320156 HK3Y Martinez +7320157 HJ1FJC Francisco +7320158 HJ3CSH VICTOR +7320159 HJ4VIC Victor +7320160 HJ7NYZ Alejandro +7320161 HJ3RED Ruben +7320162 HK3UOR Jhon +7320163 HJ4CRI Cristian +7320164 HJ5JFN Juan +7320165 HK5GBT Agudelo +7320166 HJ5IDC MARTIN +7320167 HJ0APW Gustavo +7320168 HK5SCX Carlos +7320169 HJ3JCB +7320170 HJ3WGT Vilma +7320171 HK3JEL Jesus +7320172 HK3VOA Luis +7320173 HJ3RP Mr +7320174 HJ3BAK Bradley +7320175 HJ5RMM Ricardo +7320176 HJ5RTP RICHARD +7320177 HJ5CHM Carlos +7320178 HK5LIB Libardo +7320179 HK3SMC Sandra +7320180 HK3OTP Olmo +7320181 HJ3LUI Luis +7320182 HJ4JGG Juan +7320183 HJ4DLC Juan +7320184 HK4FZ Alberto +7320185 HK3MPE Marcos +7320186 HK4FZ Alberto +7320187 HK3QUE Carlos +7320188 HK4IFF Victor +7320189 HK4IFF Victor +7320190 HJ6IEA Ivan +7320191 HJ3MMC Maria 7321001 HK6CAN William 7321002 5K0PRS Lcra 7321003 5K1PRS Lcra @@ -108910,6 +144706,35 @@ 7321009 5K7PRS Lcra 7321010 5K8PRS Lcra 7321011 5K9PRS Lcra +7340004 YV4VV Radio +7340005 YY6AMS Arturo +7340006 YV4ET Juan +7340007 YV5IOO Bernardo +7340008 YV4DHS Homero +7340009 YV5DRN Leandro +7340010 YV4AP Harald +7340011 YV4WC Winkock +7340012 YV4DMR Andres +7340013 YY5CBD Charles +7340014 YY4GOR Jorge +7340015 YV4FDC Cesar +7340016 YY4MN Miguel +7340017 YY5APB Victor +7340018 YV5MWH Ramon +7340019 YV4ACU Edgar +7340020 YY5DMF Daniel +7340021 YV5IOO Bernardo +7340022 YY5RPE Edinson +7340023 YV5ZV Victor +7340024 YV5KAN Nasim +7340025 YY5JPJ Jairo +7340026 YY4KWT Ramon +7340027 YV4EK Rodrigo +7340028 YV4NR Nerio +7340029 YY4EOP Efren +7340030 YV5EMG Eugenio +7340031 YY2ALF Alfredo +7340032 YY5SDA Jose 7341001 YV1GAG Hernedy 7341002 YV1GAG Hernedy 7341003 YV5VE William @@ -108926,7 +144751,7 @@ 7341014 YY5CTN Carlos 7341016 YY1AOR Anderson 7341017 YV4CEG Cruz -7341018 YV4IVB InS +7341018 YV4IVB IneS 7341019 YV4MT Miguel 7341020 YV1EQ Francisco 7341021 YV4FQE Julio @@ -108942,7 +144767,7 @@ 7342001 YV2DKT Jose 7342002 YY2JAB Jose 7342003 YY2JFO -7342004 YY2JFO Jose +7342004 YY2JFO 7342005 YV2CAR Carlos 7342006 YY2GAL Geraldine 7342007 YY2VRM Valentin @@ -108971,7 +144796,7 @@ 7344030 YV4MW Wilmer 7344031 YV4GHY Carlos 7344032 YV4FSS Jesus -7344034 YV4RDC Rodrigo +7344034 YV4EK Rodrigo 7344035 YV4KT Carlos 7344036 YV4KT Carlos 7344037 YV4AB Ivan @@ -109021,6 +144846,7 @@ 7347004 YY7CAR Jesus 7380001 8R1B Julian 7380002 FY5HB Said +7380003 FY5HB Said 7400001 HC1ER Edison 7400002 HC2GBT Gerald 7400003 HC3AP Cesar @@ -109045,7 +144871,7 @@ 7400022 HC2JM Jorge 7400023 HC2TCP Carlos 7400024 HC2TWB Nelson -7400025 HC2TRA Angel +7400025 HC2RA Angel 7400026 HC3FL Fernando 7400027 HC3FL Fernando 7400028 HC2TEP Edwin @@ -109062,7 +144888,7 @@ 7400039 HC2TYC Yois 7400040 HC2TVL Vicente 7400041 HC2TMJ Juan -7400042 HC2TJQ Jos +7400042 HC2TJQ JosE 7400043 HC2FN Juan 7400044 HC2TAS Stalin 7400045 HC2TAC Adolfo @@ -109077,16 +144903,107 @@ 7400054 HC2TKM Kelvin 7400055 HC3BL Byron 7400056 HC2TIC Ibsen -7400057 HC3RJ Ing +7400057 HC3RJ Jack 7400058 HC2TCM Paola 7400059 HC2TFR Recalde 7400060 HC5SL Lee 7400061 HC2TMV Manuel -7400062 HC2GS CSar +7400062 HC2GS CESar 7400063 HC2TJP John 7400064 HC2TCV Alfredo +7400065 HC2TMP MARIO +7400066 HC2TKV Kevin +7400067 HC2TMZ MATEO +7400068 HC3RJ Jack +7400069 HC4LI E +7400070 HC2TPX Xavier +7400071 HC4TRB RONNY +7400072 HC2TAH Alex +7400073 HC2THN Harry +7400074 HC4TVI ELVIS +7400075 HC4CM Jose +7400076 HC4L Lilian +7400077 HC4TAM Edison +7400078 HC4TJL Juan +7400079 HC4TEN Emerson +7400080 HC4TVC Juan +7400081 HC4TGS Gianny +7400082 HC4ES Elias +7400083 HC4VF Ligia +7400084 HC3KF Kleber +7400085 HC2TRJ RONALD +7400086 HC2TWC Washington +7400087 HC2TFA Ivania +7400088 HC2TFA Ivania +7400089 HC2AO Alexey +7400090 HC2AP Ahmed +7400091 HC2TJO Daniel +7400092 HC2TJO Daniel +7400093 HC2TCT Armando +7400094 HC2TPF Francisco +7400095 HC2TOC Ivan +7400096 HC2TAW Andy +7400097 HC2TFV Fernando +7400098 HC2TRZ Xavier +7400099 HC2TUC Ulises +7400100 HC2TGA Gabriel +7400101 HC2TVY Adam +7400102 HC2TGL Luis +7400103 HC2TLI Luis +7400104 HC2TOB Oscar +7400105 HC2AD Allan +7400106 HC2TGO Anthony +7400107 HC2TVG Carlos +7400108 HC2TGU Maria +7400109 HC2TMO Victor +7400110 HC2TQA Alfredo +7400111 HC2TJF Juan +7400112 HC2TER Evelyn +7400113 HC2TFX Francisco +7400114 HC2TRV Rodolfo +7400115 HC2JV Julia +7400116 HC3TGP MARIA +7400117 HC3EL ELSA +7400118 HC3VL Victor +7400119 HC3AD Bernardo +7400120 HC3TEC Cristian +7400121 HC3TEE Erika +7400122 HC3TOF Fabian +7400123 HC3RE Ramiro +7400124 HC3MC Elizabeth +7400125 HC3BM MIGUEL +7400126 HC3TBA BOLIVAR +7400127 HC3JP John +7400128 HC3BA Bolivar +7400129 HC3RF Fabian +7400130 HC2TPC PABLO +7400131 HC2TKE Kleber +7400132 HC2JA Jorge +7400133 HC4TJV Jhonny +7400134 HC4TXB Xavier +7400135 HC2TJH JUAN +7400136 HC2TNL Nestor +7400137 HC2TCR Cesar +7400138 HC2TDP Dalton +7400139 HC2THM Hilda +7400140 HC2TSM Stephania +7400141 HC2TDD Alberto +7400142 HC2TVD Vicente +7400143 HC2TJB Julio +7400144 HC2TGE Angie +7400145 HC2TFB Josue +7400146 HC2TAB Washington +7400147 HC2ZW Eduardo +7400148 HC2ZW Eduardo +7400149 HC6AC Angel +7400150 HC6AC Angel +7400151 HC2TSO SEGUNDO 7440001 ZP3BGA Jose 7440002 ZP3BGA Jose +7440003 ZP4MNB Gesiel +7440004 ZP4MNB Gesiel +7440005 ZP6ACS Hugo +7440006 ZP6RF Fernando 7441001 ZP5ZDM Christian 7441002 ZP4KFX Pino 7441003 ZP6DEM David @@ -109128,6 +145045,8 @@ 7480016 CX2RH Hector 7480017 CX2TG Deyver 7480018 CX7RL Rudy +7480019 CX1LA Juan +7480020 CX5AET Leonardo 7480021 CX8BIT Guillermo 7480022 CX8ACV Juan 7480023 CX3AF Marcelo @@ -109146,6 +145065,88 @@ 7480036 CX2CI Julio 7480037 CX3DDJ Hector 7480038 CX3DDJ Hector +7480039 CX1AZ Margarita +7480040 CX1DBF Fernando +7480041 CX2AQ Richard +7480042 CX2BBZ Wilmar +7480043 CX4ABW Jose +7480044 CX4ABW Jose +7480045 CX2UI Francisco +7480046 CX1S Radio +7480047 CX1AA +7480048 CX3SS Gerardo +7480049 CX3SS Gerardo +7480050 CX1SL Eduardo +7480051 CX1SH Reinaldo +7480052 CX3SN Eduardo +7480053 CX1SU Jose +7480054 CX2SA Jose +7480055 CX1SI Jorge +7480056 CX1VH Gustavo +7480057 CX2ST Adriana +7480058 CX3SM Antonio +7480059 CX7ACH Pablo +7480060 CX3BXX JULIO +7480061 CX4SI Hector +7480062 CX4TR Cesar +7480063 CX3CN Alejandro +7480064 CX5TG Federico +7480065 CX6BX Federico +7480066 CX5TG Federico +7480067 CX5RM Emiliano +7480068 CX1SG Osvaldo +7480069 CX9AU Daniel +7480070 CX2SZ Marta +7480071 CX1SF Jose +7480072 CX1GN Jose +7480073 CX5A Radiogrupo +7480074 CX1ME Milton +7480075 CX1ME Milton +7480076 CX1CW Oscar +7480077 CX1CW Oscar +7480078 CW1GM RADIOGRUPO +7480079 CX2AN Jose +7480080 CX6AT Daniel +7480081 CX1DA Wildemar +7480082 CX1DA Wildemar +7480083 CX1ANM Norman +7480084 CX5DAB Adrian +7480085 CX1T Centro +7480086 CX2TQ Jose +7480087 CX2JO Javier +7480088 CX2JO Javier +7480089 CX2TXX CRR +7480090 CX1VE Carlos +7480091 CX8CLA Robert +7480092 CX8CLA Robert +7480093 CX1ABW Daniel +7480094 CX2ACB Oscar +7480095 CX2FX Dario +7480096 CX2FX Dario +7480097 CX5BDE Jose +7480098 CX9BW Pablo +7480099 CX3BBX Daniel +7480100 CX5RI Pablo +7480101 CX6RO Alberto +7480102 CX1CGA Gustavo +7480103 CX8BAT Marcelo +7480104 CX1AP Alberto +7480105 CX1RMS None +7480106 CX2ABC Lupo +7480107 CX5AZ Ignacio +7480108 CX1DDS Diego +7480109 CX5ACC Antonio +7480110 CX1DB Eduardo +7480111 CX2TN Ruben +7480112 CX5TS Rodolfo +7480113 CX5TS Rodolfo +7480114 CX2DAJ (Wald) +7480115 CX6DP Pedro +7480116 CX1DDM Oscar +7480117 CX5AA Federico +7480118 CX1CCC CRAM +7480119 CX1CCC CRAM +7480120 CX3BCH Herbert 7481001 CX2AL Hipolito 7481002 CX1RK Miguel 7481003 CX9BX Edgardo @@ -109190,16 +145191,15 @@ 7481045 CX4ID Sergio 7481047 CX3DAO Pablo 7481048 CX4LA Cesar -7481049 CX1ABR Pablo -7481050 CX1ABR Pablo +7481049 CX9DE Pablo +7481050 CX9DE Pablo 7481052 CX6ACY Nelson 7481053 CX7DW Diego 7481054 CX2BT Felipe 7481055 CX7BT Santiago -7481056 CX1AA 7481057 CX9BU Richard 7481058 CX9BU Richard -7481059 CX4BAL Font +7481059 CX4BAL JUAN 7481060 CX4BAZ Mariana 7481061 CX2FH Jorge 7481062 CX5RN Martin @@ -109227,7 +145227,7 @@ 7481091 CX1DK Dardo 7481092 CX4BAN Enrique 7481093 CX7RC Freddy -7481094 CX8CAI +7481094 CX8CAI Cristina 7481095 CX1BBN Eduardo 7482001 CX5DE Jose 7482002 CX7DT Sebastian diff --git a/DMRLC.cpp b/DMRLC.cpp index 8dd897b6c..64336470c 100644 --- a/DMRLC.cpp +++ b/DMRLC.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2019,2021,2022 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -184,6 +184,19 @@ void CDMRLC::setFID(unsigned char fid) m_FID = fid; } +bool CDMRLC::getOVCM() const +{ + return (m_options & 0x04U) == 0x04U; +} + +void CDMRLC::setOVCM(bool ovcm) +{ + if (ovcm) + m_options |= 0x04U; + else + m_options &= 0xFBU; +} + unsigned int CDMRLC::getSrcId() const { return m_srcId; diff --git a/DMRLC.h b/DMRLC.h index 9f3a46455..22e133e36 100644 --- a/DMRLC.h +++ b/DMRLC.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2019,2021,2022 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,6 +39,9 @@ class CDMRLC FLCO getFLCO() const; void setFLCO(FLCO flco); + bool getOVCM() const; + void setOVCM(bool ovcm); + unsigned char getFID() const; void setFID(unsigned char fid); diff --git a/DMRLookup.cpp b/DMRLookup.cpp index 8fc67c34c..413a95072 100644 --- a/DMRLookup.cpp +++ b/DMRLookup.cpp @@ -30,8 +30,8 @@ CThread(), m_filename(filename), m_reloadTime(reloadTime), m_table(), -m_mutex(), -m_stop(false) +m_stop(false), +m_reload(false) { } @@ -41,7 +41,7 @@ CDMRLookup::~CDMRLookup() bool CDMRLookup::read() { - bool ret = load(); + bool ret = m_table.load(m_filename); if (m_reloadTime > 0U) run(); @@ -49,6 +49,14 @@ bool CDMRLookup::read() return ret; } +void CDMRLookup::reload() +{ + if (m_reloadTime == 0U) + m_table.load(m_filename); + else + m_reload = true; +} + void CDMRLookup::entry() { LogInfo("Started the DMR Id lookup reload thread"); @@ -60,9 +68,10 @@ void CDMRLookup::entry() sleep(1000U); timer.clock(); - if (timer.hasExpired()) { - load(); + if (timer.hasExpired() || m_reload) { + m_table.load(m_filename); timer.start(); + m_reload = false; } } @@ -81,118 +90,47 @@ void CDMRLookup::stop() wait(); } -std::string CDMRLookup::findWithName(unsigned int id) +void CDMRLookup::findWithName(unsigned int id, class CUserDBentry *entry) { - std::string callsign; - - if (id == 0xFFFFFFU) - return std::string("ALL"); + if (id == 0xFFFFFFU) { + entry->clear(); + entry->set(keyCALLSIGN, "ALL"); + return; + } - m_mutex.lock(); + if (m_table.lookup(id, entry)) { + LogDebug("FindWithName =%s %s", entry->get(keyCALLSIGN).c_str(), entry->get(keyFIRST_NAME).c_str()); + } else { + entry->clear(); - try { - callsign = m_table.at(id); - LogDebug("FindWithName =%s",callsign.c_str()); - - } catch (...) { char text[10U]; - ::sprintf(text, "%u", id); - callsign = std::string(text); + ::snprintf(text, sizeof(text), "%u", id); + entry->set(keyCALLSIGN, text); } - m_mutex.unlock(); - - return callsign; + return; } + std::string CDMRLookup::find(unsigned int id) { std::string callsign; - std::string b; - - + if (id == 0xFFFFFFU) return std::string("ALL"); - m_mutex.lock(); - - try { - b = m_table.at(id); - size_t n = b.find(" "); - if (n > 0) { - callsign = b.substr(0,n); - - } else { - LogDebug("b=%s",b.c_str()); - callsign = b; - } - - } catch (...) { + class CUserDBentry entry; + if (m_table.lookup(id, &entry)) { + callsign = entry.get(keyCALLSIGN); + } else { char text[10U]; - ::sprintf(text, "%u", id); + ::snprintf(text, sizeof(text), "%u", id); callsign = std::string(text); } - m_mutex.unlock(); - return callsign; } bool CDMRLookup::exists(unsigned int id) { - m_mutex.lock(); - - bool found = m_table.count(id) == 1U; - - m_mutex.unlock(); - - return found; + return m_table.lookup(id, NULL); } - -bool CDMRLookup::load() -{ - FILE* fp = ::fopen(m_filename.c_str(), "rt"); - if (fp == NULL) { - LogWarning("Cannot open the DMR Id lookup file - %s", m_filename.c_str()); - return false; - } - - m_mutex.lock(); - - // Remove the old entries - m_table.clear(); - - char buffer[100U]; - while (::fgets(buffer, 100U, fp) != NULL) { - if (buffer[0U] == '#') - continue; - - char* p1 = ::strtok(buffer, " \t\r\n"); - char* p2 = ::strtok(NULL, " \r\n"); // tokenize to eol to capture name as well - - if (p1 != NULL && p2 != NULL) { - unsigned int id = (unsigned int)::atoi(p1); - for (char* p = p2; *p != 0x00U; p++) { - - if(*p == 0x09U) - *p = 0x20U; - - else - *p = ::toupper(*p); - - } - m_table[id] = std::string(p2); - } - } - - m_mutex.unlock(); - - ::fclose(fp); - - size_t size = m_table.size(); - if (size == 0U) - return false; - - LogInfo("Loaded %u Ids to the DMR callsign lookup table", size); - - return true; -} \ No newline at end of file diff --git a/DMRLookup.h b/DMRLookup.h index 1156270d4..2a9de72e5 100644 --- a/DMRLookup.h +++ b/DMRLookup.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2017,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,10 +20,9 @@ #define DMRLookup_H #include "Thread.h" -#include "Mutex.h" +#include "UserDB.h" #include -#include class CDMRLookup : public CThread { public: @@ -32,23 +31,23 @@ class CDMRLookup : public CThread { bool read(); + void reload(); + virtual void entry(); std::string find(unsigned int id); - std::string findWithName(unsigned int id); + void findWithName(unsigned int id, class CUserDBentry *entry); bool exists(unsigned int id); void stop(); private: - std::string m_filename; - unsigned int m_reloadTime; - std::unordered_map m_table; - CMutex m_mutex; - bool m_stop; - - bool load(); + std::string m_filename; + unsigned int m_reloadTime; + class CUserDB m_table; + bool m_stop; + bool m_reload; }; #endif diff --git a/DMRNetwork.cpp b/DMRNetwork.cpp index 7301b5a19..4b1b77c56 100644 --- a/DMRNetwork.cpp +++ b/DMRNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,656 +18,6 @@ #include "DMRNetwork.h" -#include "StopWatch.h" -#include "SHA256.h" -#include "Utils.h" -#include "Log.h" - -#include -#include -#include -#include - -const unsigned int BUFFER_LENGTH = 500U; - -const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; - - -CDMRNetwork::CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, HW_TYPE hwType) : -m_addressStr(address), -m_address(), -m_port(port), -m_id(NULL), -m_password(password), -m_duplex(duplex), -m_version(version), -m_debug(debug), -m_socket(local), -m_enabled(false), -m_slot1(slot1), -m_slot2(slot2), -m_hwType(hwType), -m_status(WAITING_CONNECT), -m_retryTimer(1000U, 10U), -m_timeoutTimer(1000U, 60U), -m_buffer(NULL), -m_salt(NULL), -m_streamId(NULL), -m_rxData(1000U, "DMR Network"), -m_options(), -m_callsign(), -m_rxFrequency(0U), -m_txFrequency(0U), -m_power(0U), -m_colorCode(0U), -m_latitude(0.0F), -m_longitude(0.0F), -m_height(0), -m_location(), -m_description(), -m_url(), -m_beacon(false) -{ - assert(!address.empty()); - assert(port > 0U); - assert(id > 1000U); - assert(!password.empty()); - - m_address = CUDPSocket::lookup(address); - - m_buffer = new unsigned char[BUFFER_LENGTH]; - m_salt = new unsigned char[sizeof(uint32_t)]; - m_id = new uint8_t[4U]; - m_streamId = new uint32_t[2U]; - - m_id[0U] = id >> 24; - m_id[1U] = id >> 16; - m_id[2U] = id >> 8; - m_id[3U] = id >> 0; - - CStopWatch stopWatch; - ::srand(stopWatch.start()); - - m_streamId[0U] = ::rand() + 1U; - m_streamId[1U] = ::rand() + 1U; -} - -CDMRNetwork::~CDMRNetwork() -{ - delete[] m_buffer; - delete[] m_salt; - delete[] m_streamId; - delete[] m_id; -} - -void CDMRNetwork::setOptions(const std::string& options) -{ - m_options = options; -} - -void CDMRNetwork::setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url) -{ - m_callsign = callsign; - m_rxFrequency = rxFrequency; - m_txFrequency = txFrequency; - m_power = power; - m_colorCode = colorCode; - m_latitude = latitude; - m_longitude = longitude; - m_height = height; - m_location = location; - m_description = description; - m_url = url; -} - -bool CDMRNetwork::open() -{ - LogMessage("DMR, Opening DMR Network"); - - if (m_address.s_addr == INADDR_NONE) - m_address = CUDPSocket::lookup(m_addressStr); - - m_status = WAITING_CONNECT; - m_timeoutTimer.stop(); - m_retryTimer.start(); - - return true; -} - -void CDMRNetwork::enable(bool enabled) -{ - m_enabled = enabled; -} - -bool CDMRNetwork::read(CDMRData& data) -{ - if (m_status != RUNNING) - return false; - - if (m_rxData.isEmpty()) - return false; - - unsigned char length = 0U; - m_rxData.getData(&length, 1U); - m_rxData.getData(m_buffer, length); - - // Is this a data packet? - if (::memcmp(m_buffer, "DMRD", 4U) != 0) - return false; - - unsigned char seqNo = m_buffer[4U]; - - unsigned int srcId = (m_buffer[5U] << 16) | (m_buffer[6U] << 8) | (m_buffer[7U] << 0); - - unsigned int dstId = (m_buffer[8U] << 16) | (m_buffer[9U] << 8) | (m_buffer[10U] << 0); - - unsigned int slotNo = (m_buffer[15U] & 0x80U) == 0x80U ? 2U : 1U; - - // DMO mode slot disabling - if (slotNo == 1U && !m_duplex) - return false; - - // Individual slot disabling - if (slotNo == 1U && !m_slot1) - return false; - if (slotNo == 2U && !m_slot2) - return false; - - FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO_USER_USER : FLCO_GROUP; - - data.setSeqNo(seqNo); - data.setSlotNo(slotNo); - data.setSrcId(srcId); - data.setDstId(dstId); - data.setFLCO(flco); - - bool dataSync = (m_buffer[15U] & 0x20U) == 0x20U; - bool voiceSync = (m_buffer[15U] & 0x10U) == 0x10U; - - if (dataSync) { - unsigned char dataType = m_buffer[15U] & 0x0FU; - data.setData(m_buffer + 20U); - data.setDataType(dataType); - data.setN(0U); - } else if (voiceSync) { - data.setData(m_buffer + 20U); - data.setDataType(DT_VOICE_SYNC); - data.setN(0U); - } else { - unsigned char n = m_buffer[15U] & 0x0FU; - data.setData(m_buffer + 20U); - data.setDataType(DT_VOICE); - data.setN(n); - } - - return true; -} - -bool CDMRNetwork::write(const CDMRData& data) -{ - if (m_status != RUNNING) - return false; - - unsigned char buffer[HOMEBREW_DATA_PACKET_LENGTH]; - ::memset(buffer, 0x00U, HOMEBREW_DATA_PACKET_LENGTH); - - buffer[0U] = 'D'; - buffer[1U] = 'M'; - buffer[2U] = 'R'; - buffer[3U] = 'D'; - - unsigned int srcId = data.getSrcId(); - buffer[5U] = srcId >> 16; - buffer[6U] = srcId >> 8; - buffer[7U] = srcId >> 0; - - unsigned int dstId = data.getDstId(); - buffer[8U] = dstId >> 16; - buffer[9U] = dstId >> 8; - buffer[10U] = dstId >> 0; - - ::memcpy(buffer + 11U, m_id, 4U); - - unsigned int slotNo = data.getSlotNo(); - - // Individual slot disabling - if (slotNo == 1U && !m_slot1) - return false; - if (slotNo == 2U && !m_slot2) - return false; - - buffer[15U] = slotNo == 1U ? 0x00U : 0x80U; - - FLCO flco = data.getFLCO(); - buffer[15U] |= flco == FLCO_GROUP ? 0x00U : 0x40U; - - unsigned int slotIndex = slotNo - 1U; - - unsigned int count = 1U; - - unsigned char dataType = data.getDataType(); - if (dataType == DT_VOICE_SYNC) { - buffer[15U] |= 0x10U; - } else if (dataType == DT_VOICE) { - buffer[15U] |= data.getN(); - } else { - if (dataType == DT_VOICE_LC_HEADER) { - m_streamId[slotIndex] = ::rand() + 1U; - count = 2U; - } - - if (dataType == DT_CSBK || dataType == DT_DATA_HEADER) { - m_streamId[slotIndex] = ::rand() + 1U; - count = 1U; - } - - buffer[15U] |= (0x20U | dataType); - } - - buffer[4U] = data.getSeqNo(); - - ::memcpy(buffer + 16U, m_streamId + slotIndex, 4U); - - data.getData(buffer + 20U); - - buffer[53U] = data.getBER(); - - buffer[54U] = data.getRSSI(); - - if (m_debug) - CUtils::dump(1U, "Network Transmitted", buffer, HOMEBREW_DATA_PACKET_LENGTH); - - for (unsigned int i = 0U; i < count; i++) - write(buffer, HOMEBREW_DATA_PACKET_LENGTH); - - return true; -} - -bool CDMRNetwork::writeRadioPosition(unsigned int id, const unsigned char* data) -{ - if (m_status != RUNNING) - return false; - - unsigned char buffer[20U]; - - ::memcpy(buffer + 0U, "DMRG", 4U); - - ::memcpy(buffer + 4U, m_id, 4U); - - buffer[8U] = id >> 16; - buffer[9U] = id >> 8; - buffer[10U] = id >> 0; - - ::memcpy(buffer + 11U, data + 2U, 7U); - - return write(buffer, 18U); -} - -bool CDMRNetwork::writeTalkerAlias(unsigned int id, unsigned char type, const unsigned char* data) +IDMRNetwork::~IDMRNetwork() { - if (m_status != RUNNING) - return false; - - unsigned char buffer[20U]; - - ::memcpy(buffer + 0U, "DMRA", 4U); - - ::memcpy(buffer + 4U, m_id, 4U); - - buffer[8U] = id >> 16; - buffer[9U] = id >> 8; - buffer[10U] = id >> 0; - - buffer[11U] = type; - - ::memcpy(buffer + 12U, data + 2U, 7U); - - return write(buffer, 19U); -} - -bool CDMRNetwork::writeHomePosition(float latitude, float longitude) -{ - m_latitude = latitude; - m_longitude = longitude; - - if (m_status != RUNNING) - return false; - - char buffer[50U]; - - ::memcpy(buffer + 0U, "RPTG", 4U); - ::memcpy(buffer + 4U, m_id, 4U); - - ::sprintf(buffer + 8U, "%08f%09f", latitude, longitude); - - return write((unsigned char*)buffer, 25U); -} - -void CDMRNetwork::close() -{ - LogMessage("DMR, Closing DMR Network"); - - if (m_status == RUNNING) { - unsigned char buffer[9U]; - ::memcpy(buffer + 0U, "RPTCL", 5U); - ::memcpy(buffer + 5U, m_id, 4U); - write(buffer, 9U); - } - - m_socket.close(); - - m_retryTimer.stop(); - m_timeoutTimer.stop(); -} - -void CDMRNetwork::clock(unsigned int ms) -{ - if (m_status == WAITING_CONNECT) { - m_retryTimer.clock(ms); - if (m_retryTimer.isRunning() && m_retryTimer.hasExpired()) { - bool ret = m_socket.open(); - if (ret) { - ret = writeLogin(); - if (!ret) - return; - - m_status = WAITING_LOGIN; - m_timeoutTimer.start(); - } - - m_retryTimer.start(); - } - - return; - } - - in_addr address; - unsigned int port; - int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, port); - if (length < 0) { - LogError("DMR, Socket has failed, retrying connection to the master"); - close(); - open(); - return; - } - - // if (m_debug && length > 0) - // CUtils::dump(1U, "Network Received", m_buffer, length); - - if (length > 0 && m_address.s_addr == address.s_addr && m_port == port) { - if (::memcmp(m_buffer, "DMRD", 4U) == 0) { - if (m_enabled) { - if (m_debug) - CUtils::dump(1U, "Network Received", m_buffer, length); - - unsigned char len = length; - m_rxData.addData(&len, 1U); - m_rxData.addData(m_buffer, len); - } - } else if (::memcmp(m_buffer, "MSTNAK", 6U) == 0) { - if (m_status == RUNNING) { - LogWarning("DMR, Login to the master has failed, retrying login ..."); - m_status = WAITING_LOGIN; - m_timeoutTimer.start(); - m_retryTimer.start(); - } else { - /* Once the modem death spiral has been prevented in Modem.cpp - the Network sometimes times out and reaches here. - We want it to reconnect so... */ - LogError("DMR, Login to the master has failed, retrying network ..."); - close(); - open(); - return; - } - } else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) { - switch (m_status) { - case WAITING_LOGIN: - LogDebug("DMR, Sending authorisation"); - ::memcpy(m_salt, m_buffer + 6U, sizeof(uint32_t)); - writeAuthorisation(); - m_status = WAITING_AUTHORISATION; - m_timeoutTimer.start(); - m_retryTimer.start(); - break; - case WAITING_AUTHORISATION: - LogDebug("DMR, Sending configuration"); - writeConfig(); - m_status = WAITING_CONFIG; - m_timeoutTimer.start(); - m_retryTimer.start(); - break; - case WAITING_CONFIG: - if (m_options.empty()) { - LogMessage("DMR, Logged into the master successfully"); - m_status = RUNNING; - } else { - LogDebug("DMR, Sending options"); - writeOptions(); - m_status = WAITING_OPTIONS; - } - m_timeoutTimer.start(); - m_retryTimer.start(); - break; - case WAITING_OPTIONS: - LogMessage("DMR, Logged into the master successfully"); - m_status = RUNNING; - m_timeoutTimer.start(); - m_retryTimer.start(); - break; - default: - break; - } - } else if (::memcmp(m_buffer, "MSTCL", 5U) == 0) { - LogError("DMR, Master is closing down"); - close(); - open(); - } else if (::memcmp(m_buffer, "MSTPONG", 7U) == 0) { - m_timeoutTimer.start(); - } else if (::memcmp(m_buffer, "RPTSBKN", 7U) == 0) { - m_beacon = true; - } else { - CUtils::dump("Unknown packet from the master", m_buffer, length); - } - } - - m_retryTimer.clock(ms); - if (m_retryTimer.isRunning() && m_retryTimer.hasExpired()) { - switch (m_status) { - case WAITING_LOGIN: - writeLogin(); - break; - case WAITING_AUTHORISATION: - writeAuthorisation(); - break; - case WAITING_OPTIONS: - writeOptions(); - break; - case WAITING_CONFIG: - writeConfig(); - break; - case RUNNING: - writePing(); - break; - default: - break; - } - - m_retryTimer.start(); - } - - m_timeoutTimer.clock(ms); - if (m_timeoutTimer.isRunning() && m_timeoutTimer.hasExpired()) { - LogError("DMR, Connection to the master has timed out, retrying connection"); - close(); - open(); - } -} - -bool CDMRNetwork::writeLogin() -{ - unsigned char buffer[8U]; - - ::memcpy(buffer + 0U, "RPTL", 4U); - ::memcpy(buffer + 4U, m_id, 4U); - - return write(buffer, 8U); -} - -bool CDMRNetwork::writeAuthorisation() -{ - size_t size = m_password.size(); - - unsigned char* in = new unsigned char[size + sizeof(uint32_t)]; - ::memcpy(in, m_salt, sizeof(uint32_t)); - for (size_t i = 0U; i < size; i++) - in[i + sizeof(uint32_t)] = m_password.at(i); - - unsigned char out[40U]; - ::memcpy(out + 0U, "RPTK", 4U); - ::memcpy(out + 4U, m_id, 4U); - - CSHA256 sha256; - sha256.buffer(in, (unsigned int)(size + sizeof(uint32_t)), out + 8U); - - delete[] in; - - return write(out, 40U); -} - -bool CDMRNetwork::writeOptions() -{ - char buffer[300U]; - - ::memcpy(buffer + 0U, "RPTO", 4U); - ::memcpy(buffer + 4U, m_id, 4U); - ::strcpy(buffer + 8U, m_options.c_str()); - - return write((unsigned char*)buffer, (unsigned int)m_options.length() + 8U); -} - -bool CDMRNetwork::writeConfig() -{ - const char* software; - char slots = '0'; - if (m_duplex) { - if (m_slot1 && m_slot2) - slots = '3'; - else if (m_slot1 && !m_slot2) - slots = '1'; - else if (!m_slot1 && m_slot2) - slots = '2'; - - switch (m_hwType) { - case HWT_MMDVM: - software = "MMDVM"; - break; - case HWT_MMDVM_HS: - software = "MMDVM_MMDVM_HS"; - break; - case HWT_MMDVM_HS_DUAL_HAT: - software = "MMDVM_MMDVM_HS_Dual_Hat"; - break; - case HWT_NANO_HOTSPOT: - software = "MMDVM_Nano_hotSPOT"; - break; - default: - software = "MMDVM_Unknown"; - break; - } - } else { - slots = '4'; - - switch (m_hwType) { - case HWT_MMDVM: - software = "MMDVM_DMO"; - break; - case HWT_DVMEGA: - software = "MMDVM_DVMega"; - break; - case HWT_MMDVM_ZUMSPOT: - software = "MMDVM_ZUMspot"; - break; - case HWT_MMDVM_HS_HAT: - software = "MMDVM_MMDVM_HS_Hat"; - break; - case HWT_MMDVM_HS_DUAL_HAT: - software = "MMDVM_MMDVM_HS_Dual_Hat"; - break; - case HWT_NANO_HOTSPOT: - software = "MMDVM_Nano_hotSPOT"; - break; - case HWT_NANO_DV: - software = "MMDVM_Nano_DV"; - break; - case HWT_MMDVM_HS: - software = "MMDVM_MMDVM_HS"; - break; - default: - software = "MMDVM_Unknown"; - break; - } - } - - char buffer[400U]; - - ::memcpy(buffer + 0U, "RPTC", 4U); - ::memcpy(buffer + 4U, m_id, 4U); - - char latitude[20U]; - ::sprintf(latitude, "%08f", m_latitude); - - char longitude[20U]; - ::sprintf(longitude, "%09f", m_longitude); - - unsigned int power = m_power; - if (power > 99U) - power = 99U; - - int height = m_height; - if (height > 999) - height = 999; - - ::sprintf(buffer + 8U, "%-8.8s%09u%09u%02u%02u%8.8s%9.9s%03d%-20.20s%-19.19s%c%-124.124s%-40.40s%-40.40s", m_callsign.c_str(), - m_rxFrequency, m_txFrequency, power, m_colorCode, latitude, longitude, height, m_location.c_str(), - m_description.c_str(), slots, m_url.c_str(), m_version, software); - - return write((unsigned char*)buffer, 302U); -} - -bool CDMRNetwork::writePing() -{ - unsigned char buffer[11U]; - - ::memcpy(buffer + 0U, "RPTPING", 7U); - ::memcpy(buffer + 7U, m_id, 4U); - - return write(buffer, 11U); -} - -bool CDMRNetwork::wantsBeacon() -{ - bool beacon = m_beacon; - - m_beacon = false; - - return beacon; -} - -bool CDMRNetwork::write(const unsigned char* data, unsigned int length) -{ - assert(data != NULL); - assert(length > 0U); - - // if (m_debug) - // CUtils::dump(1U, "Network Transmitted", data, length); - - bool ret = m_socket.write(data, length, m_address, m_port); - if (!ret) { - LogError("DMR, Socket has failed when writing data to the master, retrying connection"); - m_socket.close(); - open(); - return false; - } - - return true; } diff --git a/DMRNetwork.h b/DMRNetwork.h index 9d1c52ea0..006e09789 100644 --- a/DMRNetwork.h +++ b/DMRNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,101 +19,40 @@ #if !defined(DMRNetwork_H) #define DMRNetwork_H -#include "UDPSocket.h" -#include "Timer.h" -#include "RingBuffer.h" #include "DMRData.h" -#include "Defines.h" #include -#include -class CDMRNetwork +class IDMRNetwork { public: - CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, HW_TYPE hwType); - ~CDMRNetwork(); + virtual ~IDMRNetwork() = 0; - void setOptions(const std::string& options); + virtual void setOptions(const std::string& options) = 0; - void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url); + virtual void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url) = 0; - bool open(); + virtual bool open() = 0; - void enable(bool enabled); + virtual void enable(bool enabled) = 0; - bool read(CDMRData& data); + virtual bool read(CDMRData& data) = 0; - bool write(const CDMRData& data); + virtual bool write(const CDMRData& data) = 0; - bool writeRadioPosition(unsigned int id, const unsigned char* data); + virtual bool writeRadioPosition(unsigned int id, const unsigned char* data) = 0; - bool writeTalkerAlias(unsigned int id, unsigned char type, const unsigned char* data); + virtual bool writeTalkerAlias(unsigned int id, unsigned char type, const unsigned char* data) = 0; - bool writeHomePosition(float latitude, float longitude); + virtual bool wantsBeacon() = 0; - bool wantsBeacon(); + virtual void clock(unsigned int ms) = 0; - void clock(unsigned int ms); + virtual bool isConnected() const = 0; - void close(); + virtual void close(bool sayGoodbye) = 0; private: - std::string m_addressStr; - in_addr m_address; - unsigned int m_port; - uint8_t* m_id; - std::string m_password; - bool m_duplex; - const char* m_version; - bool m_debug; - CUDPSocket m_socket; - bool m_enabled; - bool m_slot1; - bool m_slot2; - HW_TYPE m_hwType; - - enum STATUS { - WAITING_CONNECT, - WAITING_LOGIN, - WAITING_AUTHORISATION, - WAITING_CONFIG, - WAITING_OPTIONS, - RUNNING - }; - - STATUS m_status; - CTimer m_retryTimer; - CTimer m_timeoutTimer; - unsigned char* m_buffer; - unsigned char* m_salt; - uint32_t* m_streamId; - - CRingBuffer m_rxData; - - std::string m_options; - - std::string m_callsign; - unsigned int m_rxFrequency; - unsigned int m_txFrequency; - unsigned int m_power; - unsigned int m_colorCode; - float m_latitude; - float m_longitude; - int m_height; - std::string m_location; - std::string m_description; - std::string m_url; - - bool m_beacon; - - bool writeLogin(); - bool writeAuthorisation(); - bool writeOptions(); - bool writeConfig(); - bool writePing(); - - bool write(const unsigned char* data, unsigned int length); }; #endif diff --git a/DMRSlot.cpp b/DMRSlot.cpp index a26da2dd3..e66e11cf6 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX + * Copyright (C) 2015-2021,2023 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,11 +38,12 @@ bool CDMRSlot::m_embeddedLCOnly = false; bool CDMRSlot::m_dumpTAData = true; CModem* CDMRSlot::m_modem = NULL; -CDMRNetwork* CDMRSlot::m_network = NULL; +IDMRNetwork* CDMRSlot::m_network = NULL; CDisplay* CDMRSlot::m_display = NULL; bool CDMRSlot::m_duplex = true; CDMRLookup* CDMRSlot::m_lookup = NULL; unsigned int CDMRSlot::m_hangCount = 3U * 17U; +DMR_OVCM_TYPES CDMRSlot::m_ovcm = DMR_OVCM_OFF; CRSSIInterpolator* CDMRSlot::m_rssiMapper = NULL; @@ -80,12 +81,13 @@ m_rfEmbeddedData(NULL), m_rfEmbeddedReadN(0U), m_rfEmbeddedWriteN(1U), m_rfTalkerId(TALKER_ID_NONE), -m_rfTalkerAlias(), +m_rfTalkerAlias(slotNo), m_netEmbeddedLC(), m_netEmbeddedData(NULL), m_netEmbeddedReadN(0U), m_netEmbeddedWriteN(1U), m_netTalkerId(TALKER_ID_NONE), +m_netTalkerAlias(slotNo), m_rfLC(NULL), m_netLC(NULL), m_rfSeqNo(0U), @@ -115,6 +117,7 @@ m_maxRSSI(0U), m_minRSSI(0U), m_aveRSSI(0U), m_rssiCount(0U), +m_enabled(true), m_fp(NULL) { m_lastFrame = new unsigned char[DMR_FRAME_LENGTH_BYTES + 2U]; @@ -136,11 +139,18 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) { assert(data != NULL); + if (!m_enabled) + return false; + if (data[0U] == TAG_LOST && m_rfState == RS_RF_AUDIO) { + std::string src = m_lookup->find(m_rfLC->getSrcId()); + std::string dst = m_lookup->find(m_rfLC->getDstId()); + FLCO flco = m_rfLC->getFLCO(); + if (m_rssi != 0U) - LogMessage("DMR Slot %u, RF voice transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("DMR Slot %u, RF voice transmission lost from %s to %s%s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("DMR Slot %u, RF voice transmission lost, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("DMR Slot %u, RF voice transmission lost from %s to %s%s, %.1f seconds, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); if (m_rfTimeout) { writeEndRF(); return false; @@ -151,7 +161,11 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } if (data[0U] == TAG_LOST && m_rfState == RS_RF_DATA) { - LogMessage("DMR Slot %u, RF data transmission lost", m_slotNo); + std::string src = m_lookup->find(m_rfLC->getSrcId()); + std::string dst = m_lookup->find(m_rfLC->getDstId()); + FLCO flco = m_rfLC->getFLCO(); + + LogMessage("DMR Slot %u, RF data transmission lost from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str()); writeEndRF(); return false; } @@ -211,15 +225,22 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!CDMRAccessControl::validateSrcId(srcId)) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); delete lc; + m_rfState = RS_RF_LISTENING; return false; } if (!CDMRAccessControl::validateTGId(m_slotNo, flco == FLCO_GROUP, dstId)) { LogMessage("DMR Slot %u, RF user %u rejected for using TG %u", m_slotNo, srcId, dstId); delete lc; + m_rfState = RS_RF_LISTENING; return false; } + if (m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON) + lc->setOVCM(true); + else if (m_ovcm == DMR_OVCM_FORCE_OFF) + lc->setOVCM(false); + m_rfLC = lc; // The standby LC data @@ -323,7 +344,6 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) data[0U] = TAG_EOT; data[1U] = 0x00U; - writeNetworkRF(data, DT_TERMINATOR_WITH_LC); writeNetworkRF(data, DT_TERMINATOR_WITH_LC); if (m_duplex) { @@ -332,10 +352,14 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } } + std::string src = m_lookup->find(m_rfLC->getSrcId()); + std::string dst = m_lookup->find(m_rfLC->getDstId()); + FLCO flco = m_rfLC->getFLCO(); + if (m_rssi != 0U) - LogMessage("DMR Slot %u, received RF end of voice transmission, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("DMR Slot %u, received RF end of voice transmission from %s to %s%s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("DMR Slot %u, received RF end of voice transmission, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("DMR Slot %u, received RF end of voice transmission from %s to %s%s, %.1f seconds, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); m_display->writeDMRTA(m_slotNo, NULL, " "); @@ -361,11 +385,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!CDMRAccessControl::validateSrcId(srcId)) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); + m_rfState = RS_RF_LISTENING; return false; } if (!CDMRAccessControl::validateTGId(m_slotNo, gi, dstId)) { LogMessage("DMR Slot %u, RF user %u rejected for using TG %u", m_slotNo, srcId, dstId); + m_rfState = RS_RF_LISTENING; return false; } @@ -404,7 +430,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) LogMessage("DMR Slot %u, received RF data header from %s to %s%s, %u blocks", m_slotNo, src.c_str(), gi ? "TG ": "", dst.c_str(), m_rfFrames); if (m_rfFrames == 0U) { - LogMessage("DMR Slot %u, ended RF data transmission", m_slotNo); + LogMessage("DMR Slot %u, ended RF data transmission from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); writeEndRF(); } @@ -419,6 +445,12 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (csbko == CSBKO_BSDWNACT) return false; + // set the OVCM bit for the supported csbk + if (m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON) + csbk.setOVCM(true); + else if (m_ovcm == DMR_OVCM_FORCE_OFF) + csbk.setOVCM(false); + bool gi = csbk.getGI(); unsigned int srcId = csbk.getSrcId(); unsigned int dstId = csbk.getDstId(); @@ -426,11 +458,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (srcId != 0U || dstId != 0U) { if (!CDMRAccessControl::validateSrcId(srcId)) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); + m_rfState = RS_RF_LISTENING; return false; } if (!CDMRAccessControl::validateTGId(m_slotNo, gi, dstId)) { LogMessage("DMR Slot %u, RF user %u rejected for using TG %u", m_slotNo, srcId, dstId); + m_rfState = RS_RF_LISTENING; return false; } } @@ -468,6 +502,18 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) case CSBKO_PRECCSBK: LogMessage("DMR Slot %u, received RF %s Preamble CSBK (%u to follow) from %s to %s%s", m_slotNo, csbk.getDataContent() ? "Data" : "CSBK", csbk.getCBF(), src.c_str(), gi ? "TG ": "", dst.c_str()); break; + case CSBKO_CALL_ALERT: + LogMessage("DMR Slot %u, received RF Call Alert CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); + break; + case CSBKO_CALL_ALERT_ACK: + LogMessage("DMR Slot %u, received RF Call Alert Ack CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); + break; + case CSBKO_RADIO_CHECK: + LogMessage("DMR Slot %u, received RF Radio Check %s CSBK from %s to %s%s", m_slotNo, /* TBD */ 1 ? "Req" : "Ack", src.c_str(), gi ? "TG " : "", dst.c_str()); + break; + case CSBKO_CALL_EMERGENCY: + LogMessage("DMR Slot %u, received RF Call Emergency CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); + break; default: LogWarning("DMR Slot %u, unhandled RF CSBK type - 0x%02X", m_slotNo, csbko); break; @@ -485,22 +531,30 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (m_rfState != RS_RF_DATA || m_rfFrames == 0U) return false; + char title[80U]; // Regenerate the rate 1/2 payload if (dataType == DT_RATE_12_DATA) { CBPTC19696 bptc; unsigned char payload[12U]; bptc.decode(data + 2U, payload); + ::sprintf(title, "DMR Slot %u, Data 1/2", m_slotNo); + CUtils::dump(1U, title, payload, 12U); bptc.encode(payload, data + 2U); } else if (dataType == DT_RATE_34_DATA) { CDMRTrellis trellis; unsigned char payload[18U]; bool ret = trellis.decode(data + 2U, payload); if (ret) { + ::sprintf(title, "DMR Slot %u, Data 3/4", m_slotNo); + CUtils::dump(1U, title, payload, 18U); trellis.encode(payload, data + 2U); } else { LogMessage("DMR Slot %u, unfixable RF rate 3/4 data", m_slotNo); CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); } + } else { + ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); + CUtils::dump(1U, title, data + 2U, 24U); } // Regenerate the Slot Type @@ -616,7 +670,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) case FLCO_GPS_INFO: if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded GPS Info", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); logGPSPosition(data); } if (m_network != NULL) @@ -630,12 +684,12 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!(m_rfTalkerId & TALKER_ID_HEADER)) { if (m_rfTalkerId == TALKER_ID_NONE) m_rfTalkerAlias.reset(); - m_rfTalkerAlias.add(0, data, 7U); - m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R"); + m_rfTalkerAlias.add(0U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias.get(), "R"); if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Header", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); } m_rfTalkerId |= TALKER_ID_HEADER; @@ -649,12 +703,12 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!(m_rfTalkerId & TALKER_ID_BLOCK1)) { if (m_rfTalkerId == TALKER_ID_NONE) m_rfTalkerAlias.reset(); - m_rfTalkerAlias.add(1, data, 7U); - m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R"); + m_rfTalkerAlias.add(1U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias.get(), "R"); if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 1", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); } m_rfTalkerId |= TALKER_ID_BLOCK1; @@ -668,12 +722,12 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!(m_rfTalkerId & TALKER_ID_BLOCK2)) { if (m_rfTalkerId == TALKER_ID_NONE) m_rfTalkerAlias.reset(); - m_rfTalkerAlias.add(2, data, 7U); - m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R"); + m_rfTalkerAlias.add(2U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias.get(), "R"); if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 2", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); } m_rfTalkerId |= TALKER_ID_BLOCK2; @@ -687,12 +741,12 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!(m_rfTalkerId & TALKER_ID_BLOCK3)) { if (m_rfTalkerId == TALKER_ID_NONE) m_rfTalkerAlias.reset(); - m_rfTalkerAlias.add(3, data, 7U); - m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R"); + m_rfTalkerAlias.add(3U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias.get(), "R"); if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 3", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); } m_rfTalkerId |= TALKER_ID_BLOCK3; @@ -759,15 +813,22 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!CDMRAccessControl::validateSrcId(srcId)) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); delete lc; + m_rfState = RS_RF_LISTENING; return false; } if (!CDMRAccessControl::validateTGId(m_slotNo, flco == FLCO_GROUP, dstId)) { LogMessage("DMR Slot %u, RF user %u rejected for using TG %u", m_slotNo, srcId, dstId); delete lc; + m_rfState = RS_RF_LISTENING; return false; } + if (m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON) + lc->setOVCM(true); + else if (m_ovcm == DMR_OVCM_FORCE_OFF) + lc->setOVCM(false); + m_rfLC = lc; // The standby LC data @@ -990,6 +1051,9 @@ void CDMRSlot::writeEndNet(bool writeEnd) void CDMRSlot::writeNetwork(const CDMRData& dmrData) { + if (!m_enabled) + return; + if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) return; @@ -1020,6 +1084,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) dmrData.getSrcId(), dmrData.getFLCO() == FLCO_GROUP ? "TG" : "", dmrData.getDstId(), srcId, flco == FLCO_GROUP ? "TG" : "", dstId); + if (m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON) + lc->setOVCM(true); + else if (m_ovcm == DMR_OVCM_FORCE_OFF) + lc->setOVCM(false); + m_netLC = lc; // The standby LC data @@ -1077,7 +1146,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) setShortLC(m_slotNo, dstId, flco, ACTIVITY_VOICE); std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); - std::string cn = m_lookup->findWithName(srcId); + class CUserDBentry cn; + m_lookup->findWithName(srcId, &cn); m_display->writeDMR(m_slotNo, cn, flco == FLCO_GROUP, dst, "N"); #if defined(DUMP_DMR) @@ -1093,6 +1163,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) unsigned int dstId = lc->getDstId(); unsigned int srcId = lc->getSrcId(); + if (m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON) + lc->setOVCM(true); + else if (m_ovcm == DMR_OVCM_FORCE_OFF) + lc->setOVCM(false); + m_netLC = lc; m_lastFrameValid = false; @@ -1143,11 +1218,12 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netState = RS_NET_AUDIO; setShortLC(m_slotNo, dstId, m_netLC->getFLCO(), ACTIVITY_VOICE); - std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); + class CUserDBentry cn; + m_lookup->findWithName(srcId, &cn); - m_display->writeDMR(m_slotNo, src, m_netLC->getFLCO() == FLCO_GROUP, dst, "N"); + m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO_GROUP, dst, "N"); LogMessage("DMR Slot %u, received network late entry from %s to %s%s", m_slotNo, src.c_str(), m_netLC->getFLCO() == FLCO_GROUP ? "TG " : "", dst.c_str()); } @@ -1209,9 +1285,13 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) writeFile(data); closeFile(); #endif + std::string src = m_lookup->find(m_netLC->getSrcId()); + std::string dst = m_lookup->find(m_netLC->getDstId()); + FLCO flco = m_netLC->getFLCO(); + // We've received the voice header and terminator haven't we? m_netFrames += 2U; - LogMessage("DMR Slot %u, received network end of voice transmission, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_slotNo, float(m_netFrames) / 16.667F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); + LogMessage("DMR Slot %u, received network end of voice transmission from %s to %s%s, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_netFrames) / 16.667F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); m_display->writeDMRTA(m_slotNo, NULL, " "); writeEndNet(); } else if (dataType == DT_DATA_HEADER) { @@ -1264,7 +1344,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) LogMessage("DMR Slot %u, received network data header from %s to %s%s, %u blocks", m_slotNo, src.c_str(), gi ? "TG ": "", dst.c_str(), m_netFrames); if (m_netFrames == 0U) { - LogMessage("DMR Slot %u, ended network data transmission", m_slotNo); + LogMessage("DMR Slot %u, ended network data transmission from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); writeEndNet(); } } else if (dataType == DT_VOICE_SYNC) { @@ -1274,6 +1354,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) unsigned int dstId = lc->getDstId(); unsigned int srcId = lc->getSrcId(); + if (m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON) + lc->setOVCM(true); + else if (m_ovcm == DMR_OVCM_FORCE_OFF) + lc->setOVCM(false); + m_netLC = lc; // The standby LC data @@ -1336,8 +1421,10 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); + class CUserDBentry cn; + m_lookup->findWithName(srcId, &cn); - m_display->writeDMR(m_slotNo, src, m_netLC->getFLCO() == FLCO_GROUP, dst, "N"); + m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO_GROUP, dst, "N"); LogMessage("DMR Slot %u, received network late entry from %s to %s%s", m_slotNo, src.c_str(), m_netLC->getFLCO() == FLCO_GROUP ? "TG " : "", dst.c_str()); } @@ -1416,20 +1503,20 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) case FLCO_GPS_INFO: if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded GPS Info", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); logGPSPosition(data); } break; case FLCO_TALKER_ALIAS_HEADER: if (!(m_netTalkerId & TALKER_ID_HEADER)) { if (!m_netTalkerId) - m_rfTalkerAlias.reset(); - m_rfTalkerAlias.add(0, data + 2U, 7U); - m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "N"); + m_netTalkerAlias.reset(); + m_netTalkerAlias.add(0U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_netTalkerAlias.get(), "N"); if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Header", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); } m_netTalkerId |= TALKER_ID_HEADER; @@ -1438,13 +1525,13 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) case FLCO_TALKER_ALIAS_BLOCK1: if (!(m_netTalkerId & TALKER_ID_BLOCK1)) { if (!m_netTalkerId) - m_rfTalkerAlias.reset(); - m_rfTalkerAlias.add(1, data + 2U, 7U); - m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "N"); + m_netTalkerAlias.reset(); + m_netTalkerAlias.add(1U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_netTalkerAlias.get(), "N"); if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 1", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); } m_netTalkerId |= TALKER_ID_BLOCK1; @@ -1453,13 +1540,13 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) case FLCO_TALKER_ALIAS_BLOCK2: if (!(m_netTalkerId & TALKER_ID_BLOCK2)) { if (!m_netTalkerId) - m_rfTalkerAlias.reset(); - m_rfTalkerAlias.add(2, data + 2U, 7U); - m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "N"); + m_netTalkerAlias.reset(); + m_netTalkerAlias.add(2U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_netTalkerAlias.get(), "N"); if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 2", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); } m_netTalkerId |= TALKER_ID_BLOCK2; @@ -1468,13 +1555,13 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) case FLCO_TALKER_ALIAS_BLOCK3: if (!(m_netTalkerId & TALKER_ID_BLOCK3)) { if (!m_netTalkerId) - m_rfTalkerAlias.reset(); - m_rfTalkerAlias.add(3, data+2U, 7U); - m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "N"); + m_netTalkerAlias.reset(); + m_netTalkerAlias.add(3U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_netTalkerAlias.get(), "N"); if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 3", m_slotNo); - CUtils::dump(2U, text, data, 9U); + CUtils::dump(1U, text, data, 9U); } m_netTalkerId |= TALKER_ID_BLOCK3; @@ -1542,6 +1629,12 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) if (csbko == CSBKO_BSDWNACT) return; + // set the OVCM bit for the supported csbk + if (m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON) + csbk.setOVCM(true); + else if (m_ovcm == DMR_OVCM_FORCE_OFF) + csbk.setOVCM(false); + bool gi = csbk.getGI(); unsigned int srcId = csbk.getSrcId(); unsigned int dstId = csbk.getDstId(); @@ -1606,6 +1699,15 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) case CSBKO_PRECCSBK: LogMessage("DMR Slot %u, received network %s Preamble CSBK (%u to follow) from %s to %s%s", m_slotNo, csbk.getDataContent() ? "Data" : "CSBK", csbk.getCBF(), src.c_str(), gi ? "TG " : "", dst.c_str()); break; + case CSBKO_CALL_ALERT: + LogMessage("DMR Slot %u, received network Call Alert CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); + break; + case CSBKO_CALL_ALERT_ACK: + LogMessage("DMR Slot %u, received network Call Alert Ack CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); + break; + case CSBKO_RADIO_CHECK: + LogMessage("DMR Slot %u, received network Radio Check %s CSBK from %s to %s%s", m_slotNo, /* TBD */ 1 ? "Req" : "Ack", src.c_str(), gi ? "TG " : "", dst.c_str()); + break; default: LogWarning("DMR Slot %u, unhandled network CSBK type - 0x%02X", m_slotNo, csbko); break; @@ -1622,24 +1724,33 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) return; } + char title[80U]; // Regenerate the rate 1/2 payload if (dataType == DT_RATE_12_DATA) { CBPTC19696 bptc; unsigned char payload[12U]; bptc.decode(data + 2U, payload); + ::sprintf(title, "DMR Slot %u, Data 1/2", m_slotNo); + CUtils::dump(1U, title, payload, 12U); bptc.encode(payload, data + 2U); } else if (dataType == DT_RATE_34_DATA) { CDMRTrellis trellis; unsigned char payload[18U]; bool ret = trellis.decode(data + 2U, payload); if (ret) { + ::sprintf(title, "DMR Slot %u, Data 3/4", m_slotNo); + CUtils::dump(1U, title, payload, 18U); trellis.encode(payload, data + 2U); } else { LogMessage("DMR Slot %u, unfixable network rate 3/4 data", m_slotNo); CUtils::dump(1U, "Data", data + 2U, DMR_FRAME_LENGTH_BYTES); } + } else { + ::sprintf(title, "DMR Slot %u, Data 1/1", m_slotNo); + CUtils::dump(1U, title, data + 2U, 24U); } + // Regenerate the Slot Type CDMRSlotType slotType; slotType.putData(data + 2U); @@ -1846,7 +1957,7 @@ void CDMRSlot::writeQueueNet(const unsigned char *data) m_queue.addData(data, len); } -void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter) +void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, DMR_OVCM_TYPES ovcm) { assert(modem != NULL); assert(display != NULL); @@ -1862,6 +1973,7 @@ void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData m_duplex = duplex; m_lookup = lookup; m_hangCount = callHang * 17U; + m_ovcm = ovcm; m_rssiMapper = rssiMapper; @@ -2091,3 +2203,54 @@ void CDMRSlot::insertSilence(unsigned int count) n = (n + 1U) % 6U; } } + +bool CDMRSlot::isBusy() const +{ + return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; +} + +void CDMRSlot::enable(bool enabled) +{ + if (!enabled && m_enabled) { + m_queue.clear(); + + // Reset the RF section + m_rfState = RS_RF_LISTENING; + + m_rfTimeoutTimer.stop(); + m_rfTimeout = false; + + m_rfFrames = 0U; + m_rfErrs = 0U; + m_rfBits = 1U; + + m_rfSeqNo = 0U; + m_rfN = 0U; + + delete m_rfLC; + m_rfLC = NULL; + + // Reset the networking section + m_netState = RS_NET_IDLE; + + m_lastFrameValid = false; + + m_networkWatchdog.stop(); + m_netTimeoutTimer.stop(); + m_packetTimer.stop(); + m_netTimeout = false; + + m_netFrames = 0U; + m_netLost = 0U; + + m_netErrs = 0U; + m_netBits = 1U; + + m_netN = 0U; + + delete m_netLC; + m_netLC = NULL; + } + + m_enabled = enabled; +} diff --git a/DMRSlot.h b/DMRSlot.h index fc01e61ac..d3d58a260 100644 --- a/DMRSlot.h +++ b/DMRSlot.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,7 +58,11 @@ class CDMRSlot { void clock(); - static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter); + bool isBusy() const; + + void enable(bool enabled); + + static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, DMR_OVCM_TYPES ovcm); private: unsigned int m_slotNo; @@ -76,6 +80,7 @@ class CDMRSlot { unsigned int m_netEmbeddedReadN; unsigned int m_netEmbeddedWriteN; unsigned char m_netTalkerId; + CDMRTA m_netTalkerAlias; CDMRLC* m_rfLC; CDMRLC* m_netLC; unsigned char m_rfSeqNo; @@ -105,6 +110,7 @@ class CDMRSlot { unsigned char m_minRSSI; unsigned int m_aveRSSI; unsigned int m_rssiCount; + bool m_enabled; FILE* m_fp; static unsigned int m_colorCode; @@ -113,11 +119,12 @@ class CDMRSlot { static bool m_dumpTAData; static CModem* m_modem; - static CDMRNetwork* m_network; + static IDMRNetwork* m_network; static CDisplay* m_display; static bool m_duplex; static CDMRLookup* m_lookup; static unsigned int m_hangCount; + static DMR_OVCM_TYPES m_ovcm; static CRSSIInterpolator* m_rssiMapper; @@ -126,7 +133,7 @@ class CDMRSlot { static unsigned char* m_idle; - static FLCO m_flco1; + static FLCO m_flco1; static unsigned char m_id1; static ACTIVITY_TYPE m_activity1; static FLCO m_flco2; diff --git a/DMRTA.cpp b/DMRTA.cpp index bf074aa17..94ecbaf51 100644 --- a/DMRTA.cpp +++ b/DMRTA.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX +* Copyright (C) 2015,2016,2017,2018,2023 Jonathan Naylor, G4KLX * Copyright (C) 2018 by Shawn Chain, BG5HHP * * This program is free software; you can redistribute it and/or modify @@ -18,8 +18,9 @@ #include #include -CDMRTA::CDMRTA() : -m_TA(), +CDMRTA::CDMRTA(unsigned int slotNo) : +m_slotNo(slotNo), +m_ta(), m_buf() { } @@ -31,13 +32,14 @@ CDMRTA::~CDMRTA() bool CDMRTA::add(unsigned int blockId, const unsigned char* data, unsigned int len) { assert(data != NULL); - if (blockId > 3) { + + if (blockId > 3U) { // invalid block id reset(); return false; } - unsigned int offset = blockId * 7; + unsigned int offset = blockId * 7U; if (offset + len >= sizeof(m_buf)) { // buffer overflow @@ -52,75 +54,83 @@ bool CDMRTA::add(unsigned int blockId, const unsigned char* data, unsigned int l const unsigned char* CDMRTA::get() { - return (unsigned char*)m_TA; + return (unsigned char*)m_ta; } void CDMRTA::reset() { - ::memset(m_TA, 0, sizeof(m_TA)); - ::memset(m_buf, 0, sizeof(m_buf)); + ::memset(m_ta, 0x00U, sizeof(m_ta)); + ::memset(m_buf, 0x00U, sizeof(m_buf)); } bool CDMRTA::decodeTA() { - unsigned char *b; - unsigned char c; - int j; - unsigned int i, t1, t2; - - unsigned char* talkerAlias = m_buf; - - unsigned int TAformat = (talkerAlias[0] >> 6U) & 0x03U; - unsigned int TAsize = (talkerAlias[0] >> 1U) & 0x1FU; - ::strncpy(m_TA, "(could not decode)", sizeof(m_TA)); - - switch (TAformat) { - case 0U: // 7 bit - ::memset(m_TA, 0, sizeof(m_TA)); - b = &talkerAlias[0]; - t1 = 0U; t2 = 0U; c = 0U; - for (i = 0U; (i < 32U) && (t2 < TAsize); i++) { - for (j = 7; j >= 0; j--) { - c = (c << 1U) | (b[i] >> j); - if (++t1 == 7U) { - if (i > 0U) - m_TA[t2++] = c & 0x7FU; - - t1 = 0U; - c = 0U; - } - } - } - m_TA[TAsize] = 0; - break; - - case 1U: // ISO 8 bit - case 2U: // UTF8 - ::strncpy(m_TA, (char*)talkerAlias + 1U, sizeof(m_TA)); - break; - - case 3U: // UTF16 poor man's conversion - t2=0; - ::memset(&m_TA, 0, sizeof(m_TA)); - for (i = 0U; (i < 15U) && (t2 < TAsize); i++) { - if (talkerAlias[2U * i + 1U] == 0) - m_TA[t2++] = talkerAlias[2U * i + 2U]; - else - m_TA[t2++] = '?'; - } - m_TA[TAsize] = 0; - break; - } - - size_t TAlen = ::strlen(m_TA); - LogMessage("DMR Talker Alias (Data Format %u, Received %u/%u char): '%s'", TAformat, TAlen, TAsize, m_TA); - - if (TAlen > TAsize) { - if (TAlen < 29U) - strcat(m_TA," ?"); - else - strcpy(m_TA + 28U," ?"); - } - - return TAlen >= TAsize; + unsigned int taFormat = (m_buf[0] >> 6U) & 0x03U; + unsigned int taSize = (m_buf[0] >> 1U) & 0x1FU; + ::strcpy(m_ta, "(could not decode)"); + + switch (taFormat) { + case 0U: { // 7 bit + ::memset(m_ta, 0x00U, sizeof(m_ta)); + + unsigned char* b = m_buf; + unsigned int t1 = 0U; + unsigned int t2 = 0U; + unsigned char c = 0U; + + for (unsigned int i = 0U; (i < 32U) && (t2 < taSize); i++) { + for (int j = 7; j >= 0; j--) { + c = (c << 1U) | (b[i] >> j); + + if (++t1 == 7U) { + if (i > 0U) + m_ta[t2++] = c & 0x7FU; + + t1 = 0U; + c = 0U; + } + } + } + + m_ta[taSize] = 0; + } + break; + + case 1U: // ISO 8 bit + case 2U: // UTF8 + ::memcpy(m_ta, m_buf + 1U, sizeof(m_ta) - 1); + break; + + case 3U: { // UTF16 poor man's conversion + unsigned int t2 = 0U; + ::memset(&m_ta, 0x00U, sizeof(m_ta)); + + for (unsigned int i = 0U; (i < 15U) && (t2 < taSize); i++) { + if (m_buf[2U * i + 1U] == 0) + m_ta[t2++] = m_buf[2U * i + 2U]; + else + m_ta[t2++] = '?'; + } + + m_ta[taSize] = 0; + } + break; + } + + size_t taLen = ::strlen(m_ta); + + if (taLen == taSize) + LogMessage("DMR Slot %u, Talker Alias \"%s\"", m_slotNo, m_ta); + + LogDebug("DMR Slot %u, Talker Alias (Data Format %u, Received %u/%u char): '%s'", m_slotNo, taFormat, taLen, taSize, m_ta); + + if (taLen > taSize) { + if (taLen < 29U) + ::strcat(m_ta, " ?"); + else + ::strcpy(m_ta + 28U, " ?"); + } + + return taLen >= taSize; } + diff --git a/DMRTA.h b/DMRTA.h index d53f93f5b..ccf48d9c7 100644 --- a/DMRTA.h +++ b/DMRTA.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX +* Copyright (C) 2015,2016,2017,2018,2023 Jonathan Naylor, G4KLX * Copyright (C) 2018 by Shawn Chain, BG5HHP * * This program is free software; you can redistribute it and/or modify @@ -17,19 +17,22 @@ class CDMRTA { public: - CDMRTA(); - ~CDMRTA(); + CDMRTA(unsigned int slotNo); + ~CDMRTA(); - bool add(unsigned int blockId, const unsigned char* data, unsigned int len); - const unsigned char* get(); - void reset(); + bool add(unsigned int blockId, const unsigned char* data, unsigned int len); + + const unsigned char* get(); + + void reset(); protected: - bool decodeTA(); + bool decodeTA(); private: - char m_TA[32]; - unsigned char m_buf[32]; + unsigned int m_slotNo; + char m_ta[32]; + unsigned char m_buf[32]; }; #endif diff --git a/DMRTrellis.cpp b/DMRTrellis.cpp index f0a73cbf6..cdf30ed74 100644 --- a/DMRTrellis.cpp +++ b/DMRTrellis.cpp @@ -280,12 +280,12 @@ void CDMRTrellis::pointsToDibits(const unsigned char* points, signed char* dibit void CDMRTrellis::bitsToTribits(const unsigned char* payload, unsigned char* tribits) const { for (unsigned int i = 0U; i < 48U; i++) { - unsigned int n = 143U - i * 3U; + unsigned int n = i * 3U; bool b1 = READ_BIT(payload, n) != 0x00U; - n--; + n++; bool b2 = READ_BIT(payload, n) != 0x00U; - n--; + n++; bool b3 = READ_BIT(payload, n) != 0x00U; unsigned char tribit = 0U; @@ -308,12 +308,12 @@ void CDMRTrellis::tribitsToBits(const unsigned char* tribits, unsigned char* pay bool b2 = (tribit & 0x02U) == 0x02U; bool b3 = (tribit & 0x01U) == 0x01U; - unsigned int n = 143U - i * 3U; + unsigned int n = i * 3U; WRITE_BIT(payload, n, b1); - n--; + n++; WRITE_BIT(payload, n, b2); - n--; + n++; WRITE_BIT(payload, n, b3); } } diff --git a/DStarControl.cpp b/DStarControl.cpp index 9830a1d19..c0d727a60 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX + * Copyright (C) 2015-2019,2021,2023 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,6 +15,7 @@ #include "Utils.h" #include "Sync.h" #include "Log.h" +#include "SMeter.h" #include #include @@ -23,6 +24,7 @@ #include const unsigned int MAX_SYNC_BIT_ERRORS = 2U; +const unsigned int FAST_DATA_BEEP_GRACE_FRAMES = 6U; bool CallsignCompare(const std::string& arg, const unsigned char* my) { @@ -36,7 +38,7 @@ bool CallsignCompare(const std::string& arg, const unsigned char* my) // #define DUMP_DSTAR -CDStarControl::CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, bool ackMessage, bool errorReply, const std::vector& blackList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper) : +CDStarControl::CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, DSTAR_ACK_MESSAGE ackMessage, bool errorReply, const std::vector& blackList, const std::vector& whiteList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper) : m_callsign(NULL), m_gateway(NULL), m_selfOnly(selfOnly), @@ -45,6 +47,7 @@ m_ackMessage(ackMessage), m_errorReply(errorReply), m_remoteGateway(remoteGateway), m_blackList(blackList), +m_whiteList(whiteList), m_network(network), m_display(display), m_duplex(duplex), @@ -54,7 +57,8 @@ m_netHeader(), m_rfState(RS_RF_LISTENING), m_netState(RS_NET_IDLE), m_net(false), -m_slowData(), +m_rfSlowData(), +m_netSlowData(), m_rfN(0U), m_netN(0U), m_networkWatchdog(1000U, 0U, 1500U), @@ -81,7 +85,16 @@ m_maxRSSI(0U), m_minRSSI(0U), m_aveRSSI(0U), m_rssiCount(0U), -m_fp(NULL) +m_enabled(true), +m_fp(NULL), +m_rfVoiceSyncData(NULL), +m_rfVoiceSyncDataLen(0U), +m_netVoiceSyncData(NULL), +m_netVoiceSyncDataLen(0U), +m_rfNextFrameIsFastData(false), +m_netNextFrameIsFastData(false), +m_rfSkipDTMFBlankingFrames(0U), +m_netSkipDTMFBlankingFrames(0U) { assert(display != NULL); assert(rssiMapper != NULL); @@ -90,6 +103,8 @@ m_fp(NULL) m_gateway = new unsigned char[DSTAR_LONG_CALLSIGN_LENGTH]; m_lastFrame = new unsigned char[DSTAR_FRAME_LENGTH_BYTES + 1U]; + m_rfVoiceSyncData = new unsigned char[DSTAR_MODEM_DATA_LEN]; + m_netVoiceSyncData = new unsigned char[DSTAR_MODEM_DATA_LEN]; std::string call = callsign; call.resize(DSTAR_LONG_CALLSIGN_LENGTH - 1U, ' '); @@ -114,19 +129,107 @@ CDStarControl::~CDStarControl() delete[] m_callsign; delete[] m_gateway; delete[] m_lastFrame; + delete[] m_rfVoiceSyncData; + delete[] m_netVoiceSyncData; +} + +unsigned int CDStarControl::maybeFixupVoiceFrame( + unsigned char* data, + unsigned int len, + unsigned int offset, + const char* log_prefix, + unsigned char n, + bool blank_dtmf, + unsigned char* voice_sync_data, + unsigned int& voice_sync_data_len, + bool& next_frame_is_fast_data, + unsigned int& skip_dtmf_blanking_frames + ) +{ + unsigned int errors = 0U; + unsigned int voice_sync_errors = 0U; + unsigned char mini_header = data[offset + 9U] ^ DSTAR_SCRAMBLER_BYTES[0U]; + unsigned char mini_header_type = mini_header & DSTAR_SLOW_DATA_TYPE_MASK; + + if (n == 0U) { + ::memcpy(voice_sync_data, data, DSTAR_MODEM_DATA_LEN); + voice_sync_data_len = len; + } else if ((n % 2U != 0U) && + ((mini_header_type == DSTAR_SLOW_DATA_TYPE_FASTDATA01) || + (mini_header_type == DSTAR_SLOW_DATA_TYPE_FASTDATA16))) { + next_frame_is_fast_data = true; + if (blank_dtmf) + skip_dtmf_blanking_frames = FAST_DATA_BEEP_GRACE_FRAMES; + if (n == 1U) + LogDebug("D-Star, %s fastdata sequence no. 0", log_prefix); + LogDebug("D-Star, %s fastdata sequence no. %2u", log_prefix, n); + } else if (next_frame_is_fast_data) { + next_frame_is_fast_data = false; + if (blank_dtmf) + skip_dtmf_blanking_frames = FAST_DATA_BEEP_GRACE_FRAMES; + LogDebug("D-Star, %s fastdata sequence no. %2u", log_prefix, n); + } else { + bool voice_sync_data_is_null_ambe_data = false; + bool data_is_null_ambe_data = false; + + if ((n == 1U) && (::memcmp(voice_sync_data + offset, DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED, DSTAR_VOICE_FRAME_LENGTH_BYTES) == 0)) + voice_sync_data_is_null_ambe_data = true; + + if (::memcmp(data + offset, DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED, DSTAR_VOICE_FRAME_LENGTH_BYTES) == 0) + data_is_null_ambe_data = true; + + if ((n == 1U) && !voice_sync_data_is_null_ambe_data) + voice_sync_errors += m_fec.regenerateDStar(voice_sync_data + offset); + + if (!data_is_null_ambe_data) + errors += m_fec.regenerateDStar(data + offset); + + if (blank_dtmf && skip_dtmf_blanking_frames > 0U) { + skip_dtmf_blanking_frames--; + } else if (blank_dtmf && skip_dtmf_blanking_frames == 0U) { + if ((n == 1U) && !voice_sync_data_is_null_ambe_data) + blankDTMF(voice_sync_data + offset); + if (!data_is_null_ambe_data) + blankDTMF(data + offset); + } + + if (n == 1U) { + if (voice_sync_data_is_null_ambe_data) + LogDebug("D-Star, %s nullaudio sequence no. 0", log_prefix); + else + LogDebug("D-Star, %s audio sequence no. 0, errs: %2u/48 (%5.1f%%)", log_prefix, voice_sync_errors, float(voice_sync_errors) / 0.48F); + } + + if (data_is_null_ambe_data) + LogDebug("D-Star, %s nullaudio sequence no. %2u", log_prefix, n); + else + LogDebug("D-Star, %s audio sequence no. %2u, errs: %2u/48 (%5.1f%%)", log_prefix, n, errors, float(errors) / 0.48F); + } + + return voice_sync_errors + errors; } bool CDStarControl::writeModem(unsigned char *data, unsigned int len) { assert(data != NULL); + if (!m_enabled) + return false; + unsigned char type = data[0U]; - if (type == TAG_LOST && (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA)) { + if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) { + unsigned char my1[DSTAR_LONG_CALLSIGN_LENGTH]; + unsigned char my2[DSTAR_SHORT_CALLSIGN_LENGTH]; + unsigned char your[DSTAR_LONG_CALLSIGN_LENGTH]; + m_rfHeader.getMyCall1(my1); + m_rfHeader.getMyCall2(my2); + m_rfHeader.getYourCall(your); + if (m_rssi != 0U) - LogMessage("D-Star, transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 50.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("D-Star, transmission lost from %8.8s/%4.4s to %8.8s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", my1, my2, your, float(m_rfFrames) / 50.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("D-Star, transmission lost, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 50.0F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("D-Star, transmission lost from %8.8s/%4.4s to %8.8s, %.1f seconds, BER: %.1f%%", my1, my2, your, float(m_rfFrames) / 50.0F, float(m_rfErrs * 100U) / float(m_rfBits)); writeEndRF(); return false; } @@ -207,7 +310,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) if (!header.isRepeater()) { LogMessage("D-Star, non repeater RF header received from %8.8s", my1); m_rfState = RS_RF_INVALID; - return false; + return true; } unsigned char callsign[DSTAR_LONG_CALLSIGN_LENGTH]; @@ -217,19 +320,19 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) if (::memcmp(callsign, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH) != 0) { LogMessage("D-Star, received RF header for wrong repeater (%8.8s) from %8.8s", callsign, my1); m_rfState = RS_RF_INVALID; - return false; + return true; } - if (m_selfOnly && ::memcmp(my1, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH - 1U) != 0) { + if (m_selfOnly && ::memcmp(my1, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH - 1U) != 0 && !(std::find_if(m_whiteList.begin(), m_whiteList.end(), std::bind(CallsignCompare, std::placeholders::_1, my1)) != m_whiteList.end())) { LogMessage("D-Star, invalid access attempt from %8.8s", my1); m_rfState = RS_RF_REJECTED; - return false; + return true; } if (!m_selfOnly && std::find_if(m_blackList.begin(), m_blackList.end(), std::bind(CallsignCompare, std::placeholders::_1, my1)) != m_blackList.end()) { LogMessage("D-Star, invalid access attempt from %8.8s", my1); m_rfState = RS_RF_REJECTED; - return false; + return true; } unsigned char gateway[DSTAR_LONG_CALLSIGN_LENGTH]; @@ -261,6 +364,8 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) m_aveRSSI = m_rssi; m_rssiCount = 1U; + m_rfSlowData.start(); + if (m_duplex) { // Modify the header header.setRepeater(false); @@ -304,71 +409,51 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) } return false; - } else if (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA) { + } else if (m_rfState == RS_RF_AUDIO) { if (m_net) writeNetworkDataRF(DSTAR_END_PATTERN_BYTES, 0U, true); if (m_duplex) writeQueueEOTRF(); + m_rfNextFrameIsFastData = false; + m_rfSkipDTMFBlankingFrames = 0U; + + unsigned char my1[DSTAR_LONG_CALLSIGN_LENGTH]; + unsigned char my2[DSTAR_SHORT_CALLSIGN_LENGTH]; + unsigned char your[DSTAR_LONG_CALLSIGN_LENGTH]; + m_rfHeader.getMyCall1(my1); + m_rfHeader.getMyCall2(my2); + m_rfHeader.getYourCall(your); + if (m_rssi != 0U) - LogMessage("D-Star, received RF end of transmission, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 50.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("D-Star, received RF end of transmission from %8.8s/%4.4s to %8.8s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", my1, my2, your, float(m_rfFrames) / 50.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("D-Star, received RF end of transmission, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 50.0F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("D-Star, received RF end of transmission from %8.8s/%4.4s to %8.8s, %.1f seconds, BER: %.1f%%", my1, my2, your, float(m_rfFrames) / 50.0F, float(m_rfErrs * 100U) / float(m_rfBits)); writeEndRF(); } return false; } else if (type == TAG_DATA) { - if (m_rfState == RS_RF_REJECTED) - return false; - - if (m_rfState == RS_RF_INVALID) - return false; - - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RS_RF_REJECTED) { + return true; + } else if (m_rfState == RS_RF_INVALID) { + return true; + } else if (m_rfState == RS_RF_LISTENING) { // The sync is regenerated by the modem so can do exact match if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) { - m_slowData.start(); + m_rfSlowData.start(); m_rfState = RS_RF_LATE_ENTRY; } return false; - } - - // Data signatures only appear at the beginning of the frame - if (m_rfState == RS_RF_AUDIO && m_rfFrames < 21U) { - if (CUtils::compare(data + 1U, DSTAR_KENWOOD_DATA_MODE_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) { - LogMessage("D-Star, switching to data mode (Kenwood)"); - m_rfState = RS_RF_DATA; - } else if (CUtils::compare(data + 1U, DSTAR_ICOM_DATA_MODE_BYTES1, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) { - LogMessage("D-Star, switching to data mode (Icom)"); - m_rfState = RS_RF_DATA; - } else if (CUtils::compare(data + 1U, DSTAR_ICOM_DATA_MODE_BYTES2, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) { - LogMessage("D-Star, switching to data mode (Icom)"); - m_rfState = RS_RF_DATA; - } - } - - if (m_rfState == RS_RF_DATA) { - // Regenerate the data mode markers - if (m_rfFrames < 21U) { - if (CUtils::compare(data + 1U, DSTAR_KENWOOD_DATA_MODE_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) - ::memcpy(data + 1U, DSTAR_KENWOOD_DATA_MODE_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES); - else if (CUtils::compare(data + 1U, DSTAR_ICOM_DATA_MODE_BYTES1, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) - ::memcpy(data + 1U, DSTAR_ICOM_DATA_MODE_BYTES1, DSTAR_VOICE_FRAME_LENGTH_BYTES); - else if (CUtils::compare(data + 1U, DSTAR_ICOM_DATA_MODE_BYTES2, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) - ::memcpy(data + 1U, DSTAR_ICOM_DATA_MODE_BYTES2, DSTAR_VOICE_FRAME_LENGTH_BYTES); - } - - m_rfBits += 72U; - m_rfErrs = 0U; - m_rfFrames++; - + } else if (m_rfState == RS_RF_AUDIO) { // The sync is regenerated by the modem so can do exact match - if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) + if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) { + m_rfSlowData.start(); m_rfN = 0U; + } // Regenerate the sync and send the RSSI data to the display if (m_rfN == 0U) { @@ -376,56 +461,43 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) m_display->writeDStarRSSI(m_rssi); } - if (m_net) - writeNetworkDataRF(data, 0U, false); - - if (m_duplex) - writeQueueDataRF(data); - - m_rfN = (m_rfN + 1U) % 21U; - } else if (m_rfState == RS_RF_AUDIO) { unsigned int errors = 0U; if (!m_rfHeader.isDataPacket()) { - errors = m_fec.regenerateDStar(data + 1U); + errors = maybeFixupVoiceFrame(data, len, 1U, "RF", m_rfN, m_duplex, m_rfVoiceSyncData, m_rfVoiceSyncDataLen, m_rfNextFrameIsFastData, m_rfSkipDTMFBlankingFrames); m_display->writeDStarBER(float(errors) / 0.48F); - LogDebug("D-Star, audio sequence no. %u, errs: %u/48 (%.1f%%)", m_rfN, errors, float(errors) / 0.48F); m_rfErrs += errors; - - // The sync is regenerated by the modem so can do exact match - if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) - m_rfN = 0U; } m_rfBits += 48U; m_rfFrames++; - // The sync is regenerated by the modem so can do exact match - if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) - m_rfN = 0U; + const unsigned char* text = m_rfSlowData.addText(data + 1U); + if (text != NULL) + LogMessage("D-Star, slow data text = \"%s\"", text); - // Regenerate the sync and send the RSSI data to the display - if (m_rfN == 0U) { - CSync::addDStarSync(data + 1U); - m_display->writeDStarRSSI(m_rssi); + if (m_net) { + if (m_rfN == 1U) + writeNetworkDataRF(m_rfVoiceSyncData, 0U, false); + if (m_rfN >= 1U) + writeNetworkDataRF(data, errors, false); } - if (m_net) - writeNetworkDataRF(data, errors, false); - if (m_duplex) { - blankDTMF(data + 1U); - writeQueueDataRF(data); + if (m_rfN == 1U) + writeQueueDataRF(m_rfVoiceSyncData); + if (m_rfN >= 1U) + writeQueueDataRF(data); } m_rfN = (m_rfN + 1U) % 21U; } else if (m_rfState == RS_RF_LATE_ENTRY) { // The sync is regenerated by the modem so can do exact match if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) { - m_slowData.reset(); + m_rfSlowData.reset(); return false; } - CDStarHeader* header = m_slowData.add(data + 1U); + CDStarHeader* header = m_rfSlowData.addHeader(data + 1U); if (header == NULL) return false; @@ -439,7 +511,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) LogMessage("D-Star, non repeater RF header received from %8.8s", my1); m_rfState = RS_RF_INVALID; delete header; - return false; + return true; } unsigned char callsign[DSTAR_LONG_CALLSIGN_LENGTH]; @@ -450,21 +522,21 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) LogMessage("D-Star, received RF header for wrong repeater (%8.8s) from %8.8s", callsign, my1); m_rfState = RS_RF_INVALID; delete header; - return false; + return true; } - if (m_selfOnly && ::memcmp(my1, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH - 1U) != 0) { + if (m_selfOnly && ::memcmp(my1, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH - 1U) != 0 && !(std::find_if(m_whiteList.begin(), m_whiteList.end(), std::bind(CallsignCompare, std::placeholders::_1, my1)) != m_whiteList.end())) { LogMessage("D-Star, invalid access attempt from %8.8s", my1); m_rfState = RS_RF_REJECTED; delete header; - return false; + return true; } if (!m_selfOnly && std::find_if(m_blackList.begin(), m_blackList.end(), std::bind(CallsignCompare, std::placeholders::_1, my1)) != m_blackList.end()) { LogMessage("D-Star, invalid access attempt from %8.8s", my1); m_rfState = RS_RF_REJECTED; delete header; - return false; + return true; } unsigned char gateway[DSTAR_LONG_CALLSIGN_LENGTH]; @@ -527,8 +599,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) unsigned int errors = 0U; if (!m_rfHeader.isDataPacket()) { - errors = m_fec.regenerateDStar(data + 1U); - LogDebug("D-Star, audio sequence no. %u, errs: %u/48 (%.1f%%)", m_rfN, errors, float(errors) / 0.48F); + errors = maybeFixupVoiceFrame(data, len, 1U, "RF", m_rfN, m_duplex, m_rfVoiceSyncData, m_rfVoiceSyncDataLen, m_rfNextFrameIsFastData, m_rfSkipDTMFBlankingFrames); m_rfErrs += errors; } @@ -537,10 +608,8 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) if (m_net) writeNetworkDataRF(data, errors, false); - if (m_duplex) { - blankDTMF(data + 1U); + if (m_duplex) writeQueueDataRF(data); - } m_rfState = RS_RF_AUDIO; @@ -580,6 +649,8 @@ void CDStarControl::writeEndRF() { m_rfState = RS_RF_LISTENING; + m_rfTimeoutTimer.stop(); + if (m_netState == RS_NET_IDLE) { m_display->clearDStar(); @@ -587,8 +658,6 @@ void CDStarControl::writeEndRF() if (m_network != NULL) m_network->reset(); - } else { - m_rfTimeoutTimer.stop(); } } @@ -621,7 +690,10 @@ void CDStarControl::writeNetwork() if (length == 0U) return; - if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA) && m_netState == RS_NET_IDLE) + if (!m_enabled) + return; + + if (m_rfState == RS_RF_AUDIO && m_netState == RS_NET_IDLE) return; m_networkWatchdog.start(); @@ -691,100 +763,77 @@ void CDStarControl::writeNetwork() m_elapsed.start(); } else if (type == TAG_EOT) { - if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA) { - writeQueueEOTNet(); + if (m_netState != RS_NET_AUDIO) + return; + + writeQueueEOTNet(); - data[1U] = TAG_EOT; + data[1U] = TAG_EOT; #if defined(DUMP_DSTAR) - writeFile(data + 1U, length - 1U); - closeFile(); + writeFile(data + 1U, length - 1U); + closeFile(); #endif - // We've received the header and EOT haven't we? - m_netFrames += 2U; - LogMessage("D-Star, received network end of transmission, %.1f seconds, %u%% packet loss, BER: %.1f%%", float(m_netFrames) / 50.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); - - writeEndNet(); - } - } else if (type == TAG_DATA) { - // Data signatures only appear at the beginning of the frame - if (m_netState == RS_NET_AUDIO && m_netFrames < 21U) { - if (CUtils::compare(data + 2U, DSTAR_KENWOOD_DATA_MODE_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) { - LogMessage("D-Star, switching to data mode (Kenwood)"); - m_netState = RS_NET_DATA; - } else if (CUtils::compare(data + 2U, DSTAR_ICOM_DATA_MODE_BYTES1, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) { - LogMessage("D-Star, switching to data mode (Icom)"); - m_netState = RS_NET_DATA; - } else if (CUtils::compare(data + 2U, DSTAR_ICOM_DATA_MODE_BYTES2, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) { - LogMessage("D-Star, switching to data mode (Icom)"); - m_netState = RS_NET_DATA; - } - } - - if (m_netState == RS_NET_DATA) { - // Regenerate the data mode markers - if (m_netFrames < 21U) { - if (CUtils::compare(data + 2U, DSTAR_KENWOOD_DATA_MODE_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) - ::memcpy(data + 2U, DSTAR_KENWOOD_DATA_MODE_BYTES, DSTAR_VOICE_FRAME_LENGTH_BYTES); - else if (CUtils::compare(data + 2U, DSTAR_ICOM_DATA_MODE_BYTES1, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) - ::memcpy(data + 2U, DSTAR_ICOM_DATA_MODE_BYTES1, DSTAR_VOICE_FRAME_LENGTH_BYTES); - else if (CUtils::compare(data + 2U, DSTAR_ICOM_DATA_MODE_BYTES2, DSTAR_VOICE_FRAME_LENGTH_BYTES) < 5U) - ::memcpy(data + 2U, DSTAR_ICOM_DATA_MODE_BYTES2, DSTAR_VOICE_FRAME_LENGTH_BYTES); - } - - unsigned char n = data[1U]; + m_netNextFrameIsFastData = false; + m_netSkipDTMFBlankingFrames = 0U; - data[1U] = TAG_DATA; + unsigned char my1[DSTAR_LONG_CALLSIGN_LENGTH]; + unsigned char my2[DSTAR_SHORT_CALLSIGN_LENGTH]; + unsigned char your[DSTAR_LONG_CALLSIGN_LENGTH]; + m_netHeader.getMyCall1(my1); + m_netHeader.getMyCall2(my2); + m_netHeader.getYourCall(your); - m_netBits += 72U; - m_netErrs = 0U; + // We've received the header and EOT haven't we? + m_netFrames += 2U; + LogMessage("D-Star, received network end of transmission from %8.8s/%4.4s to %8.8s, %.1f seconds, %u%% packet loss, BER: %.1f%%", my1, my2, your, float(m_netFrames) / 50.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); - m_netN = n; + writeEndNet(); + } else if (type == TAG_DATA) { + if (m_netState != RS_NET_AUDIO) + return; - // Regenerate the sync - if (n == 0U) - CSync::addDStarSync(data + 2U); + unsigned char n = data[1U]; - m_packetTimer.start(); - m_netFrames++; + data[1U] = TAG_DATA; -#if defined(DUMP_DSTAR) - writeFile(data + 1U, length - 1U); -#endif - writeQueueDataNet(data + 1U); - } else if (m_netState == RS_NET_AUDIO) { - unsigned char n = data[1U]; - - unsigned int errors = 0U; - if (!m_netHeader.isDataPacket()) - errors = m_fec.regenerateDStar(data + 2U); + unsigned int errors = 0U; + if (!m_netHeader.isDataPacket()) + errors = maybeFixupVoiceFrame(data, length, 2U, "Net", n, true, m_netVoiceSyncData, m_netVoiceSyncDataLen, m_netNextFrameIsFastData, m_netSkipDTMFBlankingFrames); - blankDTMF(data + 2U); - - data[1U] = TAG_DATA; + // Insert silence and reject if in the past + bool ret = insertSilence(data + 1U, n); + if (!ret) + return; - // Insert silence and reject if in the past - bool ret = insertSilence(data + 1U, n); - if (!ret) - return; + m_netErrs += errors; + m_netBits += 48U; - m_netErrs += errors; - m_netBits += 48U; + m_netN = n; - m_netN = n; + // Regenerate the sync + if (n == 0U) { + CSync::addDStarSync(data + 2U); + m_netSlowData.start(); + } - // Regenerate the sync - if (n == 0U) - CSync::addDStarSync(data + 2U); + const unsigned char* text = m_netSlowData.addText(data + 2U); + if (text != NULL) + LogMessage("D-Star, slow data text = \"%s\"", text); - m_packetTimer.start(); - m_netFrames++; + m_packetTimer.start(); + m_netFrames++; #if defined(DUMP_DSTAR) + if (n == 1U) + writeFile(m_netVoiceSyncData + 1U, m_netVoiceSyncDataLen - 1U); + if (n >= 1U) writeFile(data + 1U, length - 1U); #endif + if (n == 1U) + writeQueueDataNet(m_netVoiceSyncData + 1U); + if (n >= 1U) writeQueueDataNet(data + 1U); - } } else { CUtils::dump("D-Star, unknown data from network", data, DSTAR_FRAME_LENGTH_BYTES + 1U); } @@ -813,7 +862,7 @@ void CDStarControl::clock() m_rfTimeoutTimer.clock(ms); m_netTimeoutTimer.clock(ms); - if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA) { + if (m_netState == RS_NET_AUDIO) { m_networkWatchdog.clock(ms); if (m_networkWatchdog.hasExpired()) { @@ -1148,24 +1197,39 @@ void CDStarControl::sendAck() m_network->getStatus(status, reflector); char text[40U]; - if (m_ackMessage && m_rssi != 0) { + if (m_ackMessage == DSTAR_ACK_RSSI && m_rssi != 0) { + if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) { + CUtils::removeChar(reflector, ' ');//remove space from reflector so all nicely fits onto 20 chars in case rssi < 99dBm + ::sprintf(text, "%-8.8s %.1f%% -%udBm ", reflector, float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); + } else { + ::sprintf(text, "BER:%.1f%% -%udBm ", float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); + } + } else if (m_ackMessage == DSTAR_ACK_SMETER && m_rssi != 0) { + unsigned int signal, plus; + char signalText[15U]; + CSMeter::getSignal(m_aveRSSI / m_rssiCount, signal, plus); + if (plus != 0U) + ::sprintf(signalText, "S%u+%02u", signal, plus); + else + ::sprintf(signalText, "S%u", signal); + if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) - ::sprintf(text, "%-8.8s -%udBm ", reflector, m_aveRSSI / m_rssiCount); + ::sprintf(text, "%-8.8s %.1f%% %s ", reflector, float(m_rfErrs * 100U) / float(m_rfBits), signalText); else - ::sprintf(text, "BER:%.1f%% -%udBm ", float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); - } - else { + ::sprintf(text, "BER:%.1f%% %s ", float(m_rfErrs * 100U) / float(m_rfBits), signalText); + } else { if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) ::sprintf(text, "%-8.8s BER: %.1f%% ", reflector, float(m_rfErrs * 100U) / float(m_rfBits)); else ::sprintf(text, "BER: %.1f%% ", float(m_rfErrs * 100U) / float(m_rfBits)); } - m_slowData.setText(text); + + m_rfSlowData.setText(text); ::memcpy(data, DSTAR_NULL_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U); for (unsigned int i = 0U; i < 19U; i++) { - m_slowData.get(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES); + m_rfSlowData.getSlowData(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES); writeQueueDataRF(data); } @@ -1198,27 +1262,69 @@ void CDStarControl::sendError() m_network->getStatus(status, reflector); char text[40U]; - if (m_ackMessage && m_rssi != 0) { + if (m_ackMessage == DSTAR_ACK_RSSI && m_rssi != 0) { + if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) { + CUtils::removeChar(reflector, ' ');//remove space from reflector so all nicely fits onto 20 chars in case rssi < 99dBm + ::sprintf(text, "%-8.8s %.1f%% -%udBm ", reflector, float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); + } else { + ::sprintf(text, "BER:%.1f%% -%udBm ", float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); + } + } else if (m_ackMessage == DSTAR_ACK_SMETER && m_rssi != 0) { + unsigned int signal, plus; + char signalText[15U]; + CSMeter::getSignal(m_aveRSSI / m_rssiCount, signal, plus); + if (plus != 0U) + ::sprintf(signalText, "S%u+%02u", signal, plus); + else + ::sprintf(signalText, "S%u", signal); + if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) - ::sprintf(text, "%-8.8s -%udBm ", reflector, m_aveRSSI / m_rssiCount); + ::sprintf(text, "%-8.8s %.1f%% %s ", reflector, float(m_rfErrs * 100U) / float(m_rfBits), signalText); else - ::sprintf(text, "BER:%.1f%% -%udBm ", float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); - } - else { + ::sprintf(text, "BER:%.1f%% %s ", float(m_rfErrs * 100U) / float(m_rfBits), signalText); + } else { if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) ::sprintf(text, "%-8.8s BER: %.1f%% ", reflector, float(m_rfErrs * 100U) / float(m_rfBits)); else ::sprintf(text, "BER: %.1f%% ", float(m_rfErrs * 100U) / float(m_rfBits)); } - m_slowData.setText(text); + + m_rfSlowData.setText(text); ::memcpy(data, DSTAR_NULL_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U); for (unsigned int i = 0U; i < 19U; i++) { - m_slowData.get(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES); + m_rfSlowData.getSlowData(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES); writeQueueDataRF(data); } writeQueueEOTRF(); } +bool CDStarControl::isBusy() const +{ + return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; +} + +void CDStarControl::enable(bool enabled) +{ + if (!enabled && m_enabled) { + m_queue.clear(); + + // Reset the RF section + m_rfState = RS_RF_LISTENING; + + m_rfTimeoutTimer.stop(); + + // Reset the networking section + m_netState = RS_NET_IDLE; + + m_lastFrameValid = false; + + m_netTimeoutTimer.stop(); + m_networkWatchdog.stop(); + m_packetTimer.stop(); + } + + m_enabled = enabled; +} diff --git a/DStarControl.h b/DStarControl.h index 8c8e0a521..61bf03f29 100644 --- a/DStarControl.h +++ b/DStarControl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2019 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,7 +37,7 @@ class CDStarControl { public: - CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, bool ackMessage, bool errorReply, const std::vector& blackList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper); + CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, DSTAR_ACK_MESSAGE ackMessage, bool errorReply, const std::vector& blackList, const std::vector& whiteList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper); ~CDStarControl(); bool writeModem(unsigned char* data, unsigned int len); @@ -46,15 +46,20 @@ class CDStarControl { void clock(); + bool isBusy() const; + + void enable(bool enabled); + private: unsigned char* m_callsign; unsigned char* m_gateway; bool m_selfOnly; bool m_ackReply; - bool m_ackMessage; + DSTAR_ACK_MESSAGE m_ackMessage; bool m_errorReply; bool m_remoteGateway; std::vector m_blackList; + std::vector m_whiteList; CDStarNetwork* m_network; CDisplay* m_display; bool m_duplex; @@ -64,7 +69,8 @@ class CDStarControl { RPT_RF_STATE m_rfState; RPT_NET_STATE m_netState; bool m_net; - CDStarSlowData m_slowData; + CDStarSlowData m_rfSlowData; + CDStarSlowData m_netSlowData; unsigned char m_rfN; unsigned char m_netN; CTimer m_networkWatchdog; @@ -91,7 +97,29 @@ class CDStarControl { unsigned char m_minRSSI; unsigned int m_aveRSSI; unsigned int m_rssiCount; + bool m_enabled; FILE* m_fp; + unsigned char* m_rfVoiceSyncData; + unsigned int m_rfVoiceSyncDataLen; + unsigned char* m_netVoiceSyncData; + unsigned int m_netVoiceSyncDataLen; + bool m_rfNextFrameIsFastData; + bool m_netNextFrameIsFastData; + unsigned int m_rfSkipDTMFBlankingFrames; + unsigned int m_netSkipDTMFBlankingFrames; + + unsigned int maybeFixupVoiceFrame( + unsigned char* data, + unsigned int len, + unsigned int offset, + const char* log_prefix, + unsigned char n, + bool blank_dtmf, + unsigned char* voice_sync_data, + unsigned int& voice_sync_data_len, + bool& next_frame_is_fast_data, + unsigned int& skip_dtmf_blanking_frames + ); void writeNetwork(); diff --git a/DStarDefines.h b/DStarDefines.h index 697f57a0e..6ac7f060f 100644 --- a/DStarDefines.h +++ b/DStarDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2019,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,6 +28,8 @@ const unsigned char DSTAR_END_PATTERN_BYTES[] = { TAG_EOT, 0x55, 0x55, 0x55, 0x5 const unsigned int DSTAR_END_PATTERN_LENGTH_BYTES = 6U; const unsigned char DSTAR_NULL_AMBE_DATA_BYTES[] = { 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8 }; +// DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED is DSTAR_NULL_AMBE_DATA_BYTES XORed with DSTAR_SCRAMBLER_BYTES. +const unsigned char DSTAR_NULL_AMBE_DATA_BYTES_SCRAMBLED[] = { 0xEEU, 0xC2U, 0xA1U, 0xC8U, 0x42U, 0x6EU, 0x52U, 0x51U, 0xC3U }; const unsigned char DSTAR_NULL_SLOW_SYNC_BYTES[] = { 0x55, 0x2D, 0x16 }; // Note that these are already scrambled, 0x66 0x66 0x66 otherwise @@ -36,24 +38,25 @@ const unsigned char DSTAR_NULL_SLOW_DATA_BYTES[] = { 0x16, 0x29, 0xF5 }; const unsigned char DSTAR_NULL_FRAME_SYNC_BYTES[] = { TAG_DATA, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x55, 0x2D, 0x16 }; const unsigned char DSTAR_NULL_FRAME_DATA_BYTES[] = { TAG_DATA, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x16, 0x29, 0xF5 }; -const unsigned char DSTAR_KENWOOD_DATA_MODE_BYTES[] = { 0xEEU, 0xC2U, 0xA1U, 0xC8U, 0x42U, 0x6EU, 0x52U, 0x51U, 0xC3U }; -const unsigned char DSTAR_ICOM_DATA_MODE_BYTES1[] = { 0xB2U, 0x4DU, 0x22U, 0x48U, 0xC0U, 0x16U, 0x28U, 0x26U, 0xC8U }; -const unsigned char DSTAR_ICOM_DATA_MODE_BYTES2[] = { 0x70U, 0x4FU, 0x93U, 0x40U, 0x64U, 0x74U, 0x6DU, 0x30U, 0x2BU }; - const unsigned int DSTAR_VOICE_FRAME_LENGTH_BYTES = 9U; const unsigned int DSTAR_DATA_FRAME_LENGTH_BYTES = 3U; const unsigned int DSTAR_LONG_CALLSIGN_LENGTH = 8U; const unsigned int DSTAR_SHORT_CALLSIGN_LENGTH = 4U; -const unsigned char DSTAR_SLOW_DATA_TYPE_MASK = 0xF0U; -const unsigned char DSTAR_SLOW_DATA_TYPE_GPSDATA = 0x30U; -const unsigned char DSTAR_SLOW_DATA_TYPE_TEXT = 0x40U; -const unsigned char DSTAR_SLOW_DATA_TYPE_HEADER = 0x50U; -const unsigned char DSTAR_SLOW_DATA_TYPE_SQUELCH = 0xC0U; -const unsigned char DSTAR_SLOW_DATA_LENGTH_MASK = 0x0FU; - -const unsigned char DSTAR_SCRAMBLER_BYTES[] = {0x70U, 0x4FU, 0x93U}; +const unsigned char DSTAR_SLOW_DATA_TYPE_MASK = 0xF0U; +const unsigned char DSTAR_SLOW_DATA_TYPE_GPSDATA = 0x30U; +const unsigned char DSTAR_SLOW_DATA_TYPE_TEXT = 0x40U; +const unsigned char DSTAR_SLOW_DATA_TYPE_HEADER = 0x50U; +const unsigned char DSTAR_SLOW_DATA_TYPE_FASTDATA01 = 0x80U; +const unsigned char DSTAR_SLOW_DATA_TYPE_FASTDATA16 = 0x90U; +const unsigned char DSTAR_SLOW_DATA_TYPE_SQUELCH = 0xC0U; +const unsigned char DSTAR_SLOW_DATA_LENGTH_MASK = 0x0FU; + +// Data Frames are always scrambled using the first three bytes of +// DSTAR_SCRAMBLER_BYTES, and Voice Frames are scrambled with all nine +// bytes when Fast Data is in use +const unsigned char DSTAR_SCRAMBLER_BYTES[] = { 0x70U, 0x4FU, 0x93U, 0x40U, 0x64U, 0x74U, 0x6DU, 0x30U, 0x2BU }; const unsigned char DSTAR_DATA_MASK = 0x80U; const unsigned char DSTAR_REPEATER_MASK = 0x40U; diff --git a/DStarNetwork.cpp b/DStarNetwork.cpp index ebf971fcf..dbb6a2cb0 100644 --- a/DStarNetwork.cpp +++ b/DStarNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2019,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,10 +30,10 @@ const unsigned int BUFFER_LENGTH = 100U; -CDStarNetwork::CDStarNetwork(const std::string& gatewayAddress, unsigned int gatewayPort, unsigned int localPort, bool duplex, const char* version, bool debug) : -m_socket(localPort), -m_address(), -m_port(gatewayPort), +CDStarNetwork::CDStarNetwork(const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& localAddress, unsigned short localPort, bool duplex, const char* version, bool debug) : +m_socket(localAddress, localPort), +m_addr(), +m_addrLen(0U), m_duplex(duplex), m_version(version), m_debug(debug), @@ -44,14 +44,18 @@ m_inId(0U), m_buffer(1000U, "D-Star Network"), m_pollTimer(1000U, 60U), m_linkStatus(LS_NONE), -m_linkReflector(NULL) +m_linkReflector(NULL), +m_random() { - m_address = CUDPSocket::lookup(gatewayAddress); + if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) + m_addrLen = 0U; m_linkReflector = new unsigned char[DSTAR_LONG_CALLSIGN_LENGTH]; + ::memset(m_linkReflector, 0, DSTAR_LONG_CALLSIGN_LENGTH); - CStopWatch stopWatch; - ::srand(stopWatch.start()); + std::random_device rd; + std::mt19937 mt(rd()); + m_random = mt; } CDStarNetwork::~CDStarNetwork() @@ -61,14 +65,16 @@ CDStarNetwork::~CDStarNetwork() bool CDStarNetwork::open() { - LogMessage("Opening D-Star network connection"); - - if (m_address.s_addr == INADDR_NONE) + if (m_addrLen == 0U) { + LogError("Unable to resolve the address of the ircDDB Gateway"); return false; + } + + LogMessage("Opening D-Star network connection"); m_pollTimer.start(); - return m_socket.open(); + return m_socket.open(m_addr); } bool CDStarNetwork::writeHeader(const unsigned char* header, unsigned int length, bool busy) @@ -85,7 +91,8 @@ bool CDStarNetwork::writeHeader(const unsigned char* header, unsigned int length buffer[4] = busy ? 0x22U : 0x20U; // Create a random id for this transmission - m_outId = (::rand() % 65535U) + 1U; + std::uniform_int_distribution dist(0x0001, 0xfffe); + m_outId = dist(m_random); buffer[5] = m_outId / 256U; // Unique session id buffer[6] = m_outId % 256U; @@ -100,7 +107,7 @@ bool CDStarNetwork::writeHeader(const unsigned char* header, unsigned int length CUtils::dump(1U, "D-Star Network Header Sent", buffer, 49U); for (unsigned int i = 0U; i < 2U; i++) { - bool ret = m_socket.write(buffer, 49U, m_address, m_port); + bool ret = m_socket.write(buffer, 49U, m_addr, m_addrLen); if (!ret) return false; } @@ -143,7 +150,7 @@ bool CDStarNetwork::writeData(const unsigned char* data, unsigned int length, un if (m_debug) CUtils::dump(1U, "D-Star Network Data Sent", buffer, length + 9U); - return m_socket.write(buffer, length + 9U, m_address, m_port); + return m_socket.write(buffer, length + 9U, m_addr, m_addrLen); } bool CDStarNetwork::writePoll(const char* text) @@ -167,7 +174,7 @@ bool CDStarNetwork::writePoll(const char* text) // if (m_debug) // CUtils::dump(1U, "D-Star Network Poll Sent", buffer, 6U + length); - return m_socket.write(buffer, 6U + length, m_address, m_port); + return m_socket.write(buffer, 6U + length, m_addr, m_addrLen); } void CDStarNetwork::clock(unsigned int ms) @@ -192,15 +199,14 @@ void CDStarNetwork::clock(unsigned int ms) unsigned char buffer[BUFFER_LENGTH]; - in_addr address; - unsigned int port; - int length = m_socket.read(buffer, BUFFER_LENGTH, address, port); + sockaddr_storage address; + unsigned int addrLen; + int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrLen); if (length <= 0) return; - // Check if the data is for us - if (m_address.s_addr != address.s_addr || m_port != port) { - LogMessage("D-Star packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port); + if (!CUDPSocket::match(m_addr, address)) { + LogMessage("D-Star, packet received from an invalid source"); return; } @@ -309,6 +315,11 @@ void CDStarNetwork::reset() m_inId = 0U; } +bool CDStarNetwork::isConnected() const +{ + return (m_addrLen != 0); +} + void CDStarNetwork::close() { m_socket.close(); @@ -320,6 +331,8 @@ void CDStarNetwork::enable(bool enabled) { if (enabled && !m_enabled) reset(); + else if (!enabled && m_enabled) + m_buffer.clear(); m_enabled = enabled; } diff --git a/DStarNetwork.h b/DStarNetwork.h index aeebbbf5f..d7a1cc4d4 100644 --- a/DStarNetwork.h +++ b/DStarNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,10 +26,11 @@ #include #include +#include class CDStarNetwork { public: - CDStarNetwork(const std::string& gatewayAddress, unsigned int gatewayPort, unsigned int localPort, bool duplex, const char* version, bool debug); + CDStarNetwork(const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& localAddress, unsigned short localPort, bool duplex, const char* version, bool debug); ~CDStarNetwork(); bool open(); @@ -45,25 +46,28 @@ class CDStarNetwork { void reset(); + bool isConnected() const; + void close(); void clock(unsigned int ms); private: - CUDPSocket m_socket; - in_addr m_address; - unsigned int m_port; - bool m_duplex; - const char* m_version; - bool m_debug; - bool m_enabled; - uint16_t m_outId; - uint8_t m_outSeq; - uint16_t m_inId; + CUDPSocket m_socket; + sockaddr_storage m_addr; + unsigned int m_addrLen; + bool m_duplex; + const char* m_version; + bool m_debug; + bool m_enabled; + uint16_t m_outId; + uint8_t m_outSeq; + uint16_t m_inId; CRingBuffer m_buffer; - CTimer m_pollTimer; - LINK_STATUS m_linkStatus; - unsigned char* m_linkReflector; + CTimer m_pollTimer; + LINK_STATUS m_linkStatus; + unsigned char* m_linkReflector; + std::mt19937 m_random; bool writePoll(const char* text); }; diff --git a/DStarSlowData.cpp b/DStarSlowData.cpp index d33ca7eb8..5f11b702a 100644 --- a/DStarSlowData.cpp +++ b/DStarSlowData.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ #include "DStarSlowData.h" #include "DStarDefines.h" +#include "Utils.h" #include "CRC.h" #include "Log.h" @@ -31,6 +32,7 @@ m_ptr(0U), m_buffer(NULL), m_text(NULL), m_textPtr(0U), +m_textBits(0x00U), m_state(SDD_FIRST) { m_header = new unsigned char[50U]; // DSTAR_HEADER_LENGTH_BYTES @@ -45,7 +47,7 @@ CDStarSlowData::~CDStarSlowData() delete[] m_text; } -CDStarHeader* CDStarSlowData::add(const unsigned char* data) +CDStarHeader* CDStarSlowData::addHeader(const unsigned char* data) { assert(data != NULL); @@ -93,18 +95,92 @@ CDStarHeader* CDStarSlowData::add(const unsigned char* data) return new CDStarHeader(m_header); } +const unsigned char* CDStarSlowData::addText(const unsigned char* data) +{ + assert(data != NULL); + + switch (m_state) { + case SDD_FIRST: + m_buffer[0U] = data[9U] ^ DSTAR_SCRAMBLER_BYTES[0U]; + m_buffer[1U] = data[10U] ^ DSTAR_SCRAMBLER_BYTES[1U]; + m_buffer[2U] = data[11U] ^ DSTAR_SCRAMBLER_BYTES[2U]; + m_state = SDD_SECOND; + return NULL; + + case SDD_SECOND: + m_buffer[3U] = data[9U] ^ DSTAR_SCRAMBLER_BYTES[0U]; + m_buffer[4U] = data[10U] ^ DSTAR_SCRAMBLER_BYTES[1U]; + m_buffer[5U] = data[11U] ^ DSTAR_SCRAMBLER_BYTES[2U]; + m_state = SDD_FIRST; + break; + } + + switch (m_buffer[0U]) { + case DSTAR_SLOW_DATA_TYPE_TEXT | 0U: + CUtils::dump(1U, "D-Star slow data text fragment", m_buffer, 6U); + m_text[0U] = m_buffer[1U] & 0x7FU; + m_text[1U] = m_buffer[2U] & 0x7FU; + m_text[2U] = m_buffer[3U] & 0x7FU; + m_text[3U] = m_buffer[4U] & 0x7FU; + m_text[4U] = m_buffer[5U] & 0x7FU; + m_textBits |= 0x01U; + break; + case DSTAR_SLOW_DATA_TYPE_TEXT | 1U: + CUtils::dump(1U, "D-Star slow data text fragment", m_buffer, 6U); + m_text[5U] = m_buffer[1U] & 0x7FU; + m_text[6U] = m_buffer[2U] & 0x7FU; + m_text[7U] = m_buffer[3U] & 0x7FU; + m_text[8U] = m_buffer[4U] & 0x7FU; + m_text[9U] = m_buffer[5U] & 0x7FU; + m_textBits |= 0x02U; + break; + case DSTAR_SLOW_DATA_TYPE_TEXT | 2U: + CUtils::dump(1U, "D-Star slow data text fragment", m_buffer, 6U); + m_text[10U] = m_buffer[1U] & 0x7FU; + m_text[11U] = m_buffer[2U] & 0x7FU; + m_text[12U] = m_buffer[3U] & 0x7FU; + m_text[13U] = m_buffer[4U] & 0x7FU; + m_text[14U] = m_buffer[5U] & 0x7FU; + m_textBits |= 0x04U; + break; + case DSTAR_SLOW_DATA_TYPE_TEXT | 3U: + CUtils::dump(1U, "D-Star slow data text fragment", m_buffer, 6U); + m_text[15U] = m_buffer[1U] & 0x7FU; + m_text[16U] = m_buffer[2U] & 0x7FU; + m_text[17U] = m_buffer[3U] & 0x7FU; + m_text[18U] = m_buffer[4U] & 0x7FU; + m_text[19U] = m_buffer[5U] & 0x7FU; + m_text[20U] = 0x00U; + m_textBits |= 0x08U; + break; + default: + return NULL; + } + + if (m_textBits != 0x0FU) + return NULL; + + CUtils::dump(1U, "D-STar slow data text", m_text, 20U); + + m_textBits = 0x00U; + + return m_text; +} + void CDStarSlowData::start() { ::memset(m_header, 0x00U, DSTAR_HEADER_LENGTH_BYTES); - m_ptr = 0U; - m_state = SDD_FIRST; + m_ptr = 0U; + m_state = SDD_FIRST; + m_textBits = 0x00U; } void CDStarSlowData::reset() { - m_ptr = 0U; - m_state = SDD_FIRST; + m_ptr = 0U; + m_state = SDD_FIRST; + m_textBits = 0x00U; } void CDStarSlowData::setText(const char* text) @@ -139,10 +215,11 @@ void CDStarSlowData::setText(const char* text) m_text[22U] = text[18U]; m_text[23U] = text[19U]; - m_textPtr = 0U; + m_textPtr = 0U; + m_textBits = 0x00U; } -void CDStarSlowData::get(unsigned char* data) +void CDStarSlowData::getSlowData(unsigned char* data) { assert(data != NULL); diff --git a/DStarSlowData.h b/DStarSlowData.h index 52e0f5c25..eaedf45f7 100644 --- a/DStarSlowData.h +++ b/DStarSlowData.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,13 +26,15 @@ class CDStarSlowData { CDStarSlowData(); ~CDStarSlowData(); - CDStarHeader* add(const unsigned char* data); + CDStarHeader* addHeader(const unsigned char* data); + + const unsigned char* addText(const unsigned char* data); void start(); void reset(); void setText(const char* text); - void get(unsigned char* data); + void getSlowData(unsigned char* data); private: unsigned char* m_header; @@ -40,6 +42,7 @@ class CDStarSlowData { unsigned char* m_buffer; unsigned char* m_text; unsigned int m_textPtr; + unsigned char m_textBits; enum SDD_STATE { SDD_FIRST, diff --git a/Defines.h b/Defines.h index d4b9ff5c7..a7075b983 100644 --- a/Defines.h +++ b/Defines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +26,10 @@ const unsigned char MODE_YSF = 3U; const unsigned char MODE_P25 = 4U; const unsigned char MODE_NXDN = 5U; const unsigned char MODE_POCSAG = 6U; +const unsigned char MODE_M17 = 7U; + +const unsigned char MODE_FM = 10U; + const unsigned char MODE_CW = 98U; const unsigned char MODE_LOCKOUT = 99U; const unsigned char MODE_ERROR = 100U; @@ -36,6 +40,8 @@ const unsigned char TAG_DATA = 0x01U; const unsigned char TAG_LOST = 0x02U; const unsigned char TAG_EOT = 0x03U; +const unsigned int DSTAR_MODEM_DATA_LEN = 220U; + enum HW_TYPE { HWT_MMDVM, HWT_DVMEGA, @@ -44,7 +50,10 @@ enum HW_TYPE { HWT_MMDVM_HS_DUAL_HAT, HWT_NANO_HOTSPOT, HWT_NANO_DV, + HWT_D2RG_MMDVM_HS, HWT_MMDVM_HS, + HWT_OPENGD77_HS, + HWT_SKYBRIDGE, HWT_UNKNOWN }; @@ -52,6 +61,7 @@ enum RPT_RF_STATE { RS_RF_LISTENING, RS_RF_LATE_ENTRY, RS_RF_AUDIO, + RS_RF_DATA_AUDIO, RS_RF_DATA, RS_RF_REJECTED, RS_RF_INVALID @@ -60,7 +70,28 @@ enum RPT_RF_STATE { enum RPT_NET_STATE { RS_NET_IDLE, RS_NET_AUDIO, + RS_NET_DATA_AUDIO, RS_NET_DATA }; +enum DMR_BEACONS { + DMR_BEACONS_OFF, + DMR_BEACONS_NETWORK, + DMR_BEACONS_TIMED +}; + +enum DMR_OVCM_TYPES { + DMR_OVCM_OFF, + DMR_OVCM_RX_ON, + DMR_OVCM_TX_ON, + DMR_OVCM_ON, + DMR_OVCM_FORCE_OFF +}; + +enum DSTAR_ACK_MESSAGE { + DSTAR_ACK_BER, + DSTAR_ACK_RSSI, + DSTAR_ACK_SMETER +}; + #endif diff --git a/Display.cpp b/Display.cpp index 24f62f3a2..9d20773ff 100644 --- a/Display.cpp +++ b/Display.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2018,2020,2021,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,15 +18,15 @@ #include "Display.h" #include "Defines.h" -#include "SerialController.h" +#include "UARTController.h" #include "ModemSerialPort.h" #include "NullDisplay.h" -#include "TFTSerial.h" +#include "TFTSurenoo.h" #include "LCDproc.h" #include "Nextion.h" +#include "CASTInfo.h" #include "Conf.h" #include "Modem.h" -#include "UMP.h" #include "Log.h" #if defined(HD44780) @@ -99,6 +99,17 @@ void CDisplay::setQuit() setQuitInt(); } +void CDisplay::setFM() +{ + m_timer1.stop(); + m_timer2.stop(); + + m_mode1 = MODE_FM; + m_mode2 = MODE_FM; + + setFMInt(); +} + void CDisplay::writeDStar(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) { assert(my1 != NULL); @@ -149,22 +160,51 @@ void CDisplay::writeDMR(unsigned int slotNo, const std::string& src, bool group, writeDMRInt(slotNo, src, group, dst, type); } +void CDisplay::writeDMR(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type) +{ + assert(type != NULL); + + if (slotNo == 1U) { + m_timer1.start(); + m_mode1 = MODE_IDLE; + } else { + m_timer2.start(); + m_mode2 = MODE_IDLE; + } + + if (int err = writeDMRIntEx(slotNo, src, group, dst, type)) { + std::string src_str = src.get(keyCALLSIGN); + if (err < 0 && !src.get(keyFIRST_NAME).empty()) { + // emulate the result of old CDMRLookup::findWithName() + // (it returned callsign and firstname) + src_str += " " + src.get(keyFIRST_NAME); + } + writeDMRInt(slotNo, src_str, group, dst, type); + } +} + void CDisplay::writeDMRRSSI(unsigned int slotNo, unsigned char rssi) { if (rssi != 0U) writeDMRRSSIInt(slotNo, rssi); } -void CDisplay::writeDMRTA(unsigned int slotNo, unsigned char* talkerAlias, const char* type) +void CDisplay::writeDMRTA(unsigned int slotNo, const unsigned char* talkerAlias, const char* type) { - if (strcmp(type," ")==0) { writeDMRTAInt(slotNo, (unsigned char*)"", type); return; } - if (strlen((char*)talkerAlias)>=4U) writeDMRTAInt(slotNo, (unsigned char*)talkerAlias, type); + if (::strcmp(type, " ") == 0) { + writeDMRTAInt(slotNo, (unsigned char*)"", type); + return; + } + + if (::strlen((char*)talkerAlias) >= 4U) + writeDMRTAInt(slotNo, (unsigned char*)talkerAlias, type); } void CDisplay::writeDMRBER(unsigned int slotNo, float ber) { writeDMRBERInt(slotNo, ber); } + void CDisplay::clearDMR(unsigned int slotNo) { if (slotNo == 1U) { @@ -186,7 +226,7 @@ void CDisplay::clearDMR(unsigned int slotNo) } } -void CDisplay::writeFusion(const char* source, const char* dest, const char* type, const char* origin) +void CDisplay::writeFusion(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); @@ -196,7 +236,7 @@ void CDisplay::writeFusion(const char* source, const char* dest, const char* typ m_timer1.start(); m_mode1 = MODE_IDLE; - writeFusionInt(source, dest, type, origin); + writeFusionInt(source, dest, dgid, type, origin); } void CDisplay::writeFusionRSSI(unsigned char rssi) @@ -265,6 +305,17 @@ void CDisplay::writeNXDN(const char* source, bool group, unsigned int dest, cons writeNXDNInt(source, group, dest, type); } +void CDisplay::writeNXDN(const class CUserDBentry& source, bool group, unsigned int dest, const char* type) +{ + assert(type != NULL); + + m_timer1.start(); + m_mode1 = MODE_IDLE; + + if (writeNXDNIntEx(source, group, dest, type)) + writeNXDNInt(source.get(keyCALLSIGN).c_str(), group, dest, type); +} + void CDisplay::writeNXDNRSSI(unsigned char rssi) { if (rssi != 0U) @@ -287,6 +338,40 @@ void CDisplay::clearNXDN() } } +void CDisplay::writeM17(const char* source, const char* dest, const char* type) +{ + assert(source != NULL); + assert(dest != NULL); + assert(type != NULL); + + m_timer1.start(); + m_mode1 = MODE_IDLE; + + writeM17Int(source, dest, type); +} + +void CDisplay::writeM17RSSI(unsigned char rssi) +{ + if (rssi != 0U) + writeM17RSSIInt(rssi); +} + +void CDisplay::writeM17BER(float ber) +{ + writeM17BERInt(ber); +} + +void CDisplay::clearM17() +{ + if (m_timer1.hasExpired()) { + clearM17Int(); + m_timer1.stop(); + m_mode1 = MODE_IDLE; + } else { + m_mode1 = MODE_M17; + } +} + void CDisplay::writePOCSAG(uint32_t ric, const std::string& message) { m_timer1.start(); @@ -344,6 +429,11 @@ void CDisplay::clock(unsigned int ms) m_mode1 = MODE_IDLE; m_timer1.stop(); break; + case MODE_M17: + clearM17Int(); + m_mode1 = MODE_IDLE; + m_timer1.stop(); + break; case MODE_POCSAG: clearPOCSAGInt(); m_mode1 = MODE_IDLE; @@ -384,11 +474,25 @@ void CDisplay::writeDStarBERInt(float ber) { } +int CDisplay::writeDMRIntEx(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type) +{ + /* + * return value: + * < 0 error condition (i.e. not supported) + * -> call writeXXXXInt() to display + * = 0 no error, writeXXXXIntEx() displayed whole status + * = 1 no error, writeXXXXIntEx() displayed partial status + * -> call writeXXXXInt() to display remain part + * > 1 reserved for future use + */ + return -1; // not supported +} + void CDisplay::writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi) { } -void CDisplay::writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type) +void CDisplay::writeDMRTAInt(unsigned int slotNo, const unsigned char* talkerAlias, const char* type) { } @@ -419,32 +523,49 @@ void CDisplay::writeNXDNRSSIInt(unsigned char rssi) void CDisplay::writeNXDNBERInt(float ber) { } + +void CDisplay::writeM17RSSIInt(unsigned char rssi) +{ +} + +void CDisplay::writeM17BERInt(float ber) +{ +} + +int CDisplay::writeNXDNIntEx(const class CUserDBentry& source, bool group, unsigned int dest, const char* type) +{ + /* return value definition is same as writeDMRIntEx() */ + return -1; // not supported +} + /* Factory method extracted from MMDVMHost.cpp - BG5HHP */ -CDisplay* CDisplay::createDisplay(const CConf& conf, CUMP* ump, CModem* modem) +CDisplay* CDisplay::createDisplay(const CConf& conf, CModem* modem) { - CDisplay *display = NULL; + CDisplay *display = NULL; - std::string type = conf.getDisplay(); + std::string type = conf.getDisplay(); unsigned int dmrid = conf.getDMRId(); LogInfo("Display Parameters"); LogInfo(" Type: %s", type.c_str()); - if (type == "TFT Serial") { + if (type == "TFT Surenoo") { std::string port = conf.getTFTSerialPort(); unsigned int brightness = conf.getTFTSerialBrightness(); + unsigned int screenLayout = conf.getTFTSerialScreenLayout(); LogInfo(" Port: %s", port.c_str()); LogInfo(" Brightness: %u", brightness); + LogInfo(" Screen Layout: %u", screenLayout); ISerialPort* serial = NULL; if (port == "modem") - serial = new CModemSerialPort(modem); + serial = new IModemSerialPort(modem); else - serial = new CSerialController(port, SERIAL_9600); + serial = new CUARTController(port, 115200U); - display = new CTFTSerial(conf.getCallsign(), dmrid, serial, brightness); + display = new CTFTSurenoo(conf.getCallsign(), dmrid, serial, brightness, conf.getDuplex(), screenLayout); } else if (type == "Nextion") { std::string port = conf.getNextionPort(); unsigned int brightness = conf.getNextionBrightness(); @@ -483,23 +604,16 @@ CDisplay* CDisplay::createDisplay(const CConf& conf, CUMP* ump, CModem* modem) } if (port == "modem") { - ISerialPort* serial = new CModemSerialPort(modem); - display = new CNextion(conf.getCallsign(), dmrid, serial, brightness, displayClock, utc, idleBrightness, screenLayout, txFrequency, rxFrequency, displayTempInF, conf.getLocation()); - } else if (port == "ump") { - if (ump != NULL) { - display = new CNextion(conf.getCallsign(), dmrid, ump, brightness, displayClock, utc, idleBrightness, screenLayout, txFrequency, rxFrequency, displayTempInF, conf.getLocation()); - } else { - LogInfo(" NullDisplay loaded"); - display = new CNullDisplay; - } + ISerialPort* serial = new IModemSerialPort(modem); + display = new CNextion(conf.getCallsign(), dmrid, serial, brightness, displayClock, utc, idleBrightness, screenLayout, txFrequency, rxFrequency, displayTempInF); } else { - SERIAL_SPEED baudrate = SERIAL_9600; - if (screenLayout==4U) - baudrate = SERIAL_115200; + unsigned int baudrate = 9600U; + if (screenLayout == 4U) + baudrate = 115200U; - LogInfo(" Display baudrate: %u ",baudrate); - ISerialPort* serial = new CSerialController(port, baudrate); - display = new CNextion(conf.getCallsign(), dmrid, serial, brightness, displayClock, utc, idleBrightness, screenLayout, txFrequency, rxFrequency, displayTempInF, conf.getLocation()); + LogInfo(" Display baudrate: %u ", baudrate); + ISerialPort* serial = new CUARTController(port, baudrate); + display = new CNextion(conf.getCallsign(), dmrid, serial, brightness, displayClock, utc, idleBrightness, screenLayout, txFrequency, rxFrequency, displayTempInF); } } else if (type == "LCDproc") { std::string address = conf.getLCDprocAddress(); @@ -568,10 +682,12 @@ CDisplay* CDisplay::createDisplay(const CConf& conf, CUMP* ump, CModem* modem) bool invert = conf.getOLEDInvert(); bool scroll = conf.getOLEDScroll(); bool rotate = conf.getOLEDRotate(); - bool cast = conf.getOLEDCast(); + bool logosaver = conf.getOLEDLogoScreensaver(); - display = new COLED(type, brightness, invert, scroll, rotate, conf.getDMRNetworkSlot1(), conf.getDMRNetworkSlot2(), cast ? modem : NULL); + display = new COLED(type, brightness, invert, scroll, rotate, logosaver, conf.getDuplex()); #endif + } else if (type == "CAST") { + display = new CCASTInfo(modem); } else { LogWarning("No valid display found, disabling"); display = new CNullDisplay; diff --git a/Display.h b/Display.h index 65515be89..314c9dbcf 100644 --- a/Display.h +++ b/Display.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2018,2020,2021,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +20,8 @@ #define DISPLAY_H #include "Timer.h" +#include "UserDBentry.h" +#include "Modem.h" #include @@ -27,7 +29,6 @@ class CConf; class CModem; -class CUMP; class CDisplay { @@ -41,6 +42,7 @@ class CDisplay void setLockout(); void setError(const char* text); void setQuit(); + void setFM(); void writeDStar(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); void writeDStarRSSI(unsigned char rssi); @@ -48,12 +50,13 @@ class CDisplay void clearDStar(); void writeDMR(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); + void writeDMR(unsigned int slotNo, const CUserDBentry& src, bool group, const std::string& dst, const char* type); void writeDMRRSSI(unsigned int slotNo, unsigned char rssi); void writeDMRBER(unsigned int slotNo, float ber); - void writeDMRTA(unsigned int slotNo, unsigned char* talkerAlias, const char* type); + void writeDMRTA(unsigned int slotNo, const unsigned char* talkerAlias, const char* type); void clearDMR(unsigned int slotNo); - void writeFusion(const char* source, const char* dest, const char* type, const char* origin); + void writeFusion(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); void writeFusionRSSI(unsigned char rssi); void writeFusionBER(float ber); void clearFusion(); @@ -64,10 +67,16 @@ class CDisplay void clearP25(); void writeNXDN(const char* source, bool group, unsigned int dest, const char* type); + void writeNXDN(const CUserDBentry& source, bool group, unsigned int dest, const char* type); void writeNXDNRSSI(unsigned char rssi); void writeNXDNBER(float ber); void clearNXDN(); + void writeM17(const char* source, const char* dest, const char* type); + void writeM17RSSI(unsigned char rssi); + void writeM17BER(float ber); + void clearM17(); + void writePOCSAG(uint32_t ric, const std::string& message); void clearPOCSAG(); @@ -77,13 +86,14 @@ class CDisplay void clock(unsigned int ms); - static CDisplay* createDisplay(const CConf& conf, CUMP* ump, CModem* modem); + static CDisplay* createDisplay(const CConf& conf, CModem* modem); protected: virtual void setIdleInt() = 0; virtual void setLockoutInt() = 0; virtual void setErrorInt(const char* text) = 0; virtual void setQuitInt() = 0; + virtual void setFMInt() = 0; virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) = 0; virtual void writeDStarRSSIInt(unsigned char rssi); @@ -91,12 +101,13 @@ class CDisplay virtual void clearDStarInt() = 0; virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type) = 0; + virtual int writeDMRIntEx(unsigned int slotNo, const CUserDBentry& src, bool group, const std::string& dst, const char* type); virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); - virtual void writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type); + virtual void writeDMRTAInt(unsigned int slotNo, const unsigned char* talkerAlias, const char* type); virtual void writeDMRBERInt(unsigned int slotNo, float ber); virtual void clearDMRInt(unsigned int slotNo) = 0; - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) = 0; + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) = 0; virtual void writeFusionRSSIInt(unsigned char rssi); virtual void writeFusionBERInt(float ber); virtual void clearFusionInt() = 0; @@ -106,11 +117,17 @@ class CDisplay virtual void writeP25BERInt(float ber); virtual void clearP25Int() = 0; - virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type) = 0; + virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type) = 0; + virtual int writeNXDNIntEx(const CUserDBentry& source, bool group, unsigned int dest, const char* type); virtual void writeNXDNRSSIInt(unsigned char rssi); virtual void writeNXDNBERInt(float ber); virtual void clearNXDNInt() = 0; + virtual void writeM17Int(const char* source, const char* dest, const char* type) = 0; + virtual void writeM17RSSIInt(unsigned char rssi); + virtual void writeM17BERInt(float ber); + virtual void clearM17Int() = 0; + virtual void writePOCSAGInt(uint32_t ric, const std::string& message) = 0; virtual void clearPOCSAGInt() = 0; diff --git a/Dockerfile b/Dockerfile index 20368ed46..acf69d5d7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,8 @@ RUN apk add --update --no-cache \ make \ g++ \ git \ + libsamplerate-dev \ + linux-headers \ && rm -rf /var/cache/apk/* ADD ./ /MMDVMHost diff --git a/FMControl.cpp b/FMControl.cpp new file mode 100644 index 000000000..8cb7183f1 --- /dev/null +++ b/FMControl.cpp @@ -0,0 +1,192 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "FMControl.h" + +#include + +#if defined(DUMP_RF_AUDIO) +#include +#endif + +#define SWAP_BYTES_16(a) (((a >> 8) & 0x00FFU) | ((a << 8) & 0xFF00U)) + +const float DEEMPHASIS_GAIN_DB = 8.0F; // Audio gain adjustment +const float PREEMPHASIS_GAIN_DB = 0.0F; // Audio gain adjustment +const float FILTER_GAIN_DB = 2.0F; // Audio gain adjustment +const unsigned int FM_MASK = 0x00000FFFU; + +CFMControl::CFMControl(CFMNetwork* network, float txAudioGain, float rxAudioGain, bool preEmphasisOn, bool deEmphasisOn) : +m_network(network), +m_txAudioGain(txAudioGain), +m_rxAudioGain(rxAudioGain), +m_preEmphasisOn(preEmphasisOn), +m_deEmphasisOn(deEmphasisOn), +m_enabled(false), +m_incomingRFAudio(1600U, "Incoming RF FM Audio"), +m_preEmphasis(NULL), +m_deEmphasis(NULL), +m_filterStage1(NULL), +m_filterStage2(NULL), +m_filterStage3(NULL) +{ + assert(txAudioGain > 0.0F); + assert(rxAudioGain > 0.0F); + + m_preEmphasis = new CIIRDirectForm1Filter(8.315375384336983F, -7.03334621603483F,0.0F,1.0F, 0.282029168302153F,0.0F, PREEMPHASIS_GAIN_DB); + m_deEmphasis = new CIIRDirectForm1Filter(0.07708787090460224F, 0.07708787090460224F,0.0F, 1.0F, -0.8458242581907955F,0.0F, DEEMPHASIS_GAIN_DB); + + // Chebyshev type 1 0.2dB cheby type 1 3rd order 300-2700Hz fs=8000 + m_filterStage1 = new CIIRDirectForm1Filter(0.29495028f, 0.0f, -0.29495028f, 1.0f, -0.61384624f, -0.057158668f, FILTER_GAIN_DB); + m_filterStage2 = new CIIRDirectForm1Filter(1.0f, 2.0f, 1.0f, 1.0f, 0.9946123f, 0.6050482f, FILTER_GAIN_DB); + m_filterStage3 = new CIIRDirectForm1Filter(1.0f, -2.0f, 1.0f, 1.0f, -1.8414584f, 0.8804949f, FILTER_GAIN_DB); +} + +CFMControl::~CFMControl() +{ + delete m_preEmphasis; + delete m_deEmphasis; + + delete m_filterStage1; + delete m_filterStage2; + delete m_filterStage3; +} + +bool CFMControl::writeModem(const unsigned char* data, unsigned int length) +{ + assert(data != NULL); + assert(length > 0U); + + if (m_network == NULL) + return true; + + if (data[0U] == TAG_HEADER) + return true; + + if (data[0U] == TAG_EOT) + return m_network->writeEnd(); + + if (data[0U] != TAG_DATA) + return false; + + m_incomingRFAudio.addData(data + 1U, length - 1U); + unsigned int bufferLength = m_incomingRFAudio.dataSize(); + if (bufferLength > 240U) // 160 samples 12-bit + bufferLength = 240U; // 160 samples 12-bit + + if (bufferLength >= 3U) { + bufferLength = bufferLength - bufferLength % 3U; // Round down to nearest multiple of 3 + unsigned char bufferData[240U]; // 160 samples 12-bit + m_incomingRFAudio.getData(bufferData, bufferLength); + + unsigned int pack = 0U; + unsigned char* packPointer = (unsigned char*)&pack; + float out[160U]; // 160 samples 12-bit + unsigned int nOut = 0U; + short unpackedSamples[2U]; + + for (unsigned int i = 0U; i < bufferLength; i += 3U) { + // Extract unsigned 12 bit unsigned sample pairs packed into 3 bytes to 16 bit signed + packPointer[0U] = bufferData[i + 0U]; + packPointer[1U] = bufferData[i + 1U]; + packPointer[2U] = bufferData[i + 2U]; + + unpackedSamples[1U] = short(int(pack & FM_MASK) - 2048); + unpackedSamples[0U] = short(int(pack >> 12 & FM_MASK) - 2048); // + + // Process unpacked sample pair + for (unsigned char j = 0U; j < 2U; j++) { + // Convert to float (-1.0 to +1.0) + float sampleFloat = (float(unpackedSamples[j]) * m_rxAudioGain) / 2048.0F; + + // De-emphasise and remove CTCSS + if (m_deEmphasisOn) + sampleFloat = m_deEmphasis->filter(sampleFloat); + + out[nOut++] = m_filterStage3->filter(m_filterStage2->filter(m_filterStage1->filter(sampleFloat))); + } + } + +#if defined(DUMP_RF_AUDIO) + FILE * audiofile = fopen("./audiodump.bin", "ab"); + if (audiofile != NULL) { + fwrite(out, sizeof(float), nOut, audiofile); + fclose(audiofile); + } +#endif + return m_network->writeData(out, nOut); + } + + return true; +} + +unsigned int CFMControl::readModem(unsigned char* data, unsigned int space) +{ + assert(data != NULL); + assert(space > 0U); + + if (m_network == NULL) + return 0U; + + if (space > 240U) // 160 samples 12-bit + space = 240U; // 160 samples 12-bit + + float netData[160U]; // Modem can handle up to 160 samples at a time + unsigned int length = m_network->readData(netData, 160U); // 160 samples 12-bit + if (length == 0U) + return 0U; + + unsigned int pack = 0U; + unsigned char* packPointer = (unsigned char*)&pack; + unsigned int nData = 0U; + + for (unsigned int i = 0; i < length; i++) { + float sampleFloat = netData[i] * m_txAudioGain; + + // Pre-emphasis + if (m_preEmphasisOn) + sampleFloat = m_preEmphasis->filter(sampleFloat); + + // Convert float to 12-bit samples (0 to 4095) + unsigned int sample12bit = (unsigned int)((sampleFloat + 1.0F) * 2048.0F + 0.5F); + + // Pack 2 samples into 3 bytes + if ((i & 1U) == 0) { + pack = 0U; + pack = sample12bit << 12; + } else { + pack |= sample12bit; + + data[nData++] = packPointer[0U]; + data[nData++] = packPointer[1U]; + data[nData++] = packPointer[2U]; + } + } + + return nData; +} + +void CFMControl::clock(unsigned int ms) +{ + // May not be needed +} + +void CFMControl::enable(bool enabled) +{ + // May not be needed +} diff --git a/FMControl.h b/FMControl.h new file mode 100644 index 000000000..9344f773b --- /dev/null +++ b/FMControl.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(FMControl_H) +#define FMControl_H + +#include "FMNetwork.h" +#include "Defines.h" +#include "IIRDirectForm1Filter.h" + +// Uncomment this to dump audio to a raw audio file +// The file will be written in same folder as executable +// Toplay the file : ffplay -autoexit -f u16be -ar 8000 audiodump.bin +// #define DUMP_RF_AUDIO + +class CFMControl { +public: + CFMControl(CFMNetwork* network, float txAudioGain, float rxAudioGain, bool preEmphasisOn, bool deEmphasisOn); + ~CFMControl(); + + bool writeModem(const unsigned char* data, unsigned int length); + + unsigned int readModem(unsigned char* data, unsigned int space); + + void clock(unsigned int ms); + + void enable(bool enabled); + +private: + CFMNetwork* m_network; + float m_txAudioGain; + float m_rxAudioGain; + bool m_preEmphasisOn; + bool m_deEmphasisOn; + bool m_enabled; + CRingBuffer m_incomingRFAudio; + CIIRDirectForm1Filter* m_preEmphasis; + CIIRDirectForm1Filter* m_deEmphasis; + CIIRDirectForm1Filter* m_filterStage1; + CIIRDirectForm1Filter* m_filterStage2; + CIIRDirectForm1Filter* m_filterStage3; +}; + +#endif diff --git a/FMNetwork.cpp b/FMNetwork.cpp new file mode 100644 index 000000000..02ff5bf23 --- /dev/null +++ b/FMNetwork.cpp @@ -0,0 +1,572 @@ +/* + * Copyright (C) 2020,2021,2023 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "FMNetwork.h" +#include "Defines.h" +#include "Utils.h" +#include "Log.h" + +#include +#include +#include + +#include +#include +#include +#include + +const unsigned int MMDVM_SAMPLERATE = 8000U; + +const unsigned int BUFFER_LENGTH = 1500U; + +CFMNetwork::CFMNetwork(const std::string& callsign, const std::string& protocol, const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, unsigned int sampleRate, const std::string& squelchFile, bool debug) : +m_callsign(callsign), +m_protocol(FMNP_USRP), +m_socket(localAddress, localPort), +m_addr(), +m_addrLen(0U), +m_sampleRate(sampleRate), +m_squelchFile(squelchFile), +m_debug(debug), +m_enabled(false), +m_buffer(2000U, "FM Network"), +m_seqNo(0U), +m_resampler(NULL), +m_error(0), +m_fd(-1) +{ + assert(!callsign.empty()); + assert(gatewayPort > 0U); + assert(!gatewayAddress.empty()); + assert(sampleRate > 0U); + + if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) + m_addrLen = 0U; + + // Remove any trailing letters in the callsign + size_t pos = callsign.find_first_of(' '); + if (pos != std::string::npos) + m_callsign = callsign.substr(0U, pos); + + if (protocol == "RAW") + m_protocol = FMNP_RAW; + else + m_protocol = FMNP_USRP; + + m_resampler = ::src_new(SRC_SINC_FASTEST, 1, &m_error); +} + +CFMNetwork::~CFMNetwork() +{ + ::src_delete(m_resampler); +} + +bool CFMNetwork::open() +{ + if (m_addrLen == 0U) { + LogError("Unable to resolve the address of the FM Gateway"); + return false; + } + + LogMessage("Opening FM network connection"); + + if (!m_squelchFile.empty()) { + m_fd = ::open(m_squelchFile.c_str(), O_WRONLY | O_SYNC); + if (m_fd == -1) { + LogError("Cannot open the squelch file: %s, errno=%d", m_squelchFile.c_str(), errno); + return false; + } + } + + return m_socket.open(m_addr); +} + +bool CFMNetwork::writeData(const float* data, unsigned int nSamples) +{ + assert(data != NULL); + assert(nSamples > 0U); + + if (m_protocol == FMNP_USRP) + return writeUSRPData(data, nSamples); + else if (m_protocol == FMNP_RAW) + return writeRawData(data, nSamples); + else + return false; +} + +bool CFMNetwork::writeUSRPData(const float* data, unsigned int nSamples) +{ + assert(data != NULL); + assert(nSamples > 0U); + + if (m_seqNo == 0U) { + bool ret = writeUSRPStart(); + if (!ret) + return false; + } + + unsigned char buffer[500U]; + ::memset(buffer, 0x00U, 500U); + + unsigned int length = 0U; + + buffer[length++] = 'U'; + buffer[length++] = 'S'; + buffer[length++] = 'R'; + buffer[length++] = 'P'; + + // Sequence number + buffer[length++] = (m_seqNo >> 24) & 0xFFU; + buffer[length++] = (m_seqNo >> 16) & 0xFFU; + buffer[length++] = (m_seqNo >> 8) & 0xFFU; + buffer[length++] = (m_seqNo >> 0) & 0xFFU; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // PTT on + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x01U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // Type, 0 for audio + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + for (unsigned int i = 0U; i < nSamples; i++) { + short val = short(data[i] * 32767.0F + 0.5F); // Changing audio format from float to S16LE + + buffer[length++] = (val >> 0) & 0xFFU; + buffer[length++] = (val >> 8) & 0xFFU; + } + + if (m_debug) + CUtils::dump(1U, "FM Network Data Sent", buffer, length); + + m_seqNo++; + + return m_socket.write(buffer, length, m_addr, m_addrLen); +} + +bool CFMNetwork::writeRawData(const float* in, unsigned int nIn) +{ + assert(in != NULL); + assert(nIn > 0U); + + if (m_seqNo == 0U) { + bool ret = writeRawStart(); + if (!ret) + return false; + } + + unsigned char buffer[2000U]; + + unsigned int length = 0U; + + if (m_sampleRate != MMDVM_SAMPLERATE) { + unsigned int nOut = (nIn * m_sampleRate) / MMDVM_SAMPLERATE; + + float out[1000U]; + + SRC_DATA data; + data.data_in = in; + data.data_out = out; + data.input_frames = nIn; + data.output_frames = nOut; + data.end_of_input = 0; + data.src_ratio = float(m_sampleRate) / float(MMDVM_SAMPLERATE); + + int ret = ::src_process(m_resampler, &data); + if (ret != 0) { + LogError("Error from the write resampler - %d - %s", ret, ::src_strerror(ret)); + return false; + } + + for (unsigned int i = 0U; i < nOut; i++) { + short val = short(out[i] * 32767.0F + 0.5F); // Changing audio format from float to S16LE + + buffer[length++] = (val >> 0) & 0xFFU; + buffer[length++] = (val >> 8) & 0xFFU; + } + } else { + for (unsigned int i = 0U; i < nIn; i++) { + short val = short(in[i] * 32767.0F + 0.5F); // Changing audio format from float to S16LE + + buffer[length++] = (val >> 0) & 0xFFU; + buffer[length++] = (val >> 8) & 0xFFU; + } + } + + if (m_debug) + CUtils::dump(1U, "FM Network Data Sent", buffer, length); + + m_seqNo++; + + return m_socket.write(buffer, length, m_addr, m_addrLen); +} + +bool CFMNetwork::writeEnd() +{ + if (m_protocol == FMNP_USRP) + return writeUSRPEnd(); + else + return writeRawEnd(); +} + +bool CFMNetwork::writeUSRPEnd() +{ + unsigned char buffer[500U]; + ::memset(buffer, 0x00U, 500U); + + unsigned int length = 0U; + + buffer[length++] = 'U'; + buffer[length++] = 'S'; + buffer[length++] = 'R'; + buffer[length++] = 'P'; + + // Sequence number + buffer[length++] = (m_seqNo >> 24) & 0xFFU; + buffer[length++] = (m_seqNo >> 16) & 0xFFU; + buffer[length++] = (m_seqNo >> 8) & 0xFFU; + buffer[length++] = (m_seqNo >> 0) & 0xFFU; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // PTT off + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // Type, 0 for audio + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + length += 320U; + + m_seqNo = 0U; + + if (length > 0U) { + if (m_debug) + CUtils::dump(1U, "FM Network Data Sent", buffer, length); + + return m_socket.write(buffer, length, m_addr, m_addrLen); + } else { + return true; + } +} + +bool CFMNetwork::writeRawEnd() +{ + m_seqNo = 0U; + + if (m_fd != -1) { + size_t n = ::write(m_fd, "Z", 1); + if (n != 1) { + LogError("Cannot write to the squelch file: %s, errno=%d", m_squelchFile.c_str(), errno); + return false; + } + } + + return true; +} + +void CFMNetwork::clock(unsigned int ms) +{ + unsigned char buffer[BUFFER_LENGTH]; + + sockaddr_storage addr; + unsigned int addrlen; + int length = m_socket.read(buffer, BUFFER_LENGTH, addr, addrlen); + if (length <= 0) + return; + + // Check if the data is for us + if (m_protocol == FMNP_USRP) { + if (!CUDPSocket::match(addr, m_addr, IMT_ADDRESS_AND_PORT)) { + LogMessage("FM packet received from an invalid source"); + return; + } + } else { + if (!CUDPSocket::match(addr, m_addr, IMT_ADDRESS_ONLY)) { + LogMessage("FM packet received from an invalid source"); + return; + } + } + + if (!m_enabled) + return; + + if (m_debug) + CUtils::dump(1U, "FM Network Data Received", buffer, length); + + if (m_protocol == FMNP_USRP) { + // Invalid packet type? + if (::memcmp(buffer, "USRP", 4U) != 0) + return; + + if (length < 32) + return; + + // The type is a big-endian 4-byte integer + unsigned int type = (buffer[20U] << 24) + + (buffer[21U] << 16) + + (buffer[22U] << 8) + + (buffer[23U] << 0); + + if (type == 0U) + m_buffer.addData(buffer + 32U, length - 32U); + } else if (m_protocol == FMNP_RAW) { + m_buffer.addData(buffer, length); + } +} + +unsigned int CFMNetwork::readData(float* out, unsigned int nOut) +{ + assert(out != NULL); + assert(nOut > 0U); + + unsigned int bytes = m_buffer.dataSize() / sizeof(unsigned short); + if (bytes == 0U) + return 0U; + + if ((m_protocol == FMNP_RAW) && (m_sampleRate != MMDVM_SAMPLERATE)) { + unsigned int nIn = (nOut * m_sampleRate) / MMDVM_SAMPLERATE; + + if (bytes < nIn) { + nIn = bytes; + nOut = (nIn * MMDVM_SAMPLERATE) / m_sampleRate; + } + + unsigned char buffer[2000U]; + m_buffer.getData(buffer, nIn * sizeof(unsigned short)); + + float in[1000U]; + + for (unsigned int i = 0U; i < nIn; i++) { + short val = ((buffer[i * 2U + 0U] & 0xFFU) << 0) + ((buffer[i * 2U + 1U] & 0xFFU) << 8); + in[i] = float(val) / 65536.0F; + } + + SRC_DATA data; + data.data_in = in; + data.data_out = out; + data.input_frames = nIn; + data.output_frames = nOut; + data.end_of_input = 0; + data.src_ratio = float(MMDVM_SAMPLERATE) / float(m_sampleRate); + + int ret = ::src_process(m_resampler, &data); + if (ret != 0) { + LogError("Error from the read resampler - %d - %s", ret, ::src_strerror(ret)); + return false; + } + } else { + if (bytes < nOut) + nOut = bytes; + + unsigned char buffer[1500U]; + m_buffer.getData(buffer, nOut * sizeof(unsigned short)); + + for (unsigned int i = 0U; i < nOut; i++) { + short val = ((buffer[i * 2U + 0U] & 0xFFU) << 0) + ((buffer[i * 2U + 1U] & 0xFFU) << 8); + out[i] = float(val) / 65536.0F; + } + } + + return nOut; +} + +void CFMNetwork::reset() +{ + m_buffer.clear(); +} + +void CFMNetwork::close() +{ + m_socket.close(); + + if (m_fd != -1) { + ::close(m_fd); + m_fd = -1; + } + + LogMessage("Closing FM network connection"); +} + +void CFMNetwork::enable(bool enabled) +{ + if (enabled && !m_enabled) + reset(); + else if (!enabled && m_enabled) + reset(); + + m_enabled = enabled; +} + +bool CFMNetwork::writeUSRPStart() +{ + unsigned char buffer[500U]; + ::memset(buffer, 0x00U, 500U); + + unsigned int length = 0U; + + buffer[length++] = 'U'; + buffer[length++] = 'S'; + buffer[length++] = 'R'; + buffer[length++] = 'P'; + + // Sequence number + buffer[length++] = (m_seqNo >> 24) & 0xFFU; + buffer[length++] = (m_seqNo >> 16) & 0xFFU; + buffer[length++] = (m_seqNo >> 8) & 0xFFU; + buffer[length++] = (m_seqNo >> 0) & 0xFFU; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // PTT off + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // Type, 2 for metadata + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x02U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // TLV TAG for Metadata + buffer[length++] = 0x08U; + + // TLV Length + buffer[length++] = 3U + 4U + 3U + 1U + 1U + m_callsign.size() + 1U; + + // DMR Id + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // Rpt Id + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // Talk Group + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + buffer[length++] = 0x00U; + + // Time Slot + buffer[length++] = 0x00U; + + // Color Code + buffer[length++] = 0x00U; + + // Callsign + for (std::string::const_iterator it = m_callsign.cbegin(); it != m_callsign.cend(); ++it) + buffer[length++] = *it; + + // End of Metadata + buffer[length++] = 0x00U; + + length = 70U; + + if (length > 0U) { + if (m_debug) + CUtils::dump(1U, "FM Network Data Sent", buffer, length); + + return m_socket.write(buffer, length, m_addr, m_addrLen); + } else { + return true; + } +} + +bool CFMNetwork::writeRawStart() +{ + if (m_fd != -1) { + size_t n = ::write(m_fd, "O", 1); + if (n != 1) { + LogError("Cannot write to the squelch file: %s, errno=%d", m_squelchFile.c_str(), errno); + return false; + } + } + + return true; +} + diff --git a/FMNetwork.h b/FMNetwork.h new file mode 100644 index 000000000..9940f9009 --- /dev/null +++ b/FMNetwork.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2020,2021,2023 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef FMNetwork_H +#define FMNetwork_H + +#include "RingBuffer.h" +#include "UDPSocket.h" + +#include + +#include +#include + +enum FM_NETWORK_PROTOCOL { + FMNP_USRP, + FMNP_RAW +}; + +class CFMNetwork { +public: + CFMNetwork(const std::string& callsign, const std::string& protocol, const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, unsigned int sampleRate, const std::string& squelchFile, bool debug); + ~CFMNetwork(); + + bool open(); + + void enable(bool enabled); + + bool writeData(const float* data, unsigned int nSamples); + + bool writeEnd(); + + unsigned int readData(float* out, unsigned int nOut); + + void reset(); + + void close(); + + void clock(unsigned int ms); + +private: + std::string m_callsign; + FM_NETWORK_PROTOCOL m_protocol; + CUDPSocket m_socket; + sockaddr_storage m_addr; + unsigned int m_addrLen; + unsigned int m_sampleRate; + std::string m_squelchFile; + bool m_debug; + bool m_enabled; + CRingBuffer m_buffer; + unsigned int m_seqNo; + SRC_STATE* m_resampler; + int m_error; + int m_fd; + + bool writeUSRPStart(); + bool writeRawStart(); + + bool writeUSRPData(const float* data, unsigned int nSamples); + bool writeRawData(const float* in, unsigned int nIn); + + bool writeUSRPEnd(); + bool writeRawEnd(); +}; + +#endif + diff --git a/Golay24128.cpp b/Golay24128.cpp index 417da004c..22cef65e3 100644 --- a/Golay24128.cpp +++ b/Golay24128.cpp @@ -1,9 +1,10 @@ /* - * Copyright (C) 2010,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2010,2016,2021 by Jonathan Naylor G4KLX * Copyright (C) 2002 by Robert H. Morelos-Zaragoza. All rights reserved. */ #include "Golay24128.h" +#include "Utils.h" #include #include @@ -1089,20 +1090,25 @@ unsigned int CGolay24128::decode23127(unsigned int code) return code >> 11; } -unsigned int CGolay24128::decode24128(unsigned int code) +bool CGolay24128::decode24128(unsigned int in, unsigned int& out) { - return decode23127(code >> 1); + unsigned int syndrome = ::get_syndrome_23127(in >> 1); + unsigned int error_pattern = DECODING_TABLE_23127[syndrome] << 1; + + out = in ^ error_pattern; + + bool valid = (CUtils::countBits(syndrome) < 3U) || !(CUtils::countBits(out) & 1); + + out >>= 12; + + return valid; } -unsigned int CGolay24128::decode24128(unsigned char* bytes) +bool CGolay24128::decode24128(unsigned char* in, unsigned int& out) { - assert(bytes != NULL); + assert(in != NULL); - unsigned int code = bytes[0U]; - code <<= 8; - code |= bytes[1U]; - code <<= 8; - code |= bytes[2U]; + unsigned int code = (in[0U] << 16) | (in[1U] << 8) | (in[2U] << 0); - return decode23127(code >> 1); + return decode24128(code, out); } diff --git a/Golay24128.h b/Golay24128.h index 1ac7852f1..169b31adc 100644 --- a/Golay24128.h +++ b/Golay24128.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2010,2016,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,8 +25,9 @@ class CGolay24128 { static unsigned int encode24128(unsigned int data); static unsigned int decode23127(unsigned int code); - static unsigned int decode24128(unsigned int code); - static unsigned int decode24128(unsigned char* bytes); + + static bool decode24128(unsigned int in, unsigned int& out); + static bool decode24128(unsigned char* in, unsigned int& out); }; #endif diff --git a/HD44780.cpp b/HD44780.cpp index 970f17488..f91c0dee5 100644 --- a/HD44780.cpp +++ b/HD44780.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX & Tony Corbett G0WFV + * Copyright (C) 2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX & Tony Corbett G0WFV * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,6 +41,7 @@ const unsigned int DMR_RSSI_COUNT = 4U; // 4 * 360ms = 1440ms const unsigned int YSF_RSSI_COUNT = 13U; // 13 * 100ms = 1300ms const unsigned int P25_RSSI_COUNT = 7U; // 7 * 180ms = 1260ms const unsigned int NXDN_RSSI_COUNT = 28U; // 28 * 40ms = 1120ms +const unsigned int M17_RSSI_COUNT = 28U; // 28 * 40ms = 1120ms CHD44780::CHD44780(unsigned int rows, unsigned int cols, const std::string& callsign, unsigned int dmrid, const std::vector& pins, unsigned int i2cAddress, bool pwm, unsigned int pwmPin, unsigned int pwmBright, unsigned int pwmDim, bool displayClock, bool utc, bool duplex) : CDisplay(), @@ -211,12 +212,12 @@ void CHD44780::adafruitLCDSetup() ::pinMode(AF_RW, OUTPUT); ::digitalWrite(AF_RW, LOW); - m_rb = AF_RS; - m_strb = AF_E; - m_d0 = AF_D0; - m_d1 = AF_D1; - m_d2 = AF_D2; - m_d3 = AF_D3; + m_rb = AF_RS; + m_strb = AF_E; + m_d0 = AF_D0; + m_d1 = AF_D1; + m_d2 = AF_D2; + m_d3 = AF_D3; } void CHD44780::adafruitLCDColour(ADAFRUIT_COLOUR colour) @@ -275,12 +276,12 @@ void CHD44780::pcf8574LCDSetup() ::pcf8574Setup(AF_BASE, m_i2cAddress); // Turn on backlight - ::pinMode (AF_BL, OUTPUT); - ::digitalWrite (AF_BL, 1); + ::pinMode(AF_BL, OUTPUT); + ::digitalWrite(AF_BL, 1); // Set LCD to write mode. - ::pinMode (AF_RW, OUTPUT); - ::digitalWrite (AF_RW, 0); + ::pinMode(AF_RW, OUTPUT); + ::digitalWrite(AF_RW, 0); m_rb = AF_RS; m_strb = AF_E; @@ -297,7 +298,7 @@ void CHD44780::setIdleInt() ::lcdClear(m_fd); #ifdef ADAFRUIT_DISPLAY - adafruitLCDColour(AC_WHITE); + adafruitLCDColour(AC_WHITE); #endif if (m_pwm) { @@ -327,7 +328,7 @@ void CHD44780::setErrorInt(const char* text) assert(text != NULL); #ifdef ADAFRUIT_DISPLAY - adafruitLCDColour(AC_RED); + adafruitLCDColour(AC_RED); #endif m_clockDisplayTimer.stop(); // Stop the clock display @@ -399,6 +400,37 @@ void CHD44780::setQuitInt() m_dmr = false; } +void CHD44780::setFMInt() +{ + m_clockDisplayTimer.stop(); + ::lcdClear(m_fd); + +#ifdef ADAFRUIT_DISPLAY + adafruitLCDColour(AC_WHITE); +#endif + + if (m_pwm) { + if (m_pwmPin != 1U) + ::softPwmWrite(m_pwmPin, m_pwmDim); + else + ::pwmWrite(m_pwmPin, (m_pwmDim / 100) * 1024); + } + + // Print callsign and ID at on top row for all screen sizes + ::lcdPosition(m_fd, 0, 0); + ::lcdPrintf(m_fd, "%-6s", m_callsign.c_str()); + ::lcdPosition(m_fd, m_cols - 7, 0); + ::lcdPrintf(m_fd, "%7u", m_dmrid); + + // Print MMDVM and Idle on bottom row for all screen sizes + ::lcdPosition(m_fd, 0, m_rows - 1); + ::lcdPuts(m_fd, "MMDVM"); + ::lcdPosition(m_fd, m_cols - 4, m_rows - 1); + ::lcdPuts(m_fd, "FM"); // Gets overwritten by clock on 2 line screen + + m_dmr = false; +} + void CHD44780::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) { assert(my1 != NULL); @@ -408,7 +440,7 @@ void CHD44780::writeDStarInt(const char* my1, const char* my2, const char* your, assert(reflector != NULL); #ifdef ADAFRUIT_DISPLAY - adafruitLCDColour(AC_RED); + adafruitLCDColour(AC_RED); #endif m_clockDisplayTimer.stop(); // Stop the clock display @@ -432,11 +464,10 @@ void CHD44780::writeDStarInt(const char* my1, const char* my2, const char* your, ::lcdPrintf(m_fd, " %.8s/%.4s", my1, my2); ::lcdPosition(m_fd, m_cols - 1, (m_rows / 2) - 1); - if (strcmp(type, "R") == 0) { + if (strcmp(type, "R") == 0) ::lcdPutchar(m_fd, 2); - } else { + else ::lcdPutchar(m_fd, 3); - } ::sprintf(m_buffer1, "%.8s", your); @@ -462,19 +493,19 @@ void CHD44780::writeDStarInt(const char* my1, const char* my2, const char* your, ::lcdPrintf(m_fd, " %.*s", m_cols, m_buffer1); m_dmr = false; - m_rssiCount1 = 0U; + m_rssiCount1 = 0U; } -void CHD44780::writeDStarRSSIInt(unsigned char rssi) -{ - if (m_rssiCount1 == 0U && m_rows > 2) { +void CHD44780::writeDStarRSSIInt(unsigned char rssi) +{ + if (m_rssiCount1 == 0U && m_rows > 2) { ::lcdPosition(m_fd, 0, 3); ::lcdPrintf(m_fd, "-%3udBm", rssi); - } - - m_rssiCount1++; - if (m_rssiCount1 >= DSTAR_RSSI_COUNT) - m_rssiCount1 = 0U; + } + + m_rssiCount1++; + if (m_rssiCount1 >= DSTAR_RSSI_COUNT) + m_rssiCount1 = 0U; } void CHD44780::clearDStarInt() @@ -568,21 +599,20 @@ void CHD44780::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro ::lcdPosition(m_fd, m_cols - 3U, (m_rows / 2) - 1); ::lcdPuts(m_fd, " "); - if (group) { + if (group) ::lcdPutchar(m_fd, 5); - } else { + else ::lcdPutchar(m_fd, 4); - } - if (strcmp(type, "R") == 0) { + if (strcmp(type, "R") == 0) ::lcdPutchar(m_fd, 2); - } else { + else ::lcdPutchar(m_fd, 3); - } } else { ::lcdPosition(m_fd, 0, (m_rows / 2)); ::lcdPuts(m_fd, "2 "); - if (m_cols > 16 ) + + if (m_cols > 16) ::sprintf(m_buffer2, "%s > %s%s%s", src.c_str(), group ? "TG" : "", dst.c_str(), DEADSPACE); else ::sprintf(m_buffer2, "%s>%s%s", src.c_str(), dst.c_str(), DEADSPACE); @@ -591,17 +621,15 @@ void CHD44780::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro ::lcdPosition(m_fd, m_cols - 3U, (m_rows / 2)); ::lcdPuts(m_fd, " "); - if (group) { + if (group) ::lcdPutchar(m_fd, 5); - } else { + else ::lcdPutchar(m_fd, 4); - } - if (strcmp(type, "R") == 0) { + if (strcmp(type, "R") == 0) ::lcdPutchar(m_fd, 2); - } else { + else ::lcdPutchar(m_fd, 3); - } } } else { if (m_rows > 2U) { @@ -616,11 +644,10 @@ void CHD44780::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro ::lcdPrintf(m_fd, "%.*s", m_cols - 4U, m_buffer2); ::lcdPosition(m_fd, m_cols - 1U, (m_rows / 2) - 1); - if (strcmp(type, "R") == 0) { + if (strcmp(type, "R") == 0) ::lcdPutchar(m_fd, 2); - } else { + else ::lcdPutchar(m_fd, 3); - } ::lcdPosition(m_fd, 0, (m_rows / 2)); ::lcdPutchar(m_fd, 1); @@ -628,38 +655,38 @@ void CHD44780::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro ::lcdPrintf(m_fd, "%.*s", m_cols - 4U, m_buffer2); ::lcdPosition(m_fd, m_cols - 1U, (m_rows / 2)); - if (group) { + if (group) ::lcdPutchar(m_fd, 5); - } else { + else ::lcdPutchar(m_fd, 4); - } } + m_dmr = true; m_rssiCount1 = 0U; - m_rssiCount2 = 0U; + m_rssiCount2 = 0U; } -void CHD44780::writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi) -{ +void CHD44780::writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi) +{ if (m_rows > 2) { - if (slotNo == 1U) { - if (m_rssiCount1 == 0U) { + if (slotNo == 1U) { + if (m_rssiCount1 == 0U) { ::lcdPosition(m_fd, 0, 3); ::lcdPrintf(m_fd, "-%3udBm", rssi); - } + } - m_rssiCount1++; - if (m_rssiCount1 >= DMR_RSSI_COUNT) - m_rssiCount1 = 0U; - } else { - if (m_rssiCount2 == 0U) { + m_rssiCount1++; + if (m_rssiCount1 >= DMR_RSSI_COUNT) + m_rssiCount1 = 0U; + } else { + if (m_rssiCount2 == 0U) { ::lcdPosition(m_fd, (m_cols / 2), 3); ::lcdPrintf(m_fd, "-%3udBm", rssi); - } + } - m_rssiCount2++; - if (m_rssiCount2 >= DMR_RSSI_COUNT) - m_rssiCount2 = 0U; + m_rssiCount2++; + if (m_rssiCount2 >= DMR_RSSI_COUNT) + m_rssiCount2 = 0U; } } } @@ -691,7 +718,6 @@ void CHD44780::clearDMRInt(unsigned int slotNo) } } } else { - if (m_rows > 2U) { ::lcdPosition(m_fd, 0, (m_rows / 2) - 2); ::sprintf(m_buffer1, "%s", DEADSPACE); @@ -706,7 +732,7 @@ void CHD44780::clearDMRInt(unsigned int slotNo) } } -void CHD44780::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CHD44780::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); @@ -714,7 +740,7 @@ void CHD44780::writeFusionInt(const char* source, const char* dest, const char* assert(origin != NULL); #ifdef ADAFRUIT_DISPLAY - adafruitLCDColour(AC_RED); + adafruitLCDColour(AC_RED); #endif m_clockDisplayTimer.stop(); // Stop the clock display @@ -731,50 +757,46 @@ void CHD44780::writeFusionInt(const char* source, const char* dest, const char* ::lcdPuts(m_fd, "System Fusion"); if (m_rows == 2U && m_cols == 16U) { - char m_buffer1[16U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 4U && m_cols == 16U) { - char m_buffer1[16U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); - ::sprintf(m_buffer1, "%.10s", dest); + ::sprintf(m_buffer1, "DG-ID %u", dgid); ::lcdPosition(m_fd, 0, 2); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 4U && m_cols == 20U) { - char m_buffer1[20U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); - ::sprintf(m_buffer1, "%.10s", dest); + ::sprintf(m_buffer1, "DG-ID %u", dgid); ::lcdPosition(m_fd, 0, 2); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 2 && m_cols == 40U) { - char m_buffer1[40U]; - ::sprintf(m_buffer1, "%.10s > %.10s", source, dest); + ::sprintf(m_buffer1, "%.10s > DG-ID %u", source, dgid); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } m_dmr = false; - m_rssiCount1 = 0U; + m_rssiCount1 = 0U; } -void CHD44780::writeFusionRSSIInt(unsigned char rssi) -{ - if (m_rssiCount1 == 0U && m_rows > 2) { +void CHD44780::writeFusionRSSIInt(unsigned char rssi) +{ + if (m_rssiCount1 == 0U && m_rows > 2) { ::lcdPosition(m_fd, 0, 3); ::lcdPrintf(m_fd, "-%3udBm", rssi); - } - - m_rssiCount1++; - if (m_rssiCount1 >= YSF_RSSI_COUNT) - m_rssiCount1 = 0U; + } + + m_rssiCount1++; + if (m_rssiCount1 >= YSF_RSSI_COUNT) + m_rssiCount1 = 0U; } void CHD44780::clearFusionInt() @@ -782,7 +804,6 @@ void CHD44780::clearFusionInt() #ifdef ADAFRUIT_DISPLAY adafruitLCDColour(AC_PURPLE); #endif - m_clockDisplayTimer.stop(); // Stop the clock display if (m_rows == 2U && m_cols == 16U) { @@ -818,7 +839,7 @@ void CHD44780::writeP25Int(const char* source, bool group, unsigned int dest, co assert(type != NULL); #ifdef ADAFRUIT_DISPLAY - adafruitLCDColour(AC_RED); + adafruitLCDColour(AC_RED); #endif m_clockDisplayTimer.stop(); // Stop the clock display @@ -835,12 +856,10 @@ void CHD44780::writeP25Int(const char* source, bool group, unsigned int dest, co ::lcdPuts(m_fd, "P25"); if (m_rows == 2U && m_cols == 16U) { - char m_buffer1[16U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 4U && m_cols == 16U) { - char m_buffer1[16U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); @@ -849,7 +868,6 @@ void CHD44780::writeP25Int(const char* source, bool group, unsigned int dest, co ::lcdPosition(m_fd, 0, 2); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 4U && m_cols == 20U) { - char m_buffer1[20U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); @@ -858,7 +876,6 @@ void CHD44780::writeP25Int(const char* source, bool group, unsigned int dest, co ::lcdPosition(m_fd, 0, 2); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 2 && m_cols == 40U) { - char m_buffer1[40U]; ::sprintf(m_buffer1, "%.10s > %s%u", source, group ? "TG" : "", dest); ::lcdPosition(m_fd, 0, 1); @@ -866,19 +883,19 @@ void CHD44780::writeP25Int(const char* source, bool group, unsigned int dest, co } m_dmr = false; - m_rssiCount1 = 0U; + m_rssiCount1 = 0U; } -void CHD44780::writeP25RSSIInt(unsigned char rssi) -{ - if (m_rssiCount1 == 0U && m_rows > 2) { +void CHD44780::writeP25RSSIInt(unsigned char rssi) +{ + if (m_rssiCount1 == 0U && m_rows > 2) { ::lcdPosition(m_fd, 0, 3); ::lcdPrintf(m_fd, "-%3udBm", rssi); - } - - m_rssiCount1++; - if (m_rssiCount1 >= P25_RSSI_COUNT) - m_rssiCount1 = 0U; + } + + m_rssiCount1++; + if (m_rssiCount1 >= P25_RSSI_COUNT) + m_rssiCount1 = 0U; } void CHD44780::clearP25Int() @@ -922,7 +939,7 @@ void CHD44780::writeNXDNInt(const char* source, bool group, unsigned int dest, c assert(type != NULL); #ifdef ADAFRUIT_DISPLAY - adafruitLCDColour(AC_RED); + adafruitLCDColour(AC_RED); #endif m_clockDisplayTimer.stop(); // Stop the clock display @@ -939,12 +956,10 @@ void CHD44780::writeNXDNInt(const char* source, bool group, unsigned int dest, c ::lcdPuts(m_fd, "NXDN"); if (m_rows == 2U && m_cols == 16U) { - char m_buffer1[16U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 4U && m_cols == 16U) { - char m_buffer1[16U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); @@ -953,7 +968,6 @@ void CHD44780::writeNXDNInt(const char* source, bool group, unsigned int dest, c ::lcdPosition(m_fd, 0, 2); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 4U && m_cols == 20U) { - char m_buffer1[20U]; ::sprintf(m_buffer1, "%.10s >", source); ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); @@ -962,27 +976,25 @@ void CHD44780::writeNXDNInt(const char* source, bool group, unsigned int dest, c ::lcdPosition(m_fd, 0, 2); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } else if (m_rows == 2 && m_cols == 40U) { - char m_buffer1[40U]; ::sprintf(m_buffer1, "%.10s > %s%u", source, group ? "TG" : "", dest); - ::lcdPosition(m_fd, 0, 1); ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); } m_dmr = false; - m_rssiCount1 = 0U; + m_rssiCount1 = 0U; } -void CHD44780::writeNXDNRSSIInt(unsigned char rssi) -{ - if (m_rssiCount1 == 0U && m_rows > 2) { +void CHD44780::writeNXDNRSSIInt(unsigned char rssi) +{ + if (m_rssiCount1 == 0U && m_rows > 2) { ::lcdPosition(m_fd, 0, 3); ::lcdPrintf(m_fd, "-%3udBm", rssi); - } - - m_rssiCount1++; - if (m_rssiCount1 >= NXDN_RSSI_COUNT) - m_rssiCount1 = 0U; + } + + m_rssiCount1++; + if (m_rssiCount1 >= NXDN_RSSI_COUNT) + m_rssiCount1 = 0U; } void CHD44780::clearNXDNInt() @@ -1020,16 +1032,115 @@ void CHD44780::clearNXDNInt() } } +void CHD44780::writeM17Int(const char* source, const char* dest, const char* type) +{ + assert(source != NULL); + assert(dest != NULL); + assert(type != NULL); + +#ifdef ADAFRUIT_DISPLAY + adafruitLCDColour(AC_RED); +#endif + + m_clockDisplayTimer.stop(); // Stop the clock display + ::lcdClear(m_fd); + + if (m_pwm) { + if (m_pwmPin != 1U) + ::softPwmWrite(m_pwmPin, m_pwmBright); + else + ::pwmWrite(m_pwmPin, (m_pwmBright / 100) * 1024); + } + + ::lcdPosition(m_fd, 0, 0); + ::lcdPuts(m_fd, "M17"); + + ::sprintf(m_buffer1, "%.9s", source); + ::sprintf(m_buffer2, "%.9s", dest); + + if (m_rows == 2U && m_cols == 16U) { + ::lcdPosition(m_fd, 5, 0); + ::lcdPrintf(m_fd, "%.*s", m_cols - 5, m_buffer1); + ::lcdPosition(m_fd, 5, 1); + ::lcdPrintf(m_fd, "%.*s", m_cols - 5, m_buffer2); + } else if (m_rows == 4U && m_cols == 16U) { + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); + ::lcdPosition(m_fd, 0, 2); + ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer2); + } else if (m_rows == 4U && m_cols == 20U) { + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); + ::lcdPosition(m_fd, 0, 2); + ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); + } else if (m_rows == 2 && m_cols == 40U) { + ::sprintf(m_buffer1, "%.9s > %.9s", source, dest); + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "%.*s", m_cols, m_buffer1); + } + + m_dmr = false; + m_rssiCount1 = 0U; +} + +void CHD44780::writeM17RSSIInt(unsigned char rssi) +{ + if (m_rssiCount1 == 0U && m_rows > 2) { + ::lcdPosition(m_fd, 0, 3); + ::lcdPrintf(m_fd, "-%3udBm", rssi); + } + + m_rssiCount1++; + if (m_rssiCount1 >= M17_RSSI_COUNT) + m_rssiCount1 = 0U; +} + +void CHD44780::clearM17Int() +{ +#ifdef ADAFRUIT_DISPLAY + adafruitLCDColour(AC_PURPLE); +#endif + m_clockDisplayTimer.stop(); // Stop the clock display + + if (m_rows == 2U && m_cols == 16U) { + ::lcdPosition(m_fd, 5, 0); + ::lcdPrintf(m_fd, "%.*s", m_cols - 5, LISTENING); + ::lcdPosition(m_fd, 5, 1); + ::lcdPrintf(m_fd, "%.*s", m_cols - 5, " "); + } else if (m_rows == 4U && m_cols == 16U) { + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "%.*s", m_cols, LISTENING); + + ::lcdPosition(m_fd, 0, 2); + ::lcdPrintf(m_fd, "%.*s", m_cols, " "); + + ::lcdPosition(m_fd, 0, 3); + ::lcdPrintf(m_fd, "%.*s", m_cols, " "); + } else if (m_rows == 4U && m_cols == 20U) { + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "%.*s", m_cols, LISTENING); + + ::lcdPosition(m_fd, 0, 2); + ::lcdPrintf(m_fd, "%.*s", m_cols, " "); + + ::lcdPosition(m_fd, 0, 3); + ::lcdPrintf(m_fd, "%.*s", m_cols, " "); + } else if (m_rows == 2 && m_cols == 40U) { + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "%.*s", m_cols, LISTENING); + } +} + void CHD44780::writePOCSAGInt(uint32_t ric, const std::string& message) { ::lcdPosition(m_fd, m_cols - 5, m_rows - 1); - ::lcdPuts(m_fd, "POCSAG TX"); + ::lcdPuts(m_fd, "POCSG"); // Shortened "POCSAG TX" to 5 characters because it wraps around onto the next line (or on 16x2 displays the 1st line). } void CHD44780::clearPOCSAGInt() { ::lcdPosition(m_fd, m_cols - 5, m_rows - 1); - ::lcdPuts(m_fd, " Idle"); + ::lcdPuts(m_fd, " Idle"); // Reverted back to 5 character implementation. } void CHD44780::writeCWInt() @@ -1050,31 +1161,30 @@ void CHD44780::clockInt(unsigned int ms) // Idle clock display if (m_displayClock && m_clockDisplayTimer.isRunning() && m_clockDisplayTimer.hasExpired()) { - time_t currentTime; - struct tm *Time; - time(¤tTime); + time_t currentTime; + struct tm *Time; + ::time(¤tTime); - if (m_utc) { - Time = gmtime(¤tTime); - } else { - Time = localtime(¤tTime); - } + if (m_utc) + Time = ::gmtime(¤tTime); + else + Time = ::localtime(¤tTime); - setlocale(LC_TIME,""); - strftime(m_buffer1, 128, "%X", Time); // Time - strftime(m_buffer2, 128, "%x", Time); // Date + setlocale(LC_TIME,""); + ::strftime(m_buffer1, 128, "%X", Time); // Time + ::strftime(m_buffer2, 128, "%x", Time); // Date - if (m_cols == 16U && m_rows == 2U) { - ::lcdPosition(m_fd, m_cols - 10, 1); - ::lcdPrintf(m_fd, "%s%.*s", strlen(m_buffer1) > 8 ? "" : " ", 10, m_buffer1); - } else { - ::lcdPosition(m_fd, (m_cols - (strlen(m_buffer1) == 8 ? 8 : 10)) / 2, m_rows == 2 ? 1 : 2); - ::lcdPrintf(m_fd, "%.*s", strlen(m_buffer1) == 8 ? 8 : 10, m_buffer1); - ::lcdPosition(m_fd, (m_cols - strlen(m_buffer2)) / 2, m_rows == 2 ? 0 : 1); - ::lcdPrintf(m_fd, "%s", m_buffer2); - } + if (m_cols == 16U && m_rows == 2U) { + ::lcdPosition(m_fd, m_cols - 10, 1); + ::lcdPrintf(m_fd, "%s%.*s", strlen(m_buffer1) > 8 ? "" : " ", 10, m_buffer1); + } else { + ::lcdPosition(m_fd, (m_cols - (strlen(m_buffer1) == 8 ? 8 : 10)) / 2, m_rows == 2 ? 1 : 2); + ::lcdPrintf(m_fd, "%.*s", strlen(m_buffer1) == 8 ? 8 : 10, m_buffer1); + ::lcdPosition(m_fd, (m_cols - strlen(m_buffer2)) / 2, m_rows == 2 ? 0 : 1); + ::lcdPrintf(m_fd, "%s", m_buffer2); + } - m_clockDisplayTimer.start(); + m_clockDisplayTimer.start(); } } diff --git a/HD44780.h b/HD44780.h index 6160482eb..308f50de3 100644 --- a/HD44780.h +++ b/HD44780.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX & Tony Corbett G0WFV + * Copyright (C) 2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX & Tony Corbett G0WFV * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -89,46 +89,51 @@ enum ADAFRUIT_COLOUR { class CHD44780 : public CDisplay { public: - CHD44780(unsigned int rows, unsigned int cols, const std::string& callsign, unsigned int dmrid, const std::vector& pins, unsigned int i2cAddress, bool pwm, unsigned int pwmPin, unsigned int pwmBright, unsigned int pwmDim, bool displayClock, bool utc, bool duplex); - virtual ~CHD44780(); + CHD44780(unsigned int rows, unsigned int cols, const std::string& callsign, unsigned int dmrid, const std::vector& pins, unsigned int i2cAddress, bool pwm, unsigned int pwmPin, unsigned int pwmBright, unsigned int pwmDim, bool displayClock, bool utc, bool duplex); + virtual ~CHD44780(); - virtual bool open(); + virtual bool open(); - virtual void close(); + virtual void close(); protected: - virtual void setIdleInt(); - virtual void setErrorInt(const char* text); - virtual void setLockoutInt(); - virtual void setQuitInt(); + virtual void setIdleInt(); + virtual void setErrorInt(const char* text); + virtual void setLockoutInt(); + virtual void setQuitInt(); + virtual void setFMInt(); - virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); - virtual void writeDStarRSSIInt(unsigned char rssi); - virtual void clearDStarInt(); + virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); + virtual void writeDStarRSSIInt(unsigned char rssi); + virtual void clearDStarInt(); - virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); - virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); - virtual void clearDMRInt(unsigned int slotNo); + virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); + virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); + virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); - virtual void writeFusionRSSIInt(unsigned char rssi); - virtual void clearFusionInt(); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); + virtual void writeFusionRSSIInt(unsigned char rssi); + virtual void clearFusionInt(); - virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); - virtual void writeP25RSSIInt(unsigned char rssi); - virtual void clearP25Int(); + virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); + virtual void writeP25RSSIInt(unsigned char rssi); + virtual void clearP25Int(); - virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); - virtual void writeNXDNRSSIInt(unsigned char rssi); - virtual void clearNXDNInt(); + virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); + virtual void writeNXDNRSSIInt(unsigned char rssi); + virtual void clearNXDNInt(); - virtual void writePOCSAGInt(uint32_t ric, const std::string& message); - virtual void clearPOCSAGInt(); + virtual void writeM17Int(const char* source, const char* dest, const char* type); + virtual void writeM17RSSIInt(unsigned char rssi); + virtual void clearM17Int(); - virtual void writeCWInt(); - virtual void clearCWInt(); + virtual void writePOCSAGInt(uint32_t ric, const std::string& message); + virtual void clearPOCSAGInt(); - virtual void clockInt(unsigned int ms); + virtual void writeCWInt(); + virtual void clearCWInt(); + + virtual void clockInt(unsigned int ms); private: unsigned int m_rows; @@ -161,12 +166,12 @@ class CHD44780 : public CDisplay */ #ifdef ADAFRUIT_DISPLAY - void adafruitLCDSetup(); - void adafruitLCDColour(ADAFRUIT_COLOUR colour); + void adafruitLCDSetup(); + void adafruitLCDColour(ADAFRUIT_COLOUR colour); #endif #ifdef PCF8574_DISPLAY - void pcf8574LCDSetup(); + void pcf8574LCDSetup(); #endif }; diff --git a/I2CController.cpp b/I2CController.cpp index b44ab03df..9886443f9 100644 --- a/I2CController.cpp +++ b/I2CController.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002-2004,2007-2011,2013,2014-2017 by Jonathan Naylor G4KLX + * Copyright (C) 2002-2004,2007-2011,2013,2014-2017,2020 by Jonathan Naylor G4KLX * Copyright (C) 1999-2001 by Thomas Sailor HB9JNX * * This program is free software; you can redistribute it and/or modify @@ -17,6 +17,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#if defined(__linux__) + #include "I2CController.h" #include "Log.h" @@ -24,52 +26,18 @@ #include #include - -#if defined(_WIN32) || defined(_WIN64) - -#include -#include - -CI2CController::CI2CController(const std::string& device, SERIAL_SPEED speed, unsigned int address, bool assertRTS) : -CSerialController(device, speed, assertRTS), -m_address(address) -{ -} - -CI2CController::~CI2CController() -{ -} - -bool CI2CController::open() -{ - return CSerialController::open(); -} - -int CI2CController::read(unsigned char* buffer, unsigned int length) -{ - return CSerialController::read(buffer, length); -} - -int CI2CController::write(const unsigned char* buffer, unsigned int length) -{ - return CSerialController::write(buffer, length); -} - -#else - #include #include #include #include #include #include -#if !defined(__APPLE__) #include -#endif -CI2CController::CI2CController(const std::string& device, SERIAL_SPEED speed, unsigned int address, bool assertRTS) : -CSerialController(device, speed, assertRTS), -m_address(address) +CI2CController::CI2CController(const std::string& device, unsigned int address) : +m_device(device), +m_address(address), +m_fd(-1) { } @@ -81,7 +49,6 @@ bool CI2CController::open() { assert(m_fd == -1); -#if !defined(__APPLE__) m_fd = ::open(m_device.c_str(), O_RDWR); if (m_fd < 0) { LogError("Cannot open device - %s", m_device.c_str()); @@ -89,19 +56,16 @@ bool CI2CController::open() } if (::ioctl(m_fd, I2C_TENBIT, 0) < 0) { - LogError("CI2C: failed to set 7bitaddress"); + LogError("I2C: failed to set 7bitaddress"); ::close(m_fd); return false; } if (::ioctl(m_fd, I2C_SLAVE, m_address) < 0) { - LogError("CI2C: Failed to acquire bus access/talk to slave 0x%02X", m_address); + LogError("I2C: Failed to acquire bus access/talk to slave 0x%02X", m_address); ::close(m_fd); return false; } -#else - #warning "I2C controller does not support OSX" -#endif return true; } @@ -117,7 +81,6 @@ int CI2CController::read(unsigned char* buffer, unsigned int length) unsigned int offset = 0U; while (offset < length) { -#if !defined(__APPLE__) ssize_t n = ::read(m_fd, buffer + offset, 1U); if (n < 0) { if (errno != EAGAIN) { @@ -128,7 +91,6 @@ int CI2CController::read(unsigned char* buffer, unsigned int length) if (n > 0) offset += n; -#endif } return length; @@ -144,10 +106,7 @@ int CI2CController::write(const unsigned char* buffer, unsigned int length) unsigned int ptr = 0U; while (ptr < length) { - ssize_t n = 0U; -#if !defined(__APPLE__) - n = ::write(m_fd, buffer + ptr, 1U); -#endif + ssize_t n = ::write(m_fd, buffer + ptr, 1U); if (n < 0) { if (errno != EAGAIN) { LogError("Error returned from write(), errno=%d", errno); @@ -162,4 +121,12 @@ int CI2CController::write(const unsigned char* buffer, unsigned int length) return length; } +void CI2CController::close() +{ + assert(m_fd != -1); + + ::close(m_fd); + m_fd = -1; +} + #endif diff --git a/I2CController.h b/I2CController.h index 6e596727b..b178af378 100644 --- a/I2CController.h +++ b/I2CController.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002-2004,2007-2009,2011-2013,2015-2017 by Jonathan Naylor G4KLX + * Copyright (C) 2002-2004,2007-2009,2011-2013,2015-2017,2020,2021 by Jonathan Naylor G4KLX * Copyright (C) 1999-2001 by Thomas Sailor HB9JNX * * This program is free software; you can redistribute it and/or modify @@ -20,11 +20,16 @@ #ifndef I2CController_H #define I2CController_H -#include "SerialController.h" +#if defined(__linux__) -class CI2CController : public CSerialController { +#include "ModemPort.h" +#include "SerialPort.h" + +#include + +class CI2CController : public ISerialPort, public IModemPort { public: - CI2CController(const std::string& device, SERIAL_SPEED speed, unsigned int address = 0x22U, bool assertRTS = false); + CI2CController(const std::string& device, unsigned int address = 0x22U); virtual ~CI2CController(); virtual bool open(); @@ -33,8 +38,14 @@ class CI2CController : public CSerialController { virtual int write(const unsigned char* buffer, unsigned int length); + virtual void close(); + private: + std::string m_device; unsigned int m_address; + int m_fd; }; #endif + +#endif diff --git a/IIRDirectForm1Filter.cpp b/IIRDirectForm1Filter.cpp new file mode 100644 index 000000000..946acdddc --- /dev/null +++ b/IIRDirectForm1Filter.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2015-2020 by Jonathan Naylor G4KLX + * Copyright (C) 2020 by Geoffrey Merck - F4FXL KC3FRA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "IIRDirectForm1Filter.h" +#include "math.h" + +CIIRDirectForm1Filter::CIIRDirectForm1Filter(float b0, float b1, float b2, float , float a1, float a2, float addtionalGaindB) : +m_x2(0.0F), +m_y2(0.0F), +m_x1(0.0F), +m_y1(0.0F), +m_b0(b0), +m_b1(b1), +m_b2(b2), +m_a1(a1), +m_a2(a2), +m_additionalGainLin(0.0F) +{ + m_additionalGainLin = ::powf(10.0F, addtionalGaindB / 20.0F); +} + +float CIIRDirectForm1Filter::filter(float sample) +{ + float output = m_b0 * sample + + m_b1 * m_x1 + + m_b2 * m_x2 + - m_a1 * m_y1 + - m_a2 * m_y2; + + m_x2 = m_x1; + m_y2 = m_y1; + m_x1 = sample; + m_y1 = output; + + return output * m_additionalGainLin; +} + +void CIIRDirectForm1Filter::reset() +{ + m_x1 = 0.0f; + m_x2 = 0.0f; + m_y1 = 0.0f; + m_y2 = 0.0f; +} diff --git a/IIRDirectForm1Filter.h b/IIRDirectForm1Filter.h new file mode 100644 index 000000000..f575f7fcd --- /dev/null +++ b/IIRDirectForm1Filter.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2015-2020 by Jonathan Naylor G4KLX + * Copyright (C) 2020 by Geoffrey Merck - F4FXL KC3FRA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(IIRDIRECTFORM1FILTER_H) +#define IIRDIRECTFORM1FILTER_H + +class CIIRDirectForm1Filter +{ +public: + CIIRDirectForm1Filter(float b0, float b1, float b2, float, float a1, float a2, float additionalGaindB); + float filter(float sample); + void reset(); + +private: +// delay line + float m_x2; // x[n-2] + float m_y2; // y[n-2] + float m_x1; // x[n-1] + float m_y1; // y[n-1] + + // coefficients + // FIR + float m_b0; + float m_b1; + float m_b2; + // IIR + float m_a1; + float m_a2; + + float m_additionalGainLin; +}; + + +#endif \ No newline at end of file diff --git a/ISSUES.txt b/ISSUES.txt deleted file mode 100644 index 537f79fb1..000000000 --- a/ISSUES.txt +++ /dev/null @@ -1,9 +0,0 @@ -D-Star: On some radios, the header is not decoded correctly. It looks like frequency drift at the beginning of the transmission. - -DMR: DMO mode doesn't wake up older radios like other radios do. - -YSF: No known issues. - -P25: Upgrade the filters, processing power in the Due permiting. - -NXDN: No known issues. diff --git a/Images/M17.bmp b/Images/M17.bmp new file mode 100644 index 000000000..8d88e8e0f Binary files /dev/null and b/Images/M17.bmp differ diff --git a/LCDproc.cpp b/LCDproc.cpp index 8ef27215a..43595a800 100644 --- a/LCDproc.cpp +++ b/LCDproc.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2016,2017,2018 by Tony Corbett G0WFV - * Copyright (C) 2018 by Jonathan Naylor G4KLX + * Copyright (C) 2018,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -72,7 +72,7 @@ #include #include #else -#include +#include #endif #define BUFFER_MAX_LEN 128 @@ -95,8 +95,9 @@ const unsigned int DMR_RSSI_COUNT = 4U; // 4 * 360ms = 1440ms const unsigned int YSF_RSSI_COUNT = 13U; // 13 * 100ms = 1300ms const unsigned int P25_RSSI_COUNT = 7U; // 7 * 180ms = 1260ms const unsigned int NXDN_RSSI_COUNT = 28U; // 28 * 40ms = 1120ms +const unsigned int M17_RSSI_COUNT = 28U; // 28 * 40ms = 1120ms -CLCDproc::CLCDproc(std::string address, unsigned int port, unsigned int localPort, const std::string& callsign, unsigned int dmrid, bool displayClock, bool utc, bool duplex, bool dimOnIdle) : +CLCDproc::CLCDproc(std::string address, unsigned int port, unsigned short localPort, const std::string& callsign, unsigned int dmrid, bool displayClock, bool utc, bool duplex, bool dimOnIdle) : CDisplay(), m_address(address), m_port(port), @@ -121,44 +122,53 @@ CLCDproc::~CLCDproc() bool CLCDproc::open() { - const char *server; - unsigned int port, localPort; - struct sockaddr_in serverAddress, clientAddress; - struct hostent *h; + int err; + unsigned int addrlen; + std::string port, localPort; + struct sockaddr_storage serverAddress, clientAddress; + struct addrinfo hints, *res; - server = m_address.c_str(); - port = m_port; - localPort = m_localPort; + port = std::to_string(m_port); + localPort = std::to_string(m_localPort); + memset(&hints, 0, sizeof(hints)); + /* Lookup the hostname address */ + hints.ai_flags = AI_NUMERICSERV; + hints.ai_socktype = SOCK_STREAM; + err = getaddrinfo(m_address.c_str(), port.c_str(), &hints, &res); + if (err) { + LogError("LCDproc, cannot lookup server"); + return false; + } + memcpy(&serverAddress, res->ai_addr, addrlen = res->ai_addrlen); + freeaddrinfo(res); + + /* Lookup the client address (random port - need to specify manual port from ini file) */ + hints.ai_flags = AI_NUMERICSERV | AI_PASSIVE; + hints.ai_family = serverAddress.ss_family; + err = getaddrinfo(NULL, localPort.c_str(), &hints, &res); + if (err) { + LogError("LCDproc, cannot lookup client"); + return false; + } + memcpy(&clientAddress, res->ai_addr, res->ai_addrlen); + freeaddrinfo(res); /* Create TCP socket */ - m_socketfd = socket(AF_INET, SOCK_STREAM, 0); + m_socketfd = socket(clientAddress.ss_family, SOCK_STREAM, 0); if (m_socketfd == -1) { LogError("LCDproc, failed to create socket"); return false; } - /* Sets client address (random port - need to specify manual port from ini file?) */ - clientAddress.sin_family = AF_INET; - clientAddress.sin_addr.s_addr = htonl(INADDR_ANY); - //clientAddress.sin_port = htons(0); - clientAddress.sin_port = htons(localPort); - /* Bind the address to the socket */ - if (bind(m_socketfd, (struct sockaddr *)&clientAddress, sizeof(clientAddress)) == -1) { + if (bind(m_socketfd, (struct sockaddr *)&clientAddress, addrlen) == -1) { LogError("LCDproc, error whilst binding address"); return false; } - /* Lookup the hostname address */ - h = gethostbyname(server); - - /* Sets server address */ - serverAddress.sin_family = h->h_addrtype; - memcpy((char*)&serverAddress.sin_addr.s_addr, h->h_addr_list[0], h->h_length); - serverAddress.sin_port = htons(port); - - if (connect(m_socketfd, (struct sockaddr * )&serverAddress, sizeof(serverAddress))==-1) { + /* Connect to server */ + if (connect(m_socketfd, (struct sockaddr *)&serverAddress, addrlen) == -1) { LogError("LCDproc, cannot connect to server"); return false; } @@ -179,6 +189,7 @@ void CLCDproc::setIdleInt() socketPrintf(m_socketfd, "screen_set YSF -priority hidden"); socketPrintf(m_socketfd, "screen_set P25 -priority hidden"); socketPrintf(m_socketfd, "screen_set NXDN -priority hidden"); + socketPrintf(m_socketfd, "screen_set M17 -priority hidden"); socketPrintf(m_socketfd, "widget_set Status Status %u %u Idle", m_cols - 3, m_rows); socketPrintf(m_socketfd, "output 0"); // Clear all LEDs } @@ -198,6 +209,7 @@ void CLCDproc::setErrorInt(const char* text) socketPrintf(m_socketfd, "screen_set YSF -priority hidden"); socketPrintf(m_socketfd, "screen_set P25 -priority hidden"); socketPrintf(m_socketfd, "screen_set NXDN -priority hidden"); + socketPrintf(m_socketfd, "screen_set M17 -priority hidden"); socketPrintf(m_socketfd, "widget_set Status Status %u %u Error", m_cols - 4, m_rows); socketPrintf(m_socketfd, "output 0"); // Clear all LEDs } @@ -215,6 +227,7 @@ void CLCDproc::setLockoutInt() socketPrintf(m_socketfd, "screen_set YSF -priority hidden"); socketPrintf(m_socketfd, "screen_set P25 -priority hidden"); socketPrintf(m_socketfd, "screen_set NXDN -priority hidden"); + socketPrintf(m_socketfd, "screen_set M17 -priority hidden"); socketPrintf(m_socketfd, "widget_set Status Status %u %u Lockout", m_cols - 6, m_rows); socketPrintf(m_socketfd, "output 0"); // Clear all LEDs } @@ -234,6 +247,7 @@ void CLCDproc::setQuitInt() socketPrintf(m_socketfd, "screen_set YSF -priority hidden"); socketPrintf(m_socketfd, "screen_set P25 -priority hidden"); socketPrintf(m_socketfd, "screen_set NXDN -priority hidden"); + socketPrintf(m_socketfd, "screen_set M17 -priority hidden"); socketPrintf(m_socketfd, "widget_set Status Status %u %u Stopped", m_cols - 6, m_rows); socketPrintf(m_socketfd, "output 0"); // Clear all LEDs } @@ -241,6 +255,24 @@ void CLCDproc::setQuitInt() m_dmr = false; } +void CLCDproc::setFMInt() +{ + m_clockDisplayTimer.stop(); // Stop the clock display + + if (m_screensDefined) { + socketPrintf(m_socketfd, "screen_set DStar -priority hidden"); + socketPrintf(m_socketfd, "screen_set DMR -priority hidden"); + socketPrintf(m_socketfd, "screen_set YSF -priority hidden"); + socketPrintf(m_socketfd, "screen_set P25 -priority hidden"); + socketPrintf(m_socketfd, "screen_set NXDN -priority hidden"); + socketPrintf(m_socketfd, "screen_set M17 -priority hidden"); + socketPrintf(m_socketfd, "widget_set Status Status %u %u FM", m_cols - 6, m_rows); + socketPrintf(m_socketfd, "output 0"); // Clear all LEDs + } + + m_dmr = false; +} + void CLCDproc::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) { assert(my1 != NULL); @@ -294,7 +326,7 @@ void CLCDproc::clearDStarInt() { m_clockDisplayTimer.stop(); // Stop the clock display - socketPrintf(m_socketfd, "widget_set DStar Line2 1 2 15 2 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set DStar Line2 1 2 15 2 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set DStar Line3 1 3 15 3 h 3 \"\""); socketPrintf(m_socketfd, "widget_set DStar Line4 1 4 15 4 h 3 \"\""); socketPrintf(m_socketfd, "output 8"); // Set LED4 color green @@ -387,7 +419,7 @@ void CLCDproc::clearDMRInt(unsigned int slotNo) socketPrintf(m_socketfd, "widget_set DMR Slot2RSSI %u %u %*.s", (m_cols / 2) + 1, 4, m_cols / 2, " "); } } else { - socketPrintf(m_socketfd, "widget_set DMR Slot1 1 2 15 2 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set DMR Slot1 1 2 15 2 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set DMR Slot2 1 3 15 3 h 3 \"\""); socketPrintf(m_socketfd, "widget_set DMR Slot2RSSI %u %u %*.s", (m_cols / 2) + 1, 4, m_cols / 2, " "); } @@ -396,7 +428,7 @@ void CLCDproc::clearDMRInt(unsigned int slotNo) // LED 3 Green 4 Red 64 Yellow 68 -void CLCDproc::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CLCDproc::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); @@ -409,10 +441,10 @@ void CLCDproc::writeFusionInt(const char* source, const char* dest, const char* socketPrintf(m_socketfd, "widget_set YSF Mode 1 1 \"System Fusion\""); if (m_rows == 2U) { - socketPrintf(m_socketfd, "widget_set YSF Line2 1 2 15 2 h 3 \"%.10s > %s%u\"", source, dest); + socketPrintf(m_socketfd, "widget_set YSF Line2 1 2 15 2 h 3 \"%.10s > DG-ID %u\"", source, dgid); } else { socketPrintf(m_socketfd, "widget_set YSF Line2 1 2 15 2 h 3 \"%.10s >\"", source); - socketPrintf(m_socketfd, "widget_set YSF Line3 1 3 15 3 h 3 \"%s%u\"", dest); + socketPrintf(m_socketfd, "widget_set YSF Line3 1 3 15 3 h 3 \"DG-ID %u\"", dgid); socketPrintf(m_socketfd, "output 64"); // Set LED3 color red } @@ -422,20 +454,19 @@ void CLCDproc::writeFusionInt(const char* source, const char* dest, const char* void CLCDproc::writeFusionRSSIInt(unsigned char rssi) { - if (m_rssiCount1 == 0U) { + if (m_rssiCount1 == 0U) socketPrintf(m_socketfd, "widget_set YSF Line4 1 4 %u 4 h 3 \"-%3udBm\"", m_cols - 1, rssi); - } m_rssiCount1++; - if (m_rssiCount1 >= YSF_RSSI_COUNT) - m_rssiCount1 = 0U; + if (m_rssiCount1 >= YSF_RSSI_COUNT) + m_rssiCount1 = 0U; } void CLCDproc::clearFusionInt() { m_clockDisplayTimer.stop(); // Stop the clock display - socketPrintf(m_socketfd, "widget_set YSF Line2 1 2 15 2 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set YSF Line2 1 2 15 2 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set YSF Line3 1 3 15 3 h 3 \"\""); socketPrintf(m_socketfd, "widget_set YSF Line4 1 4 15 4 h 3 \"\""); socketPrintf(m_socketfd, "output 4"); // Set LED3 color green @@ -480,7 +511,7 @@ void CLCDproc::clearP25Int() { m_clockDisplayTimer.stop(); // Stop the clock display - socketPrintf(m_socketfd, "widget_set P25 Line2 1 2 15 2 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set P25 Line2 1 2 15 2 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set P25 Line3 1 3 15 3 h 3 \"\""); socketPrintf(m_socketfd, "widget_set P25 Line4 1 4 15 4 h 3 \"\""); socketPrintf(m_socketfd, "output 2"); // Set LED2 color green @@ -525,12 +556,57 @@ void CLCDproc::clearNXDNInt() { m_clockDisplayTimer.stop(); // Stop the clock display - socketPrintf(m_socketfd, "widget_set NXDN Line2 1 2 15 2 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set NXDN Line2 1 2 15 2 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set NXDN Line3 1 3 15 3 h 3 \"\""); socketPrintf(m_socketfd, "widget_set NXDN Line4 1 4 15 4 h 3 \"\""); socketPrintf(m_socketfd, "output 16"); // Set LED5 color green } +void CLCDproc::writeM17Int(const char* source, const char* dest, const char* type) +{ + assert(source != NULL); + assert(dest != NULL); + assert(type != NULL); + + m_clockDisplayTimer.stop(); // Stop the clock display + + socketPrintf(m_socketfd, "screen_set M17 -priority foreground"); + socketPrintf(m_socketfd, "widget_set M17 Mode 1 1 M17"); + + if (m_rows == 2U) { + socketPrintf(m_socketfd, "widget_set M17 Line2 1 2 15 2 h 3 \"%.9s > %.9s\"", source, dest); + } + else { + socketPrintf(m_socketfd, "widget_set M17 Line2 1 2 15 2 h 3 \"%.9s >\"", source); + socketPrintf(m_socketfd, "widget_set M17 Line3 1 3 15 3 h 3 \"%.9ss\"", dest); + socketPrintf(m_socketfd, "output 255"); // Set LED5 color red + } + + m_dmr = false; + m_rssiCount1 = 0U; +} + +void CLCDproc::writeM17RSSIInt(unsigned char rssi) +{ + if (m_rssiCount1 == 0U) { + socketPrintf(m_socketfd, "widget_set M17 Line4 1 4 %u 4 h 3 \"-%3udBm\"", m_cols - 1, rssi); + } + + m_rssiCount1++; + if (m_rssiCount1 >= M17_RSSI_COUNT) + m_rssiCount1 = 0U; +} + +void CLCDproc::clearM17Int() +{ + m_clockDisplayTimer.stop(); // Stop the clock display + + socketPrintf(m_socketfd, "widget_set M17 Line2 1 2 15 2 h 3 \"Listening\""); + socketPrintf(m_socketfd, "widget_set M17 Line3 1 3 15 3 h 3 \"\""); + socketPrintf(m_socketfd, "widget_set M17 Line4 1 4 15 4 h 3 \"\""); + socketPrintf(m_socketfd, "output 16"); // Set LED5 color green +} + void CLCDproc::writePOCSAGInt(uint32_t ric, const std::string& message) { } @@ -752,7 +828,7 @@ void CLCDproc::defineScreens() socketPrintf(m_socketfd, "widget_add DStar Line4 scroller"); /* Do we need to pre-populate the values?? - socketPrintf(m_socketfd, "widget_set DStar Line2 1 2 15 2 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set DStar Line2 1 2 15 2 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set DStar Line3 1 3 15 3 h 3 \"\""); socketPrintf(m_socketfd, "widget_set DStar Line4 1 4 15 4 h 3 \"\""); */ @@ -773,8 +849,8 @@ void CLCDproc::defineScreens() /* Do we need to pre-populate the values?? socketPrintf(m_socketfd, "widget_set DMR Slot1_ 1 %u 1", m_rows / 2); socketPrintf(m_socketfd, "widget_set DMR Slot2_ 1 %u 2", m_rows / 2 + 1); - socketPrintf(m_socketfd, "widget_set DMR Slot1 3 1 15 1 h 3 Listening"); - socketPrintf(m_socketfd, "widget_set DMR Slot2 3 2 15 2 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set DMR Slot1 3 1 15 1 h 3 \"Listening\""); + socketPrintf(m_socketfd, "widget_set DMR Slot2 3 2 15 2 h 3 \"Listening\""); */ // The YSF Screen @@ -788,7 +864,7 @@ void CLCDproc::defineScreens() socketPrintf(m_socketfd, "widget_add YSF Line4 scroller"); /* Do we need to pre-populate the values?? - socketPrintf(m_socketfd, "widget_set YSF Line2 2 1 15 1 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set YSF Line2 2 1 15 1 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set YSF Line3 3 1 15 1 h 3 \" \""); socketPrintf(m_socketfd, "widget_set YSF Line4 4 2 15 2 h 3 \" \""); */ @@ -804,7 +880,7 @@ void CLCDproc::defineScreens() socketPrintf(m_socketfd, "widget_add P25 Line4 scroller"); /* Do we need to pre-populate the values?? - socketPrintf(m_socketfd, "widget_set P25 Line3 2 1 15 1 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set P25 Line3 2 1 15 1 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set P25 Line3 3 1 15 1 h 3 \" \""); socketPrintf(m_socketfd, "widget_set P25 Line4 4 2 15 2 h 3 \" \""); */ @@ -820,10 +896,26 @@ void CLCDproc::defineScreens() socketPrintf(m_socketfd, "widget_add NXDN Line4 scroller"); /* Do we need to pre-populate the values?? - socketPrintf(m_socketfd, "widget_set NXDN Line3 2 1 15 1 h 3 Listening"); + socketPrintf(m_socketfd, "widget_set NXDN Line3 2 1 15 1 h 3 \"Listening\""); socketPrintf(m_socketfd, "widget_set NXDN Line3 3 1 15 1 h 3 \" \""); socketPrintf(m_socketfd, "widget_set NXDN Line4 4 2 15 2 h 3 \" \""); */ +// The M17 Screen + + socketPrintf(m_socketfd, "screen_add M17"); + socketPrintf(m_socketfd, "screen_set M17 -name M17 -heartbeat on -priority hidden -backlight on"); + + socketPrintf(m_socketfd, "widget_add M17 Mode string"); + socketPrintf(m_socketfd, "widget_add M17 Line2 scroller"); + socketPrintf(m_socketfd, "widget_add M17 Line3 scroller"); + socketPrintf(m_socketfd, "widget_add M17 Line4 scroller"); + + /* Do we need to pre-populate the values?? + socketPrintf(m_socketfd, "widget_set M17 Line3 2 1 15 1 h 3 \"Listening\""); + socketPrintf(m_socketfd, "widget_set M17 Line3 3 1 15 1 h 3 \" \""); + socketPrintf(m_socketfd, "widget_set M17 Line4 4 2 15 2 h 3 \" \""); + */ + m_screensDefined = true; } diff --git a/LCDproc.h b/LCDproc.h index 2554d3672..b702493d9 100644 --- a/LCDproc.h +++ b/LCDproc.h @@ -1,6 +1,6 @@ /* * Copyright (C) 2016,2017 by Tony Corbett G0WFV - * Copyright (C) 2018 by Jonathan Naylor G4KLX + * Copyright (C) 2018,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,52 +28,56 @@ class CLCDproc : public CDisplay { public: - CLCDproc(std::string address, unsigned int port, unsigned int localPort, const std::string& callsign, unsigned int dmrid, bool displayClock, bool utc, bool duplex, bool dimOnIdle); - virtual ~CLCDproc(); + CLCDproc(std::string address, unsigned int port, unsigned short localPort, const std::string& callsign, unsigned int dmrid, bool displayClock, bool utc, bool duplex, bool dimOnIdle); + virtual ~CLCDproc(); - virtual bool open(); + virtual bool open(); - virtual void close(); + virtual void close(); protected: - virtual void setIdleInt(); - virtual void setErrorInt(const char* text); - virtual void setLockoutInt(); - virtual void setQuitInt(); + virtual void setIdleInt(); + virtual void setErrorInt(const char* text); + virtual void setLockoutInt(); + virtual void setQuitInt(); + virtual void setFMInt(); + virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); + virtual void writeDStarRSSIInt(unsigned char rssi); + virtual void clearDStarInt(); - virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); - virtual void writeDStarRSSIInt(unsigned char rssi); - virtual void clearDStarInt(); + virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); + virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); + virtual void clearDMRInt(unsigned int slotNo); - virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); - virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); - virtual void clearDMRInt(unsigned int slotNo); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); + virtual void writeFusionRSSIInt(unsigned char rssi); + virtual void clearFusionInt(); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); - virtual void writeFusionRSSIInt(unsigned char rssi); - virtual void clearFusionInt(); + virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); + virtual void writeP25RSSIInt(unsigned char rssi); + virtual void clearP25Int(); - virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); - virtual void writeP25RSSIInt(unsigned char rssi); - virtual void clearP25Int(); + virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); + virtual void writeNXDNRSSIInt(unsigned char rssi); + virtual void clearNXDNInt(); - virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); - virtual void writeNXDNRSSIInt(unsigned char rssi); - virtual void clearNXDNInt(); + virtual void writeM17Int(const char* source, const char* dest, const char* type); + virtual void writeM17RSSIInt(unsigned char rssi); + virtual void clearM17Int(); - virtual void writePOCSAGInt(uint32_t ric, const std::string& message); - virtual void clearPOCSAGInt(); + virtual void writePOCSAGInt(uint32_t ric, const std::string& message); + virtual void clearPOCSAGInt(); - virtual void writeCWInt(); - virtual void clearCWInt(); + virtual void writeCWInt(); + virtual void clearCWInt(); - virtual void clockInt(unsigned int ms); + virtual void clockInt(unsigned int ms); private: std::string m_address; unsigned int m_port; - unsigned int m_localPort; + unsigned short m_localPort; std::string m_callsign; unsigned int m_dmrid; bool m_displayClock; diff --git a/Log.cpp b/Log.cpp index fc37ebf79..752601e51 100644 --- a/Log.cpp +++ b/Log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,6 +22,7 @@ #include #else #include +#include #endif #include @@ -34,8 +35,10 @@ static unsigned int m_fileLevel = 2U; static std::string m_filePath; static std::string m_fileRoot; +static bool m_fileRotate = true; static FILE* m_fpLog = NULL; +static bool m_daemon = false; static unsigned int m_displayLevel = 2U; @@ -43,8 +46,10 @@ static struct tm m_tm; static char LEVELS[] = " DMIWEF"; -static bool LogOpen() +static bool logOpenRotate() { + bool status = false; + if (m_fileLevel == 0U) return true; @@ -61,39 +66,90 @@ static bool LogOpen() ::fclose(m_fpLog); } - char filename[100U]; + char filename[200U]; #if defined(_WIN32) || defined(_WIN64) ::sprintf(filename, "%s\\%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); #else ::sprintf(filename, "%s/%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); #endif - m_fpLog = ::fopen(filename, "a+t"); + if ((m_fpLog = ::fopen(filename, "a+t")) != NULL) { + status = true; + +#if !defined(_WIN32) && !defined(_WIN64) + if (m_daemon) + dup2(fileno(m_fpLog), fileno(stderr)); +#endif + } + m_tm = *tm; - return m_fpLog != NULL; + return status; +} + +static bool logOpenNoRotate() +{ + bool status = false; + + if (m_fileLevel == 0U) + return true; + + if (m_fpLog != NULL) + return true; + + char filename[200U]; +#if defined(_WIN32) || defined(_WIN64) + ::sprintf(filename, "%s\\%s.log", m_filePath.c_str(), m_fileRoot.c_str()); +#else + ::sprintf(filename, "%s/%s.log", m_filePath.c_str(), m_fileRoot.c_str()); +#endif + + if ((m_fpLog = ::fopen(filename, "a+t")) != NULL) { + status = true; + +#if !defined(_WIN32) && !defined(_WIN64) + if (m_daemon) + dup2(fileno(m_fpLog), fileno(stderr)); +#endif + } + + return status; } -bool LogInitialise(const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel) +bool LogOpen() +{ + if (m_fileRotate) + return logOpenRotate(); + else + return logOpenNoRotate(); +} + +bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel, bool rotate) { m_filePath = filePath; m_fileRoot = fileRoot; m_fileLevel = fileLevel; m_displayLevel = displayLevel; - return ::LogOpen(); + m_daemon = daemon; + m_fileRotate = rotate; + + if (m_daemon) + m_displayLevel = 0U; + + return ::LogOpen(); } void LogFinalise() { - if (m_fpLog != NULL) - ::fclose(m_fpLog); + if (m_fpLog != NULL) + ::fclose(m_fpLog); } void Log(unsigned int level, const char* fmt, ...) { - assert(fmt != NULL); + assert(fmt != NULL); - char buffer[300U]; + char buffer[501U]; #if defined(_WIN32) || defined(_WIN64) SYSTEMTIME st; ::GetSystemTime(&st); @@ -105,13 +161,13 @@ void Log(unsigned int level, const char* fmt, ...) struct tm* tm = ::gmtime(&now.tv_sec); - ::sprintf(buffer, "%c: %04d-%02d-%02d %02d:%02d:%02d.%03lu ", LEVELS[level], tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, now.tv_usec / 1000U); + ::sprintf(buffer, "%c: %04d-%02d-%02d %02d:%02d:%02d.%03lld ", LEVELS[level], tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, now.tv_usec / 1000LL); #endif va_list vl; va_start(vl, fmt); - ::vsprintf(buffer + ::strlen(buffer), fmt, vl); + ::vsnprintf(buffer + ::strlen(buffer), 500, fmt, vl); va_end(vl); @@ -130,7 +186,7 @@ void Log(unsigned int level, const char* fmt, ...) } if (level == 6U) { // Fatal - ::fclose(m_fpLog); - exit(1); - } + ::fclose(m_fpLog); + exit(1); + } } diff --git a/Log.h b/Log.h index d671ef937..ae95b6062 100644 --- a/Log.h +++ b/Log.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ extern void Log(unsigned int level, const char* fmt, ...); -extern bool LogInitialise(const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel); +extern bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel, bool rotate); extern void LogFinalise(); #endif diff --git a/M17CRC.cpp b/M17CRC.cpp new file mode 100644 index 000000000..e65b10c6d --- /dev/null +++ b/M17CRC.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "M17CRC.h" + +#include +#include + +const uint16_t CRC16_TABLE[] = {0x0000U, 0x5935U, 0xB26AU, 0xEB5FU, 0x3DE1U, 0x64D4U, 0x8F8BU, 0xD6BEU, 0x7BC2U, 0x22F7U, 0xC9A8U, + 0x909DU, 0x4623U, 0x1F16U, 0xF449U, 0xAD7CU, 0xF784U, 0xAEB1U, 0x45EEU, 0x1CDBU, 0xCA65U, 0x9350U, + 0x780FU, 0x213AU, 0x8C46U, 0xD573U, 0x3E2CU, 0x6719U, 0xB1A7U, 0xE892U, 0x03CDU, 0x5AF8U, 0xB63DU, + 0xEF08U, 0x0457U, 0x5D62U, 0x8BDCU, 0xD2E9U, 0x39B6U, 0x6083U, 0xCDFFU, 0x94CAU, 0x7F95U, 0x26A0U, + 0xF01EU, 0xA92BU, 0x4274U, 0x1B41U, 0x41B9U, 0x188CU, 0xF3D3U, 0xAAE6U, 0x7C58U, 0x256DU, 0xCE32U, + 0x9707U, 0x3A7BU, 0x634EU, 0x8811U, 0xD124U, 0x079AU, 0x5EAFU, 0xB5F0U, 0xECC5U, 0x354FU, 0x6C7AU, + 0x8725U, 0xDE10U, 0x08AEU, 0x519BU, 0xBAC4U, 0xE3F1U, 0x4E8DU, 0x17B8U, 0xFCE7U, 0xA5D2U, 0x736CU, + 0x2A59U, 0xC106U, 0x9833U, 0xC2CBU, 0x9BFEU, 0x70A1U, 0x2994U, 0xFF2AU, 0xA61FU, 0x4D40U, 0x1475U, + 0xB909U, 0xE03CU, 0x0B63U, 0x5256U, 0x84E8U, 0xDDDDU, 0x3682U, 0x6FB7U, 0x8372U, 0xDA47U, 0x3118U, + 0x682DU, 0xBE93U, 0xE7A6U, 0x0CF9U, 0x55CCU, 0xF8B0U, 0xA185U, 0x4ADAU, 0x13EFU, 0xC551U, 0x9C64U, + 0x773BU, 0x2E0EU, 0x74F6U, 0x2DC3U, 0xC69CU, 0x9FA9U, 0x4917U, 0x1022U, 0xFB7DU, 0xA248U, 0x0F34U, + 0x5601U, 0xBD5EU, 0xE46BU, 0x32D5U, 0x6BE0U, 0x80BFU, 0xD98AU, 0x6A9EU, 0x33ABU, 0xD8F4U, 0x81C1U, + 0x577FU, 0x0E4AU, 0xE515U, 0xBC20U, 0x115CU, 0x4869U, 0xA336U, 0xFA03U, 0x2CBDU, 0x7588U, 0x9ED7U, + 0xC7E2U, 0x9D1AU, 0xC42FU, 0x2F70U, 0x7645U, 0xA0FBU, 0xF9CEU, 0x1291U, 0x4BA4U, 0xE6D8U, 0xBFEDU, + 0x54B2U, 0x0D87U, 0xDB39U, 0x820CU, 0x6953U, 0x3066U, 0xDCA3U, 0x8596U, 0x6EC9U, 0x37FCU, 0xE142U, + 0xB877U, 0x5328U, 0x0A1DU, 0xA761U, 0xFE54U, 0x150BU, 0x4C3EU, 0x9A80U, 0xC3B5U, 0x28EAU, 0x71DFU, + 0x2B27U, 0x7212U, 0x994DU, 0xC078U, 0x16C6U, 0x4FF3U, 0xA4ACU, 0xFD99U, 0x50E5U, 0x09D0U, 0xE28FU, + 0xBBBAU, 0x6D04U, 0x3431U, 0xDF6EU, 0x865BU, 0x5FD1U, 0x06E4U, 0xEDBBU, 0xB48EU, 0x6230U, 0x3B05U, + 0xD05AU, 0x896FU, 0x2413U, 0x7D26U, 0x9679U, 0xCF4CU, 0x19F2U, 0x40C7U, 0xAB98U, 0xF2ADU, 0xA855U, + 0xF160U, 0x1A3FU, 0x430AU, 0x95B4U, 0xCC81U, 0x27DEU, 0x7EEBU, 0xD397U, 0x8AA2U, 0x61FDU, 0x38C8U, + 0xEE76U, 0xB743U, 0x5C1CU, 0x0529U, 0xE9ECU, 0xB0D9U, 0x5B86U, 0x02B3U, 0xD40DU, 0x8D38U, 0x6667U, + 0x3F52U, 0x922EU, 0xCB1BU, 0x2044U, 0x7971U, 0xAFCFU, 0xF6FAU, 0x1DA5U, 0x4490U, 0x1E68U, 0x475DU, + 0xAC02U, 0xF537U, 0x2389U, 0x7ABCU, 0x91E3U, 0xC8D6U, 0x65AAU, 0x3C9FU, 0xD7C0U, 0x8EF5U, 0x584BU, + 0x017EU, 0xEA21U, 0xB314U}; + +bool CM17CRC::checkCRC16(const unsigned char* in, unsigned int nBytes) +{ + assert(in != NULL); + assert(nBytes > 2U); + + uint16_t crc = createCRC16(in, nBytes - 2U); + + uint8_t temp[2U]; + temp[0U] = (crc >> 8) & 0xFFU; + temp[1U] = (crc >> 0) & 0xFFU; + + return temp[0U] == in[nBytes - 2U] && temp[1U] == in[nBytes - 1U]; +} + +void CM17CRC::encodeCRC16(unsigned char* in, unsigned int nBytes) +{ + assert(in != NULL); + assert(nBytes > 2U); + + uint16_t crc = createCRC16(in, nBytes - 2U); + + in[nBytes - 2U] = (crc >> 8) & 0xFFU; + in[nBytes - 1U] = (crc >> 0) & 0xFFU; +} + +uint16_t CM17CRC::createCRC16(const unsigned char* in, unsigned int nBytes) +{ + assert(in != NULL); + + uint16_t crc = 0xFFFFU; + + for (unsigned int i = 0U; i < nBytes; i++) + crc = (crc << 8) ^ CRC16_TABLE[((crc >> 8) ^ uint16_t(in[i])) & 0x00FFU]; + + return crc; +} diff --git a/NullModem.cpp b/M17CRC.h similarity index 59% rename from NullModem.cpp rename to M17CRC.h index 8539f1b6b..d06a9de43 100644 --- a/NullModem.cpp +++ b/M17CRC.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2018 by Jonathan Naylor G4KLX + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,20 +16,19 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "NullModem.h" -#include "Log.h" +#if !defined(M17CRC_H) +#define M17CRC_H -CNullModem::CNullModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug) : -CModem(port, duplex,rxInvert, txInvert,pttInvert,txDelay, dmrDelay, trace, debug), -m_hwType(HWT_MMDVM) -{ -} +#include -CNullModem::~CNullModem() +class CM17CRC { -} +public: + static bool checkCRC16(const unsigned char* in, unsigned int nBytes); + static void encodeCRC16(unsigned char* in, unsigned int nBytes); + +private: + static uint16_t createCRC16(const unsigned char* in, unsigned int nBytes); +}; -bool CNullModem::open(){ - ::LogMessage("Opening the MMDVM Null Modem"); - return true; -} \ No newline at end of file +#endif diff --git a/M17Control.cpp b/M17Control.cpp new file mode 100644 index 000000000..070f5ba15 --- /dev/null +++ b/M17Control.cpp @@ -0,0 +1,990 @@ +/* + * Copyright (C) 2020,2021,2023 Jonathan Naylor, G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "M17Control.h" +#include "M17Convolution.h" +#include "M17Utils.h" +#include "M17CRC.h" +#include "Golay24128.h" +#include "Utils.h" +#include "Sync.h" +#include "Log.h" + +#include +#include +#include +#include + +const unsigned int INTERLEAVER[] = { + 0U, 137U, 90U, 227U, 180U, 317U, 270U, 39U, 360U, 129U, 82U, 219U, 172U, 309U, 262U, 31U, 352U, 121U, 74U, 211U, 164U, + 301U, 254U, 23U, 344U, 113U, 66U, 203U, 156U, 293U, 246U, 15U, 336U, 105U, 58U, 195U, 148U, 285U, 238U, 7U, 328U, 97U, + 50U, 187U, 140U, 277U, 230U, 367U, 320U, 89U, 42U, 179U, 132U, 269U, 222U, 359U, 312U, 81U, 34U, 171U, 124U, 261U, 214U, + 351U, 304U, 73U, 26U, 163U, 116U, 253U, 206U, 343U, 296U, 65U, 18U, 155U, 108U, 245U, 198U, 335U, 288U, 57U, 10U, 147U, + 100U, 237U, 190U, 327U, 280U, 49U, 2U, 139U, 92U, 229U, 182U, 319U, 272U, 41U, 362U, 131U, 84U, 221U, 174U, 311U, 264U, + 33U, 354U, 123U, 76U, 213U, 166U, 303U, 256U, 25U, 346U, 115U, 68U, 205U, 158U, 295U, 248U, 17U, 338U, 107U, 60U, 197U, + 150U, 287U, 240U, 9U, 330U, 99U, 52U, 189U, 142U, 279U, 232U, 1U, 322U, 91U, 44U, 181U, 134U, 271U, 224U, 361U, 314U, 83U, + 36U, 173U, 126U, 263U, 216U, 353U, 306U, 75U, 28U, 165U, 118U, 255U, 208U, 345U, 298U, 67U, 20U, 157U, 110U, 247U, 200U, + 337U, 290U, 59U, 12U, 149U, 102U, 239U, 192U, 329U, 282U, 51U, 4U, 141U, 94U, 231U, 184U, 321U, 274U, 43U, 364U, 133U, 86U, + 223U, 176U, 313U, 266U, 35U, 356U, 125U, 78U, 215U, 168U, 305U, 258U, 27U, 348U, 117U, 70U, 207U, 160U, 297U, 250U, 19U, + 340U, 109U, 62U, 199U, 152U, 289U, 242U, 11U, 332U, 101U, 54U, 191U, 144U, 281U, 234U, 3U, 324U, 93U, 46U, 183U, 136U, 273U, + 226U, 363U, 316U, 85U, 38U, 175U, 128U, 265U, 218U, 355U, 308U, 77U, 30U, 167U, 120U, 257U, 210U, 347U, 300U, 69U, 22U, + 159U, 112U, 249U, 202U, 339U, 292U, 61U, 14U, 151U, 104U, 241U, 194U, 331U, 284U, 53U, 6U, 143U, 96U, 233U, 186U, 323U, + 276U, 45U, 366U, 135U, 88U, 225U, 178U, 315U, 268U, 37U, 358U, 127U, 80U, 217U, 170U, 307U, 260U, 29U, 350U, 119U, 72U, + 209U, 162U, 299U, 252U, 21U, 342U, 111U, 64U, 201U, 154U, 291U, 244U, 13U, 334U, 103U, 56U, 193U, 146U, 283U, 236U, 5U, + 326U, 95U, 48U, 185U, 138U, 275U, 228U, 365U, 318U, 87U, 40U, 177U, 130U, 267U, 220U, 357U, 310U, 79U, 32U, 169U, 122U, + 259U, 212U, 349U, 302U, 71U, 24U, 161U, 114U, 251U, 204U, 341U, 294U, 63U, 16U, 153U, 106U, 243U, 196U, 333U, 286U, 55U, + 8U, 145U, 98U, 235U, 188U, 325U, 278U, 47U}; + +const unsigned char SCRAMBLER[] = { + 0x00U, 0x00U, 0xD6U, 0xB5U, 0xE2U, 0x30U, 0x82U, 0xFFU, 0x84U, 0x62U, 0xBAU, 0x4EU, 0x96U, 0x90U, 0xD8U, 0x98U, 0xDDU, + 0x5DU, 0x0CU, 0xC8U, 0x52U, 0x43U, 0x91U, 0x1DU, 0xF8U, 0x6EU, 0x68U, 0x2FU, 0x35U, 0xDAU, 0x14U, 0xEAU, 0xCDU, 0x76U, + 0x19U, 0x8DU, 0xD5U, 0x80U, 0xD1U, 0x33U, 0x87U, 0x13U, 0x57U, 0x18U, 0x2DU, 0x29U, 0x78U, 0xC3U}; + +// #define DUMP_M17 + +const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; + +#define WRITE_BIT(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) +#define READ_BIT(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) + +CM17Control::CM17Control(const std::string& callsign, unsigned int can, bool selfOnly, bool allowEncryption, CM17Network* network, CDisplay* display, unsigned int timeout, bool duplex, CRSSIInterpolator* rssiMapper) : +m_callsign(callsign), +m_can(can), +m_selfOnly(selfOnly), +m_allowEncryption(allowEncryption), +m_network(network), +m_display(display), +m_duplex(duplex), +m_queue(5000U, "M17 Control"), +m_source(), +m_dest(), +m_rfState(RS_RF_LISTENING), +m_netState(RS_NET_IDLE), +m_rfTimeoutTimer(1000U, timeout), +m_netTimeoutTimer(1000U, timeout), +m_networkWatchdog(1000U, 0U, 1500U), +m_elapsed(), +m_rfFrames(0U), +m_netFrames(0U), +m_rfErrs(0U), +m_rfBits(1U), +m_rfLSFCount(0U), +m_rfCurrentRFLSF(), +m_rfCurrentNetLSF(), +m_rfCollectingLSF(), +m_rfCollectedLSF(), +m_rfLSFn(0U), +m_netLSF(), +m_netLSFn(0U), +m_rfTextBits(0x00U), +m_netTextBits(0x00U), +m_rfText(NULL), +m_netText(NULL), +m_rssiMapper(rssiMapper), +m_rssi(0U), +m_maxRSSI(0U), +m_minRSSI(0U), +m_aveRSSI(0U), +m_rssiCount(0U), +m_enabled(true), +m_fp(NULL) +{ + assert(display != NULL); + assert(rssiMapper != NULL); + + m_rfText = new char[4U * M17_META_LENGTH_BYTES]; + m_netText = new char[4U * M17_META_LENGTH_BYTES]; +} + +CM17Control::~CM17Control() +{ + delete[] m_netText; + delete[] m_rfText; +} + +bool CM17Control::writeModem(unsigned char* data, unsigned int len) +{ + assert(data != NULL); + + if (!m_enabled) + return false; + + unsigned char type = data[0U]; + + if (type == TAG_LOST && (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO)) { + if (m_rssi != 0U) + LogMessage("M17, transmission lost from %s to %s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + else + LogMessage("M17, transmission lost from %s to %s, %.1f seconds, BER: %.1f%%", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits)); + writeEndRF(); + return false; + } + + if (type == TAG_LOST && m_rfState == RS_RF_DATA) { + writeEndRF(); + return false; + } + + if (type == TAG_LOST && m_rfState == RS_RF_REJECTED) { + writeEndRF(); + return false; + } + + if (type == TAG_LOST) { + m_rfState = RS_RF_LISTENING; + return false; + } + + // Have we got RSSI bytes on the end? + if (len == (M17_FRAME_LENGTH_BYTES + 4U)) { + uint16_t raw = 0U; + raw |= (data[50U] << 8) & 0xFF00U; + raw |= (data[51U] << 0) & 0x00FFU; + + // Convert the raw RSSI to dBm + int rssi = m_rssiMapper->interpolate(raw); + if (rssi != 0) + LogDebug("M17, raw RSSI: %u, reported RSSI: %d dBm", raw, rssi); + + // RSSI is always reported as positive + m_rssi = (rssi >= 0) ? rssi : -rssi; + + if (m_rssi > m_minRSSI) + m_minRSSI = m_rssi; + if (m_rssi < m_maxRSSI) + m_maxRSSI = m_rssi; + + m_aveRSSI += m_rssi; + m_rssiCount++; + } + + unsigned char temp[M17_FRAME_LENGTH_BYTES]; + decorrelator(data + 2U, temp); + interleaver(temp, data + 2U); + + if (m_rfState == RS_RF_LISTENING && data[0U] == TAG_HEADER) { + m_rfCurrentRFLSF.reset(); + m_rfCurrentNetLSF.reset(); + + CM17Convolution conv; + unsigned char frame[M17_LSF_LENGTH_BYTES]; + unsigned int ber = conv.decodeLinkSetup(data + 2U + M17_SYNC_LENGTH_BYTES, frame); + + bool valid = CM17CRC::checkCRC16(frame, M17_LSF_LENGTH_BYTES); + if (valid) { + m_rfCurrentNetLSF.setLinkSetup(frame); + + bool ret = processRFHeader(false); + if (!ret) { + m_rfCurrentRFLSF.reset(); + m_rfCurrentNetLSF.reset(); + return false; + } + + LogDebug("M17, link setup frame: errs: %u/368 (%.1f%%)", ber, float(ber) / 3.68F); + + m_rfFrames = 0U; + m_rfErrs = ber; + m_rfBits = 368U; + m_rfCollectingLSF.reset(); + m_rfCollectedLSF.reset(); + m_rfTimeoutTimer.start(); + m_minRSSI = m_rssi; + m_maxRSSI = m_rssi; + m_aveRSSI = m_rssi; + m_rssiCount = 1U; + m_rfLSFn = 0U; + m_rfLSFCount = 0U; + m_rfTextBits = 0x00U; + ::memset(m_rfText, 0x00U, 4U * M17_META_LENGTH_BYTES); +#if defined(DUMP_M17) + openFile(); +#endif + return true; + } else { + m_rfState = RS_RF_LATE_ENTRY; + return false; + } + } + + if (m_rfState == RS_RF_LISTENING && data[0U] == TAG_DATA) { + m_rfState = RS_RF_LATE_ENTRY; + m_rfCurrentRFLSF.reset(); + m_rfCurrentNetLSF.reset(); + } + + if (m_rfState == RS_RF_LATE_ENTRY && data[0U] == TAG_DATA) { + unsigned int lich1, lich2, lich3, lich4; + bool valid1 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 0U, lich1); + bool valid2 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 3U, lich2); + bool valid3 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 6U, lich3); + bool valid4 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 9U, lich4); + + if (!valid1 || !valid2 || !valid3 || !valid4) + return false; + + unsigned char lich[M17_LICH_FRAGMENT_LENGTH_BYTES]; + CM17Utils::combineFragmentLICH(lich1, lich2, lich3, lich4, lich); + + m_rfLSFn = (lich4 >> 5) & 0x07U; + m_rfCurrentNetLSF.setFragment(lich, m_rfLSFn); + + bool valid = m_rfCurrentNetLSF.isValid(); + if (valid) { + bool ret = processRFHeader(true); + if (!ret) { + m_rfCurrentRFLSF.reset(); + m_rfCurrentNetLSF.reset(); + return false; + } + + m_rfFrames = 0U; + m_rfErrs = 0U; + m_rfBits = 1U; + m_rfCollectingLSF.reset(); + m_rfCollectedLSF.reset(); + m_rfTimeoutTimer.start(); + m_minRSSI = m_rssi; + m_maxRSSI = m_rssi; + m_aveRSSI = m_rssi; + m_rssiCount = 1U; + m_rfLSFCount = 0U; + m_rfTextBits = 0x00U; + ::memset(m_rfText, 0x00U, 4U * M17_META_LENGTH_BYTES); +#if defined(DUMP_M17) + openFile(); +#endif + // Fall through + } else { + return false; + } + } + + if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO) && data[0U] == TAG_DATA) { +#if defined(DUMP_M17) + writeFile(data + 2U); +#endif + // Keep looking at the running LSF in case of changed META field data + unsigned int lich1, lich2, lich3, lich4; + bool valid1 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 0U, lich1); + bool valid2 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 3U, lich2); + bool valid3 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 6U, lich3); + bool valid4 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 9U, lich4); + + if (valid1 && valid2 && valid3 && valid4) { + unsigned char lich[M17_LICH_FRAGMENT_LENGTH_BYTES]; + CM17Utils::combineFragmentLICH(lich1, lich2, lich3, lich4, lich); + + unsigned int n = (lich4 >> 5) & 0x07U; + m_rfCollectingLSF.setFragment(lich, n); + + // If the latest LSF is valid, save it and start collecting the next one + bool valid = m_rfCollectingLSF.isValid(); + if (valid) { + m_rfCollectedLSF = m_rfCollectingLSF; + m_rfCollectingLSF.reset(); + + unsigned char encryptionType = m_rfCollectedLSF.getEncryptionType(); + unsigned char encryptionSubType = m_rfCollectedLSF.getEncryptionSubType(); + if (encryptionType == M17_ENCRYPTION_TYPE_NONE && encryptionSubType == M17_ENCRYPTION_SUB_TYPE_TEXT) { + unsigned char meta[20U]; + m_rfCollectedLSF.getMeta(meta); + CUtils::dump(1U, "M17, LSF text data fragment", meta, M17_META_LENGTH_BYTES); + + m_rfTextBits |= meta[0U]; + + switch (meta[0U] & 0x0FU) { + case 0x01U: + ::memcpy(m_rfText + 0U, meta + 1U, M17_META_LENGTH_BYTES - 1U); + break; + case 0x02U: + ::memcpy(m_rfText + 13U, meta + 1U, M17_META_LENGTH_BYTES - 1U); + break; + case 0x04U: + ::memcpy(m_rfText + 26U, meta + 1U, M17_META_LENGTH_BYTES - 1U); + break; + case 0x08U: + ::memcpy(m_rfText + 39U, meta + 1U, M17_META_LENGTH_BYTES - 1U); + break; + default: + break; + } + + if (m_rfTextBits == 0x11U || m_rfTextBits == 0x33U || m_rfTextBits == 0x77U || m_rfTextBits == 0xFFU) { + LogMessage("M17, text Data: \"%s\"", m_rfText); + m_rfTextBits = 0x00U; + } + } + } + } + + // Update the currently transmitted LSF when the fragement number is zero + if (m_rfLSFn == 0U) { + bool valid = m_rfCollectedLSF.isValid(); + if (valid) { + m_rfCurrentNetLSF = m_rfCollectedLSF; + m_rfCollectedLSF.reset(); + + m_rfLSFCount++; + if (m_rfLSFCount > 7U) { + createRFLSF(true); + m_rfLSFCount = 0U; + } else { + createRFLSF(false); + } + } + } + + CM17Convolution conv; + unsigned char frame[M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES]; + unsigned int errors = conv.decodeData(data + 2U + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES, frame); + + uint16_t fn = (frame[0U] << 8) + (frame[1U] << 0); + + LogDebug("M17, audio: FN: %u, errs: %u/272 (%.1f%%)", fn, errors, float(errors) / 2.72F); + + m_rfBits += 272U; + m_rfErrs += errors; + + float ber = float(m_rfErrs) / float(m_rfBits); + m_display->writeM17BER(ber); + + if (m_duplex) { + unsigned char rfData[2U + M17_FRAME_LENGTH_BYTES]; + + rfData[0U] = TAG_DATA; + rfData[1U] = 0x00U; + + // Generate the sync + CSync::addM17StreamSync(rfData + 2U); + + unsigned char lich[M17_LICH_FRAGMENT_LENGTH_BYTES]; + m_rfCurrentRFLSF.getFragment(lich, m_rfLSFn); + + // Add the fragment number + lich[5U] = (m_rfLSFn & 0x07U) << 5; + + unsigned int frag1, frag2, frag3, frag4; + CM17Utils::splitFragmentLICH(lich, frag1, frag2, frag3, frag4); + + // Add Golay to the LICH fragment here + unsigned int lich1 = CGolay24128::encode24128(frag1); + unsigned int lich2 = CGolay24128::encode24128(frag2); + unsigned int lich3 = CGolay24128::encode24128(frag3); + unsigned int lich4 = CGolay24128::encode24128(frag4); + + CM17Utils::combineFragmentLICHFEC(lich1, lich2, lich3, lich4, rfData + 2U + M17_SYNC_LENGTH_BYTES); + + // Add the Convolution FEC + conv.encodeData(frame, rfData + 2U + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES); + + unsigned char temp[M17_FRAME_LENGTH_BYTES]; + interleaver(rfData + 2U, temp); + decorrelator(temp, rfData + 2U); + + writeQueueRF(rfData); + } + + if (m_network != NULL && m_rfTimeoutTimer.isRunning() && !m_rfTimeoutTimer.hasExpired()) { + unsigned char netData[M17_LSF_LENGTH_BYTES + M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES + M17_CRC_LENGTH_BYTES]; + + m_rfCurrentNetLSF.getNetwork(netData + 0U); + + // Copy the FN and payload from the frame + ::memcpy(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES, frame, M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES); + // Remove any erronous EOF from the FN + netData[M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + 0U] &= 0x7FU; + + // The CRC is added in the networking code + + m_network->write(netData); + } + + m_rfFrames++; + + m_rfLSFn++; + if (m_rfLSFn >= 6U) + m_rfLSFn = 0U; + + return true; + } + + if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO) && data[0U] == TAG_EOT) { +#if defined(DUMP_M17) + writeFile(data + 2U); +#endif + if (m_duplex) { + unsigned char rfData[M17_FRAME_LENGTH_BYTES + 2U]; + + rfData[0U] = TAG_EOT; + rfData[1U] = 0x00U; + + // Generate the sync + for (unsigned int i = 0U; i < M17_FRAME_LENGTH_BYTES; i += M17_SYNC_LENGTH_BYTES) + CSync::addM17EOTSync(rfData + 2U + i); + + writeQueueRF(rfData); + } + + if (m_network != NULL && m_rfTimeoutTimer.isRunning() && !m_rfTimeoutTimer.hasExpired()) { + unsigned char netData[M17_LSF_LENGTH_BYTES + M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES + M17_CRC_LENGTH_BYTES]; + + m_rfCurrentNetLSF.getNetwork(netData + 0U); + + // Add a EOF FN and silence for the EOF frame + netData[M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + 0U] = 0x80U; + netData[M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + 1U] = 0x00U; + + if (m_rfState == RS_RF_AUDIO) { + ::memcpy(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 0U, M17_3200_SILENCE, 8U); + ::memcpy(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 8U, M17_3200_SILENCE, 8U); + } else if (m_rfState == RS_RF_DATA_AUDIO) { + ::memcpy(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 0U, M17_1600_SILENCE, 8U); + ::memset(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 8U, 0x00U, 8U); + } else { + ::memset(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 0U, 0x00U, 8U); + ::memset(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 8U, 0x00U, 8U); + } + + // The CRC is added in the networking code + + m_network->write(netData); + } + + if (m_rssi != 0U) + LogMessage("M17, received RF end of transmission from %s to %s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + else + LogMessage("M17, received RF end of transmission from %s to %s, %.1f seconds, BER: %.1f%%", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits)); + writeEndRF(); + + return true; + } + + return false; +} + +unsigned int CM17Control::readModem(unsigned char* data) +{ + assert(data != NULL); + + if (m_queue.isEmpty()) + return 0U; + + unsigned char len = 0U; + m_queue.getData(&len, 1U); + + m_queue.getData(data, len); + + return len; +} + +void CM17Control::writeEndRF() +{ + m_rfState = RS_RF_LISTENING; + + m_rfTimeoutTimer.stop(); + + m_source.clear(); + m_dest.clear(); + + m_rfCurrentRFLSF.reset(); + m_rfCurrentNetLSF.reset(); + m_rfCollectingLSF.reset(); + m_rfCollectedLSF.reset(); + + if (m_netState == RS_NET_IDLE) { + m_display->clearM17(); + + if (m_network != NULL) + m_network->reset(); + } + +#if defined(DUMP_M17) + closeFile(); +#endif +} + +void CM17Control::writeEndNet() +{ + m_netState = RS_NET_IDLE; + + m_netTimeoutTimer.stop(); + m_networkWatchdog.stop(); + + m_source.clear(); + m_dest.clear(); + + m_netLSF.reset(); + + m_display->clearM17(); + + if (m_network != NULL) + m_network->reset(); +} + +void CM17Control::writeNetwork() +{ + unsigned char netData[100U]; + bool exists = m_network->read(netData); + if (!exists) + return; + + if (!m_enabled) + return; + + if (m_rfState != RS_RF_LISTENING && m_rfState != RS_RF_LATE_ENTRY && m_netState == RS_NET_IDLE) { + m_network->reset(); + return; + } + + m_networkWatchdog.start(); + + if (!m_allowEncryption) { + CM17LSF lsf; + lsf.setNetwork(netData); + + unsigned char type = lsf.getEncryptionType(); + if (type != M17_ENCRYPTION_TYPE_NONE) { + m_network->reset(); + return; + } + } + + if (m_netState == RS_NET_IDLE) { + m_netLSF.setNetwork(netData); + + m_source = m_netLSF.getSource(); + m_dest = m_netLSF.getDest(); + + m_netLSF.setSource(m_callsign); + m_netLSF.setCAN(m_can); + + unsigned char dataType = m_netLSF.getDataType(); + switch (dataType) { + case M17_DATA_TYPE_DATA: + LogMessage("M17, received network data transmission from %s to %s", m_source.c_str(), m_dest.c_str()); + m_netState = RS_NET_DATA; + break; + case M17_DATA_TYPE_VOICE: + LogMessage("M17, received network voice transmission from %s to %s", m_source.c_str(), m_dest.c_str()); + m_netState = RS_NET_AUDIO; + break; + case M17_DATA_TYPE_VOICE_DATA: + LogMessage("M17, received network voice + data transmission from %s to %s", m_source.c_str(), m_dest.c_str()); + m_netState = RS_NET_DATA_AUDIO; + break; + default: + LogMessage("M17, received network unknown transmission from %s to %s", m_source.c_str(), m_dest.c_str()); + m_network->reset(); + return; + } + + m_display->writeM17(m_source.c_str(), m_dest.c_str(), "N"); + + m_netTimeoutTimer.start(); + m_elapsed.start(); + m_netFrames = 0U; + m_netLSFn = 0U; + m_netTextBits = 0x00U; + ::memset(m_netText, 0x00U, 4U * M17_META_LENGTH_BYTES); + + // Create a dummy start message + unsigned char start[M17_FRAME_LENGTH_BYTES + 2U]; + + start[0U] = TAG_HEADER; + start[1U] = 0x00U; + + // Generate the sync + CSync::addM17LinkSetupSync(start + 2U); + + unsigned char setup[M17_LSF_LENGTH_BYTES]; + m_netLSF.getLinkSetup(setup); + + // Add the convolution FEC + CM17Convolution conv; + conv.encodeLinkSetup(setup, start + 2U + M17_SYNC_LENGTH_BYTES); + + unsigned char temp[M17_FRAME_LENGTH_BYTES]; + interleaver(start + 2U, temp); + decorrelator(temp, start + 2U); + + writeQueueNet(start); + } + + if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA_AUDIO) { + // Refresh the LSF every six frames in case the META field changes + if (m_netLSFn == 0U) { + m_netLSF.setNetwork(netData); + + m_netLSF.setSource(m_callsign); + m_netLSF.setCAN(m_can); + + unsigned char encryptionType = m_netLSF.getEncryptionType(); + unsigned char encryptionSubType = m_netLSF.getEncryptionSubType(); + if (encryptionType == M17_ENCRYPTION_TYPE_NONE && encryptionSubType == M17_ENCRYPTION_SUB_TYPE_TEXT) { + unsigned char meta[20U]; + m_netLSF.getMeta(meta); + CUtils::dump(1U, "M17, LSF text data fragment", meta, M17_META_LENGTH_BYTES); + + m_netTextBits |= meta[0U]; + + switch (meta[0U] & 0x0FU) { + case 0x01U: + ::memcpy(m_netText + 0U, meta + 1U, M17_META_LENGTH_BYTES - 1U); + break; + case 0x02U: + ::memcpy(m_netText + 13U, meta + 1U, M17_META_LENGTH_BYTES - 1U); + break; + case 0x04U: + ::memcpy(m_netText + 26U, meta + 1U, M17_META_LENGTH_BYTES - 1U); + break; + case 0x08U: + ::memcpy(m_netText + 39U, meta + 1U, M17_META_LENGTH_BYTES - 1U); + break; + default: + break; + } + + if (m_netTextBits == 0x11U || m_netTextBits == 0x33U || m_netTextBits == 0x77U || m_netTextBits == 0xFFU) { + LogMessage("M17, text Data: \"%s\"", m_netText); + m_netTextBits = 0x00U; + } + } + } + + unsigned char data[M17_FRAME_LENGTH_BYTES + 2U]; + + data[0U] = TAG_DATA; + data[1U] = 0x00U; + + // Generate the sync + CSync::addM17StreamSync(data + 2U); + + m_netFrames++; + + // Add the fragment LICH + unsigned char lich[M17_LICH_FRAGMENT_LENGTH_BYTES]; + m_netLSF.getFragment(lich, m_netLSFn); + + // Add the fragment number + lich[5U] = (m_netLSFn & 0x07U) << 5; + + unsigned int frag1, frag2, frag3, frag4; + CM17Utils::splitFragmentLICH(lich, frag1, frag2, frag3, frag4); + + // Add Golay to the LICH fragment here + unsigned int lich1 = CGolay24128::encode24128(frag1); + unsigned int lich2 = CGolay24128::encode24128(frag2); + unsigned int lich3 = CGolay24128::encode24128(frag3); + unsigned int lich4 = CGolay24128::encode24128(frag4); + + CM17Utils::combineFragmentLICHFEC(lich1, lich2, lich3, lich4, data + 2U + M17_SYNC_LENGTH_BYTES); + + // Add the FN and the data/audio + unsigned char payload[M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES]; + + // Copy the FN minus the EOF marker + payload[0U] = netData[28U] & 0x7FU; + payload[1U] = netData[29U]; + + ::memcpy(payload + 2U, netData + 30U, M17_PAYLOAD_LENGTH_BYTES); + + // Add the Convolution FEC + CM17Convolution conv; + conv.encodeData(payload, data + 2U + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES); + + unsigned char temp[M17_FRAME_LENGTH_BYTES]; + interleaver(data + 2U, temp); + decorrelator(temp, data + 2U); + + writeQueueNet(data); + + m_netLSFn++; + if (m_netLSFn >= 6U) + m_netLSFn = 0U; + + // EOT handling + uint16_t fn = (netData[28U] << 8) + (netData[29U] << 0); + if ((fn & 0x8000U) == 0x8000U) { + LogMessage("M17, received network end of transmission from %s to %s, %.1f seconds", m_source.c_str(), m_dest.c_str(), float(m_netFrames) / 25.0F); + + unsigned char data[M17_FRAME_LENGTH_BYTES + 2U]; + + data[0U] = TAG_EOT; + data[1U] = 0x00U; + + // Generate the sync + for (unsigned int i = 0U; i < M17_FRAME_LENGTH_BYTES; i += M17_SYNC_LENGTH_BYTES) + CSync::addM17EOTSync(data + 2U + i); + + writeQueueNet(data); + + writeEndNet(); + } + } +} + +bool CM17Control::processRFHeader(bool lateEntry) +{ + unsigned char packetStream = m_rfCurrentNetLSF.getPacketStream(); + if (packetStream == M17_PACKET_TYPE) + return false; + + unsigned char can = m_rfCurrentNetLSF.getCAN(); + if (can != m_can) + return false; + + m_source = m_rfCurrentNetLSF.getSource(); + m_dest = m_rfCurrentNetLSF.getDest(); + + if (!m_allowEncryption) { + unsigned char type = m_rfCurrentNetLSF.getEncryptionType(); + if (type != M17_ENCRYPTION_TYPE_NONE) { + LogMessage("M17, access attempt with encryption from %s to %s", m_source.c_str(), m_dest.c_str()); + m_rfState = RS_RF_REJECTED; + return true; + } + } + + if (m_selfOnly) { + bool ret = checkCallsign(m_source); + if (!ret) { + LogMessage("M17, invalid access attempt from %s to %s", m_source.c_str(), m_dest.c_str()); + m_rfState = RS_RF_REJECTED; + return true; + } + } + + unsigned char dataType = m_rfCurrentNetLSF.getDataType(); + switch (dataType) { + case M17_DATA_TYPE_DATA: + LogMessage("M17, received RF%sdata transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); + m_rfState = RS_RF_DATA; + break; + case M17_DATA_TYPE_VOICE: + LogMessage("M17, received RF%svoice transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); + m_rfState = RS_RF_AUDIO; + break; + case M17_DATA_TYPE_VOICE_DATA: + LogMessage("M17, received RF%svoice + data transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); + m_rfState = RS_RF_DATA_AUDIO; + break; + default: + return false; + } + + m_display->writeM17(m_source.c_str(), m_dest.c_str(), "R"); + + createRFLSF(true); + + if (m_duplex) { + unsigned char data[M17_FRAME_LENGTH_BYTES + 2U]; + + // Create a Link Setup frame + data[0U] = TAG_HEADER; + data[1U] = 0x00U; + + // Generate the sync + CSync::addM17LinkSetupSync(data + 2U); + + unsigned char setup[M17_LSF_LENGTH_BYTES]; + m_rfCurrentRFLSF.getLinkSetup(setup); + + // Add the convolution FEC + CM17Convolution conv; + conv.encodeLinkSetup(setup, data + 2U + M17_SYNC_LENGTH_BYTES); + + unsigned char temp[M17_FRAME_LENGTH_BYTES]; + interleaver(data + 2U, temp); + decorrelator(temp, data + 2U); + + writeQueueRF(data); + } + + return true; +} + +void CM17Control::createRFLSF(bool addCallsign) +{ + m_rfCurrentRFLSF = m_rfCurrentNetLSF; + + m_rfCurrentRFLSF.setSource(m_callsign); + + if (addCallsign) { + m_rfCurrentRFLSF.setEncryptionType(M17_ENCRYPTION_TYPE_NONE); + m_rfCurrentRFLSF.setEncryptionSubType(M17_ENCRYPTION_SUB_TYPE_CALLSIGNS); + + // Copy the encoded source into the META field + unsigned char meta[M17_META_LENGTH_BYTES]; + ::memset(meta, 0x00U, M17_META_LENGTH_BYTES); + CM17Utils::encodeCallsign(m_source, meta + 0U); + + m_rfCurrentRFLSF.setMeta(meta); + } +} + +void CM17Control::clock(unsigned int ms) +{ + if (m_network != NULL) + writeNetwork(); + + m_rfTimeoutTimer.clock(ms); + m_netTimeoutTimer.clock(ms); + + if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA_AUDIO) { + m_networkWatchdog.clock(ms); + + if (m_networkWatchdog.hasExpired()) { + LogMessage("M17, network watchdog has expired, %.1f seconds", float(m_netFrames) / 25.0F); + writeEndNet(); + } + } +} + +void CM17Control::writeQueueRF(const unsigned char *data) +{ + assert(data != NULL); + + if (m_netState != RS_NET_IDLE) + return; + + if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) + return; + + const unsigned char len = M17_FRAME_LENGTH_BYTES + 2U; + + unsigned int space = m_queue.freeSpace(); + if (space < (len + 1U)) { + LogError("M17, overflow in the M17 RF queue"); + return; + } + + m_queue.addData(&len, 1U); + + m_queue.addData(data, len); +} + +void CM17Control::writeQueueNet(const unsigned char *data) +{ + assert(data != NULL); + + if (m_netTimeoutTimer.isRunning() && m_netTimeoutTimer.hasExpired()) + return; + + const unsigned char len = M17_FRAME_LENGTH_BYTES + 2U; + + unsigned int space = m_queue.freeSpace(); + if (space < (len + 1U)) { + LogError("M17, overflow in the M17 RF queue"); + return; + } + + m_queue.addData(&len, 1U); + + m_queue.addData(data, len); +} + +void CM17Control::interleaver(const unsigned char* in, unsigned char* out) const +{ + assert(in != NULL); + assert(out != NULL); + + for (unsigned int i = 0U; i < (M17_FRAME_LENGTH_BITS - M17_SYNC_LENGTH_BITS); i++) { + unsigned int n1 = i + M17_SYNC_LENGTH_BITS; + bool b = READ_BIT(in, n1) != 0U; + unsigned int n2 = INTERLEAVER[i] + M17_SYNC_LENGTH_BITS; + WRITE_BIT(out, n2, b); + } +} + +void CM17Control::decorrelator(const unsigned char* in, unsigned char* out) const +{ + assert(in != NULL); + assert(out != NULL); + + for (unsigned int i = M17_SYNC_LENGTH_BYTES; i < M17_FRAME_LENGTH_BYTES; i++) { + out[i] = in[i] ^ SCRAMBLER[i]; + } +} + +bool CM17Control::checkCallsign(const std::string& callsign) const +{ + size_t len = m_callsign.size(); + + return m_callsign.compare(0U, len, callsign, 0U, len) == 0; +} + +bool CM17Control::openFile() +{ + if (m_fp != NULL) + return true; + + time_t t; + ::time(&t); + + struct tm* tm = ::localtime(&t); + + char name[100U]; + ::sprintf(name, "M17_%04d%02d%02d_%02d%02d%02d.ambe", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); + + m_fp = ::fopen(name, "wb"); + if (m_fp == NULL) + return false; + + ::fwrite("M17", 1U, 3U, m_fp); + + return true; +} + +bool CM17Control::writeFile(const unsigned char* data) +{ + if (m_fp == NULL) + return false; + + ::fwrite(data, 1U, M17_FRAME_LENGTH_BYTES, m_fp); + + return true; +} + +void CM17Control::closeFile() +{ + if (m_fp != NULL) { + ::fclose(m_fp); + m_fp = NULL; + } +} + +bool CM17Control::isBusy() const +{ + return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; +} + +void CM17Control::enable(bool enabled) +{ + if (!enabled && m_enabled) { + m_queue.clear(); + + // Reset the RF section + m_rfState = RS_RF_LISTENING; + + m_rfTimeoutTimer.stop(); + + // Reset the networking section + m_netState = RS_NET_IDLE; + + m_netTimeoutTimer.stop(); + m_networkWatchdog.stop(); + } + + m_enabled = enabled; +} diff --git a/M17Control.h b/M17Control.h new file mode 100644 index 000000000..5a2274e94 --- /dev/null +++ b/M17Control.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(M17Control_H) +#define M17Control_H + +#include "RSSIInterpolator.h" +#include "M17Network.h" +#include "M17Defines.h" +#include "RingBuffer.h" +#include "StopWatch.h" +#include "Display.h" +#include "Defines.h" +#include "M17LSF.h" +#include "Timer.h" +#include "Modem.h" + +#include + +class CM17Control { +public: + CM17Control(const std::string& callsign, unsigned int can, bool selfOnly, bool allowEncryption, CM17Network* network, CDisplay* display, unsigned int timeout, bool duplex, CRSSIInterpolator* rssiMapper); + ~CM17Control(); + + bool writeModem(unsigned char* data, unsigned int len); + + unsigned int readModem(unsigned char* data); + + void clock(unsigned int ms); + + bool isBusy() const; + + void enable(bool enabled); + +private: + std::string m_callsign; + unsigned int m_can; + bool m_selfOnly; + bool m_allowEncryption; + CM17Network* m_network; + CDisplay* m_display; + bool m_duplex; + CRingBuffer m_queue; + std::string m_source; + std::string m_dest; + RPT_RF_STATE m_rfState; + RPT_NET_STATE m_netState; + CTimer m_rfTimeoutTimer; + CTimer m_netTimeoutTimer; + CTimer m_networkWatchdog; + CStopWatch m_elapsed; + unsigned int m_rfFrames; + unsigned int m_netFrames; + unsigned int m_rfErrs; + unsigned int m_rfBits; + unsigned int m_rfLSFCount; + CM17LSF m_rfCurrentRFLSF; + CM17LSF m_rfCurrentNetLSF; + CM17LSF m_rfCollectingLSF; + CM17LSF m_rfCollectedLSF; + unsigned int m_rfLSFn; + CM17LSF m_netLSF; + unsigned int m_netLSFn; + unsigned char m_rfTextBits; + unsigned char m_netTextBits; + char* m_rfText; + char* m_netText; + CRSSIInterpolator* m_rssiMapper; + unsigned char m_rssi; + unsigned char m_maxRSSI; + unsigned char m_minRSSI; + unsigned int m_aveRSSI; + unsigned int m_rssiCount; + bool m_enabled; + FILE* m_fp; + + bool processRFHeader(bool lateEntry); + + void writeQueueRF(const unsigned char* data); + + void writeQueueNet(const unsigned char* data); + + void writeNetwork(); + + void interleaver(const unsigned char* in, unsigned char* out) const; + void decorrelator(const unsigned char* in, unsigned char* out) const; + + bool checkCallsign(const std::string& source) const; + + void createRFLSF(bool addCallsign); + + void writeEndRF(); + void writeEndNet(); + + bool openFile(); + bool writeFile(const unsigned char* data); + void closeFile(); +}; + +#endif diff --git a/M17Convolution.cpp b/M17Convolution.cpp new file mode 100644 index 000000000..56e689d08 --- /dev/null +++ b/M17Convolution.cpp @@ -0,0 +1,283 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "M17Convolution.h" + +#include +#include +#include +#include + +const unsigned int PUNCTURE_LIST_LINK_SETUP_COUNT = 60U; + +const unsigned int PUNCTURE_LIST_LINK_SETUP[] = { + 2U, 6U, 10U, 14U, 18U, 22U, 26U, 30U, 34U, 38U, 42U, 46U, 50U, 54U, 58U, 63U, 67U, 71U, 75U, 79U, 83U, + 87U, 91U, 95U, 99U, 103U, 107U, 111U, 115U, 119U, 124U, 128U, 132U, 136U, 140U, 144U, 148U, 152U, 156U, 160U, 164U, 168U, + 172U, 176U, 180U, 185U, 189U, 193U, 197U, 201U, 205U, 209U, 213U, 217U, 221U, 225U, 229U, 233U, 237U, 241U, 246U, 250U, 254U, + 258U, 262U, 266U, 270U, 274U, 278U, 282U, 286U, 290U, 294U, 298U, 302U, 307U, 311U, 315U, 319U, 323U, 327U, 331U, 335U, 339U, + 343U, 347U, 351U, 355U, 359U, 363U, 368U, 372U, 376U, 380U, 384U, 388U, 392U, 396U, 400U, 404U, 408U, 412U, 416U, 420U, 424U, + 429U, 433U, 437U, 441U, 445U, 449U, 453U, 457U, 461U, 465U, 469U, 473U, 477U, 481U, 485U}; + +const unsigned int PUNCTURE_LIST_DATA_COUNT = 12U; + +const unsigned int PUNCTURE_LIST_DATA[] = { + 11U, 23U, 35U, 47U, 59U, 71U, 83U, 95U, 107U, 119U, 131U, 143U, 155U, 167U, 179U, 191U, 203U, 215U, 227U, 239U, 251U, + 263U, 275U, 287U}; + +const unsigned char BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; + +#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) +#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) + +const uint8_t BRANCH_TABLE1[] = {0U, 0U, 0U, 0U, 2U, 2U, 2U, 2U}; +const uint8_t BRANCH_TABLE2[] = {0U, 2U, 2U, 0U, 0U, 2U, 2U, 0U}; + +const unsigned int NUM_OF_STATES_D2 = 8U; +const unsigned int NUM_OF_STATES = 16U; +const uint32_t M = 4U; +const unsigned int K = 5U; + +CM17Convolution::CM17Convolution() : +m_metrics1(NULL), +m_metrics2(NULL), +m_oldMetrics(NULL), +m_newMetrics(NULL), +m_decisions(NULL), +m_dp(NULL) +{ + m_metrics1 = new uint16_t[20U]; + m_metrics2 = new uint16_t[20U]; + m_decisions = new uint64_t[300U]; +} + +CM17Convolution::~CM17Convolution() +{ + delete[] m_metrics1; + delete[] m_metrics2; + delete[] m_decisions; +} + +void CM17Convolution::encodeLinkSetup(const unsigned char* in, unsigned char* out) const +{ + assert(in != NULL); + assert(out != NULL); + + unsigned char temp1[31U]; + ::memset(temp1, 0x00U, 31U); + ::memcpy(temp1, in, 30U); + + unsigned char temp2[61U]; + encode(temp1, temp2, 244U); + + unsigned int n = 0U; + unsigned int index = 0U; + for (unsigned int i = 0U; i < 488U; i++) { + if (i != PUNCTURE_LIST_LINK_SETUP[index]) { + bool b = READ_BIT1(temp2, i); + WRITE_BIT1(out, n, b); + n++; + } else { + index++; + } + } +} + +void CM17Convolution::encodeData(const unsigned char* in, unsigned char* out) const +{ + assert(in != NULL); + assert(out != NULL); + + unsigned char temp1[19U]; + ::memset(temp1, 0x00U, 19U); + ::memcpy(temp1, in, 18U); + + unsigned char temp2[37U]; + encode(temp1, temp2, 148U); + + unsigned int n = 0U; + unsigned int index = 0U; + for (unsigned int i = 0U; i < 296U; i++) { + if (i != PUNCTURE_LIST_DATA[index]) { + bool b = READ_BIT1(temp2, i); + WRITE_BIT1(out, n, b); + n++; + } else { + index++; + } + } +} + +unsigned int CM17Convolution::decodeLinkSetup(const unsigned char* in, unsigned char* out) +{ + assert(in != NULL); + assert(out != NULL); + + uint8_t temp[500U]; + ::memset(temp, 0x00U, 500U); + + unsigned int n = 0U; + unsigned int index = 0U; + for (unsigned int i = 0U; i < 368U; i++) { + if (n == PUNCTURE_LIST_LINK_SETUP[index]) { + temp[n++] = 1U; + index++; + } + + bool b = READ_BIT1(in, i); + temp[n++] = b ? 2U : 0U; + } + + start(); + + n = 0U; + for (unsigned int i = 0U; i < 244U; i++) { + uint8_t s0 = temp[n++]; + uint8_t s1 = temp[n++]; + + decode(s0, s1); + } + + return chainback(out, 240U) - PUNCTURE_LIST_LINK_SETUP_COUNT; +} + +unsigned int CM17Convolution::decodeData(const unsigned char* in, unsigned char* out) +{ + assert(in != NULL); + assert(out != NULL); + + uint8_t temp[300U]; + ::memset(temp, 0x00U, 300U); + + unsigned int n = 0U; + unsigned int index = 0U; + for (unsigned int i = 0U; i < 272U; i++) { + if (n == PUNCTURE_LIST_DATA[index]) { + temp[n++] = 1U; + index++; + } + + bool b = READ_BIT1(in, i); + temp[n++] = b ? 2U : 0U; + } + + start(); + + n = 0U; + for (unsigned int i = 0U; i < 148U; i++) { + uint8_t s0 = temp[n++]; + uint8_t s1 = temp[n++]; + + decode(s0, s1); + } + + return chainback(out, 144U) - PUNCTURE_LIST_DATA_COUNT; +} + +void CM17Convolution::start() +{ + ::memset(m_metrics1, 0x00U, NUM_OF_STATES * sizeof(uint16_t)); + ::memset(m_metrics2, 0x00U, NUM_OF_STATES * sizeof(uint16_t)); + + m_oldMetrics = m_metrics1; + m_newMetrics = m_metrics2; + m_dp = m_decisions; +} + +void CM17Convolution::decode(uint8_t s0, uint8_t s1) +{ + *m_dp = 0U; + + for (uint8_t i = 0U; i < NUM_OF_STATES_D2; i++) { + uint8_t j = i * 2U; + + uint16_t metric = std::abs(BRANCH_TABLE1[i] - s0) + std::abs(BRANCH_TABLE2[i] - s1); + + uint16_t m0 = m_oldMetrics[i] + metric; + uint16_t m1 = m_oldMetrics[i + NUM_OF_STATES_D2] + (M - metric); + uint8_t decision0 = (m0 >= m1) ? 1U : 0U; + m_newMetrics[j + 0U] = decision0 != 0U ? m1 : m0; + + m0 = m_oldMetrics[i] + (M - metric); + m1 = m_oldMetrics[i + NUM_OF_STATES_D2] + metric; + uint8_t decision1 = (m0 >= m1) ? 1U : 0U; + m_newMetrics[j + 1U] = decision1 != 0U ? m1 : m0; + + *m_dp |= (uint64_t(decision1) << (j + 1U)) | (uint64_t(decision0) << (j + 0U)); + } + + ++m_dp; + + assert((m_dp - m_decisions) <= 300); + + uint16_t* tmp = m_oldMetrics; + m_oldMetrics = m_newMetrics; + m_newMetrics = tmp; +} + +unsigned int CM17Convolution::chainback(unsigned char* out, unsigned int nBits) +{ + assert(out != NULL); + + uint32_t state = 0U; + + while (nBits-- > 0) { + --m_dp; + + uint32_t i = state >> (9 - K); + uint8_t bit = uint8_t(*m_dp >> i) & 1; + state = (bit << 7) | (state >> 1); + + WRITE_BIT1(out, nBits, bit != 0U); + } + + unsigned int minCost = m_oldMetrics[0]; + + for (unsigned int i = 0U; i < NUM_OF_STATES; i++) { + if (m_oldMetrics[i] < minCost) + minCost = m_oldMetrics[i]; + } + + return minCost / (M >> 1); +} + +void CM17Convolution::encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const +{ + assert(in != NULL); + assert(out != NULL); + assert(nBits > 0U); + + uint8_t d1 = 0U, d2 = 0U, d3 = 0U, d4 = 0U; + uint32_t k = 0U; + for (unsigned int i = 0U; i < nBits; i++) { + uint8_t d = READ_BIT1(in, i) ? 1U : 0U; + + uint8_t g1 = (d + d3 + d4) & 1; + uint8_t g2 = (d + d1 + d2 + d4) & 1; + + d4 = d3; + d3 = d2; + d2 = d1; + d1 = d; + + WRITE_BIT1(out, k, g1 != 0U); + k++; + + WRITE_BIT1(out, k, g2 != 0U); + k++; + } +} diff --git a/M17Convolution.h b/M17Convolution.h new file mode 100644 index 000000000..0c5c7c3f1 --- /dev/null +++ b/M17Convolution.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(M17Convolution_H) +#define M17Convolution_H + +#include + +class CM17Convolution { +public: + CM17Convolution(); + ~CM17Convolution(); + + unsigned int decodeLinkSetup(const unsigned char* in, unsigned char* out); + unsigned int decodeData(const unsigned char* in, unsigned char* out); + + void encodeLinkSetup(const unsigned char* in, unsigned char* out) const; + void encodeData(const unsigned char* in, unsigned char* out) const; + +private: + uint16_t* m_metrics1; + uint16_t* m_metrics2; + uint16_t* m_oldMetrics; + uint16_t* m_newMetrics; + uint64_t* m_decisions; + uint64_t* m_dp; + + void start(); + void decode(uint8_t s0, uint8_t s1); + + unsigned int chainback(unsigned char* out, unsigned int nBits); + + void encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const; +}; + +#endif diff --git a/M17Defines.h b/M17Defines.h new file mode 100644 index 000000000..0543d8e97 --- /dev/null +++ b/M17Defines.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(M17DEFINES_H) +#define M17DEFINES_H + +const unsigned int M17_RADIO_SYMBOL_LENGTH = 5U; // At 24 kHz sample rate + +const unsigned int M17_FRAME_LENGTH_BITS = 384U; +const unsigned int M17_FRAME_LENGTH_BYTES = M17_FRAME_LENGTH_BITS / 8U; + +const unsigned char M17_LINK_SETUP_SYNC_BYTES[] = {0x55U, 0xF7U}; +const unsigned char M17_STREAM_SYNC_BYTES[] = {0xFFU, 0x5DU}; +const unsigned char M17_EOT_SYNC_BYTES[] = {0x55U, 0x5DU}; + +const unsigned int M17_SYNC_LENGTH_BITS = 16U; +const unsigned int M17_SYNC_LENGTH_BYTES = M17_SYNC_LENGTH_BITS / 8U; + +const unsigned int M17_LSF_LENGTH_BITS = 240U; +const unsigned int M17_LSF_LENGTH_BYTES = M17_LSF_LENGTH_BITS / 8U; + +const unsigned int M17_LSF_FRAGMENT_LENGTH_BITS = M17_LSF_LENGTH_BITS / 6U; +const unsigned int M17_LSF_FRAGMENT_LENGTH_BYTES = M17_LSF_FRAGMENT_LENGTH_BITS / 8U; + +const unsigned int M17_LICH_FRAGMENT_LENGTH_BITS = M17_LSF_FRAGMENT_LENGTH_BITS + 8U; +const unsigned int M17_LICH_FRAGMENT_LENGTH_BYTES = M17_LICH_FRAGMENT_LENGTH_BITS / 8U; + +const unsigned int M17_LSF_FRAGMENT_FEC_LENGTH_BITS = M17_LSF_FRAGMENT_LENGTH_BITS * 2U; +const unsigned int M17_LSF_FRAGMENT_FEC_LENGTH_BYTES = M17_LSF_FRAGMENT_FEC_LENGTH_BITS / 8U; + +const unsigned int M17_LICH_FRAGMENT_FEC_LENGTH_BITS = M17_LICH_FRAGMENT_LENGTH_BITS * 2U; +const unsigned int M17_LICH_FRAGMENT_FEC_LENGTH_BYTES = M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 8U; + +const unsigned int M17_PAYLOAD_LENGTH_BITS = 128U; +const unsigned int M17_PAYLOAD_LENGTH_BYTES = M17_PAYLOAD_LENGTH_BITS / 8U; + +const unsigned char M17_NULL_NONCE[] = {0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U}; +const unsigned int M17_META_LENGTH_BITS = 112U; +const unsigned int M17_META_LENGTH_BYTES = M17_META_LENGTH_BITS / 8U; + +const unsigned int M17_FN_LENGTH_BITS = 16U; +const unsigned int M17_FN_LENGTH_BYTES = M17_FN_LENGTH_BITS / 8U; + +const unsigned int M17_CRC_LENGTH_BITS = 16U; +const unsigned int M17_CRC_LENGTH_BYTES = M17_CRC_LENGTH_BITS / 8U; + +const unsigned char M17_3200_SILENCE[] = {0x01U, 0x00U, 0x09U, 0x43U, 0x9CU, 0xE4U, 0x21U, 0x08U}; +const unsigned char M17_1600_SILENCE[] = {0x0CU, 0x41U, 0x09U, 0x03U, 0x0CU, 0x41U, 0x09U, 0x03U}; + +const unsigned char M17_PACKET_TYPE = 0U; +const unsigned char M17_STREAM_TYPE = 1U; + +const unsigned char M17_DATA_TYPE_DATA = 0x01U; +const unsigned char M17_DATA_TYPE_VOICE = 0x02U; +const unsigned char M17_DATA_TYPE_VOICE_DATA = 0x03U; + +const unsigned char M17_ENCRYPTION_TYPE_NONE = 0x00U; +const unsigned char M17_ENCRYPTION_TYPE_AES = 0x01U; +const unsigned char M17_ENCRYPTION_TYPE_SCRAMBLE = 0x02U; + +const unsigned char M17_ENCRYPTION_SUB_TYPE_TEXT = 0x00U; +const unsigned char M17_ENCRYPTION_SUB_TYPE_GPS = 0x01U; +const unsigned char M17_ENCRYPTION_SUB_TYPE_CALLSIGNS = 0x02U; + +#endif diff --git a/M17LSF.cpp b/M17LSF.cpp new file mode 100644 index 000000000..843bae215 --- /dev/null +++ b/M17LSF.cpp @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2020,2021,2023 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "M17LSF.h" +#include "M17Utils.h" +#include "M17Defines.h" +#include "M17CRC.h" + +#include +#include + +CM17LSF::CM17LSF(const CM17LSF& lsf) : +m_lsf(NULL), +m_valid(lsf.m_valid) +{ + m_lsf = new unsigned char[M17_LSF_LENGTH_BYTES]; + + ::memcpy(m_lsf, lsf.m_lsf, M17_LSF_LENGTH_BYTES); +} + +CM17LSF::CM17LSF() : +m_lsf(NULL), +m_valid(false) +{ + m_lsf = new unsigned char[M17_LSF_LENGTH_BYTES]; + + ::memset(m_lsf, 0x00U, M17_LSF_LENGTH_BYTES); +} + +CM17LSF::~CM17LSF() +{ + delete[] m_lsf; +} + +void CM17LSF::getNetwork(unsigned char* data) const +{ + assert(data != NULL); + + ::memcpy(data, m_lsf, M17_LSF_LENGTH_BYTES); +} + +void CM17LSF::setNetwork(const unsigned char* data) +{ + assert(data != NULL); + + ::memcpy(m_lsf, data, M17_LSF_LENGTH_BYTES); + + m_valid = true; +} + +std::string CM17LSF::getSource() const +{ + std::string callsign; + CM17Utils::decodeCallsign(m_lsf + 6U, callsign); + + return callsign; +} + +void CM17LSF::setSource(const std::string& callsign) +{ + CM17Utils::encodeCallsign(callsign, m_lsf + 6U); +} + +std::string CM17LSF::getDest() const +{ + std::string callsign; + CM17Utils::decodeCallsign(m_lsf + 0U, callsign); + + return callsign; +} + +void CM17LSF::setDest(const std::string& callsign) +{ + CM17Utils::encodeCallsign(callsign, m_lsf + 0U); +} + +unsigned char CM17LSF::getPacketStream() const +{ + return m_lsf[13U] & 0x01U; +} + +void CM17LSF::setPacketStream(unsigned char ps) +{ + m_lsf[13U] &= 0xF7U; + m_lsf[13U] |= ps & 0x01U; +} + +unsigned char CM17LSF::getDataType() const +{ + return (m_lsf[13U] >> 1) & 0x03U; +} + +void CM17LSF::setDataType(unsigned char type) +{ + m_lsf[13U] &= 0xF9U; + m_lsf[13U] |= (type << 1) & 0x06U; +} + +unsigned char CM17LSF::getEncryptionType() const +{ + return (m_lsf[13U] >> 3) & 0x03U; +} + +void CM17LSF::setEncryptionType(unsigned char type) +{ + m_lsf[13U] &= 0xE7U; + m_lsf[13U] |= (type << 3) & 0x18U; +} + +unsigned char CM17LSF::getEncryptionSubType() const +{ + return (m_lsf[13U] >> 5) & 0x03U; +} + +void CM17LSF::setEncryptionSubType(unsigned char type) +{ + m_lsf[13U] &= 0x9FU; + m_lsf[13U] |= (type << 5) & 0x60U; +} + +unsigned char CM17LSF::getCAN() const +{ + return ((m_lsf[12U] << 1) & 0x0EU) | ((m_lsf[13U] >> 7) & 0x01U); +} + +void CM17LSF::setCAN(unsigned char can) +{ + m_lsf[13U] &= 0x7FU; + m_lsf[13U] |= (can << 7) & 0x80U; + + m_lsf[12U] &= 0xF8U; + m_lsf[12U] |= (can >> 1) & 0x07U; +} + +void CM17LSF::getMeta(unsigned char* data) const +{ + assert(data != NULL); + + ::memcpy(data, m_lsf + 14U, M17_META_LENGTH_BYTES); +} + +void CM17LSF::setMeta(const unsigned char* data) +{ + assert(data != NULL); + + ::memcpy(m_lsf + 14U, data, M17_META_LENGTH_BYTES); +} + +void CM17LSF::reset() +{ + ::memset(m_lsf, 0x00U, M17_LSF_LENGTH_BYTES); + + m_valid = false; +} + +bool CM17LSF::isValid() const +{ + return m_valid; +} + +void CM17LSF::getLinkSetup(unsigned char* data) const +{ + assert(data != NULL); + + ::memcpy(data, m_lsf, M17_LSF_LENGTH_BYTES); + + CM17CRC::encodeCRC16(data, M17_LSF_LENGTH_BYTES); +} + +void CM17LSF::setLinkSetup(const unsigned char* data) +{ + assert(data != NULL); + + ::memcpy(m_lsf, data, M17_LSF_LENGTH_BYTES); + + m_valid = CM17CRC::checkCRC16(m_lsf, M17_LSF_LENGTH_BYTES); +} + +void CM17LSF::getFragment(unsigned char* data, unsigned int n) const +{ + assert(data != NULL); + + CM17CRC::encodeCRC16(m_lsf, M17_LSF_LENGTH_BYTES); + + ::memcpy(data, m_lsf + (n * M17_LSF_FRAGMENT_LENGTH_BYTES), M17_LSF_FRAGMENT_LENGTH_BYTES); +} + +void CM17LSF::setFragment(const unsigned char* data, unsigned int n) +{ + assert(data != NULL); + + ::memcpy(m_lsf + (n * M17_LSF_FRAGMENT_LENGTH_BYTES), data, M17_LSF_FRAGMENT_LENGTH_BYTES); + + m_valid = CM17CRC::checkCRC16(m_lsf, M17_LSF_LENGTH_BYTES); +} + +CM17LSF& CM17LSF::operator=(const CM17LSF& lsf) +{ + if (&lsf != this) { + ::memcpy(m_lsf, lsf.m_lsf, M17_LSF_LENGTH_BYTES); + m_valid = lsf.m_valid; + } + + return *this; +} diff --git a/M17LSF.h b/M17LSF.h new file mode 100644 index 000000000..92aaa2a30 --- /dev/null +++ b/M17LSF.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(M17LSF_H) +#define M17LSF_H + +#include + +class CM17LSF { +public: + CM17LSF(const CM17LSF& lsf); + CM17LSF(); + ~CM17LSF(); + + void getNetwork(unsigned char* data) const; + void setNetwork(const unsigned char* data); + + std::string getSource() const; + void setSource(const std::string& callsign); + + std::string getDest() const; + void setDest(const std::string& callsign); + + unsigned char getPacketStream() const; + void setPacketStream(unsigned char ps); + + unsigned char getDataType() const; + void setDataType(unsigned char type); + + unsigned char getEncryptionType() const; + void setEncryptionType(unsigned char type); + + unsigned char getEncryptionSubType() const; + void setEncryptionSubType(unsigned char type); + + unsigned char getCAN() const; + void setCAN(unsigned char can); + + void getMeta(unsigned char* data) const; + void setMeta(const unsigned char* data); + + void reset(); + bool isValid() const; + + void getLinkSetup(unsigned char* data) const; + void setLinkSetup(const unsigned char* data); + + void getFragment(unsigned char* data, unsigned int n) const; + void setFragment(const unsigned char* data, unsigned int n); + + CM17LSF& operator=(const CM17LSF& lsf); + +private: + unsigned char* m_lsf; + bool m_valid; +}; + +#endif diff --git a/M17Network.cpp b/M17Network.cpp new file mode 100644 index 000000000..268f069e3 --- /dev/null +++ b/M17Network.cpp @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2020,2021,2023 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "M17Network.h" +#include "M17Defines.h" +#include "M17Utils.h" +#include "Defines.h" +#include "Utils.h" +#include "Log.h" + +#include +#include +#include + +const unsigned int BUFFER_LENGTH = 200U; + +CM17Network::CM17Network(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug) : +m_socket(localAddress, localPort), +m_addr(), +m_addrLen(0U), +m_debug(debug), +m_enabled(false), +m_outId(0U), +m_inId(0U), +m_buffer(1000U, "M17 Network"), +m_random(), +m_timer(1000U, 5U) +{ + if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) { + m_addrLen = 0U; + return; + } + + std::random_device rd; + std::mt19937 mt(rd()); + m_random = mt; +} + +CM17Network::~CM17Network() +{ +} + +bool CM17Network::open() +{ + if (m_addrLen == 0U) { + LogError("M17, unable to resolve the gateway address"); + return false; + } + + LogMessage("Opening M17 network connection"); + + bool ret = m_socket.open(m_addr); + + if (ret) { + m_timer.start(); + return true; + } else { + return false; + } +} + +bool CM17Network::write(const unsigned char* data) +{ + if (m_addrLen == 0U) + return false; + + assert(data != NULL); + + unsigned char buffer[100U]; + + buffer[0U] = 'M'; + buffer[1U] = '1'; + buffer[2U] = '7'; + buffer[3U] = ' '; + + // Create a random id for this transmission if needed + if (m_outId == 0U) { + std::uniform_int_distribution dist(0x0001, 0xFFFE); + m_outId = dist(m_random); + } + + buffer[4U] = m_outId / 256U; // Unique session id + buffer[5U] = m_outId % 256U; + + ::memcpy(buffer + 6U, data, 46U); + + // Dummy CRC + buffer[52U] = 0x00U; + buffer[53U] = 0x00U; + + if (m_debug) + CUtils::dump(1U, "M17 Network Transmitted", buffer, 54U); + + return m_socket.write(buffer, 54U, m_addr, m_addrLen); +} + +void CM17Network::clock(unsigned int ms) +{ + m_timer.clock(ms); + if (m_timer.isRunning() && m_timer.hasExpired()) { + sendPing(); + m_timer.start(); + } + + unsigned char buffer[BUFFER_LENGTH]; + + sockaddr_storage address; + unsigned int addrLen; + int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrLen); + if (length <= 0) + return; + + if (!CUDPSocket::match(m_addr, address)) { + LogMessage("M17, packet received from an invalid source"); + return; + } + + if (m_debug) + CUtils::dump(1U, "M17 Network Received", buffer, length); + + if (!m_enabled) + return; + + if (::memcmp(buffer + 0U, "PING", 4U) == 0) + return; + + if (::memcmp(buffer + 0U, "M17 ", 4U) != 0) { + CUtils::dump(2U, "M17, received unknown packet", buffer, length); + return; + } + + uint16_t id = (buffer[4U] << 8) + (buffer[5U] << 0); + if (m_inId == 0U) { + m_inId = id; + } else { + if (id != m_inId) + return; + } + + unsigned char c = length - 6U; + m_buffer.addData(&c, 1U); + + m_buffer.addData(buffer + 6U, length - 6U); +} + +bool CM17Network::read(unsigned char* data) +{ + assert(data != NULL); + + if (m_buffer.isEmpty()) + return false; + + unsigned char c = 0U; + m_buffer.getData(&c, 1U); + + m_buffer.getData(data, c); + + return true; +} + +void CM17Network::close() +{ + m_socket.close(); + + LogMessage("Closing M17 network connection"); +} + +void CM17Network::reset() +{ + m_outId = 0U; + m_inId = 0U; +} + +void CM17Network::enable(bool enabled) +{ + if (enabled && !m_enabled) + reset(); + else if (!enabled && m_enabled) + m_buffer.clear(); + + m_enabled = enabled; +} + +bool CM17Network::isConnected() const +{ + return (m_addrLen != 0); +} + +void CM17Network::sendPing() +{ + unsigned char buffer[5U]; + + buffer[0U] = 'P'; + buffer[1U] = 'I'; + buffer[2U] = 'N'; + buffer[3U] = 'G'; + + if (m_debug) + CUtils::dump(1U, "M17 Network Transmitted", buffer, 4U); + + m_socket.write(buffer, 4U, m_addr, m_addrLen); +} diff --git a/M17Network.h b/M17Network.h new file mode 100644 index 000000000..e98ec08f9 --- /dev/null +++ b/M17Network.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef M17Network_H +#define M17Network_H + +#include "M17Defines.h" +#include "RingBuffer.h" +#include "UDPSocket.h" +#include "Timer.h" + +#include +#include + +class CM17Network { +public: + CM17Network(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug); + ~CM17Network(); + + bool open(); + + void enable(bool enabled); + + bool write(const unsigned char* data); + + bool read(unsigned char* data); + + void reset(); + + void close(); + + void clock(unsigned int ms); + + bool isConnected() const; + +private: + CUDPSocket m_socket; + sockaddr_storage m_addr; + unsigned int m_addrLen; + bool m_debug; + bool m_enabled; + uint16_t m_outId; + uint16_t m_inId; + CRingBuffer m_buffer; + std::mt19937 m_random; + CTimer m_timer; + + void sendPing(); +}; + +#endif diff --git a/M17Utils.cpp b/M17Utils.cpp new file mode 100644 index 000000000..1b217b726 --- /dev/null +++ b/M17Utils.cpp @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "M17Utils.h" +#include "M17Defines.h" + +#include +#include + +const std::string M17_CHARS = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-/."; + +const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; + +#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) +#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) + +void CM17Utils::encodeCallsign(const std::string& callsign, unsigned char* encoded) +{ + assert(encoded != NULL); + + if (callsign == "ALL" || callsign == "ALL ") { + encoded[0U] = 0xFFU; + encoded[1U] = 0xFFU; + encoded[2U] = 0xFFU; + encoded[3U] = 0xFFU; + encoded[4U] = 0xFFU; + encoded[5U] = 0xFFU; + return; + } + + unsigned int len = callsign.size(); + if (len > 9U) + len = 9U; + + uint64_t enc = 0ULL; + for (int i = len - 1; i >= 0; i--) { + size_t pos = M17_CHARS.find(callsign[i]); + if (pos == std::string::npos) + pos = 0ULL; + + enc *= 40ULL; + enc += pos; + } + + encoded[0U] = (enc >> 40) & 0xFFU; + encoded[1U] = (enc >> 32) & 0xFFU; + encoded[2U] = (enc >> 24) & 0xFFU; + encoded[3U] = (enc >> 16) & 0xFFU; + encoded[4U] = (enc >> 8) & 0xFFU; + encoded[5U] = (enc >> 0) & 0xFFU; +} + +void CM17Utils::decodeCallsign(const unsigned char* encoded, std::string& callsign) +{ + assert(encoded != NULL); + + callsign.clear(); + + if (encoded[0U] == 0xFFU && encoded[1U] == 0xFFU && encoded[2U] == 0xFFU && + encoded[3U] == 0xFFU && encoded[4U] == 0xFFU && encoded[5U] == 0xFFU) { + callsign = "ALL"; + return; + } + + uint64_t enc = + (uint64_t(encoded[0U]) << 40) + + (uint64_t(encoded[1U]) << 32) + + (uint64_t(encoded[2U]) << 24) + + (uint64_t(encoded[3U]) << 16) + + (uint64_t(encoded[4U]) << 8) + + (uint64_t(encoded[5U]) << 0); + + if (enc >= 262144000000000ULL) // 40^9 + return; + + while (enc > 0ULL) { + callsign += " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-/."[enc % 40ULL]; + enc /= 40ULL; + } +} + +void CM17Utils::splitFragmentLICH(const unsigned char* data, unsigned int& frag1, unsigned int& frag2, unsigned int& frag3, unsigned int& frag4) +{ + assert(data != NULL); + + frag1 = frag2 = frag3 = frag4 = 0x00U; + + unsigned int offset = 0U; + unsigned int MASK = 0x800U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = READ_BIT1(data, offset) != 0x00U; + if (b) + frag1 |= MASK; + } + + MASK = 0x800U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = READ_BIT1(data, offset) != 0x00U; + if (b) + frag2 |= MASK; + } + + MASK = 0x800U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = READ_BIT1(data, offset) != 0x00U; + if (b) + frag3 |= MASK; + } + + MASK = 0x800U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = READ_BIT1(data, offset) != 0x00U; + if (b) + frag4 |= MASK; + } +} + +void CM17Utils::splitFragmentLICHFEC(const unsigned char* data, unsigned int& frag1, unsigned int& frag2, unsigned int& frag3, unsigned int& frag4) +{ + assert(data != NULL); + + frag1 = frag2 = frag3 = frag4 = 0x00U; + + unsigned int offset = 0U; + unsigned int MASK = 0x800000U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = READ_BIT1(data, offset) != 0x00U; + if (b) + frag1 |= MASK; + } + + MASK = 0x800000U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = READ_BIT1(data, offset) != 0x00U; + if (b) + frag2 |= MASK; + } + + MASK = 0x800000U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = READ_BIT1(data, offset) != 0x00U; + if (b) + frag3 |= MASK; + } + + MASK = 0x800000U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = READ_BIT1(data, offset) != 0x00U; + if (b) + frag4 |= MASK; + } +} + +void CM17Utils::combineFragmentLICH(unsigned int frag1, unsigned int frag2, unsigned int frag3, unsigned int frag4, unsigned char* data) +{ + assert(data != NULL); + + unsigned int offset = 0U; + unsigned int MASK = 0x800U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = (frag1 & MASK) == MASK; + WRITE_BIT1(data, offset, b); + } + + MASK = 0x800U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = (frag2 & MASK) == MASK; + WRITE_BIT1(data, offset, b); + } + + MASK = 0x800U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = (frag3 & MASK) == MASK; + WRITE_BIT1(data, offset, b); + } + + MASK = 0x800U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = (frag4 & MASK) == MASK; + WRITE_BIT1(data, offset, b); + } +} + +void CM17Utils::combineFragmentLICHFEC(unsigned int frag1, unsigned int frag2, unsigned int frag3, unsigned int frag4, unsigned char* data) +{ + assert(data != NULL); + + unsigned int offset = 0U; + unsigned int MASK = 0x800000U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = (frag1 & MASK) == MASK; + WRITE_BIT1(data, offset, b); + } + + MASK = 0x800000U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = (frag2 & MASK) == MASK; + WRITE_BIT1(data, offset, b); + } + + MASK = 0x800000U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = (frag3 & MASK) == MASK; + WRITE_BIT1(data, offset, b); + } + + MASK = 0x800000U; + for (unsigned int i = 0U; i < (M17_LICH_FRAGMENT_FEC_LENGTH_BITS / 4U); i++, offset++, MASK >>= 1) { + bool b = (frag4 & MASK) == MASK; + WRITE_BIT1(data, offset, b); + } +} diff --git a/M17Utils.h b/M17Utils.h new file mode 100644 index 000000000..c6e27ceb1 --- /dev/null +++ b/M17Utils.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(M17Utils_H) +#define M17Utils_H + +#include + +class CM17Utils { +public: + CM17Utils(); + ~CM17Utils(); + + static void encodeCallsign(const std::string& callsign, unsigned char* encoded); + static void decodeCallsign(const unsigned char* encoded, std::string& callsign); + + static void splitFragmentLICH(const unsigned char* data, unsigned int& frag1, unsigned int& frag2, unsigned int& frag3, unsigned int& frag4); + static void splitFragmentLICHFEC(const unsigned char* data, unsigned int& frag1, unsigned int& frag2, unsigned int& frag3, unsigned int& frag4); + + static void combineFragmentLICH(unsigned int frag1, unsigned int frag2, unsigned int frag3, unsigned int frag4, unsigned char* data); + static void combineFragmentLICHFEC(unsigned int frag1, unsigned int frag2, unsigned int frag3, unsigned int frag4, unsigned char* data); + +private: +}; + +#endif diff --git a/MMDVM.ini b/MMDVM.ini index 78d00b322..7883cf487 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -13,6 +13,7 @@ Daemon=0 RXFrequency=435000000 TXFrequency=435000000 Power=1 +# The following lines are only needed if a direct connection to a DMR master is being used Latitude=0.0 Longitude=0.0 Height=0 @@ -26,6 +27,7 @@ DisplayLevel=1 FileLevel=1 FilePath=. FileRoot=MMDVM +FileRotate=1 [CW Id] Enable=1 @@ -41,11 +43,22 @@ File=NXDN.csv Time=24 [Modem] -# Port=/dev/ttyACM0 -# Port=/dev/ttyAMA0 -Port=\\.\COM3 +# Valid values are "null", "uart", "udp", and (on Linux) "i2c" Protocol=uart -# Address=0x22 +# The port and speed used for a UART connection +# UARTPort=\\.\COM4 +# UARTPort=/dev/ttyACM0 +UARTPort=/dev/ttyAMA0 +UARTSpeed=460800 +# The port and address for an I2C connection +I2CPort=/dev/i2c +I2CAddress=0x22 +# IP parameters for UDP connection +ModemAddress=192.168.2.100 +ModemPort=3334 +LocalAddress=192.168.2.1 +LocalPort=3335 + TXInvert=1 RXInvert=0 PTTInvert=0 @@ -64,8 +77,12 @@ RFLevel=100 # YSFTXLevel=50 # P25TXLevel=50 # NXDNTXLevel=50 +# M17TXLevel=50 # POCSAGTXLevel=50 +# FMTXLevel=50 +# AX25TXLevel=50 RSSIMappingFile=RSSI.dat +UseCOSAsLockout=0 Trace=0 Debug=0 @@ -76,11 +93,6 @@ RemotePort=40094 LocalPort=40095 # SendFrameType=0 -[UMP] -Enable=0 -# Port=\\.\COM4 -Port=/dev/ttyACM1 - [D-Star] Enable=1 Module=C @@ -91,6 +103,7 @@ AckMessage=0 ErrorReply=1 RemoteGateway=0 # ModeHang=10 +WhiteList= [DMR] Enable=1 @@ -107,13 +120,14 @@ DumpTAData=1 CallHang=3 TXHang=4 # ModeHang=10 +# OVCM Values, 0=off, 1=rx_on, 2=tx_on, 3=both_on, 4=force off +# OVCM=0 [System Fusion] Enable=1 LowDeviation=0 SelfOnly=0 TXHang=4 -#DGID=1 RemoteGateway=0 # ModeHang=10 @@ -123,6 +137,7 @@ NAC=293 SelfOnly=0 OverrideUIDCheck=0 RemoteGateway=0 +TXHang=5 # ModeHang=10 [NXDN] @@ -130,30 +145,97 @@ Enable=1 RAN=1 SelfOnly=0 RemoteGateway=0 +TXHang=5 +# ModeHang=10 + +[M17] +Enable=1 +CAN=0 +SelfOnly=0 +TXHang=5 # ModeHang=10 [POCSAG] Enable=1 Frequency=439987500 +[FM] +Enable=1 +# Callsign=G4KLX +CallsignSpeed=20 +CallsignFrequency=1000 +CallsignTime=10 +CallsignHoldoff=0 +CallsignHighLevel=50 +CallsignLowLevel=20 +CallsignAtStart=1 +CallsignAtEnd=1 +CallsignAtLatch=0 +RFAck=K +ExtAck=N +AckSpeed=20 +AckFrequency=1750 +AckMinTime=4 +AckDelay=1000 +AckLevel=50 +# Timeout=180 +TimeoutLevel=80 +CTCSSFrequency=88.4 +CTCSSThreshold=30 +# CTCSSHighThreshold=30 +# CTCSSLowThreshold=20 +CTCSSLevel=20 +KerchunkTime=0 +HangTime=7 +# AccessMode values are: +# 0 - Carrier access with COS +# 1 - CTCSS only access without COS +# 2 - CTCSS only access with COS +# 3 - CTCSS only access with COS to start, then carrier access with COS +AccessMode=1 +# LinkMode=1 to remove almost all of the logic control +LinkMode=0 +COSInvert=0 +NoiseSquelch=0 +SquelchThreshold=30 +# SquelchHighThreshold=30 +# SquelchLowThreshold=20 +RFAudioBoost=1 +MaxDevLevel=90 +ExtAudioBoost=1 +# ModeHang=10 + +[AX.25] +Enable=1 +TXDelay=300 +RXTwist=6 +SlotTime=30 +PPersist=128 +Trace=1 + [D-Star Network] Enable=1 +LocalAddress=127.0.0.1 +LocalPort=20011 GatewayAddress=127.0.0.1 GatewayPort=20010 -LocalPort=20011 # ModeHang=3 Debug=0 [DMR Network] Enable=1 -Address=44.131.4.1 -Port=62031 +# Type may be either 'Direct' or 'Gateway'. When Direct you must provide the Master's +# address as well as the Password, and for DMR+, Options also. +Type=Gateway +LocalAddress=127.0.0.1 +LocalPort=62032 +RemoteAddress=127.0.0.1 +RemotePort=62031 +# Password=P@ssw0rd1234 Jitter=360 -# Local=62032 -Password=PASSWORD -# Options= Slot1=1 Slot2=1 +# Options= # ModeHang=3 Debug=0 @@ -168,14 +250,16 @@ Debug=0 [P25 Network] Enable=1 +LocalAddress=127.0.0.1 +LocalPort=32010 GatewayAddress=127.0.0.1 GatewayPort=42020 -LocalPort=32010 # ModeHang=3 Debug=0 [NXDN Network] Enable=1 +Protocol=Icom LocalAddress=127.0.0.1 LocalPort=14021 GatewayAddress=127.0.0.1 @@ -183,6 +267,15 @@ GatewayPort=14020 # ModeHang=3 Debug=0 +[M17 Network] +Enable=1 +LocalAddress=127.0.0.1 +LocalPort=17011 +GatewayAddress=127.0.0.1 +GatewayPort=17010 +# ModeHang=3 +Debug=0 + [POCSAG Network] Enable=1 LocalAddress=127.0.0.1 @@ -192,10 +285,36 @@ GatewayPort=4800 # ModeHang=3 Debug=0 +[FM Network] +Enable=1 +# Protocol may be USRP or RAW +Protocol=USRP +# SampleRate is only used in RAW mode +SampleRate=48000 +# The squelch file is optional and only used in RAW mode +SquelchFile=/tmp/sql +LocalAddress=127.0.0.1 +LocalPort=3810 +GatewayAddress=127.0.0.1 +GatewayPort=4810 +PreEmphasis=1 +DeEmphasis=1 +TXAudioGain=1.0 +RXAudioGain=1.0 +# ModeHang=3 +Debug=0 + +[AX.25 Network] +Enable=1 +Port=/dev/ttyp7 +Speed=9600 +Debug=0 + [TFT Serial] # Port=modem Port=/dev/ttyAMA0 Brightness=50 +ScreenLayout=0 [HD44780] Rows=2 @@ -234,6 +353,7 @@ Invert=0 Scroll=1 Rotate=0 Cast=0 +LogoScreensaver=1 [LCDproc] Address=localhost @@ -247,8 +367,7 @@ UTC=0 Enable=0 File=/tmp/MMDVM_Active.lck -[Mobile GPS] +[Remote Control] Enable=0 Address=127.0.0.1 -Port=7834 - +Port=7642 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 07df0295a..c01cbf510 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,17 +17,21 @@ */ #include "MMDVMHost.h" +#include "DMRDirectNetwork.h" +#include "DMRGatewayNetwork.h" +#include "NXDNKenwoodNetwork.h" +#include "NXDNIcomNetwork.h" #include "RSSIInterpolator.h" -#include "SerialController.h" +#include "NullController.h" +#include "UARTController.h" +#if defined(__linux__) +#include "I2CController.h" +#endif +#include "UDPController.h" +#include "DStarDefines.h" #include "Version.h" #include "StopWatch.h" #include "Defines.h" -#include "DStarControl.h" -#include "DMRControl.h" -#include "YSFControl.h" -#include "P25Control.h" -#include "NXDNControl.h" -#include "POCSAGControl.h" #include "Thread.h" #include "Log.h" #include "GitVersion.h" @@ -53,19 +57,25 @@ const char* DEFAULT_INI_FILE = "/etc/MMDVM.ini"; static bool m_killed = false; static int m_signal = 0; +static bool m_reload = false; #if !defined(_WIN32) && !defined(_WIN64) -static void sigHandler(int signum) +static void sigHandler1(int signum) { m_killed = true; m_signal = signum; } + +static void sigHandler2(int signum) +{ + m_reload = true; +} #endif const char* HEADER1 = "This software is for use on amateur radio networks only,"; const char* HEADER2 = "it is to be used for educational purposes only. Its use on"; const char* HEADER3 = "commercial networks is strictly prohibited."; -const char* HEADER4 = "Copyright(C) 2015-2018 by Jonathan Naylor, G4KLX and others"; +const char* HEADER4 = "Copyright(C) 2015-2023 by Jonathan Naylor, G4KLX and others"; int main(int argc, char** argv) { @@ -86,9 +96,10 @@ int main(int argc, char** argv) } #if !defined(_WIN32) && !defined(_WIN64) - ::signal(SIGINT, sigHandler); - ::signal(SIGTERM, sigHandler); - ::signal(SIGHUP, sigHandler); + ::signal(SIGINT, sigHandler1); + ::signal(SIGTERM, sigHandler1); + ::signal(SIGHUP, sigHandler1); + ::signal(SIGUSR1, sigHandler2); #endif int ret = 0; @@ -101,15 +112,24 @@ int main(int argc, char** argv) delete host; - if (m_signal == 2) - ::LogInfo("MMDVMHost-%s exited on receipt of SIGINT", VERSION); - - if (m_signal == 15) - ::LogInfo("MMDVMHost-%s exited on receipt of SIGTERM", VERSION); - - if (m_signal == 1) - ::LogInfo("MMDVMHost-%s is restarting on receipt of SIGHUP", VERSION); - } while (m_signal == 1); + switch (m_signal) { + case 2: + ::LogInfo("MMDVMHost-%s exited on receipt of SIGINT", VERSION); + break; + case 15: + ::LogInfo("MMDVMHost-%s exited on receipt of SIGTERM", VERSION); + break; + case 1: + ::LogInfo("MMDVMHost-%s exited on receipt of SIGHUP", VERSION); + break; + case 10: + ::LogInfo("MMDVMHost-%s is restarting on receipt of SIGUSR1", VERSION); + break; + default: + ::LogInfo("MMDVMHost-%s exited on receipt of an unknown signal", VERSION); + break; + } + } while (m_signal == 10); ::LogFinalise(); @@ -119,26 +139,41 @@ int main(int argc, char** argv) CMMDVMHost::CMMDVMHost(const std::string& confFile) : m_conf(confFile), m_modem(NULL), +m_dstar(NULL), +m_dmr(NULL), +m_ysf(NULL), +m_p25(NULL), +m_nxdn(NULL), +m_m17(NULL), +m_pocsag(NULL), +m_fm(NULL), +m_ax25(NULL), m_dstarNetwork(NULL), m_dmrNetwork(NULL), m_ysfNetwork(NULL), m_p25Network(NULL), m_nxdnNetwork(NULL), +m_m17Network(NULL), m_pocsagNetwork(NULL), +m_fmNetwork(NULL), +m_ax25Network(NULL), m_display(NULL), -m_ump(NULL), m_mode(MODE_IDLE), m_dstarRFModeHang(10U), m_dmrRFModeHang(10U), m_ysfRFModeHang(10U), m_p25RFModeHang(10U), m_nxdnRFModeHang(10U), +m_m17RFModeHang(10U), +m_fmRFModeHang(10U), m_dstarNetModeHang(3U), m_dmrNetModeHang(3U), m_ysfNetModeHang(3U), m_p25NetModeHang(3U), m_nxdnNetModeHang(3U), +m_m17NetModeHang(3U), m_pocsagNetModeHang(3U), +m_fmNetModeHang(3U), m_modeTimer(1000U), m_dmrTXTimer(1000U), m_cwIdTimer(1000U), @@ -149,7 +184,10 @@ m_dmrEnabled(false), m_ysfEnabled(false), m_p25Enabled(false), m_nxdnEnabled(false), +m_m17Enabled(false), m_pocsagEnabled(false), +m_fmEnabled(false), +m_ax25Enabled(false), m_cwIdTime(0U), m_dmrLookup(NULL), m_nxdnLookup(NULL), @@ -158,12 +196,15 @@ m_id(0U), m_cwCallsign(), m_lockFileEnabled(false), m_lockFileName(), -m_mobileGPS(NULL) +m_remoteControl(NULL), +m_fixedMode(false) { + CUDPSocket::startup(); } CMMDVMHost::~CMMDVMHost() { + CUDPSocket::shutdown(); } int CMMDVMHost::run() @@ -234,7 +275,11 @@ int CMMDVMHost::run() #endif #endif - ret = ::LogInitialise(m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel()); +#if !defined(_WIN32) && !defined(_WIN64) + ret = ::LogInitialise(m_daemon, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel(), m_conf.getLogFileRotate()); +#else + ret = ::LogInitialise(false, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel(), m_conf.getLogFileRotate()); +#endif if (!ret) { ::fprintf(stderr, "MMDVMHost: unable to open the log file\n"); return 1; @@ -244,7 +289,6 @@ int CMMDVMHost::run() if (m_daemon) { ::close(STDIN_FILENO); ::close(STDOUT_FILENO); - ::close(STDERR_FILENO); } #endif @@ -253,8 +297,8 @@ int CMMDVMHost::run() LogInfo(HEADER3); LogInfo(HEADER4); - LogMessage("MMDVMHost-%s is starting", VERSION); - LogMessage("Built %s %s (GitID #%.7s)", __TIME__, __DATE__, gitversion); + LogInfo("MMDVMHost-%s is starting", VERSION); + LogInfo("Built %s %s (GitID #%.7s)", __TIME__, __DATE__, gitversion); readParams(); @@ -262,21 +306,54 @@ int CMMDVMHost::run() if (!ret) return 1; - if (m_conf.getUMPEnabled()) { - std::string port = m_conf.getUMPPort(); + if (m_dstarEnabled && !m_modem->hasDStar()) { + LogWarning("D-Star enabled in the host but not in the modem firmware, disabling"); + m_dstarEnabled = false; + } - LogInfo("Universal MMDVM Peripheral"); - LogInfo(" Port: %s", port.c_str()); + if (m_dmrEnabled && !m_modem->hasDMR()) { + LogWarning("DMR enabled in the host but not in the modem firmware, disabling"); + m_dmrEnabled = false; + } - m_ump = new CUMP(port); - bool ret = m_ump->open(); - if (!ret) { - delete m_ump; - m_ump = NULL; - } + if (m_ysfEnabled && !m_modem->hasYSF()) { + LogWarning("YSF enabled in the host but not in the modem firmware, disabling"); + m_ysfEnabled = false; + } + + if (m_p25Enabled && !m_modem->hasP25()) { + LogWarning("P25 enabled in the host but not in the modem firmware, disabling"); + m_p25Enabled = false; + } + + if (m_nxdnEnabled && !m_modem->hasNXDN()) { + LogWarning("NXDN enabled in the host but not in the modem firmware, disabling"); + m_nxdnEnabled = false; + } + + if (m_m17Enabled && !m_modem->hasM17()) { + LogWarning("M17 enabled in the host but not in the modem firmware, disabling"); + m_m17Enabled = false; + } + + if (m_fmEnabled && !m_modem->hasFM()) { + LogWarning("FM enabled in the host but not in the modem firmware, disabling"); + m_fmEnabled = false; + } + + if (m_pocsagEnabled && !m_modem->hasPOCSAG()) { + LogWarning("POCSAG enabled in the host but not in the modem firmware, disabling"); + m_pocsagEnabled = false; } - m_display = CDisplay::createDisplay(m_conf,m_ump,m_modem); + if (m_ax25Enabled && !m_modem->hasAX25()) { + LogWarning("AX.25 enabled in the host but not in the modem firmware, disabling"); + m_ax25Enabled = false; + } + + m_display = CDisplay::createDisplay(m_conf, m_modem); + + LogInfo("Opening network connections"); if (m_dstarEnabled && m_conf.getDStarNetworkEnabled()) { ret = createDStarNetwork(); @@ -308,34 +385,54 @@ int CMMDVMHost::run() return 1; } + if (m_m17Enabled && m_conf.getM17NetworkEnabled()) { + ret = createM17Network(); + if (!ret) + return 1; + } + if (m_pocsagEnabled && m_conf.getPOCSAGNetworkEnabled()) { ret = createPOCSAGNetwork(); if (!ret) return 1; } - in_addr transparentAddress; - unsigned int transparentPort = 0U; + if (m_fmEnabled && m_conf.getFMNetworkEnabled()) { + ret = createFMNetwork(); + if (!ret) + return 1; + } + + if (m_ax25Enabled && m_conf.getAX25NetworkEnabled()) { + ret = createAX25Network(); + if (!ret) + return 1; + } + + sockaddr_storage transparentAddress; + unsigned int transparentAddrLen; CUDPSocket* transparentSocket = NULL; unsigned int sendFrameType = 0U; if (m_conf.getTransparentEnabled()) { std::string remoteAddress = m_conf.getTransparentRemoteAddress(); - unsigned int remotePort = m_conf.getTransparentRemotePort(); - unsigned int localPort = m_conf.getTransparentLocalPort(); + unsigned short remotePort = m_conf.getTransparentRemotePort(); + unsigned short localPort = m_conf.getTransparentLocalPort(); sendFrameType = m_conf.getTransparentSendFrameType(); LogInfo("Transparent Data"); LogInfo(" Remote Address: %s", remoteAddress.c_str()); - LogInfo(" Remote Port: %u", remotePort); - LogInfo(" Local Port: %u", localPort); + LogInfo(" Remote Port: %hu", remotePort); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Send Frame Type: %u", sendFrameType); - transparentAddress = CUDPSocket::lookup(remoteAddress); - transparentPort = remotePort; + if (CUDPSocket::lookup(remoteAddress, remotePort, transparentAddress, transparentAddrLen) != 0) { + LogError("Unable to resolve the address of the Transparent Data source"); + return 1; + } transparentSocket = new CUDPSocket(localPort); - ret = transparentSocket->open(); + ret = transparentSocket->open(transparentAddress); if (!ret) { LogWarning("Could not open the Transparent data socket, disabling"); delete transparentSocket; @@ -393,17 +490,19 @@ int CMMDVMHost::run() m_dmrLookup->read(); } + LogInfo("Starting protocol handlers"); + CStopWatch stopWatch; stopWatch.start(); - CDStarControl* dstar = NULL; if (m_dstarEnabled) { std::string module = m_conf.getDStarModule(); bool selfOnly = m_conf.getDStarSelfOnly(); std::vector blackList = m_conf.getDStarBlackList(); + std::vector whiteList = m_conf.getDStarWhiteList(); bool ackReply = m_conf.getDStarAckReply(); unsigned int ackTime = m_conf.getDStarAckTime(); - bool ackMessage = m_conf.getDStarAckMessage(); + DSTAR_ACK_MESSAGE ackMessage = m_conf.getDStarAckMessage(); bool errorReply = m_conf.getDStarErrorReply(); bool remoteGateway = m_conf.getDStarRemoteGateway(); m_dstarRFModeHang = m_conf.getDStarModeHang(); @@ -412,7 +511,7 @@ int CMMDVMHost::run() LogInfo(" Module: %s", module.c_str()); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Ack Reply: %s", ackReply ? "yes" : "no"); - LogInfo(" Ack message: %s", ackMessage ? "RSSI" : "BER"); + LogInfo(" Ack message: %s", ackMessage == DSTAR_ACK_RSSI? "RSSI" : (ackMessage == DSTAR_ACK_SMETER ? "SMETER" : "BER")); LogInfo(" Ack Time: %ums", ackTime); LogInfo(" Error Reply: %s", errorReply ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); @@ -420,14 +519,16 @@ int CMMDVMHost::run() if (blackList.size() > 0U) LogInfo(" Black List: %u", blackList.size()); + if (whiteList.size() > 0U) + LogInfo(" White List: %u", whiteList.size()); - dstar = new CDStarControl(m_callsign, module, selfOnly, ackReply, ackTime, ackMessage, errorReply, blackList, m_dstarNetwork, m_display, m_timeout, m_duplex, remoteGateway, rssi); + m_dstar = new CDStarControl(m_callsign, module, selfOnly, ackReply, ackTime, ackMessage, errorReply, blackList, whiteList, m_dstarNetwork, m_display, m_timeout, m_duplex, remoteGateway, rssi); } + DMR_BEACONS dmrBeacons = DMR_BEACONS_OFF; CTimer dmrBeaconIntervalTimer(1000U); CTimer dmrBeaconDurationTimer(1000U); - CDMRControl* dmr = NULL; if (m_dmrEnabled) { unsigned int id = m_conf.getDMRId(); unsigned int colorCode = m_conf.getDMRColorCode(); @@ -443,7 +544,8 @@ int CMMDVMHost::run() unsigned int txHang = m_conf.getDMRTXHang(); unsigned int jitter = m_conf.getDMRNetworkJitter(); m_dmrRFModeHang = m_conf.getDMRModeHang(); - bool dmrBeacons = m_conf.getDMRBeacons(); + dmrBeacons = m_conf.getDMRBeacons(); + DMR_OVCM_TYPES ovcm = m_conf.getDMROVCM(); if (txHang > m_dmrRFModeHang) txHang = m_dmrRFModeHang; @@ -476,33 +578,56 @@ int CMMDVMHost::run() LogInfo(" Call Hang: %us", callHang); LogInfo(" TX Hang: %us", txHang); LogInfo(" Mode Hang: %us", m_dmrRFModeHang); + if (ovcm == DMR_OVCM_OFF) + LogInfo(" OVCM: off"); + else if (ovcm == DMR_OVCM_RX_ON) + LogInfo(" OVCM: on(rx only)"); + else if (ovcm == DMR_OVCM_TX_ON) + LogInfo(" OVCM: on(tx only)"); + else if (ovcm == DMR_OVCM_ON) + LogInfo(" OVCM: on"); + else if (ovcm == DMR_OVCM_FORCE_OFF) + LogInfo(" OVCM: off (forced)"); + + switch (dmrBeacons) { + case DMR_BEACONS_NETWORK: { + unsigned int dmrBeaconDuration = m_conf.getDMRBeaconDuration(); + + LogInfo(" DMR Roaming Beacons Type: network"); + LogInfo(" DMR Roaming Beacons Duration: %us", dmrBeaconDuration); + + dmrBeaconDurationTimer.setTimeout(dmrBeaconDuration); + } + break; + case DMR_BEACONS_TIMED: { + unsigned int dmrBeaconInterval = m_conf.getDMRBeaconInterval(); + unsigned int dmrBeaconDuration = m_conf.getDMRBeaconDuration(); - if (dmrBeacons) { - unsigned int dmrBeaconInterval = m_conf.getDMRBeaconInterval(); - unsigned int dmrBeaconDuration = m_conf.getDMRBeaconDuration(); - - LogInfo(" DMR Roaming Beacon Interval: %us", dmrBeaconInterval); - LogInfo(" DMR Roaming Beacon Duration: %us", dmrBeaconDuration); + LogInfo(" DMR Roaming Beacons Type: timed"); + LogInfo(" DMR Roaming Beacons Interval: %us", dmrBeaconInterval); + LogInfo(" DMR Roaming Beacons Duration: %us", dmrBeaconDuration); - dmrBeaconDurationTimer.setTimeout(dmrBeaconDuration); + dmrBeaconDurationTimer.setTimeout(dmrBeaconDuration); - dmrBeaconIntervalTimer.setTimeout(dmrBeaconInterval); - dmrBeaconIntervalTimer.start(); + dmrBeaconIntervalTimer.setTimeout(dmrBeaconInterval); + dmrBeaconIntervalTimer.start(); + } + break; + default: + LogInfo(" DMR Roaming Beacons Type: off"); + break; } - dmr = new CDMRControl(id, colorCode, callHang, selfOnly, embeddedLCOnly, dumpTAData, prefixes, blackList, whiteList, slot1TGWhiteList, slot2TGWhiteList, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, m_dmrLookup, rssi, jitter); + m_dmr = new CDMRControl(id, colorCode, callHang, selfOnly, embeddedLCOnly, dumpTAData, prefixes, blackList, whiteList, slot1TGWhiteList, slot2TGWhiteList, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, m_dmrLookup, rssi, jitter, ovcm); m_dmrTXTimer.setTimeout(txHang); } - CYSFControl* ysf = NULL; if (m_ysfEnabled) { bool lowDeviation = m_conf.getFusionLowDeviation(); bool remoteGateway = m_conf.getFusionRemoteGateway(); unsigned int txHang = m_conf.getFusionTXHang(); bool selfOnly = m_conf.getFusionSelfOnly(); - bool sqlEnabled = m_conf.getFusionSQLEnabled(); - unsigned char sql = m_conf.getFusionSQL(); m_ysfRFModeHang = m_conf.getFusionModeHang(); LogInfo("YSF RF Parameters"); @@ -510,23 +635,19 @@ int CMMDVMHost::run() LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); LogInfo(" TX Hang: %us", txHang); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); - LogInfo(" DSQ: %s", sqlEnabled ? "yes" : "no"); - if (sqlEnabled) - LogInfo(" DSQ Value: %u", sql); LogInfo(" Mode Hang: %us", m_ysfRFModeHang); - ysf = new CYSFControl(m_callsign, selfOnly, m_ysfNetwork, m_display, m_timeout, m_duplex, lowDeviation, remoteGateway, rssi); - ysf->setSQL(sqlEnabled, sql); + m_ysf = new CYSFControl(m_callsign, selfOnly, m_ysfNetwork, m_display, m_timeout, m_duplex, lowDeviation, remoteGateway, rssi); } - CP25Control* p25 = NULL; if (m_p25Enabled) { - unsigned int id = m_conf.getP25Id(); - unsigned int nac = m_conf.getP25NAC(); - bool uidOverride = m_conf.getP25OverrideUID(); - bool selfOnly = m_conf.getP25SelfOnly(); - bool remoteGateway = m_conf.getP25RemoteGateway(); - m_p25RFModeHang = m_conf.getP25ModeHang(); + unsigned int id = m_conf.getP25Id(); + unsigned int nac = m_conf.getP25NAC(); + unsigned int txHang = m_conf.getP25TXHang(); + bool uidOverride = m_conf.getP25OverrideUID(); + bool selfOnly = m_conf.getP25SelfOnly(); + bool remoteGateway = m_conf.getP25RemoteGateway(); + m_p25RFModeHang = m_conf.getP25ModeHang(); LogInfo("P25 RF Parameters"); LogInfo(" Id: %u", id); @@ -534,12 +655,12 @@ int CMMDVMHost::run() LogInfo(" UID Override: %s", uidOverride ? "yes" : "no"); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); + LogInfo(" TX Hang: %us", txHang); LogInfo(" Mode Hang: %us", m_p25RFModeHang); - p25 = new CP25Control(nac, id, selfOnly, uidOverride, m_p25Network, m_display, m_timeout, m_duplex, m_dmrLookup, remoteGateway, rssi); + m_p25 = new CP25Control(nac, id, selfOnly, uidOverride, m_p25Network, m_display, m_timeout, m_duplex, m_dmrLookup, remoteGateway, rssi); } - CNXDNControl* nxdn = NULL; if (m_nxdnEnabled) { std::string lookupFile = m_conf.getNXDNIdLookupFile(); unsigned int reloadTime = m_conf.getNXDNIdLookupTime(); @@ -552,49 +673,110 @@ int CMMDVMHost::run() m_nxdnLookup = new CNXDNLookup(lookupFile, reloadTime); m_nxdnLookup->read(); - unsigned int id = m_conf.getNXDNId(); - unsigned int ran = m_conf.getNXDNRAN(); - bool selfOnly = m_conf.getNXDNSelfOnly(); - bool remoteGateway = m_conf.getNXDNRemoteGateway(); - m_nxdnRFModeHang = m_conf.getNXDNModeHang(); + unsigned int id = m_conf.getNXDNId(); + unsigned int ran = m_conf.getNXDNRAN(); + bool selfOnly = m_conf.getNXDNSelfOnly(); + bool remoteGateway = m_conf.getNXDNRemoteGateway(); + unsigned int txHang = m_conf.getNXDNTXHang(); + m_nxdnRFModeHang = m_conf.getNXDNModeHang(); LogInfo("NXDN RF Parameters"); LogInfo(" Id: %u", id); LogInfo(" RAN: %u", ran); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); + LogInfo(" TX Hang: %us", txHang); LogInfo(" Mode Hang: %us", m_nxdnRFModeHang); - nxdn = new CNXDNControl(ran, id, selfOnly, m_nxdnNetwork, m_display, m_timeout, m_duplex, remoteGateway, m_nxdnLookup, rssi); + m_nxdn = new CNXDNControl(ran, id, selfOnly, m_nxdnNetwork, m_display, m_timeout, m_duplex, remoteGateway, m_nxdnLookup, rssi); + } + + if (m_m17Enabled) { + bool selfOnly = m_conf.getM17SelfOnly(); + unsigned int can = m_conf.getM17CAN(); + bool allowEncryption = m_conf.getM17AllowEncryption(); + unsigned int txHang = m_conf.getM17TXHang(); + m_m17RFModeHang = m_conf.getM17ModeHang(); + + LogInfo("M17 RF Parameters"); + LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); + LogInfo(" CAN: %u", can); + LogInfo(" Allow Encryption: %s", allowEncryption ? "yes" : "no"); + LogInfo(" TX Hang: %us", txHang); + LogInfo(" Mode Hang: %us", m_m17RFModeHang); + + m_m17 = new CM17Control(m_callsign, can, selfOnly, allowEncryption, m_m17Network, m_display, m_timeout, m_duplex, rssi); } CTimer pocsagTimer(1000U, 30U); - CPOCSAGControl* pocsag = NULL; if (m_pocsagEnabled) { unsigned int frequency = m_conf.getPOCSAGFrequency(); LogInfo("POCSAG RF Parameters"); LogInfo(" Frequency: %uHz", frequency); - pocsag = new CPOCSAGControl(m_pocsagNetwork, m_display); + m_pocsag = new CPOCSAGControl(m_pocsagNetwork, m_display); + + if (m_pocsagNetwork != NULL) + pocsagTimer.start(); + } + + if (m_ax25Enabled) { + unsigned int txDelay = m_conf.getAX25TXDelay(); + int rxTwist = m_conf.getAX25RXTwist(); + unsigned int slotTime = m_conf.getAX25SlotTime(); + unsigned int pPersist = m_conf.getAX25PPersist(); + bool trace = m_conf.getAX25Trace(); + + LogInfo("AX.25 RF Parameters"); + LogInfo(" TX Delay: %ums", txDelay); + LogInfo(" RX Twist: %d", rxTwist); + LogInfo(" Slot Time: %ums", slotTime); + LogInfo(" P-Persist: %u", pPersist); + LogInfo(" Trace: %s", trace ? "yes" : "no"); + + m_ax25 = new CAX25Control(m_ax25Network, trace); + } + + if (m_fmEnabled) { + bool preEmphasis = m_conf.getFMPreEmphasis(); + bool deEmphasis = m_conf.getFMDeEmphasis(); + float txAudioGain = m_conf.getFMTXAudioGain(); + float rxAudioGain = m_conf.getFMRXAudioGain(); + m_fmRFModeHang = m_conf.getFMModeHang(); + + m_fm = new CFMControl(m_fmNetwork, txAudioGain, rxAudioGain, preEmphasis, deEmphasis); + } + + bool remoteControlEnabled = m_conf.getRemoteControlEnabled(); + if (remoteControlEnabled) { + std::string address = m_conf.getRemoteControlAddress(); + unsigned short port = m_conf.getRemoteControlPort(); + + LogInfo("Remote Control Parameters"); + LogInfo(" Address: %s", address.c_str()); + LogInfo(" Port: %hu", port); + + m_remoteControl = new CRemoteControl(this, address, port); - pocsagTimer.start(); + ret = m_remoteControl->open(); + if (!ret) { + delete m_remoteControl; + m_remoteControl = NULL; + } } setMode(MODE_IDLE); - LogMessage("MMDVMHost-%s is running", VERSION); + LogInfo("MMDVMHost-%s is running", VERSION); while (!m_killed) { - bool lockout1 = m_modem->hasLockout(); - bool lockout2 = false; + bool lockout = m_modem->hasLockout(); - if (m_ump != NULL) - lockout2 = m_ump->getLockout(); - if ((lockout1 || lockout2) && m_mode != MODE_LOCKOUT) + if (lockout && m_mode != MODE_LOCKOUT) setMode(MODE_LOCKOUT); - else if ((!lockout1 && !lockout2) && m_mode == MODE_LOCKOUT) + else if (!lockout && m_mode == MODE_LOCKOUT) setMode(MODE_IDLE); bool error = m_modem->hasError(); @@ -603,38 +785,32 @@ int CMMDVMHost::run() else if (!error && m_mode == MODE_ERROR) setMode(MODE_IDLE); - if (m_ump != NULL) { - bool tx = m_modem->hasTX(); - m_ump->setTX(tx); - bool cd = m_modem->hasCD(); - m_ump->setCD(cd); - } - - unsigned char data[200U]; + unsigned char data[500U]; unsigned int len; bool ret; len = m_modem->readDStarData(data); - if (dstar != NULL && len > 0U) { + if (m_dstar != NULL && len > 0U) { if (m_mode == MODE_IDLE) { - bool ret = dstar->writeModem(data, len); + bool ret = m_dstar->writeModem(data, len); if (ret) { m_modeTimer.setTimeout(m_dstarRFModeHang); setMode(MODE_DSTAR); } } else if (m_mode == MODE_DSTAR) { - dstar->writeModem(data, len); - m_modeTimer.start(); + bool ret = m_dstar->writeModem(data, len); + if (ret) + m_modeTimer.start(); } else if (m_mode != MODE_LOCKOUT) { LogWarning("D-Star modem data received when in mode %u", m_mode); } } len = m_modem->readDMRData1(data); - if (dmr != NULL && len > 0U) { + if (m_dmr != NULL && len > 0U) { if (m_mode == MODE_IDLE) { if (m_duplex) { - bool ret = dmr->processWakeup(data); + bool ret = m_dmr->processWakeup(data); if (ret) { m_modeTimer.setTimeout(m_dmrRFModeHang); setMode(MODE_DMR); @@ -643,18 +819,18 @@ int CMMDVMHost::run() } else { m_modeTimer.setTimeout(m_dmrRFModeHang); setMode(MODE_DMR); - dmr->writeModemSlot1(data, len); + m_dmr->writeModemSlot1(data, len); dmrBeaconDurationTimer.stop(); } } else if (m_mode == MODE_DMR) { if (m_duplex && !m_modem->hasTX()) { - bool ret = dmr->processWakeup(data); + bool ret = m_dmr->processWakeup(data); if (ret) { m_modem->writeDMRStart(true); m_dmrTXTimer.start(); } } else { - bool ret = dmr->writeModemSlot1(data, len); + bool ret = m_dmr->writeModemSlot1(data, len); if (ret) { dmrBeaconDurationTimer.stop(); m_modeTimer.start(); @@ -668,10 +844,10 @@ int CMMDVMHost::run() } len = m_modem->readDMRData2(data); - if (dmr != NULL && len > 0U) { + if (m_dmr != NULL && len > 0U) { if (m_mode == MODE_IDLE) { if (m_duplex) { - bool ret = dmr->processWakeup(data); + bool ret = m_dmr->processWakeup(data); if (ret) { m_modeTimer.setTimeout(m_dmrRFModeHang); setMode(MODE_DMR); @@ -680,18 +856,18 @@ int CMMDVMHost::run() } else { m_modeTimer.setTimeout(m_dmrRFModeHang); setMode(MODE_DMR); - dmr->writeModemSlot2(data, len); + m_dmr->writeModemSlot2(data, len); dmrBeaconDurationTimer.stop(); } } else if (m_mode == MODE_DMR) { if (m_duplex && !m_modem->hasTX()) { - bool ret = dmr->processWakeup(data); + bool ret = m_dmr->processWakeup(data); if (ret) { m_modem->writeDMRStart(true); m_dmrTXTimer.start(); } } else { - bool ret = dmr->writeModemSlot2(data, len); + bool ret = m_dmr->writeModemSlot2(data, len); if (ret) { dmrBeaconDurationTimer.stop(); m_modeTimer.start(); @@ -705,48 +881,94 @@ int CMMDVMHost::run() } len = m_modem->readYSFData(data); - if (ysf != NULL && len > 0U) { + if (m_ysf != NULL && len > 0U) { if (m_mode == MODE_IDLE) { - bool ret = ysf->writeModem(data, len); + bool ret = m_ysf->writeModem(data, len); if (ret) { m_modeTimer.setTimeout(m_ysfRFModeHang); setMode(MODE_YSF); } } else if (m_mode == MODE_YSF) { - ysf->writeModem(data, len); - m_modeTimer.start(); + bool ret = m_ysf->writeModem(data, len); + if (ret) + m_modeTimer.start(); } else if (m_mode != MODE_LOCKOUT) { LogWarning("System Fusion modem data received when in mode %u", m_mode); } } len = m_modem->readP25Data(data); - if (p25 != NULL && len > 0U) { + if (m_p25 != NULL && len > 0U) { if (m_mode == MODE_IDLE) { - bool ret = p25->writeModem(data, len); + bool ret = m_p25->writeModem(data, len); if (ret) { m_modeTimer.setTimeout(m_p25RFModeHang); setMode(MODE_P25); } } else if (m_mode == MODE_P25) { - p25->writeModem(data, len); - m_modeTimer.start(); + bool ret = m_p25->writeModem(data, len); + if (ret) + m_modeTimer.start(); } else if (m_mode != MODE_LOCKOUT) { LogWarning("P25 modem data received when in mode %u", m_mode); } } len = m_modem->readNXDNData(data); - if (nxdn != NULL && len > 0U) { + if (m_nxdn != NULL && len > 0U) { if (m_mode == MODE_IDLE) { - bool ret = nxdn->writeModem(data, len); + bool ret = m_nxdn->writeModem(data, len); if (ret) { m_modeTimer.setTimeout(m_nxdnRFModeHang); setMode(MODE_NXDN); } } else if (m_mode == MODE_NXDN) { - nxdn->writeModem(data, len); - m_modeTimer.start(); + bool ret = m_nxdn->writeModem(data, len); + if (ret) + m_modeTimer.start(); + } else if (m_mode != MODE_LOCKOUT) { + LogWarning("NXDN modem data received when in mode %u", m_mode); + } + } + + len = m_modem->readM17Data(data); + if (m_m17 != NULL && len > 0U) { + if (m_mode == MODE_IDLE) { + bool ret = m_m17->writeModem(data, len); + if (ret) { + m_modeTimer.setTimeout(m_m17RFModeHang); + setMode(MODE_M17); + } + } else if (m_mode == MODE_M17) { + bool ret = m_m17->writeModem(data, len); + if (ret) + m_modeTimer.start(); + } else if (m_mode != MODE_LOCKOUT) { + LogWarning("M17 modem data received when in mode %u", m_mode); + } + } + + len = m_modem->readFMData(data); + if (m_fm != NULL && len > 0U) { + if (m_mode == MODE_IDLE) { + bool ret = m_fm->writeModem(data, len); + if (ret) { + m_modeTimer.setTimeout(m_fmRFModeHang); + setMode(MODE_FM); + } + } else if (m_mode == MODE_FM) { + bool ret = m_fm->writeModem(data, len); + if (ret) + m_modeTimer.start(); + } else if (m_mode != MODE_LOCKOUT) { + LogWarning("FM modem data received when in mode %u", m_mode); + } + } + + len = m_modem->readAX25Data(data); + if (m_ax25 != NULL && len > 0U) { + if (m_mode == MODE_IDLE || m_mode == MODE_FM) { + m_ax25->writeModem(data, len); } else if (m_mode != MODE_LOCKOUT) { LogWarning("NXDN modem data received when in mode %u", m_mode); } @@ -754,15 +976,17 @@ int CMMDVMHost::run() len = m_modem->readTransparentData(data); if (transparentSocket != NULL && len > 0U) - transparentSocket->write(data, len, transparentAddress, transparentPort); + transparentSocket->write(data, len, transparentAddress, transparentAddrLen); - if (m_modeTimer.isRunning() && m_modeTimer.hasExpired()) - setMode(MODE_IDLE); + if (!m_fixedMode) { + if (m_modeTimer.isRunning() && m_modeTimer.hasExpired()) + setMode(MODE_IDLE); + } - if (dstar != NULL) { + if (m_dstar != NULL) { ret = m_modem->hasDStarSpace(); if (ret) { - len = dstar->readModem(data); + len = m_dstar->readModem(data); if (len > 0U) { if (m_mode == MODE_IDLE) { m_modeTimer.setTimeout(m_dstarNetModeHang); @@ -778,10 +1002,10 @@ int CMMDVMHost::run() } } - if (dmr != NULL) { + if (m_dmr != NULL) { ret = m_modem->hasDMRSpace1(); if (ret) { - len = dmr->readModemSlot1(data); + len = m_dmr->readModemSlot1(data); if (len > 0U) { if (m_mode == MODE_IDLE) { m_modeTimer.setTimeout(m_dmrNetModeHang); @@ -803,7 +1027,7 @@ int CMMDVMHost::run() ret = m_modem->hasDMRSpace2(); if (ret) { - len = dmr->readModemSlot2(data); + len = m_dmr->readModemSlot2(data); if (len > 0U) { if (m_mode == MODE_IDLE) { m_modeTimer.setTimeout(m_dmrNetModeHang); @@ -824,10 +1048,10 @@ int CMMDVMHost::run() } } - if (ysf != NULL) { + if (m_ysf != NULL) { ret = m_modem->hasYSFSpace(); if (ret) { - len = ysf->readModem(data); + len = m_ysf->readModem(data); if (len > 0U) { if (m_mode == MODE_IDLE) { m_modeTimer.setTimeout(m_ysfNetModeHang); @@ -843,10 +1067,10 @@ int CMMDVMHost::run() } } - if (p25 != NULL) { + if (m_p25 != NULL) { ret = m_modem->hasP25Space(); if (ret) { - len = p25->readModem(data); + len = m_p25->readModem(data); if (len > 0U) { if (m_mode == MODE_IDLE) { m_modeTimer.setTimeout(m_p25NetModeHang); @@ -862,10 +1086,10 @@ int CMMDVMHost::run() } } - if (nxdn != NULL) { + if (m_nxdn != NULL) { ret = m_modem->hasNXDNSpace(); if (ret) { - len = nxdn->readModem(data); + len = m_nxdn->readModem(data); if (len > 0U) { if (m_mode == MODE_IDLE) { m_modeTimer.setTimeout(m_nxdnNetModeHang); @@ -881,10 +1105,29 @@ int CMMDVMHost::run() } } - if (pocsag != NULL) { + if (m_m17 != NULL) { + ret = m_modem->hasM17Space(); + if (ret) { + len = m_m17->readModem(data); + if (len > 0U) { + if (m_mode == MODE_IDLE) { + m_modeTimer.setTimeout(m_m17NetModeHang); + setMode(MODE_M17); + } + if (m_mode == MODE_M17) { + m_modem->writeM17Data(data, len); + m_modeTimer.start(); + } else if (m_mode != MODE_LOCKOUT) { + LogWarning("M17 data received when in mode %u", m_mode); + } + } + } + } + + if (m_pocsag != NULL) { ret = m_modem->hasPOCSAGSpace(); if (ret) { - len = pocsag->readModem(data); + len = m_pocsag->readModem(data); if (len > 0U) { if (m_mode == MODE_IDLE) { m_modeTimer.setTimeout(m_pocsagNetModeHang); @@ -900,34 +1143,86 @@ int CMMDVMHost::run() } } + if (m_fm != NULL) { + unsigned int space = m_modem->getFMSpace(); + if (space > 0U) { + len = m_fm->readModem(data, space); + if (len > 0U) { + if (m_mode == MODE_IDLE) { + m_modeTimer.setTimeout(m_fmNetModeHang); + setMode(MODE_FM); + } + if (m_mode == MODE_FM) { + m_modem->writeFMData(data, len); + m_modeTimer.start(); + } else if (m_mode != MODE_LOCKOUT) { + LogWarning("FM data received when in mode %u", m_mode); + } + } + } + } + + if (m_ax25 != NULL) { + ret = m_modem->hasAX25Space(); + if (ret) { + len = m_ax25->readModem(data); + if (len > 0U) { + if (m_mode == MODE_IDLE || m_mode == MODE_FM) { + m_modem->writeAX25Data(data, len); + } + else if (m_mode != MODE_LOCKOUT) { + LogWarning("AX.25 data received when in mode %u", m_mode); + } + } + } + } + if (transparentSocket != NULL) { - in_addr address; - unsigned int port = 0U; - len = transparentSocket->read(data, 200U, address, port); + sockaddr_storage address; + unsigned int addrlen; + len = transparentSocket->read(data, 200U, address, addrlen); if (len > 0U) m_modem->writeTransparentData(data, len); } + remoteControl(); + unsigned int ms = stopWatch.elapsed(); stopWatch.start(); m_display->clock(ms); m_modem->clock(ms); - m_modeTimer.clock(ms); - - if (dstar != NULL) - dstar->clock(); - if (dmr != NULL) - dmr->clock(); - if (ysf != NULL) - ysf->clock(ms); - if (p25 != NULL) - p25->clock(ms); - if (nxdn != NULL) - nxdn->clock(ms); - if (pocsag != NULL) - pocsag->clock(ms); + + if (!m_fixedMode) + m_modeTimer.clock(ms); + + if (m_reload) { + if (m_dmrLookup != NULL) + m_dmrLookup->reload(); + + if (m_nxdnLookup != NULL) + m_nxdnLookup->reload(); + + m_reload = false; + } + + if (m_dstar != NULL) + m_dstar->clock(); + if (m_dmr != NULL) + m_dmr->clock(); + if (m_ysf != NULL) + m_ysf->clock(ms); + if (m_p25 != NULL) + m_p25->clock(ms); + if (m_nxdn != NULL) + m_nxdn->clock(ms); + if (m_m17 != NULL) + m_m17->clock(ms); + if (m_pocsag != NULL) + m_pocsag->clock(ms); + if (m_fm != NULL) + m_fm->clock(ms); if (m_dstarNetwork != NULL) m_dstarNetwork->clock(ms); @@ -939,15 +1234,16 @@ int CMMDVMHost::run() m_p25Network->clock(ms); if (m_nxdnNetwork != NULL) m_nxdnNetwork->clock(ms); + if (m_m17Network != NULL) + m_m17Network->clock(ms); if (m_pocsagNetwork != NULL) m_pocsagNetwork->clock(ms); - - if (m_mobileGPS != NULL) - m_mobileGPS->clock(ms); + if (m_fmNetwork != NULL) + m_fmNetwork->clock(ms); m_cwIdTimer.clock(ms); if (m_cwIdTimer.isRunning() && m_cwIdTimer.hasExpired()) { - if (m_mode == MODE_IDLE && !m_modem->hasTX()){ + if (!m_modem->hasTX()){ LogDebug("sending CW ID"); m_display->writeCW(); m_modem->sendCWId(m_cwCallsign); @@ -957,18 +1253,42 @@ int CMMDVMHost::run() } } - dmrBeaconIntervalTimer.clock(ms); - if (dmrBeaconIntervalTimer.isRunning() && dmrBeaconIntervalTimer.hasExpired()) { - if (m_mode == MODE_IDLE && !m_modem->hasTX()) { - setMode(MODE_DMR); - dmrBeaconIntervalTimer.start(); - dmrBeaconDurationTimer.start(); - } + switch (dmrBeacons) { + case DMR_BEACONS_TIMED: + dmrBeaconIntervalTimer.clock(ms); + if (dmrBeaconIntervalTimer.isRunning() && dmrBeaconIntervalTimer.hasExpired()) { + if ((m_mode == MODE_IDLE || m_mode == MODE_DMR) && !m_modem->hasTX()) { + if (!m_fixedMode && m_mode == MODE_IDLE) + setMode(MODE_DMR); + dmrBeaconIntervalTimer.start(); + dmrBeaconDurationTimer.start(); + if (m_duplex) + LogDebug("sending DMR Roaming Beacon (timed mode)"); + } + } + break; + case DMR_BEACONS_NETWORK: + if (m_dmrNetwork != NULL) { + bool beacon = m_dmrNetwork->wantsBeacon(); + if (beacon) { + if ((m_mode == MODE_IDLE || m_mode == MODE_DMR) && !m_modem->hasTX()) { + if (!m_fixedMode && m_mode == MODE_IDLE) + setMode(MODE_DMR); + dmrBeaconDurationTimer.start(); + if (m_duplex) + LogDebug("sending DMR Roaming Beacon (network mode)"); + } + } + } + break; + default: + break; } dmrBeaconDurationTimer.clock(ms); if (dmrBeaconDurationTimer.isRunning() && dmrBeaconDurationTimer.hasExpired()) { - setMode(MODE_IDLE); + if (!m_fixedMode) + setMode(MODE_IDLE); dmrBeaconDurationTimer.stop(); } @@ -985,44 +1305,27 @@ int CMMDVMHost::run() pocsagTimer.start(); } - if (m_ump != NULL) - m_ump->clock(ms); - if (ms < 5U) CThread::sleep(5U); } setMode(MODE_QUIT); - m_modem->close(); - delete m_modem; - - m_display->close(); - delete m_display; - - if (m_mobileGPS != NULL) { - m_mobileGPS->close(); - delete m_mobileGPS; - } - - if (m_ump != NULL) { - m_ump->close(); - delete m_ump; - } - if (m_dmrLookup != NULL) m_dmrLookup->stop(); if (m_nxdnLookup != NULL) m_nxdnLookup->stop(); + LogInfo("Closing network connections"); + if (m_dstarNetwork != NULL) { m_dstarNetwork->close(); delete m_dstarNetwork; } if (m_dmrNetwork != NULL) { - m_dmrNetwork->close(); + m_dmrNetwork->close(true); delete m_dmrNetwork; } @@ -1041,31 +1344,70 @@ int CMMDVMHost::run() delete m_nxdnNetwork; } + if (m_m17Network != NULL) { + m_m17Network->close(); + delete m_m17Network; + } + if (m_pocsagNetwork != NULL) { m_pocsagNetwork->close(); delete m_pocsagNetwork; } + if (m_fmNetwork != NULL) { + m_fmNetwork->close(); + delete m_fmNetwork; + } + + if (m_ax25Network != NULL) { + m_ax25Network->close(); + delete m_ax25Network; + } + if (transparentSocket != NULL) { transparentSocket->close(); delete transparentSocket; } - delete dstar; - delete dmr; - delete ysf; - delete p25; - delete nxdn; - delete pocsag; + if (m_remoteControl != NULL) { + m_remoteControl->close(); + delete m_remoteControl; + } + + LogInfo("Stopping protocol handlers"); + + delete m_dstar; + delete m_dmr; + delete m_ysf; + delete m_p25; + delete m_nxdn; + delete m_m17; + delete m_pocsag; + delete m_fm; + delete m_ax25; + + LogInfo("MMDVMHost-%s has stopped", VERSION); + + m_modem->close(); + delete m_modem; + + m_display->close(); + delete m_display; return 0; } bool CMMDVMHost::createModem() { - std::string port = m_conf.getModemPort(); - std::string protocol = m_conf.getModemProtocol(); - unsigned int address = m_conf.getModemAddress(); + std::string protocol = m_conf.getModemProtocol(); + std::string uartPort = m_conf.getModemUARTPort(); + unsigned int uartSpeed = m_conf.getModemUARTSpeed(); + std::string i2cPort = m_conf.getModemI2CPort(); + unsigned int i2cAddress = m_conf.getModemI2CAddress(); + std::string modemAddress = m_conf.getModemModemAddress(); + unsigned short modemPort = m_conf.getModemModemPort(); + std::string localAddress = m_conf.getModemLocalAddress(); + unsigned short localPort = m_conf.getModemLocalPort(); bool rxInvert = m_conf.getModemRXInvert(); bool txInvert = m_conf.getModemTXInvert(); bool pttInvert = m_conf.getModemPTTInvert(); @@ -1078,12 +1420,18 @@ bool CMMDVMHost::createModem() float ysfTXLevel = m_conf.getModemYSFTXLevel(); float p25TXLevel = m_conf.getModemP25TXLevel(); float nxdnTXLevel = m_conf.getModemNXDNTXLevel(); + float m17TXLevel = m_conf.getModemM17TXLevel(); float pocsagTXLevel = m_conf.getModemPOCSAGTXLevel(); + float fmTXLevel = m_conf.getModemFMTXLevel(); + float ax25TXLevel = m_conf.getModemAX25TXLevel(); bool trace = m_conf.getModemTrace(); bool debug = m_conf.getModemDebug(); unsigned int colorCode = m_conf.getDMRColorCode(); bool lowDeviation = m_conf.getFusionLowDeviation(); - unsigned int txHang = m_conf.getFusionTXHang(); + unsigned int ysfTXHang = m_conf.getFusionTXHang(); + unsigned int p25TXHang = m_conf.getP25TXHang(); + unsigned int nxdnTXHang = m_conf.getNXDNTXHang(); + unsigned int m17TXHang = m_conf.getM17TXHang(); unsigned int rxFrequency = m_conf.getRXFrequency(); unsigned int txFrequency = m_conf.getTXFrequency(); unsigned int pocsagFrequency = m_conf.getPOCSAGFrequency(); @@ -1092,12 +1440,31 @@ bool CMMDVMHost::createModem() int rxDCOffset = m_conf.getModemRXDCOffset(); int txDCOffset = m_conf.getModemTXDCOffset(); float rfLevel = m_conf.getModemRFLevel(); + int rxTwist = m_conf.getAX25RXTwist(); + unsigned int ax25TXDelay = m_conf.getAX25TXDelay(); + unsigned int ax25SlotTime = m_conf.getAX25SlotTime(); + unsigned int ax25PPersist = m_conf.getAX25PPersist(); + bool useCOSAsLockout = m_conf.getModemUseCOSAsLockout(); LogInfo("Modem Parameters"); - LogInfo(" Port: %s", port.c_str()); LogInfo(" Protocol: %s", protocol.c_str()); - if (protocol == "i2c") - LogInfo(" i2c Address: %02X", address); + + if (protocol == "uart") { + LogInfo(" UART Port: %s", uartPort.c_str()); + LogInfo(" UART Speed: %u", uartSpeed); + } else if (protocol == "udp") { + LogInfo(" Modem Address: %s", modemAddress.c_str()); + LogInfo(" Modem Port: %hu", modemPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); + } +#if defined(__linux__) + else if (protocol == "i2c") { + LogInfo(" I2C Port: %s", i2cPort.c_str()); + LogInfo(" I2C Address: %02X", i2cAddress); + } +#endif + LogInfo(" RX Invert: %s", rxInvert ? "yes" : "no"); LogInfo(" TX Invert: %s", txInvert ? "yes" : "no"); LogInfo(" PTT Invert: %s", pttInvert ? "yes" : "no"); @@ -1115,17 +1482,128 @@ bool CMMDVMHost::createModem() LogInfo(" YSF TX Level: %.1f%%", ysfTXLevel); LogInfo(" P25 TX Level: %.1f%%", p25TXLevel); LogInfo(" NXDN TX Level: %.1f%%", nxdnTXLevel); + LogInfo(" M17 TX Level: %.1f%%", m17TXLevel); LogInfo(" POCSAG TX Level: %.1f%%", pocsagTXLevel); - LogInfo(" RX Frequency: %uHz (%uHz)", rxFrequency, rxFrequency + rxOffset); + LogInfo(" FM TX Level: %.1f%%", fmTXLevel); + LogInfo(" AX.25 TX Level: %.1f%%", ax25TXLevel); LogInfo(" TX Frequency: %uHz (%uHz)", txFrequency, txFrequency + txOffset); + LogInfo(" Use COS as Lockout: %s", useCOSAsLockout ? "yes" : "no"); + + m_modem = new CModem(m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, useCOSAsLockout, trace, debug); + + IModemPort* port = NULL; + if (protocol == "uart") + port = new CUARTController(uartPort, uartSpeed, true); + else if (protocol == "udp") + port = new CUDPController(modemAddress, modemPort, localAddress, localPort); +#if defined(__linux__) + else if (protocol == "i2c") + port = new CI2CController(i2cPort, i2cAddress); +#endif + else if (protocol == "null") + port = new CNullController; + else + return false; - m_modem = CModem::createModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, trace, debug); - m_modem->setSerialParams(protocol,address); - m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_pocsagEnabled); - m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel); + m_modem->setPort(port); + m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_m17Enabled, m_pocsagEnabled, m_fmEnabled, m_ax25Enabled); + m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, m17TXLevel, pocsagTXLevel, fmTXLevel, ax25TXLevel); m_modem->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset, txDCOffset, rxDCOffset, rfLevel, pocsagFrequency); m_modem->setDMRParams(colorCode); - m_modem->setYSFParams(lowDeviation, txHang); + m_modem->setYSFParams(lowDeviation, ysfTXHang); + m_modem->setP25Params(p25TXHang); + m_modem->setNXDNParams(nxdnTXHang); + m_modem->setM17Params(m17TXHang); + m_modem->setAX25Params(rxTwist, ax25TXDelay, ax25SlotTime, ax25PPersist); + + if (m_fmEnabled) { + std::string callsign = m_conf.getFMCallsign(); + unsigned int callsignSpeed = m_conf.getFMCallsignSpeed(); + unsigned int callsignFrequency = m_conf.getFMCallsignFrequency(); + unsigned int callsignTime = m_conf.getFMCallsignTime(); + unsigned int callsignHoldoff = m_conf.getFMCallsignHoldoff(); + float callsignHighLevel = m_conf.getFMCallsignHighLevel(); + float callsignLowLevel = m_conf.getFMCallsignLowLevel(); + bool callsignAtStart = m_conf.getFMCallsignAtStart(); + bool callsignAtEnd = m_conf.getFMCallsignAtEnd(); + bool callsignAtLatch = m_conf.getFMCallsignAtLatch(); + std::string rfAck = m_conf.getFMRFAck(); + unsigned int ackSpeed = m_conf.getFMAckSpeed(); + unsigned int ackFrequency = m_conf.getFMAckFrequency(); + unsigned int ackMinTime = m_conf.getFMAckMinTime(); + unsigned int ackDelay = m_conf.getFMAckDelay(); + float ackLevel = m_conf.getFMAckLevel(); + unsigned int timeout = m_conf.getFMTimeout(); + float timeoutLevel = m_conf.getFMTimeoutLevel(); + float ctcssFrequency = m_conf.getFMCTCSSFrequency(); + unsigned int ctcssHighThreshold = m_conf.getFMCTCSSHighThreshold(); + unsigned int ctcssLowThreshold = m_conf.getFMCTCSSLowThreshold(); + float ctcssLevel = m_conf.getFMCTCSSLevel(); + unsigned int kerchunkTime = m_conf.getFMKerchunkTime(); + unsigned int hangTime = m_conf.getFMHangTime(); + unsigned int accessMode = m_conf.getFMAccessMode(); + bool linkMode = m_conf.getFMLinkMode(); + bool cosInvert = m_conf.getFMCOSInvert(); + bool noiseSquelch = m_conf.getFMNoiseSquelch(); + unsigned int squelchHighThreshold = m_conf.getFMSquelchHighThreshold(); + unsigned int squelchLowThreshold = m_conf.getFMSquelchLowThreshold(); + unsigned int rfAudioBoost = m_conf.getFMRFAudioBoost(); + float maxDevLevel = m_conf.getFMMaxDevLevel(); + unsigned int modeHangTime = m_conf.getFMModeHang(); + + LogInfo("FM Parameters"); + LogInfo(" Callsign: %s", callsign.c_str()); + LogInfo(" Callsign Speed: %uWPM", callsignSpeed); + LogInfo(" Callsign Frequency: %uHz", callsignFrequency); + LogInfo(" Callsign Time: %umins", callsignTime); + LogInfo(" Callsign Holdoff: 1/%u", callsignHoldoff); + LogInfo(" Callsign High Level: %.1f%%", callsignHighLevel); + LogInfo(" Callsign Low Level: %.1f%%", callsignLowLevel); + LogInfo(" Callsign At Start: %s", callsignAtStart ? "yes" : "no"); + LogInfo(" Callsign At End: %s", callsignAtEnd ? "yes" : "no"); + LogInfo(" Callsign At Latch: %s", callsignAtLatch ? "yes" : "no"); + LogInfo(" RF Ack: %s", rfAck.c_str()); + LogInfo(" Ack Speed: %uWPM", ackSpeed); + LogInfo(" Ack Frequency: %uHz", ackFrequency); + LogInfo(" Ack Min Time: %us", ackMinTime); + LogInfo(" Ack Delay: %ums", ackDelay); + LogInfo(" Ack Level: %.1f%%", ackLevel); + LogInfo(" Timeout: %us", timeout); + LogInfo(" Timeout Level: %.1f%%", timeoutLevel); + LogInfo(" CTCSS Frequency: %.1fHz", ctcssFrequency); + LogInfo(" CTCSS High Threshold: %u", ctcssHighThreshold); + LogInfo(" CTCSS Low Threshold: %u", ctcssLowThreshold); + LogInfo(" CTCSS Level: %.1f%%", ctcssLevel); + LogInfo(" Kerchunk Time: %us", kerchunkTime); + LogInfo(" Hang Time: %us", hangTime); + LogInfo(" Access Mode: %u", accessMode); + LogInfo(" Link Mode: %s", linkMode ? "yes" : "no"); + LogInfo(" COS Invert: %s", cosInvert ? "yes" : "no"); + + LogInfo(" Noise Squelch: %s", noiseSquelch ? "yes" : "no"); + if (noiseSquelch) { + LogInfo(" Squelch High Threshold: %u", squelchHighThreshold); + LogInfo(" Squelch Low Threshold: %u", squelchLowThreshold); + } + + LogInfo(" RF Audio Boost: x%u", rfAudioBoost); + LogInfo(" Max. Deviation Level: %.1f%%", maxDevLevel); + LogInfo(" Mode Hang: %us", modeHangTime); + + m_modem->setFMCallsignParams(callsign, callsignSpeed, callsignFrequency, callsignTime, callsignHoldoff, callsignHighLevel, callsignLowLevel, callsignAtStart, callsignAtEnd, callsignAtLatch); + m_modem->setFMAckParams(rfAck, ackSpeed, ackFrequency, ackMinTime, ackDelay, ackLevel); + m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssHighThreshold, ctcssLowThreshold, ctcssLevel, kerchunkTime, hangTime, accessMode, linkMode, cosInvert, noiseSquelch, squelchHighThreshold, squelchLowThreshold, rfAudioBoost, maxDevLevel); + + if (m_conf.getFMNetworkEnabled()) { + std::string extAck = m_conf.getFMExtAck(); + unsigned int extAudioBoost = m_conf.getFMExtAudioBoost(); + + LogInfo(" Ext. Ack: %s", extAck.c_str()); + LogInfo(" Ext. Audio Boost: x%u", extAudioBoost); + + m_modem->setFMExtParams(extAck, extAudioBoost); + } + } bool ret = m_modem->open(); if (!ret) { @@ -1140,18 +1618,20 @@ bool CMMDVMHost::createModem() bool CMMDVMHost::createDStarNetwork() { std::string gatewayAddress = m_conf.getDStarGatewayAddress(); - unsigned int gatewayPort = m_conf.getDStarGatewayPort(); - unsigned int localPort = m_conf.getDStarLocalPort(); + unsigned short gatewayPort = m_conf.getDStarGatewayPort(); + std::string localAddress = m_conf.getDStarLocalAddress(); + unsigned short localPort = m_conf.getDStarLocalPort(); bool debug = m_conf.getDStarNetworkDebug(); m_dstarNetModeHang = m_conf.getDStarNetworkModeHang(); LogInfo("D-Star Network Parameters"); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); - LogInfo(" Gateway Port: %u", gatewayPort); - LogInfo(" Local Port: %u", localPort); + LogInfo(" Gateway Port: %hu", gatewayPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Mode Hang: %us", m_dstarNetModeHang); - m_dstarNetwork = new CDStarNetwork(gatewayAddress, gatewayPort, localPort, m_duplex, VERSION, debug); + m_dstarNetwork = new CDStarNetwork(gatewayAddress, gatewayPort, localAddress, localPort, m_duplex, VERSION, debug); bool ret = m_dstarNetwork->open(); if (!ret) { @@ -1167,9 +1647,10 @@ bool CMMDVMHost::createDStarNetwork() bool CMMDVMHost::createDMRNetwork() { - std::string address = m_conf.getDMRNetworkAddress(); - unsigned int port = m_conf.getDMRNetworkPort(); - unsigned int local = m_conf.getDMRNetworkLocal(); + std::string remoteAddress = m_conf.getDMRNetworkRemoteAddress(); + unsigned short remotePort = m_conf.getDMRNetworkRemotePort(); + std::string localAddress = m_conf.getDMRNetworkLocalAddress(); + unsigned short localPort = m_conf.getDMRNetworkLocalPort(); unsigned int id = m_conf.getDMRId(); std::string password = m_conf.getDMRNetworkPassword(); bool debug = m_conf.getDMRNetworkDebug(); @@ -1178,51 +1659,62 @@ bool CMMDVMHost::createDMRNetwork() bool slot2 = m_conf.getDMRNetworkSlot2(); HW_TYPE hwType = m_modem->getHWType(); m_dmrNetModeHang = m_conf.getDMRNetworkModeHang(); + std::string options = m_conf.getDMRNetworkOptions(); + + std::string type = m_conf.getDMRNetworkType(); LogInfo("DMR Network Parameters"); - LogInfo(" Address: %s", address.c_str()); - LogInfo(" Port: %u", port); - if (local > 0U) - LogInfo(" Local: %u", local); - else - LogInfo(" Local: random"); + LogInfo(" Type: %s", type.c_str()); + LogInfo(" Remote Address: %s", remoteAddress.c_str()); + LogInfo(" Remote Port: %hu", remotePort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Jitter: %ums", jitter); LogInfo(" Slot 1: %s", slot1 ? "enabled" : "disabled"); LogInfo(" Slot 2: %s", slot2 ? "enabled" : "disabled"); LogInfo(" Mode Hang: %us", m_dmrNetModeHang); - m_dmrNetwork = new CDMRNetwork(address, port, local, id, password, m_duplex, VERSION, debug, slot1, slot2, hwType); - - std::string options = m_conf.getDMRNetworkOptions(); - if (!options.empty()) { - LogInfo(" Options: %s", options.c_str()); - m_dmrNetwork->setOptions(options); - } + if (type == "Direct") + m_dmrNetwork = new CDMRDirectNetwork(remoteAddress, remotePort, localAddress, localPort, id, password, m_duplex, VERSION, slot1, slot2, hwType, debug); + else + m_dmrNetwork = new CDMRGatewayNetwork(remoteAddress, remotePort, localAddress, localPort, id, m_duplex, VERSION, slot1, slot2, hwType, debug); unsigned int rxFrequency = m_conf.getRXFrequency(); unsigned int txFrequency = m_conf.getTXFrequency(); unsigned int power = m_conf.getPower(); unsigned int colorCode = m_conf.getDMRColorCode(); - float latitude = m_conf.getLatitude(); - float longitude = m_conf.getLongitude(); - int height = m_conf.getHeight(); - std::string location = m_conf.getLocation(); - std::string description = m_conf.getDescription(); - std::string url = m_conf.getURL(); LogInfo("Info Parameters"); LogInfo(" Callsign: %s", m_callsign.c_str()); LogInfo(" RX Frequency: %uHz", rxFrequency); LogInfo(" TX Frequency: %uHz", txFrequency); LogInfo(" Power: %uW", power); - LogInfo(" Latitude: %fdeg N", latitude); - LogInfo(" Longitude: %fdeg E", longitude); - LogInfo(" Height: %um", height); - LogInfo(" Location: \"%s\"", location.c_str()); - LogInfo(" Description: \"%s\"", description.c_str()); - LogInfo(" URL: \"%s\"", url.c_str()); - m_dmrNetwork->setConfig(m_callsign, rxFrequency, txFrequency, power, colorCode, latitude, longitude, height, location, description, url); + if (type == "Direct") { + float latitude = m_conf.getLatitude(); + float longitude = m_conf.getLongitude(); + int height = m_conf.getHeight(); + std::string location = m_conf.getLocation(); + std::string description = m_conf.getDescription(); + std::string url = m_conf.getURL(); + + LogInfo(" Latitude: %fdeg N", latitude); + LogInfo(" Longitude: %fdeg E", longitude); + LogInfo(" Height: %um", height); + LogInfo(" Location: \"%s\"", location.c_str()); + LogInfo(" Description: \"%s\"", description.c_str()); + LogInfo(" URL: \"%s\"", url.c_str()); + + m_dmrNetwork->setConfig(m_callsign, rxFrequency, txFrequency, power, colorCode, latitude, longitude, height, location, description, url); + } else { + m_dmrNetwork->setConfig(m_callsign, rxFrequency, txFrequency, power, colorCode, 0.0F, 0.0F, 0, "", "", ""); + } + + if (!options.empty()) { + LogInfo(" Options: %s", options.c_str()); + + m_dmrNetwork->setOptions(options); + } bool ret = m_dmrNetwork->open(); if (!ret) { @@ -1231,24 +1723,6 @@ bool CMMDVMHost::createDMRNetwork() return false; } - bool mobileGPSEnabled = m_conf.getMobileGPSEnabled(); - if (mobileGPSEnabled) { - std::string mobileGPSAddress = m_conf.getMobileGPSAddress(); - unsigned int mobileGPSPort = m_conf.getMobileGPSPort(); - - LogInfo("Mobile GPS Parameters"); - LogInfo(" Address: %s", mobileGPSAddress.c_str()); - LogInfo(" Port; %u", mobileGPSPort); - - m_mobileGPS = new CMobileGPS(address, port, m_dmrNetwork); - - ret = m_mobileGPS->open(); - if (!ret) { - delete m_mobileGPS; - m_mobileGPS = NULL; - } - } - m_dmrNetwork->enable(true); return true; @@ -1256,21 +1730,21 @@ bool CMMDVMHost::createDMRNetwork() bool CMMDVMHost::createYSFNetwork() { - std::string myAddress = m_conf.getFusionNetworkMyAddress(); - unsigned int myPort = m_conf.getFusionNetworkMyPort(); + std::string localAddress = m_conf.getFusionNetworkLocalAddress(); + unsigned short localPort = m_conf.getFusionNetworkLocalPort(); std::string gatewayAddress = m_conf.getFusionNetworkGatewayAddress(); - unsigned int gatewayPort = m_conf.getFusionNetworkGatewayPort(); - m_ysfNetModeHang = m_conf.getFusionNetworkModeHang(); - bool debug = m_conf.getFusionNetworkDebug(); + unsigned short gatewayPort = m_conf.getFusionNetworkGatewayPort(); + m_ysfNetModeHang = m_conf.getFusionNetworkModeHang(); + bool debug = m_conf.getFusionNetworkDebug(); LogInfo("System Fusion Network Parameters"); - LogInfo(" Local Address: %s", myAddress.c_str()); - LogInfo(" Local Port: %u", myPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); - LogInfo(" Gateway Port: %u", gatewayPort); + LogInfo(" Gateway Port: %hu", gatewayPort); LogInfo(" Mode Hang: %us", m_ysfNetModeHang); - m_ysfNetwork = new CYSFNetwork(myAddress, myPort, gatewayAddress, gatewayPort, m_callsign, debug); + m_ysfNetwork = new CYSFNetwork(localAddress, localPort, gatewayAddress, gatewayPort, m_callsign, debug); bool ret = m_ysfNetwork->open(); if (!ret) { @@ -1287,18 +1761,20 @@ bool CMMDVMHost::createYSFNetwork() bool CMMDVMHost::createP25Network() { std::string gatewayAddress = m_conf.getP25GatewayAddress(); - unsigned int gatewayPort = m_conf.getP25GatewayPort(); - unsigned int localPort = m_conf.getP25LocalPort(); + unsigned short gatewayPort = m_conf.getP25GatewayPort(); + std::string localAddress = m_conf.getP25LocalAddress(); + unsigned short localPort = m_conf.getP25LocalPort(); m_p25NetModeHang = m_conf.getP25NetworkModeHang(); bool debug = m_conf.getP25NetworkDebug(); LogInfo("P25 Network Parameters"); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); - LogInfo(" Gateway Port: %u", gatewayPort); - LogInfo(" Local Port: %u", localPort); + LogInfo(" Gateway Port: %hu", gatewayPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Mode Hang: %us", m_p25NetModeHang); - m_p25Network = new CP25Network(gatewayAddress, gatewayPort, localPort, debug); + m_p25Network = new CP25Network(gatewayAddress, gatewayPort, localAddress, localPort, debug); bool ret = m_p25Network->open(); if (!ret) { @@ -1314,21 +1790,26 @@ bool CMMDVMHost::createP25Network() bool CMMDVMHost::createNXDNNetwork() { + std::string protocol = m_conf.getNXDNNetworkProtocol(); std::string gatewayAddress = m_conf.getNXDNGatewayAddress(); - unsigned int gatewayPort = m_conf.getNXDNGatewayPort(); + unsigned short gatewayPort = m_conf.getNXDNGatewayPort(); std::string localAddress = m_conf.getNXDNLocalAddress(); - unsigned int localPort = m_conf.getNXDNLocalPort(); + unsigned short localPort = m_conf.getNXDNLocalPort(); m_nxdnNetModeHang = m_conf.getNXDNNetworkModeHang(); bool debug = m_conf.getNXDNNetworkDebug(); LogInfo("NXDN Network Parameters"); + LogInfo(" Protocol: %s", protocol.c_str()); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); - LogInfo(" Gateway Port: %u", gatewayPort); + LogInfo(" Gateway Port: %hu", gatewayPort); LogInfo(" Local Address: %s", localAddress.c_str()); - LogInfo(" Local Port: %u", localPort); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Mode Hang: %us", m_nxdnNetModeHang); - m_nxdnNetwork = new CNXDNNetwork(localAddress, localPort, gatewayAddress, gatewayPort, debug); + if (protocol == "Kenwood") + m_nxdnNetwork = new CNXDNKenwoodNetwork(localAddress, localPort, gatewayAddress, gatewayPort, debug); + else + m_nxdnNetwork = new CNXDNIcomNetwork(localAddress, localPort, gatewayAddress, gatewayPort, debug); bool ret = m_nxdnNetwork->open(); if (!ret) { @@ -1342,20 +1823,49 @@ bool CMMDVMHost::createNXDNNetwork() return true; } +bool CMMDVMHost::createM17Network() +{ + std::string gatewayAddress = m_conf.getM17GatewayAddress(); + unsigned short gatewayPort = m_conf.getM17GatewayPort(); + std::string localAddress = m_conf.getM17LocalAddress(); + unsigned short localPort = m_conf.getM17LocalPort(); + m_m17NetModeHang = m_conf.getM17NetworkModeHang(); + bool debug = m_conf.getM17NetworkDebug(); + + LogInfo("M17 Network Parameters"); + LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); + LogInfo(" Gateway Port: %hu", gatewayPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); + LogInfo(" Mode Hang: %us", m_m17NetModeHang); + + m_m17Network = new CM17Network(localAddress, localPort, gatewayAddress, gatewayPort, debug); + bool ret = m_m17Network->open(); + if (!ret) { + delete m_m17Network; + m_m17Network = NULL; + return false; + } + + m_m17Network->enable(true); + + return true; +} + bool CMMDVMHost::createPOCSAGNetwork() { std::string gatewayAddress = m_conf.getPOCSAGGatewayAddress(); - unsigned int gatewayPort = m_conf.getPOCSAGGatewayPort(); + unsigned short gatewayPort = m_conf.getPOCSAGGatewayPort(); std::string localAddress = m_conf.getPOCSAGLocalAddress(); - unsigned int localPort = m_conf.getPOCSAGLocalPort(); + unsigned short localPort = m_conf.getPOCSAGLocalPort(); m_pocsagNetModeHang = m_conf.getPOCSAGNetworkModeHang(); bool debug = m_conf.getPOCSAGNetworkDebug(); LogInfo("POCSAG Network Parameters"); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); - LogInfo(" Gateway Port: %u", gatewayPort); + LogInfo(" Gateway Port: %hu", gatewayPort); LogInfo(" Local Address: %s", localAddress.c_str()); - LogInfo(" Local Port: %u", localPort); + LogInfo(" Local Port: %hu", localPort); LogInfo(" Mode Hang: %us", m_pocsagNetModeHang); m_pocsagNetwork = new CPOCSAGNetwork(localAddress, localPort, gatewayAddress, gatewayPort, debug); @@ -1372,6 +1882,77 @@ bool CMMDVMHost::createPOCSAGNetwork() return true; } +bool CMMDVMHost::createFMNetwork() +{ + std::string callsign = m_conf.getFMCallsign(); + std::string protocol = m_conf.getFMNetworkProtocol(); + unsigned int sampleRate = m_conf.getFMNetworkSampleRate(); + std::string squelchFile = m_conf.getFMNetworkSquelchFile(); + std::string gatewayAddress = m_conf.getFMGatewayAddress(); + unsigned short gatewayPort = m_conf.getFMGatewayPort(); + std::string localAddress = m_conf.getFMLocalAddress(); + unsigned short localPort = m_conf.getFMLocalPort(); + bool preEmphasis = m_conf.getFMPreEmphasis(); + bool deEmphasis = m_conf.getFMDeEmphasis(); + float txAudioGain = m_conf.getFMTXAudioGain(); + float rxAudioGain = m_conf.getFMRXAudioGain(); + m_fmNetModeHang = m_conf.getFMNetworkModeHang(); + bool debug = m_conf.getFMNetworkDebug(); + + LogInfo("FM Network Parameters"); + LogInfo(" Protocol: %s", protocol.c_str()); + if (protocol == "RAW") { + LogInfo(" Sample Rate: %u", sampleRate); + LogInfo(" Squelch File: %s", squelchFile.empty() ? "(none)" : squelchFile.c_str()); + } + LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); + LogInfo(" Gateway Port: %hu", gatewayPort); + LogInfo(" Local Address: %s", localAddress.c_str()); + LogInfo(" Local Port: %hu", localPort); + LogInfo(" Pre-Emphasis: %s", preEmphasis ? "yes" : "no"); + LogInfo(" De-Emphasis: %s", deEmphasis ? "yes" : "no"); + LogInfo(" TX Audio Gain: %.2f", txAudioGain); + LogInfo(" RX Audio Gain: %.2f", rxAudioGain); + LogInfo(" Mode Hang: %us", m_fmNetModeHang); + + m_fmNetwork = new CFMNetwork(callsign, protocol, localAddress, localPort, gatewayAddress, gatewayPort, sampleRate, squelchFile, debug); + + bool ret = m_fmNetwork->open(); + if (!ret) { + delete m_fmNetwork; + m_fmNetwork = NULL; + return false; + } + + m_fmNetwork->enable(true); + + return true; +} + +bool CMMDVMHost::createAX25Network() +{ + std::string port = m_conf.getAX25NetworkPort(); + unsigned int speed = m_conf.getAX25NetworkSpeed(); + bool debug = m_conf.getAX25NetworkDebug(); + + LogInfo("AX.25 Network Parameters"); + LogInfo(" Port: %s", port.c_str()); + LogInfo(" Speed: %u", speed); + + m_ax25Network = new CAX25Network(port, speed, debug); + + bool ret = m_ax25Network->open(); + if (!ret) { + delete m_ax25Network; + m_ax25Network = NULL; + return false; + } + + m_ax25Network->enable(true); + + return true; +} + void CMMDVMHost::readParams() { m_dstarEnabled = m_conf.getDStarEnabled(); @@ -1379,7 +1960,10 @@ void CMMDVMHost::readParams() m_ysfEnabled = m_conf.getFusionEnabled(); m_p25Enabled = m_conf.getP25Enabled(); m_nxdnEnabled = m_conf.getNXDNEnabled(); + m_m17Enabled = m_conf.getM17Enabled(); m_pocsagEnabled = m_conf.getPOCSAGEnabled(); + m_fmEnabled = m_conf.getFMEnabled(); + m_ax25Enabled = m_conf.getAX25Enabled(); m_duplex = m_conf.getDuplex(); m_callsign = m_conf.getCallsign(); m_id = m_conf.getId(); @@ -1395,7 +1979,10 @@ void CMMDVMHost::readParams() LogInfo(" YSF: %s", m_ysfEnabled ? "enabled" : "disabled"); LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled"); LogInfo(" NXDN: %s", m_nxdnEnabled ? "enabled" : "disabled"); + LogInfo(" M17: %s", m_m17Enabled ? "enabled" : "disabled"); LogInfo(" POCSAG: %s", m_pocsagEnabled ? "enabled" : "disabled"); + LogInfo(" FM: %s", m_fmEnabled ? "enabled" : "disabled"); + LogInfo(" AX.25: %s", m_ax25Enabled ? "enabled" : "disabled"); } void CMMDVMHost::setMode(unsigned char mode) @@ -1405,6 +1992,8 @@ void CMMDVMHost::setMode(unsigned char mode) switch (mode) { case MODE_DSTAR: + if (m_dstarNetwork != NULL) + m_dstarNetwork->enable(true); if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); if (m_ysfNetwork != NULL) @@ -1413,31 +2002,78 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(false); if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(true); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); m_modem->setMode(MODE_DSTAR); - if (m_ump != NULL) - m_ump->setMode(MODE_DSTAR); m_mode = MODE_DSTAR; m_modeTimer.start(); m_cwIdTimer.stop(); createLockFile("D-Star"); + LogMessage("Mode set to D-Star"); break; case MODE_DMR: if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); + if (m_dmrNetwork != NULL) + m_dmrNetwork->enable(true); if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); if (m_p25Network != NULL) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(false); if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(true); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); m_modem->setMode(MODE_DMR); - if (m_ump != NULL) - m_ump->setMode(MODE_DMR); if (m_duplex) { m_modem->writeDMRStart(true); m_dmrTXTimer.start(); @@ -1446,6 +2082,7 @@ void CMMDVMHost::setMode(unsigned char mode) m_modeTimer.start(); m_cwIdTimer.stop(); createLockFile("DMR"); + LogMessage("Mode set to DMR"); break; case MODE_YSF: @@ -1453,19 +2090,44 @@ void CMMDVMHost::setMode(unsigned char mode) m_dstarNetwork->enable(false); if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); + if (m_ysfNetwork != NULL) + m_ysfNetwork->enable(true); if (m_p25Network != NULL) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(false); if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(true); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); m_modem->setMode(MODE_YSF); - if (m_ump != NULL) - m_ump->setMode(MODE_YSF); m_mode = MODE_YSF; m_modeTimer.start(); m_cwIdTimer.stop(); createLockFile("System Fusion"); + LogMessage("Mode set to System Fusion"); break; case MODE_P25: @@ -1475,17 +2137,42 @@ void CMMDVMHost::setMode(unsigned char mode) m_dmrNetwork->enable(false); if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); + if (m_p25Network != NULL) + m_p25Network->enable(true); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(false); if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(true); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); m_modem->setMode(MODE_P25); - if (m_ump != NULL) - m_ump->setMode(MODE_P25); m_mode = MODE_P25; m_modeTimer.start(); m_cwIdTimer.stop(); createLockFile("P25"); + LogMessage("Mode set to P25"); break; case MODE_NXDN: @@ -1497,15 +2184,85 @@ void CMMDVMHost::setMode(unsigned char mode) m_ysfNetwork->enable(false); if (m_p25Network != NULL) m_p25Network->enable(false); + if (m_nxdnNetwork != NULL) + m_nxdnNetwork->enable(true); + if (m_m17Network != NULL) + m_m17Network->enable(false); if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(true); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); m_modem->setMode(MODE_NXDN); - if (m_ump != NULL) - m_ump->setMode(MODE_NXDN); m_mode = MODE_NXDN; m_modeTimer.start(); m_cwIdTimer.stop(); createLockFile("NXDN"); + LogMessage("Mode set to NXDN"); + break; + + case MODE_M17: + if (m_dstarNetwork != NULL) + m_dstarNetwork->enable(false); + if (m_dmrNetwork != NULL) + m_dmrNetwork->enable(false); + if (m_ysfNetwork != NULL) + m_ysfNetwork->enable(false); + if (m_p25Network != NULL) + m_p25Network->enable(false); + if (m_nxdnNetwork != NULL) + m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(true); + if (m_pocsagNetwork != NULL) + m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(true); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); + m_modem->setMode(MODE_M17); + m_mode = MODE_M17; + m_modeTimer.start(); + m_cwIdTimer.stop(); + createLockFile("M17"); + LogMessage("Mode set to M17"); break; case MODE_POCSAG: @@ -1519,17 +2276,91 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(false); + if (m_pocsagNetwork != NULL) + m_pocsagNetwork->enable(true); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(true); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); m_modem->setMode(MODE_POCSAG); - if (m_ump != NULL) - m_ump->setMode(MODE_POCSAG); m_mode = MODE_POCSAG; m_modeTimer.start(); m_cwIdTimer.stop(); createLockFile("POCSAG"); + LogMessage("Mode set to POCSAG"); + break; + + case MODE_FM: + if (m_dstarNetwork != NULL) + m_dstarNetwork->enable(false); + if (m_dmrNetwork != NULL) + m_dmrNetwork->enable(false); + if (m_ysfNetwork != NULL) + m_ysfNetwork->enable(false); + if (m_p25Network != NULL) + m_p25Network->enable(false); + if (m_nxdnNetwork != NULL) + m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(false); + if (m_pocsagNetwork != NULL) + m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(true); + if (m_ax25Network != NULL) + m_ax25Network->enable(true); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(true); + if (m_ax25 != NULL) + m_ax25->enable(true); + if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) { + m_modem->writeDMRStart(false); + m_dmrTXTimer.stop(); + } + m_modem->setMode(MODE_FM); + m_display->setFM(); + m_mode = MODE_FM; + m_modeTimer.start(); + m_cwIdTimer.stop(); + createLockFile("FM"); + LogMessage("Mode set to FM"); break; case MODE_LOCKOUT: - LogMessage("Mode set to Lockout"); if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); if (m_dmrNetwork != NULL) @@ -1540,20 +2371,43 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(false); if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) { m_modem->writeDMRStart(false); m_dmrTXTimer.stop(); } m_modem->setMode(MODE_IDLE); - if (m_ump != NULL) - m_ump->setMode(MODE_IDLE); m_display->setLockout(); m_mode = MODE_LOCKOUT; m_modeTimer.stop(); m_cwIdTimer.stop(); removeLockFile(); + LogMessage("Mode set to Lockout"); break; case MODE_ERROR: @@ -1568,19 +2422,42 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); + if (m_m17Network != NULL) + m_m17Network->enable(false); if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(false); + if (m_ax25Network != NULL) + m_ax25Network->enable(false); + if (m_dstar != NULL) + m_dstar->enable(false); + if (m_dmr != NULL) + m_dmr->enable(false); + if (m_ysf != NULL) + m_ysf->enable(false); + if (m_p25 != NULL) + m_p25->enable(false); + if (m_nxdn != NULL) + m_nxdn->enable(false); + if (m_m17 != NULL) + m_m17->enable(false); + if (m_pocsag != NULL) + m_pocsag->enable(false); + if (m_fm != NULL) + m_fm->enable(false); + if (m_ax25 != NULL) + m_ax25->enable(false); if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) { m_modem->writeDMRStart(false); m_dmrTXTimer.stop(); } - if (m_ump != NULL) - m_ump->setMode(MODE_IDLE); m_display->setError("MODEM"); m_mode = MODE_ERROR; m_modeTimer.stop(); m_cwIdTimer.stop(); removeLockFile(); + LogMessage("Mode set to Error"); break; default: @@ -1594,15 +2471,37 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(true); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(true); + if (m_m17Network != NULL) + m_m17Network->enable(true); if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(true); + if (m_fmNetwork != NULL) + m_fmNetwork->enable(true); + if (m_ax25Network != NULL) + m_ax25Network->enable(true); + if (m_dstar != NULL) + m_dstar->enable(true); + if (m_dmr != NULL) + m_dmr->enable(true); + if (m_ysf != NULL) + m_ysf->enable(true); + if (m_p25 != NULL) + m_p25->enable(true); + if (m_nxdn != NULL) + m_nxdn->enable(true); + if (m_m17 != NULL) + m_m17->enable(true); + if (m_pocsag != NULL) + m_pocsag->enable(true); + if (m_fm != NULL) + m_fm->enable(true); + if (m_ax25 != NULL) + m_ax25->enable(true); if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) { m_modem->writeDMRStart(false); m_dmrTXTimer.stop(); } m_modem->setMode(MODE_IDLE); - if (m_ump != NULL) - m_ump->setMode(MODE_IDLE); if (m_mode == MODE_ERROR) { m_modem->sendCWId(m_callsign); m_cwIdTimer.setTimeout(m_cwIdTime); @@ -1617,6 +2516,7 @@ void CMMDVMHost::setMode(unsigned char mode) m_mode = MODE_IDLE; m_modeTimer.stop(); removeLockFile(); + LogMessage("Mode set to Idle"); break; } } @@ -1638,3 +2538,271 @@ void CMMDVMHost::removeLockFile() const ::remove(m_lockFileName.c_str()); } +void CMMDVMHost::remoteControl() +{ + if (m_remoteControl == NULL) + return; + + REMOTE_COMMAND command = m_remoteControl->getCommand(); + switch (command) { + case RCD_MODE_IDLE: + m_fixedMode = false; + setMode(MODE_IDLE); + break; + case RCD_MODE_LOCKOUT: + m_fixedMode = false; + setMode(MODE_LOCKOUT); + break; + case RCD_MODE_DSTAR: + if (m_dstar != NULL) + processModeCommand(MODE_DSTAR, m_dstarRFModeHang); + break; + case RCD_MODE_DMR: + if (m_dmr != NULL) + processModeCommand(MODE_DMR, m_dmrRFModeHang); + break; + case RCD_MODE_YSF: + if (m_ysf != NULL) + processModeCommand(MODE_YSF, m_ysfRFModeHang); + break; + case RCD_MODE_P25: + if (m_p25 != NULL) + processModeCommand(MODE_P25, m_p25RFModeHang); + break; + case RCD_MODE_NXDN: + if (m_nxdn != NULL) + processModeCommand(MODE_NXDN, m_nxdnRFModeHang); + break; + case RCD_MODE_M17: + if (m_m17 != NULL) + processModeCommand(MODE_M17, m_m17RFModeHang); + break; + case RCD_MODE_FM: + if (m_fmEnabled) + processModeCommand(MODE_FM, 0); + break; + case RCD_ENABLE_DSTAR: + if (m_dstar != NULL && !m_dstarEnabled) + processEnableCommand(m_dstarEnabled, true); + if (m_dstarNetwork != NULL) + m_dstarNetwork->enable(true); + break; + case RCD_ENABLE_DMR: + if (m_dmr != NULL && !m_dmrEnabled) + processEnableCommand(m_dmrEnabled, true); + if (m_dmrNetwork != NULL) + m_dmrNetwork->enable(true); + break; + case RCD_ENABLE_YSF: + if (m_ysf != NULL && !m_ysfEnabled) + processEnableCommand(m_ysfEnabled, true); + if (m_ysfNetwork != NULL) + m_ysfNetwork->enable(true); + break; + case RCD_ENABLE_P25: + if (m_p25 != NULL && !m_p25Enabled) + processEnableCommand(m_p25Enabled, true); + if (m_p25Network != NULL) + m_p25Network->enable(true); + break; + case RCD_ENABLE_NXDN: + if (m_nxdn != NULL && !m_nxdnEnabled) + processEnableCommand(m_nxdnEnabled, true); + if (m_nxdnNetwork != NULL) + m_nxdnNetwork->enable(true); + break; + case RCD_ENABLE_M17: + if (m_m17 != NULL && !m_m17Enabled) + processEnableCommand(m_m17Enabled, true); + if (m_m17Network != NULL) + m_m17Network->enable(true); + break; + case RCD_ENABLE_FM: + if (!m_fmEnabled) + processEnableCommand(m_fmEnabled, true); + break; + case RCD_ENABLE_AX25: + if (!m_ax25Enabled) + processEnableCommand(m_ax25Enabled, true); + break; + case RCD_DISABLE_DSTAR: + if (m_dstar != NULL && m_dstarEnabled) + processEnableCommand(m_dstarEnabled, false); + if (m_dstarNetwork != NULL) + m_dstarNetwork->enable(false); + break; + case RCD_DISABLE_DMR: + if (m_dmr != NULL && m_dmrEnabled) + processEnableCommand(m_dmrEnabled, false); + if (m_dmrNetwork != NULL) + m_dmrNetwork->enable(false); + break; + case RCD_DISABLE_YSF: + if (m_ysf != NULL && m_ysfEnabled) + processEnableCommand(m_ysfEnabled, false); + if (m_ysfNetwork != NULL) + m_ysfNetwork->enable(false); + break; + case RCD_DISABLE_P25: + if (m_p25 != NULL && m_p25Enabled) + processEnableCommand(m_p25Enabled, false); + if (m_p25Network != NULL) + m_p25Network->enable(false); + break; + case RCD_DISABLE_NXDN: + if (m_nxdn != NULL && m_nxdnEnabled) + processEnableCommand(m_nxdnEnabled, false); + if (m_nxdnNetwork != NULL) + m_nxdnNetwork->enable(false); + break; + case RCD_DISABLE_M17: + if (m_m17 != NULL && m_m17Enabled) + processEnableCommand(m_m17Enabled, false); + if (m_m17Network != NULL) + m_m17Network->enable(false); + break; + case RCD_DISABLE_FM: + if (m_fmEnabled) + processEnableCommand(m_fmEnabled, false); + break; + case RCD_DISABLE_AX25: + if (m_ax25Enabled == true) + processEnableCommand(m_ax25Enabled, false); + break; + case RCD_PAGE: + if (m_pocsag != NULL) { + unsigned int ric = m_remoteControl->getArgUInt(0U); + std::string text; + for (unsigned int i = 1U; i < m_remoteControl->getArgCount(); i++) { + if (i > 1U) + text += " "; + text += m_remoteControl->getArgString(i); + } + m_pocsag->sendPage(ric, text); + } + break; + case RCD_PAGE_BCD: + if (m_pocsag != NULL) { + unsigned int ric = m_remoteControl->getArgUInt(0U); + std::string text; + for (unsigned int i = 1U; i < m_remoteControl->getArgCount(); i++) { + if (i > 1U) + text += " "; + text += m_remoteControl->getArgString(i); + } + m_pocsag->sendPageBCD(ric, text); + } + break; + case RCD_PAGE_A1: + if (m_pocsag != NULL) { + unsigned int ric = m_remoteControl->getArgUInt(0U); + m_pocsag->sendPageAlert1(ric); + } + break; + case RCD_PAGE_A2: + if (m_pocsag != NULL) { + unsigned int ric = m_remoteControl->getArgUInt(0U); + std::string text; + for (unsigned int i = 1U; i < m_remoteControl->getArgCount(); i++) { + if (i > 1U) + text += " "; + text += m_remoteControl->getArgString(i); + } + m_pocsag->sendPageAlert2(ric, text); + } + break; + case RCD_CW: + setMode(MODE_IDLE); // Force the modem to go idle so that we can send the CW text. + if (!m_modem->hasTX()) { + std::string cwtext; + for (unsigned int i = 0U; i < m_remoteControl->getArgCount(); i++) { + if (i > 0U) + cwtext += " "; + cwtext += m_remoteControl->getArgString(i); + } + m_display->writeCW(); + m_modem->sendCWId(cwtext); + } + break; + case RCD_RELOAD: + m_reload = true; + break; + default: + break; + } +} + +void CMMDVMHost::processModeCommand(unsigned char mode, unsigned int timeout) +{ + m_fixedMode = false; + m_modeTimer.setTimeout(timeout); + + if (m_remoteControl->getArgCount() > 0U) { + if (m_remoteControl->getArgString(0U) == "fixed") { + m_fixedMode = true; + } else { + unsigned int t = m_remoteControl->getArgUInt(0U); + if (t > 0U) + m_modeTimer.setTimeout(t); + } + } + + setMode(mode); +} + +void CMMDVMHost::processEnableCommand(bool& mode, bool enabled) +{ + LogDebug("Setting mode current=%s new=%s",mode ? "true" : "false",enabled ? "true" : "false"); + + mode = enabled; + + m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_m17Enabled, m_pocsagEnabled, m_fmEnabled, m_ax25Enabled); + if (!m_modem->writeConfig()) + LogError("Cannot write Config to MMDVM"); +} + +void CMMDVMHost::buildNetworkStatusString(std::string &str) +{ + str = ""; + str += std::string("dstar:") + (((m_dstarNetwork == NULL) || (m_dstarEnabled == false)) ? "n/a" : (m_dstarNetwork->isConnected() ? "conn" : "disc")); + str += std::string(" dmr:") + (((m_dmrNetwork == NULL) || (m_dmrEnabled == false)) ? "n/a" : (m_dmrNetwork->isConnected() ? "conn" : "disc")); + str += std::string(" ysf:") + (((m_ysfNetwork == NULL) || (m_ysfEnabled == false)) ? "n/a" : (m_ysfNetwork->isConnected() ? "conn" : "disc")); + str += std::string(" p25:") + (((m_p25Network == NULL) || (m_p25Enabled == false)) ? "n/a" : (m_p25Network->isConnected() ? "conn" : "disc")); + str += std::string(" nxdn:") + (((m_nxdnNetwork == NULL) || (m_nxdnEnabled == false)) ? "n/a" : (m_nxdnNetwork->isConnected() ? "conn" : "disc")); + str += std::string(" m17:") + (((m_m17Network == NULL) || (m_m17Enabled == false)) ? "n/a" : (m_m17Network->isConnected() ? "conn" : "disc")); + str += std::string(" fm:") + (m_fmEnabled ? "conn" : "n/a"); +} + +void CMMDVMHost::buildNetworkHostsString(std::string &str) +{ + str = ""; + + std::string dstarReflector; + if (m_dstarEnabled && (m_dstarNetwork != NULL)) { + unsigned char ref[DSTAR_LONG_CALLSIGN_LENGTH + 1]; + LINK_STATUS status; + + ::memset(ref, 0, sizeof(ref)); + + m_dstarNetwork->getStatus(status, &ref[0]); + switch (status) { + case LINK_STATUS::LS_LINKED_LOOPBACK: + case LINK_STATUS::LS_LINKED_DEXTRA: + case LINK_STATUS::LS_LINKED_DPLUS: + case LINK_STATUS::LS_LINKED_DCS: + case LINK_STATUS::LS_LINKED_CCS: + dstarReflector = std::string((char *)ref); + break; + + default: + break; + } + } + str += std::string("dstar:\"") + ((dstarReflector.length() == 0) ? "NONE" : dstarReflector) + "\""; + str += std::string(" dmr:\"") + ((m_dmrEnabled && (m_dmrNetwork != NULL)) ? m_conf.getDMRNetworkRemoteAddress() : "NONE") + "\""; + str += std::string(" ysf:\"") + ((m_ysfEnabled && (m_ysfNetwork != NULL)) ? m_conf.getFusionNetworkGatewayAddress() : "NONE") + "\""; + str += std::string(" p25:\"") + ((m_p25Enabled && (m_p25Network != NULL)) ? m_conf.getP25GatewayAddress() : "NONE") + "\""; + str += std::string(" nxdn:\"") + ((m_nxdnEnabled && (m_nxdnNetwork != NULL)) ? m_conf.getNXDNGatewayAddress() : "NONE") + "\""; + str += std::string(" m17:\"") + ((m_m17Enabled && (m_m17Network != NULL)) ? m_conf.getM17GatewayAddress() : "NONE") + "\""; + str += std::string(" fm:\"") + ((m_fmEnabled && (m_fmNetwork != NULL)) ? m_conf.getFMGatewayAddress() : "NONE") + "\""; +} diff --git a/MMDVMHost.h b/MMDVMHost.h index 7ebcfdd81..a97f72e50 100644 --- a/MMDVMHost.h +++ b/MMDVMHost.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,25 +19,35 @@ #if !defined(MMDVMHOST_H) #define MMDVMHOST_H +#include "RemoteControl.h" #include "POCSAGNetwork.h" +#include "POCSAGControl.h" #include "DStarNetwork.h" +#include "AX25Network.h" #include "NXDNNetwork.h" +#include "DStarControl.h" +#include "AX25Control.h" +#include "DMRControl.h" +#include "YSFControl.h" +#include "P25Control.h" +#include "NXDNControl.h" +#include "M17Control.h" #include "NXDNLookup.h" #include "YSFNetwork.h" #include "P25Network.h" #include "DMRNetwork.h" +#include "M17Network.h" +#include "FMNetwork.h" #include "DMRLookup.h" -#include "MobileGPS.h" +#include "FMControl.h" #include "Display.h" #include "Timer.h" #include "Modem.h" #include "Conf.h" -#include "UMP.h" #include - class CMMDVMHost { public: @@ -46,29 +56,47 @@ class CMMDVMHost int run(); + void buildNetworkStatusString(std::string &str); + void buildNetworkHostsString(std::string &str); + private: CConf m_conf; CModem* m_modem; + CDStarControl* m_dstar; + CDMRControl* m_dmr; + CYSFControl* m_ysf; + CP25Control* m_p25; + CNXDNControl* m_nxdn; + CM17Control* m_m17; + CPOCSAGControl* m_pocsag; + CFMControl* m_fm; + CAX25Control* m_ax25; CDStarNetwork* m_dstarNetwork; - CDMRNetwork* m_dmrNetwork; + IDMRNetwork* m_dmrNetwork; CYSFNetwork* m_ysfNetwork; CP25Network* m_p25Network; - CNXDNNetwork* m_nxdnNetwork; + INXDNNetwork* m_nxdnNetwork; + CM17Network* m_m17Network; CPOCSAGNetwork* m_pocsagNetwork; + CFMNetwork* m_fmNetwork; + CAX25Network* m_ax25Network; CDisplay* m_display; - CUMP* m_ump; unsigned char m_mode; unsigned int m_dstarRFModeHang; unsigned int m_dmrRFModeHang; unsigned int m_ysfRFModeHang; unsigned int m_p25RFModeHang; unsigned int m_nxdnRFModeHang; + unsigned int m_m17RFModeHang; + unsigned int m_fmRFModeHang; unsigned int m_dstarNetModeHang; unsigned int m_dmrNetModeHang; unsigned int m_ysfNetModeHang; unsigned int m_p25NetModeHang; unsigned int m_nxdnNetModeHang; + unsigned int m_m17NetModeHang; unsigned int m_pocsagNetModeHang; + unsigned int m_fmNetModeHang; CTimer m_modeTimer; CTimer m_dmrTXTimer; CTimer m_cwIdTimer; @@ -79,7 +107,10 @@ class CMMDVMHost bool m_ysfEnabled; bool m_p25Enabled; bool m_nxdnEnabled; + bool m_m17Enabled; bool m_pocsagEnabled; + bool m_fmEnabled; + bool m_ax25Enabled; unsigned int m_cwIdTime; CDMRLookup* m_dmrLookup; CNXDNLookup* m_nxdnLookup; @@ -88,7 +119,8 @@ class CMMDVMHost std::string m_cwCallsign; bool m_lockFileEnabled; std::string m_lockFileName; - CMobileGPS* m_mobileGPS; + CRemoteControl* m_remoteControl; + bool m_fixedMode; void readParams(); bool createModem(); @@ -97,7 +129,14 @@ class CMMDVMHost bool createYSFNetwork(); bool createP25Network(); bool createNXDNNetwork(); + bool createM17Network(); bool createPOCSAGNetwork(); + bool createFMNetwork(); + bool createAX25Network(); + + void remoteControl(); + void processModeCommand(unsigned char mode, unsigned int timeout); + void processEnableCommand(bool& mode, bool enabled); void setMode(unsigned char mode); diff --git a/MMDVMHost.sln b/MMDVMHost.sln index b130c2889..4d9518cd6 100644 --- a/MMDVMHost.sln +++ b/MMDVMHost.sln @@ -1,10 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.271 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MMDVMHost", "MMDVMHost.vcxproj", "{1D34E8C1-CFA5-4D60-B509-9DB58DC4AE92}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RemoteCommand", "RemoteCommand.vcxproj", "{5A61AB93-58BB-413A-BBD9-A26284CB37AE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -21,8 +23,19 @@ Global {1D34E8C1-CFA5-4D60-B509-9DB58DC4AE92}.Release|x64.Build.0 = Release|x64 {1D34E8C1-CFA5-4D60-B509-9DB58DC4AE92}.Release|x86.ActiveCfg = Release|Win32 {1D34E8C1-CFA5-4D60-B509-9DB58DC4AE92}.Release|x86.Build.0 = Release|Win32 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE}.Debug|x64.ActiveCfg = Debug|x64 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE}.Debug|x64.Build.0 = Debug|x64 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE}.Debug|x86.ActiveCfg = Debug|Win32 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE}.Debug|x86.Build.0 = Debug|Win32 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE}.Release|x64.ActiveCfg = Release|x64 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE}.Release|x64.Build.0 = Release|x64 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE}.Release|x86.ActiveCfg = Release|Win32 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4FE84D69-7345-440E-8E0A-0CC1C84477F8} + EndGlobalSection EndGlobal diff --git a/MMDVMHost.vcxproj b/MMDVMHost.vcxproj index 90923687d..dc7a76b2c 100644 --- a/MMDVMHost.vcxproj +++ b/MMDVMHost.vcxproj @@ -22,32 +22,32 @@ {1D34E8C1-CFA5-4D60-B509-9DB58DC4AE92} Win32Proj MMDVMHost - 10.0.15063.0 + 10.0 Application true - v141 + v142 Unicode Application false - v141 + v142 true Unicode Application true - v141 + v142 Unicode Application false - v141 + v142 true Unicode @@ -87,7 +87,7 @@ Level3 Disabled - WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + HAVE_LOG_H;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Console @@ -101,7 +101,7 @@ Level3 Disabled - _DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + HAVE_LOG_H;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Console @@ -123,7 +123,7 @@ MaxSpeed true true - WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + HAVE_LOG_H;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Console @@ -141,7 +141,7 @@ MaxSpeed true true - NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + HAVE_LOG_H;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Console @@ -153,8 +153,12 @@ + + + + @@ -165,9 +169,11 @@ + + @@ -180,28 +186,38 @@ + + - + + + + + + + + - - + + - + + @@ -219,22 +235,28 @@ + + - + + + - + + - + + @@ -246,8 +268,11 @@ + + + @@ -256,9 +281,11 @@ + + @@ -271,26 +298,35 @@ + + - + + + + + + + - - + + - + + @@ -307,20 +343,26 @@ + + - + + + - + + - + + diff --git a/MMDVMHost.vcxproj.filters b/MMDVMHost.vcxproj.filters index 0c595bff6..3b74c3121 100644 --- a/MMDVMHost.vcxproj.filters +++ b/MMDVMHost.vcxproj.filters @@ -56,33 +56,24 @@ Header Files - - Header Files - Header Files Header Files - + Header Files - - Header Files - - + Header Files - + Header Files Header Files - - Header Files - Header Files @@ -215,9 +206,6 @@ Header Files - - Header Files - Header Files @@ -272,16 +260,94 @@ Header Files - + Header Files - + Header Files - + Header Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + Header Files @@ -322,30 +388,21 @@ Source Files - - Source Files - Source Files Source Files - - Source Files - - + Source Files - + Source Files Source Files - - Source Files - Source Files @@ -469,9 +526,6 @@ Source Files - - Source Files - Source Files @@ -520,16 +574,88 @@ Source Files - + Source Files - + Source Files - + Source Files - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + Source Files diff --git a/Makefile b/Makefile index 537fa2e6f..aa7dec76a 100644 --- a/Makefile +++ b/Makefile @@ -1,30 +1,62 @@ -# This makefile is for all platforms, but doesn't include support for the HD44780 display on the Raspberry Pi. +# This makefile is for all platforms, but doesn't include support for the HD44780, OLED, or PCF8574 displays on the Raspberry Pi. -CC = gcc -CXX = g++ -CFLAGS = -g -O3 -Wall -std=c++0x -pthread -LIBS = -lpthread -LDFLAGS = -g +CC = cc +CXX = c++ +CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -I/usr/local/include +LIBS = -lpthread -lutil -lsamplerate +LDFLAGS = -g -L/usr/local/lib OBJECTS = \ - AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ - DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o I2CController.o LCDproc.o Log.o MMDVMHost.o MobileGPS.o Modem.o ModemSerialPort.o Mutex.o \ - NetworkInfo.o Nextion.o NullDisplay.o NullModem.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o \ - NXDNLookup.o NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o \ - POCSAGControl.o POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o \ - Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o + AMBEFEC.o BCH.o AX25Control.o AX25Network.o BPTC19696.o CASTInfo.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o \ + DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ + DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ + Hamming.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o MMDVMHost.o \ + Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ + NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o \ + NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o POCSAGControl.o \ + POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o TFTSurenoo.o Thread.o \ + Timer.o UARTController.o UDPController.o UDPSocket.o UserDB.o UserDBentry.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o -all: MMDVMHost +all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) - $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost + $(CXX) $(OBJECTS) $(LDFLAGS) $(LIBS) -o MMDVMHost + +RemoteCommand: Log.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o RemoteCommand.o UDPSocket.o $(LDFLAGS) $(LIBS) -o RemoteCommand %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< +.PHONY install: +install: all + install -m 755 MMDVMHost /usr/local/bin/ + install -m 755 RemoteCommand /usr/local/bin/ + +.PHONY install-service: +install-service: install /etc/MMDVM.ini + @useradd --user-group -M --system mmdvm --shell /bin/false || true + @usermod --groups dialout --append mmdvm || true + @mkdir /var/log/mmdvm || true + @chown mmdvm:mmdvm /var/log/mmdvm + @cp ./linux/systemd/mmdvmhost.service /lib/systemd/system/ + @systemctl enable mmdvmhost.service + +/etc/MMDVM.ini: + @cp -n MMDVM.ini /etc/MMDVM.ini + @sed -i 's/FilePath=./FilePath=\/var\/log\/mmdvm\//' /etc/MMDVM.ini + @sed -i 's/Daemon=0/Daemon=1/' /etc/MMDVM.ini + @chown mmdvm:mmdvm /etc/MMDVM.ini + +.PHONY uninstall-service: +uninstall-service: + @systemctl stop mmdvmhost.service || true + @systemctl disable mmdvmhost.service || true + @rm -f /usr/local/bin/MMDVMHost || true + @rm -f /lib/systemd/system/mmdvmhost.service || true + clean: - $(RM) MMDVMHost *.o *.d *.bak *~ GitVersion.h + $(RM) MMDVMHost RemoteCommand *.o *.d *.bak *~ GitVersion.h # Export the current git version if the index file exists, else 000... GitVersion.h: diff --git a/Makefile.Pi b/Makefile.Pi deleted file mode 100644 index 2f5de8f93..000000000 --- a/Makefile.Pi +++ /dev/null @@ -1,35 +0,0 @@ -# This makefile is for use with the Raspberry Pi. The wiringpi library is needed. - -CC = gcc -CXX = g++ -CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DRASPBERRY_PI -I/usr/local/include -LIBS = -lwiringPi -lwiringPiDev -lpthread -LDFLAGS = -g -L/usr/local/lib - -OBJECTS = \ - AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ - DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o I2CController.o LCDproc.o Log.o MMDVMHost.o MobileGPS.o Modem.o ModemSerialPort.o Mutex.o \ - NetworkInfo.o Nextion.o NullDisplay.o NullModem.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o \ - NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ - POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o \ - UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o - -all: MMDVMHost - -MMDVMHost: GitVersion.h $(OBJECTS) - $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost - -%.o: %.cpp - $(CXX) $(CFLAGS) -c -o $@ $< - -clean: - $(RM) MMDVMHost *.o *.d *.bak *~ GitVersion.h - -# Export the current git version if the index file exists, else 000... -GitVersion.h: -ifneq ("$(wildcard .git/index)","") - echo "const char *gitversion = \"$(shell git rev-parse HEAD)\";" > $@ -else - echo "const char *gitversion = \"0000000000000000000000000000000000000000\";" > $@ -endif diff --git a/Makefile.Pi.Adafruit b/Makefile.Pi.Adafruit index fc6df1669..1b4e15b06 100644 --- a/Makefile.Pi.Adafruit +++ b/Makefile.Pi.Adafruit @@ -1,30 +1,64 @@ # This makefile is for use with the Raspberry Pi when using an HD44780 compatible display. The wiringpi library is needed. # Support for the Adafruit i2c 16 x 2 RGB LCD Pi Plate -CC = gcc -CXX = g++ -CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHD44780 -DADAFRUIT_DISPLAY -I/usr/local/include -LIBS = -lwiringPi -lwiringPiDev -lpthread + +CC = cc +CXX = c++ +CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DHD44780 -DADAFRUIT_DISPLAY -I/usr/local/include +LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil -lsamplerate LDFLAGS = -g -L/usr/local/lib OBJECTS = \ - AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ - DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o I2CController.o LCDproc.o Log.o MMDVMHost.o MobileGPS.o Modem.o ModemSerialPort.o Mutex.o \ - NetworkInfo.o Nextion.o NullDisplay.o NullModem.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o \ - NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ - POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ - Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o + AMBEFEC.o AX25Control.o AX25Network.o BCH.o BPTC19696.o CASTInfo.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o \ + DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ + DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ + Hamming.o HD44780.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o \ + MMDVMHost.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ + NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ + NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o \ + POCSAGControl.o POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o \ + TFTSurenoo.o Thread.o Timer.o UARTController.o UDPController.o UDPSocket.o UserDB.o UserDBentry.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o \ + YSFNetwork.o YSFPayload.o -all: MMDVMHost +all: MMDVMHost RemoteCommand -MMDVMHost: GitVersion.h $(OBJECTS) +MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost +RemoteCommand: Log.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand + %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< +.PHONY install: +install: all + install -m 755 MMDVMHost /usr/local/bin/ + install -m 755 RemoteCommand /usr/local/bin/ + +.PHONY install-service: +install-service: install /etc/MMDVM.ini + @useradd --user-group -M --system mmdvm --shell /bin/false || true + @usermod --groups dialout --append mmdvm || true + @mkdir /var/log/mmdvm || true + @chown mmdvm:mmdvm /var/log/mmdvm + @cp ./linux/systemd/mmdvmhost.service /lib/systemd/system/ + @systemctl enable mmdvmhost.service + +/etc/MMDVM.ini: + @cp -n MMDVM.ini /etc/MMDVM.ini + @sed -i 's/FilePath=./FilePath=\/var\/log\/mmdvm\//' /etc/MMDVM.ini + @sed -i 's/Daemon=0/Daemon=1/' /etc/MMDVM.ini + @chown mmdvm:mmdvm /etc/MMDVM.ini + +.PHONY uninstall-service: +uninstall-service: + @systemctl stop mmdvmhost.service || true + @systemctl disable mmdvmhost.service || true + @rm -f /usr/local/bin/MMDVMHost || true + @rm -f /lib/systemd/system/mmdvmhost.service || true + clean: - $(RM) MMDVMHost *.o *.d *.bak *~ GitVersion.h + $(RM) MMDVMHost RemoteCommand *.o *.d *.bak *~ GitVersion.h # Export the current git version if the index file exists, else 000... GitVersion.h: diff --git a/Makefile.Pi.HD44780 b/Makefile.Pi.HD44780 index 124629777..31a3159d9 100644 --- a/Makefile.Pi.HD44780 +++ b/Makefile.Pi.HD44780 @@ -1,30 +1,63 @@ # This makefile is for use with the Raspberry Pi when using an HD44780 compatible display. The wiringpi library is needed. -CC = gcc -CXX = g++ -CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHD44780 -I/usr/local/include -LIBS = -lwiringPi -lwiringPiDev -lpthread +CC = cc +CXX = c++ +CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DHD44780 -I/usr/local/include +LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil -lsamplerate LDFLAGS = -g -L/usr/local/lib OBJECTS = \ - AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ - DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o I2CController.o LCDproc.o Log.o MMDVMHost.o MobileGPS.o Modem.o ModemSerialPort.o Mutex.o \ - NetworkInfo.o Nextion.o NullDisplay.o NullModem.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o \ - NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ - POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ - Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o + AMBEFEC.o AX25Control.o AX25Network.o BCH.o BPTC19696.o CASTInfo.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o \ + DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ + DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ + Hamming.o HD44780.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o \ + MMDVMHost.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ + NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ + NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o \ + POCSAGControl.o POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o \ + TFTSurenoo.o Thread.o Timer.o UARTController.o UDPController.o UDPSocket.o UserDB.o UserDBentry.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o \ + YSFNetwork.o YSFPayload.o -all: MMDVMHost +all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost +RemoteCommand: Log.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand + %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< +.PHONY install: +install: all + install -m 755 MMDVMHost /usr/local/bin/ + install -m 755 RemoteCommand /usr/local/bin/ + +.PHONY install-service: +install-service: install /etc/MMDVM.ini + @useradd --user-group -M --system mmdvm --shell /bin/false || true + @usermod --groups dialout --append mmdvm || true + @mkdir /var/log/mmdvm || true + @chown mmdvm:mmdvm /var/log/mmdvm + @cp ./linux/systemd/mmdvmhost.service /lib/systemd/system/ + @systemctl enable mmdvmhost.service + +/etc/MMDVM.ini: + @cp -n MMDVM.ini /etc/MMDVM.ini + @sed -i 's/FilePath=./FilePath=\/var\/log\/mmdvm\//' /etc/MMDVM.ini + @sed -i 's/Daemon=0/Daemon=1/' /etc/MMDVM.ini + @chown mmdvm:mmdvm /etc/MMDVM.ini + +.PHONY uninstall-service: +uninstall-service: + @systemctl stop mmdvmhost.service || true + @systemctl disable mmdvmhost.service || true + @rm -f /usr/local/bin/MMDVMHost || true + @rm -f /lib/systemd/system/mmdvmhost.service || true + clean: - $(RM) MMDVMHost *.o *.d *.bak *~ GitVersion.h + $(RM) MMDVMHost RemoteCommand *.o *.d *.bak *~ GitVersion.h # Export the current git version if the index file exists, else 000... GitVersion.h: diff --git a/Makefile.Pi.I2C b/Makefile.Pi.I2C new file mode 100644 index 000000000..44f436d6c --- /dev/null +++ b/Makefile.Pi.I2C @@ -0,0 +1,67 @@ +# This makefile is for use with the Raspberry Pi. The wiringpi library is needed. + +CC = cc +CXX = c++ +CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DRASPBERRY_PI -I/usr/local/include +LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil -lsamplerate +LDFLAGS = -g -L/usr/local/lib + +OBJECTS = \ + AMBEFEC.o AX25Control.o AX25Network.o BCH.o BPTC19696.o CASTInfo.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o \ + DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ + DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ + Hamming.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o MMDVMHost.o \ + Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ + NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o \ + NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o POCSAGControl.o \ + POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o TFTSurenoo.o Thread.o \ + Timer.o UARTController.o UDPController.o UDPSocket.o UserDB.o UserDBentry.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o + +all: MMDVMHost RemoteCommand + +MMDVMHost: GitVersion.h $(OBJECTS) + $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost + +RemoteCommand: Log.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand + +%.o: %.cpp + $(CXX) $(CFLAGS) -c -o $@ $< + +.PHONY install: +install: all + install -m 755 MMDVMHost /usr/local/bin/ + install -m 755 RemoteCommand /usr/local/bin/ + +.PHONY install-service: +install-service: install /etc/MMDVM.ini + @useradd --user-group -M --system mmdvm --shell /bin/false || true + @usermod --groups dialout --append mmdvm || true + @mkdir /var/log/mmdvm || true + @chown mmdvm:mmdvm /var/log/mmdvm + @cp ./linux/systemd/mmdvmhost.service /lib/systemd/system/ + @systemctl enable mmdvmhost.service + +/etc/MMDVM.ini: + @cp -n MMDVM.ini /etc/MMDVM.ini + @sed -i 's/FilePath=./FilePath=\/var\/log\/mmdvm\//' /etc/MMDVM.ini + @sed -i 's/Daemon=0/Daemon=1/' /etc/MMDVM.ini + @chown mmdvm:mmdvm /etc/MMDVM.ini + +.PHONY uninstall-service: +uninstall-service: + @systemctl stop mmdvmhost.service || true + @systemctl disable mmdvmhost.service || true + @rm -f /usr/local/bin/MMDVMHost || true + @rm -f /lib/systemd/system/mmdvmhost.service || true + +clean: + $(RM) MMDVMHost RemoteCommand *.o *.d *.bak *~ GitVersion.h + +# Export the current git version if the index file exists, else 000... +GitVersion.h: +ifneq ("$(wildcard .git/index)","") + echo "const char *gitversion = \"$(shell git rev-parse HEAD)\";" > $@ +else + echo "const char *gitversion = \"0000000000000000000000000000000000000000\";" > $@ +endif diff --git a/Makefile.Pi.OLED b/Makefile.Pi.OLED index 2c4516573..538ff6491 100644 --- a/Makefile.Pi.OLED +++ b/Makefile.Pi.OLED @@ -1,30 +1,67 @@ -# This makefile is for use with the Raspberry Pi when using an HD44780 compatible display. The wiringpi library is needed. +# This makefile is for use with the Raspberry Pi when using an OLED display. The wiringpi library is not needed. + +CC = cc +CXX = c++ +CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DOLED -I/usr/local/include +LIBS = -lArduiPi_OLED -lpthread -lutil -lsamplerate + +# If you use NetBSD, add following CFLAGS +#CFLAGS += -L/usr/local/lib -Wl,-rpath=/usr/local/lib -CC = gcc -CXX = g++ -CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DOLED -I/usr/local/include -LIBS = -lArduiPi_OLED -lwiringPi -lpthread LDFLAGS = -g -L/usr/local/lib OBJECTS = \ - AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ - DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o I2CController.o OLED.o LCDproc.o Log.o MMDVMHost.o MobileGPS.o Modem.o ModemSerialPort.o Mutex.o \ - NetworkInfo.o Nextion.o NullDisplay.o NullModem.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o \ - NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ - POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ - Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o + AMBEFEC.o AX25Control.o AX25Network.o BCH.o BPTC19696.o CASTInfo.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o \ + DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ + DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ + Hamming.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o MMDVMHost.o \ + Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ + NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o \ + NXDNUDCH.o OLED.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o \ + POCSAGControl.o POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o \ + TFTSurenoo.o Thread.o Timer.o UARTController.o UDPController.o UDPSocket.o UserDB.o UserDBentry.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o \ + YSFNetwork.o YSFPayload.o -all: MMDVMHost +all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost +RemoteCommand: Log.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand + %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< +.PHONY install: +install: all + install -m 755 MMDVMHost /usr/local/bin/ + install -m 755 RemoteCommand /usr/local/bin/ + +.PHONY install-service: +install-service: install /etc/MMDVM.ini + @useradd --user-group -M --system mmdvm --shell /bin/false || true + @usermod --groups dialout --append mmdvm || true + @mkdir /var/log/mmdvm || true + @chown mmdvm:mmdvm /var/log/mmdvm + @cp ./linux/systemd/mmdvmhost.service /lib/systemd/system/ + @systemctl enable mmdvmhost.service + +/etc/MMDVM.ini: + @cp -n MMDVM.ini /etc/MMDVM.ini + @sed -i 's/FilePath=./FilePath=\/var\/log\/mmdvm\//' /etc/MMDVM.ini + @sed -i 's/Daemon=0/Daemon=1/' /etc/MMDVM.ini + @chown mmdvm:mmdvm /etc/MMDVM.ini + +.PHONY uninstall-service: +uninstall-service: + @systemctl stop mmdvmhost.service || true + @systemctl disable mmdvmhost.service || true + @rm -f /usr/local/bin/MMDVMHost || true + @rm -f /lib/systemd/system/mmdvmhost.service || true + clean: - $(RM) MMDVMHost *.o *.d *.bak *~ GitVersion.h + $(RM) MMDVMHost RemoteCommand *.o *.d *.bak *~ GitVersion.h # Export the current git version if the index file exists, else 000... GitVersion.h: @@ -33,3 +70,4 @@ ifneq ("$(wildcard .git/index)","") else echo "const char *gitversion = \"0000000000000000000000000000000000000000\";" > $@ endif + diff --git a/Makefile.Pi.PCF8574 b/Makefile.Pi.PCF8574 index 30aaf248d..c1aa3d1eb 100644 --- a/Makefile.Pi.PCF8574 +++ b/Makefile.Pi.PCF8574 @@ -1,30 +1,64 @@ # This makefile is for use with the Raspberry Pi when using an HD44780 compatible display. The wiringpi library is needed. # Support for the HD44780 connected via a PCF8574 8-bit GPIO expander IC -CC = gcc -CXX = g++ -CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHD44780 -DPCF8574_DISPLAY -I/usr/local/include -LIBS = -lwiringPi -lwiringPiDev -lpthread + +CC = cc +CXX = c++ +CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DHD44780 -DPCF8574_DISPLAY -I/usr/local/include +LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil -lsamplerate LDFLAGS = -g -L/usr/local/lib OBJECTS = \ - AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ - DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o I2CController.o LCDproc.o Log.o MMDVMHost.o MobileGPS.o Modem.o ModemSerialPort.o Mutex.o \ - NetworkInfo.o Nextion.o NullDisplay.o NullModem.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o \ - NXDNNetwork.o NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ - POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ - Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o + AMBEFEC.o AX25Control.o AX25Network.o BCH.o BPTC19696.o CASTInfo.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o \ + DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ + DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ + Hamming.o HD44780.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o \ + MMDVMHost.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ + NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ + NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o \ + POCSAGControl.o POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o \ + TFTSurenoo.o Thread.o Timer.o UARTController.o UDPController.o UDPSocket.o UserDB.o UserDBentry.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o \ + YSFNetwork.o YSFPayload.o -all: MMDVMHost +all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost +RemoteCommand: Log.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand + %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< +.PHONY install: +install: all + install -m 755 MMDVMHost /usr/local/bin/ + install -m 755 RemoteCommand /usr/local/bin/ + +.PHONY install-service: +install-service: install /etc/MMDVM.ini + @useradd --user-group -M --system mmdvm --shell /bin/false || true + @usermod --groups dialout --append mmdvm || true + @mkdir /var/log/mmdvm || true + @chown mmdvm:mmdvm /var/log/mmdvm + @cp ./linux/systemd/mmdvmhost.service /lib/systemd/system/ + @systemctl enable mmdvmhost.service + +/etc/MMDVM.ini: + @cp -n MMDVM.ini /etc/MMDVM.ini + @sed -i 's/FilePath=./FilePath=\/var\/log\/mmdvm\//' /etc/MMDVM.ini + @sed -i 's/Daemon=0/Daemon=1/' /etc/MMDVM.ini + @chown mmdvm:mmdvm /etc/MMDVM.ini + +.PHONY uninstall-service: +uninstall-service: + @systemctl stop mmdvmhost.service || true + @systemctl disable mmdvmhost.service || true + @rm -f /usr/local/bin/MMDVMHost || true + @rm -f /lib/systemd/system/mmdvmhost.service || true + clean: - $(RM) MMDVMHost *.o *.d *.bak *~ GitVersion.h + $(RM) MMDVMHost RemoteCommand *.o *.d *.bak *~ GitVersion.h # Export the current git version if the index file exists, else 000... GitVersion.h: diff --git a/Makefile.Solaris b/Makefile.Solaris deleted file mode 100644 index b701271d0..000000000 --- a/Makefile.Solaris +++ /dev/null @@ -1,35 +0,0 @@ -# This makefile is for Solaris using gcc - -CC = gcc -CXX = g++ -CFLAGS = -g -O3 -Wall -std=c++0x -pthread -LIBS = -lpthread -lsocket -LDFLAGS = -g - -OBJECTS = \ - AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ - DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o MobileGPS.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o \ - NullDisplay.o NullModem.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ - NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o POCSAGNetwork.o \ - QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o \ - UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o - -all: MMDVMHost - -MMDVMHost: GitVersion.h $(OBJECTS) - $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost - -%.o: %.cpp - $(CXX) $(CFLAGS) -c -o $@ $< - -clean: - $(RM) MMDVMHost *.o *.d *.bak *~ GitVersion.h - -# Export the current git version if the index file exists, else 000... -GitVersion.h: -ifneq ("$(wildcard .git/index)","") - echo "const char *gitversion = \"$(shell git rev-parse HEAD)\";" > $@ -else - echo "const char *gitversion = \"0000000000000000000000000000000000000000\";" > $@ -endif diff --git a/MobileGPS.cpp b/MobileGPS.cpp deleted file mode 100644 index 27721bd6e..000000000 --- a/MobileGPS.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2018 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "MobileGPS.h" - -#include -#include -#include -#include - -CMobileGPS::CMobileGPS(const std::string& address, unsigned int port, CDMRNetwork* network) : -m_idTimer(1000U, 60U), -m_address(), -m_port(port), -m_socket(), -m_network(network) -{ - assert(!address.empty()); - assert(port > 0U); - assert(network != NULL); - - m_address = CUDPSocket::lookup(address); -} - -CMobileGPS::~CMobileGPS() -{ -} - -bool CMobileGPS::open() -{ - bool ret = m_socket.open(); - if (!ret) - return false; - - m_idTimer.start(); - - return true; -} - -void CMobileGPS::clock(unsigned int ms) -{ - m_idTimer.clock(ms); - - if (m_idTimer.hasExpired()) { - pollGPS(); - m_idTimer.start(); - } - - sendReport(); -} - -void CMobileGPS::close() -{ - m_socket.close(); -} - -bool CMobileGPS::pollGPS() -{ - return m_socket.write((unsigned char*)"MMDVMHost", 9U, m_address, m_port); -} - -void CMobileGPS::sendReport() -{ - // Grab GPS data if it's available - unsigned char buffer[200U]; - in_addr address; - unsigned int port; - int ret = m_socket.read(buffer, 200U, address, port); - if (ret <= 0) - return; - - buffer[ret] = '\0'; - - // Parse the GPS data - char* pLatitude = ::strtok((char*)buffer, ",\n"); // Latitude - char* pLongitude = ::strtok(NULL, ",\n"); // Longitude - - if (pLatitude == NULL || pLongitude == NULL) - return; - - float latitude = float(::atof(pLatitude)); - float longitude = float(::atof(pLongitude)); - - m_network->writeHomePosition(latitude, longitude); -} - diff --git a/Modem.cpp b/Modem.cpp index 7fe5ae172..d88162e81 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2018 by Jonathan Naylor G4KLX + * Copyright (C) 2011-2018,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,16 +16,16 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "I2CController.h" #include "DStarDefines.h" #include "DMRDefines.h" #include "YSFDefines.h" #include "P25Defines.h" #include "NXDNDefines.h" +#include "AX25Defines.h" #include "POCSAGDefines.h" +#include "M17Defines.h" #include "Thread.h" #include "Modem.h" -#include "NullModem.h" #include "Utils.h" #include "Log.h" @@ -74,12 +74,28 @@ const unsigned char MMDVM_P25_LOST = 0x32U; const unsigned char MMDVM_NXDN_DATA = 0x40U; const unsigned char MMDVM_NXDN_LOST = 0x41U; +const unsigned char MMDVM_M17_LINK_SETUP = 0x45U; +const unsigned char MMDVM_M17_STREAM = 0x46U; +const unsigned char MMDVM_M17_PACKET = 0x47U; +const unsigned char MMDVM_M17_LOST = 0x48U; +const unsigned char MMDVM_M17_EOT = 0x49U; + const unsigned char MMDVM_POCSAG_DATA = 0x50U; +const unsigned char MMDVM_AX25_DATA = 0x55U; + +const unsigned char MMDVM_FM_PARAMS1 = 0x60U; +const unsigned char MMDVM_FM_PARAMS2 = 0x61U; +const unsigned char MMDVM_FM_PARAMS3 = 0x62U; +const unsigned char MMDVM_FM_PARAMS4 = 0x63U; +const unsigned char MMDVM_FM_DATA = 0x65U; +const unsigned char MMDVM_FM_CONTROL = 0x66U; +const unsigned char MMDVM_FM_EOT = 0x67U; + const unsigned char MMDVM_ACK = 0x70U; const unsigned char MMDVM_NAK = 0x7FU; -const unsigned char MMDVM_SERIAL = 0x80U; +const unsigned char MMDVM_SERIAL_DATA = 0x80U; const unsigned char MMDVM_TRANSPARENT = 0x90U; const unsigned char MMDVM_QSO_INFO = 0x91U; @@ -89,31 +105,50 @@ const unsigned char MMDVM_DEBUG2 = 0xF2U; const unsigned char MMDVM_DEBUG3 = 0xF3U; const unsigned char MMDVM_DEBUG4 = 0xF4U; const unsigned char MMDVM_DEBUG5 = 0xF5U; +const unsigned char MMDVM_DEBUG_DUMP = 0xFAU; const unsigned int MAX_RESPONSES = 30U; const unsigned int BUFFER_LENGTH = 2000U; +const unsigned char CAP1_DSTAR = 0x01U; +const unsigned char CAP1_DMR = 0x02U; +const unsigned char CAP1_YSF = 0x04U; +const unsigned char CAP1_P25 = 0x08U; +const unsigned char CAP1_NXDN = 0x10U; +const unsigned char CAP1_M17 = 0x20U; +const unsigned char CAP1_FM = 0x40U; +const unsigned char CAP2_POCSAG = 0x01U; +const unsigned char CAP2_AX25 = 0x02U; + -CModem::CModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug) : -m_port(port), +CModem::CModem(bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool useCOSAsLockout, bool trace, bool debug) : +m_protocolVersion(0U), m_dmrColorCode(0U), m_ysfLoDev(false), m_ysfTXHang(4U), +m_p25TXHang(5U), +m_nxdnTXHang(5U), +m_m17TXHang(5U), m_duplex(duplex), m_rxInvert(rxInvert), m_txInvert(txInvert), m_pttInvert(pttInvert), m_txDelay(txDelay), m_dmrDelay(dmrDelay), -m_rxLevel(0U), -m_cwIdTXLevel(0U), -m_dstarTXLevel(0U), -m_dmrTXLevel(0U), -m_ysfTXLevel(0U), -m_p25TXLevel(0U), -m_nxdnTXLevel(0U), -m_pocsagTXLevel(0U), +m_rxLevel(0.0F), +m_cwIdTXLevel(0.0F), +m_dstarTXLevel(0.0F), +m_dmrTXLevel(0.0F), +m_ysfTXLevel(0.0F), +m_p25TXLevel(0.0F), +m_nxdnTXLevel(0.0F), +m_m17TXLevel(0.0F), +m_pocsagTXLevel(0.0F), +m_fmTXLevel(0.0F), +m_ax25TXLevel(0.0F), +m_rfLevel(0.0F), +m_useCOSAsLockout(useCOSAsLockout), m_trace(trace), m_debug(debug), m_rxFrequency(0U), @@ -124,13 +159,18 @@ m_dmrEnabled(false), m_ysfEnabled(false), m_p25Enabled(false), m_nxdnEnabled(false), +m_m17Enabled(false), m_pocsagEnabled(false), +m_fmEnabled(false), +m_ax25Enabled(false), m_rxDCOffset(0), m_txDCOffset(0), -m_serial(NULL), +m_port(NULL), m_buffer(NULL), m_length(0U), m_offset(0U), +m_state(SS_START), +m_type(0U), m_rxDStarData(1000U, "Modem RX D-Star"), m_txDStarData(1000U, "Modem TX D-Star"), m_rxDMRData1(1000U, "Modem RX DMR1"), @@ -143,7 +183,15 @@ m_rxP25Data(1000U, "Modem RX P25"), m_txP25Data(1000U, "Modem TX P25"), m_rxNXDNData(1000U, "Modem RX NXDN"), m_txNXDNData(1000U, "Modem TX NXDN"), +m_rxM17Data(1000U, "Modem RX M17"), +m_txM17Data(1000U, "Modem TX M17"), m_txPOCSAGData(1000U, "Modem TX POCSAG"), +m_rxFMData(5000U, "Modem RX FM"), +m_txFMData(5000U, "Modem TX FM"), +m_rxAX25Data(1000U, "Modem RX AX.25"), +m_txAX25Data(1000U, "Modem TX AX.25"), +m_rxSerialData(1000U, "Modem RX Serial"), +m_txSerialData(1000U, "Modem TX Serial"), m_rxTransparentData(1000U, "Modem RX Transparent"), m_txTransparentData(1000U, "Modem TX Transparent"), m_sendTransparentDataFrameType(0U), @@ -156,31 +204,72 @@ m_dmrSpace2(0U), m_ysfSpace(0U), m_p25Space(0U), m_nxdnSpace(0U), +m_m17Space(0U), m_pocsagSpace(0U), +m_fmSpace(0U), +m_ax25Space(0U), m_tx(false), m_cd(false), m_lockout(false), m_error(false), -m_hwType(HWT_UNKNOWN) +m_mode(MODE_IDLE), +m_hwType(HWT_UNKNOWN), +m_ax25RXTwist(0), +m_ax25TXDelay(300U), +m_ax25SlotTime(30U), +m_ax25PPersist(128U), +m_fmCallsign(), +m_fmCallsignSpeed(20U), +m_fmCallsignFrequency(1000U), +m_fmCallsignTime(600U), +m_fmCallsignHoldoff(0U), +m_fmCallsignHighLevel(35.0F), +m_fmCallsignLowLevel(15.0F), +m_fmCallsignAtStart(true), +m_fmCallsignAtEnd(true), +m_fmCallsignAtLatch(true), +m_fmRfAck("K"), +m_fmExtAck("N"), +m_fmAckSpeed(20U), +m_fmAckFrequency(1750U), +m_fmAckMinTime(4U), +m_fmAckDelay(1000U), +m_fmAckLevel(80.0F), +m_fmTimeout(120U), +m_fmTimeoutLevel(80.0F), +m_fmCtcssFrequency(88.4F), +m_fmCtcssHighThreshold(30U), +m_fmCtcssLowThreshold(20U), +m_fmCtcssLevel(10.0F), +m_fmKerchunkTime(0U), +m_fmHangTime(5U), +m_fmAccessMode(1U), +m_fmLinkMode(false), +m_fmCOSInvert(false), +m_fmNoiseSquelch(false), +m_fmSquelchHighThreshold(30U), +m_fmSquelchLowThreshold(20U), +m_fmRFAudioBoost(1U), +m_fmExtAudioBoost(1U), +m_fmMaxDevLevel(90.0F), +m_fmExtEnable(false), +m_capabilities1(0x00U), +m_capabilities2(0x00U) { - assert(!port.empty()); - m_buffer = new unsigned char[BUFFER_LENGTH]; } CModem::~CModem() { - delete m_serial; + delete m_port; delete[] m_buffer; } -void CModem::setSerialParams(const std::string& protocol, unsigned int address) +void CModem::setPort(IModemPort* port) { - // Create the serial controller instance according the protocol specified in conf. - if (protocol == "i2c") - m_serial = new CI2CController(m_port, SERIAL_115200, address, true); - else - m_serial = new CSerialController(m_port, SERIAL_115200, true); + assert(port != NULL); + + m_port = port; } void CModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency) @@ -193,17 +282,20 @@ void CModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int tx m_pocsagFrequency = pocsagFrequency + txOffset; } -void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled) +void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool m17Enabled, bool pocsagEnabled, bool fmEnabled, bool ax25Enabled) { m_dstarEnabled = dstarEnabled; m_dmrEnabled = dmrEnabled; m_ysfEnabled = ysfEnabled; m_p25Enabled = p25Enabled; m_nxdnEnabled = nxdnEnabled; + m_m17Enabled = m17Enabled; m_pocsagEnabled = pocsagEnabled; + m_fmEnabled = fmEnabled; + m_ax25Enabled = ax25Enabled; } -void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagTXLevel) +void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float m17TXLevel, float pocsagTXLevel, float fmTXLevel, float ax25TXLevel) { m_rxLevel = rxLevel; m_cwIdTXLevel = cwIdTXLevel; @@ -212,7 +304,10 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo m_ysfTXLevel = ysfTXLevel; m_p25TXLevel = p25TXLevel; m_nxdnTXLevel = nxdnTXLevel; + m_m17TXLevel = m17TXLevel; m_pocsagTXLevel = pocsagTXLevel; + m_fmTXLevel = fmTXLevel; + m_ax25TXLevel = ax25TXLevel; } void CModem::setDMRParams(unsigned int colorCode) @@ -228,6 +323,29 @@ void CModem::setYSFParams(bool loDev, unsigned int txHang) m_ysfTXHang = txHang; } +void CModem::setP25Params(unsigned int txHang) +{ + m_p25TXHang = txHang; +} + +void CModem::setNXDNParams(unsigned int txHang) +{ + m_nxdnTXHang = txHang; +} + +void CModem::setM17Params(unsigned int txHang) +{ + m_m17TXHang = txHang; +} + +void CModem::setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist) +{ + m_ax25RXTwist = rxTwist; + m_ax25TXDelay = txDelay; + m_ax25SlotTime = slotTime; + m_ax25PPersist = pPersist; +} + void CModem::setTransparentDataParams(unsigned int sendFrameType) { m_sendTransparentDataFrameType = sendFrameType; @@ -237,15 +355,15 @@ bool CModem::open() { ::LogMessage("Opening the MMDVM"); - bool ret = m_serial->open(); + bool ret = m_port->open(); if (!ret) return false; ret = readVersion(); if (!ret) { - m_serial->close(); - delete m_serial; - m_serial = NULL; + m_port->close(); + delete m_port; + m_port = NULL; return false; } else { /* Stopping the inactivity timer here when a firmware version has been @@ -255,20 +373,56 @@ bool CModem::open() ret = setFrequency(); if (!ret) { - m_serial->close(); - delete m_serial; - m_serial = NULL; + m_port->close(); + delete m_port; + m_port = NULL; return false; } - ret = setConfig(); + ret = writeConfig(); if (!ret) { - m_serial->close(); - delete m_serial; - m_serial = NULL; + m_port->close(); + delete m_port; + m_port = NULL; return false; } + if (m_fmEnabled) { + ret = setFMCallsignParams(); + if (!ret) { + m_port->close(); + delete m_port; + m_port = NULL; + return false; + } + + ret = setFMAckParams(); + if (!ret) { + m_port->close(); + delete m_port; + m_port = NULL; + return false; + } + + ret = setFMMiscParams(); + if (!ret) { + m_port->close(); + delete m_port; + m_port = NULL; + return false; + } + + if (m_fmExtEnable) { + ret = setFMExtParams(); + if (!ret) { + m_port->close(); + delete m_port; + m_port = NULL; + return false; + } + } + } + m_statusTimer.start(); m_error = false; @@ -279,7 +433,7 @@ bool CModem::open() void CModem::clock(unsigned int ms) { - assert(m_serial != NULL); + assert(m_port != NULL); // Poll the modem status every 250ms m_statusTimer.clock(ms); @@ -307,18 +461,18 @@ void CModem::clock(unsigned int ms) // Nothing to do } else { // type == RTM_OK - switch (m_buffer[2U]) { + switch (m_type) { case MMDVM_DSTAR_HEADER: { if (m_trace) CUtils::dump(1U, "RX D-Star Header", m_buffer, m_length); - unsigned char data = m_length - 2U; + unsigned char data = m_length - m_offset + 1U; m_rxDStarData.addData(&data, 1U); data = TAG_HEADER; m_rxDStarData.addData(&data, 1U); - m_rxDStarData.addData(m_buffer + 3U, m_length - 3U); + m_rxDStarData.addData(m_buffer + m_offset, m_length - m_offset); } break; @@ -326,13 +480,13 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX D-Star Data", m_buffer, m_length); - unsigned char data = m_length - 2U; + unsigned char data = m_length - m_offset + 1U; m_rxDStarData.addData(&data, 1U); data = TAG_DATA; m_rxDStarData.addData(&data, 1U); - m_rxDStarData.addData(m_buffer + 3U, m_length - 3U); + m_rxDStarData.addData(m_buffer + m_offset, m_length - m_offset); } break; @@ -364,7 +518,7 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX DMR Data 1", m_buffer, m_length); - unsigned char data = m_length - 2U; + unsigned char data = m_length - m_offset + 1U; m_rxDMRData1.addData(&data, 1U); if (m_buffer[3U] == (DMR_SYNC_DATA | DT_TERMINATOR_WITH_LC)) @@ -373,7 +527,7 @@ void CModem::clock(unsigned int ms) data = TAG_DATA; m_rxDMRData1.addData(&data, 1U); - m_rxDMRData1.addData(m_buffer + 3U, m_length - 3U); + m_rxDMRData1.addData(m_buffer + m_offset, m_length - m_offset); } break; @@ -381,7 +535,7 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX DMR Data 2", m_buffer, m_length); - unsigned char data = m_length - 2U; + unsigned char data = m_length - m_offset + 1U; m_rxDMRData2.addData(&data, 1U); if (m_buffer[3U] == (DMR_SYNC_DATA | DT_TERMINATOR_WITH_LC)) @@ -390,7 +544,7 @@ void CModem::clock(unsigned int ms) data = TAG_DATA; m_rxDMRData2.addData(&data, 1U); - m_rxDMRData2.addData(m_buffer + 3U, m_length - 3U); + m_rxDMRData2.addData(m_buffer + m_offset, m_length - m_offset); } break; @@ -422,13 +576,13 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX YSF Data", m_buffer, m_length); - unsigned char data = m_length - 2U; + unsigned char data = m_length - m_offset + 1U; m_rxYSFData.addData(&data, 1U); data = TAG_DATA; m_rxYSFData.addData(&data, 1U); - m_rxYSFData.addData(m_buffer + 3U, m_length - 3U); + m_rxYSFData.addData(m_buffer + m_offset, m_length - m_offset); } break; @@ -448,13 +602,13 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX P25 Header", m_buffer, m_length); - unsigned char data = m_length - 2U; + unsigned char data = m_length - m_offset + 1U; m_rxP25Data.addData(&data, 1U); data = TAG_HEADER; m_rxP25Data.addData(&data, 1U); - m_rxP25Data.addData(m_buffer + 3U, m_length - 3U); + m_rxP25Data.addData(m_buffer + m_offset, m_length - m_offset); } break; @@ -462,13 +616,13 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX P25 LDU", m_buffer, m_length); - unsigned char data = m_length - 2U; + unsigned char data = m_length - m_offset + 1U; m_rxP25Data.addData(&data, 1U); data = TAG_DATA; m_rxP25Data.addData(&data, 1U); - m_rxP25Data.addData(m_buffer + 3U, m_length - 3U); + m_rxP25Data.addData(m_buffer + m_offset, m_length - m_offset); } break; @@ -488,13 +642,13 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX NXDN Data", m_buffer, m_length); - unsigned char data = m_length - 2U; + unsigned char data = m_length - m_offset + 1U; m_rxNXDNData.addData(&data, 1U); data = TAG_DATA; m_rxNXDNData.addData(&data, 1U); - m_rxNXDNData.addData(m_buffer + 3U, m_length - 3U); + m_rxNXDNData.addData(m_buffer + m_offset, m_length - m_offset); } break; @@ -510,51 +664,207 @@ void CModem::clock(unsigned int ms) } break; - case MMDVM_GET_STATUS: { - // if (m_trace) - // CUtils::dump(1U, "GET_STATUS", m_buffer, m_length); + case MMDVM_M17_LINK_SETUP: { + if (m_trace) + CUtils::dump(1U, "RX M17 Link Setup", m_buffer, m_length); - m_p25Space = 0U; - m_nxdnSpace = 0U; - m_pocsagSpace = 0U; + unsigned char data = m_length - 2U; + m_rxM17Data.addData(&data, 1U); + + data = TAG_HEADER; + m_rxM17Data.addData(&data, 1U); + + m_rxM17Data.addData(m_buffer + 3U, m_length - 3U); + } + break; + + case MMDVM_M17_STREAM: { + if (m_trace) + CUtils::dump(1U, "RX M17 Stream Data", m_buffer, m_length); + + unsigned char data = m_length - 2U; + m_rxM17Data.addData(&data, 1U); + + data = TAG_DATA; + m_rxM17Data.addData(&data, 1U); + + m_rxM17Data.addData(m_buffer + 3U, m_length - 3U); + } + break; + + case MMDVM_M17_EOT: { + if (m_trace) + CUtils::dump(1U, "RX M17 EOT", m_buffer, m_length); + + unsigned char data = 1U; + m_rxM17Data.addData(&data, 1U); + + data = TAG_EOT; + m_rxM17Data.addData(&data, 1U); + } + break; + + case MMDVM_M17_LOST: { + if (m_trace) + CUtils::dump(1U, "RX M17 Lost", m_buffer, m_length); - m_tx = (m_buffer[5U] & 0x01U) == 0x01U; + unsigned char data = 1U; + m_rxM17Data.addData(&data, 1U); + + data = TAG_LOST; + m_rxM17Data.addData(&data, 1U); + } + break; + + case MMDVM_FM_DATA: { + if (m_trace) + CUtils::dump(1U, "RX FM Data", m_buffer, m_length); + + unsigned int data1 = m_length - m_offset + 1U; + m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); + + unsigned char data2 = TAG_DATA; + m_rxFMData.addData(&data2, 1U); + + m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); + } + break; + + case MMDVM_FM_CONTROL: { + if (m_trace) + CUtils::dump(1U, "RX FM Control", m_buffer, m_length); + + unsigned int data1 = m_length - m_offset + 1U; + m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); + + unsigned char data2= TAG_HEADER; + m_rxFMData.addData(&data2, 1U); - bool adcOverflow = (m_buffer[5U] & 0x02U) == 0x02U; - if (adcOverflow) - LogError("MMDVM ADC levels have overflowed"); + m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); + } + break; - bool rxOverflow = (m_buffer[5U] & 0x04U) == 0x04U; - if (rxOverflow) - LogError("MMDVM RX buffer has overflowed"); + case MMDVM_FM_EOT: { + if(m_trace) + CUtils::dump(1U, "RX FM End of transmission", m_buffer, m_length); - bool txOverflow = (m_buffer[5U] & 0x08U) == 0x08U; - if (txOverflow) - LogError("MMDVM TX buffer has overflowed"); + unsigned int data1 = m_length - m_offset + 1U; + m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); - m_lockout = (m_buffer[5U] & 0x10U) == 0x10U; + unsigned char data2 = TAG_EOT; + m_rxFMData.addData(&data2, 1U); - bool dacOverflow = (m_buffer[5U] & 0x20U) == 0x20U; - if (dacOverflow) - LogError("MMDVM DAC levels have overflowed"); + m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); + } + break; - m_cd = (m_buffer[5U] & 0x40U) == 0x40U; + case MMDVM_AX25_DATA: { + if (m_trace) + CUtils::dump(1U, "RX AX.25 Data", m_buffer, m_length); - m_dstarSpace = m_buffer[6U]; - m_dmrSpace1 = m_buffer[7U]; - m_dmrSpace2 = m_buffer[8U]; - m_ysfSpace = m_buffer[9U]; + unsigned int data = m_length - m_offset; + m_rxAX25Data.addData((unsigned char*)&data, sizeof(unsigned int)); - if (m_length > 10U) - m_p25Space = m_buffer[10U]; - if (m_length > 11U) - m_nxdnSpace = m_buffer[11U]; - if (m_length > 12U) - m_pocsagSpace = m_buffer[12U]; + m_rxAX25Data.addData(m_buffer + m_offset, m_length - m_offset); + } + break; - m_inactivityTimer.start(); - // LogMessage("status=%02X, tx=%d, space=%u,%u,%u,%u,%u,%u,%u lockout=%d, cd=%d", m_buffer[5U], int(m_tx), m_dstarSpace, m_dmrSpace1, m_dmrSpace2, m_ysfSpace, m_p25Space, m_nxdnSpace, m_pocsagSpace, int(m_lockout), int(m_cd)); + case MMDVM_GET_STATUS: + // if (m_trace) + // CUtils::dump(1U, "GET_STATUS", m_buffer, m_length); + + switch (m_protocolVersion) { + case 1U: { + m_mode = m_buffer[m_offset + 1U]; + + m_tx = (m_buffer[m_offset + 2U] & 0x01U) == 0x01U; + bool adcOverflow = (m_buffer[m_offset + 2U] & 0x02U) == 0x02U; + if (adcOverflow) + LogError("MMDVM ADC levels have overflowed"); + bool rxOverflow = (m_buffer[m_offset + 2U] & 0x04U) == 0x04U; + if (rxOverflow) + LogError("MMDVM RX buffer has overflowed"); + bool txOverflow = (m_buffer[m_offset + 2U] & 0x08U) == 0x08U; + if (txOverflow) + LogError("MMDVM TX buffer has overflowed"); + m_lockout = (m_buffer[m_offset + 2U] & 0x10U) == 0x10U; + bool dacOverflow = (m_buffer[m_offset + 2U] & 0x20U) == 0x20U; + if (dacOverflow) + LogError("MMDVM DAC levels have overflowed"); + m_cd = (m_buffer[m_offset + 2U] & 0x40U) == 0x40U; + + m_p25Space = 0U; + m_nxdnSpace = 0U; + m_m17Space = 0U; + m_pocsagSpace = 0U; + m_fmSpace = 0U; + m_ax25Space = 0U; + + m_dstarSpace = m_buffer[m_offset + 3U]; + m_dmrSpace1 = m_buffer[m_offset + 4U]; + m_dmrSpace2 = m_buffer[m_offset + 5U]; + m_ysfSpace = m_buffer[m_offset + 6U]; + + // The following depend on the version of the firmware + if (m_length > (m_offset + 7U)) + m_p25Space = m_buffer[m_offset + 7U]; + if (m_length > (m_offset + 8U)) + m_nxdnSpace = m_buffer[m_offset + 8U]; + if (m_length > (m_offset + 9U)) + m_pocsagSpace = m_buffer[m_offset + 9U]; + if (m_length > (m_offset + 10U)) + m_m17Space = m_buffer[m_offset + 10U]; + } + break; + + case 2U: { + m_mode = m_buffer[m_offset + 0U]; + + m_tx = (m_buffer[m_offset + 1U] & 0x01U) == 0x01U; + bool adcOverflow = (m_buffer[m_offset + 1U] & 0x02U) == 0x02U; + if (adcOverflow) + LogError("MMDVM ADC levels have overflowed"); + bool rxOverflow = (m_buffer[m_offset + 1U] & 0x04U) == 0x04U; + if (rxOverflow) + LogError("MMDVM RX buffer has overflowed"); + bool txOverflow = (m_buffer[m_offset + 1U] & 0x08U) == 0x08U; + if (txOverflow) + LogError("MMDVM TX buffer has overflowed"); + m_lockout = (m_buffer[m_offset + 1U] & 0x10U) == 0x10U; + bool dacOverflow = (m_buffer[m_offset + 1U] & 0x20U) == 0x20U; + if (dacOverflow) + LogError("MMDVM DAC levels have overflowed"); + m_cd = (m_buffer[m_offset + 1U] & 0x40U) == 0x40U; + + m_dstarSpace = m_buffer[m_offset + 3U]; + m_dmrSpace1 = m_buffer[m_offset + 4U]; + m_dmrSpace2 = m_buffer[m_offset + 5U]; + m_ysfSpace = m_buffer[m_offset + 6U]; + m_p25Space = m_buffer[m_offset + 7U]; + m_nxdnSpace = m_buffer[m_offset + 8U]; + m_m17Space = m_buffer[m_offset + 9U]; + m_fmSpace = m_buffer[m_offset + 10U]; + m_pocsagSpace = m_buffer[m_offset + 11U]; + m_ax25Space = m_buffer[m_offset + 12U]; + } + break; + + default: + m_dstarSpace = 0U; + m_dmrSpace1 = 0U; + m_dmrSpace2 = 0U; + m_ysfSpace = 0U; + m_p25Space = 0U; + m_nxdnSpace = 0U; + m_m17Space = 0U; + m_pocsagSpace = 0U; + m_fmSpace = 0U; + m_ax25Space = 0U; + break; } + + m_inactivityTimer.start(); + // LogMessage("status=%02X, tx=%d, space=%u,%u,%u,%u,%u,%u,%u,%u,%u,%u lockout=%d, cd=%d", m_buffer[m_offset + 2U], int(m_tx), m_dstarSpace, m_dmrSpace1, m_dmrSpace2, m_ysfSpace, m_p25Space, m_nxdnSpace, m_m17Space, m_pocsagSpace, m_fmSpace, m_ax25Space, int(m_lockout), int(m_cd)); break; case MMDVM_TRANSPARENT: { @@ -563,10 +873,10 @@ void CModem::clock(unsigned int ms) unsigned char offset = m_sendTransparentDataFrameType; if (offset > 1U) offset = 1U; - unsigned char data = m_length - 3U + offset; + unsigned char data = m_length - m_offset + offset; m_rxTransparentData.addData(&data, 1U); - m_rxTransparentData.addData(m_buffer + 3U - offset, m_length - 3U + offset); + m_rxTransparentData.addData(m_buffer + m_offset - offset, m_length - m_offset + offset); } break; @@ -576,7 +886,7 @@ void CModem::clock(unsigned int ms) break; case MMDVM_NAK: - LogWarning("Received a NAK from the MMDVM, command = 0x%02X, reason = %u", m_buffer[3U], m_buffer[4U]); + LogWarning("Received a NAK from the MMDVM, command = 0x%02X, reason = %u", m_buffer[m_offset], m_buffer[m_offset + 1U]); break; case MMDVM_DEBUG1: @@ -584,26 +894,18 @@ void CModem::clock(unsigned int ms) case MMDVM_DEBUG3: case MMDVM_DEBUG4: case MMDVM_DEBUG5: + case MMDVM_DEBUG_DUMP: printDebug(); break; - case MMDVM_SERIAL: - //MMDVMHost does not process serial data from the display, - // so we send it to the transparent port if sendFrameType==1 - if (m_sendTransparentDataFrameType > 0U) { - if (m_trace) - CUtils::dump(1U, "RX Serial Data", m_buffer, m_length); - - unsigned char offset = m_sendTransparentDataFrameType; - if (offset > 1U) offset = 1U; - unsigned char data = m_length - 3U + offset; - m_rxTransparentData.addData(&data, 1U); + case MMDVM_SERIAL_DATA: + if (m_trace) + CUtils::dump(1U, "RX Serial Data", m_buffer, m_length); + m_rxSerialData.addData(m_buffer + m_offset, m_length - m_offset); + break; - m_rxTransparentData.addData(m_buffer + 3U - offset, m_length - 3U + offset); - break; //only break when sendFrameType>0, else message is unknown - } default: - LogMessage("Unknown message, type: %02X", m_buffer[2U]); + LogMessage("Unknown message, type: %02X", m_type); CUtils::dump("Buffer dump", m_buffer, m_length); break; } @@ -643,7 +945,7 @@ void CModem::clock(unsigned int ms) break; } - int ret = m_serial->write(m_buffer, len); + int ret = m_port->write(m_buffer, len); if (ret != int(len)) LogWarning("Error when writing D-Star data to the MMDVM"); @@ -659,7 +961,7 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "TX DMR Data 1", m_buffer, len); - int ret = m_serial->write(m_buffer, len); + int ret = m_port->write(m_buffer, len); if (ret != int(len)) LogWarning("Error when writing DMR data to the MMDVM"); @@ -676,7 +978,7 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "TX DMR Data 2", m_buffer, len); - int ret = m_serial->write(m_buffer, len); + int ret = m_port->write(m_buffer, len); if (ret != int(len)) LogWarning("Error when writing DMR data to the MMDVM"); @@ -693,7 +995,7 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "TX YSF Data", m_buffer, len); - int ret = m_serial->write(m_buffer, len); + int ret = m_port->write(m_buffer, len); if (ret != int(len)) LogWarning("Error when writing YSF data to the MMDVM"); @@ -714,7 +1016,7 @@ void CModem::clock(unsigned int ms) CUtils::dump(1U, "TX P25 LDU", m_buffer, len); } - int ret = m_serial->write(m_buffer, len); + int ret = m_port->write(m_buffer, len); if (ret != int(len)) LogWarning("Error when writing P25 data to the MMDVM"); @@ -731,7 +1033,7 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "TX NXDN Data", m_buffer, len); - int ret = m_serial->write(m_buffer, len); + int ret = m_port->write(m_buffer, len); if (ret != int(len)) LogWarning("Error when writing NXDN data to the MMDVM"); @@ -740,6 +1042,34 @@ void CModem::clock(unsigned int ms) m_nxdnSpace--; } + if (m_m17Space > 1U && !m_txM17Data.isEmpty()) { + unsigned char len = 0U; + m_txM17Data.getData(&len, 1U); + m_txM17Data.getData(m_buffer, len); + + if (m_trace) { + switch (m_buffer[2U]) { + case MMDVM_M17_LINK_SETUP: + CUtils::dump(1U, "TX M17 Link Setup", m_buffer, len); + break; + case MMDVM_M17_STREAM: + CUtils::dump(1U, "TX M17 Stream Data", m_buffer, len); + break; + case MMDVM_M17_EOT: + CUtils::dump(1U, "TX M17 EOT", m_buffer, len); + break; + } + } + + int ret = m_port->write(m_buffer, len); + if (ret != int(len)) + LogWarning("Error when writing M17 data to the MMDVM"); + + m_playoutTimer.start(); + + m_m17Space--; + } + if (m_pocsagSpace > 1U && !m_txPOCSAGData.isEmpty()) { unsigned char len = 0U; m_txPOCSAGData.getData(&len, 1U); @@ -748,7 +1078,7 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "TX POCSAG Data", m_buffer, len); - int ret = m_serial->write(m_buffer, len); + int ret = m_port->write(m_buffer, len); if (ret != int(len)) LogWarning("Error when writing POCSAG data to the MMDVM"); @@ -757,6 +1087,44 @@ void CModem::clock(unsigned int ms) m_pocsagSpace--; } + if (m_fmSpace > 1U && !m_txFMData.isEmpty()) { + unsigned int len = 0U; + m_txFMData.getData((unsigned char*)&len, sizeof(unsigned int)); + m_txFMData.getData(m_buffer, len); + + if (m_trace) { + if (m_buffer[2U] == MMDVM_FM_CONTROL) + CUtils::dump(1U, "TX FM Control", m_buffer, len); + else + CUtils::dump(1U, "TX FM Data", m_buffer, len); + } + + int ret = m_port->write(m_buffer, len); + if (ret != int(len)) + LogWarning("Error when writing FM data to the MMDVM"); + + m_playoutTimer.start(); + + m_fmSpace--; + } + + if (m_ax25Space > 0U && !m_txAX25Data.isEmpty()) { + unsigned int len = 0U; + m_txAX25Data.getData((unsigned char*)&len, sizeof(unsigned int)); + m_txAX25Data.getData(m_buffer, len); + + if (m_trace) + CUtils::dump(1U, "TX AX.25 Data", m_buffer, len); + + int ret = m_port->write(m_buffer, len); + if (ret != int(len)) + LogWarning("Error when writing AX.25 data to the MMDVM"); + + m_playoutTimer.start(); + + m_ax25Space = 0U; + } + if (!m_txTransparentData.isEmpty()) { unsigned char len = 0U; m_txTransparentData.getData(&len, 1U); @@ -765,19 +1133,32 @@ void CModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "TX Transparent Data", m_buffer, len); - int ret = m_serial->write(m_buffer, len); + int ret = m_port->write(m_buffer, len); if (ret != int(len)) LogWarning("Error when writing Transparent data to the MMDVM"); } + + if (!m_txSerialData.isEmpty()) { + unsigned char len = 0U; + m_txSerialData.getData(&len, 1U); + m_txSerialData.getData(m_buffer, len); + + if (m_trace) + CUtils::dump(1U, "TX Serial Data", m_buffer, len); + + int ret = m_port->write(m_buffer, len); + if (ret != int(len)) + LogWarning("Error when writing Serial data to the MMDVM"); + } } void CModem::close() { - assert(m_serial != NULL); + assert(m_port != NULL); ::LogMessage("Closing the MMDVM"); - m_serial->close(); + m_port->close(); } unsigned int CModem::readDStarData(unsigned char* data) @@ -864,6 +1245,48 @@ unsigned int CModem::readNXDNData(unsigned char* data) return len; } +unsigned int CModem::readM17Data(unsigned char* data) +{ + assert(data != NULL); + + if (m_rxM17Data.isEmpty()) + return 0U; + + unsigned char len = 0U; + m_rxM17Data.getData(&len, 1U); + m_rxM17Data.getData(data, len); + + return len; +} + +unsigned int CModem::readFMData(unsigned char* data) +{ + assert(data != NULL); + + if (m_rxFMData.isEmpty()) + return 0U; + + unsigned int len = 0U; + m_rxFMData.getData((unsigned char*)&len, sizeof(unsigned int)); + m_rxFMData.getData(data, len); + + return len; +} + +unsigned int CModem::readAX25Data(unsigned char* data) +{ + assert(data != NULL); + + if (m_rxAX25Data.isEmpty()) + return 0U; + + unsigned int len = 0U; + m_rxAX25Data.getData((unsigned char*)&len, sizeof(unsigned int)); + m_rxAX25Data.getData(data, len); + + return len; +} + unsigned int CModem::readTransparentData(unsigned char* data) { assert(data != NULL); @@ -878,13 +1301,18 @@ unsigned int CModem::readTransparentData(unsigned char* data) return len; } -// To be implemented later if needed unsigned int CModem::readSerial(unsigned char* data, unsigned int length) { assert(data != NULL); assert(length > 0U); - return 0U; + unsigned int n = 0U; + while (!m_rxSerialData.isEmpty() && n < length) { + m_rxSerialData.getData(data + n, 1U); + n++; + } + + return n; } bool CModem::hasDStarSpace() const @@ -1078,6 +1506,47 @@ bool CModem::writeNXDNData(const unsigned char* data, unsigned int length) return true; } +bool CModem::hasM17Space() const +{ + unsigned int space = m_txM17Data.freeSpace() / (M17_FRAME_LENGTH_BYTES + 4U); + + return space > 1U; +} + +bool CModem::writeM17Data(const unsigned char* data, unsigned int length) +{ + assert(data != NULL); + assert(length > 0U); + + unsigned char buffer[130U]; + + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = length + 2U; + + switch (data[0U]) { + case TAG_HEADER: + buffer[2U] = MMDVM_M17_LINK_SETUP; + ::memcpy(buffer + 3U, data + 1U, length - 1U); + break; + case TAG_DATA: + buffer[2U] = MMDVM_M17_STREAM; + ::memcpy(buffer + 3U, data + 1U, length - 1U); + break; + case TAG_EOT: + buffer[2U] = MMDVM_M17_EOT; + ::memcpy(buffer + 3U, data + 1U, length - 1U); + break; + default: + return false; + } + + unsigned char len = length + 2U; + m_txM17Data.addData(&len, 1U); + m_txM17Data.addData(buffer, len); + + return true; +} + bool CModem::hasPOCSAGSpace() const { unsigned int space = m_txPOCSAGData.freeSpace() / (POCSAG_FRAME_LENGTH_BYTES + 4U); @@ -1105,6 +1574,76 @@ bool CModem::writePOCSAGData(const unsigned char* data, unsigned int length) return true; } +unsigned int CModem::getFMSpace() const +{ + return m_txFMData.freeSpace(); +} + +bool CModem::writeFMData(const unsigned char* data, unsigned int length) +{ + assert(data != NULL); + assert(length > 0U); + + unsigned char buffer[500U]; + + unsigned int len; + if (length > 252U) { + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = 0U; + buffer[2U] = (length + 4U) - 255U; + buffer[3U] = MMDVM_FM_DATA; + ::memcpy(buffer + 4U, data, length); + len = length + 4U; + } else { + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = length + 3U; + buffer[2U] = MMDVM_FM_DATA; + ::memcpy(buffer + 3U, data, length); + len = length + 3U; + } + + m_txFMData.addData((unsigned char*)&len, sizeof(unsigned int)); + m_txFMData.addData(buffer, len); + + return true; +} + +bool CModem::hasAX25Space() const +{ + unsigned int space = m_txAX25Data.freeSpace() / (AX25_MAX_FRAME_LENGTH_BYTES + 5U); + + return space > 1U; +} + +bool CModem::writeAX25Data(const unsigned char* data, unsigned int length) +{ + assert(data != NULL); + assert(length > 0U); + + unsigned char buffer[500U]; + + unsigned int len; + if (length > 252U) { + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = 0U; + buffer[2U] = (length + 4U) - 255U; + buffer[3U] = MMDVM_AX25_DATA; + ::memcpy(buffer + 4U, data, length); + len = length + 4U; + } else { + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = length + 3U; + buffer[2U] = MMDVM_AX25_DATA; + ::memcpy(buffer + 3U, data, length); + len = length + 3U; + } + + m_txAX25Data.addData((unsigned char*)&len, sizeof(unsigned int)); + m_txAX25Data.addData(buffer, len); + + return true; +} + bool CModem::writeTransparentData(const unsigned char* data, unsigned int length) { assert(data != NULL); @@ -1141,7 +1680,7 @@ bool CModem::writeTransparentData(const unsigned char* data, unsigned int length bool CModem::writeDStarInfo(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) { - assert(m_serial != NULL); + assert(m_port != NULL); assert(my1 != NULL); assert(my2 != NULL); assert(your != NULL); @@ -1165,12 +1704,12 @@ bool CModem::writeDStarInfo(const char* my1, const char* my2, const char* your, ::memcpy(buffer + 25U, reflector, DSTAR_LONG_CALLSIGN_LENGTH); - return m_serial->write(buffer, 33U) != 33; + return m_port->write(buffer, 33U) != 33; } bool CModem::writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dest, const char* type) { - assert(m_serial != NULL); + assert(m_port != NULL); assert(type != NULL); unsigned char buffer[50U]; @@ -1191,21 +1730,21 @@ bool CModem::writeDMRInfo(unsigned int slotNo, const std::string& src, bool grou ::memcpy(buffer + 46U, type, 1U); - return m_serial->write(buffer, 47U) != 47; + return m_port->write(buffer, 47U) != 47; } -bool CModem::writeYSFInfo(const char* source, const char* dest, const char* type, const char* origin) +bool CModem::writeYSFInfo(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { - assert(m_serial != NULL); + assert(m_port != NULL); assert(source != NULL); assert(dest != NULL); assert(type != NULL); assert(origin != NULL); - unsigned char buffer[50U]; + unsigned char buffer[40U]; buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = 35U; + buffer[1U] = 36U; buffer[2U] = MMDVM_QSO_INFO; buffer[3U] = MODE_YSF; @@ -1217,12 +1756,14 @@ bool CModem::writeYSFInfo(const char* source, const char* dest, const char* type ::memcpy(buffer + 25U, origin, YSF_CALLSIGN_LENGTH); - return m_serial->write(buffer, 35U) != 35; + buffer[35U] = dgid; + + return m_port->write(buffer, 36U) != 36; } bool CModem::writeP25Info(const char* source, bool group, unsigned int dest, const char* type) { - assert(m_serial != NULL); + assert(m_port != NULL); assert(source != NULL); assert(type != NULL); @@ -1242,12 +1783,12 @@ bool CModem::writeP25Info(const char* source, bool group, unsigned int dest, con ::memcpy(buffer + 30U, type, 1U); - return m_serial->write(buffer, 31U) != 31; + return m_port->write(buffer, 31U) != 31; } bool CModem::writeNXDNInfo(const char* source, bool group, unsigned int dest, const char* type) { - assert(m_serial != NULL); + assert(m_port != NULL); assert(source != NULL); assert(type != NULL); @@ -1267,70 +1808,96 @@ bool CModem::writeNXDNInfo(const char* source, bool group, unsigned int dest, co ::memcpy(buffer + 30U, type, 1U); - return m_serial->write(buffer, 31U) != 31; + return m_port->write(buffer, 31U) != 31; } -bool CModem::writePOCSAGInfo(unsigned int ric, const std::string& message) +bool CModem::writeM17Info(const char* source, const char* dest, const char* type) { - assert(m_serial != NULL); - - size_t length = message.size(); + assert(m_port != NULL); + assert(source != NULL); + assert(dest != NULL); + assert(type != NULL); - unsigned char buffer[250U]; + unsigned char buffer[40U]; buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = length + 11U; + buffer[1U] = 31U; buffer[2U] = MMDVM_QSO_INFO; - buffer[3U] = MODE_POCSAG; + buffer[3U] = MODE_M17; - ::sprintf((char*)(buffer + 4U), "%07u", ric); // 21-bits + ::sprintf((char*)(buffer + 4U), "%9.9s", source); - ::memcpy(buffer + 11U, message.c_str(), length); + ::sprintf((char*)(buffer + 13U), "%9.9s", dest); - int ret = m_serial->write(buffer, length + 11U); + ::memcpy(buffer + 22U, type, 1U); - return ret != int(length + 11U); + return m_port->write(buffer, 23U) != 23; } -bool CModem::writeIPInfo(const std::string& address) +bool CModem::writePOCSAGInfo(unsigned int ric, const std::string& message) +{ + assert(m_port != NULL); + + size_t length = message.size(); + + unsigned char buffer[250U]; + + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = (unsigned char)length + 11U; + buffer[2U] = MMDVM_QSO_INFO; + + buffer[3U] = MODE_POCSAG; + + ::sprintf((char*)(buffer + 4U), "%07u", ric); // 21-bits + + ::memcpy(buffer + 11U, message.c_str(), length); + + int ret = m_port->write(buffer, (unsigned int)length + 11U); + + return ret != int(length + 11U); +} + +bool CModem::writeIPInfo(const std::string& address) { - assert(m_serial != NULL); + assert(m_port != NULL); size_t length = address.size(); unsigned char buffer[25U]; buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = length + 4U; + buffer[1U] = (unsigned char)length + 4U; buffer[2U] = MMDVM_QSO_INFO; buffer[3U] = 250U; ::memcpy(buffer + 4U, address.c_str(), length); - int ret = m_serial->write(buffer, length + 4U); + int ret = m_port->write(buffer, (unsigned int)length + 4U); return ret != int(length + 4U); } bool CModem::writeSerial(const unsigned char* data, unsigned int length) { - assert(m_serial != NULL); + assert(m_port != NULL); assert(data != NULL); assert(length > 0U); - unsigned char buffer[250U]; + unsigned char buffer[255U]; buffer[0U] = MMDVM_FRAME_START; buffer[1U] = length + 3U; - buffer[2U] = MMDVM_SERIAL; + buffer[2U] = MMDVM_SERIAL_DATA; ::memcpy(buffer + 3U, data, length); - int ret = m_serial->write(buffer, length + 3U); + unsigned char len = length + 3U; + m_txSerialData.addData(&len, 1U); + m_txSerialData.addData(buffer, len); - return ret != int(length + 3U); + return true; } bool CModem::hasTX() const @@ -1353,9 +1920,59 @@ bool CModem::hasError() const return m_error; } +bool CModem::hasDStar() const +{ + return (m_capabilities1 & CAP1_DSTAR) == CAP1_DSTAR; +} + +bool CModem::hasDMR() const +{ + return (m_capabilities1 & CAP1_DMR) == CAP1_DMR; +} + +bool CModem::hasYSF() const +{ + return (m_capabilities1 & CAP1_YSF) == CAP1_YSF; +} + +bool CModem::hasP25() const +{ + return (m_capabilities1 & CAP1_P25) == CAP1_P25; +} + +bool CModem::hasNXDN() const +{ + return (m_capabilities1 & CAP1_NXDN) == CAP1_NXDN; +} + +bool CModem::hasM17() const +{ + return (m_capabilities1 & CAP1_M17) == CAP1_M17; +} + +bool CModem::hasFM() const +{ + return (m_capabilities1 & CAP1_FM) == CAP1_FM; +} + +bool CModem::hasPOCSAG() const +{ + return (m_capabilities2 & CAP2_POCSAG) == CAP2_POCSAG; +} + +bool CModem::hasAX25() const +{ + return (m_capabilities2 & CAP2_AX25) == CAP2_AX25; +} + +unsigned int CModem::getVersion() const +{ + return m_protocolVersion; +} + bool CModem::readVersion() { - assert(m_serial != NULL); + assert(m_port != NULL); CThread::sleep(2000U); // 2s @@ -1368,12 +1985,12 @@ bool CModem::readVersion() // CUtils::dump(1U, "Written", buffer, 3U); - int ret = m_serial->write(buffer, 3U); + int ret = m_port->write(buffer, 3U); if (ret != 3) return false; #if defined(__APPLE__) - m_serial->setNonblock(true); + m_port->setNonblock(true); #endif for (unsigned int count = 0U; count < MAX_RESPONSES; count++) { @@ -1382,6 +1999,8 @@ bool CModem::readVersion() if (resp == RTM_OK && m_buffer[2U] == MMDVM_GET_VERSION) { if (::memcmp(m_buffer + 4U, "MMDVM ", 6U) == 0) m_hwType = HWT_MMDVM; + else if (::memcmp(m_buffer + 23U, "MMDVM ", 6U) == 0) + m_hwType = HWT_MMDVM; else if (::memcmp(m_buffer + 4U, "DVMEGA", 6U) == 0) m_hwType = HWT_DVMEGA; else if (::memcmp(m_buffer + 4U, "ZUMspot", 7U) == 0) @@ -1394,10 +2013,70 @@ bool CModem::readVersion() m_hwType = HWT_NANO_HOTSPOT; else if (::memcmp(m_buffer + 4U, "Nano_DV", 7U) == 0) m_hwType = HWT_NANO_DV; + else if (::memcmp(m_buffer + 4U, "D2RG_MMDVM_HS", 13U) == 0) + m_hwType = HWT_D2RG_MMDVM_HS; else if (::memcmp(m_buffer + 4U, "MMDVM_HS-", 9U) == 0) m_hwType = HWT_MMDVM_HS; + else if (::memcmp(m_buffer + 4U, "OpenGD77_HS", 11U) == 0) + m_hwType = HWT_OPENGD77_HS; + else if (::memcmp(m_buffer + 4U, "SkyBridge", 9U) == 0) + m_hwType = HWT_SKYBRIDGE; + + m_protocolVersion = m_buffer[3U]; + + switch (m_protocolVersion) { + case 1U: + LogInfo("MMDVM protocol version: 1, description: %.*s", m_length - 4U, m_buffer + 4U); + m_capabilities1 = CAP1_DSTAR | CAP1_DMR | CAP1_YSF | CAP1_P25 | CAP1_NXDN | CAP1_M17; + m_capabilities2 = CAP2_POCSAG; + return true; + + case 2U: + LogInfo("MMDVM protocol version: 2, description: %.*s", m_length - 23U, m_buffer + 23U); + switch (m_buffer[6U]) { + case 0U: + LogInfo("CPU: Atmel ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", m_buffer[7U], m_buffer[8U], m_buffer[9U], m_buffer[10U], m_buffer[11U], m_buffer[12U], m_buffer[13U], m_buffer[14U], m_buffer[15U], m_buffer[16U], m_buffer[17U], m_buffer[18U], m_buffer[19U], m_buffer[20U], m_buffer[21U], m_buffer[22U]); + break; + case 1U: + LogInfo("CPU: NXP ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", m_buffer[7U], m_buffer[8U], m_buffer[9U], m_buffer[10U], m_buffer[11U], m_buffer[12U], m_buffer[13U], m_buffer[14U], m_buffer[15U], m_buffer[16U], m_buffer[17U], m_buffer[18U], m_buffer[19U], m_buffer[20U], m_buffer[21U], m_buffer[22U]); + break; + case 2U: + LogInfo("CPU: ST-Micro ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", m_buffer[7U], m_buffer[8U], m_buffer[9U], m_buffer[10U], m_buffer[11U], m_buffer[12U], m_buffer[13U], m_buffer[14U], m_buffer[15U], m_buffer[16U], m_buffer[17U], m_buffer[18U]); + break; + default: + LogInfo("CPU: Unknown type: %u", m_buffer[6U]); + break; + } + m_capabilities1 = m_buffer[4U]; + m_capabilities2 = m_buffer[5U]; + char modeText[100U]; + ::strcpy(modeText, "Modes:"); + if (hasDStar()) + ::strcat(modeText, " D-Star"); + if (hasDMR()) + ::strcat(modeText, " DMR"); + if (hasYSF()) + ::strcat(modeText, " YSF"); + if (hasP25()) + ::strcat(modeText, " P25"); + if (hasNXDN()) + ::strcat(modeText, " NXDN"); + if (hasM17()) + ::strcat(modeText, " M17"); + if (hasFM()) + ::strcat(modeText, " FM"); + if (hasPOCSAG()) + ::strcat(modeText, " POCSAG"); + if (hasAX25()) + ::strcat(modeText, " AX.25"); + LogInfo(modeText); + return true; + + default: + LogError("MMDVM protocol version: %u, unsupported by this version of the MMDVM Host", m_protocolVersion); + return false; + } - LogInfo("MMDVM protocol version: %u, description: %.*s", m_buffer[3U], m_length - 4U, m_buffer + 4U); return true; } } @@ -1412,7 +2091,7 @@ bool CModem::readVersion() bool CModem::readStatus() { - assert(m_serial != NULL); + assert(m_port != NULL); unsigned char buffer[3U]; @@ -1422,18 +2101,30 @@ bool CModem::readStatus() // CUtils::dump(1U, "Written", buffer, 3U); - return m_serial->write(buffer, 3U) == 3; + return m_port->write(buffer, 3U) == 3; +} + +bool CModem::writeConfig() +{ + switch (m_protocolVersion) { + case 1U: + return setConfig1(); + case 2U: + return setConfig2(); + default: + return false; + } } -bool CModem::setConfig() +bool CModem::setConfig1() { - assert(m_serial != NULL); + assert(m_port != NULL); unsigned char buffer[30U]; buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = 21U; + buffer[1U] = 26U; buffer[2U] = MMDVM_SET_CONFIG; @@ -1448,6 +2139,8 @@ bool CModem::setConfig() buffer[3U] |= 0x08U; if (m_debug) buffer[3U] |= 0x10U; + if (m_useCOSAsLockout) + buffer[3U] |= 0x20U; if (!m_duplex) buffer[3U] |= 0x80U; @@ -1464,6 +2157,8 @@ bool CModem::setConfig() buffer[4U] |= 0x10U; if (m_pocsagEnabled) buffer[4U] |= 0x20U; + if (m_m17Enabled) + buffer[4U] |= 0x40U; buffer[5U] = m_txDelay / 10U; // In 10ms units @@ -1493,10 +2188,146 @@ bool CModem::setConfig() buffer[20U] = (unsigned char)(m_pocsagTXLevel * 2.55F + 0.5F); - // CUtils::dump(1U, "Written", buffer, 21U); + buffer[21U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F); + + buffer[22U] = (unsigned char)m_p25TXHang; + + buffer[23U] = (unsigned char)m_nxdnTXHang; + + buffer[24U] = (unsigned char)(m_m17TXLevel * 2.55F + 0.5F); - int ret = m_serial->write(buffer, 21U); - if (ret != 21) + buffer[25U] = (unsigned char)m_m17TXHang; + + // CUtils::dump(1U, "Written", buffer, 26U); + + int ret = m_port->write(buffer, 26U); + if (ret != 26) + return false; + + unsigned int count = 0U; + RESP_TYPE_MMDVM resp; + do { + CThread::sleep(10U); + + resp = getResponse(); + if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) { + count++; + if (count >= MAX_RESPONSES) { + LogError("The MMDVM is not responding to the SET_CONFIG command"); + return false; + } + } + } while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK); + + // CUtils::dump(1U, "Response", m_buffer, m_length); + + if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) { + LogError("Received a NAK to the SET_CONFIG command from the modem"); + return false; + } + + m_playoutTimer.start(); + + return true; +} + +bool CModem::setConfig2() +{ + assert(m_port != NULL); + + unsigned char buffer[50U]; + + buffer[0U] = MMDVM_FRAME_START; + + buffer[1U] = 40U; + + buffer[2U] = MMDVM_SET_CONFIG; + + buffer[3U] = 0x00U; + if (m_rxInvert) + buffer[3U] |= 0x01U; + if (m_txInvert) + buffer[3U] |= 0x02U; + if (m_pttInvert) + buffer[3U] |= 0x04U; + if (m_ysfLoDev) + buffer[3U] |= 0x08U; + if (m_debug) + buffer[3U] |= 0x10U; + if (m_useCOSAsLockout) + buffer[3U] |= 0x20U; + if (!m_duplex) + buffer[3U] |= 0x80U; + + buffer[4U] = 0x00U; + if (m_dstarEnabled) + buffer[4U] |= 0x01U; + if (m_dmrEnabled) + buffer[4U] |= 0x02U; + if (m_ysfEnabled) + buffer[4U] |= 0x04U; + if (m_p25Enabled) + buffer[4U] |= 0x08U; + if (m_nxdnEnabled) + buffer[4U] |= 0x10U; + if (m_fmEnabled) + buffer[4U] |= 0x20U; + if (m_m17Enabled) + buffer[4U] |= 0x40U; + + buffer[5U] = 0x00U; + if (m_pocsagEnabled) + buffer[5U] |= 0x01U; + if (m_ax25Enabled) + buffer[5U] |= 0x02U; + + buffer[6U] = m_txDelay / 10U; // In 10ms units + + buffer[7U] = MODE_IDLE; + + buffer[8U] = (unsigned char)(m_txDCOffset + 128); + buffer[9U] = (unsigned char)(m_rxDCOffset + 128); + + buffer[10U] = (unsigned char)(m_rxLevel * 2.55F + 0.5F); + + buffer[11U] = (unsigned char)(m_cwIdTXLevel * 2.55F + 0.5F); + buffer[12U] = (unsigned char)(m_dstarTXLevel * 2.55F + 0.5F); + buffer[13U] = (unsigned char)(m_dmrTXLevel * 2.55F + 0.5F); + buffer[14U] = (unsigned char)(m_ysfTXLevel * 2.55F + 0.5F); + buffer[15U] = (unsigned char)(m_p25TXLevel * 2.55F + 0.5F); + buffer[16U] = (unsigned char)(m_nxdnTXLevel * 2.55F + 0.5F); + buffer[17U] = (unsigned char)(m_m17TXLevel * 2.55F + 0.5F); + buffer[18U] = (unsigned char)(m_pocsagTXLevel * 2.55F + 0.5F); + buffer[19U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F); + buffer[20U] = (unsigned char)(m_ax25TXLevel * 2.55F + 0.5F); + buffer[21U] = 0x00U; + buffer[22U] = 0x00U; + + buffer[23U] = (unsigned char)m_ysfTXHang; + buffer[24U] = (unsigned char)m_p25TXHang; + buffer[25U] = (unsigned char)m_nxdnTXHang; + buffer[26U] = (unsigned char)m_m17TXHang; + buffer[27U] = 0x00U; + buffer[28U] = 0x00U; + + buffer[29U] = m_dmrColorCode; + buffer[30U] = m_dmrDelay; + + buffer[31U] = (unsigned char)(m_ax25RXTwist + 128); + buffer[32U] = m_ax25TXDelay / 10U; // In 10ms units + buffer[33U] = m_ax25SlotTime / 10U; // In 10ms units + buffer[34U] = m_ax25PPersist; + + buffer[35U] = 0x00U; + buffer[36U] = 0x00U; + buffer[37U] = 0x00U; + buffer[38U] = 0x00U; + buffer[39U] = 0x00U; + + // CUtils::dump(1U, "Written", buffer, 40U); + + int ret = m_port->write(buffer, 40U); + if (ret != 40) return false; unsigned int count = 0U; @@ -1528,7 +2359,7 @@ bool CModem::setConfig() bool CModem::setFrequency() { - assert(m_serial != NULL); + assert(m_port != NULL); unsigned char buffer[20U]; unsigned char len; @@ -1570,7 +2401,7 @@ bool CModem::setFrequency() // CUtils::dump(1U, "Written", buffer, len); - int ret = m_serial->write(buffer, len); + int ret = m_port->write(buffer, len); if (ret != len) return false; @@ -1601,11 +2432,11 @@ bool CModem::setFrequency() RESP_TYPE_MMDVM CModem::getResponse() { - assert(m_serial != NULL); + assert(m_port != NULL); - if (m_offset == 0U) { + if (m_state == SS_START) { // Get the start of the frame or nothing at all - int ret = m_serial->read(m_buffer + 0U, 1U); + int ret = m_port->read(m_buffer + 0U, 1U); if (ret < 0) { LogError("Error when reading from the modem"); return RTM_ERROR; @@ -1617,68 +2448,71 @@ RESP_TYPE_MMDVM CModem::getResponse() if (m_buffer[0U] != MMDVM_FRAME_START) return RTM_TIMEOUT; - m_offset = 1U; + m_state = SS_LENGTH1; + m_length = 1U; } - if (m_offset == 1U) { - // Get the length of the frame - int ret = m_serial->read(m_buffer + 1U, 1U); + if (m_state == SS_LENGTH1) { + // Get the length of the frame, 1/2 + int ret = m_port->read(m_buffer + 1U, 1U); if (ret < 0) { LogError("Error when reading from the modem"); - m_offset = 0U; + m_state = SS_START; return RTM_ERROR; } if (ret == 0) return RTM_TIMEOUT; - if (m_buffer[1U] >= 250U) { - LogError("Invalid length received from the modem - %u", m_buffer[1U]); - m_offset = 0U; - return RTM_ERROR; - } - m_length = m_buffer[1U]; m_offset = 2U; + + if (m_length == 0U) + m_state = SS_LENGTH2; + else + m_state = SS_TYPE; } - if (m_offset == 2U) { - // Get the frame type - int ret = m_serial->read(m_buffer + 2U, 1U); + if (m_state == SS_LENGTH2) { + // Get the length of the frane, 2/2 + int ret = m_port->read(m_buffer + 2U, 1U); if (ret < 0) { LogError("Error when reading from the modem"); - m_offset = 0U; + m_state = SS_START; return RTM_ERROR; } if (ret == 0) return RTM_TIMEOUT; + m_length = m_buffer[2U] + 255U; m_offset = 3U; + m_state = SS_TYPE; } - if (m_offset >= 3U) { - // Use later two byte length field - if (m_length == 0U) { - int ret = m_serial->read(m_buffer + 3U, 2U); - if (ret < 0) { - LogError("Error when reading from the modem"); - m_offset = 0U; - return RTM_ERROR; - } + if (m_state == SS_TYPE) { + // Get the frame type + int ret = m_port->read(&m_type, 1U); + if (ret < 0) { + LogError("Error when reading from the modem"); + m_state = SS_START; + return RTM_ERROR; + } - if (ret == 0) - return RTM_TIMEOUT; + if (ret == 0) + return RTM_TIMEOUT; - m_length = (m_buffer[3U] << 8) | m_buffer[4U]; - m_offset = 5U; - } + m_buffer[m_offset++] = m_type; + + m_state = SS_DATA; + } + if (m_state == SS_DATA) { while (m_offset < m_length) { - int ret = m_serial->read(m_buffer + m_offset, m_length - m_offset); + int ret = m_port->read(m_buffer + m_offset, m_length - m_offset); if (ret < 0) { LogError("Error when reading from the modem"); - m_offset = 0U; + m_state = SS_START; return RTM_ERROR; } @@ -1690,10 +2524,11 @@ RESP_TYPE_MMDVM CModem::getResponse() } } - m_offset = 0U; - // CUtils::dump(1U, "Received", m_buffer, m_length); + m_offset = m_length > 255U ? 4U : 3U; + m_state = SS_START; + return RTM_OK; } @@ -1702,9 +2537,14 @@ HW_TYPE CModem::getHWType() const return m_hwType; } +unsigned char CModem::getMode() const +{ + return m_mode; +} + bool CModem::setMode(unsigned char mode) { - assert(m_serial != NULL); + assert(m_port != NULL); unsigned char buffer[4U]; @@ -1715,14 +2555,14 @@ bool CModem::setMode(unsigned char mode) // CUtils::dump(1U, "Written", buffer, 4U); - return m_serial->write(buffer, 4U) == 4; + return m_port->write(buffer, 4U) == 4; } bool CModem::sendCWId(const std::string& callsign) { - assert(m_serial != NULL); + assert(m_port != NULL); - unsigned int length = callsign.length(); + unsigned int length = (unsigned int)callsign.length(); if (length > 200U) length = 200U; @@ -1737,12 +2577,12 @@ bool CModem::sendCWId(const std::string& callsign) // CUtils::dump(1U, "Written", buffer, length + 3U); - return m_serial->write(buffer, length + 3U) == int(length + 3U); + return m_port->write(buffer, length + 3U) == int(length + 3U); } bool CModem::writeDMRStart(bool tx) { - assert(m_serial != NULL); + assert(m_port != NULL); if (tx && m_tx) return true; @@ -1758,12 +2598,12 @@ bool CModem::writeDMRStart(bool tx) // CUtils::dump(1U, "Written", buffer, 4U); - return m_serial->write(buffer, 4U) == 4; + return m_port->write(buffer, 4U) == 4; } bool CModem::writeDMRAbort(unsigned int slotNo) { - assert(m_serial != NULL); + assert(m_port != NULL); if (slotNo == 1U) m_txDMRData1.clear(); @@ -1779,12 +2619,12 @@ bool CModem::writeDMRAbort(unsigned int slotNo) // CUtils::dump(1U, "Written", buffer, 4U); - return m_serial->write(buffer, 4U) == 4; + return m_port->write(buffer, 4U) == 4; } bool CModem::writeDMRShortLC(const unsigned char* lc) { - assert(m_serial != NULL); + assert(m_port != NULL); assert(lc != NULL); unsigned char buffer[12U]; @@ -1804,37 +2644,322 @@ bool CModem::writeDMRShortLC(const unsigned char* lc) // CUtils::dump(1U, "Written", buffer, 12U); - return m_serial->write(buffer, 12U) == 12; + return m_port->write(buffer, 12U) == 12; +} + +void CModem::setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, float callsignHighLevel, float callsignLowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch) +{ + m_fmCallsign = callsign; + m_fmCallsignSpeed = callsignSpeed; + m_fmCallsignFrequency = callsignFrequency; + m_fmCallsignTime = callsignTime; + m_fmCallsignHoldoff = callsignHoldoff; + m_fmCallsignHighLevel = callsignHighLevel; + m_fmCallsignLowLevel = callsignLowLevel; + m_fmCallsignAtStart = callsignAtStart; + m_fmCallsignAtEnd = callsignAtEnd; + m_fmCallsignAtLatch = callsignAtLatch; +} + +void CModem::setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel) +{ + m_fmRfAck = rfAck; + m_fmAckSpeed = ackSpeed; + m_fmAckFrequency = ackFrequency; + m_fmAckMinTime = ackMinTime; + m_fmAckDelay = ackDelay; + m_fmAckLevel = ackLevel; +} + +void CModem::setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool linkMode, bool cosInvert, bool noiseSquelch, unsigned int squelchHighThreshold, unsigned int squelchLowThreshold, unsigned int rfAudioBoost, float maxDevLevel) +{ + m_fmTimeout = timeout; + m_fmTimeoutLevel = timeoutLevel; + + m_fmCtcssFrequency = ctcssFrequency; + m_fmCtcssHighThreshold = ctcssHighThreshold; + m_fmCtcssLowThreshold = ctcssLowThreshold; + m_fmCtcssLevel = ctcssLevel; + + m_fmKerchunkTime = kerchunkTime; + + m_fmHangTime = hangTime; + + m_fmAccessMode = accessMode; + m_fmLinkMode = linkMode; + m_fmCOSInvert = cosInvert; + + m_fmNoiseSquelch = noiseSquelch; + m_fmSquelchHighThreshold = squelchHighThreshold; + m_fmSquelchLowThreshold = squelchLowThreshold; + + m_fmRFAudioBoost = rfAudioBoost; + m_fmMaxDevLevel = maxDevLevel; +} + +void CModem::setFMExtParams(const std::string& ack, unsigned int audioBoost) +{ + m_fmExtAck = ack; + m_fmExtAudioBoost = audioBoost; + m_fmExtEnable = true; +} + +bool CModem::setFMCallsignParams() +{ + assert(m_port != NULL); + + unsigned char buffer[80U]; + unsigned char len = 10U + (unsigned char)m_fmCallsign.size(); + + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = len; + buffer[2U] = MMDVM_FM_PARAMS1; + + buffer[3U] = m_fmCallsignSpeed; + buffer[4U] = m_fmCallsignFrequency / 10U; + buffer[5U] = m_fmCallsignTime; + buffer[6U] = m_fmCallsignHoldoff; + + buffer[7U] = (unsigned char)(m_fmCallsignHighLevel * 2.55F + 0.5F); + buffer[8U] = (unsigned char)(m_fmCallsignLowLevel * 2.55F + 0.5F); + + buffer[9U] = 0x00U; + if (m_fmCallsignAtStart) + buffer[9U] |= 0x01U; + if (m_fmCallsignAtEnd) + buffer[9U] |= 0x02U; + if (m_fmCallsignAtLatch) + buffer[9U] |= 0x04U; + + for (unsigned int i = 0U; i < m_fmCallsign.size(); i++) + buffer[10U + i] = m_fmCallsign.at(i); + + // CUtils::dump(1U, "Written", buffer, len); + + int ret = m_port->write(buffer, len); + if (ret != len) + return false; + + unsigned int count = 0U; + RESP_TYPE_MMDVM resp; + do { + CThread::sleep(10U); + + resp = getResponse(); + if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) { + count++; + if (count >= MAX_RESPONSES) { + LogError("The MMDVM is not responding to the SET_FM_PARAMS1 command"); + return false; + } + } + } while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK); + + // CUtils::dump(1U, "Response", m_buffer, m_length); + + if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) { + LogError("Received a NAK to the SET_FM_PARAMS1 command from the modem"); + return false; + } + + return true; +} + +bool CModem::setFMAckParams() +{ + assert(m_port != NULL); + + unsigned char buffer[80U]; + unsigned char len = 8U + (unsigned char)m_fmRfAck.size(); + + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = len; + buffer[2U] = MMDVM_FM_PARAMS2; + + buffer[3U] = m_fmAckSpeed; + buffer[4U] = m_fmAckFrequency / 10U; + buffer[5U] = m_fmAckMinTime; + buffer[6U] = m_fmAckDelay / 10U; + + buffer[7U] = (unsigned char)(m_fmAckLevel * 2.55F + 0.5F); + + for (unsigned int i = 0U; i < m_fmRfAck.size(); i++) + buffer[8U + i] = m_fmRfAck.at(i); + + // CUtils::dump(1U, "Written", buffer, len); + + int ret = m_port->write(buffer, len); + if (ret != len) + return false; + + unsigned int count = 0U; + RESP_TYPE_MMDVM resp; + do { + CThread::sleep(10U); + + resp = getResponse(); + if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) { + count++; + if (count >= MAX_RESPONSES) { + LogError("The MMDVM is not responding to the SET_FM_PARAMS2 command"); + return false; + } + } + } while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK); + + // CUtils::dump(1U, "Response", m_buffer, m_length); + + if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) { + LogError("Received a NAK to the SET_FM_PARAMS2 command from the modem"); + return false; + } + + return true; +} + +bool CModem::setFMMiscParams() +{ + assert(m_port != NULL); + + unsigned char buffer[20U]; + + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = 17U; + buffer[2U] = MMDVM_FM_PARAMS3; + + buffer[3U] = m_fmTimeout / 5U; + buffer[4U] = (unsigned char)(m_fmTimeoutLevel * 2.55F + 0.5F); + + buffer[5U] = (unsigned char)m_fmCtcssFrequency; + buffer[6U] = m_fmCtcssHighThreshold; + buffer[7U] = m_fmCtcssLowThreshold; + buffer[8U] = (unsigned char)(m_fmCtcssLevel * 2.55F + 0.5F); + + buffer[9U] = m_fmKerchunkTime; + buffer[10U] = m_fmHangTime; + + buffer[11U] = m_fmAccessMode & 0x0FU; + if (m_fmLinkMode) + buffer[11U] |= 0x20U; + if (m_fmNoiseSquelch) + buffer[11U] |= 0x40U; + if (m_fmCOSInvert) + buffer[11U] |= 0x80U; + + buffer[12U] = m_fmRFAudioBoost; + + buffer[13U] = (unsigned char)(m_fmMaxDevLevel * 2.55F + 0.5F); + + buffer[14U] = (unsigned char)(m_rxLevel * 2.55F + 0.5F); + + buffer[15U] = m_fmSquelchHighThreshold; + buffer[16U] = m_fmSquelchLowThreshold; + + // CUtils::dump(1U, "Written", buffer, 17U); + + int ret = m_port->write(buffer, 17U); + if (ret != 17) + return false; + + unsigned int count = 0U; + RESP_TYPE_MMDVM resp; + do { + CThread::sleep(10U); + + resp = getResponse(); + if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) { + count++; + if (count >= MAX_RESPONSES) { + LogError("The MMDVM is not responding to the SET_FM_PARAMS3 command"); + return false; + } + } + } while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK); + + // CUtils::dump(1U, "Response", m_buffer, m_length); + + if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) { + LogError("Received a NAK to the SET_FM_PARAMS3 command from the modem"); + return false; + } + + return true; +} + +bool CModem::setFMExtParams() +{ + assert(m_port != NULL); + + unsigned char buffer[80U]; + unsigned char len = 7U + (unsigned char)m_fmExtAck.size(); + + buffer[0U] = MMDVM_FRAME_START; + buffer[1U] = len; + buffer[2U] = MMDVM_FM_PARAMS4; + + buffer[3U] = m_fmExtAudioBoost; + buffer[4U] = m_fmAckSpeed; + buffer[5U] = m_fmAckFrequency / 10U; + + buffer[6U] = (unsigned char)(m_fmAckLevel * 2.55F + 0.5F); + + for (unsigned int i = 0U; i < m_fmExtAck.size(); i++) + buffer[7U + i] = m_fmExtAck.at(i); + + // CUtils::dump(1U, "Written", buffer, len); + + int ret = m_port->write(buffer, len); + if (ret != len) + return false; + + unsigned int count = 0U; + RESP_TYPE_MMDVM resp; + do { + CThread::sleep(10U); + + resp = getResponse(); + if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) { + count++; + if (count >= MAX_RESPONSES) { + LogError("The MMDVM is not responding to the SET_FM_PARAMS4 command"); + return false; + } + } + } while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK); + + // CUtils::dump(1U, "Response", m_buffer, m_length); + + if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) { + LogError("Received a NAK to the SET_FM_PARAMS4 command from the modem"); + return false; + } + + return true; } void CModem::printDebug() { - if (m_buffer[2U] == MMDVM_DEBUG1) { - LogMessage("Debug: %.*s", m_length - 3U, m_buffer + 3U); - } else if (m_buffer[2U] == MMDVM_DEBUG2) { + if (m_type == MMDVM_DEBUG1) { + LogMessage("Debug: %.*s", m_length - m_offset - 0U, m_buffer + m_offset); + } else if (m_type == MMDVM_DEBUG2) { short val1 = (m_buffer[m_length - 2U] << 8) | m_buffer[m_length - 1U]; - LogMessage("Debug: %.*s %d", m_length - 5U, m_buffer + 3U, val1); - } else if (m_buffer[2U] == MMDVM_DEBUG3) { + LogMessage("Debug: %.*s %d", m_length - m_offset - 2U, m_buffer + m_offset, val1); + } else if (m_type == MMDVM_DEBUG3) { short val1 = (m_buffer[m_length - 4U] << 8) | m_buffer[m_length - 3U]; short val2 = (m_buffer[m_length - 2U] << 8) | m_buffer[m_length - 1U]; - LogMessage("Debug: %.*s %d %d", m_length - 7U, m_buffer + 3U, val1, val2); - } else if (m_buffer[2U] == MMDVM_DEBUG4) { + LogMessage("Debug: %.*s %d %d", m_length - m_offset - 4U, m_buffer + m_offset, val1, val2); + } else if (m_type == MMDVM_DEBUG4) { short val1 = (m_buffer[m_length - 6U] << 8) | m_buffer[m_length - 5U]; short val2 = (m_buffer[m_length - 4U] << 8) | m_buffer[m_length - 3U]; short val3 = (m_buffer[m_length - 2U] << 8) | m_buffer[m_length - 1U]; - LogMessage("Debug: %.*s %d %d %d", m_length - 9U, m_buffer + 3U, val1, val2, val3); - } else if (m_buffer[2U] == MMDVM_DEBUG5) { + LogMessage("Debug: %.*s %d %d %d", m_length - m_offset - 6U, m_buffer + m_offset, val1, val2, val3); + } else if (m_type == MMDVM_DEBUG5) { short val1 = (m_buffer[m_length - 8U] << 8) | m_buffer[m_length - 7U]; short val2 = (m_buffer[m_length - 6U] << 8) | m_buffer[m_length - 5U]; short val3 = (m_buffer[m_length - 4U] << 8) | m_buffer[m_length - 3U]; short val4 = (m_buffer[m_length - 2U] << 8) | m_buffer[m_length - 1U]; - LogMessage("Debug: %.*s %d %d %d %d", m_length - 11U, m_buffer + 3U, val1, val2, val3, val4); + LogMessage("Debug: %.*s %d %d %d %d", m_length - m_offset - 8U, m_buffer + m_offset, val1, val2, val3, val4); + } else if (m_type == MMDVM_DEBUG_DUMP) { + CUtils::dump(1U, "Debug: Data", m_buffer + m_offset, m_length - m_offset); } } - -CModem* CModem::createModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug){ - if (port == "NullModem") - return new CNullModem(port, duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, trace, debug); - else - return new CModem(port, duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, trace, debug); -} \ No newline at end of file diff --git a/Modem.h b/Modem.h index 30af40183..0a69311d8 100644 --- a/Modem.h +++ b/Modem.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2018 by Jonathan Naylor G4KLX + * Copyright (C) 2011-2018,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,10 +16,10 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef MODEM_H -#define MODEM_H +#ifndef Modem_H +#define Modem_H -#include "SerialController.h" +#include "ModemPort.h" #include "RingBuffer.h" #include "Defines.h" #include "Timer.h" @@ -32,86 +32,127 @@ enum RESP_TYPE_MMDVM { RTM_ERROR }; +enum SERIAL_STATE { + SS_START, + SS_LENGTH1, + SS_LENGTH2, + SS_TYPE, + SS_DATA +}; + class CModem { public: - CModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug); - virtual ~CModem(); + CModem(bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool useCOSAsLockout, bool trace, bool debug); + ~CModem(); - virtual void setSerialParams(const std::string& protocol, unsigned int address); - virtual void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency); - virtual void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled); - virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel); - virtual void setDMRParams(unsigned int colorCode); - virtual void setYSFParams(bool loDev, unsigned int txHang); - virtual void setTransparentDataParams(unsigned int sendFrameType); + void setPort(IModemPort* port); + void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency); + void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool m17Enabled, bool pocsagEnabled, bool fmEnabled, bool ax25Enabled); + void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float m17TXLevel, float pocsagLevel, float fmTXLevel, float ax25TXLevel); + void setDMRParams(unsigned int colorCode); + void setYSFParams(bool loDev, unsigned int txHang); + void setP25Params(unsigned int txHang); + void setNXDNParams(unsigned int txHang); + void setM17Params(unsigned int txHang); + void setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist); + void setTransparentDataParams(unsigned int sendFrameType); - virtual bool open(); + void setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, float callsignHighLevel, float callsignLowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch); + void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel); + void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool linkMode, bool cosInvert, bool noiseSquelch, unsigned int squelchHighThreshold, unsigned int squelchLowThreshold, unsigned int rfAudioBoost, float maxDevLevel); + void setFMExtParams(const std::string& ack, unsigned int audioBoost); - virtual unsigned int readDStarData(unsigned char* data); - virtual unsigned int readDMRData1(unsigned char* data); - virtual unsigned int readDMRData2(unsigned char* data); - virtual unsigned int readYSFData(unsigned char* data); - virtual unsigned int readP25Data(unsigned char* data); - virtual unsigned int readNXDNData(unsigned char* data); - virtual unsigned int readTransparentData(unsigned char* data); + bool open(); - virtual unsigned int readSerial(unsigned char* data, unsigned int length); + bool hasDStar() const; + bool hasDMR() const; + bool hasYSF() const; + bool hasP25() const; + bool hasNXDN() const; + bool hasM17() const; + bool hasPOCSAG() const; + bool hasFM() const; + bool hasAX25() const; - virtual bool hasDStarSpace() const; - virtual bool hasDMRSpace1() const; - virtual bool hasDMRSpace2() const; - virtual bool hasYSFSpace() const; - virtual bool hasP25Space() const; - virtual bool hasNXDNSpace() const; - virtual bool hasPOCSAGSpace() const; + unsigned int getVersion() const; - virtual bool hasTX() const; - virtual bool hasCD() const; + unsigned int readDStarData(unsigned char* data); + unsigned int readDMRData1(unsigned char* data); + unsigned int readDMRData2(unsigned char* data); + unsigned int readYSFData(unsigned char* data); + unsigned int readP25Data(unsigned char* data); + unsigned int readNXDNData(unsigned char* data); + unsigned int readM17Data(unsigned char* data); + unsigned int readFMData(unsigned char* data); + unsigned int readAX25Data(unsigned char* data); - virtual bool hasLockout() const; - virtual bool hasError() const; + bool hasDStarSpace() const; + bool hasDMRSpace1() const; + bool hasDMRSpace2() const; + bool hasYSFSpace() const; + bool hasP25Space() const; + bool hasNXDNSpace() const; + bool hasM17Space() const; + bool hasPOCSAGSpace() const; + unsigned int getFMSpace() const; + bool hasAX25Space() const; - virtual bool writeDStarData(const unsigned char* data, unsigned int length); - virtual bool writeDMRData1(const unsigned char* data, unsigned int length); - virtual bool writeDMRData2(const unsigned char* data, unsigned int length); - virtual bool writeYSFData(const unsigned char* data, unsigned int length); - virtual bool writeP25Data(const unsigned char* data, unsigned int length); - virtual bool writeNXDNData(const unsigned char* data, unsigned int length); - virtual bool writePOCSAGData(const unsigned char* data, unsigned int length); + bool hasTX() const; + bool hasCD() const; - virtual bool writeTransparentData(const unsigned char* data, unsigned int length); + bool hasLockout() const; + bool hasError() const; - virtual bool writeDStarInfo(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); - virtual bool writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); - virtual bool writeYSFInfo(const char* source, const char* dest, const char* type, const char* origin); - virtual bool writeP25Info(const char* source, bool group, unsigned int dest, const char* type); - virtual bool writeNXDNInfo(const char* source, bool group, unsigned int dest, const char* type); - virtual bool writePOCSAGInfo(unsigned int ric, const std::string& message); - virtual bool writeIPInfo(const std::string& address); + bool writeConfig(); + bool writeDStarData(const unsigned char* data, unsigned int length); + bool writeDMRData1(const unsigned char* data, unsigned int length); + bool writeDMRData2(const unsigned char* data, unsigned int length); + bool writeYSFData(const unsigned char* data, unsigned int length); + bool writeP25Data(const unsigned char* data, unsigned int length); + bool writeNXDNData(const unsigned char* data, unsigned int length); + bool writeM17Data(const unsigned char* data, unsigned int length); + bool writePOCSAGData(const unsigned char* data, unsigned int length); + bool writeFMData(const unsigned char* data, unsigned int length); + bool writeAX25Data(const unsigned char* data, unsigned int length); - virtual bool writeDMRStart(bool tx); - virtual bool writeDMRShortLC(const unsigned char* lc); - virtual bool writeDMRAbort(unsigned int slotNo); + bool writeDStarInfo(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); + bool writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); + bool writeYSFInfo(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); + bool writeP25Info(const char* source, bool group, unsigned int dest, const char* type); + bool writeNXDNInfo(const char* source, bool group, unsigned int dest, const char* type); + bool writeM17Info(const char* source, const char* dest, const char* type); + bool writePOCSAGInfo(unsigned int ric, const std::string& message); + bool writeIPInfo(const std::string& address); - virtual bool writeSerial(const unsigned char* data, unsigned int length); + bool writeDMRStart(bool tx); + bool writeDMRShortLC(const unsigned char* lc); + bool writeDMRAbort(unsigned int slotNo); - virtual bool setMode(unsigned char mode); + bool writeTransparentData(const unsigned char* data, unsigned int length); + unsigned int readTransparentData(unsigned char* data); - virtual bool sendCWId(const std::string& callsign); + bool writeSerial(const unsigned char* data, unsigned int length); + unsigned int readSerial(unsigned char* data, unsigned int length); - virtual HW_TYPE getHWType() const; + unsigned char getMode() const; + bool setMode(unsigned char mode); - virtual void clock(unsigned int ms); + bool sendCWId(const std::string& callsign); - virtual void close(); + HW_TYPE getHWType() const; - static CModem* createModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug); + void clock(unsigned int ms); + + void close(); private: - std::string m_port; + unsigned int m_protocolVersion; unsigned int m_dmrColorCode; bool m_ysfLoDev; unsigned int m_ysfTXHang; + unsigned int m_p25TXHang; + unsigned int m_nxdnTXHang; + unsigned int m_m17TXHang; bool m_duplex; bool m_rxInvert; bool m_txInvert; @@ -125,8 +166,12 @@ class CModem { float m_ysfTXLevel; float m_p25TXLevel; float m_nxdnTXLevel; + float m_m17TXLevel; float m_pocsagTXLevel; + float m_fmTXLevel; + float m_ax25TXLevel; float m_rfLevel; + bool m_useCOSAsLockout; bool m_trace; bool m_debug; unsigned int m_rxFrequency; @@ -137,13 +182,18 @@ class CModem { bool m_ysfEnabled; bool m_p25Enabled; bool m_nxdnEnabled; + bool m_m17Enabled; bool m_pocsagEnabled; + bool m_fmEnabled; + bool m_ax25Enabled; int m_rxDCOffset; int m_txDCOffset; - CSerialController* m_serial; + IModemPort* m_port; unsigned char* m_buffer; unsigned int m_length; unsigned int m_offset; + SERIAL_STATE m_state; + unsigned char m_type; CRingBuffer m_rxDStarData; CRingBuffer m_txDStarData; CRingBuffer m_rxDMRData1; @@ -156,7 +206,15 @@ class CModem { CRingBuffer m_txP25Data; CRingBuffer m_rxNXDNData; CRingBuffer m_txNXDNData; + CRingBuffer m_rxM17Data; + CRingBuffer m_txM17Data; CRingBuffer m_txPOCSAGData; + CRingBuffer m_rxFMData; + CRingBuffer m_txFMData; + CRingBuffer m_rxAX25Data; + CRingBuffer m_txAX25Data; + CRingBuffer m_rxSerialData; + CRingBuffer m_txSerialData; CRingBuffer m_rxTransparentData; CRingBuffer m_txTransparentData; unsigned int m_sendTransparentDataFrameType; @@ -169,17 +227,68 @@ class CModem { unsigned int m_ysfSpace; unsigned int m_p25Space; unsigned int m_nxdnSpace; + unsigned int m_m17Space; unsigned int m_pocsagSpace; + unsigned int m_fmSpace; + unsigned int m_ax25Space; bool m_tx; bool m_cd; bool m_lockout; bool m_error; + unsigned char m_mode; HW_TYPE m_hwType; + int m_ax25RXTwist; + unsigned int m_ax25TXDelay; + unsigned int m_ax25SlotTime; + unsigned int m_ax25PPersist; + + std::string m_fmCallsign; + unsigned int m_fmCallsignSpeed; + unsigned int m_fmCallsignFrequency; + unsigned int m_fmCallsignTime; + unsigned int m_fmCallsignHoldoff; + float m_fmCallsignHighLevel; + float m_fmCallsignLowLevel; + bool m_fmCallsignAtStart; + bool m_fmCallsignAtEnd; + bool m_fmCallsignAtLatch; + std::string m_fmRfAck; + std::string m_fmExtAck; + unsigned int m_fmAckSpeed; + unsigned int m_fmAckFrequency; + unsigned int m_fmAckMinTime; + unsigned int m_fmAckDelay; + float m_fmAckLevel; + unsigned int m_fmTimeout; + float m_fmTimeoutLevel; + float m_fmCtcssFrequency; + unsigned int m_fmCtcssHighThreshold; + unsigned int m_fmCtcssLowThreshold; + float m_fmCtcssLevel; + unsigned int m_fmKerchunkTime; + unsigned int m_fmHangTime; + unsigned int m_fmAccessMode; + bool m_fmLinkMode; + bool m_fmCOSInvert; + bool m_fmNoiseSquelch; + unsigned int m_fmSquelchHighThreshold; + unsigned int m_fmSquelchLowThreshold; + unsigned int m_fmRFAudioBoost; + unsigned int m_fmExtAudioBoost; + float m_fmMaxDevLevel; + bool m_fmExtEnable; + unsigned char m_capabilities1; + unsigned char m_capabilities2; bool readVersion(); bool readStatus(); - bool setConfig(); + bool setConfig1(); + bool setConfig2(); bool setFrequency(); + bool setFMCallsignParams(); + bool setFMAckParams(); + bool setFMMiscParams(); + bool setFMExtParams(); void printDebug(); diff --git a/ModemPort.cpp b/ModemPort.cpp new file mode 100644 index 000000000..6a675e6d5 --- /dev/null +++ b/ModemPort.cpp @@ -0,0 +1,23 @@ +/* +* Copyright (C) 2016,2021 by Jonathan Naylor G4KLX +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "ModemPort.h" + +IModemPort::~IModemPort() +{ +} diff --git a/ModemPort.h b/ModemPort.h new file mode 100644 index 000000000..458911139 --- /dev/null +++ b/ModemPort.h @@ -0,0 +1,40 @@ +/* +* Copyright (C) 2016,2021 by Jonathan Naylor G4KLX +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef ModemPort_H +#define ModemPort_H + +class IModemPort { +public: + virtual ~IModemPort() = 0; + + virtual bool open() = 0; + + virtual int read(unsigned char* buffer, unsigned int length) = 0; + + virtual int write(const unsigned char* buffer, unsigned int length) = 0; + + virtual void close() = 0; +#if defined(__APPLE__) + virtual int setNonblock(bool nonblock) = 0; +#endif + +private: +}; + +#endif diff --git a/ModemSerialPort.cpp b/ModemSerialPort.cpp index 51ba01dad..aa0a194d2 100644 --- a/ModemSerialPort.cpp +++ b/ModemSerialPort.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,22 +21,22 @@ #include #include -CModemSerialPort::CModemSerialPort(CModem* modem) : +IModemSerialPort::IModemSerialPort(CModem* modem) : m_modem(modem) { assert(modem != NULL); } -CModemSerialPort::~CModemSerialPort() +IModemSerialPort::~IModemSerialPort() { } -bool CModemSerialPort::open() +bool IModemSerialPort::open() { return true; } -int CModemSerialPort::write(const unsigned char* data, unsigned int length) +int IModemSerialPort::write(const unsigned char* data, unsigned int length) { assert(data != NULL); assert(length > 0U); @@ -46,7 +46,7 @@ int CModemSerialPort::write(const unsigned char* data, unsigned int length) return ret ? int(length) : -1; } -int CModemSerialPort::read(unsigned char* data, unsigned int length) +int IModemSerialPort::read(unsigned char* data, unsigned int length) { assert(data != NULL); assert(length > 0U); @@ -54,6 +54,6 @@ int CModemSerialPort::read(unsigned char* data, unsigned int length) return m_modem->readSerial(data, length); } -void CModemSerialPort::close() +void IModemSerialPort::close() { } diff --git a/ModemSerialPort.h b/ModemSerialPort.h index d6761cec7..9a6442684 100644 --- a/ModemSerialPort.h +++ b/ModemSerialPort.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,10 +22,10 @@ #include "SerialPort.h" #include "Modem.h" -class CModemSerialPort : public ISerialPort { +class IModemSerialPort : public ISerialPort { public: - CModemSerialPort(CModem* modem); - virtual ~CModemSerialPort(); + IModemSerialPort(CModem* modem); + virtual ~IModemSerialPort(); virtual bool open(); diff --git a/NXDN.csv b/NXDN.csv index 50caa2e8e..475da3e67 100644 --- a/NXDN.csv +++ b/NXDN.csv @@ -1,1627 +1,2339 @@ -Radio ID,Callsign,Name,City,State,Country,Remarks -1,KB3AWQ,John Springman,Williamsport,Pennsylvania,United States,KB3AWQ.com -2,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,UHF NX-800 mobile -3,WB2OOM,CHRISTINA P HOLMES,MULLICA HILL,New Jersey,United States,UHF NX-800 Mobile -4,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,UHF NX-800 Van -5,PP5DI,Fabio Kuntze,São José,Santa Catarina,Brazil,Kenwood NX-700 VHF portable -6,LX1MS,Marc Storck,Diekirch,L,Luxembourg, -7,W2MB,Mark Bond,Washington,New Jersey,United States,NX5800K2 -8,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,UHF NX-820 Port 2 -9,KE8BGA,Lowell M Katz,Cleveland,Ohio,United States,on the north shore, NX-800 -10,CT2BXN,ct2bxn ct2bxn,7830,,Portugal, -11,EA3HSL,Jordi Codina Martínez ,08800 Vilanova i la Geltrú,,Spain, -12,VA3WZW,Andre Van,Peterborough,Ontario,Canada,Handheld -13,VA3WZW,Andre Van,Peterborough,Ontario,Canada,Moblie -14,F1ZTC, ,,,France, -15,EA3EIZ,Manuel Díaz Jiménez,Santa Perpetua de Mogoda,,Spain,Spain -16,EA3EG,Eduard ,Arenys de Munt,,Spain,Spain -17,KC2SNI,James Hannon,West Berlin,New Jersey,United States,My Radio is an Icom IC-3161DT -18,EA3ES,Enrique Belmonte Pozo,Almoster, Tarragona,,Spain,Spain -19,EA3HVF,JOSE .J LEON,SANT FELIU DE LLOBREGAT, BARCELONA,Sp,Spain,Spain -20,HL4CNR,Kevin Ku,Jeju,CheJu-Do,Korea S, Republic of, -21,2E0NEQ,Jono Clarke,Wallsend,,England, -22,VE7RI,Bradley Donald Gordon Thompson,Chilliwack,British Columbia,Canada,NXDN -23,KA3NGT,Bruce Hoover,Valier,Pennsylvania,United States, -24,AC1KV,Dan Cantil,Ansonia,Connecticut,United States,Portable -25,WB2RUH,BRUCE J TIEMANN,VINELAND,New Jersey,United States,UHF NX-320 -26,WB2RUH,BRUCE J TIEMANN,VINELAND,New Jersey,United States,UHF NX-800 mobile -27,EA2BKH,Juan Baeta Luengo,Zaragoza,,Spain, -28,VA2ECE,Eric Celier,Ste-Catherine-De-La-,Quebec,Canada,NXDN -29,JG7IMF,Momoi Momoi,Miyagino-Ku, Sendai-,Tohoku,Japan,ZumSpot -30,KD4MOJ,Douglas B Ferrell,Tallahassee,Florida,United States, -31,SA7SVR,Panagiotis Tsekouras,Jonkoping,SE,Sweden, -32,SV1CDR,TAKIS TSEKOURAS,GREECE,GR,Greece,UHF -33,KA3NGT,Bruce Hoover,Valier,Pennsylvania,United States, -34,9Z4RG,Ravindranath Goswami,Port-Of-Spain,Woodbrook,Trinidad and Tobago,robby@9Z4RG.com -35,JH3KAW,Katsumi Yasuo,Kobe ,Kinki,Japan, -36,W3NLE,Christopher M Dailing,North East,Maryland,United States, -37,N3XBW,Jay Petrulis,McKeesport,Pennsylvania,United States,NXDN -38,WT3C,Thomas C Dailing,Forest Hill,Maryland,United States, -39,JA1IPJ,Fumio Hashimoto,Yokohama, 222-0011,Kanto,Japan, -40,W5CBT,Kenneth Blanton,Denison,Texas,United States,NXDN -41,NQ4Y,Terry Bartholomew,Tullahoma,Tennessee,United States, -42,PY2IV,Igor Vicente Munhoz,Sao Jose do Rio Preto,Sao Paulo,Brazil,NXDN Station -43,BX4ACB,Felix Chan,Taichung,Central Taiwan,Taiwan,NXDN -44,EA4CZR,DAVID SANCHEZ JIMENEZ,HUMANES DE MADRID,Massachusetts,Spain,ZuluRadio -45,BX3AH,Miracle Lin,Taoyuan,Northern Taiwan,Taiwan,NXDN -46,NK8M,James A Barney,Levels,West Virginia,United States,NXDN -50,VK2PWR,Adam Anderson,Glenfield,New South Wales,Australia, -53,W4DMM,Mark McDougal,Chattanooga,Tennessee,United States, -69,WR2M,Bill Lupo,Landing,New Jersey,United States,Icom IDAS Radios -70,KB8JNM,Michael P Mays,East Liverpool,Ohio,United States,Personal Station -73,BH7MTZ,Yang Feng,Shantou,Guangdong,Hu Nan Guang Dong Guang Xi,China, -74,N2IXC,EDWARD G KAUFHOLZ,CHATSWORTH,New Jersey,United States, -75,EA5IHI,Alberto J. Lopez Martinez,Alicante,ES,Spain, -76,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,UFH NX5300 Port 1 -77,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,UHF NX-800 Shore Base -78,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,UHF NX-800 -79,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,UHF NX-5800 -80,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,VHF NX-5700 mobile -82,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,VHF NX-700 Shore Base -85,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,VHF NX_700 van -86,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,VHF NX-700 base -87,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,VHF NX-700 mobile -88,W2FLY,Harry J Holmes,Mullica Hill,New Jersey,United States,VHF NX-220 portable -89,WB2RUH,BRUCE J TIEMANN,VINELAND,New Jersey,United States,VHF NX-700 base -99,K1ZSG,Donald G Nelson,Harwinton,Connecticut,United States,Mobile -101,SY1BRU,George Koukoutsis,Athens,GR,Greece, -124,KB7VIS,Kirk H Johnson,Springfield,Oregon,United States,NX-320 K6 -125,KB7VIS,Kirk H Johnson,Springfield,Oregon,United States,NX-320 -134,N2SRO,Mike Mollet,Pitman,New Jersey,United States, -141,KF2M,Gregory F Popovich,Rahway,New Jersey,United States,IC-F4161DT -164,VA7DBI,Darcy Buskermolen,Kelowna,British Columbia,Canada, -204,SM0YXI,Robert Lind,Skogas,ST,Sweden, -211,VE9HAM,Charles Mcallan,Fredericton,New Brunswick,Canada,Eastern Canada -222,WB3IEX,CRAIG J CURRY,Lakeland,Florida,United States, -224,BG2RKL,Jiwei Wang,Anshan City,Liaoning,All Others,China,Portable -231,BV2QS,Jack Yang,Taipei,Taipei,Taiwan, -243,BA7JG,Yan Jian,Guangzhou,All Others,China,Portable -272,BI7OZD,Kwansik Lee,Foshan City, Gd,All Others,China,Portable -303,BG6WUH,Jie Zhang,Wuhan,He Nan Hu Bei An Hui,China,MMDVM -304,N9JLE,Jeffrey Eglen,Mount Pleasant,South Carolina,United States,N9JLE@arrl.net -363,KE2EMS,Matt Mcdonald,OGDENSBURG,New York,United States,LOCAL VHF REPEATER -421,VA7WPN,John Brent,Sooke,British Columbia,Canada,CN88DJ -454,K2COP,Gregory R Felter,Amsterdam,New York,United States,2nd Radio, Greg -501,N5QS,Roger W Gray,Searcy,Arkansas,United States,NXR810 -502,AB5ER, North Central Arkansas Amat Rad Serv,Searcy,Arkansas,United States,NXR710 -503,N5LKE,James D Ferguson,Searcy,Arkansas,United States,NXR810 -512,N9LYA,Jerome M Kutche,Mitchell,Indiana,United States, -513,KC9JIH,Jason L Kutche,Huron ,Indiana,United States, -514,KC9DDP,Retha L Kutche,Mitchell,Indiana,United States, -607,BH7LOT,He Chuanjie,Guangzhou ,Hu Nan Guang Dong Guang Xi,China,Portable -650,KJ4PIU,Cj Griggs,Ponce de Leon,Florida,United States,CJ - NX-210 -651,KC3KSJ,Chris Hoerner,Wilmington,Delaware,United States,Home Office NX820 -655,KC3KSJ,Chris Hoerner,Wilmington,Delaware,United States,Mobile NX820 -669,KC3KSJ,Chris Hoerner,Wilmington,Delaware,United States,Portable NX320 -672,KC3KSJ,Chris Hoerner,Wilmington,Delaware,United States,Portable NX320 -673,KC3KSJ,Chris Hoerner,Wilmington,Delaware,United States,Portable NX320 -674,KC3KSJ,Chris Hoerner,Wilmington,Delaware,United States,Portable NX320 -690,KJ4PIU,Cj Griggs,Ponce de Leon,Florida,United States,NX-700 -701,NR6AM,Frances H Nievera,San Diego,California,United States, -724,PU1LOY,Luiz Sergio Santos Lemos,Rio De Janeiro,Rio De Janeiro,Brazil,Rio de janeiro -775,BH7NCW,Jianhua Long,Haizhu District,Guan,All Others,China,Portable -823,KC1JMZ,Theodore Wojcik,Taunton,Massachusetts,United States, -900,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NXR810 -901,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NX320 -902,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NX320 - demo -903,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NX800H -905,W1RHS,Rick Swenton,South Dennis,Massachusetts,United States,NX320 -906,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NX200 -907,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,Future -908,W4CLL,Chuck Lavender,Plant City,Florida,United States, -910,W4CLL,Chuck Lavender,Plant City,Florida,United States, -911,W4CLL,Chuck Lavender,Plant City,Florida,United States, -920,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States,P1 UHF NX300 -921,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States,P1 VHF NX220 -922,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States,P2 UHF NX300 -923,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States,M1 VHF NX700 -924,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States,P3 UHF NX-5300 -925,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States,P2 VHF NX-5200 -926,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States,M1 UHF NX-5800 -928,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States,Icom portable -929,N1XDN,Robert Thoelen Iii,Enfield,Connecticut,United States, -930,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NX300 -931,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NX300 -936,W1GPO,John R Haserick, Jr,Tolland,Connecticut,United States,NX300 -937,N1PAH,CLARKE C BOYNTON,GRANVILLE,Massachusetts,United States, -950,K1KGQ,Joel A Weber,Torrington,Connecticut,United States,NXR810 -951,K1KGQ,Joel A Weber,Torrington,Connecticut,United States,NX800H -952,K1GML,GAIL M LOUCHEN,TORRINGTON,Connecticut,United States,NX800H -953,K1KGQ,Joel A Weber,Torrington,Connecticut,United States,NX320-1 -954,K1KGQ,Joel A Weber,Torrington,Connecticut,United States, -955,K1KGQ,Joel A Weber,Torrington,Connecticut,United States, -956,K1KGQ,Joel A Weber,Torrington,Connecticut,United States, -957,K1KGQ,Joel A Weber,Torrington,Connecticut,United States, -958,K1KGQ,Joel A Weber,Torrington,Connecticut,United States,F4161 -959,K1KGQ,Joel A Weber,Torrington,Connecticut,United States,Future -960,K1ZXX,Gary A Hopkins,Thompson,Connecticut,United States,Icom All radios -961,WA1SSB,Joseph Kotomski,Naugatuck,Connecticut,United States,NX800H -962,N1MAT,DENNIS W LOMBARD,WEST SUFFIELD,Connecticut,United States,F4161 -963,N1MAT,DENNIS W LOMBARD,WEST SUFFIELD,Connecticut,United States,F4161 -970,KB1VRI,Nicholas Levasseur,Enfield,Connecticut,United States, -971,N1ELE,Paul Meunier,Enfield,Connecticut,United States, -972,N1ODJ,Kenneth Schmitz,Middletown,Connecticut,United States, -973,W1VLF,PAUL A CIANCIOLO,HARWINTON,Connecticut,United States, -990,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NXR810 -995,K1IFF,CLIFFORD J CAYER,BRISTOL,Connecticut,United States,NXR710 link radio -999,2E0NEQ,Jono Clarke,Wallsend,,England, -1000,KP4RF,Oscar Resto,Vega Alta,San Juan,Puerto Rico, -1001,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX200 Portable #1 -1002,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX200 Portable #2 -1003,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX300 Portable #1 -1004,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX300 Portable #2 -1005,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX700 Base -1006,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX800 Base -1007,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX700 Mobile#1 -1008,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX700 Mobile#2 -1009,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX800 Mobile#1 -1010,KE4GWW,James M Nelson,Dothan,Alabama,United States,NX800 Mobile#2 -1012,LX1DUC,Marc Storck,Diekrich,L,Luxembourg, -1015,KK4WH,Tim Webb,Benham,Kentucky,United States,MMDVM/RPi3/Pi-Star -1020,N3BKV,David Ginsberg,Glendale,California,United States, -1024,W4GLE,Grady Evans,Fayette,Alabama,United States,Portable -1025,W4GLE,Grady Evans,Fayette,Alabama,United States,Mobile -1026,KJ4TBJ,Kimberly Evans,Fayette,Alabama,United States,Portable -1027,KJ4TBJ,Kimberly Evans,Fayette,Alabama,United States,Mobile -1028,K4ASF,Fayette County Arc,Fayette,Alabama,United States,Club Fleet -1030,CE1WMY,Jimmy Romero,Calama,Antofagasta,Chile,Portatil -1031,W4GLE,Grady Evans,Fayette,Alabama,United States,JumboSpot -1033,W4GMI,David Bash,Vernon,Alabama,United States, -1035,W4GMI,David Bash,Vernon,Alabama,United States, -1039,K4DJL,Elquardo D Erby,Montgomery,Alabama,United States, -1044,W4DBG,Doug Gooden,Troy,Alabama,United States, -1045,W4DSM,David S Martin,Brewton,Alabama,United States, -1046,W4SFA,Scott Carmichael,Montgomery,Alabama,United States, -1047,KM4AFR,Fayette County Ema,Fayette,Alabama,United States,Club Fleet -1048,KK4QXJ,Fayette County Ares,Fayette,Alabama,United States,Club Fleet -1049,KC4UG,West Alabama Amateur Radio Club,Vernon,Alabama,United States,Club Fleet -1050,WD4MHS,Robin Kenny Bearden,Bessemer,Alabama,United States, -1051,WD4MHS,Robin Kenny Bearden,Bessemer,Alabama,United States, -1052,K5DMR,Stephen W Curtis,Double Springs,Alabama,United States, -1053,BG1LSN,Zhang Ai Dong,Beijing,Bei Jing,China, -1054,K5DMR,Stephen W Curtis,Double Springs,Alabama,United States, -1055,N4WFF,Jack B Windham Iii,Elba,Alabama,United States, -1066,KM4JXP,Peter Tasker,Woking,Florida,United States,NX5300 -1070,KM4EDS,Danny Cooley,Oneonta,Alabama,United States, -1088,W4DWF,Darrick Fields Fields,Cullman,Alabama,United States, -1103,W4UDT,Bobby P Murphy,Birmingham,Alabama,United States, -1104,KM4CJ,Steven W Smith,Huntsville,Alabama,United States, -1108,OE4KMU,Klaus Michael MUSSER,7411 MARKT ALLHAU,,Austria, -1117,K6FED,Frank Decuire,Rancho Cucamonga,California,United States, -1181,W4KMG,Kris Garner,Auburn,Alabama,United States, -1193,KK4LPO,Timothy W Patrick,Huntsville,Alabama,United States, -1243,G6VBJ,Peter Tasker,Woking,,England,MMDVM -1294,EA1IVQ,ANGEL OGANDO,PONTEVEDRA, ES,,Spain,SPAIN -1304,K4XXX,Ed Lemley,London,Kentucky,United States,Work NX800 -1313,KB2UNZ,Edward Donnelly,Kenvil,New Jersey,United States,VHF-UHF -1314,KB2UNZ,Edward Donnelly,Kenvil,New Jersey,United States,VHF-UHF Mobile -1325,W4OWE,Rodney J Stevens,Ashville,Alabama,United States, -1337,N5AMD,Ben A Fogt,San Antonio,Texas,United States,N5AMD -1343,EA1IVQ,ANGEL OGANDO,PONTEVEDRA, ES,,Spain,SPAIN -1364,AE4AL,WILLIAM T BOWMAN, JR.,OXFORD,Alabama,United States, -1381,CT2HYA,João Carlos Silveira Abreu Melo,Nazare,,Portugal,MMDVM -1386,W4OA,Shelly F Mitchell,Opelika,Alabama,United States,mmdvm_hs with RPi Zero W -1407,DL7BCU,CHRIS UNGER,47623 KEVELAER,,Germany, -1408,KD2PNV,Bjoern C Unger,Valley Cottage,New York,United States, -1429,K4NWS,Alert Alabama Emergency Response Team,Chelsea,Alabama,United States, -1460,AL2C,Alabama BARC Alabama Bicentennial Amateur Radio Club,Montgomery,Alabama,United States, -1496,K4FSO,William A Rodgers,Steele,Alabama,United States, -1538,G7MNP,Glen Turner,Penketh,,England, -1665,PD4MM,Marcel QPO,Kerkrade,,Netherlands,QPO -1699,KB1ZBT,Shane Keith,Oneonta,New York,United States, -1702,KC9RHH,Jesse A Weiss,Noble,Illinois,United States, -1703,KC9NPJ,Jarrett A Weaver,Johnsonville,Illinois,United States, -1801,KB7SIJ,Jeffrey J Pugh,Saint Maries,Idaho,United States,Repeater -1802,KB7SIJ,Jeffrey J Pugh,Saint Maries,Idaho,United States,Icom Hand Held -1803,KB7SIJ,Jeffrey J Pugh,Saint Maries,Idaho,United States,Icom Mobile -1839,BG6TWT,Tim Yang,Wuhan,He Nan Hu Bei An Hui,China,MMDVM -1907,BH8DHV,Weidong Chen,Chengdu City,Sichuan,Gui Zhou Si Chuan ,China,NX-300 -1913,K6INC, SCAN INTERNATIONAL,ELK GROVE,California,United States,443.1500 repeater -1914,AK6O,Rod Ramos,Elk Grove,California,United States, -1915,AD1U,Angel A Datuin,San Jose,California,United States, -1954,W4BPT,Billy P Taylor,Ringgold,Georgia,United States, -1956,KC7SDD,DANA B HANFORD, JR,BAINBRIDGE ISLAND,Washington,United States,Member BARC, W7NPC.org -1963,N5JRN,David Barts,Bainbridge Island,Washington,United States,Handheld, Icom 4161 -1966,ZS6IIX,Pieter Hendrik Rood,Benoni,Gauteng/Mpumalanga,South Africa, -1973,K7NRG,Nestor Punales,San Diego,California,United States, -1976,W6ABJ,Richard Larson,Merced,California,United States,w6abj -1997,KC1AJR,Giovanni M Vincent,East Hampton,Connecticut,United States,kenwood NX800 K2 -1999,M0XZT,Paul Driver,Earlsheaton, Dewsbury,,England, -2001,VE1CRA,Ronald MacKay,,,Canada, -2002,VO1UHF,AVALON RADIO AMATEUR RADIO CLUB C/O CANADIAN RED CROSS,ST. JOHN'S,Newfoundland and Labrador,Canada,vo1digital.wordpress.com -2007,VA7UN,Fred Schrod,Kelowna,British Columbia,Canada,MMDVM - Rpt - DMR302007 -2008,PU2MLA,Mauro L Abrantes,Santa Barbara d,Sao Paulo,Brazil, -2015,HL3BAT,Tae-Sik Shin,Daejeon,DaeJeon Si,Korea S, Republic of, -2074,ZL1OZ,Brett Skinner,Levin,North Island 2,New Zealand, -2075,ZL2AUS,Brett Skinner,Levin,North Island 2,New Zealand, -2096,ZL2EZ,Tony Hughes,Hastings,North Island 2,New Zealand,I\'m awesome -2135,K3ETS,John E Keeting,Riverview,Florida,United States,NXDN ICOM F6061D -2160,BG2XJA,Zhi Chen,Anshan,Hei Long Jiang Ji Lin Liao Ning,China,Portable -2173,KG5YOS,Charles C Hutchinson,San Antonio,Texas,United States,Icom 6061D -2176,KC2KVE,Mike Brouse,Ogdensburg,New York,United States,PORTABLES -2241,KG5VSX,Shelton S Sapp,Plano,Texas,United States, -2326,VA3ITL,Rob Metallo,Maple,Ontario,Canada,Uhf repeater -2332,VE3WHR,Donald H Kramer,OTTERVILLE,Ontario,Canada,443.925 MMDVM Repeater -2345,VE3DPL,George Musikov,SCOTLAND,Ontario,Canada,146.655 mmdvm repeater -2411,KC9GNQ,Frank Gergits,Oviedo,Florida,United States, -2426,N1UL,Ulrich Rohde,Marco Island,Florida,United States, -2498,VK2VAB,Andrew Brierley,Dapto,New South Wales,Australia, -2501,KA1DTA,DAVID A REZENDES,TAUNTON,Massachusetts,United States,(25)01 -2524,KC1ACI,Craig ,N Oxford,Massachusetts,United States,MMDVM Repeater -2580,K4BSC,Brent Case,Rock Hill,South Carolina,United States, -2593,K2ET,Knute Kenneth J Carlson,Batavia,New York,United States,CCS7 3136870 -2647,W2GLD,Jerry Dubzak,Pinckney,Michigan,United States,UHF MMDVM Repeater -2708,VA7CNN,Carl Frederick Schrod,KELOWNA,British Columbia,Canada,MMDVM - Rpt - DMR302708 -2709,VA7CNN,Carl Frederick Schrod,KELOWNA,British Columbia,Canada,MMDVM - Rpt - DMR302709 -2710,VA7NBC,Carl Frederick Schrod,KELOWNA,British Columbia,Canada,MMDVM - Rpt - DMR302710 -2711,VA7NBC,Carl Frederick Schrod,KELOWNA,British Columbia,Canada,MMDVM - Rpt - DMR302711 -2712,VA7VTV,Carl Frederick Schrod,KELOWNA,British Columbia,Canada,MMDVM - Rpt - DMR302712 -2713,VA7PTV,Carl Frederick Schrod,KELOWNA,British Columbia,Canada,MMDVM - Rpt - DMR302713 -2714,VE7OJP,Carl Frederick Schrod,KELOWNA,British Columbia,Canada,MMDVM - Rpt - DMR302714 -2716,VA7JPL,Carl Frederick Schrod,KELOWNA,British Columbia,Canada,MMDVM - Rpt - DMR 302716 -2717,VE7EQN,Christopher Walter,Kelowna,British Columbia,Canada,MMDVM - Rpt - DMR302717 -2728,KD4EZW,Frank Tagliani,Lake Mary,Florida,United States,2500 HT -2754,JG2FFB,Funakoshi Fuminori,Gifu-Motosu,Tokai,Japan, -2819,KB1ZBT,Shane Keith,Oneonta,New York,United States, -2857,BH7PUE,Wu Haian,Guangzhou City,Guang,Hu Nan Guang Dong Guang Xi,China,Portable -2950,WE4HAM,David J Hamm,Raleigh,North Carolina,United States,YAESU FT991 -2953,KD2AFJ,John Caputo,Howell,New Jersey,United States,Using a Yaesu FT2DR -3001,F1IZL,JEAN-YVES RICKLIN,La Tour du Crieu,,France,NX200 -3011,ZL3DMH,Douglas Mervyn Hart,Christchurch,South Island,New Zealand,ICOM F4161 -3019,CT1AIC,Rui Manuel Borges Gomes da Costa,Carcavelos,,Portugal,http://www.qrz.com/db/CT1AIC -3020,JA3ICQ,Nobuo Kubota,kyoto,Kinki,Japan, -3039,BG3PVL,Hue Feng Ma,Shijiazhuang, Shan Xi He Bei Tian Jin,China,Portable -3068,UB3AGT,Artem Karataev,MOSCOW,,Russia,Icom F-4161DT -3070,W4ORL,Ralph Betts,Winter Park,Florida,United States,Mobile -3071,W4LOV,Mike Hensley,Cocoa,Florida,United States,NX800 -3072,N4JTK,John Knott,Orlando,Florida,United States,NX800 -3073,N4JTK,John Knott,Orlando,Florida,United States,Portable -3074,W4MCA,Michael Cauley,Orlando,Florida,United States,NX300 -3075,W4LOV,Mike Hensley,Cocoa,Florida,United States,NX800 -3076,NN4TT,Dave Clausen,Orlando,Florida,United States,NX5300 -3079,W4ORL,Ralph Betts,Winter Park,Florida,United States,Portable -3080,CT1ERW,ANTONIO PACHECO,LISBOA,,Portugal, -3081,W4MCA,Michael Cauley,Orlando,Florida,United States,NX800 -3082,W4LOV,Mike Hensley,Cocoa,Florida,United States,Portable -3083,KD4TWJ,Dean Groe,Orlando,Florida,United States,Mobile NX800 -3087,NN4TT,Dave Clausen,Orlando,Florida,United States,NX300 #2 -3089,OZ5ACI,FRANK TJOERNELUND,3200 HELSINGE,,Denmark,DMR2p25 CrossOver -3092,NN4TT,Dave Clausen,Orlando,Florida,United States,NX3820 -3094,NN4TT,Dave Clausen,Orlando,Florida,United States,NX3320 -3095,NN4TT,Dave Clausen,Orlando,Florida,United States,NX800 H -3113,N7SWX,Robert Thomas,Acton,Montana,United States, -3131,K2KRS,Ken R Stone,Livingston,Texas,United States, -3161,WW6E,Sardxcc Sierra Amateur Radio Dx And Contest Club,Cameron Park,California,United States,Club Fleet -3176,KC2KVE,Mike Brouse,Ogdensburg,New York,United States,MOBILES -3190,ZL3DVR,Douglas M Hart,Christchurch,South Island,New Zealand,F4161-F6061 -3212,AE7NI,John Pershing,Florence,Oregon,United States, -3261,CT1CHX, EDUARDO JOAO CANENA SANTOS,LISBOA 1900,,Portugal, -3262,CT1CVT, JORGE MANUEL CANENA SANTOS,,,Portugal, -3271,N4KEG,Richard Rexroad,Lakeland,Florida,United States,Mobile and or ht's (UHF) -3274,KD4EFM,Evans Mitchell,Lakeland,Florida,United States, -3275,KD4EFM,Evans Mitchell,Lakeland,Florida,United States, -3278,KD4EFM,Evans Mitchell,Lakeland,Florida,United States, -3279,N4KEG,Richard Rexroad,Lakeland,Florida,United States, -3280,KD4EFM,Evans Mitchell,Lakeland,Florida,United States,work radio -3281,N4KEG,Richard Rexroad,Lakeland,Florida,United States, -3285,K4SVT,William Klosowski,Titusville,Florida,United States,Nx300 UHF -3287,K4SVT,William Klosowski,Titusville,Florida,United States,Nx800 -3355,HL3BAT,Tae-Sik Shin,Daejeon,DaeJeon Si,Korea S, Republic of, -3360,K1LNX,Stephen Brown,Knoxville,Tennessee,United States, -3375,KI5ASL,Christopher J Landry,Kenner,Louisiana,United States, -3422,N6JAF,Jeffrey Fisher Fisher,Oxnard,California,United States, -3450,K0KAD,Chad R Taylor,Spokane Valley,Washington,United States,My Portable -3451,K0KAD,Chad R Taylor,Spokane Valley,Washington,United States,My Base Station -3452,K0KAD,Chad R Taylor,Spokane Valley,Washington,United States,Mobile Radio -3564,K2DYC,David C Simmons Jr,Zephyrhills,Florida,United States,Icom 6160 -3633,W8CTC,Chris Campton,Hillsboro,Ohio,United States, -3751,BG6WNP,Lianyun Huang,Wuhan,He Nan Hu Bei An Hui,China,Kenwood Nx300 -4018,HB9FEF,Beni HB9FEF,Basel,BS,Switzerland,iCOM IC-F4400DT -4020,K4XXX,Ed Lemley,London,Kentucky,United States,NX820 Base -4034,BI4RFO,Cao Gang,Zhangjiagang,Shan Dong Jiang Su,China,Portable -4047,KD9IAQ,Doug Paquette,Merrillville,Indiana,United States,Doug's Car -4193,N7ZQS,Wayne Cummings,Marana,Arizona,United States,DM42kl -4239,G0FVX,Bert Barnes,Barton under Needwood,,England, -4242,N4JBL,Jason B Ledbetter,Fuquay Varina,North Carolina,United States,HT -4260,KG7NCV,David A Waller,Mesa,Arizona,United States, -4279,GM0ROU,Tony Butcher,Dundee,,,Scotland, -4288,KD9IAQ,Doug Paquette,Merrillville,Indiana,United States,Doug's Car -4307,WB2LMA,Charles N Lechner,Plano,Texas,United States, -4310,ED3YAH,AMIRED Repetidors a Montcaro,R-3 I R-95 JN00ET 1.447 Metres,,United Nations,http://www.fcr.cat/amired -4317,KC3JCJ,Julio C Folhadella,Easton,Pennsylvania,United States, -4324,N9VJW,Bill Jackson,Glendale,Arizona,United States, -4365,KD9IAQ,Doug Paquette,Merrillville,Indiana,United States,Doug's Base Radio -4431,K0NL,Gregory N Banks,Scottsdale,Arizona,United States,FR-6000 -4512,KD9IAQ,Doug Paquette,Merrillville,Indiana,United States,Doug's Extra Mobile -4649,JG7IMF,Momoi Momoi,Miyagino-Ku, Sendai-,Tohoku,Japan, -4677,AF7M,Gary L Ashkenazy,Tucson,Arizona,United States, -4711,DF1RO,Richard Schiessl,92729 Weiherhammer,,Germany, -4802,HB3YRB,Jullier Alexandre,Verbier,,Switzerland,nx5300 -4804,HB9FMF,Didier GRUNIG,PAYS-D'ENHAUT - VD / Rougemont,,Switzerland,NX5300 -4921,KD9IAQ,Doug Paquette,Merrillville,Indiana,United States,Doug's Portable -4941,KD9IAQ,Doug Paquette,Merrillville,Indiana,United States,Doug's Portable -5000,BI7IFF,Lin Shishen,Guangzhou,Hu Nan Guang Dong Guang Xi,China,Portable -5001,N5QZ,Ryan Mcafee,Searcy,Arkansas,United States,Kenwood NX-820 -5002,N5QZ,Ryan Mcafee,Searcy,Arkansas,United States,Kenwood NX-720 -5003,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-820 -5004,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-720 -5005,AC5AV,Larry A Sicks,Searcy,Arkansas,United States, -5006,AC5AV,Larry A Sicks,Searcy,Arkansas,United States, -5007,N5LKE,James D Ferguson,Searcy,Arkansas,United States,Kenwood NX-800 -5008,AF5WN,Mason A Creager,Cabot,Arkansas,United States,Kenwood NX-700H -5009,KJ5SF,Stanley Rongey,Searcy,Arkansas,United States,Kenwood NX-800 -5035,PY1FT,Florisval Tenorio,Rio De Janeiro,Rio De Janeiro,Brazil, -5077,N9EXR,Michael R.smith,North Little Rock,Arkansas,United States,Kenwood 5200 -5100,K5SRS,Michael B Smith,Fayetteville,Arkansas,United States,NX-5800 Mobile -5101,KC5YQB,WILLIAM P BLAIR,Fayetteville,Arkansas,United States, -5112,EA5FNU,Javier F. S.,Almenara, Castellón,,,Spain, -5124,K5DXR,Mark Sutherland,Siloam Springs,Arkansas,United States,NX320 -5125,AE5OQ,Armstead Feland,Colorado Springs,Colorado,United States, -5134,AE5OQ,Armstead Feland,Colorado Springs,Colorado,United States,Kenwood NX-200 -5143,KC5CQW,Damon R Wascom,Maumelle,Arkansas,United States, -5150,WY6NN,Doug Wynn,Panorama City,California,United States,NX-300/5300 -5151,KC6HFJ,TAMARA S WYNN,PANORAMA CITY,California,United States,NX-300 -5170,K5WMZ,Gary D Partlow,Ward,Arkansas,United States,Kenwood NX-700 -5209,VK2RFI,WICEN NSW INC HUNTER REGION WICEN,CARDIFF, NSW 2285,,Australia,Wicen MMDVM Repeater -5239,K2FM, William J Lupo A.R.C.,Landing,New Jersey,United States,William J Lupo A.R.C -5260,EA5AYB,JOSE ANGEL OROZCO QUINTANA,AGUILAS (Murcia),ES,Spain, -5287,EA5HGE,ANDRES DIAZ GARCIA,AGUILAS (MURCIA),,Spain, -5301,ZL1HN,Brian Farrell,RAGLAN,North Island 1,New Zealand,icom exdn -5303,ZL3DMH,Douglas Mervyn Hart,Christchurch,South Island,New Zealand,Icom F6061 -5304,ZL4DE,Daniel Erickson,Invercargill,South Island,New Zealand,Icom -5305,ZL3DVR,Douglas M Hart,Christchurch,South Island,New Zealand,Icom -5306,ZL4IND,Daniel Erickson,Invercargill,South Island,New Zealand,MultiMode Repeater -5307,ZL4HD,Tom Hardwick,Bluff,South Island,New Zealand, -5308,ZL4BLF,Thomas Hardwick,Bluff,South Island,New Zealand, -5342,VK3JMA,Mark Aitken,Hampton Park,Victoria,Australia, -5542,KD9GUK,Rick Mcallister,Elkhart,Indiana,United States, -5554,EA5HKZ,JOSE MARIA LOPEZ BOX,ALICANTE- ESPAÑA,,Spain,TXEMA -5555,EA5HKZ,JOSE MARIA LOPEZ BOX,ALICANTE- ESPAÑA,,Spain, -5599,W1ZM,Ryan Nelson,Edgemont,Arkansas,United States,NX-5300 -5637,KO3Q,Malcom Waring,Shawnee on Delaware,Pennsylvania,United States, -5645,KN4LUK,Marc D Segal,Port Orange,Florida,United States, -5987,W5ZN,JOEL M HARRISON, SR,JUDSONIA,Arkansas,United States,Kenwood NX-800 -6004,KF5FWE,Mark Eighmy,Bartlesville ,Oklahoma,United States, -6007,CA6JAU,Jose Uribe,Valdivia,Los Lagos,Chile,MMDVM -6020,KE5WPH,Andrew Mccullough,Bartlesville,Oklahoma,United States, -6025,BG6WWH,Huijun Wang,Enshi,He Nan Hu Bei An Hui,China,Kenwood NX348-c -6037,BG6REY,Hong Ren,Enshi,He Nan Hu Bei An Hui,China,Portable -6038,BG6WQX,Guoxiang Li,Wuhan,He Nan Hu Bei An Hui,China,Kenwood Nx-340 -6281,K6HP,Ed Parsons,Murphys,California,United States,HT -6304,NZ6D,David Griffith,San Diego,California,United States,NX-820 -6344,N6LXA,Geoffrey Baehr,Menlo Park,California,United States,ZumspotW -6350,KM6IXB,Richard A Christensen,Oakley,California,United States, -6353,WB5EKU,Donald Jacob,North Hills,California,United States, -6389,WB6DTB,David L Young,Oakley,California,United States, -6410,WW6E,Sardxcc Sierra Amateur Radio Dx And Contest Club,Cameron Park,California,United States,Club Fleet -6412,N6PBC,Bill Parsons,Pinole,California,United States,NX5300 -6418,N5ICK,Nicholas Nixon,Rialto,California,United States, -6430,K4GFD,Norman C Scholer,Greensboro,Florida,United States, -6431,K4GFD,Norman C Scholer,Greensboro,Florida,United States, -6432,K4GFD,Norman C Scholer,Greensboro,Florida,United States, -6439,N4NKV,George L Bast,Tallahassee,Florida,United States, -6514,W8AW,Don V Miller,Broken Arrow,Oklahoma,United States, -6520,BG0CAB,Chao Sun,Shayibake Area . Uru,Bei Jing,China,Portable -6528,KK6HNG,Adrian Dinca,Torrance,California,United States, -6553,N4NQY,JB Edmonds,Evergreen,Virginia,United States, -6564,KC6N,David Hull,San Diego,California,United States, -6577,BM2GJP,Hyman Fan Fan Jia-Yu,Taipei,Taipei,Taiwan, -6600,EA3IK,Enric Vargas,Tokyo,,Japan, -6605,AB6UI,William B Johnson,Torrance,California,United States, -6609,AF6FB,Michael Rickey,Lake Forest,California,United States,Using YSF2NXDN gateway -6613,K2PZ,Manfred Lauterborn,Sunnyvale,California,United States, -6622,KJ4KSG,Lemuel Furman,Bradenton,Florida,United States,First try -6801,HB9VSD,Association Radio Club Amateur Pays-d'Enhaut (ARCAPE),ENTREMONT - VS, site Verbier,,Switzerland, -6803,HB9PE,Association Radio Club Amateur Pays-d'Enhaut (ARCAPE),PAYS-D'ENHAUT - VD,,Switzerland, -6804,HB9FMF,Didier GRUNIG,PAYS-D'ENHAUT - VD / Rougemont,,Switzerland, -6911,WW6P,Dean I Friedman,Los Angeles,California,United States, -7004,JG7IMF,Momoi Momoi,Miyagino-Ku, Sendai-,Tohoku,Japan, -7005,BD7MXN,Wei Zhang,Chongqing,,China,Portable -7008,ON8HH,Hugues Hairson,Gembloux,,Belgium,DMR-ID 2067008 -7017,BI7KJP,Tran Ho,Shenzhen,Hu Nan Guang Dong Guang Xi,China,Portable -7018,BH7KCJ,Eric Chan,Futian Shenzhen,Hu Nan Guang Dong Guang Xi,China,Portable -7022,ON4RD,Rene Detobel,Wepion,,Belgium,DMR ID 2067022 -7032,PA2TSL,Tom Staal,ALMERE,,Netherlands,The Netherlands JO22OI -7046,BG7IPY,Ma Linhui,Guangzhou,Hu Nan Guang Dong Guang Xi,China,Portable -7055,SO7BIT,Bartek Papierski,Lodz,,Poland, -7101,NR6AM,Frances H Nievera,San Diego,California,United States, -7111,NR6AM,Frances H Nievera,San Diego,California,United States, -7112,BI7ISX,Wang Shaohua,Shenzhen,Hu Nan Guang Dong Guang Xi,China,Portable -7132,KF6S,James R Valle,West Hills,California,United States,Last 5 of DMR ID -7171,KM9K,KEVIN M KENNEDY,Bradenton,Florida,United States,km9k@hotmail.com -7244,KF4TIM,Timothy Bernard,peoria,Arizona,United States, -7265,AA6KA,Kevin W Amey,North Highlands,California,United States, -7313,SV4RJY,Konstantinos A. Bozarlis,41500 Nikaia - Larisas,,Greece,Mobile -7327,BH7IOY,Li Jifeng,Guangzhou,Hu Nan Guang Dong Guang Xi,China,Portable -7334,K9NPX,Dan Moses,Farmer City,Illinois,United States, -7343,KG4OJJ,Jay Reid,Americus,Georgia,United States,Portable -7432,KD6MDV,Donald T Tribble,Sacramento,California,United States, -7505,KE2EMS,Matt Mcdonald,OGDENSBURG,New York,United States,DUAL USE -7518,K4HDM,Mark D Hamersly,Sarasota,Florida,United States, -7565,N6MIK,Mike Krueger,Yorba Linda,California,United States, -7666,K9FEH,Chester Vandergriff,Melrose Park,Illinois,United States, -7724,JA1IPJ,Fumio Hashimoto,Yokohama, 222-0011,Kanto,Japan, -7737,N4NKV,George L Bast,Tallahassee,Florida,United States, -7777,EA5IHI,Alberto J. Lopez Martinez,Alicante,ES,Spain, -7782,KJ6ZSP,William F Lieber,El Cajon,California,United States, -7799,KG4DCX,David S Clements,Hopewell,Virginia,United States, -7890,W4RSS,Dick Smith,Fletcher,North Carolina,United States, -7916,AK6O,Rod Ramos,Elk Grove,California,United States, -7925,KA9VYD,Barbara A Vandergriff,Melrose Park,Illinois,United States, -7982,K9DJN,Douglas J Nipper,Danville,Illinois,United States,IC-F6061 -8000,ON5VDK,Van der Kraan Tjardick,Jupille-sur-Meuse,,Belgium,ON0LGE -8003,BD8SN,Sheen Jianjun,Ke Jin Rd. ,Kunming,,Gui Zhou Chong Qing Si Chuan Yun Nan,China,Portable -8005,ON6DP,PAUL DELMELLE,NEUPRE,,Belgium, -8006,JM8IXA,Komatsu Komatsu,Abira-cho,Hokkaido,Japan, -8018,BD8SGK,Tao Hu,Kunming Yunnan,Gui Zhou Si Chuan ,China,PORTABLE -8020,DC5SL,Walter Lenz,81927 Muenchen,,Germany, -8028,BH8DHV,Weidong Chen,Chengdu City,Sichuan,Gui Zhou Si Chuan ,China,NX-300 -8036,K0GUR,Michael Gurski,Denver,Colorado,United States, -8048,BH8SLN,Ke Li,Kunming,Gui Zhou Si Chuan ,China,Portable -8059,N0WTS,Bartley W Grubbs,Lawrenceburg,Indiana,United States, -8061,IK8JHL,FRANCESCO CASERTANO,Napoli,,Italy, -8066,EA8RH,J. Roman Rodriguez Hernandez,Guia de Isora S/C de Tenerife,TF,Spain, -8088,OZ0FT,Frank Thomsen,3200 Helsinge,,Denmark,DMR2NXDN Crossover -8089,OZ5ACI,FRANK TJOERNELUND,3200 HELSINGE,,Denmark,CrossOver TEST -8115,WB5PJB,Gary Sutton,Castle Rock,Colorado,United States, -8157,N2PDQ,Dirk Malsch,Parker,Colorado,United States, -8301,BA7JG,Yan Jian,Guangzhou,All Others,China,Kenwood NX-800 -8306,K0GUR,Michael Gurski,Denver,Colorado,United States, -8328,W0RMT,Bud Talbot,Louisville,Colorado,United States,portable -8344,N7VDR,James Christian,Fort Collins,Colorado,United States,Portable -8405,HB9CSR,GRUPPO CISAR Basel,Basel,,Switzerland,admin hb9tvw -8406,HB9TVW,Gabriele Biscetti,Basel,CH,Switzerland,73 de hb9tvw gabriele Basel -9010,KC1DX,Mauro Abrantes,MIlford,Connecticut,United States, -9011,LA9KY,Frank Hagen,MOSJØEN,,Norway, -9012,F4GEN,Patrice FROMHOLTZ,Villers les Nancy,,France, -9174,N8XYM,Michael E Cremeans,Westerville,Ohio,United States, -9230,N1ID,John Ciullo,East Haddam,Connecticut,United States, -9262,W2MB,Mark Bond,Washington,New Jersey,United States, -9266,W0JAY,Jay Spaulding,Seymour,Connecticut,United States,Real Name Oran Goes by Jay -9267,WA1DDD,Michelle J Listorti,Seymour,Connecticut,United States, -9268,W0JAY,Jay Spaulding,Seymour,Connecticut,United States,Reral name Oran Goes By Jay -9310,K6HP,Ed Parsons,Murphys,California,United States,NX5000 -9371,N1AJW,Alec Wasserman,Bloomfield,Connecticut,United States, -9511,AC1KV,Dan Cantil,Ansonia,Connecticut,United States, -9726,WR2M,Bill Lupo,Landing,New Jersey,United States, -9727,WS2P, William J Lupo A.R.C.,Landing,New Jersey,United States,448.675 Repeater -9834,VA7NY,P.j. Van Baggen,Richmond,British Columbia,Canada, -9921,W1RHS,Rick Swenton,South Dennis,Massachusetts,United States, -10004,N3JSS,Jeffrey Schoap,Millsboro,Delaware,United States, -10082,N3ROY,Samuel C Reeves,Wilmington,Delaware,United States, -10094,W4DHW,Dave Wheeler,Lexington,Virginia,United States,Motorola MMDVN Repeater -10185,K9IU,Indiana University Arc Indiana University Amateur Radio Club,Bloomington,Indiana,United States,K9IU MMDVM UHF Repeater 444.9000 -10242,AG2NJ, ATLANTIC COAST UNITED RADIO ASSOC- ACURA,LINWOOD,New Jersey,United States, -10310,CE1WMW,Ernesto Romero,Calama,Antofagasta,Chile,Base -10370,CE1SJJ,Claudio Mauricio Araya Herrera,Calama,Antofagasta,Chile,Portable -10379,CE8WDB,Rodrigo Lucero Valenzuela,Punta Arenas,Magallanes,Chile, -11006,KB3CGH,Edwin Velis,Washington,DC,District of Columbia,United States, -11021,KC3JYU,John D Thomas,Washington,District Of Columbia,United States, -11026,CT2YUC,Amélia Almeida,Matosinhos,,Portugal, -11070,WA6HXG,Ryan W Mccomb,Hemet,California,United States,Portable -11111,BD2VK,Chen Mingzhi,An Shan,Hei Long Jiang Ji Lin Liao Ning,China,Portable -11148,N3GAR,Garfield G Foster,Birdsboro,Pennsylvania,United States,Wires-X -11310,KC9LYM,Will Crocker,Brookhaven,Georgia,United States, -11337,WA4ASI,George C Hawk,Covington,Georgia,United States, -11485,WA5DKW,James Dowis Dowis,Farmersville,Texas,United States, -11845,W9AMT/R,WILLIAM A TOLBERT, III,INDIANAPOLIS,Indiana,United States,MMDVM repeater -11865,K9IU,Indiana University Arc Indiana University Amateur Radio Club,Bloomington,Indiana,United States,This is for the 147.180 MMDVM Repeater -12002,W4KJP,Kevin Paus,New Port Richey,Florida,United States, -12003,W4KJP,Kevin Paus,New Port Richey,Florida,United States, -12005,KD4TWJ,Dean Groe,Orlando,Florida,United States,Portable IC-F4161 -12006,W4MO,Stewart E Haag,Venice,Florida,United States,NX300 / 320 -12007,W4MO,Stewart E Haag,Venice,Florida,United States,NX800 -12010,KD4DWP,Ben Metzger,Orlando,Florida,United States, -12013,K4NBC,Miguel Orama,Palm Bay,Florida,United States,Icom F4146DS UHF Portable -12014,K4NBC,Miguel Orama,Palm Bay,Florida,United States,Kenwood NX200 VHF HT -12015,K4NBC,Miguel Orama,Palm Bay,Florida,United States,Future UHF Mobile -12016,K4NBC,Miguel Orama,Palm Bay,Florida,United States,M2 Icom F6061D -12021,W4PJT,Paul Towell,Tampa,Florida,United States, -12023,KD4NWL,John Bacon,Holiday,Florida,United States,VHF F3161DS and UHF F4161DT -12045,KJ4SHL,Ryan Owens,Tampa,Florida,United States, -12050,KM4LTG,Brad Bartlett Bartlett,Saint Petersburg,Florida,United States, -12064,W4LOV,Mike Hensley,Cocoa,Florida,United States,Nano Spot -12095,KI4SWB,Mark Hogan,Melbourne Beach,Florida,United States, -12100,OM8KT,Martin Baran,Kosice,,Slovak Republic, -12110,KE4GJG,Richard s Hyde,London,Kentucky,United States,KENWOOD NX300 -12111,KE4GJG,Richard s Hyde,London,Kentucky,United States,KENWOOD NX320 -12112,KE4GJG,Richard s Hyde,London,Kentucky,United States,REPEATER MMDVM -12127,W4KDM,Richard Impson,Port Orange,Florida,United States,Portable NX300 -12135,K3ETS,John E Keeting,Riverview,Florida,United States, -12136,WA4KWK,John Garko,Dunedin,Florida,United States, -12138,N4IRS,Steven S Zingman,Palm City,Florida,United States, -12173,KC4DEA,Chris Zingman,Palm City,Florida,United States,DMR ID: 3112173 -12200,NB9X,PAUL J TOTH,SEMINOLE,Florida,United States, -12201,NB9X,PAUL J TOTH,SEMINOLE,Florida,United States, -12202,NB9X,PAUL J TOTH,SEMINOLE,Florida,United States, -12203,NB9X,PAUL J TOTH,SEMINOLE,Florida,United States, -12204,NB9X,PAUL J TOTH,SEMINOLE,Florida,United States, -12205,N2HUC,Phil Roberrt,Port St. Lucie,Florida,United States,DV4MINI AMBE voice -12208,NB9X,PAUL J TOTH,SEMINOLE,Florida,United States, -12210,N4APG,William B Pfost,Nokomis,Florida,United States,NXDN Radio -12211,N4APG,William B Pfost,Nokomis,Florida,United States,NXDN Radio -12212,N4APG,William B Pfost,Nokomis,Florida,United States,NXDN Radio -12213,N4APG,William B Pfost,Nokomis,Florida,United States,NXDN Radio -12214,N4APG,William B Pfost,Nokomis,Florida,United States,NXDN Radio -12215,WA4ISB,EDWIN P ALLEN, III,SARASOTA,Florida,United States,ED Mobile -12216,WA4ISB,EDWIN P ALLEN, III,SARASOTA,Florida,United States, -12220,N4PK,Paul E Knupke,Largo,Florida,United States,PAUK K. -12221,N4PK,Paul E Knupke,Largo,Florida,United States, -12222,W4PJT,Paul Towell,Tampa,Florida,United States, -12223,W4PJT,Paul Towell,Tampa,Florida,United States, -12224,K4YAZ,THOMAS R COPLEY,St Petersburg,Florida,United States, -12226,KI4SWY,William Stillwell,Plant City,Florida,United States, -12228,W4ECZ,Wayne Peterson,Spring Hill,Florida,United States, -12230,KQ4KX,Richard Sharp,Winter Haven,Florida,United States,Richard Sharp -12231,KQ4KX,Richard Sharp,Winter Haven,Florida,United States, -12234,KD4TWJ,Dean Groe,Orlando,Florida,United States, -12235,N1IC,NICHOLAS J PALOMBA,Indian Rocks Beach,Florida,United States,Nic -12236,N1IC,NICHOLAS J PALOMBA,Indian Rocks Beach,Florida,United States, -12239,K4DKK,Chris Downing,Trinity,Florida,United States,ICOM 4400DS -12240,KR4X,Larry J Gispert,Tampa,Florida,United States, -12241,KR4X,Larry J Gispert,Tampa,Florida,United States, -12242,KM4JXP,Peter Tasker,Woking,Florida,United States, -12245,KD4ACG,Jason Triolo,Hudson,Florida,United States,Icom Mobile -12246,KD4ACG,Jason Triolo,Hudson,Florida,United States,Icom Portable -12247,K2MCI,William Clarkson,Harrington Park,New Jersey,United States, -12250,KE4GYX,David J Blalock,wauchula,Florida,United States, -12271,KG4YZY,DAVID M ANDERSON,NEW PORT RICHEY,Florida,United States, -12272,KE4OSL,KIMON J KOUNGRAS,PALM HARBOR,Florida,United States, -12273,KE4OSL,KIMON J KOUNGRAS,PALM HARBOR,Florida,United States, -12275,W8OJ,Danny R Hurst,Punta Gorda,Florida,United States, -12282,KA9ZRZ,Mike T Beers,Orlando,Florida,United States,Sunny Orlando Florida -12299,KW4YC,Bernd Goetter,Naples,Florida,United States, -12300,KB9RKM,DAVID A TSANG, 297,Riverview,Florida,United States, -12320,N2HBX,Larry Monroe,Orlando,Florida,United States,Mobile -12326,NX4Y,David Krass,Land O Lakes,Florida,United States, -12345,JM8IXA,Komatsu Komatsu,Abira-cho,Hokkaido,Japan, -12350,KA1IJA,Norman Breed,Emery,South Dakota,United States,Mobile Icom -12374,KF4I,Thomas Scott,Palm Coast,Florida,United States,Base -12375,KF4I,Thomas Scott,Palm Coast,Florida,United States,Mobile -12388,K4CBN,Gregory George,Lakeland,Florida,United States, -12478,KM4ECQ,Ryan J Haynie,Avon Park,Florida,United States, -12502,W8OJ,Danny R Hurst,Punta Gorda,Florida,United States, -12523,KM4JVE,Ana L Rivera-Groe,Orlando,Florida,United States,IC-F4161 -12524,KC1ACI,Craig ,N Oxford,Massachusetts,United States,MMDVM Repeater -12526,K4WZV,Robert Bretzman,Brooksville,Florida,United States, -12572,KP4OO,Carlos J Acevedo,Carolina,San Juan,Puerto Rico, -12577,N2DLX,Rich Dunajewski,East Windsor,New Jersey,United States,NX-5800 -12594,K4WZV,Robert Bretzman,Brooksville,Florida,United States,2nd radio -12597,WA2FAA, James Sutkoff,Spring Hill,Florida,United States, -12602,WW3A,Reed Krenn,Glenwood,Florida,United States, -12603,KM4OOD,Guillermo Malave Castro,Royal Palm Beach,Florida,United States, -12604,K4CBN,Gregory George,Lakeland,Florida,United States, -12605,K4CBN,Gregory George,Lakeland,Florida,United States, -12606,K4CBN,Gregory George,Lakeland,Florida,United States, -12607,K4CBN,Gregory George,Lakeland,Florida,United States, -12608,K4CBN,Gregory George,Lakeland,Florida,United States, -12611,W4ZTH,Zach Hale,Inverness,Florida,United States,NX-300 -12613,W4ECZ,Wayne Peterson,Spring Hill,Florida,United States, -12621,W4ZTH,Zach Hale,Inverness,Florida,United States,NX-800 -12638,KA9JYO,Carlos Santini,Ft. Myers,Florida,United States, -12652,N4HYK,Dock Edwards,Saint Petersburg,Florida,United States,DV4mini V201.77 FW- on Pi3 -12666,KI4SWY,William Stillwell,Plant City,Florida,United States,( All Radios ) -12691,KE3WDW,Samuel C Scholer,Clermont,Florida,United States,Sam -12712,KB4OVL,James E Allen,Vero Beach,Florida,United States,ZumSpot YSF2NXDN -12742,KA9ZRZ,Mike T Beers,Orlando,Florida,United States,Sunny Orlando Florida -12751,KD1EH,Tom Mogavero,Boynton Beach,Florida,United States, -12767,KM9Q,Scott Bernard,Saint Petersburg,Florida,United States, -12780,KC4YUA,Brett J Butler,Safety Harbor,Florida,United States, -12836,KD4NFS,Michael Vandevender,North Fort Meyers,Florida,United States, -12869,WD9FTZ,Gregory Drezdzon,Akron,Ohio,United States, -12870,KE8DPC,Cynthia Thompson,Wadsworth,Ohio,United States, -12874,KE4INM,James E Woodson,Bradenton,Florida,United States, -12900,WX4RCF,Ryan French,Tampa,Florida,United States,NX-5300 -12969,AA0NO,James Keller,Dunedin,Florida,United States, -13001,JE3HCZ,Yoshiharu Todo,Omihachiman,Kinki,Japan, -13032,W1KFR,Bill Carreira,Kingsland,Georgia,United States,CCS7 number -13038,KE4QDC,Ferrell Brown,Cumming,Georgia,United States, -13043,N4IRR,Michael A Zingman,Marietta,Georgia,United States,DMR 3113043 -13054,K4QHR,Pete Dulac,Kingsland,Georgia,United States, -13089,K8WF,Bill Frankowski,Lithia Springs,Georgia,United States, -13105,W7QO,Alan Adamson,Buford,Georgia,United States, -13106,W7QO,Alan Adamson,Buford,Georgia,United States, -13107,W7QO,Alan Adamson,Buford,Georgia,United States, -13109,K0OQL,Joel Stacy,Omaha,Nebraska,United States,Rpt ID -13121,W4CML,CHARLES M LINK, II,Atlanta,Georgia,United States, -13122,W4CML,CHARLES M LINK, II,Atlanta,Georgia,United States, -13125,KD4APP,Donald B Woodward,Ball Ground,Georgia,United States,NX300 -13126,KD4APP,Donald B Woodward,Ball Ground,Georgia,United States,F6061D -13127,KD4APP,Donald B Woodward,Ball Ground,Georgia,United States,NX200 -13131,W5JR,Mike Roden,Alpharetta,Georgia,United States, -13132,W5JR,Mike Roden,Alpharetta,Georgia,United States, -13185,KM4DJO,Mark D Fenley,Winder,Georgia,United States, -13400,AB4MM,Marvin A Mealer,Tunnel Hill ,Georgia,United States, -13550,NA4ME,Charles E Smith,Ringgold,Georgia,United States, -13574,KK4GXP,John I Brazel,Waycross,Georgia,United States, -13605,KC4YAP,Paul A Gallager,Milledgeville,Georgia,United States,PART OF THE FALL LINE NETWORK -13613,W9QO,Mike Gee,Braselton,Georgia,United States, -13658,WA4ASI,George C Hawk,Covington,Georgia,United States, -13716,KI4WXS,Stephen Koone,Charlotte,North Carolina,United States,www.charlottedstar.org -13763,NC1L,Eugene Moore Moore,Matthews,North Carolina,United States,www.charlottedstar.org -13815,KG4BKO,Bill Collins,Vidalia,Georgia,United States,nx320 -13900,W8DIG, Central Ohio Digital Interconnect Group,Columbus,Ohio,United States,MMDVM Bridge -13901,W8DIG, Central Ohio Digital Interconnect Group,Columbus,Ohio,United States,UHF -13902,W8DIG, Central Ohio Digital Interconnect Group,Columbus,Ohio,United States,VHF -13903,W8KHW,Kevin Walsh,Columbus,Ohio,United States,UHF NX-5300 -13904,W8KHW,Kevin Walsh,Columbus,Ohio,United States,NX-210G -14003,AE4TC,Scott Galloway,Montpelier,Virginia,United States, -14020,K4XXX,Ed Lemley,London,Kentucky,United States,NX5300 -14021,K4XXX,Ed Lemley,London,Kentucky,United States,NX5200 -14688,AA4CB,Christopher G Bloxsom,Ridge Manor,Florida,United States, -14795,KI4ANR,Kevin L Kimbro,Cottondale,Florida,United States, -14873,N5ALF,John R Allen,Austin,Texas,United States, -15001,N5QZ,Ryan Mcafee,Searcy,Arkansas,United States,Kenwood NX-800H (Vehicle 1) -15002,N5QZ,Ryan Mcafee,Searcy,Arkansas,United States,Kenwood NX-700 (Vehicle 1) -15003,N5QZ,Ryan Mcafee,Searcy,Arkansas,United States,NX-800 (Vehicle 2) -15004,N5QZ,Ryan Mcafee,Searcy,Arkansas,United States,Kenwood NX-700 (Vehicle 2) -15005,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-800 (Vehicle 1) -15006,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-700 (Vehicle 1) -15007,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-800 (Vehicle 2) -15008,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-700 (Vehicle 2) -15009,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-800 (Vehicle 3) -15010,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-700 (Vehicle 3) -15011,N5QT,Dawn Gray,Searcy,Arkansas,United States,Kenwood NX-800 -15012,AC5AV,Larry A Sicks,Searcy,Arkansas,United States,Kenwood NX-800 -15013,AC5AV,Larry A Sicks,Searcy,Arkansas,United States,Kenwood NX-700 -15014,N5QT,Dawn Gray,Searcy,Arkansas,United States,Kenwood NX-700 -15015,N5QS,Roger W Gray,Searcy,Arkansas,United States,Motorcycle Mobile -15016,KG5KS,Kenneth S Thompson,Tuckerman,Arkansas,United States,NX-700HK -15017,KG5KS,Kenneth S Thompson,Tuckerman,Arkansas,United States,NX-800HK -15018,N5QS,Roger W Gray,Searcy,Arkansas,United States,ATV Mobile -15019,N5QS,Roger W Gray,Searcy,Arkansas,United States,ATV Mobile -15020,WA8UBL,Allen W Herrick,Beebe,Arkansas,United States,NX-700 -15021,KD5HRT,Heath Taylor,Mcrae,Arkansas,United States,NX-800 -15022,WA8UBL,Allen W Herrick,Beebe,Arkansas,United States,NX-800 -15023,N5ZA,JOE D BELEW,BEEBE,Arkansas,United States,NX-700 -15024,KF5TPF,Ryan B Nelson,Edgemont,Arkansas,United States,NX-700 -15025,KE5YZP,Miranda B Schwarck,Plano,Texas,United States,NX-700 -15026,AF5OD,Landon D McCord,Searcy,Arkansas,United States, -15027,KB5RFF,SCOTT B GRAY,SEARCY,Arkansas,United States,Kenwood NX-800 -16032,N7ISP,Adam R Crippen,Post Falls,Idaho,United States, -16033,N7ISP,Adam R Crippen,Post Falls,Idaho,United States,ZumSpot -16304,NZ6D,David Griffith,San Diego,California,United States,NX=820 -16315,W9CR,Bryan Fields,St Pete Beach,Florida,United States,7373 in Octal -16405,ON0LN,Repeater Gruitrode,Gruitrode,,Belgium, -16801,OA6AHJ,Carlos Mendoza,Ilo, Peru,Moquequa,Peru, -17002,KC9GMX,Steven R Hamilton,Geff,Illinois,United States,Base F6121D -17004,KC9GMX,Steven R Hamilton,Geff,Illinois,United States,F6061D -17005,KC9NPJ,Jarrett A Weaver,Johnsonville,Illinois,United States,F6121D -17006,KC9GMX,Steven R Hamilton,Geff,Illinois,United States,F4161DS -17007,KC9NPJ,Jarrett A Weaver,Johnsonville,Illinois,United States,F4231DS -17008,KC9RHH,Jesse A Weiss,Noble,Illinois,United States,F4101D -17009,KC9PHK,Michael Dickerson,Flora,Illinois,United States,F4061DS -17011,N9BRG,Daniel Berg,Fairfield,Illinois,United States,kenwood nx800k2 -17026,WA9MNF,Ed Healy,LOMBARD,Illinois,United States, -17082,N2JRW,Johnny Wright,Chicago,Illinois,United States, -17105,KC9OZA,Ryan Runyon,Noble,Illinois,United States,4161DS AND 6061D -17239,N9PBD,Greg Horine,O Fallon,Illinois,United States, -17339,W9DJF,Daniel Fritchie,oblong,Illinois,United States,On nano-spot using ysftonxdn -17340,K9DPM,David Maria,Mahomet,Illinois,United States, -17366,W9SUS,Taylor Leroy,CHICAGO,Illinois,United States,W9SUS@ARRL.NET -17373,W4OA,Shelly F Mitchell,Opelika,Alabama,United States, -17433,KC9ZLL,Andy R Burdette,Springfield,Illinois,United States,NXDN -17476,N9DRF,George Axtmann,Wilmette,Illinois,United States, -17477,N9KO,Calvin Kutemeier,Elk Grove Village,Illinois,United States, -17571,KB9TZQ,James L Riley,Ramsey,Illinois,United States, -17743,N9VHL,Christopher N Wewetzer,Bethalto,Illinois,United States, -17770,KC9BOZ,Robert B Lewis,Pocahontas,Illinois,United States, -17855,AG6RN,Demian W Ross,Sacramento,California,United States,NX-210 -17862,WD9JEN,Mark S Simon,Arlington Heights,Illinois,United States, -17982,K8DJN,RUTH E DEUTSCH,HUBBARD,Ohio,United States,Icom IC-F6061D -18001,JM8IXA,Komatsu Komatsu,Abira-cho,Hokkaido,Japan, -18005,W9AMT,Tony Tolbert,Indianapolis,Indiana,United States, -18016,K9NDU,David Spence,Kendallville,Indiana,United States,Mobile -18017,K9NDU,David Spence,Kendallville,Indiana,United States,Portable -18027,K9NDU,David Spence,Kendallville,Indiana,United States,Mobile -18031,KJ9Q,Gerald D Quebbeman,Austin,Indiana,United States,Austin,IN 47102 -18081,NF9K,William D Atkinson,Noblesville,Indiana,United States, -18091,NF9K,William D Atkinson,Noblesville,Indiana,United States, -18314,K9JTV,Jeff Snodgrass,Martinsville,Indiana,United States, -18333,KB9OFZ,Lola A Nicholson,Bedford,Indiana,United States, -18334,KB9OFZ,Lola A Nicholson,Bedford,Indiana,United States,MMDVM Hotspot -18363,WB9TLH,Dwight Hazen,Kirksville,Indiana,United States, -18365,NA9VY,Chris Gilbert,New Palestine,Indiana,United States, -18366,N9UMJ,Rick Nicholson,Bedford,Indiana,United States, -18379,K9ATR,Milton Gibson,South Bend,Indiana,United States, -18435,K0ITP,Charles E Poch,Firestone,Colorado,United States,HOTSPOT -18480,N9SIU,Robert Lagrange,Greenwood,Indiana,United States, -18854,KC9MEC,Gene Kaiser,South Bend,Indiana,United States, -18888,BH7MTZ,Yang Feng,Shantou,Guangdong,Hu Nan Guang Dong Guang Xi,China, -19189,NG0Q,Randy Macku,Blairstown,Iowa,United States, -19355,KE0AGD,Melissa Macku,Blairstown,Iowa,United States, -19518,KC0YHU,Craig A Rose,Urbandale,Iowa,United States, -19568,KD0NEZ,Barbara E Rose,Urbandale,Iowa,United States, -20001,VO1GME,Geoff M. Ewing,Torbay,Newfoundland,Canada, -20002,VE1AIC,Ronald Mackay,Cornwall,Prince Edward Island,Canada, -20003,VE1AIC,Ronald Mackay,Cornwall,Prince Edward Island,Canada,VHF -20005,LA6UMA,Tommy Kojen,N-0971 OSLO,,Norway,SYSOP -20008,VE1AIC,Ronald Mackay,Cornwall,Prince Edward Island,Canada,VHF -20009,VO1EI,Matthew W Gillie,Torbay,Newfoundland,Canada, -20010,V31SH,Steven Harp,San Pedro Town,Belize District,Belize, -20016,HJ3BUA,Andres A. Buendia Ucros,Bogota,Cundinamarca,Colombia, -20028,K0XM,Chuck Kraly,Overland Park,Kansas,United States, -20034,VO1BBQ,Stephen Mccarthy,St. John'S,Newfoundland,Canada, -20047,VA7NMD,JPPhaneuf ,Chilliwack,British Columbia,Canada,MD380 UHF -20060,EI4KN,Ronan Daly,Cloughjordan, Co. Tipperary,,Ireland, -20105,VE3TEJ,Jim Thomas,London,Ontario,Canada, -20112,DG4WO,Wilhelm Onken,Thale,ST,Germany,Locator: JO51NS -20201,VK2NN,Peter ( Panagiotis ) Garoufalis,Canterbury,Sydney,New South Wales,Australia, -20240,KE0NTT,Kevin S Hood,Lawrence,Kansas,United States, -20296,N7JYS,Eric M Harrison,Russell,Kansas,United States, -20341,MW1COE,Robert Alford,Gas,Kansas,United States, -20451,PD0DIB,Rob van Rheenen,Uden,,Netherlands, -20801,F1MIJ,Pascal Lemal,59111 Bouchain,,France,CCS7 ID 2089001 -20802,F1HBG, ,,,France, -20803,F1HBG, ,,,France, -20804,F1ZWD,. .,.,,France, -20805,F1ZTC, ,,,France, -20807,F4DNF,ERIC PFISTER,Saint-Alban-Auriolles,,France, -20809,F4GRL,YVES JEAN,31600 LHERM,,France, -20810,F5MDR,CAREDDU MICHEL,13800 ISTRES,,France,JN23LM -20813,F8FFP,Sebastien Perrin,Chaffois,,France, -20816,F8FFP,Sebastien Perrin,Chaffois,,France, -20817,F4HLV,Vincent PIEDFORT,Bordeaux,FR,France,CCS7 ID 2086017 -20822,F6FCD,Lionel Lhermitte,JN08UG,,France, -20823,F1PTL,VICOGNE Bruno,RUEIL MALMAISON,,France, -20825,F5CES,Perez Michel,Quantilly,FR,France,Quantilly -20831,F1IZL,JEAN-YVES RICKLIN,La Tour du Crieu,,France, -20832,F4GRL,YVES JEAN,31600 LHERM,,France, -20833,F1ZLF,Relais MMDVM DMR, C4FM,Bordeaux,,France, -20835,F5UII,CHRISTIAN FURST,RIXHEIM,,France, -20836,F6MPN,Gérald TETART,PALAISEAU CEDEX,,France, -20837,F5UAB,Pascal VINCENT,Verderonne,,France,JN19GH -20844,F5ORE,Alain Mouilleron,Nantes,,France, -20847,F4GRL,YVES JEAN,31600 LHERM,,France, -20850,F1IZL,JEAN-YVES RICKLIN,La Tour du Crieu,,France, -20855,F6MPN,Gérald TETART,PALAISEAU CEDEX,,France,MASSY -20856,F5DAN,Daniel VERDEIL,Vitry sur seine,,France,VITRY -20865,F5SHD,Philippe ,LOURDES,,France,IN93xc -20875,F5UOX,FREDERIC VIRVAIRE,PARIS 75019,,France,Paris -20881,F4BQN,Denis Brancart,Rilhac Rancon,,France, -20883,F2VI,PATRICK GADOU,83210,,France, -20886,F6DLE,Jean Sanchette,Carhaix - Plouguer,,France,29270 -20888,F5ZCV,sebastien Perrin,Pontarlier,,France,MMDVM rpt -20890,F1IGY,Jacques GRARE,LIMOGES,,France, -20894,F5LGW,Stéphane Collet,Maisons-Alfort,-,France, -20899,F6GVE,Luc Poirier,Toulon,,France, -21001,K4XXX,Ed Lemley,London,Kentucky,United States,NX5000 series radios -21003,K4KTR,Kyle Robinson,New Haven,Kentucky,United States, -21006,LA9WKA,Rolf Dahl,Drøbak,No,Norway, -21007,W1RHS,Rick Swenton,South Dennis,Massachusetts,United States,Rick -21008,IW1PPB,Andrea OLIVERO,17025 Loano (SV),,Italy, -21012,KK4JPB,James Blue,LOUISVILLE,Kentucky,United States,MMDVM Repeater -21014,K2BUI,Eric J Nihill,East Greenwich,Rhode Island,United States,Eric -21015,SY1BRU,George Koukoutsis,Athens,GR,Greece, -21020,LA9NT,ANDERS TORP,Drobak,,Norway, -21022,OE1GPA,Gerald Pechoc,Vienna,,Austria, -21026,CT1FUK,Cipriano Alfredo Peixoto Lopes Sousa,Matosinhos,,Portugal, -21029,VE1RMJ,Robert Mannette,Oxford,Nova Scotia,Canada, -21112,IW1RNH,Alessio OLIVERO,17025 Loano (SV),,Italy, -21119,IZ1MLT,LUCA MARCHESANO,Mignanego (GE),IT,Italy, -21159,SV1HEP,Chrysanthos Vassilakis,Zografou - Athens,,Greece, -21304,K4XXX,Ed Lemley,London,Kentucky,United States,Work NX300 -21480,EA8EE,JOSE MANUEL MARTINEZ,35007-LAS PALMAS,,Canary Islands,IL27GU -21701,KV4S,Russell Thomas,Chelsea,Alabama,United States, -22001,CS7ACF,Nuno Alexandre da Silva Lopes,3505-246 Nesprido,,Portugal, -22005,CT1FUH,Paulo Cipriano Fernandes Lopes Sousa,6290 - 368 Gouveia,,Portugal, -22007,LU8EUT,Roberto Velasco,Olivos - Buenos Aire,Buenos Aires,Argentina Republic, -22008,N5LCP,Laurent Partimbene,Youngsville,Louisiana,United States,Cajun Country -22027,CS7ACD,Paulo Guilherme Calçada Sousa,Gouveia,,Portugal, -22028,CT5YWF,Graça Maria Soares Calçada,Gouveia,,Portugal, -22039,AF5XP,Christopher W Fuselier,Sulphur,Louisiana,United States, -22040,AG5LG,STEVE R HEALD,Arlington,Texas,United States, -22052,K5LPD,Oren Haydel,Carencro,Louisiana,United States,3122052 CC7 -22067,CS5GVA,CLUBE DE COMUNICAÇÕES do AGRUPAMENTO de ESCOLAS de GOUVEIA,6290-335 GOUVEIA,,Portugal,School radio station -22092,VE2STE,Stephane Levesque,Granby,Quebec,Canada,3022092 -22100,N5UXT,Angelo Glorioso,New Orleans,Louisiana,United States,mmdvm -22103,KI6FQV,Randy J Leipziger,El Dorado Hills,California,United States,NXDN ID -22120,N5WIG,Michael A Kikuchi,Metairie,Louisiana,United States, -22121,N5WIG,Michael A Kikuchi,Metairie,Louisiana,United States,Kenwood NX 5800 K2 -22260,VE2TBU,Sylvain Gingues,Cookshire Eaton,Quebec,Canada, -22280,IU8ADS,Pasquale Marmolo,Casalnuovo di Napoli (NA),IT,Italy,Napoli -22318,DO2BN,Bastian Kuehn,Schoenberg,,Germany, -22349,IW2NNV,Andrea Zamproni,Casalpusterlengo,Lo,Italy, -22478,DO9KAI,Kai Schmidt,Horst,,Germany, -22601,YO8SJU,Sebastian Ungureanu,700155 Iasi,,Romania, -22801,HB9FEF,Beni HB9FEF,Basel,BS,Switzerland,IC-F4400DT -22802,HB9FEF,Beni HB9FEF,Basel,BS,Switzerland,IC-F4400DT -22803,HB9FEF,Beni HB9FEF,Basel,BS,Switzerland,Kenwood NX-5300E -22804,HB9FEF,Beni HB9FEF,Basel,BS,Switzerland,IC-F4400DT -22805,HB9FEG,Jakob Grieder,CH-6677 Aurigeno,,Switzerland,IC-F4400DT -23000,G4KLX,JS NAYLOR,Cromford, MATLOCK,,England,NX5300, MMDVM -23001,M6NBP,Norman W,Brighton & Hove City,,England, -23002,M6NBP,Norman W,Brighton & Hove City,,England, -23007,N1DOT,Kenneth Grimard,Turner,Maine,United States, -23008,CT2KEV,LUIS FERNANDO MIRANDA FRANCO,SILVEIRA -TORRES VEDRAS,,Portugal, -23010,CT2JTR,Pedro Filipe Costa,1900-297 Lisboa,,Portugal, -23043,CT1EYY,MIGUEL CARVALHO,TORRES VEDRAS OESTE,,Portugal, -23047,CT1GFQ,CARLOS FONSECA,Pinhal de Frades - Seixal,,Portugal, -23048,CT1EPE,ANTÓNIO CARRETO,QUELUZ,,Portugal, -23061,CT2IUL,DANIEL MATEUS,LISBOA-AJUDA,,Portugal, -23070,VA3GHI,Bogdan Ghitescu,Toronto,Ontario,Canada,CCS7 1023070 -23074,CT1JIB,Jorge Santos,Palmela,,Portugal,NXDN Reflector -23079,N1WJO,Robert Gould,Casco,Maine,United States, -23083,VA3TWT,Gordon Claridge,Blenheim,Ontario,Canada, -23096,N0UKM,Kevin Badger,Bangor,Maine,United States, -23142,W1KMC,Kevin M Carman,Bangor,Maine,United States, -23143,W1KMC,Kevin M Carman,Bangor,Maine,United States,Portable 2 -23149,CT2HRB,Miguel Silva,LISBOA,,Portugal,Portugal -23167,VA3JNT,Jose Talens,Ottawa,Ontario,Canada, -23173,CT1HDC,PAULO PEREIRA,LISBOA,,Portugal,Portugal -23197,K1DAE,Deborah A Ellis,Bangor,Maine,United States,DMR ID 3123197 -23201,OE1KBC,KURT BAUMANN,VIENNA,A,Austria,TG20000 -23211,OE4CRC,DI Christian K. Rockrohr,JOIS A-7093,,Austria, -23231,DG7ABL,Jens Weigandt,38110 Braunschweig,,Germany,YSF2NXDN -23236,VE3KNI,Terry Stitch,Chatham,Ontario,Canada, -23239,IN3GIN,Harald Schwitzer,39019 Tirol (BZ),,Italy, -23277,VA3EZT,David Lamb,Tavistock,Ontario,Canada, -23286,KC3BVM,Brian Stankovich,Saylorsburg,Pennsylvania,United States, -23300,IW3HKL,PAOLO DAINESE,30175 MARGHERA VE,,Italy, -23360,VA3MET,Rob Metallo,Maple,Ontario,Canada, -23520,GB3CF,Geoff Dover,leicester,,England,TX:145.600 RX:145.000 -23524,G0TJH,IAN FOORD,NEWHAVEN,,England, -23542,PU2LRZ,Rubens Zolotujin,Artur Nogueira,Sao Paulo,Brazil, -23931,VE3IQL,Terrance Cady Basom,Ancaster,Ontario,Canada, -23932,VE3IQL,Terrance Cady Basom,Ancaster,Ontario,Canada,Hotspot -24000,VE3TLT,Trevor Lee Taylor,Straffordville,Ontario,Canada,Mobile radio -24001,KD4RJN,Jamie Stapleton,Ashland ,Virginia,United States, -24002,KK4RER,Jennifer Stapleton,Ashland ,Virginia,United States, -24005,OE4ENU,Ewald Nussbaum,Klingenbach,,Austria, -24006,CT2HBO,Paulo Jose Fernandes Da Cruz,7630-569 Sao Teotonio,,Portugal, -24007,CT2HDQ,JOÃO PAULO,CASTRO VERDE,,Portugal, -24018,CT2GFP,Joao Jose,Portalegre,,Portugal, -24020,K4XXX,Ed Lemley,London,Kentucky,United States,NX5800 -24021,K4XXX,Ed Lemley,London,Kentucky,United States,NX5700 -24112,DF2ET,Florian Wolters,Bochum,,Germany, -24200,LD2HT,Tommy Kojen,N-0971 OSLO,,Norway,MMDVM Gateway -24201,LA9KY,Frank Hagen,MOSJØEN,,Norway,Icom F-5122D 1 -24202,LA9KY,Frank Hagen,MOSJØEN,,Norway,Icom F-5122D 02 -24313,DG9YBN,Norbert Benner,D-45657 Recklinghausen,NRW,,Germany, -24371,DO5YAM,Marco Wittkowski,45711 Datteln,,Germany, -24887,DO4YNH,Hans-Juergen Naujoks,37671 Hoexter,,Germany,Höxter -25001,N5QZ,Ryan Mcafee,Searcy,Arkansas,United States,Kenwood NX-300 -25002,N5QZ,Ryan Mcafee,Searcy,Arkansas,United States,Kenwood NX-200 -25003,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-300 -25004,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-200 -25005,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-320 -25006,N5QS,Roger W Gray,Searcy,Arkansas,United States,Kenwood NX-340U -25007,N5QT,Dawn Gray,Searcy,Arkansas,United States,Kenwood NX-300 -25008,N5QT,Dawn Gray,Searcy,Arkansas,United States,Kenwood NX-200 -25009,AC5AV,Larry A Sicks,Searcy,Arkansas,United States,Kenwood NX-300 -25010,KD5OOW,Tom S McGee,Searcy,Arkansas,United States,Kenwood NX-300 -25011,W5ZN,JOEL M HARRISON, SR,JUDSONIA,Arkansas,United States,Kenwood NX-300 -25012,KD5HRT,Heath Taylor,Mcrae,Arkansas,United States,Kenwood NX-300 -25013,KK5WA,Darin M Dykes,Beebe,Arkansas,United States,Kenwood NX-320 -25014,N5LKE,James D Ferguson,Searcy,Arkansas,United States,Kenwood NX-5300 -25015,KJ5ORD,John Ord,Searcy,Arkansas,United States,Kenwood NX-300 -25016,KB5RFF,SCOTT B GRAY,SEARCY,Arkansas,United States,Kenwood NX-300 -25017,KB5ZUH,Justin T Williams,SEARCY,Arkansas,United States,Kenwood NX-320 -25018,KB5ZUH,Justin T Williams,SEARCY,Arkansas,United States,Kenwood NX-340 -25019,KB5ZUH,Justin T Williams,SEARCY,Arkansas,United States,Kenwood NX-340 -25020,KB5ZUH,Justin T Williams,SEARCY,Arkansas,United States,Kenwood NX-320 -25021,AF5OD,Landon D McCord,Searcy,Arkansas,United States, -25022,KE5YZP,Miranda B Schwarck,Plano,Texas,United States,Icom -25023,KE5YZP,Miranda B Schwarck,Plano,Texas,United States,Icom -25024,KG5CHM,Colt R Boyd,Judsonia,Arkansas,United States,Kenwood NX-300 -25025,KJ5ORD,John Ord,Searcy,Arkansas,United States,Kenwood NX-xxx VHF -25026,WA8UBL,Allen W Herrick,Beebe,Arkansas,United States,Kenwood NX-320 -25027,KF5TPF,Ryan B Nelson,Edgemont,Arkansas,United States,Kenwood NX-200 -25028,WA8UBL,Allen W Herrick,Beebe,Arkansas,United States,Kenwood NX-220 -25029,KF5WHX,James D Ferguson, III,Searcy,Arkansas,United States,Kenwood NX-320 -25030,AC5AV,Larry A Sicks,Searcy,Arkansas,United States, -25031,KJ5SF,Stanley Rongey,Searcy,Arkansas,United States,Kenwood NX-340 -25032,KC5DFH,KIRK T WILLIAMS,SEARCY,Arkansas,United States,Kenwood NX-340 -25033,AF5OD,Landon D McCord,Searcy,Arkansas,United States,Icom F4161DS -25034,KF5TPF,Ryan B Nelson,Edgemont,Arkansas,United States,ICOM 4161 -25035,KG5BMB,Glenda M McCord,Searcy,Arkansas,United States,Icom F4161DS -25039,KC1JET,James E Tynan,Rehoboth ,Massachusetts,United States,Base -25068,N1QD,Joe Harris,Belmont,Massachusetts,United States, -25069,N1COP,Robert F Woodbury, Jr,Halifax,Massachusetts,United States, -25070,WD1L,John O Nelson,Brockton,Massachusetts,United States, -25079,W1RZO,Robert ,Pittsfield,Massachusetts,United States, -25080,N1FZH,Stephen Flood,Pittsfield,Massachusetts,United States,MMDVM -25094,DG9VH,Kim Huebel,66333 Voelklingen/Saar,,Germany, -25100,JF2LHC,Toshimoto Yamaguchi,Anpachi-Gun,Tokai,Japan,YSF2NXDN-FT70D -25101,KD5BVX,Mark Cartwright,Batesville,Arkansas,United States,Kenwood NX-210 -25125,N1TI,Tim Smith,Mattapoisett,Massachusetts,United States, -25144,W1WCF,WALTER C FITZGERALD,RAYNHAM,Massachusetts,United States, -25158,W1MVP,Michael Pasquale,Shrewsbury,Massachusetts,United States, -25203,W1MSG,Craig Gagner,North Oxford,Massachusetts,United States,NX320 -25215,W1MSG,Craig Gagner,North Oxford,Massachusetts,United States,VHF -25221,N0XIA,James Deuel,Orlando,Florida,United States,Kenwood Mobile and Portable -25222,KE4SDC,Ronnie Foster,Sanford,Florida,United States,Portable NX300 -25242,N1GJB,Gregory ,Medford,Massachusetts,United States,NX-340 -25243,W1RZO,Robert ,Pittsfield,Massachusetts,United States,FN32JK -25246,WG1U,Kenneth D Campbell,Assonet,Massachusetts,United States, -25333,W1AKN,John T Buckley,Middleboro,Massachusetts,United States,Mobile -25390,KC1JET,James E Tynan,Rehoboth ,Massachusetts,United States, -25444,W1TAV,Steven W Belcher,East Bridgewater,Massachusetts,United States, -25541,W1ATD, South Shore Digital Radio Group,Hanson,Massachusetts,United States,145.390 MHz -25555,WA1MNQ,MICHAEL R VALENTE, SR,Brockton,Massachusetts,United States, -25582,N1KXJ,Raymond Wall,E. Bridgewater,Massachusetts,United States,Port. -25585,N1AVA,Kenneth J Howland,South Dartmouth,Massachusetts,United States, -25700,NN1D,Antone Souza, III,Swansea,Massachusetts,United States, -25740,WG1U,Kenneth D Campbell,Assonet,Massachusetts,United States, -25743,WG1U,Kenneth D Campbell,Assonet,Massachusetts,United States, -25746,N1OTY,John Frye,Taunton,Massachusetts,United States, -25777,W1BON,Stuart W Studley,Norton,Massachusetts,United States, -25830,KB1CHU,Stephen Black,Marshfield,Massachusetts,United States, -25863,N1ZZN,Jeff Lehmann,Hanson,Massachusetts,United States, -25874,KB1KVD,Jason E Legrow,Brockton,Massachusetts,United States,Icom Mob & Port -25888,K1WGU,ROBERT A BASS,RANDOLPH,Massachusetts,United States, -25889,AB1CQ,Gary Cumiskey,Bridgewater,Massachusetts,United States, -25900,N1ZZR,MATTHEW R CONNORS,BRIDGEWATER,Massachusetts,United States,mobile -25901,N1ZZR,MATTHEW R CONNORS,BRIDGEWATER,Massachusetts,United States, -25957,KC1HO,K Stephen Johnson,Plymouth,Massachusetts,United States,Steve or HO -25958,NS1N,Karl Johnson,Scituate,Massachusetts,United States, -26003,CU3AT,Francisco Gerardo Godinho da Silva,9700-136 ANGRA DO HEROISMO,,Azores,Azors -26004,CU3YA, MARIA INES DIAS ZIMBRON SILVA,ANGRA DO HEROISMO 9700,,Portugal,Azores -26008,W2GLD,Jerry Dubzak,Pinckney,Michigan,United States, -26009,CU3BL,Manuel Simoes de OLiveira,ANGRA DO HEROISMO,,Portugal,Terceira Isl. -26010,W8CED,Colleen Dubzak,Pinckney,Michigan,United States, -26051,VA6RBC,Rommel B Cantos,Edmonton,Alberta,Canada, -26072,VA6JT,Jose Talens,Edmonton,Alberta,Canada, -26089,IU7IGU,Daniele Marra,Galatina(LE),,Italy, -26100,VA6RBC,Rommel B Cantos,Edmonton,Alberta,Canada, -26105,VE6JNT,Jose N. Jr. Talens,Edmonton,Alberta,Canada, -26118,KC8USA,Frederick J Fritz,Prudenville,Michigan,United States, -26156,DL3YEB,Thomas Fritz,D-64390 Erzhausen,,Germany, -26193,DL6SIX,Gustav Siegel,Seeheim-Jugenheim,,Germany, -26200,DF1VB,Jochen Althoff,44139 Dortmund,,Germany,NX-320 -26201,DG9BEW,Hayo Harms,Schwerte,,Germany,NX-320 -26202,DG9BEW,Hayo Harms,Schwerte,,Germany,IC-F4400DT -26205,N8GY,Thomas Eagle,Brooklyn,Michigan,United States,Icom IC-F6061-D -26206,DC5CC,DI Chistian K. Rockrohr,83607 Holzkirchen,,Germany, -26208,DK6PX,Stefan Brendjes,Dietramszell,DL,Germany,ICOM-F4161DT -26209,DL4TTB,Maggie H. Maas,Munich,,Germany,ICOM- F4461DT -26210,DH6MBZ,Josef ,83607 Holzkirchen,,Germany, -26214,DD5KI,Gunnar Sircar,83607 Holzkirchen,,Germany,Holzkirchen DL -26218,DD5JFK,Jakob Franz Ketterl,81373 Muenchen,,Germany, -26238,DL6RBQ,Eberhard Mueller,Inning,BY,Germany,Icom IC4162d -26240,DB0DDS,D-Star 439.4875 MHz -7.6 Shift Repeater and Gateway,Schwerte,,Germany, -26243,DH4MNJ,Uwe Hohendorf,Munich,,Germany,IC-4161D -26244,DF1VB,Jochen Althoff,44139 Dortmund,,Germany,IC-F4400DT -26262,DL1FLW,LAWRENCE WILLIAMS,Leipzig,,Germany, -26265,DM8ANE,Manfred Lichtenstern,81925 München,,Germany, -26353,DC1ZZ,Rolf S.,44797 Bochum,,Germany, -26379,AD4UU,Dave Livesay,Westland,Michigan,United States, -26483,KB8IWO,Vernon Lawson,Beulah,Michigan,United States,DMR ID 1126483 -26491,KD8OFE,Dale Ball,St. Albans,West Virginia,United States,Novi, MI -26821,CT2GBJ,Luis Fernando Pinto Pereira,2410-063 Leiria,,Portugal, -26921,AB8XL,Paul R Zuhlke,Metamora,Michigan,United States, -26981,N1UFO,Gabriel O Guzman,Brooklyn ,New York,United States, -27002,IZ7GLL,MAX LEONETTI,Bitonto(BA),,Italy,JN81IC -27040,IZ7DJV,TONINO OSTUNI PINTO,Monopoli,BA,Italy,Portable -27041,IK7YTQ,LUIGI LIGUORI,NEVIANO LE,IT,Italy, -27042,IW7DIG,Claudio Michele Liguori,NEVIANO ( Lecce),IT,Italy, -27068,DL1IK, ,,,Germany,http://dl1ik.de -27083,IZ7YPK,IPPOLITO D'ALESSIO,70123 BARI,,Italy, -27101,KI4SWB,Mark Hogan,Melbourne Beach,Florida,United States,Icom Portable -27102,KP4OO,Carlos J Acevedo,Carolina,San Juan,Puerto Rico,Icom Portable -27103,KI4HZP,Russell D Wolfgram,Malabar,Florida,United States, -27104,KM4TFS,Kenneth J Hallenbeck,Melbourne,Florida,United States, -27105,KM4LPP,Thaddeus J Misilo,Palm Bay,Florida,United States, -27111,K4BQN,Edwin Cortes,Palm Bay,Florida,United States, -27115,N4KLB,Kevin L Brinsmaid,Melbourne,Florida,United States, -27127,N9PBD,Greg Horine,O Fallon,Illinois,United States, -27128,N9PBD,Greg Horine,O Fallon,Illinois,United States, -27152,DC4AS,Andreas Scholz,Eislingen,,Germany, -27164,IW7DVM,Giuseppe .,Talsano (Taranto),,Italy, -27174,IZ7AUH,Francesco "FRANK" GIACOIA,Taranto,TA,Italy, -27177,IU7IHG,Pietro Paolo Margheriti,Nardò,IT,Italy, -27178,IU7IHG,Pietro Paolo Margheriti,Nardò,IT,Italy,JN90AE -27180,IZ8GUR,Fulvio Sguazzo,Potenza,PZ,Italy,JN70VP -27200,EI2ET,MANFRED LAUTERBORN,GALWAY,,Ireland, -27201,KI4SWB,Mark Hogan,Melbourne Beach,Florida,United States,Icom Mobile -27202,KP4OO,Carlos J Acevedo,Carolina,San Juan,Puerto Rico,Icom Mobile -27215,IK7XTA,DOMENICO PISANO,Carapelle (FG),I,Italy,Loc.JN71UI -27237,VA7UN,Fred Schrod,Kelowna,British Columbia,Canada,NXDN Radio (DMR3027237) -27277,VE7EQN,Christopher Walter,Kelowna,British Columbia,Canada,NXDN Radio (DMR3027277) -27307,CT1JIB,Jorge Santos,Palmela,,Portugal,MMDVM Repeater -27308,CT2JAY,Paulo Oliveira,Praia de Buarcos, Figueira da Foz 3080,,Portugal, -27309,CT2JAY,Paulo Oliveira,Praia de Buarcos, Figueira da Foz 3080,,Portugal, -27320,KD0SGX,Mike Eisenzimmer,Farmington,Minnesota,United States, -28001,K3KRS,Ryan M Simpson,Willoughby,Ohio,United States, -28009,LA7GOA,Morten Bach,1570 Dilling,,Norway, -28011,N5KDV,Jack Patterson,NATCHEZ,Mississippi,United States, -28012,LA6TMA,FREDRIK SKORGE,1519 MOSS,,Norway, -28015,IZ8QKP,Michele Chiarolanza,Casapulla ( Caserta ),,Italy,Casapulla (Caserta ) -28017,KB5SAT,Herbert L Cooley,Hurley,Mississippi,United States, -28027,AA5SG,Jeffery S Grantham,Ellisville,Mississippi,United States, -28028,W5NRU,Jeffery Networked Radio User,Ellisville,Mississippi,United States,Club callsign - AA5SG trustee -28050,IW8ELN,Roberto De Guglielmo,Montemiletto (AV),IT,Italy,Montemiletto (AV) -28054,IK8UHA,ANTONIO BARBATO also K8UHA,80144 NAPOLI,,Italy,NAPOLI -28058,DK2PZ,Manfred Lauterborn,85627 Muenchen-Grasbrunn,,Germany, -28065,DL3NCK,Sassan ,90765 Fuerth,,Germany, -28077,IZ8VGJ,Ilenia Meola,Montemiletto (AV),IT,Italy,Montemiletto (AV) -28089,I8ULU,GIACOMO PALUMBO,81016 - Piedimonte Matese (CE),CE,Italy,Loc. JN71EI -28105,WD5FNW,EDWARD J CSASZAR, JR,Saltillo,Mississippi,United States, -28165,IK8UHA,ANTONIO BARBATO also K8UHA,80144 NAPOLI,,Italy,NAPOLI -28168,IZ8UMO,DIGILAND TELEGRAM GROUP ITALIA,XLX-113,,Italy,NAPOLI -28267,IZ8QAD,Filomeno PERNA,Serino (AV),,Italy,Serino (AV) -28308,DH5IS,Bernd (Ben) Goetter,Wuerzburg,,Germany, -28318,IZ8QAD,Filomeno PERNA,Serino (AV),,Italy,Serino (AV) -28406,IZ8UMO,DIGILAND TELEGRAM GROUP ITALIA,XLX-113,,Italy,NAPOLI -28565,DM8ANE,Manfred Lichtenstern,81925 München,,Germany,Mane Minga -28677,TA2IKY,Kadir Akkus,YALOVA,TR,Turkey,MMDVM Hotspot -28742,DK3QG,Erwin Herberg,85609 Aschheim,,Germany,TG20000 -29037,IW9CLF,Giuseppe Galizia,Siracusa,IT,Italy,Jm77oc -29045,IW9EFE,MARCO Q. GUARNACCIA,95037 SAN GIOVANNI LA PUNTA ( CT ),,Italy,Hotspot -29071,IT9GNJ,Rino ,Piazza Armerina (ENNA) JM77EJ,,Italy,Hotspot -29093,IT9SWH,Alfredo Scirè,Catania,IT,Italy,Hotspot -29143,DL1FLW,LAWRENCE WILLIAMS,Leipzig,,Germany, -29170,KC9RAT,Francis Lubinski,Bayside,Wisconsin,United States, -29192,IT9GNJ,Rino ,Piazza Armerina (ENNA) JM77EJ,,Italy,Hotspot -29401,OA4CLM,Giovanni Collado,Lima,Lima,Peru, -29999,KB8JNM,Michael P Mays,East Liverpool,Ohio,United States,Gateway Bridge -30018,CT1HDC,PAULO PEREIRA,LISBOA,,Portugal, -30310,CE3AA,Radio Club De Chile,Santiago,Reg.Metr. De Santiago,Chile, -30505,KG6MQE,Jim Robinson,hamilton,Montana,United States, -30571,WX4RCF,Ryan French,Tampa,Florida,United States, -31003,F4GRL,YVES JEAN,31600 LHERM,,France, -31009,W4SFA,Scott Carmichael,Montgomery,Alabama,United States, -31018,KK4JXD,Jaychym A Bryant,Palm Harbor,Florida,United States, -31036,K0OQL,Joel Stacy,Omaha,Nebraska,United States,Unit 1 -31042,N9VJW,Bill Jackson,Glendale,Arizona,United States,Mobile -31043,N4IRR,Michael A Zingman,Marietta,Georgia,United States,DMR ID 3113043 -31045,KJ4SHL,Ryan Owens,Tampa,Florida,United States, -31094,KB1O,Jean B Richeme,Norwalk,Connecticut,United States, -31096,K0OQL,Joel Stacy,Omaha,Nebraska,United States,Unit 2 -31098,WX9KVH,Kyle Van Hoogen,Greenfield,Wisconsin,United States, -31099,KT4ROY,Doug Gooden,Troy,Alabama,United States,W4DBG Trustee -31117,K4QHR,Pete Dulac,Kingsland,Georgia,United States, -31146,KD2KWD,Michael Santamaria,Paramus,New Jersey,United States,Kenwood -31164,N2NUO,Mark Robinson,Waverly,New York,United States, -31210,WB4IVB,Henry Hamblin,Corbin,Kentucky,United States, -31220,K5OZ,David E Hartley,Slidell,Louisiana,United States, -31221,W5SLA, OZONE AMATEUR RADIO CLUB,Slidell,Louisiana,United States, -31241,N3TUK,Louis Velis,Hyattsville,Maryland,United States, -31250,KD7LMN,Richard L Schmitt,Opp,Alabama,United States,18 Wheel Mobile -31300,WX9KVH,Kyle Van Hoogen,Greenfield,Wisconsin,United States, -31301,WX9KVH,Kyle Van Hoogen,Greenfield,Wisconsin,United States, -31304,K4XXX,Ed Lemley,London,Kentucky,United States,Work/Home Base NX800 -31332,KN1W,Luis Aguilar,Londonderry,New Hampshire,United States, -31337,K4OSS,Charles W Ross,Livingston,Texas,United States, -31364,KE2EMS,Matt Mcdonald,OGDENSBURG,New York,United States,VHF PI -31415,PY1EGG,Carlos R. M. Levy .,Rio De Janeiro,Rio de Janeiro,Brazil, -31421,N3GAR,Garfield G Foster,Birdsboro,Pennsylvania,United States, -31460,WV8CW,Charles C Wiant,Miller,South Dakota,United States, -31480,WA5VYK,Joe Detiveaux Detiveaux,Odessa,Texas,United States,wa5vyk@gmail.com -31482,W5LND,Lloyd Duck,Big Spring,Texas,United States, -31575,W4RAM,Alberto Mesa Reina,West Palm Beach,Florida,United States,http://www.qrz.com/db/W4RAM -31624,KN4MER,Sebastien Perrin,Lexington,Kentucky,United States,73\'z -31669,N3MEL,Glenn R Allison,Downingtown,Pennsylvania,United States, -31672,MW0MWZ,Andy Taylor,Blackwood,,Wales, -31900,N3FE,Corey Dean,Mansfield,Pennsylvania,United States,NXDN and CapPlus -31970,WD6STR,Ed Sierra Amateur Radio Club,Murphys,California,United States,Club -32266,KG4DCX,David S Clements,Hopewell,Virginia,United States, -32323,F5BSF,Stephan GRAS,Tourrenquets,,France, -33000,N1PA,Paul Anzalone,Merrimac,New Hampshire,United States,NEW HAMPSHIRE REPEATER -33001,N1PA,Paul Anzalone,Merrimac,New Hampshire,United States, -33002,N1PA,Paul Anzalone,Merrimac,New Hampshire,United States, -33104,K1CF,Wayne Dailey,Concord,New Hampshire,United States, -33333,N2XDC,Luiz A Pontes,Mount Sinai,New York,United States,43159 -33334,KY1U,Greg Soucy,North Walpole,New Hampshire,United States, -33633,KK4ZVL ,Suriyan Gantiya,Melbourne,Florida,United States,US callsign -34001,N2WNS,Bill Hausmann,Boonton,New Jersey,United States,Portable -34002,N2WNS,Bill Hausmann,Boonton,New Jersey,United States,Base -34044,N2ICV,Michael W Andrescavage Sr,Blackwood,New Jersey,United States, -34062,WR2M,Bill Lupo,Landing,New Jersey,United States, -34064,N1IRL,Rick Fiorey,Budd Lake,New Jersey,United States, -34086,KC2VRJ,Paul M Nannery,Fords,New Jersey,United States, -34094,W2SJW,Scott J Wilson,Washington ,New Jersey,United States, -34127,DG3YJB,JAN BEBA,D-45663 RECKLINGHAUSEN,,Germany, -34135,DO3DN,Horst Krah,44805 Bochum,,Germany, -34149,IV3JDV,ROBERTO PISCHIANZ,TRIESTE,,Italy, -34239,W4ITG,Mark A Herman,Somerset,New Jersey,United States, -34397,DO2QG,Andreas Goldbohm,Bad Driburg,,Germany,Jumbospot with Pistar -34538,N2VYT,Patrick E Farcon,Fords,New Jersey,United States, -34724,DG1DAV,AXEL BITSCH,D-46485 WESEL,,Germany, -34739,KC2VYI,Mark D Sacharoff,West Milford,New Jersey,United States, -34788,DO6KC,Christian Krah,44805 Bochum,,Germany,Bochum -35259,G6PAP,Stephen M Hale,BURNTWOOD,,England, -35467,GB7GD,Nov Holder (Keeper) JIM GM0MYQ,ABERDEEN,,Scotland,145.6875 TX 145.0875 RX -35772,KB3FHS,Lorin B Bedford,Towanda,Pennsylvania,United States, -36001,W2CCR,Chris Curtis,Galway,New York,United States,NX300 -36002,KC2VOB,Asad Khan,New York,New York,United States,NX-5800 -36003,KC2VOB,Asad Khan,New York,New York,United States,NX-300GK -36134,N2SRO,Mike Mollet,Pitman,New Jersey,United States,Portable -36147,W2LGB,Lawrence Berkowitz,Thiells,New York,United States,ICOM -36149,W2LGB,Lawrence Berkowitz,Thiells,New York,United States,KENWOOD -36241,AE2JM,Josh Markoff,Newburgh,New York,United States, -36244,K2COP,Gregory R Felter,Amsterdam,New York,United States,Greg -36251,KB2VQS,Michael T Maloy,Schenectady,New York,United States, -36364,KA2Y,Carlton A Ellis,Webster,New York,United States, -36374,WB2LMV,Glenn L Roeser Roeser,Napanoch,New York,United States, -36549,N2ADK,Gordie Fox,Munnsville,New York,United States, -36558,AI2M,Daniel Porter,Rochester,New York,United States, -36602,N2LEN,Leonard Signoretti,Catskill,New York,United States, -36712,KA2NDW,Mike Dewaele,Clyde,New York,United States,Icom m obile -36794,KC2VER,Anthony Hart,Auburn,New York,United States,ICOM 6061 -36874,W2ACC,David J Mette,Waterloo,New York,United States,Icom 6061d -36965,KD2LGM,Miles Persing Persing Jr,Romulus,New York,United States,ICOM 6061 -37001,KA4YMY,Stephen Koone,Gastonia,North Carolina,United States,NX320 -37009,KA4YMY,Stephen Koone,Gastonia,North Carolina,United States, -37010,KA4YMY,Stephen Koone,Gastonia,North Carolina,United States, -37036,KH2PM,Chris Mckendry,Raleigh,North Carolina,United States,FM05 -37072,W4DCA,David Arndt,Dobson,North Carolina,United States, -37076,N1FTE,Keith Page,Cary,North Carolina,United States, -37156,K4SQI,Steve Blackford,Winston Salem,North Carolina,United States, -37202,KD4MC,Michael Callam,Four Oaks,North Carolina,United States, -37212,K4RSG,Shawn Goodin,Harrisburg,North Carolina,United States, -37309,KW4PD,David A Nichols,Oakboro,North Carolina,United States, -37325,DG6GT,Karl-Heinz Hecker,Weil am Rhein,,Germany,PI-Star Service -37364,KI4UDZ,Ray Sipe,Richfield,North Carolina,United States, -37400,9Z4RG,Ravindranath Goswami,Port-Of-Spain,Woodbrook,Trinidad and Tobago,robby@9Z4RG.com -37401,9Y4DG,Dev Gosine,San Fernando,None,Trinidad and Tobago, -37402,9Y4DG,Dev Gosine,San Fernando,None,Trinidad and Tobago, -37403,9Y4SH,Steve Headley,St. James,None,Trinidad and Tobago, -37404,9Y4FIFA,FIFA WorldCup 2018 Special Call Trinidad and Tobago Amateur Radio Society,Port of Spain, Trinidad & Tobago,,Trinidad and Tobago,FIFA World Cup 2018 Special Event Station. -37480,N5EMT,Bruce Lantz,Asheboro,North Carolina,United States, -37595,KM4NNO,Juan Carlos Pérez De Castro,Morrisville,North Carolina,United States, -37643,KJ4KEU,Eric D Broyles,asheville,North Carolina,United States, -37775,N1UJ,Ted Root,Holly Springs,North Carolina,United States,NX-320 -37857,KA4EBB,Chad L Maxwell,Concord,North Carolina,United States, -37946,K4RSG,Shawn Goodin,Harrisburg,North Carolina,United States, -38196,DK7SB,Stefan Baldauf,Landsberg am Lech,,Germany, -38888,BH7PUE,Wu Haian,Guangzhou City,Guang,Hu Nan Guang Dong Guang Xi,China,Mobile -39000,KC8YQL,William L Drummer,Continental,Ohio,United States,443.8875 repeater -39001,KC8YQL,William L Drummer,Continental,Ohio,United States,NXDN-1 -39002,KC8YQL,William L Drummer,Continental,Ohio,United States,NXDN-2 -39003,KC8YQL,William L Drummer,Continental,Ohio,United States,NXDN-3 -39004,KC8YQL,William L Drummer,Continental,Ohio,United States,NXDN-4 -39041,N8NJ,Larry Weaver,Northwood,Ohio,United States, -39083,KD8VIQ,Gary Limbert,Parma,Ohio,United States,Port 1 -39084,KD8VIQ,Gary Limbert,Parma,Ohio,United States,Portable 2 -39086,KC8YQL,William L Drummer,Continental,Ohio,United States,NXDN-820 -39087,AB8RG,Greg Santaromita,Dayton,Ohio,United States,DMRID/CCS7 3139087 -39114,WY8E,Matt Harris,Columbus,Ohio,United States, -39133,N8JSW,Joshua S Witsberger,St.Clairsville,Ohio,United States, -39239,W8CTC,Chris Campton,Hillsboro,Ohio,United States, -39257,KD8VIQ,Gary Limbert,Parma,Ohio,United States,Mobile 1 -39258,KD8VIQ,Gary Limbert,Parma,Ohio,United States,Mobile 2 -39273,KE8BTV,James Hutching,Newcomerstown,Ohio,United States, -39390,KB8KOJ,Sterrick William,Centerville,Ohio,United States, -39446,KE8BUO,Dave Southside Digital Group,Dayton,Ohio,United States, -39516,AC8WS,Joel Retholtz,Sylvania,Ohio,United States,EN81DP -39521,N8OFP,Delbert T La Bo,Rittman,Ohio,United States, -39557,N8QQ,Bradford A Mcconahay,Cincinnati,Ohio,United States,n8qq.com -39640,NU8H,David L Sharp,Cincinnati,Ohio,United States, -39828,W8EJC,Randal L Tuttle,Van Wert,Ohio,United States, -39863,W8FLH,Adam T Liette,Greenville,Ohio,United States, -39925,KD8VIG,Ryan S Bowman,Beavercreek,Ohio,United States, -40001,VU3KAZ,Krishna Kumar,Bangalore,Karnataka,India, -40006,TG8AHQ,Carlos Miralbes,Quetzaltenango,All,Guatemala, -40024,N5YEI,Jeffrey T Dalrymple,Jay,Oklahoma,United States,NX-5800 Mobile -40073,WX5OU,John Simon,Broken Arrow,Oklahoma,United States, -40076,WX5OU,John Simon,Broken Arrow,Oklahoma,United States, -40124,N5YEI,Jeffrey T Dalrymple,Jay,Oklahoma,United States,NX-5300 Portable -40150,EA1IGN,Ismael Zarzoso Garrote,Salamanca,,Spain, -40208,KM4SGI,Kentuckiana D Star Amateur Radio Club,Louisville,Kentucky,United States, -40284,VR2XNG,Dawood Ng,Quarry Bay,Hong Kong,China,YSF cross mode -40285,VR2UNG,Farid Ng,North Point,Hong Kong,China, -41007,PA3EKE,Rob MAAS,HUIZEN,,Netherlands, -41017,PA0WBB,JWC VAN BRENK,1271xc HUIZEN,,Netherlands, -41019,EA1CRF,Pedro Gonzalez del Valle,Ely,,England, -41028,PA3CQJ,Rutger ,Amsterdam,,Netherlands, -41047,PY1USK,Fernando Souto,Rio De Janeiro,Rio De Janeiro,Brazil, -41050,EA1IGN,Ismael Zarzoso Garrote,Salamanca,,Spain, -41065,PH0DV,Dick Vos,Huizen,New Hampshire,Netherlands, -41100,XE1F,Juan Carlos Pérez ..,Mexico City,Mexico City,Mexico, -41111,EA1IST,Julian Gaitero Martin,32004 Ourense,,Spain, -41146,EA1CIU,Tomás Manuel Abeigón Vidal,Pontevedra,PO,Spain, -41152,EA1GLE,Roberto Perez Martínez,Villariezo (Burgos),,Spain,NX 320 -41158,AC0WN,Julie A Mcgrew,Florence,Oregon,United States, -41173,XE1ODN,Edgar Duran,Mexico City,Distrito Federal,Mexico, -41186,KB7VIS,Kirk H Johnson,Springfield,Oregon,United States, -41248,EA1IWY,Jose Carlos Gaitero Lagarellos,Ourense,,Spain, -41279,KC7DMF,Mark A Johnston,Redmond,Oregon,United States, -41322,EA1AYL,JOSE MANUEL PEREZ ACES,33120-PRAVIA-ASTURIAS,,Spain,ANYTONE AD868UV -41334,N7GYL,Chris E Sorensen,Florence,Oregon,United States, -41421,PY1YB,IVAN SILVA,SAN GONZALO - RIO DE JANEIRO,,Brazil, -41490,EA1BL,ADOLFO MONTOYA MARQUEZ,LA CORUÑA,,Spain, -41502,EA1CUE,JOSE MARIA VALLADARES ESTREMADOURO,POBRA DE TRIVES (OURENSE),,Spain, -42001,EA2IP,Jesus Maria ,Sestao,,Spain, -42005,N3RPV,Chris Kelly,Allentown,Pennsylvania,United States, -42006,EA2CQ,IÑIGO BASTARRIKA,VITORIA-GASTEIZ,,Spain, -42019,XE2SI,Juan Tellez Amezcua,Tijuana,Baja California Norte,Mexico, -42025,XE2MBE,Eliud Bueno Moreno,Durango,Durango,Mexico, -42029,PU2PYC,Jefferson Grilo,Taboao da Serra,Sao Paulo,Brazil, -42033,N3TPE,Timothy Eichelman,Glenolden,Pennsylvania,United States, -42039,EC2UT,Oscar Galvan,Zaragoza,,Spain, -42049,WA3ADI,Vincent Buono,Havertown,Pennsylvania,United States, -42052,WA3UVV,Cory Sickles,Uniontown,Pennsylvania,United States, -42058,N3BAH,Abraham Smith,Latrobe,Pennsylvania,United States, -42065,KO3Q,Malcom Waring,Shawnee on Delaware,Pennsylvania,United States, -42077,N3UJV,Paul Petruska,Hatboro,Pennsylvania,United States, -42125,AA3XN,John Ernandez,Chalfont,Pennsylvania,United States, -42136,KC4YOZ,Ken Johnson,Newtown Square,Pennsylvania,United States, -42164,EA2DCR,Agustín Zubasti Madoz,Artica, Navarra,,Spain,Pamplona-Spain -42237,M0GLJ,Adrian Craig,NOTTINGHAM,,England, -42261,M0VVA,Andrew G Amos,Goffs Oak, Hertfordshire,,England, -42278,KB3KBD,Daniel S Mackelvey,Bally,Pennsylvania,United States, -42295,N3CNJ,David J Hahn,Delta,Pennsylvania,United States, -42323,W3WGS,William G Smith,Gilbertsville,Pennsylvania,United States, -42331,G0NMY,Mark Longson,Stoke on Trent. Staffordshire.,,England, -42344,G4FDL,Max France,St Helens,,England, -42345,N3XCC,Michael S Zimmerman,Boswell,Pennsylvania,United States, -42434,M3PAJ,Pete Jones,Sheffield,,England, -42460,M0VSE,Phil Taylor,Leicester,,England, -42473,KB3AWQ,John Springman,Williamsport,Pennsylvania,United States,KB3AWQ.com -42576,N8BLK,Arthur F Clemons,Philadelphia,Pennsylvania,United States, -42665,M6NBP,Norman W,Brighton & Hove City,,England, -42723,N3GBJ,Christopher D Ruhl,Collingdale,Pennsylvania,United States, -42817,N3CNJ,David J Hahn,Delta,Pennsylvania,United States,Downtown Delta, Pa -42902,LA9KY,Frank Hagen,MOSJØEN,,Norway,Repeater -42950,KE8HTA,Debra A Sickles,Uniontown,Pennsylvania,United States, -43002,PA1GF,Gerjan Faber,Amersfoort,,Netherlands, -43003,PE1NWR,MT FABER-BAKKER,3823JD AMERSFOORT,,Netherlands, -43006,EA3IK,Enric Vargas,Tokyo,,Japan,Kenwood -43009,VU2UUU,Kaustav Saha,Gurgaon,Haryana,India,ML88nk -43015,EA3IE,Jose ,CP 08620 Barcelona,,Spain, -43037,EA3FRB,Jaume Compte,TERRASSA, E-08222,,St Martin,Terrassa -43040,EA3HVF,JOSE .J LEON,SANT FELIU DE LLOBREGAT, BARCELONA,Sp,Spain,Spain -43042,PA7LIM,David Grootendorst,Nieuwegein,,Netherlands,BlueDV -43048,EA3ES,Enrique Belmonte Pozo,Almoster, Tarragona,,Spain,Spain -43051,EA3EG,Eduard ,Arenys de Munt,,Spain,Spain -43119,EA3RDG,DIGIGRUP-EA3 ,Catalunya,,Spain,http://www.digigrup.org -43126,EA3DGI,Texte In Protest EB3TC,Republica de CATALUNYA,,Andorra,JN01SU -43127,EA3GZL,Javier Jané Chueca,08172 - Sant Cugat del Vallés (Barcelona),,Spain, -43175,EA3EIZ,Manuel Díaz Jiménez,Santa Perpetua de Mogoda,,Spain,Spain -43694,M6PZT,Rick Hankinson,Bridport,,England, -43751,N4IRS,Steven S Zingman,Palm City,Florida,United States, -44001,K2BUI,Eric J Nihill,East Greenwich,Rhode Island,United States, -44002,K2BUI,Eric J Nihill,East Greenwich,Rhode Island,United States, -44007,W2DAN,David A Neal,Tiverton,Rhode Island,United States,NX700 -44009,KA1MXL,Kevin T Halton,Warwick,Rhode Island,United States,NX300 -44010,N1JBC,Jed Barton,Barrington,Rhode Island,United States,BARRINGTON -44012,PE1PLM,GUUS VAN DOOREN,4417BE Hansweert,,Netherlands, -44022,KA1MXL,Kevin T Halton,Warwick,Rhode Island,United States,Nx300 -44026,N1GMB,Glenn Butterfield,West Warwick,Rhode Island,United States, -44035,EA4DDL,David Conde Martín,Valmojado, Toledo,,Spain, -44037,KA1BB,Bradley S Brown,Woonsocket,Rhode Island,United States, -44054,EA4EZW,Vicente Juan,Madrid,,Spain,SPAIN -44077,EA4HL,Bernardo Carballo,Plasencia (Cáceres) Extremadura,,Spain, -44116,EA4AOJ,Jose Luis V M,Madrid,ES,Spain,SPAIN -44117,EA4GAX,Sergio ,Manzanares el Real (Madrid),,Spain,IN80BR -44133,EA4DKA,Jose Enrique Espejo Celada,Madrid City,,,Spain,Chamberi -44135,PD4MM,Marcel QPO,Kerkrade,,Netherlands,Netherlands -44298,N1JBC,Jed Barton,Barrington,Rhode Island,United States, -44329,EA4DAC,Domingo Alegre Cebrián,Madrid,,Spain,IN80DI -44444,W7EFS,Tony Ross,Upper Kittitas County,Washington,United States, -44510,G7HJX,David Raybould,Burntwood, Staffordshire,,,England,IO92AQ -44701,2E0NEQ,Jono Clarke,Wallsend,,England, -44983,2E1GDF,SHAUN OKEEFE,Derbyshire,,England, -45007,EA5GVK,JOAQUIN MADRID,ALGUAZAS - MURCIA,,Spain,Kenwood NX320E -45008,EC5ZY,Juan Alfonso Agüera Ortiz,La Azohia Cartagena,,Spain, -45016,EA5GVK,JOAQUIN MADRID,ALGUAZAS - MURCIA,,Spain,KENWOOD NX720E -45017,EA5IHJ,Antonio M,Novelda,,Spain, -45026,MM0RKN,Carrie A. Welsh,Lanarkshire,,Scotland, -45031,EA5AWB,JOSE MANUEL PAREDES GIL,SANTO ANGEL - MURCIA,,Spain,KENWOOD NX-320 -45034,EA4FVB,Pablo Hurtado,Alicante,,Spain, -45053,PE1MSZ,Ruud Kerstens,4884AD WERNHOUT,,Netherlands, -45065,M0GIG,David Wharlley,Broadstairs, Kent,,England, -45072,PH3V,René Tuijtel,Roosendaal,,Netherlands,MMDVM Repeater -45078,EA5III,Paco Romero Aceña,Dénia (Alacant),,Spain, -45112,PD0DIB,Rob van Rheenen,Uden,,Netherlands,JO21TQ -45170,PD1AEU,AJ SCHALKOORD,4702ES Roosendaal,,Netherlands, -45321,DL9TD,Thomas Schoddel,Krefeld,,Germany, -45678,BG6TWT,Tim Yang,Wuhan,He Nan Hu Bei An Hui,China,Kenwood Nx300 -46001,OH6XI,Ulf Wilhelmsson,Jakobstad,,Finland, -46003,PD0PVL,Robert VOERMAN,7351 CB Hoenderloo,,Netherlands, -46004,PD0PVL,Robert VOERMAN,7351 CB Hoenderloo,,Netherlands, -46016,EB6AOK,Enric M,S.Miquel IBIZA,,Balearic Islands, -46023,WV8CW,Charles C Wiant,Miller,South Dakota,United States, -46029,EA6AGB,Paulino Gonzalez Cadierno,,,Spain,HYTERA-PD365 -46032,EB6AOK,Enric M,S.Miquel IBIZA,,Balearic Islands, -46046,BH8SXD,Peng Wang,Kunming,All Others,China,MMDVM Repeater -46049,BH8SXD,Peng Wang,Kunming,All Others,China, -46600,BV5OO,Yaojun Hsieh,Yonghe Dist, New Tai,Taipei,Taiwan, -46699,BM2GJP,Hyman Fan Fan Jia-Yu,Taipei,Taipei,Taiwan, -46833,BH8TXK,Xiaofeng Yang,Chuxiong,Gui Zhou Si Chuan ,China,UHV NX32 -47001,K1LNX,Stephen Brown,Knoxville,Tennessee,United States, -47002,PU7LLS,Lucivaldo Sousa De Brito,Mossoro - Rio Grande,Caera,Brazil,43159 -47003,EA7JRS,Manuel Canca Sanchez,Puerto Real,,Spain, -47004,JG7IMF,Momoi Momoi,Miyagino-Ku, Sendai-,Tohoku,Japan, -47005,W4EKG,Kevin Hinkle,Crossville,Tennessee,United States,NX200 / MMDVM -47006,EA7DYY,Santiago M. Castro,Jerez De La Frontera-Cadiz,,Spain,JEGADI1108 -47007,EA7JOE,Julio Saiz Casado,Granada,,Spain, -47008,EA7UU,Jesus EA7UU,GRANADA,,Spain, -47011,EA7GWC,FRANCISCO FRIAS MARTOS,MALAGA,,Spain,NX300 -47012,KF4NUZ,Edgar Sadler,Chattanooga,Tennessee,United States, -47032,K9OJ,Robbie Robinette,Chuckey,Tennessee,United States, -47034,PE1BZF,William van Sutphen,1324MZ ALMERE,Florida,Netherlands, -47037,EA7HNY,SANCHEZ DAVID,GRANADA,,Spain, -47089,EA7CCQ,Gabriel Gomez Munoz,04700 El Ejido ( Almería),,Spain,ALMERIA -47090,EA7ERD,Fina Cara Palmero,Almeria,,Spain,ALMERIA -47128,EA7GWD,Jose Sanchez Marin,Sevilla,,Spain,NX320 -47152,EB7GQZ,DAVID RODRIGUEZ RIOS,14850 BAENA (CORDOBA),Colorado,Spain,Spain -47222,EA7CTL,Manuel Martinez Reyes,San Fernando,,Spain,IM66VL -47309,EA7GSP,RAFAEL PABLO TRUJILLO MARISCAL,CÓRDOBA,Colorado,Spain, -47350,EA7IBT,Domingo Moron,Coria del Rio (Sevilla),,Spain, -47415,EA7KDO,Mitchell V Savage,Nerja,Massachusetts,Spain, -47431,KC2QLX,Aron Ezagui,Brooklyn ,New York,United States,NX5300 -47432,KC2QLX,Aron Ezagui,Brooklyn ,New York,United States,NX800 -47686,KG4LHC,Christopher M Sutton,Newport,Tennessee,United States, -47900,W8BUG,Garret S Scott,Knoxville,Tennessee,United States, -48009,WA5VYK,Joe Detiveaux Detiveaux,Odessa,Texas,United States,wa5vyk@gmail.com -48047,EA8URE,Sección Comarcal U.R.E. CHASNA,La Camella, Arona,,Canary Islands,TENERIFE -48066,EA8RH,J. Roman Rodriguez Hernandez,Guia de Isora S/C de Tenerife,TF,Spain, -48119,K5MFP,Michael F Payne,Frisco,Texas,United States,TYT MD-380 -48164,N5JLR,Joe Rodriguez,Los Fresnos,Texas,United States,NX-300K -48184,N5OVP,Steven Lhamon,Livingston,Texas,United States, -48239,N5YEY,Mark A De Paepe,Kilgore,Texas,United States, -48242,KD5DFB,Michael Hebert,Houston,Texas,United States, -48326,KG5HTH,Philip Flinn,Morgan Mill,Texas,United States, -48432,N9BAV,Daniel Wiley,Fort Worth,Texas,United States, -48444,WB8ZFL,Bob Edmonston,Pearland,Texas,United States, -48453,KB5RAB,Russell A Biggs,Conroe,Texas,United States, -48501,NA5AA,Lester R Diefenbach,Granbury,Texas,United States,UHF NX-800 -48541,KG5UBV,Jason K Kingsbury,Mckinney,Texas,United States, -48564,KG5TNK,Ryan E Gills,Huntsville,Texas,United States, -48866,K5IMO,Larry G Moyer,Plano,Texas,United States,ICOM IC-F6061D -48904,KA1GMN,Philip Williams,Euless,Texas,United States, -49014,WA7KMF,Bill Neville,Logan,Utah,United States, -49101,WX7Y,RICHARD B MILLS,CASTLEDALE,Utah,United States,WX7y-1 Hand Held 1 -49102,WX7Y,RICHARD B MILLS,CASTLEDALE,Utah,United States,WX7Y-2 Hand held -49104,WX7Y,RICHARD B MILLS,CASTLEDALE,Utah,United States,WX7Y-4 Mobile -49106,WX7Y,RICHARD B MILLS,CASTLEDALE,Utah,United States,WX7Y-6 Mobile -49999,KB8JNM,Michael P Mays,East Liverpool,Ohio,United States,Gateway Bridge -50210,VK2RFI,WICEN NSW INC HUNTER REGION WICEN,CARDIFF, NSW 2285,,Australia,MMDVM Repeater -50501,VK2NN,Peter ( Panagiotis ) Garoufalis,Canterbury,Sydney,New South Wales,Australia, -51013,N3IJW,Sean Faith,Alexandria,Virginia,United States, -51172,M0GLJ,Adrian Craig,NOTTINGHAM,,England, -51216,KB3CGI,Jaime Velis,Alexandria,Virginia,United States, -51237,G1JPV,Tony T C.,Frodsham,,England,Using NXDN through Pi-Star -51266,G4MLB,Roger Padmore,Nelson, Lancashire,,England, -51276,G8VIQ,JOHN BAXTER,BIRMINGHAM B36,,England, -51469,G0BVZ,Vic Simpson,North West,,England, -51818,G4VXE,TIM KIRBY,Oxfordshire,,England, -51825,K4DUR,Otis Durham,Lynchburg,Virginia,United States, -52001,HS2YTY,Jaturong Viriyadamrong,Thailand,Bangkok,Thailand, -52009,HS5YSU,Suriyan Gantiya,Sansai,Chiang mai,Thailand, -52018,VK2UMC,Michael Cheng,Sydney,New South Wales,Australia, -52028,VK2UMC,Michael Cheng,Sydney,New South Wales,Australia, -52030,HS3LIQ,Wiwat Metheekasiwat,Nakhonratchasima,Nakhon Ratchasima,Thailand,Mueang Korat -52094,VK2YHX,Spero Davias,Newcastle,New South Wales,Australia,DMR ID #5052094 -52096,VK2JDS,David Scott,Bathurst,New South Wales,Australia, -52098,HS8JCV,Mr.Supparerk Saikaew,Hatyai,Nakhon,Thailand,F3400D with MMDVM Hat -52099,HS8AFA,Anan Phonlarak,Phunphin,Surathani,Thailand, -52110,VK2HK,Ian Tulley,Wyee,New South Wales,Australia,NX-5300/NX-5800 -52111,VK2IPT,Ian Tulley,WYEE,New South Wales,Australia,NX-5300/5800 -52114,VK2GG,Dan Joyce,Dora Creek,New South Wales,Australia,Kenwod 340U -52117,G1SCQ,KM KENT,Heacham, KINGS LYNN,,England, -52118,VK2GP,Colin Garven,Toronto,New South Wales,Australia, -52119,VK2YF,Frederick Jacob Messemaker,Toronto,New South Wales,Australia, -52120,VK2GG,Dan Joyce,Dora Creek,New South Wales,Australia,Kenwood 340U & Icom 4161 -52121,2E0SIP,Matthew Harrold,Watford,,England, -52122,VK2KXX,Colin Garven,Toronto,New South Wales,Australia, -52245,VK2AMV,Lindsay Harvey,Parkes,New South Wales,Australia,Via MMDVM -52277,VK2FD,Lindsay Harvey,Parkes,New South Wales,Australia,Via MMDVM -52342,VA3WIK,Rick Reemeyer,HAMILTON,Ontario,Canada, -52375,M0IEI,Pedro Gonzalez-del-Valle,Ely, Cambridgeshire,,England, -52428,VK2BFC,Frank Scott,North Albury,New South Wales,Australia, -52439,G0FVX,Bert Barnes,Barton under Needwood,,England, -52481,VK2YMU,Robert ,Balldale,New South Wales,Australia, -52499,VK2PKD,Paul Dixon,Blue Haven Nsw,New South Wales,Australia, -52549,VK2GPT,Glenn Tomkins,Bathurst, Nsw,New South Wales,Australia,Hotspot -52675,M6ORT,Gregory R Wellington,London,,England, -52762,G7HJX,David Raybould,Burntwood, Staffordshire,,,England, -52778,K2SRT,Alexander Stewart,Budd Lake,New Jersey,United States, -52805,M6NBP,Norman W,Brighton & Hove City,,England, -52852,2E0FEI,William (Bill) Darvill,Northampton,,England, -52853,G6MJQ,ADRIAN T PEAKE,LEICESTER,,England, -52879,M1DNS,Andrew .,Cornwall S.W U.K,,England,SW UK -52914,2E0TPS,Mat Stace,London,,England, -52999,HS2YTY,Jaturong Viriyadamrong,Thailand,Bangkok,Thailand, -53000,KD6VPH,Alex Szuski,Tumwater,Washington,United States, -53002,NF6C,Gregory Krantz,Orting,Washington,United States, -53003,NF6C,Gregory Krantz,Orting,Washington,United States,Mobile Radio -53042,VK3JMA,Mark Aitken,Hampton Park,Victoria,Australia, -53048,KE0CO,Brian A Holman,Burien,Washington,United States, -53055,VK3AS,Andy Squires,Horsham,Victoria,Australia, -53062,VK3KAY,Douglas Kay,Dimboola,Victoria,Australia, -53093,VK3AS,Andy Squires,Horsham,Victoria,Australia,F6061D -53123,VK3JMA,Mark Aitken,Hampton Park,Victoria,Australia, -53235,N7LNX,Steven A Jackson,Seattle,Washington,United States, -53242,WB7NNF,Charles H Vyverberg,Spokane,Washington,United States,DN17HO -53252,VA3MCX,Michel Chartrand,Kapuskasing,Ontario,Canada, -53289,VK3GY,Nigel Bryer,Warragul,Victoria,Australia, -53401,WD4KAV,Joseph D Burnham,Puyallup,Washington,United States,MD-380 and Pi-Star Hotspot -53482,VA3CZK,Jiri Samal,Scarborough,Ontario,Canada, -53501,KH2MM,Jochen Althoff,Dededo,GU,Guam,NX-320 -53578,KC7QDO,Bruce D Horish,Auburn,Washington,United States, -54001,DW4CHZ,Charlie Apodaca,Naga City,Bicol Region,Philippines, -54005,GM0MRJ,Maxis Robert Johnston,Glenrothes, Fife,,,Scotland, -54035,VK4TUX,Adrian Fewster,Laidley Heights,Queensland,Australia,MMDVM REpeater -54040,GM7RYR,Allister Watson,Edinburgh.,,Scotland, -54045,VK4NSP,Shaun Stapleton,Rockhampton,Queensland,Australia, -54049,GM4AUP,Ian Suart,NORTH LANARKSHIRE,,Scotland, -54050,2M0PMR,Ally Graham,Pathhead,,Scotland, -54061,DL1GFM,Markus Fackler,78048 Villingen-Schwenningen,,Germany,MMDVM -54072,VK4RM,Roy Moore,sarina,Queensland,Australia, -54073,MM0DXE,Andrew Ireland,Fife,,Scotland, -54277,MM0BUH,NIGEL SMITH,Banff, Aberdeenshire,,,Scotland, -54335,GM7KBK,Ernie Pratt,Aberdeen,,Scotland, -54571,F5UPZ,Richard Abbondanza,Pelissanne,,France,JN23NP -55003,MI0AAZ,JOHN ANDERSON,COLERAINE, County Londonderry,,Northern Ireland,Keeper of GB7KA Brandmeister multimode repeater -55022,N9OIG,Drissel Kevin,Union Grove,Wisconsin,United States, -55045,GI4FZD,Paul Menown,Belfast,,Northern Ireland, -55053,WX9KVH,Kyle Van Hoogen,Greenfield,Wisconsin,United States, -55063,WX9KVH,Kyle Van Hoogen,Greenfield,Wisconsin,United States, -55067,N9KRG,Jake Litwin,Appleton,Wisconsin,United States, -55100,N9FAV,Tim Byers,Milwaukee,Wisconsin,United States, -55101,N9FAV,Tim Byers,Milwaukee,Wisconsin,United States, -55102,N9FAV,Tim Byers,Milwaukee,Wisconsin,United States, -55103,N9FAV,Tim Byers,Milwaukee,Wisconsin,United States, -55105,N9FAV,Tim Byers,Milwaukee,Wisconsin,United States, -55155,N9UPC,John J Kruk,Baldwin,Wisconsin,United States, -55156,N9UPC,John J Kruk,Baldwin,Wisconsin,United States, -55195,N9PMR,Richard J Waedekin,Mequon,Wisconsin,United States,MMDVM -55214,GI4OHH,Derrick cox,NORTHERN IRELAND,,Northern Ireland, -55288,W9TJP,Thomas J Pachner,Mequon,Wisconsin,United States, -55555,K1BOY,Jaturong Viriyadamrong,San Francisco,California,United States, -55700,WB9HKE,RICHARD W STRAUSS,MILWAUKEE,Wisconsin,United States, -55704,WB9HKE,RICHARD W STRAUSS,MILWAUKEE,Wisconsin,United States, -56078,ZS6IIX,Pieter Hendrik Rood,Benoni,Gauteng/Mpumalanga,South Africa, -56138,ZS6CSV,Conrad Scheepers,Lydenburg, Mpumalanga,,South Africa,NXDN -57000,VE3SP,And Van,Toronto,Ontario,Canada,Mobile -57001,VE3BRA,Bowmanville Amateur Radio Club,Bowmanville,Ontario,Canada,NX-5300K6 -57002,VE3HTB,David John Borland,Scarborough,Ontario,Canada,handheld -57003,VE3OKZ,Janusz Zawierucha,Oakville On,Ontario,Canada,handheld -57004,VE3CCD,Curtis Davis,Scarborough,Ontario,Canada,handheld -57005,VE3NBI,Anoop K Sofat,Markham,Ontario,Canada,handheld -57006,VE3JLU,Sherwin Leo Johnson,Toronto,Ontario,Canada,handheld -57007,VA3RQ,Jon Rorke,Oakville,Ontario,Canada,handheld -57008,VA3OGB,Randolph Peter Munro,TORONTO,Ontario,Canada,handheld -57009,VA3MK,Markku Steven Koskinen,Georgetown,Ontario,Canada,handheld -57010,VA3MK,Markku Steven Koskinen,Georgetown,Ontario,Canada,mobile -57011,VA3WZW,Andre Van,Peterborough,Ontario,Canada,mobile -57012,VA3WZW,Andre Van,Peterborough,Ontario,Canada,mobile -57013,VA3AGV,Andr VA3AGV,Toronto,Ontario,Canada,mobile -57014,VE3BWP,Brian Pietrzyk,Caledon,Ontario,Canada,handheld -57015,VE3HY,Morris Zalik Levy,TORONTO,Ontario,Canada,handheld -57016,VE3UBI,Paul William Graham,Toronto,Ontario,Canada,mobile -57017,VE3UBI,Paul William Graham,Toronto,Ontario,Canada,handheld -57018,VE3RZR,Richard Chan,Toronto,Ontario,Canada,handheld -57019,VE3AEP,Domenic Narducci,TORONTO,Ontario,Canada,mobile -57020,VA3PEO,Adrian Pouris,Mississauga,Ontario,Canada,handheld -57021,VA3WJO,Walter Olechny,Woodbridge,Ontario,Canada,handheld -57022,VE3FKN,Tomas Roeder,Stoney Creek,Ontario,Canada,handheld -57023,VE3IPS,John Leonardelli,Vaughan,Ontario,Canada,handheld -57024,VA3CQA,Brian Hart,Scarborough,Ontario,Canada,handheld -57025,VA3PAD,Andrew Lee,Scarborough,Ontario,Canada,mobile -57026,VA3PAD,Andrew Lee,Scarborough,Ontario,Canada,handheld -57027,VA3VAD,Arpad Vadasz,Toronto,Ontario,Canada,handheld -57028,VA3KY,Shelly Melodick,Thornhill,Ontario,Canada,mobile -57029,VA3KY,Shelly Melodick,Thornhill,Ontario,Canada,handheld -57030,VE3KFQ,Doug Hodgson,Toronto,Ontario,Canada,mobile -57031,VE3KFQ,Doug Hodgson,Toronto,Ontario,Canada,handheld -57032,VE3AEP,Domenic Narducci,TORONTO,Ontario,Canada,handheld -57033,VE3DJZ,Huey Salmon,Hamilton,Ontario,Canada,mobile -57034,VE3DJZ,Huey Salmon,Hamilton,Ontario,Canada,handheld -57035,VA3RQ,Jon Rorke,Oakville,Ontario,Canada,Mobile -57036,VE3RNK,Rick Reemeyer,Hamilton,Ontario,Canada,Base -57037,VE3TTO,Gary Notto,Hamilton,Ontario,Canada,Base -57038,VA3BL,John Mckay,Oakville,Ontario,Canada,Mobile -57039,VA3BL,John Mckay,Oakville,Ontario,Canada,Portable -57040,VE3DXT,Derek Gale,Hamilton,Ontario,Canada,Mobile -57041,VA3EZT,David Lamb,Tavistock,Ontario,Canada,Portable -57042,VA3EZT,David Lamb,Tavistock,Ontario,Canada,Mobile -57043,VE3WA,James Alan Webb,St Catharines,Ontario,Canada,Mobile -57044,VE3RNK,Rick Reemeyer,Hamilton,Ontario,Canada,Mobile -57045,VE3FLK,Dan Shack,London,Ontario,Canada,Mobile -57046,VE3FLK,Dan Shack,London,Ontario,Canada,Portable -57047,VA3JHO,James Harris,Bowmanville,Ontario,Canada,Mobile -57048,VA3JHO,James Harris,Bowmanville,Ontario,Canada,handheld -57050,VE3RTT,Tulino Rod,mississauga,Ontario,Canada,Handheld -57051,VE3RTT,Tulino Rod,mississauga,Ontario,Canada,Mobile -57057,VK7HSE,Scott Evans,Kingston,Tasmania,Australia,IC-F4161DS -57068,VA3ADN,Martin Mcculloch,Caledon,Ontario,Canada,Portable -57074,VK7HSE,Scott Evans,Kingston,Tasmania,Australia,IC-F4161DS -57079,VA3ADN,Martin Mcculloch,Caledon,Ontario,Canada,Mobile -57086,VK7HSE,Scott Evans,Kingston,Tasmania,Australia,IC-F4161DS -57089,VE3DSL,Donald Mckay,Embro,Ontario,Canada, -57090,VE3MJM,Donald Mckay,EMBRO,Ontario,Canada, -57091,VA3MJM,Mari-jo Mckay,Embro,Ontario,Canada, -57092,VE3NEJ,Terry (Toolman) Taylor,Kitchener,Ontario,Canada, -57094,VE3FM,Terry Lee Taylor,Kitchener,Ontario,Canada, -57174,VE3PPO,George .,Tillsonburg,Ontario,Canada, -57177,VE3PPO,George .,Tillsonburg,Ontario,Canada,146.3625 hotspot -57178,VE3PPO,George .,Tillsonburg,Ontario,Canada,444.575 MMDVM Repeater -57179,VE3TTT,Sort Inc C/O James T Spicer,London,Ontario,Canada, -57190,W4ILJ,Doug Wickman,Melbourne,Florida,United States, -57482,VA3CZK,Jiri Samal,Scarborough,Ontario,Canada, -57490,VE3GS,Alejandro Quiroz S.,South Bruce Peninsul,Ontario,Canada,PORT -57500,VE3GS,Alejandro Quiroz S.,South Bruce Peninsul,Ontario,Canada,MOBILE -57561,KG4GEM,Russell L Wilson,Jacksonville,Florida,United States,HT -57584,WA4EMN,Eric Nisenfeld,Sun City Center,Florida,United States, -58001,VA3NEG,Jon Rorke,Oakville,Ontario,Canada,mmdvm rptr -58002,VE3YYZ,TORONTO AMATEUR RADIO COMMUNICATION SOCIETY ,OAKVILLE,Ontario,Canada,FCP -58003,VE3UHM,Charles S Doubrough,ORILLIA,Ontario,Canada, -58004,VA3WAJ,James Alan Webb,ST CATHARINES,Ontario,Canada, -58005,VE3WIK,Rick Reemeyer,HAMILTON,Ontario,Canada, -58006,VE3RXR,Allan Campbell Boyd,LITTLE CURRENT,Ontario,Canada, -58007,N5AMD,Ben A Fogt,San Antonio,Texas,United States,sadigitalradio.com -58008,VE3SNM,VE3SNM Repeater Group. ,NORTH YORK,Ontario,Canada, -58045,WE5D,Kermit G Pritchett,Kountze,Texas,United States, -58057,K5MAP,Michael A Pate,Spring,Texas,United States,NX-5300 -59031,W4EBM, Golden Star Amateur Radio Club,Fayetteville,North Carolina,United States,Nano-Spot -59240,K2GC,Mike Maynard,Williamson,New York,United States, -59999,BH2RCP,Pengfei Zhao,Benxi,Hei Long Jiang Ji Lin Liao Ning,China,NX820G-E -60001,YS3VE,Louis Velis,San Miguel,All Regions,El Salvador, -60154,ON3AD,Jeffrey Vandenbroucke,Wevelgem,,Belgium, -60164,KD8LDE,Aron J Katz,Cleveland,Ohio,United States, -61004,BO2AB,Lin Jini,Taipei,Taipei,Taiwan, -61005,HA2NON,Norbert Varga,Tata,,Hungary, -61006,HG1MA,Akos Marton,Nagykanizsa,,Hungary, -61031,BV5AC,Lee Yeh-Ho,Changhua Tw,Central Taiwan,Taiwan, -61041,K6HP,Ed Parsons,Murphys,California,United States,NX-5300 -61043,F6GAU,Alain FOURE,villeneuve,,France,H.PROVENCE -61078,DW4CHZ,Charlie Apodaca,Naga City,Bicol Region,Philippines, -61111,GW1JFV,R Brooks,nr. Haverfordwest, Pembrokeshire,,Wales,73 -61121,WW6Y,Arturo H Pineda,Riverside,California,United States, -61122,W3NLE,Christopher M Dailing,North East,Maryland,United States, -61163,KK5H,Tim Holland Holland,Huntsville,Alabama,United States, -61194,BM4AIK,Wenming Chen,Kaohsiung,Southern Taiwan,Taiwan,MMDVM -61231,N2DUP,Chuck Gysi,Aledo,Illinois,United States, -61475,N1IRL,Rick Fiorey,Budd Lake,New Jersey,United States, -61702,K1ST,Steve Tolf,Dennis,Massachusetts,United States, -61970,EA1JM,Francisco Jimenez-Martin Sanchez,Peñaranda de Bracamonte (Salamanca),,Spain, -62010,KE2EMS,Matt Mcdonald,OGDENSBURG,New York,United States, -62011,KE2EMS,Matt Mcdonald,OGDENSBURG,New York,United States,MOBILES -62035,ON2AAV,Luc Bodson,BRASSCHAAT,,Belgium,ANTWERP -62039,ON3CF,Filip Cools,B - 2980 Zoersel,,Belgium,Antwerp -62040,KG5TRV,Wilson Little,Frisco,Texas,United States, -62062,F4BWG,Oliver Langlois,Irvine,California,United States, -62119,ON6KVB,Ken Van Bouwel,2940 Stabroek,,Belgium, -62135,ON2ON,Luc Bodson,BRASSCHAAT,,Belgium,belgium -62377,DL1HCR,Rolf Renken,Lauenbrueck,,Germany, -62778,DM0ZF, ,,,Germany,JN48BP -62800,W5RSC,Robert S Carr,Crawfordville,Florida,United States, -63104,YO3VTH,Vlad-Theodor Cacinschi,Bucuresti,RO,Romania,2263104 DMR -63890,WB6DTB,David L Young,Oakley,California,United States, -64000,F1EAX,MICHEL MOLINIER,92240 MALAKOFF,,, -64001,JJ1BOE,Dominique Flamme,Tokyo,Kanto,Japan, -64646,ZS6CSV,Conrad Scheepers,Lydenburg, Mpumalanga,,South Africa, -65000,OE8AGK,Alfred Grascher,EBERNDORF,,Austria, -65027,SP5QIR,Artur (Arti) Sobiech,Sochaczew,,Poland, -65065,KN4GXG,Eric J Smith,Spring Hill,Florida,United States, -65114,FM1HN,Julien Tijus,Gros Morne,All,Martinique, -65200,KD8JGN,Adam C Collard,Eaton Rapids,Michigan,United States, -65509,KC9JIH,Jason L Kutche,Huron ,Indiana,United States, -65510,KC9DDP,Retha L Kutche,Mitchell,Indiana,United States,Mitchell IN 47446 -65511,DW4CHZ,Charlie Apodaca,Naga City,Bicol Region,Philippines, -65512,K9DTM,Johnny Fils,Lexington,Kentucky,United States, -65513,K9DMD,Jeanine Fils,Lexington,Kentucky,United States, -65514,EA8AJC,Miguel Llombet Redondo,Playa Paraiso, Adeje. S/C De Tenerife,TF,Canary Islands, -65515,JA1NCN,Yasumune Hayashi,Osaka,Kinki,Japan, -65516,IZ7GLL,MAX LEONETTI,Bitonto(BA),,Italy, -65517,N9LYA,Jerome M Kutche,Mitchell,Indiana,United States,Mitchell IN 47446 -65518,M6WZZ,Andrew Craig Myers,Wakefield,,England, -65519,HH2MJF,Johnny Fils,Port-au-Prince,Ouest,Haiti,qrz.com/db/HH2MJF -2424,EA7HBZ, , , , , -2490,DO0SRE, , , , , -5706,VK7RCR, , , , , -8311,F1ZIP, , , , , -8312,F1ZJD, , , , , -9999,MMDVM, , , , , -20800,2NXDN, , , , , -20811,F1ZLK, , , , , -20839,F1ZJR, , , , , -20840,F1ZKS, , , , , -20858,F4AUV, , , , , -20864,F6KPH, , , , , -26286,DB0ONA, , , , , -31004,F1ZIM, , , , , -31005,F1ZLS, , , , , -35401,GB7GG, , , , , -35406,GB7SM, , , , , -35407,GB7KN, , , , , -35412,GB7LV, , , , , -35422,GB7DM, , , , , -38425,DG3NUK, , , , , -47076,EA7GIB, , , , , -47344,EA7HBZ, , , , , -65030,ON8YY, , , , , +RADIO_ID,CALLSIGN,FIRST_NAME,LAST_NAME,CITY,STATE,COUNTRY,REMARKS +2,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,UHF NX 800 mobile +3,WB2OOM,CHRISTINA P,HOLMES,MULLICA HILL,New Jersey,United States,UHF NX 800 Mobile +4,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,UHF NX 800 Van +5,PP5DI,Fabio,Kuntze,Sao Jose,Santa Catarina,Brazil,Kenwood NX 700 VHF portable +7,W2MB,Mark,Bond,Washington,New Jersey,United States,NX5800K2 +8,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,UHF NX 820 Port 2 +9,KE8BGA,Lowell M,Katz,Cleveland,Ohio,United States,on the north shore NX 800 +12,VE3WZW,Andre,Van2,Toronto,Ontario,Canada,Kenwood NX 5800 +13,VE3WZW,Andre,Van2,Toronto,Ontario,Canada,Kenwood NX 5300 +17,KC2SNI,James,Hannon,West Berlin,New Jersey,United States,My Radio is an Icom IC 3161DT +20,HL4CNR,Kevin,Ku,Jeju,CheJu Do,Korea S Republic of, +21,2E0NEQ,Jono,Clarke,Wallsend,,England, +22,VE7RI,Bradley Donald Gordon,Thompson,Chilliwack,British Columbia,Canada,NXDN +23,KA3NGT,Bruce,Hoover,Valier,Pennsylvania,United States, +24,AC1KV,Dan,Cantil,Ansonia,Connecticut,United States,Portable +25,WB2RUH,BRUCE J,TIEMANN,VINELAND,New Jersey,United States,UHF NX 320 +26,WB2RUH,BRUCE J,TIEMANN,VINELAND,New Jersey,United States,UHF NX 800 mobile +28,VA2ECE,Eric,Celier,Ste Catherine JC,Quebec,Canada,NXDN +29,JG7IMF,Momoi,Momoi,Miyagino Ku Sendai ,Tohoku,Japan,ZumSpot +30,KD4MOJ,Douglas B,Ferrell,Tallahassee,Florida,United States, +33,KA3NGT,Bruce,Hoover,Valier,Pennsylvania,United States, +34,9Z4RG,Ravindranath,Goswami,Port Of Spain,Woodbrook,Trinidad and Tobago,robby 9Z4RG com +35,JH3KAW,Katsumi,Yasuo,Kobe,Kinki,Japan, +36,W3NLE,Christopher M,Dailing,North East,Maryland,United States, +37,N3XBW,Jay,Petrulis,McKeesport,Pennsylvania,United States,NXDN +38,WT3C,Thomas C,Dailing,Forest Hill,Maryland,United States, +39,JA1IPJ,Fumio,Hashimoto,Yokohama 222 0011,Kanto,Japan, +40,W5CBT,Kenneth,Blanton,Denison,Texas,United States,48370 +41,NQ4Y,Terry,Bartholomew,Decherd,Tennessee,United States, +42,PY2IV,Igor,Vicente Munhoz,Sao Jose do Rio Preto,Sao Paulo,Brazil,NXDN Station +43,BV4WW,Felix,Chan,Taichung,Central Taiwan,Taiwan,NXDN +45,BX3AH,Miracle,Lin,Taoyuan,Northern Taiwan,Taiwan,NXDN +46,NK8M,James A,Barney,Levels,West Virginia,United States,NXDN +47,VA3JCD,Clifford J,Dungey,Brantford,Ontario,Canada,NXDN +48,W8VT,Ed,Wilhelm,Beckley,West Virginia,United States,NXDN +49,VK7RAD,Wireless Institute Of Australia,Tasmanian Division Southern Branch,Hobart Tas 7001,Tasmania,Australia,NXDN +50,VK2PWR,Adam,Anderson,Glenfield,New South Wales,Australia, +51,ZL1SKL,Soren,Low,Auckland,North Island 1,New Zealand,NXDN +52,KD2KVZ,David A,Larcombe,Galloway,New Jersey,United States,NXDN +53,W4DMM,Mark,McDougal,Chattanooga,Tennessee,United States, +54,KB9UIY,Alex,Mokrycki,Xenia,Ohio,United States,NXDN +55,VE3OC,Steve,Woo,Toronto,Ontario,Canada,NXDN +56,VE3WOO,Stephen Gordon,Woo,Markham,Ontario,Canada,NXDN +57,NC3C,Russell,Mcree,Maple Valley,Washington,United States,NXDN +58,W0NQX,Robert R Bob ,Brown,Kansas City Metro,Missouri,United States,NXDN +59,JI2GYC,Yutaka,Ando,Moriyama Ku Nagoya ,Tokai,Japan,NXDN +60,KD8AZC,Scott,Greenwalt,Old Fields,West Virginia,United States,NXDN +61,WD0HDR,David,Harris,Evans,Colorado,United States,NXDN +62,KC6NKK,Lloyd N,Parker,Barstow,California,United States,NXDN +63,BV2EL,James,Wu,New Taipei,Northern Taiwan,Taiwan,NXDN +64,KI4RIT,Richard,Watson,Lynchburg,Virginia,United States,NXDN +65,KA1SUN,Eric,Mazur,savoy,Massachusetts,United States,NXDN +66,W6RE,Rick,Eastwood,Lomita,California,United States,NXDN +67,W4YX,Bill,Schiffli,Charlotte,North Carolina,United States,NXDN +68,ZL2WD,Hayden,Sims,Palmerston North,North Island 2,New Zealand,NXDN +69,WR2M,Bill,Lupo,Landing,New Jersey,United States,Icom IDAS Radios +70,KB8JNM,Michael P,Mays,East Liverpool,Ohio,United States,Personal Station +71,KE4YUC,Michael,Sims,Harrodsburg,Kentucky,United States,Kewood NX 700 +73,BH7MTZ,Yang,Feng,Shantou Guangdong,Hu Nan Guang Dong Guang Xi,China, +74,N2IXC,EDWARD G,KAUFHOLZ,CHATSWORTH,New Jersey,United States, +76,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,UFH NX5300 Port 1 +77,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,UHF NX 800 Shore Base +78,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,UHF NX 800 +79,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,UHF NX 5800 +80,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,VHF NX 5700 mobile +81,N8ASH,Ted,Stephens,Dublin,Ohio,United States,NXDN +82,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,VHF NX 700 Shore Base +83,K4NZ,Mike,Morton,Jacksonville,Florida,United States,NXDN +85,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,VHF NX 700 van +86,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,VHF NX 700 base +87,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,VHF NX 700 mobile +88,W2FLY,Harry J,Holmes,Mullica Hill,New Jersey,United States,VHF NX 220 portable +89,WB2RUH,BRUCE J,TIEMANN,VINELAND,New Jersey,United States,VHF NX 700 base +90,VK2NP,Cliff,Hynds,Sydney,New South Wales,Australia,NXDN +91,W0JPJ,Jarod,Jacobsen,Dilworth,Minnesota,United States,NXDN +92,K2WNW,David,Korchin,Brooklyn,New York,United States,NXDN +93,K7BIT,John M,Birdlebough,Mabton,Washington,United States,NXDN K7BIT +94,KD0BQS,Mike,Breuer,Arnold,Missouri,United States,NXDN +95,W4JEW,Jeff,Hochberg,Atlanta,Georgia,United States,NXDN +96,JN1GUW,Nobumasa,Yukutomi,Ayase City Kanagawa,Kanto,Japan,NXDN +97,VU2OB,SREEKUMAR,T K SREE ,New Delhi,Delhi,India,NXDN +98,A65TD,T,,Dubai,Sharjah,United Arab Emirates,NXDN +99,K1ZSG,Donald G,Nelson,Harwinton,Connecticut,United States,Mobile +100,WJ1D,James,Delancy,Saint Francis,Maine,United States,NXDN +102,KC9WWK,Mathew,Rohde,Tomah,Wisconsin,United States,NXDN +103,K4KWQ,Tim,Porter,Jackson,Michigan,United States,NXDN +104,K4KWQ,Tim,Porter,Jackson,Michigan,United States,NXDN +105,VE3ZXN,Denis,Jakac,Bradford,Ontario,Canada,NXDN +106,K8MD,Bob,Mueller,Strongsville,Ohio,United States,NXDN +107,K9CMI,Paul,Whalen,Champaign,Illinois,United States,NXDN +108,KD9LUX,Michael,Meschke,Lake Mills,Wisconsin,United States,Kenwood NX 320 DTMF +109,VE3OTL,Brent,Macmillan,Sault Ste Marie,Ontario,Canada,NXDN +110,W6BSD,Fred,Cirera,Redwood City,California,United States,W6BSD Fred +111,KD8OFL,David D,Gower,Fairview,West Virginia,United States,NXDN +112,AB2M,Joe,Tomasone,Spring Hill,Florida,United States,NXDN +113,KD4HCT,Rohn,Daughtry,Beulaville,North Carolina,United States,NXDN +114,N6LKA,Larry,Aycock,Redlands,California,United States,NXDN +115,DL7XP,Patrick,Herbert,37235 Hessisch Lichtenau,Florida,United States,NXDN +116,AD5MT,Patrick,Dupont,Redlands,California,United States,NXDN +117,VK2NMZ,Brad,Martin,Wyong,New South Wales,Australia,NXDN +118,VE3AJB,Allan,Boyd,Little Current,Ontario,Canada,NXDN +119,W8MAL,Michael A,Lacumsky,Rocky Ridge,Ohio,United States,NXDN +120,KD2IHY,Charles R,Hurley,Brooklyn,New York,United States,NXDN +121,ZL1TOB,Jeff,Crawford,Whangarei,North Island 1,New Zealand,NXDN +122,N7MWL,Bill,Louis,Eugene,Oregon,United States,NXDN +123,K7OPA,Ron,Miller,Wickenburg,Arizona,United States,NXDN +124,KB7VIS,Kirk H,Johnson,Springfield,Oregon,United States,NX 320 K6 +125,KB7VIS,Kirk H,Johnson,Springfield,Oregon,United States,NX 320 +126,KB2MXV,Frank,D Amato,Barnesville,Pennsylvania,United States,NXDN +127,VE2KBS,Dominique,Duplessis,Grand mere,Quebec,Canada,NXDN +128,W7GRV,Jeffrey R,Collins,Birch Tree,Missouri,United States,NXDN +129,VK2FLY,Matthew,Perkins,Kings Cross,New South Wales,Australia,NXDN Gateway +130,KF0JB,Jonathon,Blome,Highlands Ranch,Colorado,United States,NXDN +131,ZL2XLX,XLX,Reflectors Group NZ,Levin,North Island 2,New Zealand,NXDN +132,NT7Q,Gregory,Krantz,Reno,Nevada,United States,NXDN +133,KD9LUJ,Paul D,Pate,Kenosha,Wisconsin,United States,NXDN +134,N2SRO,Mike,Mollet,Pitman,New Jersey,United States, +135,KC3LYZ,Robert B,Rodriguez,Philadelphia,Pennsylvania,United States,NXDN +136,KC3LYZ,Robert B,Rodriguez,Philadelphia,Pennsylvania,United States,NXDN +137,JA2CCV,Kawaguchi,Yoichi,Owariasahi,Tokai,Japan,NXDN +138,K0GDI,Greg D,Isringhaus,Blackwell,Missouri,United States,NXDN +139,VA3SD,Charles,Doubrough,Orillia,Ontario,Canada,NXDN +140,VE3HHZ,Charles,Doubrough,Orillia,Ontario,Canada,NXDN +141,KF2M,Gregory F,Popovich,Rahway,New Jersey,United States,IC F4161DT +142,VE3SYY,Charles S,Doubrough,Orillia,Ontario,Canada,NXDN +143,K5MRE,Michael,Eckhoff,Haslet,Texas,United States,K5MRE NXDN +144,WA9RFT,Patrick,O Connor,Green Bay,Wisconsin,United States,NXDN +145,KG5RKI,Ty,Weaver,College Station,Texas,United States,KG5RKI +146,N0PKT,Jerrold F,Cummings,Colorado Springs,Colorado,United States,NXDN +147,KB5ZEA,Danny L,Townsend,West,Mississippi,United States,NXDN +148,W1HMM,Harry,Mueller,Durham,New Hampshire,United States,NXDN +149,W8UFO,Scott,Irwin,Riverview,Florida,United States,NXDN +150,VE2CQY,Andre,Begin,Princeville,Quebec,Canada,NXDN +151,VK5IU,Jeffrey W ,Tubbenhauer,Murray Bridge,South Australia,Australia,NXDN +152,K2HZE,Tom,Isabella,Bronx,New York,United States,NXDN +153,N1DDC,David,Coviello,Maiden,North Carolina,United States,David N1DDC +154,ZL2WL,Wayne L,Wilson,Hastings,North Island 2,New Zealand,NXDN +155,KC7PJI,Tracey J,Prock,Spokane Valley,Washington,United States,NXDN +156,N5UAL,Mark R,Hall,Helena,Alabama,United States,NXDN +157,N9MR,Mark W,Reese,Fort Wayne,Indiana,United States,NXDN +158,AA4AB,Gregory,Bridges,Forsyth,Georgia,United States,NXDN +159,KB9JRC,Alejandro B,Abero,Skokie,Illinois,United States,NXDN Mobile +160,KF4VXN,Joseph M,Williams,Summerville,South Carolina,United States,NXDN +161,W4INK,William S,Barker,Venice,Florida,United States,W4INK +162,W1CAT,Brian,Williams,Salida,Colorado,United States,NXDN +163,ZL2KEJ,Kimberly,Jansen,Palmerston North,North Island 2,New Zealand,NXDN +164,VA7DBI,Darcy,Buskermolen,Kelowna,British Columbia,Canada, +165,N7DOD,Scott J,Burrows,Gresham,Oregon,United States,NXDN +166,KI5AOT,Gary W,Douglas,San Antonio,Texas,United States,NXDN +167,KJ7COZ,Prince,Adeyemi,North Las Vegas,Nevada,United States,Las Vegas NXDN +168,VE2HEW,Anthony,Di Iorio,Montreal,Quebec,Canada,NXDN +169,N0LMR,Larry,Rizzo,sun city,California,United States,NXDN +170,KM4KUG,Kenneth,Akins,Tampa,Florida,United States,NXDN +171,WW5A,Ken,Edwards,Littleton,Colorado,United States,NXDN +172,XQ6AK,Guillermo Ricardo,Saint Jean Gomez ,Osorno Region De Los,Los Lagos,Chile,NXDN +173,N1XRS,Tony,Duarte,East Taunton,Massachusetts,United States,NXDN +174,VK3TIM,Tim,Mccallum,Ballarat 3350,Victoria,Australia,NXDN +175,KE6GVK,Mike,Faulkner,Saint Johns,Arizona,United States,NXDN +176,KE6GVK,Mike,Faulkner,Saint Johns,Arizona,United States,NXDN +177,N4TRQ,Arthur C,White,Virginia Beach,Virginia,United States,NXDN +178,VA3LGG,George,Mansell,Hamilton,Ontario,Canada,NXDN +179,KC8AFH,Chris,Hatcher,Beaver,West Virginia,United States,NXDN +180,VK4MY,Mike,Kilsby,Bundaberg,Queensland,Australia,NXDN +181,KD4BNQ,Dale,Shelor,Ripplemead,Virginia,United States,NXDN +182,AC9OY,Adam E,Giera,Sugar Grove,Illinois,United States,NXDN +183,AC9OY,Adam E,Giera,Sugar Grove,Illinois,United States,NXDN +184,KJ7CMR,Ian,Schlueter,Chandler,Arizona,United States,NXDN +185,W2FEN,Randolph,Haber,Lakewood,New Jersey,United States,NXDN +186,KM6SSK,Scott,Ramirez,South Lake Tahoe,California,United States,NXDN +187,JS1YBS,Tochigi,BS140,Tochigi,Kanto,Japan,NXDN +188,WB9COW,Robin,Mather,Burlington,Wisconsin,United States,NXDN +189,KF4BWT,Aaron A,Johnson,Portage,Indiana,United States,NXDN +190,KF4BWT,Aaron A,Johnson,Portage,Indiana,United States,NXDN +191,KX1B,Bryan,King,Goffstown,New Hampshire,United States,NXDN +192,W4MDD,Michael,Douglas,Wauchula,Florida,United States,NXDN +193,W4MDD,Michael,Douglas,Wauchula,Florida,United States,NXDN +194,KM4VRK,Stephen D,Muller,Bowling Green,Florida,United States,NXDN +195,HS3SRS,Prompiriya,Punyajarastawi,Muang,Ubon Ratchathani,Thailand,NXDN +196,KI8D,Edward S,Spisak,North Olmsted,Ohio,United States,NXDN +197,AB7MR,Steve,Scott,Deer Park,Washington,United States,NXDN +198,N2CPA,Lawrence,Nathanson,Malibu,California,United States,NXDN +199,N2CPA,Lawrence,Nathanson,Malibu,California,United States,NXDN +200,CE1IQQ,Radioclub,Provincial Iquique,Avenida Pedro Prado S N,Tarapac,Chile,NXDN +201,XQ1JKS,Carlos,Gonzalez,Iquique,Tarapac,Chile,NXDN +202,XQ1JKS,Carlos,Gonzalez,Iquique,Tarapac,Chile,NXDN +203,CE3TTL,Ruben,Santibanez,Santiago,Reg Metr de Santiago,Chile,NXDN +205,CE3TTL,Ruben,Santibanez,Santiago,Reg Metr de Santiago,Chile,NXDN +206,KB8POO,Kevin,McHaffie,Manchester,Michigan,United States,NXDN +207,W2DEA,Raymond,Lukacs,Brooklyn,New York,United States,NXDN +208,W2DEA,Raymond,Lukacs,Brooklyn,New York,United States,NXDN +209,K4LPD,Luis Raul,Robles,High Point,North Carolina,United States,NXDN +210,K4LPD,Luis Raul,Robles,High Point,North Carolina,United States,NXDN +211,VE9HAM,Charles,Mcallan,Fredericton,New Brunswick,Canada,Eastern Canada +212,WC4B,Greg O,Shaw,Versailles,Kentucky,United States,NXDN +213,KA3WWE,Michael,Aronson,Pittsburgh,Pennsylvania,United States,NXDN +214,N5MXI,David,George,Corpus Christi,Texas,United States,NXDN +215,KE0TZZ,Jesse B,Coberley,Mapleton,Kansas,United States,NXDN +216,KE0TZZ,Jesse B,Coberley,Mapleton,Kansas,United States,NXDN +217,W6CM,David,Rutter,Galt,California,United States,NXDN +218,WM8S,Rob,Bailey,Friendswood,Texas,United States,HT +219,KJ4ZMO,Brice,Hughes,Thomson,Georgia,United States,NXDN +220,VK8MS,Mark,Sellers,Darwin,Northern Territory,Australia,NXDN +221,KD2NFC,Joseph,Puma,Staten Island,New York,United States,NXDN +222,WB3IEX,CRAIG J,CURRY,Lakeland,Florida,United States, +223,N1DCH,David,Hornbaker,Marlborough,Massachusetts,United States,NXDN +224,BG2RKL,Jiwei,Wang,Anshan City Liaoning,All Others,China,Portable +225,N1DCH,David,Hornbaker,Marlborough,Massachusetts,United States,NXDN +226,AB3LI,Freddy,Santiago,PHILADELPHIA,Pennsylvania,United States,NXDN +227,AB3LI,Freddy,Santiago,PHILADELPHIA,Pennsylvania,United States,NXDN +228,KM4JXP,Peter,Tasker,Woking,Florida,United States,NXDN +229,VE3WFD,Don,Easby,Windsor,Ontario,Canada,NXDN +230,KI6QFI,Shane,Faulkenberry,Pico Rivera,California,United States,NXDN +231,BV2QS,Jack,Yang,Taipei,Taipei,Taiwan, +232,KI6QFI,Shane,Faulkenberry,Pico Rivera,California,United States,NXDN +233,KE0UAR,William J,Thoelke,Keytesville,Missouri,United States,NXDN +234,VK2YM,Benjamin,Spiteri,Pitt Town Nsw,New South Wales,Australia,NXDN +235,N8DEA,Dean Benninger,Benninger,Cleveland,Ohio,United States,NXDN +236,VA3FYX,Neil,Holden,Sault Ste Marie,Ontario,Canada,NXDN +237,KI6YAA,Larry,Teran,Calexico,California,United States,KI6YAA +238,KI6YAA,Larry,Teran,Calexico,California,United States,K6CLX +239,KE4IAJ,William,Bashlor,Nahunta,Georgia,United States,NXDN +240,KE4IAJ,William,Bashlor,Nahunta,Georgia,United States,NXDN +241,WL7CSL,Michael,Miller,Eugnee,Oregon,United States,NXDN +242,AF4FA,Albert,Flapan,Lauderhill,Florida,United States,NXDN +243,BA7JG,Yan,Jian,Guangzhou,All Others,China,Portable +244,KG5UEK,Jacob A,Coreil,Ville Platte,Louisiana,United States,NXDN +245,KI5AKX,William R,Gray Jr,West Memphis,Arkansas,United States,NXDN +246,WB9PZM,Paul,Shipes,Delavan,Wisconsin,United States,NXDN +247,KD8PUD,Larry L,Fountain Jr,Swanton,Ohio,United States,NXDN +248,K9PSL,Paul S,Lowman,Davie,Florida,United States,NXDN +249,N7YMM,Mark,Coon,Covina,California,United States,NXDN +250,WM6Y,Phil,Leonelli,Fallbrook,California,United States,NXDN +251,MW0MWZ,Andy,Taylor,Blackwood,All Regions,Wales,NXDN +252,W1LMS,Tony C,Williams,Lynwood,California,United States,NXDN +253,W1LMS,Tony C,Williams,Lynwood,California,United States,NXDN +254,KE8ANE,Keith D,Hosom,Stockport,Ohio,United States,NXDN +255,VK1MDP,Murray,De Plater,Canberra,Australian Capital Territory,Australia,NXDN +256,VE2ESK,Maurice,Inniss,Dollard Des Ormeaux,Quebec,Canada,NXDN +257,VA3TAL,Joe,Metallo,Maple,Ontario,Canada,NXDN +258,KC8MLN,Tom,Gary,Lancaster,Ohio,United States,NXDN +259,VE2XEN,Eric,Nicolas,Chicoutimi,Quebec,Canada,NXDN +260,VE2XEN,Eric,Nicolas,Chicoutimi,Quebec,Canada,NXDN +261,KB9LBP,Steve,Davis,Fairfield,Alabama,United States,NXDN +262,LU8CAT,Tomas Eduardo,Natenzon,Capital Federal Bue,Caba,Argentina Republic,NXDN +263,K9DJR,Dan,Ryan,Arlington Heights,Illinois,United States,NXDN +264,K9DJR,Dan,Ryan,Arlington Heights,Illinois,United States,NXDN +265,N4RJJ,Robert,Jurgonski,Youngstown,Florida,United States,NXDN +266,N4RJJ,Robert,Jurgonski,Youngstown,Florida,United States,NXDN +267,K9AMT,Alexander,Tait,Vail,Arizona,United States,NXDN +268,K9AMT,Alexander,Tait,Vail,Arizona,United States,NXDN +269,WA1WQC,David L,Whelan,Plymouth,Massachusetts,United States,NXDN +270,KJ7DLU,Lloyd,Johnson,Aurora,Oregon,United States,NXDN +271,KE6DID,Victor I,Zarich,Daly City,California,United States,NXDN +272,BI7OZD,Kwansik,Lee,Foshan City Gd,All Others,China,Portable +273,KD7YXE,Scott,Anderson,Chico,California,United States,NXDN +274,KJ7BLE,Christopher J,Shaker,Bend,Oregon,United States,NXDN +275,KB4AAA,Bill,Barker,Clearfield,Kentucky,United States,KB4AAA +276,K5BEN,Benjamin,Ng,San Jose,California,United States,NXDN +277,W1PAA,Prince,Adeyemi,North Las Vegas,Nevada,United States,Las Vegas +278,W1PAA,Prince,Adeyemi,North Las Vegas,Nevada,United States,Las Vegas NXDN +279,VA7TCM,Trevor,McDonald,Surrey,British Columbia,Canada,NXDN +280,VE3TPZ,James,Davidson,Stratford,Ontario,Canada,NXDN +281,VE3FCD,James R,Davidson,Stratford,Ontario,Canada,NXDN +282,KE8ANE,Keith D,Hosom,Stockport,Ohio,United States,NXDN +283,KB0OTY,Andy,Sims,St Louis,Missouri,United States,NXDN +284,VE3ELB,Vince,Popo,Toronto,Ontario,Canada,NXDN +285,9Z3JC,Jerome O,Charles,Port Of Spain,All Regions,Trinidad and Tobago,NXDN +286,VA3BNR,Luc,Bourgon,Rockland,Ontario,Canada,NXDN +287,VA3BNR,Luc,Bourgon,Rockland,Ontario,Canada,NXDN +288,VE2ZFP,Flavio,Pohlmann,Montreal,Quebec,Canada,NXDN +289,N8AGJ,Rock,Bazzle,Spring Lake Park,Minnesota,United States,NXDN +290,VK2EHQ,Peter,Boskos,Kulnura,New South Wales,Australia,NXDN +291,WB4CDH,Charles D,Herring,O Brien,Florida,United States,NXDN +292,AF4E,Darrell,Manning,Calhoun Falls,South Carolina,United States,NXDN +293,AF4E,Darrell,Manning,Calhoun Falls,South Carolina,United States,NXDN +294,NM9X,Richard,Steele,Mt Zion,Illinois,United States,NXDN +295,W6CM,David,Rutter,Galt,California,United States,NXDN +296,KR8U,Dennis,Fitzpatrick,Paw Paw,Michigan,United States,NXDN +297,PU4RON,Ronualdo,Jose Santos Almeida,Janauba,Minas Gerais,Brazil,NXDN +298,KC1HJK,Eric E,Emery,New Gloucester,Maine,United States,NXDN +299,KA1VSC,Matt,Webster,Glastonbury,Connecticut,United States,NXDN +300,KE0LCI,Susan E,Breed,Emery,South Dakota,United States,NXDN +301,AC6I,Movell,Ward,Reno,Nevada,United States,NXDN +302,KB3EGW,Matthew R,Bressler,Kane,Pennsylvania,United States,NXDN +303,BG6WUH,Jie,Zhang,Wuhan,He Nan Hu Bei An Hui,China,MMDVM +304,N9JLE,Jeffrey,Eglen,Mount Pleasant,South Carolina,United States,N9JLE arrl net +305,KM4ZRT,Frank,Pischettola,New Port Richey,Florida,United States,NXDN +306,K0VQ,Tracy E,Dillingham,Carbondale,Colorado,United States,NXDN +307,KD0NU,Steve L,Brent,Aspen,Colorado,United States,NXDN +308,KE6AYK,Jeff,Jones,Dublin,California,United States,NXDN +309,KE6AYK,Jeff,Jones,Dublin,California,United States,NXDN +310,KC1KAE,Thomas W,Harper,Woburn,Massachusetts,United States,NXDN +311,N4CMM,Michael,Marshall,Foley,Alabama,United States,NXDN +312,KD2KWD,Michael,Santamaria,Brandon,Florida,United States,NXDN Repeater +313,VK3SLR,Allan,Fowler,Cranbourne,Victoria,Australia,NXDN +314,N5JFP,Jack F,Pettit,Horseshoe Bay,Texas,United States,NXDN +315,W7NCX,David,Feldman,Vancouver,Washington,United States,NXDN +316,W7NCX,David,Feldman,Vancouver,Washington,United States,NXDN +317,VE7PDO,Tyler,Delane,Vancouver,British Columbia,Canada,NXDN +318,KG5RG,Russ,Garetson,Gilbertville,Iowa,United States,NXDN +319,KG5RG,Russ,Garetson,Gilbertville,Iowa,United States,NXDN +321,KY4ACR,Austin C Reising,Reising,Louisville,Kentucky,United States,NXDN +322,PY2UAB,Andre,Berger Emiliano Da Silva,Sao Paulo Sp Brasil,Sao Paulo,Brazil,NXDN +323,AK4GS,Robert,Curry,Hendersonville,Tennessee,United States,NXDN Rob +324,PU2AKA,Armando,Costa,Brasilia,Distrito Federal,Brazil,NXDN +325,N6AYF,Steven,Hronek,La Canada,California,United States,NXDN +326,KC7ZIE,Todd H,Weber,Las Vegas,Nevada,United States,NXDN +327,N2NGP,Federico K,Cheaz,Fort Lee,New Jersey,United States,NXDN +328,KP3AV,Julio,Cantres Rivera,Toa Alta,All Regions,Puerto Rico,NXDN +329,WB0HTW,Carl J,Beasley,St Ann,Missouri,United States,NXDN +330,VE2SK,Martin,Halley,Sherbrooke,Quebec,Canada,NXDN +331,N9WNH,Dan,Dahms,Columbia City,Indiana,United States,NXDN +332,N0JVW,Bernard,Trentmann,Lees Summit,Missouri,United States,NXDN +333,KB0OXY,Michael,Schaper,Milliken,Colorado,United States,NXDN +334,N9KFW,Richard J,Mersinger,Edwardsville,Illinois,United States,NXDN +335,KB9PPX,Whitley County,Emergency Radio Club,Columbia City,Indiana,United States,NXDN +336,KA0VEL,Gerard,Beasley,saint charles,Missouri,United States,NXDN +337,KB5QAT,Theodore L,Drechsler,Egan,Louisiana,United States,NXDN +338,KE4ROR,Jason M,Henriksen,Huntsville,Alabama,United States,NXDN +339,KD2KUB,Andriy T,Gronau,Camillus,New York,United States,NXDN +340,N6SX,Albert J,Goto,Berkeley,California,United States,NXDN +341,BV9AB,BEN,Cheng Feng,Annan Dist Tainan City 709,Southern Taiwan,Taiwan,NXDN +342,N4LWR,John,Miller,Venice,Florida,United States,NXDN +343,E24YUJ,Napont,Kitiwiriyakul,Watcharaphon,Bangkok,Thailand,NXDN +344,N5LX,Lonnie P,Jacobs,DeRidder,Louisiana,United States,NXDN +345,KI4LSP,Joseph D,Sawyer,Rehobeth,Alabama,United States,NXDN +346,KB9YDK,Dean,Nelson,South Milwaukee,Wisconsin,United States,NXDN +347,W9DSW,Daniel,Wice,Muncie,Indiana,United States,NXDN +348,HS5IHQ,Max,Teerasutthiborwon,Muang,Phuket,Thailand,NXDN +349,WA1WQC,David L,Whelan,Plymouth,Massachusetts,United States,NXDN +350,N1MCG,McGregor,Memorial EMS ARC,Durham,New Hampshire,United States,NXDN +351,N1MCG,McGregor,Memorial EMS ARC,Durham,New Hampshire,United States,NXDN +352,WZ1Z,Patrick W,Faucher Jr,Fitchburg,Massachusetts,United States,NXDN +353,WS0Z,Dave,Kampmann,Rolla,Missouri,United States,NXDN +354,WH6AV,Gescio O,Alpuro,Wailuku,Hawaii,United States,NXDN +355,KX4ND,Alvan J,La Rocque,Greenville,North Carolina,United States,NXDN +356,XE1M,Felipe,Hernandez,Mexico City,Mexico City,Mexico,NXDN +357,KB0TDW,Dan,Mc Glone,Council Bluffs,Iowa,United States,NXDN +358,N6JET,Chris,Veargason,San Jose,California,United States,NXDN +359,VE2OOK,Christian,Barbu,Montreal,Quebec,Canada,NXDN +360,KN4TKG,Cory,Claxon,Grayson,Kentucky,United States,NXDN +361,K7NZ,Derek J,Rutz,Phoenix,Arizona,United States,NXDN +362,XE2SI,Juan,Tellez Amezcua,Tijuana,Baja California Norte,Mexico,NXDN +363,KE2EMS,Matt,McDonald,Ogdensburg,New York,United States,LOCAL VHF REPEATER +364,K8OI,Jim,Bates,Midlothian,Virginia,United States,Portable +365,KD9IGT,Justin R,Elliott,Salem,Indiana,United States,NXDN +366,K7BIO,Colin,Getty,Seattle,Washington,United States,NXDN +367,VE3MMX,Michael G,Kosch,Shedden,Ontario,Canada,NXDN +368,W9QYQ,Ham Club Inc,Hoosier Hills,Bedford,Indiana,United States,NXDN +369,WX4JDM,Jeffrey,McMurry,Ellabell,Georgia,United States,NXDN +370,WX4JDM,Jeffrey,McMurry,Ellabell,Georgia,United States,NXDN +371,KG5PTT,Joshua E,Blakemore,Mckinney,Texas,United States,NXDN +372,K8UN,Stephen C,Folk,Clinton Township,Michigan,United States,NXDN +373,K5DCX,Donald O,Cox,Kingsland,Arkansas,United States,NXDN +374,XE2JEG,Eduardo,Gallegos,Chihuahua,Chihuahua,Mexico,NXDN +375,KN4PIH,Richard J,Lennon,Lakeland,Florida,United States,NXDN +376,KN6AEL,Zayn K,Abdel Kader,Glendora,California,United States,NXDN +377,WA4CSS,Gerald,Rettler,Bradenton,Florida,United States,NXDN +378,WB8ROI,Glenn,Davies,Warren,Michigan,United States,NXDN +379,BU3AA,Akila,Liu,Taoyuan,Northern Taiwan,Taiwan,NXDN +380,KC5DHM,William B,Knox,Cibolo,Texas,United States,NXDN +381,K5JSG,Jeremy,Gaynor,Penfield,New York,United States,NXDN +382,W4EDP,Emmett D,Perdue,Lookout Mountain,Georgia,United States,NXDN W4EDP +383,KG4BHR,Shawn W,Bolton,Albertville,Alabama,United States,NXDN +384,WZ4P,Marvin,Mealer,Tunnel Hill,Georgia,United States,NXDN +385,N8RJP,Ryan J,Pocklington,Brooklyn,Michigan,United States,NXDN +386,KP4EOP,Jay,Santiago,Rio Grande,San Juan,Puerto Rico,NXDN +387,W9TSS,Rob,Royse,Moro,Illinois,United States,NXDN +388,W2SCL,Scott,Laycock,Farmington,New York,United States,NXDN +389,BD7MQB,Michael Changzhi,Cai,Shenzhen,Hu Nan Guang Dong Guang Xi,China,NXDN +390,N4FIV,Gary,Hand,Alabaster,Alabama,United States,NXDN +391,KB9BPF,Bradley C,Andrews,Godfrey,Illinois,United States,NXDN +392,NM2V,Lesly,Saint Victor,Maitland,Florida,United States,NXDN +393,W1BFT,Kevin,Veator,Wilmington,Massachusetts,United States,NXDN +394,KD2QAG,Christopher M,Geist,Patchogue,New York,United States,NXDN +395,WA0STX,John,Beasly,York,Maine,United States,NXDN +396,KP4TR,Ramon,Gonzalez,Carolina,San Juan,Puerto Rico,KP4TR +397,CN8IC,Mourad,BERDEY,TETOUAN,All Regions,Marocco,NXDN +398,K5CSA,Edward J,Csaszar,Saltillo,Mississippi,United States,NXDN +399,HL5KY,Yun Jae,Jo,Busan,BuSan Si,Korea S Republic of,NXDN +400,AE5ME,Jeff,Scoville,Broken Arrow,Oklahoma,United States,NXDN +401,KC3HXF,Jacek,Ostrowski,Jamison,Pennsylvania,United States,NXDN +402,K1BAD,Carmelo,Serrano,Raynham,Massachusetts,United States,NXDN +403,KN4RW,Rudy,Walls,Smithfield,North Carolina,United States,NXDN +404,VA7MAD,Micheal,Spiers,Vancouver,British Columbia,Canada,NXDN +405,N5JPV,Jonathan P,Voss,Spring,Texas,United States,NXDN +406,KB3PRI,Matthew J,Reed,North Irwin,Pennsylvania,United States,NXDN +421,VA7WPN,John,Brent,Sooke,British Columbia,Canada,CN88DJ +422,AJ6GE,Ken,Pittroff,Sacramento,California,United States,NXDN +423,N2DCB,George N,Kerasiotis,Brooklyn,New York,United States,NXDN +424,KB8ZGL,Mike,Wolthuis,Greenville,Michigan,United States,NXDN +425,N4SPK,Sean,Krause,Chattanooga,Tennessee,United States,NXDN +426,WA0LOL,Albert,Craven,Phoenix,Arizona,United States,NXDN +427,N2MCI,Peter A,Dziomba,Kingston,New York,United States,NXDN +428,4Z1YR,Yoram,Rotbach,Modiin,Central,Israel,NXDN +429,N8FRJ,Douglas A,Friedt,Willoughby,Ohio,United States,NXDN +430,VU2KUC,Ramakrishnan,K A ,Udaipur Rajasthan,Rajasthan,India,NXDN +431,HS5QQT,Suphol,Sangthong,Laplea,Uttaradit,Thailand,NXDN +432,N8QO,Roger J,Simpson,North Platte,Nebraska,United States,NXDN +433,KF6OJE,Ray W,Torella,Spokane Valley,Washington,United States,NXDN +434,KG5RDF,David,Houser,Coppell,Texas,United States,NXDN KG5RDF +435,W9NNH,Melanie,Dahms,Columbia City,Indiana,United States,NXDN +436,KN4TYX,Daniel,Perez,Valdosta,Georgia,United States,NXDN +437,AI7PM,Phillip S,Mc Elrath,Cheyenne,Wyoming,United States,NXDN +438,KE6YJC,Ted,Freitas,Bakersfield,California,United States,NXDN +439,KA6VHA,Rubens H,Miseta,West Covina,California,United States,NXDN +440,WX5ATX,Tyler,Bufkin,Fort Worth,Texas,United States,NXDN +441,KD8DVR,Johnny L,Wilkerson,Westerville,Ohio,United States,NXDN +442,KC5AFM,Jeffrey W,Wolfington,Cedar Park,Texas,United States,NXDN +443,KC9BMT,Shaun P,Curry,Springfield,Illinois,United States,NXDN +444,WD0ADI,Stephen D,Jester,Harker Heights,Texas,United States,NXDN +445,AG3U,Bob,Worek,Cheswick,Pennsylvania,United States,NXDN +446,KI7REL,Anthony H,Galvez,Bluffdale,Utah,United States,NXDN +447,BH1TZO,Ning,Zhao,Beijing,Bei Jing,China,NXDN +448,KA1NFT,James D,Frechette,E Taunton,Massachusetts,United States,NXDN +449,NJ3H,George A,Stein,Redmond,Oregon,United States,NXDN +450,AD8DO,Yi,Zhang,Columbus,Ohio,United States,NXDN +451,WX3C,Juan,Arias,Lake Worth,Florida,United States,Mobile +452,WX3C,Juan,Arias,Lake Worth,Florida,United States,Portable +453,9Y4C,Dexter,Harroo,San Juan,All Regions,Trinidad and Tobago,NXDN +454,K2COP,Gregory R,Felter,Amsterdam,New York,United States,2nd Radio Greg +455,NE5SD,Steven R,Duskin,Blanchard,Oklahoma,United States,NXDN +456,WC4B,Greg O,Shaw,Versailles,Kentucky,United States,NXDN +457,KC5CNT,Russ,Hules,Bridport,Vermont,United States,NXDN +458,W0BSM,Brian,Martin,Grand Forks,North Dakota,United States,NXDN +459,VE3PV,Rick,Leblanc,Windsor,Ontario,Canada,NXDN +460,KJ7DDR,Wesley,Krause,Lewis McChord,Washington,United States,NXDN +461,KF5WGF,Michael T,Bilke,College Station,Texas,United States,NXDN +462,KF5WGF,Michael T,Bilke,College Station,Texas,United States,NXDN +463,KF5WGF,Michael T,Bilke,College Station,Texas,United States,NXDN +464,K7ABG,Glenn E,Yeager,Mesa,Arizona,United States,NXDN +465,W0RLR,Ryan L,Roberts,Hannibal,Missouri,United States,NXDN +466,KB5KYW,Michael D,Coyne,Alto,New Mexico,United States,NXDN +467,KS4SX,William N,Jenkins,Ocoee,Florida,United States,35758 +468,K9ABR,Andrew,Rafferty,Streamwood,Illinois,United States,NXDN +469,VE3WVJ,William,Rorison,Garson,Ontario,Canada,NXDN +470,N1JTA,Joe,Apuzzo,Staatsburg,New York,United States,NXDN +471,KJ3LR,Louis,Rubens,Bradenton,Florida,United States,NXDN +472,KE8ATX,Brad,South,Cincinnati,Ohio,United States,NXDN +473,KE8ATX,Brad,South,Cincinnati,Ohio,United States,NXDN +474,K2GOG,Steve,Bossert,Poughkeepsie,New York,United States,NXDN +475,KF6JXT,Scott P,Chester,Murrieta,California,United States,NX 5000 +476,KD2KUF,Paul,Logus,New York,New York,United States,NXDN +478,KC1FHZ,James W,Bonnayer,Ware,Massachusetts,United States,NXDN +479,KB3IUM,Timothy N,Joynes,Wilmington,Delaware,United States,NXDN kB3IUM +480,4F4IX,Francisco,Lim,Naga City,Bicol Region,Philippines,NXDN +481,W8KDG,Jerry,Kuhn,Parma,Ohio,United States,NXDN +482,KG5FHR,Steven D,Roberts,Tulsa,Oklahoma,United States,NXDN +483,WP3BL,Irvin,Fontanes,Long Beach,All Regions,Puerto Rico,NXDN +484,W3WDD,Daniel,Decourt,Raleigh,North Carolina,United States,W3WDD NXDN +485,VK3WV,Dennis,Sillett,Melbourne,Victoria,Australia,NXDN +486,N4LRD,Richard,Donald,Pendleton,South Carolina,United States,NXDN +487,K4BAN,Alex,Norwood,Clemson,South Carolina,United States,NXDN +488,K5ROC,Earl S,Glover,Little Rock,Arkansas,United States,NXDN +489,W7LDN,Elden,Fenison,Junction City,Oregon,United States,NXDN +490,K5BCT,Zach,Miller,Tulsa,Oklahoma,United States,NXDN +491,AE4RY,Ronald E,Yates,Charlotte,North Carolina,United States,NXDN +492,KC1BUF,James,Eldridge,Epsom,New Hampshire,United States,NXDN +493,N9CMC,Jeffrey L,Mehr,Chicago,Illinois,United States,NXDN +494,N7ROJ,John,Byerly,Reno,Nevada,United States,NXDN +495,NA7KR,Kevin R,Roberts,Salem,Oregon,United States,NXDN +496,KE0VWZ,Paul,G,Fargo,North Dakota,United States,NXDN +497,K0EB,Rich,Gordon,Brighton,Colorado,United States,NXDN +498,KC1GHT,Scott A,Czeck,Winchester,Massachusetts,United States,NXDN +499,W9RCG,Robert C,Guenther,Pewaukee,Wisconsin,United States,w9RCG +500,KD2FRD,Don,Edwards,Rochester,New York,United States,NXDN +501,N5QS,Roger W,Gray,Searcy,Arkansas,United States,NXR810 +502,AB5ER,,North Central Arkansas Amat Rad Serv,Searcy,Arkansas,United States,NXR710 +503,N5LKE,James D,Ferguson,Searcy,Arkansas,United States,NXR810 +504,WA3PNY,Jeffrey V,Bauer,Macungie,Pennsylvania,United States,NXDN +505,KB4FHP,Joseph M,Lunsford,Lake Wales,Florida,United States,NXDN +506,VU3WXH,Vineesh,Pillai,Kollam,Kerala,India,NXDN +507,KB2JYN,Antonio Rivera,Rivera,Bronx,New York,United States,NXDN +508,KC2TZA,Steven J,Lejda,Melbourne,Florida,United States,NXDN +509,N0KQG,Steven,Wilson,Smithville,Missouri,United States,NXDN +510,K4KSA,Steven J,Siesel,Seminole,Florida,United States,NXDN +511,K4KSA,Steven J,Siesel,Seminole,Florida,United States,NXDN +512,N9LYA,Jerome M,Kutche,Mitchell,Indiana,United States, +513,KC9JIH,Jason L,Kutche,Huron,Indiana,United States, +514,KC9DDP,Retha L,Kutche,Mitchell,Indiana,United States, +515,AA9MQ,Douglas D,Allington,Auburn,Washington,United States,NXDN +516,KG7PBS,Vincent E,Talancon,Reno,Nevada,United States,NXDN +517,KC9STU,Thomas C,Andrews,Alton,Illinois,United States,NXDN +518,K4CHY,Stephen M,Malone,Nicholasville,Kentucky,United States,NXDN +519,WB2NYC,Mike,Martino,Brooklyn,New York,United States,NXDN +520,K5EDJ,Edward L,Johnson,Mesa,Arizona,United States,NXDN +521,K5EDJ,Edward L,Johnson,Mesa,Arizona,United States,NXDN +522,HS1SXI,Teerawat,Nakniyom,Phra Nakhon Si Ayutthaya,Phra Nakhon Si Ayutthaya,Thailand,NXDN +523,KB7SQF,Richard R,Norton,Alamogordo,New Mexico,United States,NXDN +524,HS3BCK,Phiraphong,Phuphairotnaphalai,Pakchong,Nakhon Ratchasima,Thailand,NXDN +525,VE3HL,Len,Dantzer,Ottawa,Ontario,Canada,NXDN +526,NP4H,Nomar,Vizcarrondo,Caguas,Caguas,Puerto Rico,NXDN +527,VK4MIH,Jason,Ryan,Gympie,Queensland,Australia,NXDN +528,AG8R,Brandon C,Gerber,Clearwater,Florida,United States,NXDN +529,K4SIP,Byron D,Felts,Riverview,Florida,United States,NXDN +530,HS8HXQ,Supot,Jamrernsuk,Chaiyaphum,Bangkok,Thailand,NXDN +531,KC9WPR,Nicholas P,Fredrich,Downers Grove,Illinois,United States,NXDN +532,K6WST,Will,Tomas,Imperial,California,United States,NXDN +533,VE7WEA,Jacob,Wendland,Lumby,British Columbia,Canada,NXDN +534,N8EMA,Jeff,Wood,Amelia,Ohio,United States,NXDN ID +535,K1NRA,Paul S,Castellani,Lakeville,Pennsylvania,United States,NXDN +536,AD5KL,Lance,Sanders,Hot Springs Village,Arkansas,United States,NXDN +537,KM6ZKV,Miguel,Araque,Los Angeles,California,United States,NXDN +538,CE5RHS,Miguel,Vergara O ,Coronel,Bio Bio,Chile,NXDN +539,NQ8H,Scott A,Smith,Hastings,Nebraska,United States,NXDN +540,K3ALG,Aaron,Groover,Palmerton,Pennsylvania,United States,NXDN +541,W9MO,Bob,Young,Columbia,Illinois,United States,NXDN +542,KG5OBU,Rob,Whaley,Little Elm,Texas,United States,NXDN +543,AJ4G,Ralph,Queener,Middlesboro,Kentucky,United States,NXDN +544,BV3UN,David,Chien,Luzhu Dist Taoyuan,Northern Taiwan,Taiwan,NXDN +545,VA7XJC,James S ,Cooper,Victoria,British Columbia,Canada,NXDN +546,WV5L,Vance S,Loen,Woodstock,Georgia,United States,NXDN +547,KE0VMO,James N,Martin,Highlands Ranch,Colorado,United States,NXDN +548,AD0TY,Sutton M,Doty,Rosedale,Indiana,United States,NXDN +549,W8RIK,JOSEPH,HUSSEY,COLUMBUS,Ohio,United States,NXDN +550,K2AMP,Alvin,Petitt,Culpeper,Virginia,United States,NXDN +551,KK4RYS,Nathan D,Hollenbach,Madisonville,Kentucky,United States,NXDN +552,W2ANN,Justin,Smith,Bellevue,Washington,United States,NXDN +553,KN4UOT,Eric,Howard,Woodbridge,Virginia,United States,NXDN +554,E24ZRX,Krit,Vasinanon,None,Bangkok,Thailand,NXDN +555,W2ODD,Todd M,Coon,Manchester,New York,United States,NXDN +556,K9OBX,Jeffery,Eberhart,Johnston City,Illinois,United States,NXDN +557,KN4UVP,Ronald,Campbell,Falls Church,Virginia,United States,NXDN +558,WA5GAD,George,Dragoon,Winchester,New Hampshire,United States,NXDN +559,WA4ZKO,Jeffrey,Thomas,Dry Ridge,Kentucky,United States,NXDN PORTABLE +560,VU2POL,Prabin,C Thomas,Trichur Kerala 6805,Kerala,India,NXDN +561,HS6PAU,Paisarn,Phanthanyakij,Po Box 1 Srinakhon Sukhothai 64180,Bangkok,Thailand,NXDN +562,KD4ADL,Derek,Rogers,Christiansburg,Virginia,United States,NXDN +563,KN4GLY,Bradford,Cillizza,Middle Haddam,Connecticut,United States,NXDN +564,KM6CQ,Daniel,Leon Baker,Washoe Valley,Nevada,United States,NXDN +565,KF6ODE,Ryan,Promack,Fallbrook,California,United States,NX 5300 +566,KD4RKO,Shawn,Hughes,Lenoir City,Tennessee,United States,NXDN +567,W8KDC,Kevin D,Cleavenger,Bridgeport,West Virginia,United States,NXDN +568,W8KDC,Kevin D,Cleavenger,Bridgeport,West Virginia,United States,NXDN +569,HS1GAB,Anan,Paenthongkhan,BANGBAOTHONG,Nonthaburi,Thailand,NXDN +570,VE3NY,Thomas,Corcoran,Miami Beach,Florida,United States,23284 +571,BG7YID,haidi,wang,Sanya,Hu Nan Guang Dong Guang Xi,China,NXDN +572,WH6EAO,Odell,Chinen,Aiea,Hawaii,United States,NXDN +573,WH6EAO,Odell,Chinen,Aiea,Hawaii,United States,NXDN +574,WH6EAO,Odell,Chinen,Aiea,Hawaii,United States,NXDN +575,E20WMJ,Yodsapon,Poonsawad,Koh Lanta,Krabi,Thailand,NXDN +576,E29TXA,Thanadech,Dittalumphu,Ranong,Ranong,Thailand,NXDN +577,AG9J,Yodsapon,Poonsawad,Westminster,California,United States,NXDN +578,WY1Z,Scott R,Ehrlich,Winchester,Massachusetts,United States,NXDN +579,KM4ECS,Emery A,Miils,Morriston,Florida,United States,NXDN +580,WA2DNR,Richard T,Silvano,Valatie,New York,United States,NXDN +581,VK4UQ,David,Kavanagh,Toowoomba,Queensland,Australia,NXDN +582,AC2OK,Eric J,Rivas,Plainsboro,New Jersey,United States,NXDN +583,KK6VEJ,Thanadech,Dittalumphu,simi valley,California,United States,NXDN +584,KE8O,Gary R,Mackey,Delaware,Ohio,United States,NXDN +585,KE8O,Gary R,Mackey,Delaware,Ohio,United States,NXDN +586,W9XQ,Marc R,Meikle,Newburgh,Indiana,United States,NXDN +587,KC9FQT,Jonathan K,Creasy,LaGrange,Kentucky,United States,NXDN +588,N0SYS,George L,Mager,Flat Rock,North Carolina,United States,NXDN +589,W9VTT,Ken,Kaya,Wonder Lake,Illinois,United States,NXDN +590,BV5PD,Chih Jen,Hsu,Douliu,Central Taiwan,Taiwan,NXDN +591,KD4CIF,David M,Florence,Warrior,Alabama,United States,NXDN +592,VE3PPO,George, ,Tillsonburg,Ontario,Canada,NXDN +593,KT4RJ,Steve,S,Lakeland,Florida,United States,KENWOOD NX700 800 200 300 +594,K1JWB,John,Bacon,Whitinsville,Massachusetts,United States,NXDN +595,AG4OJ,William R,Pelfrey,Macon,Georgia,United States,NXDN +596,BV3UJ,Tzu Yi,Wen,Taoyuan,Northern Taiwan,Taiwan,NXDN +597,WD5ETD,Rick,Wilson,Tulsa,Oklahoma,United States,NXDN +598,AE0L,Richard D,Jacobs Jr,Chandler,Arizona,United States,NXDN +599,K4VFR,Nikolas,Ziehe,St Petersburg,Florida,United States,NXDN +600,KD5ZMC,Christopher E,Owen,Texarkana,Texas,United States,NXDN +601,K0EG,Karl E,Goetsch,Defiance,Missouri,United States,NXDN +602,KJ4JOF,GREG,HATCHER,Crossville,Alabama,United States,NXDN +603,E29UOO,Sirin,Sainamsai,Bangkok,Bangkok,Thailand,NXDN +604,KM6ZJX,Abad S,Vera,Murrieta,California,United States,NXDN +605,HS0GWL,Thanin,Prasertkarn,Kraburi,Ranong,Thailand,NXDN +606,W7VY,Paul,Belton,Reno,Nevada,United States,NXDN +607,BH7LOT,He,Chuanjie,Guangzhou,Hu Nan Guang Dong Guang Xi,China,Portable +608,KB7RZF,Jeremy B,Clark,Sun Valley,Nevada,United States,NXDN +609,KD8QPZ,John T,Wills,Farmington,Michigan,United States,NXDN +610,KA1FAI,William,Mcvinua,Milford,Connecticut,United States,NXDN +611,WV9A,Scott T,Mackenzie,Wheeling,Illinois,United States,NXDN +612,KE0ABR,Nicholas A,Mitzuk,Saint Francis,Minnesota,United States,NXDN +650,KJ4PIU,CJ,Griggs,Ponce de Leon,Florida,United States,NX 5200 +651,KC3KSJ,Chris,Hoerner,Wilmington,Delaware,United States,Home Office NX820 +652,K5TUX,John R,Woodman,Mount Vernon,Missouri,United States,NXDN +653,N8MWY,Donald,Narris,Minerva,Ohio,United States,NXDN +655,KC3KSJ,Chris,Hoerner,Wilmington,Delaware,United States,Mobile NX5000 +656,E29JCH,Chalongrat,Sutthiwanich,Langsuan,Bangkok,Thailand,NXDN +669,KC3KSJ,Chris,Hoerner,Wilmington,Delaware,United States,Portable NX5000 +670,VK3AJ,Peter,Chaplin,Upwey,Victoria,Australia,NXDN +671,VK3AJ,Peter,Chaplin,Upwey,Victoria,Australia,NXDN +672,KC3KSJ,Chris,Hoerner,Wilmington,Delaware,United States,Portable NX320 +673,KC3KSJ,Chris,Hoerner,Wilmington,Delaware,United States,Portable NX320 +674,KC3KSJ,Chris,Hoerner,Wilmington,Delaware,United States,Portable NX320 +690,KJ4PIU,CJ,Griggs,Ponce de Leon,Florida,United States,NX 5700 +701,NR6AM,Frances H,Nievera,San Diego,California,United States, +702,N6JFO,Noel R,Lozada,Las Vegas,Nevada,United States,NXDN +703,W4KHZ,Terry,Wright,Lakeland,Florida,United States,NXDN +724,PU1LOY,Luiz Sergio,Santos Lemos,Rio De Janeiro,Rio de Janeiro,Brazil,Rio de janeiro +725,KN4WSX,Mario A,Batista,Sebastian,Florida,United States,NXDN +726,KO4LJ,Todd,Jarvis,Winston Salem,North Carolina,United States,NXDN +727,KN6DYQ,Nicholas,Benz,Richmond,California,United States,NXDN +728,K1BVK,Paolo,Garbin,Long Island City,New York,United States,NXDN +729,K9WLW,Francis P,Bednar,Tampa,Florida,United States,NXDN +775,BH7NCW,Jianhua,Long,Haizhu District Guan,All Others,China,Portable +823,KC1JMZ,Theodore,Wojcik,Taunton,Massachusetts,United States, +900,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NXR810 +901,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NX320 +902,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NX320 demo +903,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NX800H +905,W1RHS,Rick,Swenton,South Dennis,Massachusetts,United States,NX320 +906,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NX200 +907,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,Future +908,W4CLL,Chuck,Lavender,Plant City,Florida,United States, +910,W4CLL,Chuck,Lavender,Plant City,Florida,United States, +911,W4CLL,Chuck,Lavender,Plant City,Florida,United States, +920,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States,P1 UHF NX300 +921,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States,P1 VHF NX220 +922,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States,P2 UHF NX300 +923,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States,M1 VHF NX700 +924,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States,P3 UHF NX 5300 +925,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States,P2 VHF NX 5200 +926,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States,M1 UHF NX 5800 +928,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States,Icom portable +929,N1XDN,Robert,Thoelen Iii,Enfield,Connecticut,United States, +930,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NX300 +931,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NX300 +936,W1GPO,John R,Haserick Jr,Tolland,Connecticut,United States,NX300 +937,N1PAH,CLARKE C,BOYNTON,GRANVILLE,Massachusetts,United States, +950,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States,NXR810 +951,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States,NX800H +952,K1GML,GAIL M,LOUCHEN,TORRINGTON,Connecticut,United States,NX800H +953,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States,NX320 1 +954,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States, +955,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States, +956,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States, +957,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States, +958,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States,F4161 +959,K1KGQ,Joel A,Weber,Torrington,Connecticut,United States,Future +960,K1ZXX,Gary A,Hopkins,Thompson,Connecticut,United States,Icom All radios +961,WA1SSB,Joseph,Kotomski,Naugatuck,Connecticut,United States,NX800H +962,N1MAT,DENNIS W,LOMBARD,WEST SUFFIELD,Connecticut,United States,F4161 +963,N1MAT,DENNIS W,LOMBARD,WEST SUFFIELD,Connecticut,United States,F4161 +970,KB1VRI,Nicholas,Levasseur,Enfield,Connecticut,United States, +971,N1ELE,Paul,Meunier,Enfield,Connecticut,United States, +972,N1ODJ,Kenneth,Schmitz,Middletown,Connecticut,United States, +973,W1VLF,PAUL A,CIANCIOLO,HARWINTON,Connecticut,United States, +990,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NXR810 +995,K1IFF,CLIFFORD J,CAYER,BRISTOL,Connecticut,United States,NXR710 link radio +999,2E0NEQ,Jono,Clarke,Wallsend,,England, +1000,KP4RF,Oscar,Resto,Vega Alta,San Juan,Puerto Rico, +1001,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX200 Portable 1 +1002,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX200 Portable 2 +1003,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX300 Portable 1 +1004,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX300 Portable 2 +1005,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX700 Base +1006,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX800 Base +1007,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX700 Mobile 1 +1008,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX700 Mobile 2 +1009,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX800 Mobile 1 +1010,KE4GWW,James M,Nelson,Dothan,Alabama,United States,NX800 Mobile 2 +1015,KK4WH,Tim,Webb,Benham,Kentucky,United States,MMDVM RPi3 Pi Star +1020,N3BKV,David,Ginsberg,Glendale,California,United States, +1024,W4GLE,Grady,Evans,Fayette,Alabama,United States,Portable +1025,W4GLE,Grady,Evans,Fayette,Alabama,United States,Mobile +1026,KJ4TBJ,Kimberly,Evans,Fayette,Alabama,United States,Portable +1027,KJ4TBJ,Kimberly,Evans,Fayette,Alabama,United States,Mobile +1028,K4ASF,Fayette,County Arc,Fayette,Alabama,United States,Club Fleet +1030,CE1WMY,Jimmy,Romero,Calama,Antofagasta,Chile,Portatil +1031,W4GLE,Grady,Evans,Fayette,Alabama,United States,JumboSpot +1033,W4GMI,David,Bash,Vernon,Alabama,United States, +1035,W4GMI,David,Bash,Vernon,Alabama,United States, +1036,N1XH,Rob,Potvin,Spencer,Massachusetts,United States,NXDN +1037,N1XH,Rob,Potvin,Spencer,Massachusetts,United States,NXDN +1038,N1XH,Rob,Potvin,Spencer,Massachusetts,United States,NXDN +1039,K4DJL,El,Erby,Montgomery,Alabama,United States, +1044,W4DBG,Doug,Gooden,Troy,Alabama,United States, +1045,W4DSM,David S,Martin,Brewton,Alabama,United States, +1046,W4SFA,Scott,Carmichael,Montgomery,Alabama,United States, +1047,KM4AFR,Fayette,County Ema,Fayette,Alabama,United States,Club Fleet +1048,KK4QXJ,Fayette,County Ares,Fayette,Alabama,United States,Club Fleet +1049,KC4UG,West,Alabama Amateur Radio Club,Vernon,Alabama,United States,Club Fleet +1050,WD4MHS,Robin,Kenny Bearden,Bessemer,Alabama,United States, +1051,WD4MHS,Robin,Kenny Bearden,Bessemer,Alabama,United States, +1052,K5DMR,Stephen,W Curtis,Double Springs,Alabama,United States, +1053,BG1LSN,Zhang,Ai Dong,Beijing,Bei Jing,China, +1054,K5DMR,Stephen,W Curtis,Double Springs,Alabama,United States, +1055,N4WFF,Jack,B Windham Iii,Elba,Alabama,United States, +1066,KM4JXP,Peter,Tasker,Woking,Florida,United States,NX5300 +1070,KM4EDS,Danny,Cooley,Oneonta,Alabama,United States, +1088,W4DWF,Darrick Fields,Fields,Cullman,Alabama,United States, +1103,W4UDT,Bobby P,Murphy,Birmingham,Alabama,United States, +1104,KM4CJ,Steven W,Smith,Huntsville,Alabama,United States, +1117,K6FED,Frank,Decuire,Rancho Cucamonga,California,United States, +1118,KQ6K,Edward N,Pierce,Moorpark,California,United States,NXDN +1119,AB2HM,Patrick,Guilfoy,Woodbury Heights,New Jersey,United States,NXDN +1181,W4KMG,Kris,Garner,Auburn,Alabama,United States, +1193,KK4LPO,Timothy,Patrick,Huntsville,Alabama,United States, +1304,K4XXX,Ed,Lemley,London,Kentucky,United States,Work NX800 +1313,KB2UNZ,Edward,Donnelly,Kenvil,New Jersey,United States,VHF UHF +1314,KB2UNZ,Edward,Donnelly,Kenvil,New Jersey,United States,VHF UHF Mobile +1325,W4OWE,Rodney J,Stevens,Ashville,Alabama,United States, +1337,N5AMD,Ben A,Fogt,San Antonio,Texas,United States,N5AMD +1338,VK4FRJY,Robert,Young,Eidsvold,Queensland,Australia,NXDN +1364,AE4AL,WILLIAM T,BOWMAN JR ,OXFORD,Alabama,United States, +1365,KM4VKT,James,Spitzer,Elgin,South Carolina,United States,NXDN +1386,W4OA,Shelly F,Mitchell,Opelika,Alabama,United States,mmdvm hs with RPi Zero W +1408,KD2PNV,Bjoern C,Unger,Valley Cottage,New York,United States, +1409,K3WHD,David K,Enright,Rochester,New York,United States,NXDN +1410,KD9IBT,John P,Hamilton,Manitowoc,Wisconsin,United States,NXDN +1411,VK2FCAM,Cameron,Stacey,South Grafton,New South Wales,Australia,NXDN +1429,K4NWS,Alert,Alabama Emergency Response Team,Chelsea,Alabama,United States, +1460,AL2C,Alabama BARC,Alabama Bicentennial Amateur Radio Club,Montgomery,Alabama,United States, +1496,K4FSO,William A,Rodgers,Steele,Alabama,United States, +1538,G7MNP,Glen,Turner,Penketh,,England, +1539,W6TUZ,Ronald J,Zenone,Ventura,California,United States,NXDN +1540,K9KMS,Kenneth,Severn,Oostburg,Wisconsin,United States,NXDN +1541,WA3LXD,David,Alvarez,Ft McCoy,Florida,United States,NXDN +1699,K1ZBT,Shane,Keith,Rutland,Vermont,United States,shane +1702,KC9RHH,Jesse A,Weiss,Noble,Illinois,United States, +1703,KC9NPJ,Jarrett A,Weaver,Johnsonville,Illinois,United States, +1704,9W2XNE,DIN KAFTAC,9W2XNE,Georgetown Penang ,West Malaysia,Malaysia,NXDN +1705,VE3JUE,Joe,Stone,Toronto,Ontario,Canada,NXDN +1706,KC8ZYB,Jeff W,Yates,Hilton Head Island,South Carolina,United States,NXDN +1801,KB7SIJ,Jeffrey J,Pugh,Saint Maries,Idaho,United States,Repeater +1802,KB7SIJ,Jeffrey J,Pugh,Saint Maries,Idaho,United States,Icom Hand Held +1803,KB7SIJ,Jeffrey J,Pugh,Saint Maries,Idaho,United States,Icom Mobile +1839,BG6TWT,Tim,Yang,Wuhan,He Nan Hu Bei An Hui,China,MMDVM +1907,BH8DHV,Weidong,Chen,Chengdu City Sichuan,Gui Zhou Si Chuan,China,NX 300 +1913,K6INC,,SCAN INTERNATIONAL,ELK GROVE,California,United States,443 1500 repeater +1914,AK6O,Rod,Ramos,Elk Grove,California,United States, +1915,AD1U,Angel A,Datuin,San Jose,California,United States, +1956,KC7SDD,DANA B,HANFORD JR,BAINBRIDGE ISLAND,Washington,United States,Member BARC W7NPC org +1963,N5JRN,David,Barts,Bainbridge Island,Washington,United States,Handheld Icom 4161 +1973,N6CKC,Nestor,Punales,SAN DIEGO,California,United States, +1976,W6ABJ,Richard,Larson,Merced,California,United States,w6abj +1997,KC1AJR,Giovanni M,Vincent,East Hampton,Connecticut,United States,kenwood NX800 K2 +1999,M0XZT,Paul,Driver,Earlsheaton Dewsbury,,England, +2001,VE1CRA,Ronald,MacKay,,,Canada, +2002,VO1UHF,AVALON RADIO AMATEUR RADIO CLUB,C O CANADIAN RED CROSS,ST JOHN S,Newfoundland and Labrador,Canada,vo1digital wordpress com +2007,VA7UN,Fred,Schrod,Kelowna,British Columbia,Canada,MMDVM Rpt DMR302007 +2008,PU2MLA,Mauro,L Abrantes,Santa Barbara d,Sao Paulo,Brazil, +2015,HL3BAT,Tae Sik,Shin,Daejeon,DaeJeon Si,Korea S Republic of, +2074,ZL1OZ,Brett,Skinner,Levin,North Island 2,New Zealand, +2075,ZL2AUS,Brett,Skinner,Levin,North Island 2,New Zealand, +2096,ZL2EZ,Tony,Hughes,Hastings,North Island 2,New Zealand,I m awesome +2135,K3ETS,John E,Keeting,Riverview,Florida,United States,NXDN ICOM F6061D +2160,BG2XJA,Zhi,Chen,Anshan,Hei Long Jiang Ji Lin Liao Ning,China,Portable +2173,KG5YOS,Charles C,Hutchinson,San Antonio,Texas,United States,Icom 6061D +2176,KC2KVE,Mike,Brouse,Ogdensburg,New York,United States,PORTABLES +2241,KG5VSX,Shelton S,Sapp,Plano,Texas,United States, +2326,VA3ITL,Rob,Metallo,Maple,Ontario,Canada,Uhf repeater +2327,KB9LMJ,Travis W,Speakman,Watkins,Colorado,United States,NXDN +2332,VE3WHR,Donald H,Kramer,OTTERVILLE,Ontario,Canada,443 925 MMDVM Repeater +2345,VE3DPL,George,Musikov,SCOTLAND,Ontario,Canada,146 655 mmdvm repeater +2346,W1VET,Ronald L,Bouthillier Jr,Spring Hill,Florida,United States,NXDN +2347,E27ELR,Sarawut,Chantarakumnird,Chachoengsao,Bangkok,Thailand,NXDN +2411,KC9GNQ,Frank,Gergits,Oviedo,Florida,United States, +2412,E27GAQ,Rung,None,Bangpakong,Chachoengsao,Thailand,NXDN +2426,N1UL,Ulrich,Rohde,Marco Island,Florida,United States, +2498,VK2VAB,Andrew,Brierley,Dapto,New South Wales,Australia, +2501,KA1DTA,DAVID A,REZENDES,TAUNTON,Massachusetts,United States, 25 01 +2524,KC1ACI,Craig,,N Oxford,Massachusetts,United States,MMDVM Repeater +2525,KN4ZBG,Peter,Canada,Homosassa,Florida,United States,NXDN +2580,K4BSC,Brent,Case,Rock Hill,South Carolina,United States, +2593,K2ET,Knute Kenneth J,Carlson,Batavia,New York,United States,CCS7 3136870 +2647,W2GLD,Jerry,Dubzak,Pinckney,Michigan,United States,UHF MMDVM Repeater +2648,BH4QBO,Shi,Hualiang,Shanghai City,Shan Dong Jiang Su,China,NXDN +2649,BG8FZ,Tu,Lan,Chengdu Wuhou Zongsh,Hei Long Jiang Ji Lin Liao Ning,China,NXDN +2708,VA7CNN,Carl Frederick,Schrod,KELOWNA,British Columbia,Canada,MMDVM Rpt DMR302708 +2709,VA7CNN,Carl Frederick,Schrod,KELOWNA,British Columbia,Canada,MMDVM Rpt DMR302709 +2710,VA7NBC,Carl Frederick,Schrod,KELOWNA,British Columbia,Canada,MMDVM Rpt DMR302710 +2711,VA7NBC,Carl Frederick,Schrod,KELOWNA,British Columbia,Canada,MMDVM Rpt DMR302711 +2712,VA7VTV,Carl Frederick,Schrod,KELOWNA,British Columbia,Canada,MMDVM Rpt DMR302712 +2713,VA7PTV,Carl Frederick,Schrod,KELOWNA,British Columbia,Canada,MMDVM Rpt DMR302713 +2714,VE7OJP,Carl Frederick,Schrod,KELOWNA,British Columbia,Canada,MMDVM Rpt DMR302714 +2716,VA7JPL,Carl Frederick,Schrod,KELOWNA,British Columbia,Canada,MMDVM Rpt DMR 302716 +2717,VE7EQN,Christopher,Walter,Kelowna,British Columbia,Canada,MMDVM Rpt DMR302717 +2718,KM9K,KEVIN M,KENNEDY,Bradenton,Florida,United States,NXDN +2719,KM9K,KEVIN M,KENNEDY,Bradenton,Florida,United States,NXDN +2720,KA9QPN,Tom,Ciciora,Sandwich,Illinois,United States,NXDN +2728,KD4EZW,Frank,Tagliani,Lake Mary,Florida,United States,2500 HT +2729,KN4ZFM,Luke,Price,Radford,Virginia,United States,NXDN +2730,KN4ZFM,Luke,Price,Radford,Virginia,United States,NXDN +2754,JG2FFB,Funakoshi,Fuminori,Gifu Motosu,Tokai,Japan, +2755,KM4LKX,Joshua K,Scurlock,Cleveland,Tennessee,United States,NXDN +2756,VE3RD,Phil,Thompson,Grimsby,Ontario,Canada,NXDN +2757,VK2YG,Ian,Whitelaw,Camden 2570,New South Wales,Australia,NXDN +2758,W3KIT,Komkit,Listisard,Silver Spring,Maryland,United States,NXDN +2759,HS0ZOE,Komkit,Listisard,Khan Na Yao,Bangkok,Thailand,NXDN +2819,K1ZBT,Shane,Keith,Rutland,Vermont,United States,shane +2857,BH7PUE,Wu,Haian,Guangzhou City Guang,Hu Nan Guang Dong Guang Xi,China,Portable +2858,KK4QL,Kenneth,Son,Elizabethtown,Kentucky,United States,NXDN +2950,WE4HAM,David J,Hamm,Raleigh,North Carolina,United States,YAESU FT991 +2951,KB0ZNU,Daniel S,Blashill,North Fort Myers,Florida,United States,NXDN +2953,KD2AFJ,John,Caputo,Howell,New Jersey,United States,Using a Yaesu FT2DR +2954,W0KM,Kirk,Miller,Olmsted Township,Ohio,United States,NXDN +2955,KN6FFC,Charles M,Deel Jr,Long Beach,California,United States,NXDN +3011,ZL3DMH,Douglas Mervyn,Hart,Christchurch,South Island,New Zealand,ICOM F4161 +3020,JA3ICQ,Nobuo,Kubota,kyoto,Kinki,Japan, +3039,BG3PVL,Hue Feng,Ma,Shijiazhuang,Shan Xi He Bei Tian Jin,China,Portable +3068,UB3AGT,Artem,Karataev,MOSCOW,,Russia,Icom F 4161DT +3070,W4ORL,Ralph,Betts,Winter Park,Florida,United States,Mobile +3071,W4LOV,Mike,Hensley,Cocoa,Florida,United States,NX800 +3072,N4JTK,John,Knott,Orlando,Florida,United States,NX800 +3073,N4JTK,John,Knott,Orlando,Florida,United States,Portable +3074,W4MCA,Michael,Cauley,Orlando,Florida,United States,NX300 +3075,W4LOV,Mike,Hensley,Cocoa,Florida,United States,NX800 +3076,NN4TT,Dave,Clausen,Orlando,Florida,United States,NX5300 +3077,K5HDM,Harmon,Moore,Austin,Texas,United States,K5HDM NXDN +3079,W4ORL,Ralph,Betts,Winter Park,Florida,United States,Portable +3081,W4MCA,Michael,Cauley,Orlando,Florida,United States,NX800 +3082,W4LOV,Mike,Hensley,Cocoa,Florida,United States,Portable +3083,KD4TWJ,Dean,Groe,Orlando,Florida,United States,Mobile NX800 +3084,KD4TWJ,Dean,Groe,Orlando,Florida,United States, +3087,NN4TT,Dave,Clausen,Orlando,Florida,United States,NX300 2 +3088,KN4HJT,Marshall F,Willis,Virginia Beach,Virginia,United States,NXDN +3092,NN4TT,Dave,Clausen,Orlando,Florida,United States,NX3820 +3094,NN4TT,Dave,Clausen,Orlando,Florida,United States,NX3320 +3095,NN4TT,Dave,Clausen,Orlando,Florida,United States,NX800 H +3113,N7SWX,Robert,Thomas,Manitowoc,Wisconsin,United States, +3131,K2KRS,Ken R,Stone,Livingston,Texas,United States, +3161,WW6E,Sardxcc,Sierra Amateur Radio Dx And Contest Club,Cameron Park,California,United States,Club Fleet +3176,KC2KVE,Mike,Brouse,Ogdensburg,New York,United States,MOBILES +3190,ZL3DVR,Douglas M,Hart,Christchurch,South Island,New Zealand,F4161 F6061 +3212,AE7NI,John,Pershing,Florence,Oregon,United States, +3271,N4KEG,Richard,Rexroad,Lakeland,Florida,United States,Mobile and or ht s UHF +3274,KD4EFM,Evans,Mitchell,Lakeland,Florida,United States, +3275,KD4EFM,Evans,Mitchell,Lakeland,Florida,United States, +3278,KD4EFM,Evans,Mitchell,Lakeland,Florida,United States, +3279,N4KEG,Richard,Rexroad,Lakeland,Florida,United States, +3280,KD4EFM,Evans,Mitchell,Lakeland,Florida,United States,work radio +3281,N4KEG,Richard,Rexroad,Lakeland,Florida,United States, +3285,K4SVT,William,Klosowski,Titusville,Florida,United States,Nx300 UHF +3287,K4SVT,William,Klosowski,Titusville,Florida,United States,Nx800 +3355,HL3BAT,Tae Sik,Shin,Daejeon,DaeJeon Si,Korea S Republic of, +3360,K1LNX,Stephen,Brown,Knoxville,Tennessee,United States, +3375,KI5ASL,Christopher J,Landry,Kenner,Louisiana,United States, +3422,N6JAF,Jeffrey Fisher,Fisher,Oxnard,California,United States, +3450,K0KAD,Chad R,Taylor,Spokane Valley,Washington,United States,My Portable +3451,K0KAD,Chad R,Taylor,Spokane Valley,Washington,United States,My Base Station +3452,K0KAD,Chad R,Taylor,Spokane Valley,Washington,United States,Mobile Radio +3564,K2DYC,David C,Simmons Jr,Zephyrhills,Florida,United States,Icom 6160 +3633,W8CTC,Chris,Campton,Hillsboro,Ohio,United States, +3751,BG6WNP,Lianyun,Huang,Wuhan,He Nan Hu Bei An Hui,China,Kenwood Nx300 +4020,K4XXX,Ed,Lemley,London,Kentucky,United States,NX820 Base +4031,KD9IAQ,Doug,Paquette,Merrillville,Indiana,United States,Doug s Base Radio NX800 +4034,BI4RFO,Cao,Gang,Zhangjiagang,Shan Dong Jiang Su,China,Portable +4047,KD9IAQ,Doug,Paquette,Merrillville,Indiana,United States,Doug s Car NX5800 +4193,N7ZQS,Wayne,Cummings,Marana,Arizona,United States,DM42kl +4239,G0FVX,Bert,Barnes,Barton under Needwood,,England, +4242,N4JBL,Jason B,Ledbetter,Fuquay Varina,North Carolina,United States,HT +4260,KG7NCV,David A,Waller,Mesa,Arizona,United States, +4279,GM0ROU,Tony,Butcher,Dundee ,,Scotland, +4288,KD9IAQ,Doug,Paquette,Merrillville,Indiana,United States,Doug s Car NX5700 +4307,WB2LMA,Charles N,Lechner,Plano,Texas,United States, +4310,ED3YAH,AMIRED,Repetidors a Montcaro,R 3 I R 95 JN00ET 1 447 Metres,,United Nations,http www fcr cat amired +4317,KC3JCJ,Julio C,Folhadella,Easton,Pennsylvania,United States, +4324,N9VJW,Bill,Jackson,Glendale,Arizona,United States, +4365,KD9IAQ,Doug,Paquette,Merrillville,Indiana,United States,Doug s Base Radio NX700 +4431,K0NL,Gregory N,Banks,Scottsdale,Arizona,United States,FR 6000 +4512,KD9IAQ,Doug,Paquette,Merrillville,Indiana,United States,Doug s Extra Mobile NX700 +4649,JG7IMF,Momoi,Momoi,Miyagino Ku Sendai ,Tohoku,Japan, +4677,AF7M,Gary L,Ashkenazy,Tucson,Arizona,United States, +4921,KD9IAQ,Doug,Paquette,Merrillville,Indiana,United States,Christy s Portable NX210 +4941,KD9IAQ,Doug,Paquette,Merrillville,Indiana,United States,Doug s Portable NX210 +5000,BI7IFF,Lin,Shishen,Guangzhou,Hu Nan Guang Dong Guang Xi,China,Portable +5001,N5QZ,Ryan,Mcafee,Searcy,Arkansas,United States,Kenwood NX 820 +5002,N5QZ,Ryan,Mcafee,Searcy,Arkansas,United States,Kenwood NX 720 +5003,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 820 +5004,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 720 +5005,AC5AV,Larry A,Sicks,Searcy,Arkansas,United States, +5006,AC5AV,Larry A,Sicks,Searcy,Arkansas,United States, +5007,N5LKE,James D,Ferguson,Searcy,Arkansas,United States,Kenwood NX 800 +5008,AF5WN,Mason A,Creager,Cabot,Arkansas,United States,Kenwood NX 700H +5009,KJ5SF,Stanley,Rongey,Searcy,Arkansas,United States,Kenwood NX 800 +5035,PY1FT,Florisval,Tenorio,Rio De Janeiro,Rio De Janeiro,Brazil, +5077,N9EXR,Michael,R smith,North Little Rock,Arkansas,United States,Kenwood 5200 +5100,K5SRS,Michael B,Smith,Fayetteville,Arkansas,United States,NX 5800 Mobile +5101,KC5YQB,WILLIAM P,BLAIR,Fayetteville,Arkansas,United States, +5124,K5DXR,Mark,Sutherland,Siloam Springs,Arkansas,United States,NX320 +5125,AE5OQ,Armstead,Feland,Colorado Springs,Colorado,United States, +5134,AE5OQ,Armstead,Feland,Colorado Springs,Colorado,United States,Kenwood NX 200 +5143,KC5CQW,Damon R,Wascom,Maumelle,Arkansas,United States, +5150,WY6NN,Doug,Wynn,Panorama City,California,United States,NX 300 5300 +5151,KC6HFJ,TAMARA S,WYNN,PANORAMA CITY,California,United States,NX 300 +5170,K5WMZ,Gary D,Partlow,Ward,Arkansas,United States,Kenwood NX 700 +5209,VK2RFI,WICEN NSW INC,HUNTER REGION WICEN,CARDIFF NSW 2285,,Australia,Wicen MMDVM Repeater +5239,K2FM,,William J Lupo A R C ,Landing,New Jersey,United States,William J Lupo A R C +5301,ZL1HN,Brian,Farrell,RAGLAN,North Island 1,New Zealand,icom exdn +5303,ZL3DMH,Douglas Mervyn,Hart,Christchurch,South Island,New Zealand,Icom F6061 +5304,ZL4DE,Daniel,Erickson,Invercargill,South Island,New Zealand,Icom +5305,ZL3DVR,Douglas M,Hart,Christchurch,South Island,New Zealand,Icom +5306,ZL4IND,Daniel,Erickson,Invercargill,South Island,New Zealand,MultiMode Repeater +5307,ZL4HD,Tom,Hardwick,Bluff,South Island,New Zealand, +5308,ZL4BLF,Thomas,Hardwick,Bluff,South Island,New Zealand, +5342,VK3JMA,Mark,Aitken,Hampton Park,Victoria,Australia, +5542,KD9GUK,Rick,Mcallister,Elkhart,Indiana,United States, +5599,W1ZM,Ryan,Nelson,Edgemont,Arkansas,United States,NX 5300 +5637,KO3Q,Malcom,Waring,Shawnee on Delaware,Pennsylvania,United States, +5645,KN4LUK,Marc D,Segal,Port Orange,Florida,United States, +5987,W5ZN,JOEL M,HARRISON SR,JUDSONIA,Arkansas,United States,Kenwood NX 800 +6004,KF5FWE,Mark,Eighmy,Bartlesville,Oklahoma,United States, +6007,CA6JAU,Jose,Uribe,Valdivia,Los Lagos,Chile,MMDVM +6020,KE5WPH,Andrew,Mccullough,Bartlesville,Oklahoma,United States, +6025,BG6WWH,Huijun,Wang,Enshi,He Nan Hu Bei An Hui,China,Kenwood NX348 c +6037,BG6REY,Hong,Ren,Enshi,He Nan Hu Bei An Hui,China,Portable +6038,BG6WQX,Guoxiang,Li,Wuhan,He Nan Hu Bei An Hui,China,Kenwood Nx 340 +6281,K6HP,Ed,Parsons,Murphys,California,United States,HT +6304,NZ6D,David,Griffith,San Diego,California,United States,NX 820 +6344,N6LXA,Geoffrey,Baehr,Menlo Park,California,United States,ZumspotW +6350,KM6IXB,Richard A,Christensen,Oakley,California,United States, +6353,WB5EKU,Donald,Jacob,North Hills,California,United States, +6389,WB6DTB,David L,Young,Oakley,California,United States, +6410,WW6E,Sardxcc,Sierra Amateur Radio Dx And Contest Club,Cameron Park,California,United States,Club Fleet +6412,N6PBC,Bill,Parsons,Pinole,California,United States,NX5300 +6418,N5ICK,Nicholas,Nixon,Rialto,California,United States, +6430,K4GFD,Norman C,Scholer,Greensboro,Florida,United States, +6431,K4GFD,Norman C,Scholer,Greensboro,Florida,United States, +6432,K4GFD,Norman C,Scholer,Greensboro,Florida,United States, +6439,N4NKV,George L,Bast,Tallahassee,Florida,United States, +6514,W8AW,Don V,Miller,Broken Arrow,Oklahoma,United States, +6520,BG0CAB,Chao,Sun,Shayibake Area Uru,Bei Jing,China,Portable +6528,KK6HNG,Adrian,Dinca,Torrance,California,United States, +6553,N4NQY,JB,Edmonds,Evergreen,Virginia,United States, +6564,KC6N,David,Hull,San Diego,California,United States, +6577,BM2GJP,Hyman Fan,Fan Jia Yu,Taipei,Taipei,Taiwan, +6600,EA3IK,Enric,Vargas,Tokyo,,Japan, +6605,AB6UI,William B,Johnson,Torrance,California,United States, +6609,AF6FB,Michael,Rickey,Lake Forest,California,United States,Using YSF2NXDN gateway +6613,K2PZ,Manfred,Lauterborn,Sunnyvale,California,United States, +6622,KJ4KSG,Lemuel,Furman,Bradenton,Florida,United States,First try +6911,WW6P,Dean I,Friedman,Los Angeles,California,United States, +7004,JG7IMF,Momoi,Momoi,Miyagino Ku Sendai ,Tohoku,Japan, +7005,BD7MXN,Wei,Zhang,Chongqing,,China,Portable +7017,BI7KJP,Tran,Ho,Shenzhen,Hu Nan Guang Dong Guang Xi,China,Portable +7018,BH7KCJ,Eric,Chan,Futian Shenzhen,Hu Nan Guang Dong Guang Xi,China,Portable +7046,BG7IPY,Ma,Linhui,Guangzhou,Hu Nan Guang Dong Guang Xi,China,Portable +7101,NR6AM,Frances H,Nievera,San Diego,California,United States, +7111,NR6AM,Frances H,Nievera,San Diego,California,United States, +7112,BI7ISX,Wang,Shaohua,Shenzhen,Hu Nan Guang Dong Guang Xi,China,Portable +7132,KF6S,James R,Valle,West Hills,California,United States,Last 5 of DMR ID +7171,KM9K,KEVIN M,KENNEDY,Bradenton,Florida,United States,km9k hotmail com +7244,KF4TIM,Timothy,Bernard,peoria,Arizona,United States, +7265,AA6KA,Kevin W,Amey,North Highlands,California,United States, +7327,BH7IOY,Li,Jifeng,Guangzhou,Hu Nan Guang Dong Guang Xi,China,Portable +7334,K9NPX,Dan,Moses,Farmer City,Illinois,United States, +7343,KG4OJJ,Jay,Reid,Americus,Georgia,United States,Portable +7432,KD6MDV,Donald T,Tribble,Sacramento,California,United States, +7505,KE2EMS,Matt,McDonald,Ogdensburg,New York,United States,DUAL USE +7518,K4HDM,Mark D,Hamersly,Sarasota,Florida,United States, +7565,N6MIK,Mike,Krueger,Yorba Linda,California,United States, +7666,K9FEH,Chester,Vandergriff,Melrose Park,Illinois,United States, +7724,JA1IPJ,Fumio,Hashimoto,Yokohama 222 0011,Kanto,Japan, +7737,N4NKV,George L,Bast,Tallahassee,Florida,United States, +7782,KJ6ZSP,William F,Lieber,El Cajon,California,United States, +7799,KG4DCX,David S,Clements,Hopewell,Virginia,United States, +7890,W4RSS,Dick,Smith,NEW CASTLE,Indiana,United States, +7916,AK6O,Rod,Ramos,Elk Grove,California,United States, +7925,KA9VYD,Barbara A,Vandergriff,Melrose Park,Illinois,United States, +7982,K9DJN,Douglas J,Nipper,Danville,Illinois,United States,IC F6061 +8003,BD8SN,Sheen,Jianjun,Ke Jin Rd Kunming ,Gui Zhou Chong Qing Si Chuan Yun Nan,China,Portable +8006,JM8IXA,Komatsu,Kaname,Abira cho,Hokkaido,Japan,Other +8018,BD8SGK,Tao,Hu,Kunming Yunnan,Gui Zhou Si Chuan,China,PORTABLE +8028,BH8DHV,Weidong,Chen,Chengdu City Sichuan,Gui Zhou Si Chuan,China,NX 300 +8036,K0GUR,Michael,Gurski,Denver,Colorado,United States, +8048,BH8SLN,Ke,Li,Kunming,Gui Zhou Si Chuan,China,Portable +8059,N0WTS,Bartley W,Grubbs,Lawrenceburg,Indiana,United States, +8115,WB5PJB,Gary,Sutton,Castle Rock,Colorado,United States, +8157,N2PDQ,Dirk,Malsch,Parker,Colorado,United States, +8301,BA7JG,Yan,Jian,Guangzhou,All Others,China,Kenwood NX 800 +8306,K0GUR,Michael,Gurski,Denver,Colorado,United States, +8328,W0RMT,Bud,Talbot,Louisville,Colorado,United States,portable +8344,N7VDR,James,Christian,Fort Collins,Colorado,United States,Portable +9010,KC1DX,Mauro,Abrantes,MIlford,Connecticut,United States, +9174,N8XYM,Michael E,Cremeans,Westerville,Ohio,United States, +9230,N1ID,John,Ciullo,East Haddam,Connecticut,United States, +9262,W2MB,Mark,Bond,Washington,New Jersey,United States, +9266,W0JAY,Jay,Spaulding,Seymour,Connecticut,United States,Real Name Oran Goes by Jay +9267,WA1DDD,Michelle,J Listorti,Seymour,Connecticut,United States, +9268,W0JAY,Jay,Spaulding,Seymour,Connecticut,United States,Reral name Oran Goes By Jay +9310,K6HP,Ed,Parsons,Murphys,California,United States,NX5000 +9371,N1AJW,Alec,Wasserman,Bloomfield,Connecticut,United States, +9511,AC1KV,Dan,Cantil,Ansonia,Connecticut,United States, +9726,WR2M,Bill,Lupo,Landing,New Jersey,United States, +9727,WS2P,,William J Lupo A R C ,Landing,New Jersey,United States,448 675 Repeater +9834,VA7NY,P j ,Van Baggen,Richmond,British Columbia,Canada, +9921,W1RHS,Rick,Swenton,South Dennis,Massachusetts,United States, +10004,N3JSS,Jeffrey,Schoap,Millsboro,Delaware,United States, +10082,N3ROY,Samuel C,Reeves,Wilmington,Delaware,United States, +10094,W4DHW,Dave,Wheeler,Lexington,Virginia,United States,Motorola MMDVN Repeater +10185,K9IU,Indiana University Arc,Indiana University Amateur Radio Club,Bloomington,Indiana,United States,K9IU MMDVM UHF Repeater 444 9000 +10242,AG2NJ,,ATLANTIC COAST UNITED RADIO ASSOC ACURA,LINWOOD,New Jersey,United States, +10310,CE1WMW,Ernesto,Romero,Calama,Antofagasta,Chile,Base +10370,CE1SJJ,Claudio Mauricio,Araya Herrera,Calama,Antofagasta,Chile,Portable +10379,CE8WDB,Rodrigo,Lucero Valenzuela,Punta Arenas,Magallanes,Chile, +11006,KB3CGH,Edwin,Velis,Washington DC,District of Columbia,United States, +11021,KC3JYU,John D,Thomas,Washington,District Of Columbia,United States, +11070,WA6HXG,Ryan W,Mccomb,Hemet,California,United States,Portable +11111,BD2VK,Chen,Mingzhi,An Shan,Hei Long Jiang Ji Lin Liao Ning,China,Portable +11148,N3GAR,Garfield G,Foster,Birdsboro,Pennsylvania,United States,Wires X +11310,KC9LYM,Will,Crocker,Brookhaven,Georgia,United States, +11337,WA4ASI,George C,Hawk,Covington,Georgia,United States, +11485,WA5DKW,James,Dowis,Farmersville,Texas,United States, +11865,K9IU,Indiana University Arc,Indiana University Amateur Radio Club,Bloomington,Indiana,United States,This is for the 147 180 MMDVM Repeater +12002,W4KJP,Kevin,Paus,New Port Richey,Florida,United States, +12003,W4KJP,Kevin,Paus,New Port Richey,Florida,United States, +12005,KD4TWJ,Dean,Groe,Orlando,Florida,United States,Portable IC F4161 +12006,W4MO,Stewart E,Haag,Venice,Florida,United States,NX300 320 +12007,W4MO,Stewart E,Haag,Venice,Florida,United States,NX800 +12010,KD4DWP,Ben,Metzger,Orlando,Florida,United States, +12013,K4NBC,Miguel,Orama,Palm Bay,Florida,United States,Icom F4146DS UHF Portable +12014,K4NBC,Miguel,Orama,Palm Bay,Florida,United States,Kenwood NX200 VHF HT +12015,K4NBC,Miguel,Orama,Palm Bay,Florida,United States,Future UHF Mobile +12016,K4NBC,Miguel,Orama,Palm Bay,Florida,United States,M2 Icom F6061D +12021,W4PJT,Paul,Towell,Tampa,Florida,United States, +12023,KD4NWL,John,Bacon,Holiday,Florida,United States,VHF F3161DS and UHF F4161DT +12045,KJ4SHL,Ryan,Owens,Land O Lakes,Florida,United States, +12050,KM4LTG,Brad Bartlett,Bartlett,Saint Petersburg,Florida,United States, +12064,W4LOV,Mike,Hensley,Cocoa,Florida,United States,Nano Spot +12095,KI4SWB,Mark,Hogan,Melbourne Beach,Florida,United States, +12100,OM8KT,Martin,Baran,Kosice,,Slovak Republic, +12110,KE4GJG,Richard s,Hyde,London,Kentucky,United States,KENWOOD NX300 +12111,KE4GJG,Richard s,Hyde,London,Kentucky,United States,KENWOOD NX320 +12112,KE4GJG,Richard s,Hyde,London,Kentucky,United States,REPEATER MMDVM +12127,W4KDM,Richard,Impson,Port Orange,Florida,United States,Portable NX300 +12135,K3ETS,John E,Keeting,Riverview,Florida,United States, +12136,WA4KWK,John,Garko,Dunedin,Florida,United States,NXDN +12138,N4IRS,Steven S,Zingman,Palm City,Florida,United States, +12173,KC4DEA,Chris,Zingman,Palm City,Florida,United States,DMR ID 3112173 +12200,NB9X,PAUL J,TOTH,SEMINOLE,Florida,United States, +12201,NB9X,PAUL J,TOTH,SEMINOLE,Florida,United States, +12202,NB9X,PAUL J,TOTH,SEMINOLE,Florida,United States, +12203,NB9X,PAUL J,TOTH,SEMINOLE,Florida,United States, +12204,NB9X,PAUL J,TOTH,SEMINOLE,Florida,United States, +12205,N2HUC,Phil,Roberrt,Port St Lucie,Florida,United States,DV4MINI AMBE voice +12208,NB9X,PAUL J,TOTH,SEMINOLE,Florida,United States, +12210,N4APG,William B,Pfost,Nokomis,Florida,United States,NXDN Radio +12211,N4APG,William B,Pfost,Nokomis,Florida,United States,NXDN Radio +12212,N4APG,William B,Pfost,Nokomis,Florida,United States,NXDN Radio +12213,N4APG,William B,Pfost,Nokomis,Florida,United States,NXDN Radio +12214,N4APG,William B,Pfost,Nokomis,Florida,United States,NXDN Radio +12215,WA4ISB,EDWIN P,ALLEN III,SARASOTA,Florida,United States,ED Mobile +12216,WA4ISB,EDWIN P,ALLEN III,SARASOTA,Florida,United States, +12220,N4PK,Paul E,Knupke,Largo,Florida,United States,PAUK K +12221,N4PK,Paul E,Knupke,Largo,Florida,United States, +12222,W4PJT,Paul,Towell,Tampa,Florida,United States, +12223,W4PJT,Paul,Towell,Tampa,Florida,United States, +12224,K4YAZ,THOMAS R,COPLEY,St Petersburg,Florida,United States, +12226,KI4SWY,William,Stillwell,Plant City,Florida,United States, +12228,W4ECZ,Wayne,Peterson,Spring Hill,Florida,United States, +12230,KQ4KX,Richard,Sharp,Winter Haven,Florida,United States,Richard Sharp +12231,KQ4KX,Richard,Sharp,Winter Haven,Florida,United States, +12234,KD4TWJ,Dean,Groe,Orlando,Florida,United States, +12235,N1IC,NICHOLAS J,PALOMBA,Indian Rocks Beach,Florida,United States,Nic +12236,N1IC,NICHOLAS J,PALOMBA,Indian Rocks Beach,Florida,United States, +12239,K4DKK,Chris,Downing,Trinity,Florida,United States,ICOM 4400DS +12240,KR4X,Larry J,Gispert,Tampa,Florida,United States,ICOM F4161DS +12241,KR4X,Larry J,Gispert,Tampa,Florida,United States,ICOM F4161DT +12242,KM4JXP,Peter,Tasker,Woking,Florida,United States, +12245,KD4ACG,Jason,Triolo,Hudson,Florida,United States,Icom Mobile +12246,KD4ACG,Jason,Triolo,Hudson,Florida,United States,Icom Portable +12247,K2MCI,William,Clarkson,Harrington Park,New Jersey,United States, +12250,KE4GYX,David J,Blalock,wauchula,Florida,United States, +12271,KG4YZY,DAVID M,ANDERSON,NEW PORT RICHEY,Florida,United States, +12272,KE4OSL,KIMON J,KOUNGRAS,PALM HARBOR,Florida,United States, +12273,KE4OSL,KIMON J,KOUNGRAS,PALM HARBOR,Florida,United States, +12275,W8OJ,Danny R,Hurst,Punta Gorda,Florida,United States, +12282,KA9ZRZ,Mike T,Beers,Orlando,Florida,United States,Sunny Orlando Florida +12299,KW4YC,Bernd,Goetter,Naples,Florida,United States, +12300,KB9RKM,DAVID A,TSANG 297,Riverview,Florida,United States, +12320,N2HBX,Larry,Monroe,Orlando,Florida,United States,Mobile +12326,NX4Y,David,Krass,Land O Lakes,Florida,United States, +12345,JM8IXA,Komatsu,Kaname,Abira cho,Hokkaido,Japan,Main Use +12350,KA1IJA,Norman,Breed,Green Cove Springs,Florida,United States,Mobile Icom +12374,KF4I,Thomas,Scott,Palm Coast,Florida,United States,Base +12375,KF4I,Thomas,Scott,Palm Coast,Florida,United States,Mobile +12388,K4CBN,Gregory,George,Lakeland,Florida,United States, +12478,KM4ECQ,Ryan J,Haynie,Avon Park,Florida,United States, +12502,W8OJ,Danny R,Hurst,Punta Gorda,Florida,United States, +12523,KM4JVE,Ana L,Rivera Groe,Orlando,Florida,United States,IC F4161 +12524,KC1ACI,Craig,,N Oxford,Massachusetts,United States,MMDVM Repeater +12526,K4WZV,Robert,Bretzman,Brooksville,Florida,United States, +12572,KP4OO,Carlos J,Acevedo,Carolina,San Juan,Puerto Rico, +12577,N2DLX,Rich,Dunajewski,East Windsor,New Jersey,United States,NX 5800 +12594,K4WZV,Robert,Bretzman,Brooksville,Florida,United States,2nd radio +12597,WA2FAA,,James Sutkoff,Spring Hill,Florida,United States, +12602,WW3A,Reed,Krenn,Glenwood,Florida,United States, +12603,KM4OOD,Guillermo,Malave Castro,Royal Palm Beach,Florida,United States, +12604,K4CBN,Gregory,George,Lakeland,Florida,United States, +12605,K4CBN,Gregory,George,Lakeland,Florida,United States, +12606,K4CBN,Gregory,George,Lakeland,Florida,United States, +12607,K4CBN,Gregory,George,Lakeland,Florida,United States, +12608,K4CBN,Gregory,George,Lakeland,Florida,United States, +12611,W4ZTH,Zach,Hale,Inverness,Florida,United States,NX 300 +12613,W4ECZ,Wayne,Peterson,Spring Hill,Florida,United States, +12621,W4ZTH,Zach,Hale,Inverness,Florida,United States,NX 800 +12638,KA9JYO,Carlos,Santini,Ft Myers,Florida,United States, +12652,N4HYK,Dock,Edwards,Saint Petersburg,Florida,United States,DV4mini V201 77 FW on Pi3 +12666,KI4SWY,William,Stillwell,Plant City,Florida,United States, All Radios +12691,KE3WDW,Samuel C,Scholer,Clermont,Florida,United States,Sam +12712,KB4OVL,James E,Allen,Vero Beach,Florida,United States,ZumSpot YSF2NXDN +12742,KA9ZRZ,Mike T,Beers,Orlando,Florida,United States,Sunny Orlando Florida +12751,KD1EH,Tom,Mogavero,Boynton Beach,Florida,United States, +12767,KM9Q,Scott,Bernard,Saint Petersburg,Florida,United States, +12780,KC4YUA,Brett J,Butler,Safety Harbor,Florida,United States, +12836,KD4NFS,Michael,Vandevender,North Fort Meyers,Florida,United States, +12869,WD9FTZ,Gregory,Drezdzon,Akron,Ohio,United States, +12870,KE8DPC,Cynthia,Thompson,Wadsworth,Ohio,United States, +12874,KE4INM,James E,Woodson,Bradenton,Florida,United States, +12900,WX4RCF,Ryan,French,Tampa,Florida,United States,NX5300 AMATEUR +12969,W4WWJ,James,Keller,Dunedin,Florida,United States, +13001,JE3HCZ,Yoshiharu,Todo,Omihachiman,Kinki,Japan, +13032,W1KFR,Bill,Carreira,Kingsland,Georgia,United States,CCS7 number +13038,KE4QDC,Ferrell,Brown,Cumming,Georgia,United States, +13043,N4IRR,Michael A,Zingman,Marietta,Georgia,United States,DMR 3113043 +13054,K4QHR,Pete,Dulac,Kingsland,Georgia,United States, +13089,K8WF,Bill,Frankowski,Lithia Springs,Georgia,United States, +13105,W7QO,Alan,Adamson,Buford,Georgia,United States, +13106,W7QO,Alan,Adamson,Buford,Georgia,United States, +13107,W7QO,Alan,Adamson,Buford,Georgia,United States, +13109,K0OQL,Joel,Stacy,Omaha,Nebraska,United States,Rpt ID +13121,W4CML,CHARLES M,LINK II,Atlanta,Georgia,United States, +13122,W4CML,CHARLES M,LINK II,Atlanta,Georgia,United States, +13125,KD4APP,Donald B,Woodward,Ball Ground,Georgia,United States,NX300 +13126,KD4APP,Donald B,Woodward,Ball Ground,Georgia,United States,F6061D +13127,KD4APP,Donald B,Woodward,Ball Ground,Georgia,United States,NX200 +13131,W5JR,Mike,Roden,Alpharetta,Georgia,United States, +13132,W5JR,Mike,Roden,Alpharetta,Georgia,United States, +13185,KM4DJO,Mark,D Fenley,Winder,Georgia,United States, +13400,AB4MM,Marvin A,Mealer,Tunnel Hill,Georgia,United States, +13550,NA4ME,Charles E,Smith,Ringgold,Georgia,United States, +13574,KK4GXP,John I,Brazel,Waycross,Georgia,United States, +13605,KC4YAP,Paul A,Gallager,Milledgeville,Georgia,United States,PART OF THE FALL LINE NETWORK +13613,W9QO,Mike,Gee,Braselton,Georgia,United States, +13658,WA4ASI,George C,Hawk,Covington,Georgia,United States, +13716,KI4WXS,Stephen,Koone,Charlotte,North Carolina,United States,www charlottedstar org +13763,NC1L,Eugene Moore,Moore,Matthews,North Carolina,United States,www charlottedstar org +13815,KG4BKO,Bill,Collins,Vidalia,Georgia,United States,nx320 +13900,W8DIG,,Central Ohio Digital Interconnect Group,Columbus,Ohio,United States,MMDVM Bridge +13901,W8DIG,,Central Ohio Digital Interconnect Group,Columbus,Ohio,United States,UHF +13902,W8DIG,,Central Ohio Digital Interconnect Group,Columbus,Ohio,United States,VHF +13903,W8KHW,Kevin,Walsh,Columbus,Ohio,United States,UHF NX 5300 +13904,W8KHW,Kevin,Walsh,Columbus,Ohio,United States,NX 210G +14003,AE4TC,Scott,Galloway,Montpelier,Virginia,United States, +14020,K4XXX,Ed,Lemley,London,Kentucky,United States,NX5300 +14021,K4XXX,Ed,Lemley,London,Kentucky,United States,NX5200 +14688,AA4CB,Christopher G,Bloxsom,Ridge Manor,Florida,United States, +14795,NG4P,Kevin L,Kimbro,Cottondale,Florida,United States, +14873,N5ALF,John R,Allen,Austin,Texas,United States, +15001,N5QZ,Ryan,Mcafee,Searcy,Arkansas,United States,Kenwood NX 800H Vehicle 1 +15002,N5QZ,Ryan,Mcafee,Searcy,Arkansas,United States,Kenwood NX 700 Vehicle 1 +15003,N5QZ,Ryan,Mcafee,Searcy,Arkansas,United States,NX 800 Vehicle 2 +15004,N5QZ,Ryan,Mcafee,Searcy,Arkansas,United States,Kenwood NX 700 Vehicle 2 +15005,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 800 Vehicle 1 +15006,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 700 Vehicle 1 +15007,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 800 Vehicle 2 +15008,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 700 Vehicle 2 +15009,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 800 Vehicle 3 +15010,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 700 Vehicle 3 +15011,N5QT,Dawn,Gray,Searcy,Arkansas,United States,Kenwood NX 800 +15012,AC5AV,Larry A,Sicks,Searcy,Arkansas,United States,Kenwood NX 800 +15013,AC5AV,Larry A,Sicks,Searcy,Arkansas,United States,Kenwood NX 700 +15014,N5QT,Dawn,Gray,Searcy,Arkansas,United States,Kenwood NX 700 +15015,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Motorcycle Mobile +15016,KG5KS,Kenneth S,Thompson,Tuckerman,Arkansas,United States,NX 700HK +15017,KG5KS,Kenneth S,Thompson,Tuckerman,Arkansas,United States,NX 800HK +15018,N5QS,Roger W,Gray,Searcy,Arkansas,United States,ATV Mobile +15019,N5QS,Roger W,Gray,Searcy,Arkansas,United States,ATV Mobile +15020,WA8UBL,Allen W,Herrick,Beebe,Arkansas,United States,NX 700 +15021,KD5HRT,Heath,Taylor,Mcrae,Arkansas,United States,NX 800 +15022,WA8UBL,Allen W,Herrick,Beebe,Arkansas,United States,NX 800 +15023,N5ZA,JOE D,BELEW,BEEBE,Arkansas,United States,NX 700 +15024,KF5TPF,Ryan B,Nelson,Edgemont,Arkansas,United States,NX 700 +15025,KE5YZP,Miranda B,Schwarck,Plano,Texas,United States,NX 700 +15026,AF5OD,Landon D,McCord,Searcy,Arkansas,United States, +15027,KB5RFF,SCOTT B,GRAY,SEARCY,Arkansas,United States,Kenwood NX 800 +16032,N7ISP,Adam R,Crippen,Post Falls,Idaho,United States, +16033,N7ISP,Adam R,Crippen,Post Falls,Idaho,United States,ZumSpot +16304,NZ6D,David,Griffith,San Diego,California,United States,NX 820 +16315,W9CR,Bryan,Fields,St Pete Beach,Florida,United States,7373 in Octal +16801,OA6AHJ,Carlos,Mendoza,Ilo Peru,Moquequa,Peru, +17002,KC9GMX,Steven R,Hamilton,Geff,Illinois,United States,Base F6121D +17004,KC9GMX,Steven R,Hamilton,Geff,Illinois,United States,F6061D +17005,KC9NPJ,Jarrett A,Weaver,Johnsonville,Illinois,United States,F6121D +17006,KC9GMX,Steven R,Hamilton,Geff,Illinois,United States,F4161DS +17007,KC9NPJ,Jarrett A,Weaver,Johnsonville,Illinois,United States,F4231DS +17008,KC9RHH,Jesse A,Weiss,Noble,Illinois,United States,F4101D +17009,KC9PHK,Michael,Dickerson,Flora,Illinois,United States,F4061DS +17011,N9BRG,Daniel,Berg,Blaine,Tennessee,United States,kenwood nx800k2 +17026,WA9MNF,Ed,Healy,LOMBARD,Illinois,United States, +17082,N2JRW,Johnny,Wright,Chicago,Illinois,United States, +17105,KC9OZA,Ryan,Runyon,Noble,Illinois,United States,4161DS AND 6061D +17239,N9PBD,Greg,Horine,O Fallon,Illinois,United States, +17339,W9DJF,Daniel,Fritchie,oblong,Illinois,United States,On nano spot using ysftonxdn +17340,K9DPM,David,Maria,Mahomet,Illinois,United States, +17366,W9SUS,Taylor,Leroy,CHICAGO,Illinois,United States,W9SUS ARRL NET +17373,W4OA,Shelly F,Mitchell,Opelika,Alabama,United States, +17433,KC9ZLL,Andy R,Burdette,Springfield,Illinois,United States,NXDN +17476,N9DRF,George,Axtmann,Wilmette,Illinois,United States, +17477,N9KO,Calvin,Kutemeier,Elk Grove Village,Illinois,United States, +17571,KB9TZQ,James L,Riley,Ramsey,Illinois,United States, +17743,N9VHL,Christopher N,Wewetzer,Bethalto,Illinois,United States, +17770,KC9BOZ,Robert B,Lewis,Pocahontas,Illinois,United States, +17855,AG6RN,Demian W,Ross,Sacramento,California,United States,NX 210 +17862,WD9JEN,Mark S,Simon,Arlington Heights,Illinois,United States, +17982,K8DJN,RUTH E,DEUTSCH,HUBBARD,Ohio,United States,Icom IC F6061D +18001,JM8IXA,Komatsu,Kaname,Abira cho,Hokkaido,Japan,Other +18005,W9AMT,Tony,Tolbert,Indianapolis,Indiana,United States, +18016,K9NDU,David,Spence,Kendallville,Indiana,United States,Mobile +18017,K9NDU,David,Spence,Kendallville,Indiana,United States,Portable +18027,K9NDU,David,Spence,Kendallville,Indiana,United States,Mobile +18031,KJ9Q,Gerald D,Quebbeman,Austin,Indiana,United States,Austin IN 47102 +18081,NF9K,William D,Atkinson,Noblesville,Indiana,United States, +18091,NF9K,William D,Atkinson,Noblesville,Indiana,United States, +18314,K9JTV,Jeff,Snodgrass,Martinsville,Indiana,United States, +18333,KB9OFZ,Lola A,Nicholson,Bedford,Indiana,United States, +18334,KB9OFZ,Lola A,Nicholson,Bedford,Indiana,United States,MMDVM Hotspot +18363,WB9TLH,Dwight,Hazen,Kirksville,Indiana,United States, +18365,NA9VY,Chris,Gilbert,New Palestine,Indiana,United States, +18366,N9UMJ,Rick,Nicholson,Bedford,Indiana,United States, +18379,K9ATR,Milton,Gibson,South Bend,Indiana,United States, +18435,K0ITP,Charles E,Poch,Firestone,Colorado,United States,HOTSPOT +18480,N9SIU,Robert,Lagrange,Greenwood,Indiana,United States, +18854,KC9MEC,Gene,Kaiser,South Bend,Indiana,United States, +18888,BH7MTZ,Yang,Feng,Shantou Guangdong,Hu Nan Guang Dong Guang Xi,China, +19189,NG0Q,Randy,Macku,Blairstown,Iowa,United States, +19355,KE0AGD,Melissa,Macku,Blairstown,Iowa,United States, +19518,KC0YHU,Craig A,Rose,Urbandale,Iowa,United States, +19568,KD0NEZ,Barbara E,Rose,Urbandale,Iowa,United States, +20001,VO1GME,Geoff,M Ewing,Torbay,Newfoundland,Canada, +20002,VE1AIC,Ronald,Mackay,Cornwall,Prince Edward Island,Canada, +20003,VE1AIC,Ronald,Mackay,Cornwall,Prince Edward Island,Canada,VHF +20008,VE1AIC,Ronald,Mackay,Cornwall,Prince Edward Island,Canada,VHF +20009,VO1EI,Matthew W,Gillie,Torbay,Newfoundland,Canada, +20010,V31SH,Steven,Harp,Corozal,Corozal District,Belize,v31sh +20016,HJ3BUA,Andres A ,Buendia Ucros,Bogota,Cundinamarca,Colombia, +20028,K0XM,Chuck,Kraly,Overland Park,Kansas,United States, +20034,VO1BBQ,Stephen,Mccarthy,St John S,Newfoundland,Canada, +20047,VA7NMD,JPPhaneuf,,Chilliwack,British Columbia,Canada,MD380 UHF +20105,VE3TEJ,Jim,Thomas,London,Ontario,Canada, +20201,VK2NN,Peter Panagiotis ,Garoufalis,Canterbury Sydney,New South Wales,Australia, +20240,KE0NTT,Kevin S,Hood,Lawrence,Kansas,United States, +20296,N7JYS,Eric M,Harrison,Russell,Kansas,United States, +20341,MW1COE,Robert,Alford,Gas,Kansas,United States, +21001,K4XXX,Ed,Lemley,London,Kentucky,United States,NX5000 series radios +21003,K4KTR,Kyle,Robinson,New Haven,Kentucky,United States, +21007,W1RHS,Rick,Swenton,South Dennis,Massachusetts,United States,Rick +21012,K4XPR,James,Blue,Louisville,Kentucky,United States,MMDVM Repeater +21014,K2BUI,Eric J,Nihill,East Greenwich,Rhode Island,United States,Eric +21029,VE1RMJ,Robert,Mannette,Oxford,Nova Scotia,Canada, +21304,K4XXX,Ed,Lemley,London,Kentucky,United States,Work NX300 +21480,EA8EE,JOSE MANUEL,MARTINEZ,35007 LAS PALMAS,,Canary Islands,IL27GU +21701,KV4S,Russell,Thomas,Chelsea,Alabama,United States, +22007,LU8EUT,Roberto,Velasco,Olivos,Buenos Aires,Argentina Republic, +22008,N5LCP,Laurent,Partimbene,Youngsville,Louisiana,United States,Cajun Country +22039,AF5XP,Christopher W,Fuselier,Sulphur,Louisiana,United States, +22040,AG5LG,STEVE R,HEALD,Arlington,Texas,United States, +22052,K5LPD,Oren,Haydel,Carencro,Louisiana,United States,3122052 CC7 +22092,VE2STE,Stephane,Levesque,Granby,Quebec,Canada,3022092 +22100,N5UXT,Angelo,Glorioso,New Orleans,Louisiana,United States,mmdvm +22103,KI6FQV,Randy J,Leipziger,El Dorado Hills,California,United States,NXDN ID +22120,AE5BZ,Michael A,Kikuchi,Metairie,Louisiana,United States, +22121,AE5BZ,Michael A,Kikuchi,Metairie,Louisiana,United States,Kenwood NX 5800 K2 +22260,VE2TBU,Sylvain,Gingues,Cookshire Eaton,Quebec,Canada, +23000,G4KLX,JS,NAYLOR,Cromford MATLOCK,,England,NX5300 MMDVM +23007,N1DOT,Kenneth,Grimard,Turner,Maine,United States,Portable +23070,VA3GHI,Bogdan,Ghitescu,Toronto,Ontario,Canada,CCS7 1023070 +23079,N1WJO,Robert,Gould,Casco,Maine,United States, +23083,VA3TWT,Gordon,Claridge,Blenheim,Ontario,Canada, +23096,N0UKM,Kevin,Badger,Bangor,Maine,United States, +23142,W1KMC,Kevin M,Carman,Bangor,Maine,United States,For Hotspots +23143,W1KMC,Kevin M,Carman,Bangor,Maine,United States,For Repeaters +23167,VA3JNT,Jose,Talens,Ottawa,Ontario,Canada, +23197,K1DAE,Deborah A,Ellis,Bangor,Maine,United States,DMR ID 3123197 +23236,VE3KNI,Terry,Stitch,Chatham,Ontario,Canada, +23277,VA3EZT,David,Lamb,Tavistock,Ontario,Canada, +23286,KC3BVM,Brian,Stankovich,Saylorsburg,Pennsylvania,United States, +23360,VA3MET,Rob,Metallo,Maple,Ontario,Canada, +23520,GB3CF,Geoff,Dover,leicester,,England,TX 145 600 RX 145 000 +23524,G0TJH,IAN,FOORD,NEWHAVEN,,England, +23542,PU2LRZ,RUBENS,ZOLOTUJIN,Artur Nogueira,Sao Paulo,Brazil, +23931,VE3IQL,Terrance Cady,Basom,Ancaster,Ontario,Canada, +23932,VE3IQL,Terrance Cady,Basom,Ancaster,Ontario,Canada,Hotspot +24000,VE3TLT,Trevor Lee,Taylor,Straffordville,Ontario,Canada,Mobile radio +24001,KD4RJN,Jamie,Stapleton,Ashland,Virginia,United States, +24002,KK4RER,Jennifer,Stapleton,Ashland,Virginia,United States, +24020,K4XXX,Ed,Lemley,London,Kentucky,United States,NX5800 +24021,K4XXX,Ed,Lemley,London,Kentucky,United States,NX5700 +25001,N5QZ,Ryan,Mcafee,Searcy,Arkansas,United States,Kenwood NX 300 +25002,N5QZ,Ryan,Mcafee,Searcy,Arkansas,United States,Kenwood NX 200 +25003,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 300 +25004,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 200 +25005,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 320 +25006,N5QS,Roger W,Gray,Searcy,Arkansas,United States,Kenwood NX 340U +25007,N5QT,Dawn,Gray,Searcy,Arkansas,United States,Kenwood NX 300 +25008,N5QT,Dawn,Gray,Searcy,Arkansas,United States,Kenwood NX 200 +25009,AC5AV,Larry A,Sicks,Searcy,Arkansas,United States,Kenwood NX 300 +25010,KD5OOW,Tom S,McGee,Searcy,Arkansas,United States,Kenwood NX 300 +25011,W5ZN,JOEL M,HARRISON SR,JUDSONIA,Arkansas,United States,Kenwood NX 300 +25012,KD5HRT,Heath,Taylor,Mcrae,Arkansas,United States,Kenwood NX 300 +25013,KK5WA,Darin M,Dykes,Beebe,Arkansas,United States,Kenwood NX 320 +25014,N5LKE,James D,Ferguson,Searcy,Arkansas,United States,Kenwood NX 5300 +25015,KJ5ORD,John,Ord,Searcy,Arkansas,United States,Kenwood NX 300 +25016,KB5RFF,SCOTT B,GRAY,SEARCY,Arkansas,United States,Kenwood NX 300 +25017,KB5ZUH,Justin T,Williams,SEARCY,Arkansas,United States,Kenwood NX 320 +25018,KB5ZUH,Justin T,Williams,SEARCY,Arkansas,United States,Kenwood NX 340 +25019,KB5ZUH,Justin T,Williams,SEARCY,Arkansas,United States,Kenwood NX 340 +25020,KB5ZUH,Justin T,Williams,SEARCY,Arkansas,United States,Kenwood NX 320 +25021,AF5OD,Landon D,McCord,Searcy,Arkansas,United States, +25022,KE5YZP,Miranda B,Schwarck,Plano,Texas,United States,Icom +25023,KE5YZP,Miranda B,Schwarck,Plano,Texas,United States,Icom +25024,KG5CHM,Colt R,Boyd,Judsonia,Arkansas,United States,Kenwood NX 300 +25025,KJ5ORD,John,Ord,Searcy,Arkansas,United States,Kenwood NX xxx VHF +25026,WA8UBL,Allen W,Herrick,Beebe,Arkansas,United States,Kenwood NX 320 +25027,KF5TPF,Ryan B,Nelson,Edgemont,Arkansas,United States,Kenwood NX 200 +25028,WA8UBL,Allen W,Herrick,Beebe,Arkansas,United States,Kenwood NX 220 +25029,KF5WHX,James D,Ferguson III,Searcy,Arkansas,United States,Kenwood NX 320 +25030,AC5AV,Larry A,Sicks,Searcy,Arkansas,United States, +25031,KJ5SF,Stanley,Rongey,Searcy,Arkansas,United States,Kenwood NX 340 +25032,KC5DFH,KIRK T,WILLIAMS,SEARCY,Arkansas,United States,Kenwood NX 340 +25033,AF5OD,Landon D,McCord,Searcy,Arkansas,United States,Icom F4161DS +25034,KF5TPF,Ryan B,Nelson,Edgemont,Arkansas,United States,ICOM 4161 +25035,KG5BMB,Glenda M,McCord,Searcy,Arkansas,United States,Icom F4161DS +25039,KC1JET,James E,Tynan,Rehoboth,Massachusetts,United States,Base +25068,N1QD,Joe,Harris,Belmont,Massachusetts,United States, +25069,N1COP,Robert F,Woodbury Jr,Halifax,Massachusetts,United States, +25070,WD1L,John O,Nelson,Brockton,Massachusetts,United States, +25079,W1RZO,Robert,,Pittsfield,Massachusetts,United States, +25080,N1FZH,Stephen,Flood,Pittsfield,Massachusetts,United States,MMDVM +25100,JF2LHC,Toshimoto,Yamaguchi,Anpachi Gun,Tokai,Japan,YSF2NXDN FT70D +25101,KD5BVX,Mark,Cartwright,Batesville,Arkansas,United States,Kenwood NX 210 +25125,N1TI,Tim,Smith,Mattapoisett,Massachusetts,United States, +25144,W1WCF,WALTER C,FITZGERALD,RAYNHAM,Massachusetts,United States, +25158,W1MVP,Michael,Pasquale,Shrewsbury,Massachusetts,United States, +25203,W1MSG,Craig,Gagner,North Oxford,Massachusetts,United States,NX320 +25215,W1MSG,Craig,Gagner,North Oxford,Massachusetts,United States,VHF +25221,N0XIA,James,Deuel,Orlando,Florida,United States,Kenwood Mobile and Portable +25222,KE4SDC,Ronnie,Foster,Sanford,Florida,United States,Portable NX300 +25242,N1GJB,Gregory,,Medford,Massachusetts,United States,NX 340 +25243,W1RZO,Robert,,Pittsfield,Massachusetts,United States,FN32JK +25246,WG1U,Kenneth D,Campbell,Assonet,Massachusetts,United States, +25333,W1AKN,John T,Buckley,Middleboro,Massachusetts,United States,Mobile +25390,KC1JET,James E,Tynan,Rehoboth,Massachusetts,United States, +25444,W1TAV,Steven W,Belcher,East Bridgewater,Massachusetts,United States, +25541,W1ATD,,South Shore Digital Radio Group,Hanson,Massachusetts,United States,145 390 MHz +25555,WA1MNQ,MICHAEL R,VALENTE SR,Brockton,Massachusetts,United States, +25582,N1KXJ,Raymond,Wall,E Bridgewater,Massachusetts,United States,Port +25585,N1AVA,Kenneth J,Howland,South Dartmouth,Massachusetts,United States, +25700,NN1D,Antone,Souza III,Swansea,Massachusetts,United States, +25740,WG1U,Kenneth D,Campbell,Assonet,Massachusetts,United States, +25743,WG1U,Kenneth D,Campbell,Assonet,Massachusetts,United States, +25746,N1OTY,John,Frye,Taunton,Massachusetts,United States, +25777,W1BON,Stuart W,Studley,Norton,Massachusetts,United States, +25830,KB1CHU,Stephen,Black,Kingston,Massachusetts,United States, +25863,N1ZZN,Jeff,Lehmann,Hanson,Massachusetts,United States, +25874,KB1KVD,Jason E,Legrow,Brockton,Massachusetts,United States,Icom Mob Port +25888,K1WGU,ROBERT A,BASS,RANDOLPH,Massachusetts,United States, +25889,AB1CQ,Gary,Cumiskey,Bridgewater,Massachusetts,United States, +25900,N1ZZR,MATTHEW R,CONNORS,BRIDGEWATER,Massachusetts,United States,mobile +25901,N1ZZR,MATTHEW R,CONNORS,BRIDGEWATER,Massachusetts,United States, +25957,KC1HO,Stephen HO ,Johnson,Plymouth,Massachusetts,United States,Steve or HO +25958,NS1N,Karl,Johnson,Scituate,Massachusetts,United States, +26003,CU3AT,Francisco,Gerardo Godinho da Silva,9700 136 ANGRA DO HEROISMO,,Azores,Azors +26008,W2GLD,Jerry,Dubzak,Pinckney,Michigan,United States, +26010,W8CED,Colleen,Dubzak,Pinckney,Michigan,United States, +26051,VA6RBC,Rommel B,Cantos,Edmonton,Alberta,Canada, +26100,VA6RBC,Rommel B,Cantos,Edmonton,Alberta,Canada, +26105,VE6JNT,Jose N Jr ,Talens,Edmonton,Alberta,Canada, +26118,KC8USA,Frederick J,Fritz,Prudenville,Michigan,United States, +26205,N8GY,Thomas,Eagle,Brooklyn,Michigan,United States,Icom IC F6061 D +26379,AD4UU,Dave,Livesay,Westland,Michigan,United States, +26483,KB8IWO,Vernon,Lawson,Beulah,Michigan,United States,DMR ID 1126483 +26491,KD8OFE,Dale,Ball,St Albans,West Virginia,United States,Novi MI +26921,AB8XL,Paul R,Zuhlke,Metamora,Michigan,United States, +26981,N1UFO,Gabriel O,Guzman,Brooklyn,New York,United States, +27101,KI4SWB,Mark,Hogan,Melbourne Beach,Florida,United States,Icom Portable +27102,KP4OO,Carlos J,Acevedo,Carolina,San Juan,Puerto Rico,Icom Portable +27103,KI4HZP,Russell D,Wolfgram,Malabar,Florida,United States, +27104,KM4TFS,Kenneth J,Hallenbeck,Melbourne,Florida,United States, +27105,KM4LPP,Thaddeus J,Misilo,Palm Bay,Florida,United States, +27111,K4BQN,Edwin,Cortes,Palm Bay,Florida,United States, +27115,N4KLB,Kevin L,Brinsmaid,Melbourne,Florida,United States, +27127,N9PBD,Greg,Horine,O Fallon,Illinois,United States, +27128,N9PBD,Greg,Horine,O Fallon,Illinois,United States, +27201,KI4SWB,Mark,Hogan,Melbourne Beach,Florida,United States,Icom Mobile +27202,KP4OO,Carlos J,Acevedo,Carolina,San Juan,Puerto Rico,Icom Mobile +27237,VA7UN,Fred,Schrod,Kelowna,British Columbia,Canada,NXDN Radio DMR3027237 +27277,VE7EQN,Christopher,Walter,Kelowna,British Columbia,Canada,NXDN Radio DMR3027277 +27320,KD0SGX,Mike,Eisenzimmer,Farmington,Minnesota,United States, +28001,K3KRS,Ryan M,Simpson,Willoughby,Ohio,United States, +28011,NR5T,Jack,Patterson,NATCHEZ,Mississippi,United States, +28017,KB5SAT,Herbert L,Cooley,Hurley,Mississippi,United States, +28027,AA5SG,Jeffery S,Grantham,Ellisville,Mississippi,United States, +28028,W5NRU,Jeffery,Networked Radio User,Ellisville,Mississippi,United States,Club callsign AA5SG trustee +29170,KC9RAT,Francis,Lubinski,Bayside,Wisconsin,United States, +29401,OA4CLM,Giovanni,Collado,Lima,Lima,Peru, +29999,KB8JNM,Michael P,Mays,East Liverpool,Ohio,United States,Gateway Bridge +30310,CE3AA,Radio,Club De Chile,Santiago,Reg Metr De Santiago,Chile, +30505,KG6MQE,Jim,Robinson,hamilton,Montana,United States, +30571,WX4RCF,Ryan,French,Tampa,Florida,United States,NX5300 WORK +31009,W4SFA,Scott,Carmichael,Montgomery,Alabama,United States, +31018,KK4JXD,Jaychym A,Bryant,Palm Harbor,Florida,United States, +31036,K0OQL,Joel,Stacy,Omaha,Nebraska,United States,Unit 1 +31042,N9VJW,Bill,Jackson,Glendale,Arizona,United States,Mobile +31043,N4IRR,Michael A,Zingman,Marietta,Georgia,United States,DMR ID 3113043 +31045,KJ4SHL,Ryan,Owens,Land O Lakes,Florida,United States,Primary ID +31094,KB1O,Jean,B Richeme,Stamford,Connecticut,United States, +31096,K0OQL,Joel,Stacy,Omaha,Nebraska,United States,Unit 2 +31098,WX9KVH,Kyle,Van Hoogen,Grand Chute,Wisconsin,United States, +31099,KT4ROY,Doug,Gooden,Troy,Alabama,United States,W4DBG Trustee +31117,K4QHR,Pete,Dulac,Kingsland,Georgia,United States, +31146,KD2KWD,Michael,Santamaria,Brandon,Florida,United States,NXDN Radios +31164,N2NUO,Mark,Robinson,Waverly,New York,United States, +31181,KC9TKJ,Christopher,Morgan,New Albany,Indiana,United States,NXDN +31199,KC9TKJ,Christopher,Morgan,New Albany,Indiana,United States,NXDN +31210,WB4IVB,Henry,Hamblin,Corbin,Kentucky,United States, +31220,K5OZ,David E,Hartley,Slidell,Louisiana,United States, +31221,W5SLA,,OZONE AMATEUR RADIO CLUB,Slidell,Louisiana,United States, +31241,N3TUK,Louis,Velis,Hyattsville,Maryland,United States, +31250,KD7LMN,Rich,Schmitt,Opp,Alabama,United States,18 Wheel Mobile +31300,WX9KVH,Kyle,Van Hoogen,Grand Chute,Wisconsin,United States, +31301,WX9KVH,Kyle,Van Hoogen,Grand Chute,Wisconsin,United States, +31304,K4XXX,Ed,Lemley,London,Kentucky,United States,Work Home Base NX800 +31332,KN1W,Luis,Aguilar,Londonderry,New Hampshire,United States, +31337,K4OSS,Charles W,Ross,Livingston,Texas,United States, +31364,KE2EMS,Matt,McDonald,Ogdensburg,New York,United States,VHF PI +31415,PY1EGG,Carlos R M ,Levy,Rio de Janeiro,Rio de Janeiro,Brazil, +31421,N3GAR,Garfield G,Foster,Birdsboro,Pennsylvania,United States, +31460,WV8CW,Charles C,Wiant,Miller,South Dakota,United States, +31480,WA5VYK,Joe,Detiveaux,Odessa,Texas,United States,wa5vyk gmail com +31482,W5LND,Lloyd,Duck,Big Spring,Texas,United States, +31575,W4RAM,Alberto,Mesa Reina,West Palm Beach,Florida,United States,http www qrz com db W4RAM +31624,KN4MER,Sebastien,Perrin,Lexington,Kentucky,United States,73 z +31669,N3MEL,Glenn R,Allison,Downingtown,Pennsylvania,United States, +31672,MW0MWZ,Andy,Taylor,Blackwood,All Regions,Wales, +31900,N3FE,Corey,Dean,Mansfield,Pennsylvania,United States,NXDN and CapPlus +31970,WD6STR,Ed,Sierra Amateur Radio Club,Murphys,California,United States,Club +32266,KG4DCX,David S,Clements,Hopewell,Virginia,United States, +33000,N1PA,Paul,Anzalone,Merrimac,New Hampshire,United States,NEW HAMPSHIRE REPEATER +33001,N1PA,Paul,Anzalone,Merrimac,New Hampshire,United States, +33002,N1PA,Paul,Anzalone,Merrimac,New Hampshire,United States, +33104,K1CF,Wayne,Dailey,Concord,New Hampshire,United States, +33333,N2XDC,Luiz A,Pontes,Mount Sinai,New York,United States,43159 +33334,KY1U,Greg,Soucy,North Walpole,New Hampshire,United States, +33633,KK4ZVL,Suriyan,Gantiya,Melbourne,Florida,United States,US callsign +34001,N2WNS,Bill,Hausmann,Boonton,New Jersey,United States,Portable +34002,N2WNS,Bill,Hausmann,Boonton,New Jersey,United States,Base +34044,N2ICV,Michael,W Andrescavage Sr,Blackwood,New Jersey,United States,None +34062,WR2M,Bill,Lupo,Landing,New Jersey,United States, +34064,N1IRL,Rick,Fiorey,Budd Lake,New Jersey,United States, +34086,KC2VRJ,Paul M,Nannery,Fords,New Jersey,United States, +34094,W2SJW,Scott J,Wilson,Washington,New Jersey,United States, +34239,W4ITG,Mark,A Herman,Somerset,New Jersey,United States, +34538,N2VYT,Patrick E,Farcon,Fords,New Jersey,United States, +34739,KC2VYI,Mark D,Sacharoff,West Milford,New Jersey,United States, +35259,G6PAP,Stephen M,Hale,BURNTWOOD,,England, +35467,GB7GD,Nov Holder Keeper ,JIM GM0MYQ,ABERDEEN,,Scotland,145 6875 TX 145 0875 RX +35772,KB3FHS,Lorin B,Bedford,Towanda,Pennsylvania,United States, +36001,NW2A,Chris,Curtis,Galway,New York,United States,NX300 +36002,KC2VOB,Asad,Khan,New York,New York,United States,NX 5800 +36003,KC2VOB,Asad,Khan,New York,New York,United States,NX 300GK +36134,N2SRO,Mike,Mollet,Pitman,New Jersey,United States,Portable +36147,W2LGB,Lawrence,Berkowitz,Thiells,New York,United States,ICOM +36149,W2LGB,Lawrence,Berkowitz,Thiells,New York,United States,KENWOOD +36241,AE2JM,Josh,Markoff,Newburgh,New York,United States, +36244,K2COP,Gregory R,Felter,Amsterdam,New York,United States,Greg +36251,KB2VQS,Michael T,Maloy,Schenectady,New York,United States, +36364,KA2Y,Carlton A,Ellis,Webster,New York,United States, +36374,WB2LMV,Glenn L Roeser,Roeser,Napanoch,New York,United States, +36549,N2ADK,Gordie,Fox,Munnsville,New York,United States, +36558,AI2M,Dan,Porter,Rochester,New York,United States, +36602,N2LEN,Leonard,Signoretti,Catskill,New York,United States, +36712,KA2NDW,Mike,Dewaele,Clyde,New York,United States,Icom m obile +36794,KC2VER,Anthony,Hart,Auburn,New York,United States,ICOM 6061 +36874,W2ACC,David J,Mette,Waterloo,New York,United States,Icom 6061d +36965,KD2LGM,Miles Persing,Persing Jr,Romulus,New York,United States,ICOM 6061 +37001,KA4YMY,Stephen,Koone,Gastonia,North Carolina,United States,NX320 +37009,KA4YMY,Stephen,Koone,Gastonia,North Carolina,United States, +37010,KA4YMY,Stephen,Koone,Gastonia,North Carolina,United States, +37036,KH2PM,Chris,Mckendry,Raleigh,North Carolina,United States,FM05 +37072,W4DCA,David,Arndt,Dobson,North Carolina,United States, +37076,N1FTE,Keith,Page,Cary,North Carolina,United States, +37202,KD4MC,Michael,Callam,Four Oaks,North Carolina,United States, +37212,K4RSG,Shawn,Goodin,Harrisburg,North Carolina,United States, +37309,KW4PD,David A,Nichols,Oakboro,North Carolina,United States, +37364,KI4UDZ,Ray,Sipe,Richfield,North Carolina,United States, +37400,9Z4RG,Ravindranath,Goswami,Port Of Spain,Woodbrook,Trinidad and Tobago,robby 9Z4RG com +37401,9Y4DG,Dev,Gosine,San Fernando,All Regions,Trinidad and Tobago, +37402,9Y4DG,Dev,Gosine,San Fernando,All Regions,Trinidad and Tobago, +37403,9Y4SH,Steve,Headley,St James,None,Trinidad and Tobago, +37404,9Y4FIFA,FIFA WorldCup 2018 Special Call,Trinidad and Tobago Amateur Radio Society,Port of Spain Trinidad Tobago,,Trinidad and Tobago,FIFA World Cup 2018 Special Event Station +37480,N5EMT,Bruce,Lantz,Asheboro,North Carolina,United States, +37595,KM4NNO,Juan Carlos,Perez De Castro,Flower Mound,Texas,United States,Portable +37643,KJ4KEU,Eric,D Broyles,asheville,North Carolina,United States, +37775,N1UJ,Ted,Root,Holly Springs,North Carolina,United States,NX 320 +37857,KA4EBB,Chad L,Maxwell,Concord,North Carolina,United States, +37946,K4RSG,Shawn,Goodin,Harrisburg,North Carolina,United States, +38888,BH7PUE,Wu,Haian,Guangzhou City Guang,Hu Nan Guang Dong Guang Xi,China,Mobile +39000,KC8YQL,William,L Drummer,Continental,Ohio,United States,443 8875 repeater +39001,KC8YQL,William,L Drummer,Continental,Ohio,United States,NXDN 1 +39002,KC8YQL,William,L Drummer,Continental,Ohio,United States,NXDN 2 +39003,KC8YQL,William,L Drummer,Continental,Ohio,United States,NXDN 3 +39004,KC8YQL,William,L Drummer,Continental,Ohio,United States,NXDN 4 +39041,N8NJ,Larry,Weaver,Northwood,Ohio,United States, +39083,KD8VIQ,Gary,Limbert,Parma,Ohio,United States,Port 1 +39084,KD8VIQ,Gary,Limbert,Parma,Ohio,United States,Portable 2 +39086,KC8YQL,William,L Drummer,Continental,Ohio,United States,NXDN 820 +39087,AB8RG,Gregory,Santaromita,Dayton,Ohio,United States,DMRID CCS7 3139087 +39114,WY8E,Matt,Harris,Columbus,Ohio,United States, +39133,N8JSW,Joshua S,Witsberger,St Clairsville,Ohio,United States, +39239,W8CTC,Chris,Campton,Hillsboro,Ohio,United States, +39257,KD8VIQ,Gary,Limbert,Parma,Ohio,United States,Mobile 1 +39258,KD8VIQ,Gary,Limbert,Parma,Ohio,United States,Mobile 2 +39273,KE8BTV,James,Hutching,Newcomerstown,Ohio,United States, +39390,KB8KOJ,Sterrick,William,Centerville,Ohio,United States, +39446,KE8BUO,Dave,Southside Digital Group,Dayton,Ohio,United States, +39516,AC8WS,Joel,Retholtz,Sylvania,Ohio,United States,EN81DP +39521,N8OFP,Delbert T,La Bo,Rittman,Ohio,United States, +39557,N8QQ,Bradford A,Mcconahay,Cincinnati,Ohio,United States,n8qq com +39640,NU8H,David,Sharp,Cincinnati,Ohio,United States, +39828,W8EJC,Randal L,Tuttle,Van Wert,Ohio,United States, +39863,W8FLH,Adam,Liette,Greenville,Ohio,United States, +39925,KD8VIG,Ryan S,Bowman,Beavercreek,Ohio,United States, +40001,VU3KAZ,Krishna,Kumar,Bangalore,Karnataka,India, +40006,TG8AHQ,Carlos,Miralbes,Quetzaltenango,All Regions,Guatemala, +40024,N5YEI,Jeffrey T,Dalrymple,Jay,Oklahoma,United States,NX 5800 Mobile +40073,WX5OU,John,Simon,Broken Arrow,Oklahoma,United States, +40076,WX5OU,John,Simon,Broken Arrow,Oklahoma,United States, +40124,N5YEI,Jeffrey T,Dalrymple,Jay,Oklahoma,United States,NX 5300 Portable +40208,KM4SGI,Kentuckiana D Star,Amateur Radio Club,Louisville,Kentucky,United States, +40284,VR2XNG,Dawood,Ng,Quarry Bay,Hong Kong,China,YSF cross mode +40285,VR2UNG,Farid,Ng,North Point,Hong Kong,China, +41019,EA1CRF,Pedro,Gonzalez del Valle,Ely,,England, +41047,PY1USK,Fernando,Souto,Rio De Janeiro,Rio De Janeiro,Brazil, +41100,XE1F,Juan Carlos,Perez,Mexico City,Mexico City,Mexico,Portable N +41158,AC0WN,Julie A,Mcgrew,Florence,Oregon,United States,None +41173,XE1ODN,Edgar,Duran,Mexico City,Mexico City,Mexico, +41186,KB7VIS,Kirk H,Johnson,Springfield,Oregon,United States, +41279,KC7DMF,Mark A,Johnston,Culver,Oregon,United States, +41334,N7GYL,Chris E,Sorensen,Florence,Oregon,United States, +41421,PY1YB,IVAN,SILVA,SAN GONZALO RIO DE JANEIRO,,Brazil, +42005,N3RPV,Chris,Kelly,Allentown,Pennsylvania,United States, +42019,XE2SI,Juan,Tellez Amezcua,Tijuana,Baja California Norte,Mexico, +42025,XE2MBE,Eliud,Bueno Moreno,Durango,Durango,Mexico, +42029,PU2PYC,Jefferson,Grilo,Cotia,Sao Paulo,Brazil, +42033,N3TPE,Timothy,Eichelman,Glenolden,Pennsylvania,United States, +42049,WA3ADI,Vincent,Buono,Havertown,Pennsylvania,United States, +42052,WA3UVV,Cory,Sickles,Uniontown,Pennsylvania,United States, +42058,N3BAH,Abraham,Smith,Latrobe,Pennsylvania,United States, +42065,KO3Q,Malcom,Waring,Shawnee on Delaware,Pennsylvania,United States, +42077,N3UJV,Paul,Petruska,Hatboro,Pennsylvania,United States, +42125,AA3XN,John,Ernandez,Chalfont,Pennsylvania,United States, +42136,KC4YOZ,Ken,Johnson,Newtown Square,Pennsylvania,United States, +42237,M0GLJ,Adrian,Craig,NOTTINGHAM,,England, +42261,M0VVA,Andrew G,Amos,Goffs Oak Hertfordshire,,England, +42278,KB3KBD,Daniel S,Mackelvey,Bally,Pennsylvania,United States, +42295,N3CNJ,David J,Hahn,Delta,Pennsylvania,United States, +42323,W3WGS,William G,Smith,Gilbertsville,Pennsylvania,United States, +42331,G0NMY,Mark,Longson,Stoke on Trent Staffordshire ,,England, +42344,G4FDL,Max,France,St Helens,,England, +42345,N3XCC,Michael S,Zimmerman,Boswell,Pennsylvania,United States, +42434,M3PAJ,Pete,Jones,Sheffield,,England, +42460,M0VSE,Phil,Taylor,Leicester,,England, +42473,KB3AWQ,John,Springman,Williamsport,Pennsylvania,United States,KB3AWQ com +42576,N8BLK,Art,Clemons,Philadelphia,Pennsylvania,United States, +42665,M6NBP,Norman,Williams,Brighton Hove City,All Regions,England, +42723,N3GBJ,Christopher D,Ruhl,Collingdale,Pennsylvania,United States, +42817,N3CNJ,David J,Hahn,Delta,Pennsylvania,United States,Downtown Delta Pa +42950,KE8HTA,Debra A,Sickles,Uniontown,Pennsylvania,United States, +43006,EA3IK,Enric,Vargas,Tokyo,,Japan,Kenwood +43009,VU2UUU,Kaustav,Saha,Gurgaon,Haryana,India,ML88nk +43037,EA3FRB,Jaume,Compte,TERRASSA E 08222,,St Martin,Terrassa +43751,N4IRS,Steven S,Zingman,Palm City,Florida,United States, +44001,K2BUI,Eric J,Nihill,East Greenwich,Rhode Island,United States,K2BUI ERIC +44002,K2BUI,Eric J,Nihill,East Greenwich,Rhode Island,United States,K2BUI ERIC +44007,W2DAN,David A,Neal,Tiverton,Rhode Island,United States,NX700 +44009,KA1MXL,Kevin T,Halton,Warwick,Rhode Island,United States,NX300 +44010,N1JBC,Jed,Barton,Barrington,Rhode Island,United States,BARRINGTON +44022,KA1MXL,Kevin T,Halton,Warwick,Rhode Island,United States,Nx300 +44026,N1GMB,Glenn,Butterfield,West Warwick,Rhode Island,United States, +44037,N1BSB,Bradley S,Brown,Woonsocket,Rhode Island,United States, +44298,N1JBC,Jed,Barton,Barrington,Rhode Island,United States, +44444,W7EFS,Tony,Ross,Upper Kittitas County,Washington,United States, +44510,G7HJX,David,Raybould,Burntwood Staffordshire ,,England,IO92AQ +44701,2E0NEQ,Jono,Clarke,Wallsend,,England, +44983,2E1GDF,SHAUN,OKEEFE,Derbyshire,,England, +45026,MM0RKN,Carrie A ,Welsh,Lanarkshire,,Scotland, +45065,M0GIG,David,Wharlley,Broadstairs Kent,,England, +45678,BG6TWT,Tim,Yang,Wuhan,He Nan Hu Bei An Hui,China,Kenwood Nx300 +46016,EB6AOK,Enric,M,S Miquel IBIZA,,Balearic Islands, +46023,WV8CW,Charles C,Wiant,Miller,South Dakota,United States, +46032,EB6AOK,Enric,M,S Miquel IBIZA,,Balearic Islands, +46046,BH8SXD,Peng,Wang,Kunming,All Others,China,MMDVM Repeater +46049,BH8SXD,Peng,Wang,Kunming,All Others,China, +46600,BV5OO,Yaojun,Hsieh,Yonghe Dist New Tai,Taipei,Taiwan, +46699,BM2GJP,Hyman Fan,Fan Jia Yu,Taipei,Taipei,Taiwan, +46833,BH8TXK,Xiaofeng,Yang,Chuxiong,Gui Zhou Si Chuan,China,UHV NX32 +47001,K1LNX,Stephen,Brown,Knoxville,Tennessee,United States, +47002,PU7LSB,Lucivaldo Sousa,De Brito,Mossoro Rio Grande,Caera,Brazil,43159 +47004,JG7IMF,Momoi,Momoi,Miyagino Ku Sendai ,Tohoku,Japan, +47005,W4EKG,Kevin,Hinkle,Crossville,Tennessee,United States,NX200 MMDVM +47012,KF4NUZ,Edgar,Sadler,Chattanooga,Tennessee,United States, +47032,K9OJ,Robbie,Robinette,Chuckey,Tennessee,United States, +47431,KC2QLX,Aron,Ezagui,Brooklyn,New York,United States,NX5300 +47432,KC2QLX,Aron,Ezagui,Brooklyn,New York,United States,NX800 +47686,KG4LHC,Christopher M,Sutton,Newport,Tennessee,United States, +47900,W8BUG,Garret S,Scott,Knoxville,Tennessee,United States, +48009,WA5VYK,Joe,Detiveaux,Odessa,Texas,United States,wa5vyk gmail com +48024,N5VAE,Aaron,Elekes,Las Vegas,Nevada,United States,NXDN +48047,EA8URE,Seccion Comarcal,U R E CHASNA,La Camella Arona,,Canary Islands,TENERIFE +48119,K5MFP,Michael F,Payne,Frisco,Texas,United States,TYT MD 380 +48164,N5JLR,Joe,Rodriguez,Los Fresnos,Texas,United States,NX 300K +48184,N5OVP,Steven,Lhamon,Livingston,Texas,United States, +48239,N5YEY,Mark A,De Paepe,Kilgore,Texas,United States, +48242,KD5DFB,Michael,Hebert,Cypress,Texas,United States, +48326,KG5HTH,Philip,Flinn,Morgan Mill,Texas,United States, +48432,N9BAV,Daniel,Wiley,Fort Worth,Texas,United States, +48444,WB8ZFL,Bob,Edmonston,Pearland,Texas,United States, +48453,KB5RAB,Russell A,Biggs,Conroe,Texas,United States, +48501,NA5AA,Lester R,Diefenbach,Azle,Texas,United States,UHF NX 800 +48541,W9DXM,Jason K,Kingsbury,Mckinney,Texas,United States, +48564,K4TXN,Ryan E,Gills,Huntsville,Texas,United States, +48866,K5IMO,Larry G,Moyer,Plano,Texas,United States,ICOM IC F6061D +48904,W1ZOT,Philip,Williams,Euless,Texas,United States, +49014,WA7KMF,Bill,Neville,Logan,Utah,United States, +49101,WX7Y,RICHARD B,MILLS,CASTLEDALE,Utah,United States,WX7y 1 Hand Held 1 +49102,WX7Y,RICHARD B,MILLS,CASTLEDALE,Utah,United States,WX7Y 2 Hand held +49104,WX7Y,RICHARD B,MILLS,CASTLEDALE,Utah,United States,WX7Y 4 Mobile +49106,WX7Y,RICHARD B,MILLS,CASTLEDALE,Utah,United States,WX7Y 6 Mobile +49999,KB8JNM,Michael P,Mays,East Liverpool,Ohio,United States,Gateway Bridge +50210,VK2RFI,WICEN NSW INC,HUNTER REGION WICEN,CARDIFF NSW 2285,,Australia,MMDVM Repeater +50501,VK2NN,Peter Panagiotis ,Garoufalis,Canterbury Sydney,New South Wales,Australia, +51013,N3IJW,Sean,Faith,Alexandria,Virginia,United States, +51172,M0GLJ,Adrian,Craig,NOTTINGHAM,,England, +51216,KB3CGI,Jaime,Velis,Alexandria,Virginia,United States, +51237,G1JPV,Tony T,C ,Frodsham,,England,Using NXDN through Pi Star +51266,G4MLB,Roger,Padmore,Nelson Lancashire,,England, +51276,G8VIQ,JOHN,BAXTER,BIRMINGHAM B36,,England, +51469,G0BVZ,Vic,Simpson,North West,,England, +51818,G4VXE,TIM,KIRBY,Oxfordshire,,England, +51825,K4DUR,Otis,Durham,Lynchburg,Virginia,United States, +52001,HS2YTY,Jaturong,Viriyadamrong,Muangchon,Chon Buri,Thailand, +52009,HS5YSU,Suriyan,Gantiya,Sansai,Chiang mai,Thailand, +52018,VK2UMC,Michael,Cheng,Sydney,New South Wales,Australia, +52028,VK2UMC,Michael,Cheng,Sydney,New South Wales,Australia, +52030,HS3LIQ,Wiwat,DTDXA,Nakhonratchasima,Nakhon Ratchasima,Thailand,Mueang Korat +52094,VK2YHX,Spero,Davias,Newcastle,New South Wales,Australia,DMR ID 5052094 +52096,VK2JDS,David,Scott,Bathurst,New South Wales,Australia, +52098,HS8JCV,Mr Supparerk,Saikaew,Hatyai,Nakhon,Thailand,Kenwood with MMDVM Hotspot +52099,HS8AFA,Anan,Phonlarak,Phunphin,Surat Thani,Thailand, +52110,VK2HK,Ian,Tulley,Wyee,New South Wales,Australia,NX 5300 NX 5800 +52111,VK2IPT,Ian,Tulley,WYEE,New South Wales,Australia,NX 5300 5800 +52114,VK2GG,Dan,Joyce,Dora Creek,New South Wales,Australia,Kenwod 340U +52117,G1SCQ,KM,KENT,Heacham KINGS LYNN,,England, +52118,VK2GP,Colin,Garven,Toronto,New South Wales,Australia, +52119,VK2YF,Frederick,Jacob Messemaker,Toronto,New South Wales,Australia, +52120,VK2GG,Dan,Joyce,Dora Creek,New South Wales,Australia,Kenwood 340U Icom 4161 +52121,2E0SIP,Matthew,Harrold,Watford,,England, +52122,VK2KXX,Colin,Garven,Toronto,New South Wales,Australia, +52245,VK2AMV,Lindsay,Harvey,Parkes,New South Wales,Australia,Via MMDVM +52277,VK2FD,Lindsay,Harvey,Parkes,New South Wales,Australia,Via MMDVM +52342,VA3WIK,Rick,Reemeyer,HAMILTON,Ontario,Canada, +52375,M0IEI,Pedro,Gonzalez del Valle,Ely Cambridgeshire,,England, +52428,VK2BFC,Frank,Scott,North Albury,New South Wales,Australia, +52439,G0FVX,Bert,Barnes,Barton under Needwood,,England, +52481,VK2YMU,Robert,,Balldale,New South Wales,Australia, +52499,VK2PKD,Paul,Dixon,Blue Haven Nsw,New South Wales,Australia, +52549,VK2GPT,Glenn,Tomkins,Bathurst Nsw,New South Wales,Australia,Hotspot +52675,2E1GW,Gregory R,Wellington,London,All Regions,England, +52762,G7HJX,David,Raybould,Burntwood Staffordshire ,,England, +52778,K2SRT,Alexander,Stewart,Budd Lake,New Jersey,United States, +52852,2E0FEI,William Bill ,Darvill,Northampton,,England, +52853,G6MJQ,ADRIAN T,PEAKE,LEICESTER,,England, +52879,M1DNS,Andrew, ,Cornwall S W U K,,England,SW UK +52914,2E0TPS,Mat,Stace,London,,England, +52999,HS2YTY,Jaturong,Viriyadamrong,Muangchon,Chon Buri,Thailand, +53000,KD6VPH,Alex,Szuski,Tumwater,Washington,United States,Alex KD6VPH +53002,NF6C,Gregory,Krantz,Orting,Washington,United States, +53003,NF6C,Gregory,Krantz,Orting,Washington,United States,Mobile Radio +53042,VK3JMA,Mark,Aitken,Hampton Park,Victoria,Australia, +53048,KE0CO,Brian A,Holman,Burien,Washington,United States, +53055,VK3AS,Andy,Squires,Horsham,Victoria,Australia, +53062,VK3KAY,Douglas,Kay,Dimboola,Victoria,Australia, +53093,VK3AS,Andy,Squires,Horsham,Victoria,Australia,F6061D +53123,VK3JMA,Mark,Aitken,Hampton Park,Victoria,Australia, +53235,N7LNX,Steven A,Jackson,Seattle,Washington,United States, +53242,WB7NNF,Charles H,Vyverberg,Spokane,Washington,United States,DN17HO +53252,VA3MCX,Michel,Chartrand,Kapuskasing,Ontario,Canada, +53289,VK3GY,Nigel,Bryer,Warragul,Victoria,Australia,NXDN +53401,WD4KAV,Joseph D,Burnham,Puyallup,Washington,United States,MD 380 and Pi Star Hotspot +53482,VA3CZK,Jiri,Samal,Scarborough,Ontario,Canada, +53501,KH2MM,Jochen,Althoff,Dededo,GU,Guam,NX 320 +53578,KC7QDO,Bruce D,Horish,Auburn,Washington,United States, +54001,DW4CHZ,Charlie,Apodaca,Naga City,Bicol Region,Philippines, +54005,GM0MRJ,Maxis Robert,Johnston,Glenrothes Fife ,,Scotland, +54035,VK4TUX,Adrian, ,Laidley Heights,Queensland,Australia,MMDVM REpeater +54045,VK4NSP,Shaun,Stapleton,Rockhampton,Queensland,Australia, +54049,GM4AUP,Ian,Suart,NORTH LANARKSHIRE,,Scotland, +54050,2M0PMR,Ally,Graham,Pathhead,,Scotland, +54072,VK4RM,Roy,Moore,sarina,Queensland,Australia, +54073,MM0DXE,Andrew,Ireland,Fife,,Scotland, +54277,MM0BUH,NIGEL,SMITH,Banff Aberdeenshire ,,Scotland, +54335,GM7KBK,Ernie,Pratt,Aberdeen,,Scotland, +55003,MI0AAZ,JOHN,ANDERSON,COLERAINE County Londonderry,,Northern Ireland,Keeper of GB7KA Brandmeister multimode repeater +55022,N9OIG,Kevin,Drissel,Union Grove,Wisconsin,United States, +55045,GI4FZD,Paul,Menown,Belfast,,Northern Ireland, +55053,WX9KVH,Kyle,Van Hoogen,Grand Chute,Wisconsin,United States, +55063,WX9KVH,Kyle,Van Hoogen,Grand Chute,Wisconsin,United States, +55067,N9KRG,Jake,Litwin,Appleton,Wisconsin,United States, +55100,N9FAV,Tim,Byers,Milwaukee,Wisconsin,United States, +55101,N9FAV,Tim,Byers,Milwaukee,Wisconsin,United States, +55102,N9FAV,Tim,Byers,Milwaukee,Wisconsin,United States, +55103,N9FAV,Tim,Byers,Milwaukee,Wisconsin,United States, +55105,N9FAV,Tim,Byers,Milwaukee,Wisconsin,United States, +55155,N9UPC,John J,Kruk,Baldwin,Wisconsin,United States, +55156,N9UPC,John J,Kruk,Baldwin,Wisconsin,United States, +55195,N9PMR,Richard J,Waedekin,Mequon,Wisconsin,United States,MMDVM +55214,GI4OHH,Derrick,cox,NORTHERN IRELAND,,Northern Ireland, +55288,W9TJP,Thomas J,Pachner,Mequon,Wisconsin,United States, +55555,K1BOY,Jaturong,Viriyadamrong,San Francisco,California,United States, +55700,WB9HKE,RICHARD W,STRAUSS,MILWAUKEE,Wisconsin,United States, +55704,WB9HKE,RICHARD W,STRAUSS,MILWAUKEE,Wisconsin,United States, +57000,VE3SP,And,Van,Toronto,Ontario,Canada,Mobile +57001,VE3BRA,Bowmanville,Amateur Radio Club,Bowmanville,Ontario,Canada,NX 5300K6 +57002,VE3HTB,David John,Borland,Scarborough,Ontario,Canada,handheld +57003,VE3OKZ,Janusz,Zawierucha,Oakville On,Ontario,Canada,handheld +57004,VE3CCD,Curtis,Davis,Scarborough,Ontario,Canada,handheld +57005,VE3NBI,Anoop K,Sofat,Markham,Ontario,Canada,handheld +57006,VE3JLU,Sherwin Leo,Johnson,Toronto,Ontario,Canada,handheld +57007,VA3RQ,Jon,Rorke,Oakville,Ontario,Canada,handheld +57008,VA3OGB,Randolph Peter,Munro,TORONTO,Ontario,Canada,handheld +57009,VA3MK,Markku Steven,Koskinen,Georgetown,Ontario,Canada,handheld +57010,VA3MK,Markku Steven,Koskinen,Georgetown,Ontario,Canada,mobile +57011,VA3WZW,Andre,Van,North York,Ontario,Canada,Mobile +57012,VA3WZW,Andre,Van,North York,Ontario,Canada,Handheld +57013,VA3AGV,Andr,VA3AGV,Toronto,Ontario,Canada,mobile +57014,VE3BWP,Brian,Pietrzyk,Caledon,Ontario,Canada,handheld +57015,VE3HY,Morris Zalik,Levy,TORONTO,Ontario,Canada,handheld +57018,VE3RZR,Richard,Chan,Toronto,Ontario,Canada,handheld +57019,VE3AEP,Domenic,Narducci,TORONTO,Ontario,Canada,mobile +57020,VA3PEO,Adrian,Pouris,Mississauga,Ontario,Canada,handheld +57021,VA3WJO,Walter,Olechny,Woodbridge,Ontario,Canada,handheld +57022,VE3FKN,Tomas,Roeder,Stoney Creek,Ontario,Canada,handheld +57023,VE3IPS,John,Leonardelli,Vaughan,Ontario,Canada,handheld +57024,VA3CQA,Brian,Hart,Scarborough,Ontario,Canada,handheld +57025,VA3PAD,Andrew,Lee,Scarborough,Ontario,Canada,mobile +57026,VA3PAD,Andrew,Lee,Scarborough,Ontario,Canada,handheld +57027,VA3VAD,Arpad,Vadasz,Toronto,Ontario,Canada,handheld +57028,VA3KY,Shelly,Melodick,Thornhill,Ontario,Canada,mobile +57029,VA3KY,Shelly,Melodick,Thornhill,Ontario,Canada,handheld +57030,VE3KFQ,Doug,Hodgson,Toronto,Ontario,Canada,mobile +57031,VE3KFQ,Doug,Hodgson,Toronto,Ontario,Canada,handheld +57032,VE3AEP,Domenic,Narducci,TORONTO,Ontario,Canada,handheld +57033,VE3DJZ,Huey,Salmon,Hamilton,Ontario,Canada,mobile +57034,VE3DJZ,Huey,Salmon,Hamilton,Ontario,Canada,handheld +57035,VA3RQ,Jon,Rorke,Oakville,Ontario,Canada,Mobile +57036,VE3RNK,Rick,Reemeyer,Hamilton,Ontario,Canada,Base +57037,VE3TTO,Gary,Notto,Hamilton,Ontario,Canada,Base +57038,VA3BL,John,Mckay,Oakville,Ontario,Canada,Mobile +57039,VA3BL,John,Mckay,Oakville,Ontario,Canada,Portable +57040,VE3DXT,Derek,Gale,Hamilton,Ontario,Canada,Mobile +57041,VA3EZT,David,Lamb,Tavistock,Ontario,Canada,Portable +57042,VA3EZT,David,Lamb,Tavistock,Ontario,Canada,Mobile +57043,VE3WA,James Alan,Webb,St Catharines,Ontario,Canada,Mobile +57044,VE3RNK,Rick,Reemeyer,Hamilton,Ontario,Canada,Mobile +57045,VE3FLK,Dan,Shack,London,Ontario,Canada,Mobile +57046,VE3FLK,Dan,Shack,London,Ontario,Canada,Portable +57047,VA3JHO,James,Harris,Bowmanville,Ontario,Canada,Mobile +57048,VA3JHO,James,Harris,Bowmanville,Ontario,Canada,handheld +57050,VE3RTT,Tulino,Rod,mississauga,Ontario,Canada,Handheld +57051,VE3RTT,Tulino,Rod,mississauga,Ontario,Canada,Mobile +57057,VK7HSE,Scott,Evans,Kingston,Tasmania,Australia,IC F4161DS +57068,VA3ADN,Martin,Mcculloch,Caledon,Ontario,Canada,Portable +57074,VK7HSE,Scott,Evans,Kingston,Tasmania,Australia,IC F4161DS +57079,VA3ADN,Martin,Mcculloch,Caledon,Ontario,Canada,Mobile +57086,VK7HSE,Scott,Evans,Kingston,Tasmania,Australia,IC F4161DS +57089,VE3DSL,Donald,Mckay,Embro,Ontario,Canada, +57090,VE3MJM,Donald,Mckay,EMBRO,Ontario,Canada, +57091,VA3MJM,Mari jo,Mckay,Embro,Ontario,Canada, +57092,VE3NEJ,Terry Toolman ,Taylor,Kitchener,Ontario,Canada, +57094,VE3FM,Terry Lee,Taylor,Kitchener,Ontario,Canada, +57174,VE3PPO,George, ,Tillsonburg,Ontario,Canada, +57177,VE3PPO,George, ,Tillsonburg,Ontario,Canada,146 3625 hotspot +57178,VE3PPO,George, ,Tillsonburg,Ontario,Canada,444 575 MMDVM Repeater +57179,VE3TTT,Sort Inc,C O James T Spicer,London,Ontario,Canada, +57190,W4ILJ,Doug,Wickman,Melbourne,Florida,United States,NXDN +57482,VA3CZK,Jiri,Samal,Scarborough,Ontario,Canada, +57490,VE3GS,Alejandro,Quiroz S ,South Bruce Peninsul,Ontario,Canada,PORT +57500,VE3GS,Alejandro,Quiroz S ,South Bruce Peninsul,Ontario,Canada,MOBILE +57561,KG4GEM,Russell L,Wilson,Jacksonville,Florida,United States,HT +57584,WA4EMN,Eric,Nisenfeld,Sun City Center,Florida,United States, +58001,VA3RQ,Jon,Rorke,Oakville,Ontario,Canada,mmdvm rptr +58002,VA3RQ,Jon,Rorke,Oakville,Ontario,Canada,FCP +58003,VE3UHM,Charles S,Doubrough,ORILLIA,Ontario,Canada, +58004,VA3WAJ,James Alan,Webb,ST CATHARINES,Ontario,Canada, +58005,VE3WIK,Rick,Reemeyer,HAMILTON,Ontario,Canada, +58006,VE3RXR,Allan Campbell,Boyd,LITTLE CURRENT,Ontario,Canada, +58007,N5AMD,Ben A,Fogt,San Antonio,Texas,United States,sadigitalradio com +58008,VE3SNM,VE3SNM Repeater Group ,,NORTH YORK,Ontario,Canada, +58045,WE5D,Kermit G,Pritchett,Kountze,Texas,United States, +58057,K5MAP,Michael A,Pate,Spring,Texas,United States,NX 5300 +59031,W4EBM,,Golden Star Amateur Radio Club,Fayetteville,North Carolina,United States,Nano Spot +59240,K2GC,Mike,Maynard,Williamson,New York,United States, +59999,BH2RCP,Pengfei,Zhao,Benxi,Hei Long Jiang Ji Lin Liao Ning,China,NX820G E +60001,YS3VE,Louis,Velis,San Miguel,All Regions,El Salvador, +60164,KD8LDE,Aron J,Katz,Cleveland,Ohio,United States, +61004,BO2AB,Lin,Jini,Taipei,Taipei,Taiwan, +61031,BV5AC,Lee,Yeh Ho,Changhua Tw,Central Taiwan,Taiwan, +61041,K6HP,Ed,Parsons,Murphys,California,United States,NX 5300 +61078,DW4CHZ,Charlie,Apodaca,Naga City,Bicol Region,Philippines, +61111,GW1JFV,R,Brooks,nr Haverfordwest Pembrokeshire,,Wales,73 +61121,WW6Y,Arturo H,Pineda,Riverside,California,United States, +61122,W3NLE,Christopher M,Dailing,North East,Maryland,United States, +61163,KK5H,Tim Holland,Holland,Huntsville,Alabama,United States, +61231,N2DUP,Chuck,Gysi,Aledo,Illinois,United States, +61475,N1IRL,Rick,Fiorey,Budd Lake,New Jersey,United States, +61702,K1ST,Steve,Tolf,Dennis,Massachusetts,United States, +62010,KE2EMS,Matt,McDonald,Ogdensburg,New York,United States, +62011,KE2EMS,Matt,McDonald,Ogdensburg,New York,United States,MOBILES +62040,KG5TRV,Wilson,Little,Frisco,Texas,United States, +62062,F4BWG,Oliver,Langlois,Irvine,California,United States, +62800,W5RSC,Robert S,Carr,Crawfordville,Florida,United States, +63890,WB6DTB,David L,Young,Oakley,California,United States, +64001,JJ1BOE,Dominique,Flamme,Tokyo,Kanto,Japan, +65065,KN4GXG,Eric J,Smith,Spring Hill,Florida,United States, +65114,FM1HN,Julien,Tijus,Gros Morne,Fort de France,Martinique, +65200,KD8JGN,Adam C,Collard,Eaton Rapids,Michigan,United States, +65509,KC9JIH,Jason L,Kutche,Huron,Indiana,United States, +65510,KC9DDP,Retha L,Kutche,Mitchell,Indiana,United States,Mitchell IN 47446 +65511,DW4CHZ,Charlie,Apodaca,Naga City,Bicol Region,Philippines, +65512,K9DTM,Johnny,Fils,Lexington,Kentucky,United States, +65513,K9DMD,JEA,K9DMD,Lexington,Kentucky,United States, +65514,EA8AJC,Miguel,Llombet Redondo,Playa Paraiso Adeje S C De Tenerife,TF,Canary Islands, +65515,JA1NCN,Yasumune,Hayashi,Osaka,Kinki,Japan, +65517,N9LYA,Jerome M,Kutche,Mitchell,Indiana,United States,Mitchell IN 47446 +65518,M6WZZ,Andrew Craig,Myers,Wakefield,,England, +65519,HH2MJF,HH2MJF Relais,Repeater,Port au Prince,Ouest,Haiti,qrz com db HH2MJF +6,LX1MS,,,,,, +10,CT2BXN,,,,,, +11,EA3HSL,,,,,, +14,F1ZTC,,,,,, +15,EA3EIZ,,,,,,Spain +16,EA3EG,,,,,,Spain +18,EA3ES,,,,,,Spain +19,EA3HVF,,,,,,Spain +27,EA2BKH,,,,,, +31,SA7SVR,,,,,, +32,SV1CDR,,,,,,UHF +44,EA4CZR,,,,,,ZuluRadio +72,F5BCB,,,,,, +75,EA5IHI,,,,,, +84,DL6FZ,,,,,, +101,SY1BRU,,,,,, +204,SM0YXI,,,,,, +407,E74OF,,,,,, +477,IW7CQN,,,,,,NXDN +613,DG1JP,,,,,,NXDN +654,F5FID,,,,,,NXDN +657,DO6DF,,,,,,NXDN +675,EA7IYR,,,,,,NXDN +691,IT9UUT,,,,,,Salvo Ispica +704,IK6FBY,,,,,,NXDN +730,IV3BVK,,,,,,NXDN +776,IZ5IOF,,,,,,NXDN +824,EA8OA,,,,,,NXDN +904,EA7JTR,,,,,,NXDN +909,EA1HG,,,,,,NXDN +912,MM6ZHC,,,,,,NXDN +927,EA7JCL,,,,,,NXDN +932,CX1DB,,,,,,NXDN +938,EA7JCL,,,,,,NXDN +964,PD1AEU,,,,,,NXDN +974,IZ5IOM,,,,,,NXDN +991,IZ5LZP,,,,,,NXDN +996,HB9FPG,,,,,,NXDN +1011,MM6LOY,,,,,,NXDN +1012,LX1DUC,,,,,, +1016,IK0JML,,,,,,NXDN +1021,IV3BVK,,,,,,NXDN +1029,IW2EPA,,,,,,NXDN +1032,IK0SME,,,,,,NXDN +1034,IK5XMK,,,,,,NXDN +1040,IW4CPU,,,,,,NXDN +1056,HB9TVW,,,,,,NXDN +1067,HB9FPO,,,,,,NXDN +1071,EA3IE,,,,,,NXDN +1089,EA7JBK,,,,,,NXDN +1105,IU4DTL,,,,,,NXDN +1108,OE4KMU,,,,,, +1120,IZ5YBK,,,,,,NXDN +1182,GM1RCP,,,,,,NXDN +1194,M7BUS,,,,,,NXDN +1294,EA1IVQ,,,,,,SPAIN +1305,I5EKX,,,,,,NXDN +1315,EA7OR,,,,,,NXDN +1326,IW4EHJ,,,,,,NXDN +1339,IZ3VBY,,,,,,NXDN +1343,EA1IVQ,,,,,,SPAIN +1366,IK2ZEM,,,,,,NXDN +1381,CT2HYA,,,,,,MMDVM +1387,IU5JAE,,,,,,NXDN +1407,DL7BCU,,,,,, +1412,IK6IHH,,,,,,NXDN +1430,IZ5ILD,,,,,,NXDN +1461,DH5ABC,,,,,,NXDN +1497,IZ5TIY,,,,,,NXDN +1542,M7THR,,,,,,NXDN +1665,PD4MM,,,,,,QPO +1700,IK6TIJ,,,,,,NXDN +1707,EA5GTX,,,,,,NXDN +1804,OS3A,,,,,,NXDN +1840,IT9GAJ,,,,,,NXDN +1908,ON5SA,,,,,,NXDN +1916,IU5HMK,,,,,,NXDN +1955,IU5FFN,,,,,,NXDN +1957,IZ5VSL,,,,,,NXDN +1964,IU5JIG,,,,,,NXDN +1966,ZS6IIX,,,,,, +1974,IZ4HUF,,,,,,NXDN +1977,IU2JCX,,,,,,NXDN +1998,IU2JCX,,,,,,NXDN +2000,IT9AOO,,,,,,NXDN +2003,IZ1HIQ,,,,,,NXDN +2009,IW5DBZ,,,,,,NXDN +2016,IZ8OEU,,,,,,NXDN +2076,IU8HVF,,,,,,NXDN +2097,IU5KDK,,,,,,NXDN +2136,IZ6OUF,,,,,,NXDN +2161,IT9IJI,,,,,,NXDN +2174,IT9ZEO,,,,,,NXDN +2177,,,,,,,NXDN +2242,MB6NG,,,,,,NXDN +2328,GM4UPX,,,,,,NXDN +2333,,,,,,,NXDN +2348,IW5EIA,,,,,,NXDN +2413,IW1DTU,,,,,,NXDN +2424,EA7HBZ,,,,,, +2427,IW6CAE,,,,,,NXDN +2490,DO0SRE,,,,,, +2499,IK2YYL,,,,,,NXDN +2502,IT9XVU,,,,,,NXDN +2526,IZ5IGB,,,,,,NXDN +2581,IV3BUC,,,,,,NXDN +2594,IZ5RVV,,,,,,NXDN +2650,IK5SRQ,,,,,,NXDN +2715,IK5NWZ,,,,,,NXDN +2721,DO1CKR,,,,,,NXDN +2731,PA0ISK,,,,,,NXDN +2760,IU2EZB,,,,,,NXDN +2820,M6UUN,,,,,,NXDN +2859,HB9GHD,,,,,,NXDN +2952,IU2NAF,,,,,,NXDN +2956,F6JIG,,,,,,NXDN +3001,F1IZL,,,,,,NX200 +3012,F1JMJ,,,,,,NXDN +3019,CT1AIC,,,,,,http www qrz com db CT1AIC +3021,F1RRJ,,,,,,NXDN +3040,F1JMJ,,,,,,NXDN +3069,F1GXW,,,,,,NXDN +3078,F5FSD,,,,,,NXDN +3080,CT1ERW,,,,,, +3085,G4GWV,,,,,,NXDN +3089,OZ5ACI,,,,,,DMR2p25 CrossOver +3261,CT1CHX,,,,,, +3262,CT1CVT,,,,,, +4018,HB9FEF,,,,,,iCOM IC F4400DT +4711,DF1RO,,,,,, +4804,HB9FMF,,,,,,NX5300 +5030,SQ5DCP,,,,,, +5095,SQ7BCZ,,,,,, +5112,EA5FNU,,,,,, +5260,EA5AYB,,,,,, +5287,EA5HGE,,,,,, +5554,EA5HKZ,,,,,,TXEMA +5555,EA5HKZ,,,,,, +5706,VK7RCR,,,,,, +6801,HB9VSD,,,,,, +6802,HB3YRB,,,,,,nx5300 +6803,HB9PE,,,,,, +6804,HB9FMF,,,,,, +7008,ON8HH,,,,,,DMR ID 2067008 +7022,ON4RD,,,,,,DMR ID 2067022 +7032,PA2TSL,,,,,,The Netherlands JO22OI +7055,SO7BIT,,,,,, +7313,SV4RJY,,,,,,Mobile +7777,EA5IHI,,,,,, +8000,ON5VDK,,,,,,ON0LGE +8005,ON6DP,,,,,, +8020,DC5SL,,,,,, +8061,IK8JHL,,,,,, +8066,EA8RH,,,,,, +8088,OZ0FT,,,,,,DMR2NXDN Crossover +8089,OZ5ACI,,,,,,CrossOver TEST +8311,F1ZIP,,,,,, +8312,F1ZJD,,,,,, +8405,HB9CSR,,,,,,admin hb9tvw +9011,LA9KY,,,,,, +9012,F4GEN,,,,,, +9999,MMDVM,,,,,, +11026,CT2YUC,,,,,, +16405,ON0LN,,,,,, +20005,LA6UMA,,,,,,SYSOP +20060,EI4KN,,,,,, +20112,DG4WO,,,,,,Locator JO51NS +20159,DL1HQN,,,,,, +20451,PD0DIB,,,,,, +20579,IZ0RIN,,,,,, +20612,ON5CT,,,,,, +20800,2NXDN,,,,,, +20801,F1MIJ,,,,,,CCS7 ID 2089001 +20802,F1HBG,,,,,, +20803,F1HBG,,,,,, +20804,F1ZWD,,,,,, +20805,F1ZTC,,,,,, +20807,F4DNF,,,,,, +20808,TK4NU,,,,,, +20809,F4GRL,,,,,, +20810,F5MDR,,,,,,JN23LM +20811,F1ZLK,,,,,, +20813,F8FFP,,,,,, +20816,F8FFP,,,,,, +20817,F4HLV,,,,,,CCS7 ID 2086017 +20822,F6FCD,,,,,, +20823,F1PTL,,,,,, +20824,F4ICR,,,,,, +20825,F5CES,,,,,,Quantilly +20831,F1IZL,,,,,, +20832,F4GRL,,,,,, +20833,F1ZLF,,,,,, +20835,F5UII,,,,,, +20836,F6MPN,,,,,, +20837,F5UAB,,,,,,JN19GH +20839,F1ZJR,,,,,, +20840,F1ZKS,,,,,, +20844,F5ORE,,,,,, +20847,F4GRL,,,,,, +20850,F1IZL,,,,,, +20855,F6MPN,,,,,,MASSY +20856,F5DAN,,,,,,VITRY +20858,F4AUV,,,,,, +20864,F6KPH,,,,,, +20865,F5SHD,,,,,,IN93xc +20875,F5UOX,,,,,,Paris +20880,F4GSD,,,,,, +20881,F4BQN,,,,,, +20883,F2VI,,,,,, +20886,F6DLE,,,,,,29270 +20888,F5ZCV,,,,,,MMDVM rpt +20890,F1IGY,,,,,, +20892,F4MZI,,,,,, +20894,F5LGW,,,,,, +20899,F6GVE,,,,,, +21006,LA9WKA,,,,,, +21008,IW1PPB,,,,,, +21015,SY1BRU,,,,,, +21020,LA9NT,,,,,, +21022,OE1GPA,,,,,, +21026,CT1FUK,,,,,, +21112,IW1RNH,,,,,, +21119,IZ1MLT,,,,,, +21159,SV1HEP,,,,,, +21411,EA1GEE,,,,,, +21670,HA5OGR,,,,,, +22001,CS7ACF,,,,,, +22005,CT1FUH,,,,,, +22006,DK7XD,,,,,, +22027,CS7ACD,,,,,, +22028,CT5YWF,,,,,, +22067,CS5GVA,,,,,,School radio station +22104,DL5HAW,,,,,, +22230,IN3IFX,,,,,, +22280,IU8ADS,,,,,,Napoli +22318,DO2BN,,,,,, +22349,IW2NNV,,,,,, +22378,DO6HM,,,,,, +22478,DO9KAI,,,,,, +22568,DM3US,,,,,, +22601,YO8SJU,,,,,, +22801,HB9FEF,,,,,,IC F4400DT +22802,HB9FEF,,,,,,IC F4400DT +22803,HB9FEF,,,,,,Kenwood NX 5300E +22804,HB9FEF,,,,,,IC F4400DT +22805,HB9FEG,,,,,,IC F4400DT +22810,HB9HFF,,,,,, +22880,hb3yze,,,,,, +22881,hb3yze,,,,,, +22882,hb3yze,,,,,, +22883,hb3yze,,,,,, +23001,GB7BC,,,,,, +23008,CT2KEV,,,,,, +23010,CT2JTR,,,,,, +23043,CT1EYY,,,,,, +23047,CT1GFQ,,,,,, +23048,CT1EPE,,,,,, +23061,CT2IUL,,,,,, +23074,CT1JIB,,,,,,NXDN Reflector +23149,CT2HRB,,,,,,Portugal +23173,CT1HDC,,,,,,Portugal +23201,OE1KBC,,,,,,TG20000 +23211,OE4CRC,,,,,, +23230,OE3MBU,,,,,, +23231,DG7ABL,,,,,,YSF2NXDN +23239,IN3GIN,,,,,, +23270,OE7JVT,,,,,, +23300,IW3HKL,,,,,, +23411,M6SEU,,,,,, +23412,2E0XVX,,,,,, +23427,M6GSN,,,,,, +23522,G0UBA,,,,,, +23540,GM7RYR,,,,,, +24003,DL1YBL,,,,,, +24005,OE4ENU,,,,,, +24006,CT2HBO,,,,,, +24007,CT2HDQ,,,,,, +24018,CT2GFP,,,,,, +24112,DF2ET,,,,,, +24159,DJ7FG,,,,,, +24200,LD2HT,,,,,,MMDVM Gateway +24201,LA9KY,,,,,,Icom F 5122D 1 +24202,LA9KY,,,,,,Icom F 5122D 02 +24313,DG9YBN,,,,,, +24335,DF6DX,,,,,, +24366,DB1QB,,,,,, +24371,DO5YAM,,,,,, +24410,DO5DS,,,,,, +24887,DO4YNH,,,,,,Hoxter +25094,DG9VH,,,,,, +25115,IU5HJU,,,,,, +25205,IZ5BYH,,,,,, +25354,IU5KZG,,,,,, +26004,CU3YA,,,,,,Azores +26009,CU3BL,,,,,,Terceira Isl +26041,SR4BI,,,,,, +26042,SP4FEU,,,,,, +26074,DG7FDK,,,,,, +26089,IU7IGU,,,,,, +26156,DL3YEB,,,,,, +26193,DL6SIX,,,,,, +26200,DF1VB,,,,,,NX 320 +26201,DG9BEW,,,,,,NX 320 +26202,DG9BEW,,,,,,IC F4400DT +26206,DC5CC,,,,,, +26208,DK6PX,,,,,,ICOM F4161DT +26209,DL4TTB,,,,,,ICOM F4461DT +26210,DH6MBZ,,,,,, +26214,DD5KI,,,,,,Holzkirchen DL +26218,DD5JFK,,,,,, +26238,DL6RBQ,,,,,,Icom IC4162d +26240,DB0DDS,,,,,, +26243,DH4MNJ,,,,,,IC 4161D +26244,DF1VB,,,,,,IC F4400DT +26262,DL1FLW,,,,,, +26265,DM8ANE,,,,,, +26270,DL9DL,,,,,, +26271,DH2ID,,,,,, +26280,DB7MJ,,,,,, +26286,DB0ONA,,,,,, +26299,DK0RA,,,,,, +26353,DC1ZZ,,,,,, +26370,DL1TG,,,,,, +26383,DG4NFK,,,,,, +26427,DO2ATR,,,,,, +26821,CT2GBJ,,,,,, +27002,IZ7GLL,,,,,,JN81IC +27040,IZ7DJV,,,,,,Portable +27041,IK7YTQ,,,,,, +27068,DL1IK,,,,,,http dl1ik de +27083,IZ7YPK,,,,,, +27152,DC4AS,,,,,, +27164,IW7DVM,,,,,, +27174,IZ7AUH,,,,,, +27177,IU7IHG,,,,,, +27178,IU7IHG,,,,,,JN90AE +27180,IZ8GUR,,,,,,JN70VP +27200,EI2ET,,,,,, +27203,EI6HPB,,,,,, +27215,IK7XTA,,,,,,Loc JN71UI +27307,CT1JIB,,,,,,MMDVM Repeater +27308,CT2JAY,,,,,, +27309,CT2JAY,,,,,, +28009,LA7GOA,,,,,, +28012,LA6TMA,,,,,, +28015,IZ8QKP,,,,,,Casapulla Caserta +28020,DC5SL,,,,,, +28050,IW8ELN,,,,,,Montemiletto AV +28054,IK8UHA,,,,,,NAPOLI +28058,DK2PZ,,,,,, +28065,DL3NCK,,,,,, +28077,IZ8VGJ,,,,,,Montemiletto AV +28089,I8ULU,,,,,,Loc JN71EI +28165,IK8UHA,,,,,,NAPOLI +28168,IZ8UMO,,,,,,NAPOLI +28267,IZ8QAD,,,,,,Serino AV +28308,DH5IS,,,,,, +28318,IZ8QAD,,,,,,Serino AV +28406,IZ8UMO,,,,,,NAPOLI +28565,DM8ANE,,,,,,Mane Minga +28677,TA2IKY,,,,,,MMDVM Hotspot +28742,DK3QG,,,,,,TG20000 +28844,IZ1ZPJ,,,,,, +29037,IW9CLF,,,,,,Jm77oc +29045,IW9EFE,,,,,,Hotspot +29071,IT9GNJ,,,,,,Hotspot +29093,IT9SWH,,,,,,Hotspot +29143,DL1FLW,,,,,, +29158,IW9GDC,,,,,, +29192,IT9GNJ,,,,,,Hotspot +30018,CT1HDC,,,,,, +31003,F4GRL,,,,,, +31004,F1ZIM,,,,,, +31005,F1ZLS,,,,,, +32323,F5BSF,,,,,, +34127,DG3YJB,,,,,, +34135,DO3DN,,,,,, +34149,IV3JDV,,,,,, +34397,DO2QG,,,,,,Jumbospot with Pistar +34588,DC5DU,,,,,, +34724,DG1DAV,,,,,, +34788,DO6KC,,,,,,Bochum +35401,GB7GG,,,,,, +35406,GB7SM,,,,,, +35407,GB7KN,,,,,, +35412,GB7LV,,,,,, +35422,GB7DM,,,,,, +37325,DG6GT,,,,,,PI Star Service +38196,DK7SB,,,,,, +38425,DG3NUK,,,,,, +40150,EA1IGN,,,,,, +41001,PD2ML,,,,,, +41007,PA3EKE,,,,,, +41017,PA0WBB,,,,,, +41028,PA3CQJ,,,,,, +41050,EA1IGN,,,,,, +41065,PH0DV,,,,,, +41111,EA1IST,,,,,, +41146,EA1CIU,,,,,, +41152,EA1GLE,,,,,,NX 320 +41248,EA1IWY,,,,,, +41322,EA1AYL,,,,,,ANYTONE AD868UV +41490,EA1BL,,,,,, +41502,EA1CUE,,,,,, +42001,EA2IP,,,,,, +42006,EA2CQ,,,,,, +42039,EC2UT,,,,,, +42164,EA2DCR,,,,,,Pamplona Spain +42902,LA9KY,,,,,,Repeater +43002,PA1GF,,,,,, +43003,PE1NWR,,,,,, +43015,EA3IE,,,,,, +43040,EA3HVF,,,,,,Spain +43042,PA7LIM,,,,,,BlueDV +43048,EA3ES,,,,,,Spain +43051,EA3EG,,,,,,Spain +43062,PD3RFR,,,,,, +43119,EA3RDG,,,,,,http www digigrup org +43126,EA3DGI,,,,,,JN01SU +43127,EA3GZL,,,,,, +43175,EA3EIZ,,,,,,Spain +44012,PE1PLM,,,,,, +44035,EA4DDL,,,,,, +44054,EA4EZW,,,,,,SPAIN +44077,EA4HL,,,,,, +44116,EA4AOJ,,,,,,SPAIN +44117,EA4GAX,,,,,,IN80BR +44133,EA4DKA,,,,,,Chamberi +44135,PD4MM,,,,,,Netherlands +44329,EA4DAC,,,,,,IN80DI +44399,2E0LXY,,,,,, +45008,EC5ZY,,,,,, +45017,EA5IHJ,,,,,, +45031,EA5AWB,,,,,,KENWOOD NX 320 +45034,EA4FVB,,,,,, +45053,PE1MSZ,,,,,, +45072,PH3V,,,,,,MMDVM Repeater +45078,EA5III,,,,,, +45112,PD0DIB,,,,,,JO21TQ +45170,PD1AEU,,,,,, +45321,DL9TD,,,,,, +45749,EA5URM,,,,,, +45894,DG2YGS,,,,,, +46001,OH6XI,,,,,, +46003,PD0PVL,,,,,, +46004,PD0PVL,,,,,, +46029,EA6AGB,,,,,,HYTERA PD365 +47003,EA7JRS,,,,,, +47006,EA7DYY,,,,,,JEGADI1108 +47007,EA7JOE,,,,,, +47008,EA7UU,,,,,, +47011,EA7GWC,,,,,,NX300 +47034,PE1BZF,,,,,, +47037,EA7HNY,,,,,, +47076,EA7GIB,,,,,, +47089,EA7CCQ,,,,,,ALMERIA +47090,EA7ERD,,,,,,ALMERIA +47128,EA7GWD,,,,,,NX320 +47152,EB7GQZ,,,,,,Spain +47222,EA7CTL,,,,,,IM66VL +47301,M7BMF,,,,,, +47309,EA7GSP,,,,,, +47344,EA7HBZ,,,,,, +47350,EA7IBT,,,,,, +47415,EA7KDO,,,,,, +48066,EA8RH,,,,,, +51019,G4VZO,,,,,, +51202,G0WTZ,,,,,, +51367,G8OXG,,,,,, +51379,G1ZRN,,,,,, +54006,MM0DUN,,,,,, +54040,GM7RYR,,,,,, +54041,GM4GZW,,,,,, +54061,DL1GFM,,,,,,MMDVM +54101,GM8ARV,,,,,, +54113,MM1BJO,,,,,, +54209,MM0HJX,,,,,, +54282,GM3SRV,,,,,, +54349,GM0UDL,,,,,, +54465,MM0SAJ,,,,,, +54571,F5UPZ,,,,,,JN23NP +54579,2M0YBC,,,,,, +54660,GM0BKS,,,,,, +56026,ZS6HJF,,,,,, +56078,ZS6IIX,,,,,, +56138,ZS6CSV,,,,,,NXDN +60154,ON3AD,,,,,, +61005,HA2NON,,,,,, +61006,HG1MA,,,,,, +61043,F6GAU,,,,,,H PROVENCE +61970,EA1JM,,,,,, +62035,ON2AAV,,,,,,ANTWERP +62039,ON3CF,,,,,,Antwerp +62119,ON6KVB,,,,,, +62135,ON2ON,,,,,,belgium +62377,DL1HCR,,,,,, +62778,DM0ZF,,,,,,JN48BP +63104,YO3VTH,,,,,,2263104 DMR +64646,ZS6CSV,,,,,, +65000,OE8AGK,,,,,, +65027,SP5QIR,,,,,, +65030,ON8YY,,,,,, +65516,IZ7GLL,,,,,, + diff --git a/NXDNControl.cpp b/NXDNControl.cpp index 1d253a08e..a6860917b 100644 --- a/NXDNControl.cpp +++ b/NXDNControl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX + * Copyright (C) 2015-2021 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,7 +39,7 @@ const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04 #define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) #define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) -CNXDNControl::CNXDNControl(unsigned int ran, unsigned int id, bool selfOnly, CNXDNNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CNXDNLookup* lookup, CRSSIInterpolator* rssiMapper) : +CNXDNControl::CNXDNControl(unsigned int ran, unsigned int id, bool selfOnly, INXDNNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CNXDNLookup* lookup, CRSSIInterpolator* rssiMapper) : m_ran(ran), m_id(id), m_selfOnly(selfOnly), @@ -71,6 +71,7 @@ m_maxRSSI(0U), m_minRSSI(0U), m_aveRSSI(0U), m_rssiCount(0U), +m_enabled(true), m_fp(NULL) { assert(display != NULL); @@ -86,13 +87,20 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len) { assert(data != NULL); + if (!m_enabled) + return false; + unsigned char type = data[0U]; if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) { + unsigned short dstId = m_rfLayer3.getDestinationGroupId(); + bool grp = m_rfLayer3.getIsGroup(); + std::string source = m_lookup->find(m_rfLayer3.getSourceUnitId()); + if (m_rssi != 0U) - LogMessage("NXDN, transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 12.5F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("NXDN, transmission lost from %s to %s%u, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", source.c_str(), grp ? "TG " : "", dstId, float(m_rfFrames) / 12.5F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("NXDN, transmission lost, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 12.5F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("NXDN, transmission lost from %s to %s%u, %.1f seconds, BER: %.1f%%", source.c_str(), grp ? "TG " : "", dstId, float(m_rfFrames) / 12.5F, float(m_rfErrs * 100U) / float(m_rfBits)); writeEndRF(); return false; } @@ -206,7 +214,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne unsigned short srcId = layer3.getSourceUnitId(); if (srcId != m_id) { m_rfState = RS_RF_REJECTED; - return false; + return true; } } } else { @@ -255,11 +263,15 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne writeQueueRF(data); if (data[0U] == TAG_EOT) { + unsigned short dstId = m_rfLayer3.getDestinationGroupId(); + bool grp = m_rfLayer3.getIsGroup(); + std::string source = m_lookup->find(m_rfLayer3.getSourceUnitId()); + m_rfFrames++; if (m_rssi != 0U) - LogMessage("NXDN, received RF end of transmission, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 12.5F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("NXDN, received RF end of transmission from %s to %s%u, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", source.c_str(), grp ? "TG " : "", dstId, float(m_rfFrames) / 12.5F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("NXDN, received RF end of transmission, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 12.5F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("NXDN, received RF end of transmission from %s to %s%u, %.1f seconds, BER: %.1f%%", source.c_str(), grp ? "TG " : "", dstId, float(m_rfFrames) / 12.5F, float(m_rfErrs * 100U) / float(m_rfBits)); writeEndRF(); } else { m_rfFrames = 0U; @@ -363,7 +375,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne if (m_selfOnly) { if (srcId != m_id) { m_rfState = RS_RF_REJECTED; - return false; + return true; } } @@ -659,7 +671,11 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data) #endif if (data[0U] == TAG_EOT) { - LogMessage("NXDN, ended RF data transmission"); + unsigned short dstId = m_rfLayer3.getDestinationGroupId(); + bool grp = m_rfLayer3.getIsGroup(); + std::string source = m_lookup->find(m_rfLayer3.getSourceUnitId()); + + LogMessage("NXDN, ended RF data transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); writeEndRF(); } @@ -721,11 +737,14 @@ void CNXDNControl::writeEndNet() void CNXDNControl::writeNetwork() { - unsigned char netData[40U]; + unsigned char netData[100U]; bool exists = m_network->read(netData); if (!exists) return; + if (!m_enabled) + return; + if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) return; @@ -779,7 +798,11 @@ void CNXDNControl::writeNetwork() writeQueueNet(data); if (type == NXDN_MESSAGE_TYPE_TX_REL) { - LogMessage("NXDN, ended network data transmission"); + unsigned short dstId = m_netLayer3.getDestinationGroupId(); + bool grp = m_netLayer3.getIsGroup(); + std::string source = m_lookup->find(m_netLayer3.getSourceUnitId()); + + LogMessage("NXDN, ended network data transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); writeEndNet(); } } @@ -810,18 +833,18 @@ void CNXDNControl::writeNetwork() writeQueueNet(data); + unsigned short dstId = m_netLayer3.getDestinationGroupId(); + bool grp = m_netLayer3.getIsGroup(); + class CUserDBentry source; + m_lookup->findWithName(m_netLayer3.getSourceUnitId(), &source); + if (type == NXDN_MESSAGE_TYPE_TX_REL) { m_netFrames++; - LogMessage("NXDN, received network end of transmission, %.1f seconds", float(m_netFrames) / 12.5F); + LogMessage("NXDN, received network end of transmission from %s to %s%u, %.1f seconds", source.get(keyCALLSIGN).c_str(), grp ? "TG " : "", dstId, float(m_netFrames) / 12.5F); writeEndNet(); } else if (type == NXDN_MESSAGE_TYPE_VCALL) { - unsigned short srcId = m_netLayer3.getSourceUnitId(); - unsigned short dstId = m_netLayer3.getDestinationGroupId(); - bool grp = m_netLayer3.getIsGroup(); - - std::string source = m_lookup->find(srcId); - LogMessage("NXDN, received network transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); - m_display->writeNXDN(source.c_str(), grp, dstId, "N"); + LogMessage("NXDN, received network transmission from %s to %s%u", source.get(keyCALLSIGN).c_str(), grp ? "TG " : "", dstId); + m_display->writeNXDN(source, grp, dstId, "N"); m_netTimeoutTimer.start(); m_packetTimer.start(); @@ -870,9 +893,10 @@ void CNXDNControl::writeNetwork() unsigned short dstId = m_netLayer3.getDestinationGroupId(); bool grp = m_netLayer3.getIsGroup(); - std::string source = m_lookup->find(srcId); - LogMessage("NXDN, received network transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); - m_display->writeNXDN(source.c_str(), grp, dstId, "N"); + class CUserDBentry source; + m_lookup->findWithName(srcId, &source); + LogMessage("NXDN, received network transmission from %s to %s%u", source.get(keyCALLSIGN).c_str(), grp ? "TG " : "", dstId); + m_display->writeNXDN(source, grp, dstId, "N"); m_netTimeoutTimer.start(); m_packetTimer.start(); @@ -1081,3 +1105,35 @@ void CNXDNControl::closeFile() m_fp = NULL; } } + +bool CNXDNControl::isBusy() const +{ + return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; +} + +void CNXDNControl::enable(bool enabled) +{ + if (!enabled && m_enabled) { + m_queue.clear(); + + // Reset the RF section + m_rfState = RS_RF_LISTENING; + + m_rfMask = 0x00U; + m_rfLayer3.reset(); + + m_rfTimeoutTimer.stop(); + + // Reset the networking section + m_netState = RS_NET_IDLE; + + m_netMask = 0x00U; + m_netLayer3.reset(); + + m_netTimeoutTimer.stop(); + m_networkWatchdog.stop(); + m_packetTimer.stop(); + } + + m_enabled = enabled; +} diff --git a/NXDNControl.h b/NXDNControl.h index 0bb38d7ae..af2fba11c 100644 --- a/NXDNControl.h +++ b/NXDNControl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,7 +36,7 @@ class CNXDNControl { public: - CNXDNControl(unsigned int ran, unsigned int id, bool selfOnly, CNXDNNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CNXDNLookup* lookup, CRSSIInterpolator* rssiMapper); + CNXDNControl(unsigned int ran, unsigned int id, bool selfOnly, INXDNNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CNXDNLookup* lookup, CRSSIInterpolator* rssiMapper); ~CNXDNControl(); bool writeModem(unsigned char* data, unsigned int len); @@ -45,11 +45,15 @@ class CNXDNControl { void clock(unsigned int ms); + bool isBusy() const; + + void enable(bool enabled); + private: unsigned int m_ran; unsigned int m_id; bool m_selfOnly; - CNXDNNetwork* m_network; + INXDNNetwork* m_network; CDisplay* m_display; bool m_duplex; bool m_remoteGateway; @@ -77,6 +81,7 @@ class CNXDNControl { unsigned char m_minRSSI; unsigned int m_aveRSSI; unsigned int m_rssiCount; + bool m_enabled; FILE* m_fp; bool processVoice(unsigned char usc, unsigned char option, unsigned char *data); diff --git a/NXDNConvolution.cpp b/NXDNConvolution.cpp index d74fe2a2e..875752e8b 100644 --- a/NXDNConvolution.cpp +++ b/NXDNConvolution.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2016,2018,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -44,8 +44,8 @@ m_newMetrics(NULL), m_decisions(NULL), m_dp(NULL) { - m_metrics1 = new uint16_t[16U]; - m_metrics2 = new uint16_t[16U]; + m_metrics1 = new uint16_t[20U]; + m_metrics2 = new uint16_t[20U]; m_decisions = new uint64_t[300U]; } @@ -97,7 +97,7 @@ void CNXDNConvolution::decode(uint8_t s0, uint8_t s1) m_newMetrics = tmp; } -void CNXDNConvolution::chainback(unsigned char* out, unsigned int nBits) +unsigned int CNXDNConvolution::chainback(unsigned char* out, unsigned int nBits) { assert(out != NULL); @@ -112,6 +112,15 @@ void CNXDNConvolution::chainback(unsigned char* out, unsigned int nBits) WRITE_BIT1(out, nBits, bit != 0U); } + + unsigned int minCost = m_oldMetrics[0]; + + for (unsigned int i = 0U; i < NUM_OF_STATES; i++) { + if (m_oldMetrics[i] < minCost) + minCost = m_oldMetrics[i]; + } + + return minCost / (M >> 1); } void CNXDNConvolution::encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const diff --git a/NXDNConvolution.h b/NXDNConvolution.h index d6171c9de..805bc25be 100644 --- a/NXDNConvolution.h +++ b/NXDNConvolution.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,7 +28,8 @@ class CNXDNConvolution { void start(); void decode(uint8_t s0, uint8_t s1); - void chainback(unsigned char* out, unsigned int nBits); + + unsigned int chainback(unsigned char* out, unsigned int nBits); void encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const; diff --git a/NXDNIcomNetwork.cpp b/NXDNIcomNetwork.cpp new file mode 100644 index 000000000..adc4ec641 --- /dev/null +++ b/NXDNIcomNetwork.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2009-2014,2016,2018-2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "NXDNIcomNetwork.h" +#include "NXDNDefines.h" +#include "Defines.h" +#include "Utils.h" +#include "Log.h" + +#include +#include +#include + +const unsigned int BUFFER_LENGTH = 200U; + +CNXDNIcomNetwork::CNXDNIcomNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug) : +m_socket(localAddress, localPort), +m_addr(), +m_addrLen(0U), +m_debug(debug), +m_enabled(false), +m_buffer(1000U, "NXDN Network") +{ + assert(gatewayPort > 0U); + assert(!gatewayAddress.empty()); + + if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) + m_addrLen = 0U; +} + +CNXDNIcomNetwork::~CNXDNIcomNetwork() +{ +} + +bool CNXDNIcomNetwork::open() +{ + if (m_addrLen == 0U) { + LogError("Unable to resolve the address of the NXDN Gateway"); + return false; + } + + LogMessage("Opening NXDN network connection"); + + return m_socket.open(m_addr); +} + +bool CNXDNIcomNetwork::write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type) +{ + assert(data != NULL); + + unsigned char buffer[110U]; + ::memset(buffer, 0x00U, 110U); + + buffer[0U] = 'I'; + buffer[1U] = 'C'; + buffer[2U] = 'O'; + buffer[3U] = 'M'; + buffer[4U] = 0x01U; + buffer[5U] = 0x01U; + buffer[6U] = 0x08U; + buffer[7U] = 0xE0U; + + switch (type) { + case NNMT_VOICE_HEADER: + case NNMT_VOICE_TRAILER: + buffer[37U] = 0x23U; + buffer[38U] = 0x1CU; + buffer[39U] = 0x21U; + break; + case NNMT_VOICE_BODY: + buffer[37U] = 0x23U; + buffer[38U] = 0x10U; + buffer[39U] = 0x21U; + break; + case NNMT_DATA_HEADER: + case NNMT_DATA_BODY: + case NNMT_DATA_TRAILER: + buffer[37U] = 0x23U; + buffer[38U] = 0x02U; + buffer[39U] = 0x18U; + break; + default: + return false; + } + + ::memcpy(buffer + 40U, data, 33U); + + if (m_debug) + CUtils::dump(1U, "NXDN Network Data Sent", buffer, 102U); + + return m_socket.write(buffer, 102U, m_addr, m_addrLen); +} + +void CNXDNIcomNetwork::clock(unsigned int ms) +{ + unsigned char buffer[BUFFER_LENGTH]; + + sockaddr_storage address; + unsigned int addrLen; + int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrLen); + if (length <= 0) + return; + + if (!CUDPSocket::match(m_addr, address)) { + LogMessage("NXDN, packet received from an invalid source"); + return; + } + + if (m_debug) + CUtils::dump(1U, "NXDN Network Data Received", buffer, length); + + // Invalid packet type? + if (::memcmp(buffer, "ICOM", 4U) != 0) + return; + + if (length != 102) + return; + + if (!m_enabled) + return; + + m_buffer.addData(buffer + 40U, 33U); +} + +bool CNXDNIcomNetwork::read(unsigned char* data) +{ + assert(data != NULL); + + if (m_buffer.isEmpty()) + return false; + + m_buffer.getData(data, 33U); + + return true; +} + +void CNXDNIcomNetwork::reset() +{ +} + +bool CNXDNIcomNetwork::isConnected() const +{ + return (m_addrLen != 0); +} + +void CNXDNIcomNetwork::close() +{ + m_socket.close(); + + LogMessage("Closing NXDN network connection"); +} + +void CNXDNIcomNetwork::enable(bool enabled) +{ + if (enabled && !m_enabled) + reset(); + else if (!enabled && m_enabled) + m_buffer.clear(); + + m_enabled = enabled; +} diff --git a/NXDNIcomNetwork.h b/NXDNIcomNetwork.h new file mode 100644 index 000000000..f417574c1 --- /dev/null +++ b/NXDNIcomNetwork.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2009-2014,2016,2018,2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef NXDNIcomNetwork_H +#define NXDNIcomNetwork_H + +#include "NXDNNetwork.h" +#include "NXDNDefines.h" +#include "RingBuffer.h" +#include "UDPSocket.h" +#include "Timer.h" + +#include +#include + +class CNXDNIcomNetwork : public INXDNNetwork { +public: + CNXDNIcomNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug); + virtual ~CNXDNIcomNetwork(); + + virtual bool open(); + + virtual void enable(bool enabled); + + virtual bool write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type); + + virtual bool read(unsigned char* data); + + virtual void reset(); + + virtual bool isConnected() const; + + virtual void close(); + + virtual void clock(unsigned int ms); + +private: + CUDPSocket m_socket; + sockaddr_storage m_addr; + unsigned int m_addrLen; + bool m_debug; + bool m_enabled; + CRingBuffer m_buffer; +}; + +#endif diff --git a/NXDNKenwoodNetwork.cpp b/NXDNKenwoodNetwork.cpp new file mode 100644 index 000000000..1b7432b88 --- /dev/null +++ b/NXDNKenwoodNetwork.cpp @@ -0,0 +1,1187 @@ +/* + * Copyright (C) 2009-2014,2016,2018,2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "NXDNKenwoodNetwork.h" +#include "NXDNCRC.h" +#include "Utils.h" +#include "Log.h" + +#include +#include +#include +#include + +const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; + +#define WRITE_BIT(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) +#define READ_BIT(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) + +const unsigned int BUFFER_LENGTH = 200U; + +CNXDNKenwoodNetwork::CNXDNKenwoodNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gwyAddress, unsigned short gwyPort, bool debug) : +m_rtpSocket(localAddress, localPort + 0U), +m_rtcpSocket(localAddress, localPort + 1U), +m_rtcpAddr(), +m_rtpAddr(), +m_rtcpAddrLen(0U), +m_rtpAddrLen(0U), +m_enabled(false), +m_headerSeen(false), +m_seen1(false), +m_seen2(false), +m_seen3(false), +m_seen4(false), +m_sacch(NULL), +m_sessionId(1U), +m_seqNo(0U), +m_ssrc(0U), +m_debug(debug), +m_startSecs(0U), +m_startUSecs(0U), +m_rtcpTimer(1000U, 0U, 200U), +m_hangTimer(1000U, 5U), +m_hangType(0U), +m_hangSrc(0U), +m_hangDst(0U), +m_random() +{ + assert(localPort > 0U); + assert(!gwyAddress.empty()); + assert(gwyPort > 0U); + + m_sacch = new unsigned char[10U]; + + if (CUDPSocket::lookup(gwyAddress, gwyPort + 1U, m_rtcpAddr, m_rtcpAddrLen) != 0) + m_rtcpAddrLen = 0U; + + if (CUDPSocket::lookup(gwyAddress, gwyPort + 0U, m_rtpAddr, m_rtpAddrLen) != 0) + m_rtpAddrLen = 0U; + + std::random_device rd; + std::mt19937 mt(rd()); + m_random = mt; +} + +CNXDNKenwoodNetwork::~CNXDNKenwoodNetwork() +{ + delete[] m_sacch; +} + +bool CNXDNKenwoodNetwork::open() +{ + if (m_rtcpAddrLen == 0U || m_rtpAddrLen == 0U) { + LogError("Unable to resolve the address of the NXDN Gateway"); + return false; + } + + LogMessage("Opening Kenwood connection"); + + if (!m_rtcpSocket.open(m_rtcpAddr)) + return false; + + if (!m_rtpSocket.open(m_rtpAddr)) { + m_rtcpSocket.close(); + return false; + } + + std::uniform_int_distribution dist(0x00000001, 0xfffffffe); + m_ssrc = dist(m_random); + + return true; +} + +bool CNXDNKenwoodNetwork::write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type) +{ + assert(data != NULL); + + switch (type) { + case NNMT_VOICE_HEADER: // Voice header or trailer + case NNMT_VOICE_TRAILER: + return processIcomVoiceHeader(data); + case NNMT_VOICE_BODY: // Voice data + return processIcomVoiceData(data); + case NNMT_DATA_HEADER: // Data header or trailer + case NNMT_DATA_TRAILER: + return processIcomDataHeader(data); + case NNMT_DATA_BODY: // Data data + return processIcomDataData(data); + default: + return false; + } +} + +bool CNXDNKenwoodNetwork::processIcomVoiceHeader(const unsigned char* inData) +{ + assert(inData != NULL); + + unsigned char outData[30U]; + ::memset(outData, 0x00U, 30U); + + // SACCH + outData[0U] = inData[2U]; + outData[1U] = inData[1U]; + outData[2U] = inData[4U] & 0xC0U; + outData[3U] = inData[3U]; + + // FACCH 1+2 + outData[4U] = outData[14U] = inData[6U]; + outData[5U] = outData[15U] = inData[5U]; + outData[6U] = outData[16U] = inData[8U]; + outData[7U] = outData[17U] = inData[7U]; + outData[8U] = outData[18U] = inData[10U]; + outData[9U] = outData[19U] = inData[9U]; + outData[10U] = outData[20U] = inData[12U]; + outData[11U] = outData[21U] = inData[11U]; + + unsigned short src = (inData[8U] << 8) + (inData[9U] << 0); + unsigned short dst = (inData[10U] << 8) + (inData[11U] << 0); + unsigned char type = (inData[7U] >> 5) & 0x07U; + + switch (inData[5U] & 0x3FU) { + case 0x01U: + m_hangTimer.stop(); + m_rtcpTimer.start(); + writeRTCPStart(); + return writeRTPVoiceHeader(outData); + case 0x08U: { + m_hangTimer.start(); + bool ret = writeRTPVoiceTrailer(outData); + writeRTCPHang(type, src, dst); + return ret; + } + default: + return false; + } +} + +bool CNXDNKenwoodNetwork::processIcomVoiceData(const unsigned char* inData) +{ + assert(inData != NULL); + + unsigned char outData[40U], temp[10U]; + ::memset(outData, 0x00U, 40U); + + // SACCH + outData[0U] = inData[2U]; + outData[1U] = inData[1U]; + outData[2U] = inData[4U] & 0xC0U; + outData[3U] = inData[3U]; + + // Audio 1 + ::memset(temp, 0x00U, 10U); + for (unsigned int i = 0U; i < 49U; i++) { + unsigned int offset = (5U * 8U) + i; + bool b = READ_BIT(inData, offset); + WRITE_BIT(temp, i, b); + } + outData[4U] = temp[1U]; + outData[5U] = temp[0U]; + outData[6U] = temp[3U]; + outData[7U] = temp[2U]; + outData[8U] = temp[5U]; + outData[9U] = temp[4U]; + outData[10U] = temp[7U]; + outData[11U] = temp[6U]; + + // Audio 2 + ::memset(temp, 0x00U, 10U); + for (unsigned int i = 0U; i < 49U; i++) { + unsigned int offset = (5U * 8U) + 49U + i; + bool b = READ_BIT(inData, offset); + WRITE_BIT(temp, i, b); + } + outData[12U] = temp[1U]; + outData[13U] = temp[0U]; + outData[14U] = temp[3U]; + outData[15U] = temp[2U]; + outData[16U] = temp[5U]; + outData[17U] = temp[4U]; + outData[18U] = temp[7U]; + outData[19U] = temp[6U]; + + // Audio 3 + ::memset(temp, 0x00U, 10U); + for (unsigned int i = 0U; i < 49U; i++) { + unsigned int offset = (19U * 8U) + i; + bool b = READ_BIT(inData, offset); + WRITE_BIT(temp, i, b); + } + outData[20U] = temp[1U]; + outData[21U] = temp[0U]; + outData[22U] = temp[3U]; + outData[23U] = temp[2U]; + outData[24U] = temp[5U]; + outData[25U] = temp[4U]; + outData[26U] = temp[7U]; + outData[27U] = temp[6U]; + + // Audio 4 + ::memset(temp, 0x00U, 10U); + for (unsigned int i = 0U; i < 49U; i++) { + unsigned int offset = (19U * 8U) + 49U + i; + bool b = READ_BIT(inData, offset); + WRITE_BIT(temp, i, b); + } + outData[28U] = temp[1U]; + outData[29U] = temp[0U]; + outData[30U] = temp[3U]; + outData[31U] = temp[2U]; + outData[32U] = temp[5U]; + outData[33U] = temp[4U]; + outData[34U] = temp[7U]; + outData[35U] = temp[6U]; + + return writeRTPVoiceData(outData); +} + +bool CNXDNKenwoodNetwork::processIcomDataHeader(const unsigned char* inData) +{ + assert(inData != NULL); + + unsigned char outData[30U]; + ::memset(outData, 0x00U, 30U); + + // SACCH + outData[0U] = inData[2U]; + outData[1U] = inData[1U]; + outData[2U] = inData[4U] & 0xC0U; + outData[3U] = inData[3U]; + + // FACCH 1+2 + outData[4U] = outData[14U] = inData[6U]; + outData[5U] = outData[15U] = inData[5U]; + outData[6U] = outData[16U] = inData[8U]; + outData[7U] = outData[17U] = inData[7U]; + outData[8U] = outData[18U] = inData[10U]; + outData[9U] = outData[19U] = inData[9U]; + outData[10U] = outData[20U] = inData[12U]; + outData[11U] = outData[21U] = inData[11U]; + + unsigned short src = (inData[8U] << 8) + (inData[9U] << 0); + unsigned short dst = (inData[10U] << 8) + (inData[11U] << 0); + unsigned char type = (inData[7U] >> 5) & 0x07U; + + switch (inData[5U] & 0x3FU) { + case 0x09U: + m_hangTimer.stop(); + m_rtcpTimer.start(); + writeRTCPStart(); + return writeRTPDataHeader(outData); + case 0x08U: { + m_hangTimer.start(); + bool ret = writeRTPDataTrailer(outData); + writeRTCPHang(type, src, dst); + return ret; + } + default: + return false; + } +} + +bool CNXDNKenwoodNetwork::processIcomDataData(const unsigned char* inData) +{ + assert(inData != NULL); + + unsigned char outData[40U]; + ::memset(outData, 0x00U, 40U); + + outData[0U] = inData[2U]; + outData[1U] = inData[1U]; + outData[2U] = inData[4U]; + outData[3U] = inData[3U]; + outData[4U] = inData[6U]; + outData[5U] = inData[5U]; + outData[6U] = inData[8U]; + outData[7U] = inData[7U]; + outData[8U] = inData[10U]; + outData[9U] = inData[9U]; + outData[10U] = inData[12U]; + outData[11U] = inData[11U]; + outData[12U] = inData[14U]; + outData[13U] = inData[13U]; + outData[14U] = inData[16U]; + outData[15U] = inData[15U]; + outData[16U] = inData[18U]; + outData[17U] = inData[17U]; + outData[18U] = inData[20U]; + outData[19U] = inData[19U]; + outData[20U] = inData[22U]; + outData[21U] = inData[21U]; + + return writeRTPDataData(outData); +} + +bool CNXDNKenwoodNetwork::writeRTPVoiceHeader(const unsigned char* data) +{ + assert(data != NULL); + + unsigned char buffer[50U]; + ::memset(buffer, 0x00U, 50U); + + buffer[0U] = 0x80U; + buffer[1U] = 0x66U; + + m_seqNo++; + buffer[2U] = (m_seqNo >> 8) & 0xFFU; + buffer[3U] = (m_seqNo >> 0) & 0xFFU; + + unsigned long timeStamp = getTimeStamp(); + buffer[4U] = (timeStamp >> 24) & 0xFFU; + buffer[5U] = (timeStamp >> 16) & 0xFFU; + buffer[6U] = (timeStamp >> 8) & 0xFFU; + buffer[7U] = (timeStamp >> 0) & 0xFFU; + + buffer[8U] = (m_ssrc >> 24) & 0xFFU; + buffer[9U] = (m_ssrc >> 16) & 0xFFU; + buffer[10U] = (m_ssrc >> 8) & 0xFFU; + buffer[11U] = (m_ssrc >> 0) & 0xFFU; + + m_sessionId++; + buffer[12U] = m_sessionId; + + buffer[13U] = 0x00U; + buffer[14U] = 0x00U; + buffer[15U] = 0x00U; + buffer[16U] = 0x03U; + buffer[17U] = 0x03U; + buffer[18U] = 0x04U; + buffer[19U] = 0x04U; + buffer[20U] = 0x0AU; + buffer[21U] = 0x05U; + buffer[22U] = 0x0AU; + + ::memcpy(buffer + 23U, data, 24U); + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 47U); + + return m_rtpSocket.write(buffer, 47U, m_rtpAddr, m_rtpAddrLen); +} + +bool CNXDNKenwoodNetwork::writeRTPVoiceTrailer(const unsigned char* data) +{ + assert(data != NULL); + + unsigned char buffer[50U]; + ::memset(buffer, 0x00U, 50U); + + buffer[0U] = 0x80U; + buffer[1U] = 0x66U; + + m_seqNo++; + buffer[2U] = (m_seqNo >> 8) & 0xFFU; + buffer[3U] = (m_seqNo >> 0) & 0xFFU; + + unsigned long timeStamp = getTimeStamp(); + buffer[4U] = (timeStamp >> 24) & 0xFFU; + buffer[5U] = (timeStamp >> 16) & 0xFFU; + buffer[6U] = (timeStamp >> 8) & 0xFFU; + buffer[7U] = (timeStamp >> 0) & 0xFFU; + + buffer[8U] = (m_ssrc >> 24) & 0xFFU; + buffer[9U] = (m_ssrc >> 16) & 0xFFU; + buffer[10U] = (m_ssrc >> 8) & 0xFFU; + buffer[11U] = (m_ssrc >> 0) & 0xFFU; + + buffer[12U] = m_sessionId; + + buffer[13U] = 0x00U; + buffer[14U] = 0x00U; + buffer[15U] = 0x00U; + buffer[16U] = 0x03U; + buffer[17U] = 0x03U; + buffer[18U] = 0x04U; + buffer[19U] = 0x04U; + buffer[20U] = 0x0AU; + buffer[21U] = 0x05U; + buffer[22U] = 0x0AU; + + ::memcpy(buffer + 23U, data, 24U); + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 47U); + + return m_rtpSocket.write(buffer, 47U, m_rtpAddr, m_rtpAddrLen); +} + +bool CNXDNKenwoodNetwork::writeRTPVoiceData(const unsigned char* data) +{ + assert(data != NULL); + + unsigned char buffer[60U]; + ::memset(buffer, 0x00U, 60U); + + buffer[0U] = 0x80U; + buffer[1U] = 0x66U; + + m_seqNo++; + buffer[2U] = (m_seqNo >> 8) & 0xFFU; + buffer[3U] = (m_seqNo >> 0) & 0xFFU; + + unsigned long timeStamp = getTimeStamp(); + buffer[4U] = (timeStamp >> 24) & 0xFFU; + buffer[5U] = (timeStamp >> 16) & 0xFFU; + buffer[6U] = (timeStamp >> 8) & 0xFFU; + buffer[7U] = (timeStamp >> 0) & 0xFFU; + + buffer[8U] = (m_ssrc >> 24) & 0xFFU; + buffer[9U] = (m_ssrc >> 16) & 0xFFU; + buffer[10U] = (m_ssrc >> 8) & 0xFFU; + buffer[11U] = (m_ssrc >> 0) & 0xFFU; + + buffer[12U] = m_sessionId; + + buffer[13U] = 0x00U; + buffer[14U] = 0x00U; + buffer[15U] = 0x00U; + buffer[16U] = 0x03U; + buffer[17U] = 0x02U; + buffer[18U] = 0x04U; + buffer[19U] = 0x07U; + buffer[20U] = 0x10U; + buffer[21U] = 0x08U; + buffer[22U] = 0x10U; + + ::memcpy(buffer + 23U, data, 36U); + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 59U); + + return m_rtpSocket.write(buffer, 59U, m_rtpAddr, m_rtpAddrLen); +} + +bool CNXDNKenwoodNetwork::writeRTPDataHeader(const unsigned char* data) +{ + assert(data != NULL); + + unsigned char buffer[50U]; + ::memset(buffer, 0x00U, 50U); + + buffer[0U] = 0x80U; + buffer[1U] = 0x66U; + + m_seqNo++; + buffer[2U] = (m_seqNo >> 8) & 0xFFU; + buffer[3U] = (m_seqNo >> 0) & 0xFFU; + + unsigned long timeStamp = getTimeStamp(); + buffer[4U] = (timeStamp >> 24) & 0xFFU; + buffer[5U] = (timeStamp >> 16) & 0xFFU; + buffer[6U] = (timeStamp >> 8) & 0xFFU; + buffer[7U] = (timeStamp >> 0) & 0xFFU; + + buffer[8U] = (m_ssrc >> 24) & 0xFFU; + buffer[9U] = (m_ssrc >> 16) & 0xFFU; + buffer[10U] = (m_ssrc >> 8) & 0xFFU; + buffer[11U] = (m_ssrc >> 0) & 0xFFU; + + m_sessionId++; + buffer[12U] = m_sessionId; + + buffer[13U] = 0x00U; + buffer[14U] = 0x00U; + buffer[15U] = 0x00U; + buffer[16U] = 0x01U; + buffer[17U] = 0x01U; + + ::memcpy(buffer + 18U, data, 24U); + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 42U); + + return m_rtpSocket.write(buffer, 42U, m_rtpAddr, m_rtpAddrLen); +} + +bool CNXDNKenwoodNetwork::writeRTPDataTrailer(const unsigned char* data) +{ + assert(data != NULL); + + unsigned char buffer[50U]; + ::memset(buffer, 0x00U, 50U); + + buffer[0U] = 0x80U; + buffer[1U] = 0x66U; + + m_seqNo++; + buffer[2U] = (m_seqNo >> 8) & 0xFFU; + buffer[3U] = (m_seqNo >> 0) & 0xFFU; + + unsigned long timeStamp = getTimeStamp(); + buffer[4U] = (timeStamp >> 24) & 0xFFU; + buffer[5U] = (timeStamp >> 16) & 0xFFU; + buffer[6U] = (timeStamp >> 8) & 0xFFU; + buffer[7U] = (timeStamp >> 0) & 0xFFU; + + buffer[8U] = (m_ssrc >> 24) & 0xFFU; + buffer[9U] = (m_ssrc >> 16) & 0xFFU; + buffer[10U] = (m_ssrc >> 8) & 0xFFU; + buffer[11U] = (m_ssrc >> 0) & 0xFFU; + + m_sessionId++; + buffer[12U] = m_sessionId; + + buffer[13U] = 0x00U; + buffer[14U] = 0x00U; + buffer[15U] = 0x00U; + buffer[16U] = 0x01U; + buffer[17U] = 0x06U; + + ::memcpy(buffer + 18U, data, 24U); + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 42U); + + return m_rtpSocket.write(buffer, 42U, m_rtpAddr, m_rtpAddrLen); +} + +bool CNXDNKenwoodNetwork::writeRTPDataData(const unsigned char* data) +{ + assert(data != NULL); + + unsigned char buffer[50U]; + ::memset(buffer, 0x00U, 50U); + + buffer[0U] = 0x80U; + buffer[1U] = 0x66U; + + m_seqNo++; + buffer[2U] = (m_seqNo >> 8) & 0xFFU; + buffer[3U] = (m_seqNo >> 0) & 0xFFU; + + unsigned long timeStamp = getTimeStamp(); + buffer[4U] = (timeStamp >> 24) & 0xFFU; + buffer[5U] = (timeStamp >> 16) & 0xFFU; + buffer[6U] = (timeStamp >> 8) & 0xFFU; + buffer[7U] = (timeStamp >> 0) & 0xFFU; + + buffer[8U] = (m_ssrc >> 24) & 0xFFU; + buffer[9U] = (m_ssrc >> 16) & 0xFFU; + buffer[10U] = (m_ssrc >> 8) & 0xFFU; + buffer[11U] = (m_ssrc >> 0) & 0xFFU; + + m_sessionId++; + buffer[12U] = m_sessionId; + + buffer[13U] = 0x00U; + buffer[14U] = 0x00U; + buffer[15U] = 0x00U; + buffer[16U] = 0x01U; + buffer[17U] = 0x01U; + + ::memcpy(buffer + 18U, data, 24U); + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 42U); + + return m_rtpSocket.write(buffer, 42U, m_rtpAddr, m_rtpAddrLen); +} + +bool CNXDNKenwoodNetwork::writeRTCPStart() +{ +#if defined(_WIN32) || defined(_WIN64) + time_t now; + ::time(&now); + + m_startSecs = uint32_t(now); + + SYSTEMTIME st; + ::GetSystemTime(&st); + + m_startUSecs = st.wMilliseconds * 1000U; +#else + struct timeval tod; + ::gettimeofday(&tod, NULL); + + m_startSecs = tod.tv_sec; + m_startUSecs = tod.tv_usec; +#endif + + unsigned char buffer[30U]; + ::memset(buffer, 0x00U, 30U); + + buffer[0U] = 0x8AU; + buffer[1U] = 0xCCU; + buffer[2U] = 0x00U; + buffer[3U] = 0x06U; + + buffer[4U] = (m_ssrc >> 24) & 0xFFU; + buffer[5U] = (m_ssrc >> 16) & 0xFFU; + buffer[6U] = (m_ssrc >> 8) & 0xFFU; + buffer[7U] = (m_ssrc >> 0) & 0xFFU; + + buffer[8U] = 'K'; + buffer[9U] = 'W'; + buffer[10U] = 'N'; + buffer[11U] = 'E'; + + buffer[12U] = (m_startSecs >> 24) & 0xFFU; + buffer[13U] = (m_startSecs >> 16) & 0xFFU; + buffer[14U] = (m_startSecs >> 8) & 0xFFU; + buffer[15U] = (m_startSecs >> 0) & 0xFFU; + + buffer[16U] = (m_startUSecs >> 24) & 0xFFU; + buffer[17U] = (m_startUSecs >> 16) & 0xFFU; + buffer[18U] = (m_startUSecs >> 8) & 0xFFU; + buffer[19U] = (m_startUSecs >> 0) & 0xFFU; + + buffer[22U] = 0x02U; + + buffer[24U] = 0x01U; + + buffer[27U] = 0x0AU; + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTCP Data Sent", buffer, 28U); + + return m_rtcpSocket.write(buffer, 28U, m_rtcpAddr, m_rtcpAddrLen); +} + +bool CNXDNKenwoodNetwork::writeRTCPPing() +{ + unsigned char buffer[30U]; + ::memset(buffer, 0x00U, 30U); + + buffer[0U] = 0x8AU; + buffer[1U] = 0xCCU; + buffer[2U] = 0x00U; + buffer[3U] = 0x06U; + + buffer[4U] = (m_ssrc >> 24) & 0xFFU; + buffer[5U] = (m_ssrc >> 16) & 0xFFU; + buffer[6U] = (m_ssrc >> 8) & 0xFFU; + buffer[7U] = (m_ssrc >> 0) & 0xFFU; + + buffer[8U] = 'K'; + buffer[9U] = 'W'; + buffer[10U] = 'N'; + buffer[11U] = 'E'; + + buffer[12U] = (m_startSecs >> 24) & 0xFFU; + buffer[13U] = (m_startSecs >> 16) & 0xFFU; + buffer[14U] = (m_startSecs >> 8) & 0xFFU; + buffer[15U] = (m_startSecs >> 0) & 0xFFU; + + buffer[16U] = (m_startUSecs >> 24) & 0xFFU; + buffer[17U] = (m_startUSecs >> 16) & 0xFFU; + buffer[18U] = (m_startUSecs >> 8) & 0xFFU; + buffer[19U] = (m_startUSecs >> 0) & 0xFFU; + + buffer[22U] = 0x02U; + + buffer[24U] = 0x01U; + + buffer[27U] = 0x7BU; + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTCP Data Sent", buffer, 28U); + + return m_rtcpSocket.write(buffer, 28U, m_rtcpAddr, m_rtcpAddrLen); +} + +bool CNXDNKenwoodNetwork::writeRTCPHang(unsigned char type, unsigned short src, unsigned short dst) +{ + m_hangType = type; + m_hangSrc = src; + m_hangDst = dst; + + return writeRTCPHang(); +} + +bool CNXDNKenwoodNetwork::writeRTCPHang() +{ + unsigned char buffer[30U]; + ::memset(buffer, 0x00U, 30U); + + buffer[0U] = 0x8BU; + buffer[1U] = 0xCCU; + buffer[2U] = 0x00U; + buffer[3U] = 0x04U; + + buffer[4U] = (m_ssrc >> 24) & 0xFFU; + buffer[5U] = (m_ssrc >> 16) & 0xFFU; + buffer[6U] = (m_ssrc >> 8) & 0xFFU; + buffer[7U] = (m_ssrc >> 0) & 0xFFU; + + buffer[8U] = 'K'; + buffer[9U] = 'W'; + buffer[10U] = 'N'; + buffer[11U] = 'E'; + + buffer[12U] = (m_hangSrc >> 8) & 0xFFU; + buffer[13U] = (m_hangSrc >> 0) & 0xFFU; + + buffer[14U] = (m_hangDst >> 8) & 0xFFU; + buffer[15U] = (m_hangDst >> 0) & 0xFFU; + + buffer[16U] = m_hangType; + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTCP Data Sent", buffer, 20U); + + return m_rtcpSocket.write(buffer, 20U, m_rtcpAddr, m_rtcpAddrLen); +} + +bool CNXDNKenwoodNetwork::read(unsigned char* data) +{ + assert(data != NULL); + + unsigned char dummy[BUFFER_LENGTH]; + readRTCP(dummy); + + unsigned int len = readRTP(data); + switch (len) { + case 0U: // Nothing received + return false; + case 35U: // Voice header or trailer + return processKenwoodVoiceHeader(data); + case 47U: // Voice data + if (m_headerSeen) + return processKenwoodVoiceData(data); + else + return processKenwoodVoiceLateEntry(data); + case 31U: // Data + return processKenwoodData(data); + default: + CUtils::dump(5U, "Unknown data received from the Kenwood network", data, len); + return false; + } +} + +unsigned int CNXDNKenwoodNetwork::readRTP(unsigned char* data) +{ + assert(data != NULL); + + unsigned char buffer[BUFFER_LENGTH]; + + sockaddr_storage address; + unsigned int addrLen; + int length = m_rtpSocket.read(buffer, BUFFER_LENGTH, address, addrLen); + if (length <= 0) + return 0U; + + if (!CUDPSocket::match(m_rtpAddr, address, IMT_ADDRESS_ONLY)) { + LogMessage("NXDN, RTP packet received from an invalid source"); + return 0U; + } + + if (!m_enabled) + return 0U; + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTP Data Received", buffer, length); + + ::memcpy(data, buffer + 12U, length - 12U); + + return length - 12U; +} + +unsigned int CNXDNKenwoodNetwork::readRTCP(unsigned char* data) +{ + assert(data != NULL); + + unsigned char buffer[BUFFER_LENGTH]; + + sockaddr_storage address; + unsigned int addrlen; + int length = m_rtcpSocket.read(buffer, BUFFER_LENGTH, address, addrlen); + if (length <= 0) + return 0U; + + if (!CUDPSocket::match(m_rtpAddr, address, IMT_ADDRESS_ONLY)) { + LogMessage("NXDN, RTCP packet received from an invalid source"); + return 0U; + } + + if (!m_enabled) + return 0U; + + if (m_debug) + CUtils::dump(1U, "Kenwood Network RTCP Data Received", buffer, length); + + if (::memcmp(buffer + 8U, "KWNE", 4U) != 0) { + LogError("Missing RTCP KWNE signature"); + return 0U; + } + + ::memcpy(data, buffer + 12U, length - 12U); + + return length - 12U; +} + +void CNXDNKenwoodNetwork::reset() +{ + m_rtcpTimer.stop(); + m_hangTimer.stop(); + + m_headerSeen = false; + m_seen1 = false; + m_seen2 = false; + m_seen3 = false; + m_seen4 = false; +} + +bool CNXDNKenwoodNetwork::isConnected() const +{ + return ((m_rtcpAddrLen != 0U) && (m_rtpAddrLen != 0U)); +} + +void CNXDNKenwoodNetwork::close() +{ + m_rtcpSocket.close(); + m_rtpSocket.close(); + + LogMessage("Closing Kenwood connection"); +} + +void CNXDNKenwoodNetwork::clock(unsigned int ms) +{ + m_rtcpTimer.clock(ms); + if (m_rtcpTimer.isRunning() && m_rtcpTimer.hasExpired()) { + if (m_hangTimer.isRunning()) + writeRTCPHang(); + else + writeRTCPPing(); + m_rtcpTimer.start(); + } + + m_hangTimer.clock(ms); + if (m_hangTimer.isRunning() && m_hangTimer.hasExpired()) { + m_rtcpTimer.stop(); + m_hangTimer.stop(); + } +} + +bool CNXDNKenwoodNetwork::processKenwoodVoiceHeader(unsigned char* inData) +{ + assert(inData != NULL); + + unsigned char outData[50U], temp[20U]; + ::memset(outData, 0x00U, 50U); + + // LICH + outData[0U] = 0x83U; + + // SACCH + ::memset(temp, 0x00U, 20U); + temp[0U] = inData[12U]; + temp[1U] = inData[11U]; + temp[2U] = inData[14U]; + temp[3U] = inData[13U]; + CNXDNCRC::encodeCRC6(temp, 26U); + ::memcpy(outData + 1U, temp, 4U); + + // FACCH 1+2 + ::memset(temp, 0x00U, 20U); + temp[0U] = inData[16U]; + temp[1U] = inData[15U]; + temp[2U] = inData[18U]; + temp[3U] = inData[17U]; + temp[4U] = inData[20U]; + temp[5U] = inData[19U]; + temp[6U] = inData[22U]; + temp[7U] = inData[21U]; + temp[8U] = inData[24U]; + temp[9U] = inData[23U]; + CNXDNCRC::encodeCRC12(temp, 80U); + ::memcpy(outData + 5U, temp, 12U); + ::memcpy(outData + 19U, temp, 12U); + + switch (outData[5U] & 0x3FU) { + case 0x01U: + ::memcpy(inData, outData, 33U); + m_headerSeen = true; + m_seen1 = false; + m_seen2 = false; + m_seen3 = false; + m_seen4 = false; + return true; + case 0x08U: + ::memcpy(inData, outData, 33U); + m_headerSeen = false; + m_seen1 = false; + m_seen2 = false; + m_seen3 = false; + m_seen4 = false; + return true; + default: + return false; + } +} + +bool CNXDNKenwoodNetwork::processKenwoodVoiceData(unsigned char* inData) +{ + assert(inData != NULL); + + unsigned char outData[50U], temp[20U]; + ::memset(outData, 0x00U, 50U); + + // LICH + outData[0U] = 0xAEU; + + // SACCH + ::memset(temp, 0x00U, 20U); + temp[0U] = inData[12U]; + temp[1U] = inData[11U]; + temp[2U] = inData[14U]; + temp[3U] = inData[13U]; + CNXDNCRC::encodeCRC6(temp, 26U); + ::memcpy(outData + 1U, temp, 4U); + + // AMBE 1+2 + unsigned int n = 5U * 8U; + + temp[0U] = inData[16U]; + temp[1U] = inData[15U]; + temp[2U] = inData[18U]; + temp[3U] = inData[17U]; + temp[4U] = inData[20U]; + temp[5U] = inData[19U]; + temp[6U] = inData[22U]; + temp[7U] = inData[21U]; + + for (unsigned int i = 0U; i < 49U; i++, n++) { + bool b = READ_BIT(temp, i); + WRITE_BIT(outData, n, b); + } + + temp[0U] = inData[24U]; + temp[1U] = inData[23U]; + temp[2U] = inData[26U]; + temp[3U] = inData[25U]; + temp[4U] = inData[28U]; + temp[5U] = inData[27U]; + temp[6U] = inData[30U]; + temp[7U] = inData[29U]; + + for (unsigned int i = 0U; i < 49U; i++, n++) { + bool b = READ_BIT(temp, i); + WRITE_BIT(outData, n, b); + } + + // AMBE 3+4 + n = 19U * 8U; + + temp[0U] = inData[32U]; + temp[1U] = inData[31U]; + temp[2U] = inData[34U]; + temp[3U] = inData[33U]; + temp[4U] = inData[36U]; + temp[5U] = inData[35U]; + temp[6U] = inData[38U]; + temp[7U] = inData[37U]; + + for (unsigned int i = 0U; i < 49U; i++, n++) { + bool b = READ_BIT(temp, i); + WRITE_BIT(outData, n, b); + } + + temp[0U] = inData[40U]; + temp[1U] = inData[39U]; + temp[2U] = inData[42U]; + temp[3U] = inData[41U]; + temp[4U] = inData[44U]; + temp[5U] = inData[43U]; + temp[6U] = inData[46U]; + temp[7U] = inData[45U]; + + for (unsigned int i = 0U; i < 49U; i++, n++) { + bool b = READ_BIT(temp, i); + WRITE_BIT(outData, n, b); + } + + ::memcpy(inData, outData, 33U); + + return true; +} + +bool CNXDNKenwoodNetwork::processKenwoodData(unsigned char* inData) +{ + if (inData[7U] != 0x09U && inData[7U] != 0x0BU && inData[7U] != 0x08U) + return false; + + unsigned char outData[50U]; + + if (inData[7U] == 0x09U || inData[7U] == 0x08U) { + outData[0U] = 0x90U; + outData[1U] = inData[8U]; + outData[2U] = inData[7U]; + outData[3U] = inData[10U]; + outData[4U] = inData[9U]; + outData[5U] = inData[12U]; + outData[6U] = inData[11U]; + outData[7U] = inData[14U]; + outData[8U] = inData[13U]; + outData[9U] = inData[16U]; + outData[10U] = inData[15U]; + outData[11U] = inData[18U]; + outData[12U] = inData[17U]; + outData[13U] = inData[20U]; + outData[14U] = inData[19U]; + outData[15U] = inData[22U]; + outData[16U] = inData[21U]; + outData[17U] = inData[24U]; + outData[18U] = inData[23U]; + outData[19U] = inData[26U]; + ::memcpy(inData, outData, 20U); + return true; + } else { + outData[0U] = 0x90U; + outData[1U] = inData[8U]; + outData[2U] = inData[7U]; + outData[3U] = inData[10U]; + outData[4U] = inData[9U]; + outData[5U] = inData[12U]; + outData[6U] = inData[11U]; + outData[7U] = inData[14U]; + outData[8U] = inData[13U]; + outData[9U] = inData[16U]; + outData[10U] = inData[15U]; + outData[11U] = inData[18U]; + outData[12U] = inData[17U]; + outData[13U] = inData[20U]; + outData[14U] = inData[19U]; + outData[15U] = inData[22U]; + outData[16U] = inData[21U]; + outData[17U] = inData[24U]; + outData[18U] = inData[23U]; + outData[19U] = inData[26U]; + outData[20U] = inData[25U]; + outData[21U] = inData[28U]; + outData[22U] = inData[27U]; + outData[23U] = inData[29U]; + ::memcpy(inData, outData, 24U); + return true; + } +} + +unsigned long CNXDNKenwoodNetwork::getTimeStamp() const +{ + unsigned long timeStamp = 0UL; + +#if defined(_WIN32) || defined(_WIN64) + SYSTEMTIME st; + ::GetSystemTime(&st); + + unsigned int hh = st.wHour; + unsigned int mm = st.wMinute; + unsigned int ss = st.wSecond; + unsigned int ms = st.wMilliseconds; + + timeStamp += hh * 3600U * 1000U * 80U; + timeStamp += mm * 60U * 1000U * 80U; + timeStamp += ss * 1000U * 80U; + timeStamp += ms * 80U; +#else + struct timeval tod; + ::gettimeofday(&tod, NULL); + + unsigned int ss = tod.tv_sec; + unsigned int ms = tod.tv_usec / 1000U; + + timeStamp += ss * 1000U * 80U; + timeStamp += ms * 80U; +#endif + + return timeStamp; +} + +bool CNXDNKenwoodNetwork::processKenwoodVoiceLateEntry(unsigned char* inData) +{ + assert(inData != NULL); + + unsigned char sacch[4U]; + sacch[0U] = inData[12U]; + sacch[1U] = inData[11U]; + sacch[2U] = inData[14U]; + sacch[3U] = inData[13U]; + + switch (sacch[0U] & 0xC0U) { + case 0xC0U: + if (!m_seen1) { + unsigned int offset = 0U; + for (unsigned int i = 8U; i < 26U; i++, offset++) { + bool b = READ_BIT(sacch, i) != 0U; + WRITE_BIT(m_sacch, offset, b); + } + m_seen1 = true; + } + break; + case 0x80U: + if (!m_seen2) { + unsigned int offset = 18U; + for (unsigned int i = 8U; i < 26U; i++, offset++) { + bool b = READ_BIT(sacch, i) != 0U; + WRITE_BIT(m_sacch, offset, b); + } + m_seen2 = true; + } + break; + case 0x40U: + if (!m_seen3) { + unsigned int offset = 36U; + for (unsigned int i = 8U; i < 26U; i++, offset++) { + bool b = READ_BIT(sacch, i) != 0U; + WRITE_BIT(m_sacch, offset, b); + } + m_seen3 = true; + } + break; + case 0x00U: + if (!m_seen4) { + unsigned int offset = 54U; + for (unsigned int i = 8U; i < 26U; i++, offset++) { + bool b = READ_BIT(sacch, i) != 0U; + WRITE_BIT(m_sacch, offset, b); + } + m_seen4 = true; + } + break; + } + + if (!m_seen1 || !m_seen2 || !m_seen3 || !m_seen4) + return false; + + // Create a dummy header + // Header SACCH + inData[11U] = 0x10U; + inData[12U] = 0x01U; + inData[13U] = 0x00U; + inData[14U] = 0x00U; + + // Header FACCH + inData[15U] = m_sacch[1U]; + inData[16U] = m_sacch[0U]; + inData[17U] = m_sacch[3U]; + inData[18U] = m_sacch[2U]; + inData[19U] = m_sacch[5U]; + inData[20U] = m_sacch[4U]; + inData[21U] = m_sacch[7U]; + inData[22U] = m_sacch[6U]; + inData[23U] = 0x00U; + inData[24U] = m_sacch[8U]; + + return processKenwoodVoiceHeader(inData); +} + +void CNXDNKenwoodNetwork::enable(bool enabled) +{ + if (enabled && !m_enabled) + reset(); + + m_enabled = enabled; +} diff --git a/NXDNKenwoodNetwork.h b/NXDNKenwoodNetwork.h new file mode 100644 index 000000000..216176e95 --- /dev/null +++ b/NXDNKenwoodNetwork.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2009-2014,2016,2018,2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef NXDNKenwoodNetwork_H +#define NXDNKenwoodNetwork_H + +#include "NXDNNetwork.h" +#include "UDPSocket.h" +#include "Timer.h" + +#include +#include +#include + +class CNXDNKenwoodNetwork : public INXDNNetwork { +public: + CNXDNKenwoodNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gwyAddress, unsigned short gwyPort, bool debug); + virtual ~CNXDNKenwoodNetwork(); + + virtual bool open(); + + virtual void enable(bool enabled); + + virtual bool write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type); + + virtual bool read(unsigned char* data); + + virtual void reset(); + + virtual bool isConnected() const; + + virtual void close(); + + virtual void clock(unsigned int ms); + +private: + CUDPSocket m_rtpSocket; + CUDPSocket m_rtcpSocket; + sockaddr_storage m_rtcpAddr; + sockaddr_storage m_rtpAddr; + unsigned int m_rtcpAddrLen; + unsigned int m_rtpAddrLen; + bool m_enabled; + bool m_headerSeen; + bool m_seen1; + bool m_seen2; + bool m_seen3; + bool m_seen4; + unsigned char* m_sacch; + uint8_t m_sessionId; + uint16_t m_seqNo; + unsigned int m_ssrc; + bool m_debug; + uint32_t m_startSecs; + uint32_t m_startUSecs; + CTimer m_rtcpTimer; + CTimer m_hangTimer; + unsigned char m_hangType; + unsigned short m_hangSrc; + unsigned short m_hangDst; + std::mt19937 m_random; + + bool processIcomVoiceHeader(const unsigned char* data); + bool processIcomVoiceData(const unsigned char* data); + bool processIcomDataHeader(const unsigned char* data); + bool processIcomDataData(const unsigned char* data); + bool processIcomDataTrailer(const unsigned char* data); + bool processKenwoodVoiceHeader(unsigned char* data); + bool processKenwoodVoiceData(unsigned char* data); + bool processKenwoodVoiceLateEntry(unsigned char* data); + bool processKenwoodData(unsigned char* data); + bool writeRTPVoiceHeader(const unsigned char* data); + bool writeRTPVoiceData(const unsigned char* data); + bool writeRTPVoiceTrailer(const unsigned char* data); + bool writeRTPDataHeader(const unsigned char* data); + bool writeRTPDataData(const unsigned char* data); + bool writeRTPDataTrailer(const unsigned char* data); + bool writeRTCPStart(); + bool writeRTCPPing(); + bool writeRTCPHang(unsigned char type, unsigned short src, unsigned short dst); + bool writeRTCPHang(); + unsigned int readRTP(unsigned char* data); + unsigned int readRTCP(unsigned char* data); + unsigned long getTimeStamp() const; +}; + +#endif diff --git a/NXDNLookup.cpp b/NXDNLookup.cpp index 2c621b6b5..fb1299b5f 100644 --- a/NXDNLookup.cpp +++ b/NXDNLookup.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2017,2018,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,8 +30,8 @@ CThread(), m_filename(filename), m_reloadTime(reloadTime), m_table(), -m_mutex(), -m_stop(false) +m_stop(false), +m_reload(false) { } @@ -41,7 +41,7 @@ CNXDNLookup::~CNXDNLookup() bool CNXDNLookup::read() { - bool ret = load(); + bool ret = m_table.load(m_filename); if (m_reloadTime > 0U) run(); @@ -49,6 +49,14 @@ bool CNXDNLookup::read() return ret; } +void CNXDNLookup::reload() +{ + if (m_reloadTime == 0U) + m_table.load(m_filename); + else + m_reload = true; +} + void CNXDNLookup::entry() { LogInfo("Started the NXDN Id lookup reload thread"); @@ -60,9 +68,10 @@ void CNXDNLookup::entry() sleep(1000U); timer.clock(); - if (timer.hasExpired()) { - load(); + if (timer.hasExpired() || m_reload) { + m_table.load(m_filename); timer.start(); + m_reload = false; } } @@ -81,6 +90,27 @@ void CNXDNLookup::stop() wait(); } +void CNXDNLookup::findWithName(unsigned int id, class CUserDBentry *entry) +{ + if (id == 0xFFFFU) { + entry->clear(); + entry->set(keyCALLSIGN, "ALL"); + return; + } + + if (m_table.lookup(id, entry)) { + LogDebug("FindWithName =%s %s", entry->get(keyCALLSIGN).c_str(), entry->get(keyFIRST_NAME).c_str()); + } else { + entry->clear(); + + char text[10U]; + ::snprintf(text, sizeof(text), "%u", id); + entry->set(keyCALLSIGN, text); + } + + return; +} + std::string CNXDNLookup::find(unsigned int id) { std::string callsign; @@ -88,73 +118,19 @@ std::string CNXDNLookup::find(unsigned int id) if (id == 0xFFFFU) return std::string("ALL"); - m_mutex.lock(); - - try { - callsign = m_table.at(id); - } catch (...) { + class CUserDBentry entry; + if (m_table.lookup(id, &entry)) { + callsign = entry.get(keyCALLSIGN); + } else { char text[10U]; - ::sprintf(text, "%u", id); + ::snprintf(text, sizeof(text), "%u", id); callsign = std::string(text); } - m_mutex.unlock(); - return callsign; } bool CNXDNLookup::exists(unsigned int id) { - m_mutex.lock(); - - bool found = m_table.count(id) == 1U; - - m_mutex.unlock(); - - return found; + return m_table.lookup(id, NULL); } - -bool CNXDNLookup::load() -{ - FILE* fp = ::fopen(m_filename.c_str(), "rt"); - if (fp == NULL) { - LogWarning("Cannot open the NXDN Id lookup file - %s", m_filename.c_str()); - return false; - } - - m_mutex.lock(); - - // Remove the old entries - m_table.clear(); - - char buffer[100U]; - while (::fgets(buffer, 100U, fp) != NULL) { - if (buffer[0U] == '#') - continue; - - char* p1 = ::strtok(buffer, ",\t\r\n"); - char* p2 = ::strtok(NULL, ",\t\r\n"); - - if (p1 != NULL && p2 != NULL) { - unsigned int id = (unsigned int)::atoi(p1); - if (id > 0U) { - for (char* p = p2; *p != 0x00U; p++) - *p = ::toupper(*p); - - m_table[id] = std::string(p2); - } - } - } - - m_mutex.unlock(); - - ::fclose(fp); - - size_t size = m_table.size(); - if (size == 0U) - return false; - - LogInfo("Loaded %u Ids to the NXDN callsign lookup table", size); - - return true; -} \ No newline at end of file diff --git a/NXDNLookup.h b/NXDNLookup.h index d7b0486a3..c49e1144f 100644 --- a/NXDNLookup.h +++ b/NXDNLookup.h @@ -20,10 +20,9 @@ #define NXDNLookup_H #include "Thread.h" -#include "Mutex.h" +#include "UserDB.h" #include -#include class CNXDNLookup : public CThread { public: @@ -32,22 +31,23 @@ class CNXDNLookup : public CThread { bool read(); + void reload(); + virtual void entry(); std::string find(unsigned int id); + void findWithName(unsigned int id, class CUserDBentry *entry); bool exists(unsigned int id); void stop(); private: - std::string m_filename; - unsigned int m_reloadTime; - std::unordered_map m_table; - CMutex m_mutex; - bool m_stop; - - bool load(); + std::string m_filename; + unsigned int m_reloadTime; + class CUserDB m_table; + bool m_stop; + bool m_reload; }; #endif diff --git a/NXDNNetwork.cpp b/NXDNNetwork.cpp index f724deade..0f550114c 100644 --- a/NXDNNetwork.cpp +++ b/NXDNNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,152 +16,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "NXDNDefines.h" #include "NXDNNetwork.h" -#include "Defines.h" -#include "Utils.h" -#include "Log.h" -#include -#include -#include - -const unsigned int BUFFER_LENGTH = 200U; - -CNXDNNetwork::CNXDNNetwork(const std::string& localAddress, unsigned int localPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug) : -m_socket(localAddress, localPort), -m_address(), -m_port(gatewayPort), -m_debug(debug), -m_enabled(false), -m_buffer(1000U, "NXDN Network") -{ - assert(gatewayPort > 0U); - assert(!gatewayAddress.empty()); - - m_address = CUDPSocket::lookup(gatewayAddress); -} - -CNXDNNetwork::~CNXDNNetwork() -{ -} - -bool CNXDNNetwork::open() -{ - LogMessage("Opening NXDN network connection"); - - if (m_address.s_addr == INADDR_NONE) - return false; - - return m_socket.open(); -} - -bool CNXDNNetwork::write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type) -{ - assert(data != NULL); - - unsigned char buffer[110U]; - ::memset(buffer, 0x00U, 110U); - - buffer[0U] = 'I'; - buffer[1U] = 'C'; - buffer[2U] = 'O'; - buffer[3U] = 'M'; - buffer[4U] = 0x01U; - buffer[5U] = 0x01U; - buffer[6U] = 0x08U; - buffer[7U] = 0xE0U; - - switch (type) { - case NNMT_VOICE_HEADER: - case NNMT_VOICE_TRAILER: - buffer[37U] = 0x23U; - buffer[38U] = 0x1CU; - buffer[39U] = 0x21U; - break; - case NNMT_VOICE_BODY: - buffer[37U] = 0x23U; - buffer[38U] = 0x10U; - buffer[39U] = 0x21U; - break; - case NNMT_DATA_HEADER: - case NNMT_DATA_BODY: - case NNMT_DATA_TRAILER: - buffer[37U] = 0x23U; - buffer[38U] = 0x02U; - buffer[39U] = 0x18U; - break; - default: - return false; - } - - ::memcpy(buffer + 40U, data, 33U); - - if (m_debug) - CUtils::dump(1U, "NXDN Network Data Sent", buffer, 102U); - - return m_socket.write(buffer, 102U, m_address, m_port); -} - -void CNXDNNetwork::clock(unsigned int ms) +INXDNNetwork::~INXDNNetwork() { - unsigned char buffer[BUFFER_LENGTH]; - - in_addr address; - unsigned int port; - int length = m_socket.read(buffer, BUFFER_LENGTH, address, port); - if (length <= 0) - return; - - // Check if the data is for us - if (m_address.s_addr != address.s_addr || port != m_port) { - LogMessage("NXDN packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port); - return; - } - - // Invalid packet type? - if (::memcmp(buffer, "ICOM", 4U) != 0) - return; - - if (length != 102) - return; - - if (!m_enabled) - return; - - if (m_debug) - CUtils::dump(1U, "NXDN Network Data Received", buffer, length); - - m_buffer.addData(buffer + 40U, 33U); -} - -bool CNXDNNetwork::read(unsigned char* data) -{ - assert(data != NULL); - - if (m_buffer.isEmpty()) - return false; - - m_buffer.getData(data, 33U); - - return true; -} - -void CNXDNNetwork::reset() -{ -} - -void CNXDNNetwork::close() -{ - m_socket.close(); - - LogMessage("Closing NXDN network connection"); -} - -void CNXDNNetwork::enable(bool enabled) -{ - if (enabled && !m_enabled) - reset(); - - m_enabled = enabled; } diff --git a/NXDNNetwork.h b/NXDNNetwork.h index 3a5b78490..107e02fc1 100644 --- a/NXDNNetwork.h +++ b/NXDNNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,12 +20,8 @@ #define NXDNNetwork_H #include "NXDNDefines.h" -#include "RingBuffer.h" -#include "UDPSocket.h" -#include "Timer.h" #include -#include enum NXDN_NETWORK_MESSAGE_TYPE { NNMT_VOICE_HEADER, @@ -36,32 +32,27 @@ enum NXDN_NETWORK_MESSAGE_TYPE { NNMT_DATA_TRAILER }; -class CNXDNNetwork { +class INXDNNetwork { public: - CNXDNNetwork(const std::string& localAddress, unsigned int localPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug); - ~CNXDNNetwork(); + virtual ~INXDNNetwork() = 0; - bool open(); + virtual bool open() = 0; - void enable(bool enabled); + virtual void enable(bool enabled) = 0; - bool write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type); + virtual bool write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type) = 0; - bool read(unsigned char* data); + virtual bool read(unsigned char* data) = 0; - void reset(); + virtual void reset() = 0; - void close(); + virtual bool isConnected() const = 0; - void clock(unsigned int ms); + virtual void close() = 0; + + virtual void clock(unsigned int ms) = 0; private: - CUDPSocket m_socket; - in_addr m_address; - unsigned int m_port; - bool m_debug; - bool m_enabled; - CRingBuffer m_buffer; }; #endif diff --git a/NetworkInfo.cpp b/NetworkInfo.cpp index eb3ed6e1b..78f608049 100644 --- a/NetworkInfo.cpp +++ b/NetworkInfo.cpp @@ -26,12 +26,18 @@ #include #include -#if !defined(_WIN32) && !defined(_WIN64) +#if defined(__linux__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__APPLE__) #include +#include #include #include #include -#else +#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__APPLE__) +#include +#include +#include +#endif +#elif defined(_WIN32) || defined(_WIN64) #include #include #pragma comment(lib, "iphlpapi.lib") @@ -60,17 +66,16 @@ void CNetworkInfo::getNetworkInterface(unsigned char* info) ::strcpy((char*)info, "(address unknown)"); -#if !defined(_WIN32) && !defined(_WIN64) - const unsigned int IFLISTSIZ = 25U; +#if defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__APPLE__) + char* dflt = NULL; - FILE* fp = ::fopen("/proc/net/route" , "r"); +#if defined(__linux__) + FILE* fp = ::fopen("/proc/net/route" , "r"); // IPv4 routing if (fp == NULL) { LogError("Unabled to open /proc/route"); return; } - char* dflt = NULL; - char line[100U]; while (::fgets(line, 100U, fp)) { char* p1 = strtok(line , " \t"); @@ -86,11 +91,60 @@ void CNetworkInfo::getNetworkInterface(unsigned char* info) ::fclose(fp); +#elif defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__APPLE__) + int mib[] = { + CTL_NET, + PF_ROUTE, + 0, // protocol + AF_INET, // IPv4 routing + NET_RT_DUMP, + 0, // show all routes +#if defined(__OpenBSD__) || defined(__FreeBSD__) + 0, // table id +#endif + }; + const int cnt = sizeof(mib) / sizeof(int); + size_t size; + char ifname[IF_NAMESIZE] = {}; + + if (::sysctl(mib, cnt, NULL, &size, NULL, 0) == -1 || size <= 0) { + LogError("Unable to estimate routing table size"); + return; + } + + char *buf = new char[size]; + if (::sysctl(mib, cnt, buf, &size, NULL, 0) == -1) { + LogError("Unable to get routing table"); + delete[] buf; + return; + } + + struct rt_msghdr *rtm; + for (char *p = buf; p < buf + size; p += rtm->rtm_msglen) { + rtm = (struct rt_msghdr *)p; + if (rtm->rtm_version != RTM_VERSION) + continue; +#if defined(__OpenBSD__) + struct sockaddr_in *sa = (struct sockaddr_in *)(p + rtm->rtm_hdrlen); +#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__APPLE__) + struct sockaddr_in *sa = (struct sockaddr_in *)(rtm + 1); +#endif + if (sa->sin_addr.s_addr == INADDR_ANY) { + ::if_indextoname(rtm->rtm_index, ifname); + break; + } + } + + delete[] buf; + if (::strlen(ifname)) + dflt = ifname; +#endif if (dflt == NULL) { LogError("Unable to find the default route"); return; } + const unsigned int IFLISTSIZ = 25U; char interfacelist[IFLISTSIZ][50+INET6_ADDRSTRLEN]; for (unsigned int n = 0U; n < IFLISTSIZ; n++) interfacelist[n][0] = 0; @@ -118,12 +172,13 @@ void CNetworkInfo::getNetworkInterface(unsigned char* info) if (family == AF_INET) { ::sprintf(interfacelist[ifnr], "%s:%s", ifa->ifa_name, host); LogInfo(" IPv4: %s", interfacelist[ifnr]); + ifnr++; } else { ::sprintf(interfacelist[ifnr], "%s:%s", ifa->ifa_name, host); LogInfo(" IPv6: %s", interfacelist[ifnr]); + // due to default routing is for IPv4, other + // protocols are not candidate to display. } - - ifnr++; } } @@ -143,7 +198,7 @@ void CNetworkInfo::getNetworkInterface(unsigned char* info) } LogInfo(" IP to show: %s", info); -#else +#elif defined(_WIN32) || defined(_WIN64) PMIB_IPFORWARDTABLE pIpForwardTable = (MIB_IPFORWARDTABLE *)::malloc(sizeof(MIB_IPFORWARDTABLE)); if (pIpForwardTable == NULL) { LogError("Error allocating memory"); diff --git a/Nextion.cpp b/Nextion.cpp index 4f9c9ca89..a48aa71d5 100644 --- a/Nextion.cpp +++ b/Nextion.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2018,2020,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,7 +25,6 @@ #include #include #include -//#include const unsigned int DSTAR_RSSI_COUNT = 3U; // 3 * 420ms = 1260ms const unsigned int DSTAR_BER_COUNT = 63U; // 63 * 20ms = 1260ms @@ -37,8 +36,20 @@ const unsigned int P25_RSSI_COUNT = 7U; // 7 * 180ms = 1260ms const unsigned int P25_BER_COUNT = 7U; // 7 * 180ms = 1260ms const unsigned int NXDN_RSSI_COUNT = 28U; // 28 * 40ms = 1120ms const unsigned int NXDN_BER_COUNT = 28U; // 28 * 40ms = 1120ms +const unsigned int M17_RSSI_COUNT = 28U; // 28 * 40ms = 1120ms +const unsigned int M17_BER_COUNT = 28U; // 28 * 40ms = 1120ms -CNextion::CNextion(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool displayClock, bool utc, unsigned int idleBrightness, unsigned int screenLayout, unsigned int txFrequency, unsigned int rxFrequency, bool displayTempInF, const std::string& location) : +#define LAYOUT_COMPAT_MASK (7 << 0) // compatibility for old setting +#define LAYOUT_TA_ENABLE (1 << 4) // enable Talker Alias (TA) display +#define LAYOUT_TA_COLOUR (1 << 5) // TA display with font colour change +#define LAYOUT_TA_FONTSIZE (1 << 6) // TA display with font size change +#define LAYOUT_DIY (1 << 7) // use ON7LDS-DIY layout + +// bit[3:2] is used in Display.cpp to set connection speed for LCD panel. +// 00:low, others:high-speed. bit[2] is overlapped with LAYOUT_COMPAT_MASK. +#define LAYOUT_HIGHSPEED (3 << 2) + +CNextion::CNextion(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool displayClock, bool utc, unsigned int idleBrightness, unsigned int screenLayout, unsigned int txFrequency, unsigned int rxFrequency, bool displayTempInF) : CDisplay(), m_callsign(callsign), m_ipaddress("(ip unknown)"), @@ -49,7 +60,7 @@ m_mode(MODE_IDLE), m_displayClock(displayClock), m_utc(utc), m_idleBrightness(idleBrightness), -m_screenLayout(screenLayout), +m_screenLayout(0), m_clockDisplayTimer(1000U, 0U, 400U), m_rssiAccum1(0U), m_rssiAccum2(0U), @@ -63,11 +74,27 @@ m_txFrequency(txFrequency), m_rxFrequency(rxFrequency), m_fl_txFrequency(0.0F), m_fl_rxFrequency(0.0F), -m_displayTempInF(displayTempInF), -m_location(location) +m_displayTempInF(displayTempInF) { assert(serial != NULL); assert(brightness >= 0U && brightness <= 100U); + + static const unsigned int feature_set[] = { + 0, // 0: G4KLX + 0, // 1: (reserved, low speed) + // 2: ON7LDS + LAYOUT_TA_ENABLE | LAYOUT_TA_COLOUR | LAYOUT_TA_FONTSIZE, + LAYOUT_TA_ENABLE | LAYOUT_DIY, // 3: ON7LDS-DIY + LAYOUT_TA_ENABLE | LAYOUT_DIY, // 4: ON7LDS-DIY (high speed) + 0, // 5: (reserved, high speed) + 0, // 6: (reserved, high speed) + 0, // 7: (reserved, high speed) + }; + + if (screenLayout & ~LAYOUT_COMPAT_MASK) + m_screenLayout = screenLayout & ~LAYOUT_COMPAT_MASK; + else + m_screenLayout = feature_set[screenLayout]; } CNextion::~CNextion() @@ -94,15 +121,14 @@ bool CNextion::open() sendCommand("bkcmd=0"); sendCommandAction(0U); - m_fl_txFrequency = float(m_txFrequency) / 1000000.0F; - m_fl_rxFrequency = float(m_rxFrequency) / 1000000.0F; + m_fl_txFrequency = double(m_txFrequency) / 1000000.0F; + m_fl_rxFrequency = double(m_rxFrequency) / 1000000.0F; setIdle(); return true; } - void CNextion::setIdleInt() { // a few bits borrowed from Lieven De Samblanx ON7LDS, NextionDriver @@ -111,7 +137,7 @@ void CNextion::setIdleInt() sendCommand("page MMDVM"); sendCommandAction(1U); - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(command, "dim=%u", m_idleBrightness); sendCommand(command); } @@ -119,18 +145,18 @@ void CNextion::setIdleInt() ::sprintf(command, "t0.txt=\"%s/%u\"", m_callsign.c_str(), m_dmrid); sendCommand(command); - if (m_screenLayout > 2U) { + if (m_screenLayout & LAYOUT_DIY) { ::sprintf(command, "t4.txt=\"%s\"", m_callsign.c_str()); sendCommand(command); ::sprintf(command, "t5.txt=\"%u\"", m_dmrid); sendCommand(command); sendCommandAction(17U); - ::sprintf(command, "t30.txt=\"%3.4f\"",m_fl_rxFrequency); // RX freq + ::sprintf(command, "t30.txt=\"%3.6f\"",m_fl_rxFrequency); // RX freq sendCommand(command); sendCommandAction(20U); - ::sprintf(command, "t32.txt=\"%3.4f\"",m_fl_txFrequency); // TX freq + ::sprintf(command, "t32.txt=\"%3.6f\"",m_fl_txFrequency); // TX freq sendCommand(command); sendCommandAction(21U); @@ -153,10 +179,6 @@ void CNextion::setIdleInt() sendCommandAction(22U); } } - - ::sprintf(command, "t31.txt=\"%s\"", m_location.c_str()); // location - sendCommand(command); - sendCommandAction(23U); } else { sendCommandAction(17U); } @@ -181,7 +203,7 @@ void CNextion::setErrorInt(const char* text) sendCommandAction(1U); char command[20]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(command, "dim=%u", m_brightness); sendCommand(command); } @@ -204,7 +226,7 @@ void CNextion::setLockoutInt() sendCommandAction(1U); char command[20]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(command, "dim=%u", m_brightness); sendCommand(command); } @@ -223,7 +245,7 @@ void CNextion::setQuitInt() sendCommandAction(1U); char command[100]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(command, "dim=%u", m_idleBrightness); sendCommand(command); } @@ -240,6 +262,25 @@ void CNextion::setQuitInt() m_mode = MODE_QUIT; } +void CNextion::setFMInt() +{ + sendCommand("page MMDVM"); + sendCommandAction(1U); + + char command[20]; + if (m_brightness > 0U) { + ::sprintf(command, "dim=%u", m_brightness); + sendCommand(command); + } + + sendCommand("t0.txt=\"FM\""); + sendCommandAction(18U); + + m_clockDisplayTimer.stop(); + + m_mode = MODE_FM; +} + void CNextion::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) { assert(my1 != NULL); @@ -254,7 +295,7 @@ void CNextion::writeDStarInt(const char* my1, const char* my2, const char* your, } char text[50U]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(text, "dim=%u", m_brightness); sendCommand(text); } @@ -332,17 +373,21 @@ void CNextion::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro if (slotNo == 1U) { - if (m_screenLayout == 2U) { - sendCommand("t2.pco=0"); - sendCommand("t2.font=4"); + if (m_screenLayout & LAYOUT_TA_ENABLE) { + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t2.pco=0"); + if (m_screenLayout & LAYOUT_TA_FONTSIZE) + sendCommand("t2.font=4"); } sendCommand("t2.txt=\"2 Listening\""); sendCommandAction(69U); } else { - if (m_screenLayout == 2U) { - sendCommand("t0.pco=0"); - sendCommand("t0.font=4"); + if (m_screenLayout & LAYOUT_TA_ENABLE) { + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t0.pco=0"); + if (m_screenLayout & LAYOUT_TA_FONTSIZE) + sendCommand("t0.font=4"); } sendCommand("t0.txt=\"1 Listening\""); @@ -351,7 +396,7 @@ void CNextion::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro } char text[50U]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(text, "dim=%u", m_brightness); sendCommand(text); } @@ -359,9 +404,11 @@ void CNextion::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro if (slotNo == 1U) { ::sprintf(text, "t0.txt=\"1 %s %s\"", type, src.c_str()); - if (m_screenLayout == 2U) { - sendCommand("t0.pco=0"); - sendCommand("t0.font=4"); + if (m_screenLayout & LAYOUT_TA_ENABLE) { + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t0.pco=0"); + if (m_screenLayout & LAYOUT_TA_FONTSIZE) + sendCommand("t0.font=4"); } sendCommand(text); @@ -373,9 +420,11 @@ void CNextion::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro } else { ::sprintf(text, "t2.txt=\"2 %s %s\"", type, src.c_str()); - if (m_screenLayout == 2U) { - sendCommand("t2.pco=0"); - sendCommand("t2.font=4"); + if (m_screenLayout & LAYOUT_TA_ENABLE) { + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t2.pco=0"); + if (m_screenLayout & LAYOUT_TA_FONTSIZE) + sendCommand("t2.font=4"); } sendCommand(text); @@ -428,17 +477,19 @@ void CNextion::writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi) } } -void CNextion::writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type) +void CNextion::writeDMRTAInt(unsigned int slotNo, const unsigned char* talkerAlias, const char* type) { - if (m_screenLayout < 2U) + if (!(m_screenLayout & LAYOUT_TA_ENABLE)) return; if (type[0] == ' ') { if (slotNo == 1U) { - if (m_screenLayout == 2U) sendCommand("t0.pco=33808"); + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t8.pco=33808"); sendCommandAction(64U); } else { - if (m_screenLayout == 2U) sendCommand("t2.pco=33808"); + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t9.pco=33808"); sendCommandAction(72U); } @@ -447,35 +498,38 @@ void CNextion::writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, co if (slotNo == 1U) { char text[50U]; - ::sprintf(text, "t0.txt=\"1 %s %s\"", type, talkerAlias); + ::sprintf(text, "t8.txt=\"%s %s\"", type, talkerAlias); - if (m_screenLayout == 2U) { + if (m_screenLayout & LAYOUT_TA_FONTSIZE) { if (::strlen((char*)talkerAlias) > (16U-4U)) - sendCommand("t0.font=3"); + sendCommand("t8.font=3"); if (::strlen((char*)talkerAlias) > (20U-4U)) - sendCommand("t0.font=2"); + sendCommand("t8.font=2"); if (::strlen((char*)talkerAlias) > (24U-4U)) - sendCommand("t0.font=1"); - - sendCommand("t0.pco=1024"); + sendCommand("t8.font=1"); } + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t8.pco=1024"); + sendCommand(text); sendCommandAction(63U); } else { char text[50U]; - ::sprintf(text, "t2.txt=\"2 %s %s\"", type, talkerAlias); + ::sprintf(text, "t9.txt=\"%s %s\"", type, talkerAlias); - if (m_screenLayout == 2U) { + if (m_screenLayout & LAYOUT_TA_FONTSIZE) { if (::strlen((char*)talkerAlias) > (16U-4U)) - sendCommand("t2.font=3"); + sendCommand("t9.font=3"); if (::strlen((char*)talkerAlias) > (20U-4U)) - sendCommand("t2.font=2"); + sendCommand("t9.font=2"); if (::strlen((char*)talkerAlias) > (24U-4U)) - sendCommand("t2.font=1"); - - sendCommand("t2.pco=1024"); + sendCommand("t9.font=1"); } + + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t9.pco=1024"); + sendCommand(text); sendCommandAction(71U); } @@ -517,30 +571,36 @@ void CNextion::clearDMRInt(unsigned int slotNo) sendCommand("t0.txt=\"1 Listening\""); sendCommandAction(61U); - if (m_screenLayout == 2U) { - sendCommand("t0.pco=0"); - sendCommand("t0.font=4"); + if (m_screenLayout & LAYOUT_TA_ENABLE) { + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t0.pco=0"); + if (m_screenLayout & LAYOUT_TA_FONTSIZE) + sendCommand("t0.font=4"); } sendCommand("t1.txt=\"\""); sendCommand("t4.txt=\"\""); sendCommand("t6.txt=\"\""); + sendCommand("t8.txt=\"\""); } else { sendCommand("t2.txt=\"2 Listening\""); sendCommandAction(69U); - if (m_screenLayout == 2U) { - sendCommand("t2.pco=0"); - sendCommand("t2.font=4"); + if (m_screenLayout & LAYOUT_TA_ENABLE) { + if (m_screenLayout & LAYOUT_TA_COLOUR) + sendCommand("t2.pco=0"); + if (m_screenLayout & LAYOUT_TA_FONTSIZE) + sendCommand("t2.font=4"); } sendCommand("t3.txt=\"\""); sendCommand("t5.txt=\"\""); sendCommand("t7.txt=\"\""); + sendCommand("t9.txt=\"\""); } } -void CNextion::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CNextion::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(source != NULL); assert(dest != NULL); @@ -554,7 +614,7 @@ void CNextion::writeFusionInt(const char* source, const char* dest, const char* char text[30U]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(text, "dim=%u", m_brightness); sendCommand(text); } @@ -563,9 +623,10 @@ void CNextion::writeFusionInt(const char* source, const char* dest, const char* sendCommand(text); sendCommandAction(82U); - ::sprintf(text, "t1.txt=\"%.10s\"", dest); + ::sprintf(text, "t1.txt=\"DG-ID %u\"", dgid); sendCommand(text); sendCommandAction(83U); + if (::strcmp(origin, " ") != 0) { ::sprintf(text, "t2.txt=\"at %.10s\"", origin); sendCommand(text); @@ -632,7 +693,7 @@ void CNextion::writeP25Int(const char* source, bool group, unsigned int dest, co } char text[30U]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(text, "dim=%u", m_brightness); sendCommand(text); } @@ -704,7 +765,7 @@ void CNextion::writeNXDNInt(const char* source, bool group, unsigned int dest, c } char text[30U]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(text, "dim=%u", m_brightness); sendCommand(text); } @@ -765,6 +826,79 @@ void CNextion::clearNXDNInt() sendCommand("t3.txt=\"\""); } +void CNextion::writeM17Int(const char* source, const char* dest, const char* type) +{ + assert(source != NULL); + assert(dest != NULL); + assert(type != NULL); + + if (m_mode != MODE_M17) { + sendCommand("page M17"); + sendCommandAction(8U); + } + + char text[30U]; + if (m_brightness > 0U) { + ::sprintf(text, "dim=%u", m_brightness); + sendCommand(text); + } + + ::sprintf(text, "t0.txt=\"%s %.10s\"", type, source); + sendCommand(text); + sendCommandAction(142U); + + ::sprintf(text, "t1.txt=\"%s\"", dest); + sendCommand(text); + sendCommandAction(143U); + + m_clockDisplayTimer.stop(); + + m_mode = MODE_M17; + m_rssiAccum1 = 0U; + m_berAccum1 = 0.0F; + m_rssiCount1 = 0U; + m_berCount1 = 0U; +} + +void CNextion::writeM17RSSIInt(unsigned char rssi) +{ + m_rssiAccum1 += rssi; + m_rssiCount1++; + + if (m_rssiCount1 == M17_RSSI_COUNT) { + char text[25U]; + ::sprintf(text, "t2.txt=\"-%udBm\"", m_rssiAccum1 / M17_RSSI_COUNT); + sendCommand(text); + sendCommandAction(144U); + m_rssiAccum1 = 0U; + m_rssiCount1 = 0U; + } +} + +void CNextion::writeM17BERInt(float ber) +{ + m_berAccum1 += ber; + m_berCount1++; + + if (m_berCount1 == M17_BER_COUNT) { + char text[25U]; + ::sprintf(text, "t3.txt=\"%.1f%%\"", m_berAccum1 / float(M17_BER_COUNT)); + sendCommand(text); + sendCommandAction(145U); + m_berAccum1 = 0.0F; + m_berCount1 = 0U; + } +} + +void CNextion::clearM17Int() +{ + sendCommand("t0.txt=\"Listening\""); + sendCommandAction(141U); + sendCommand("t1.txt=\"\""); + sendCommand("t2.txt=\"\""); + sendCommand("t3.txt=\"\""); +} + void CNextion::writePOCSAGInt(uint32_t ric, const std::string& message) { if (m_mode != MODE_POCSAG) { @@ -773,7 +907,7 @@ void CNextion::writePOCSAGInt(uint32_t ric, const std::string& message) } char text[200U]; - if (m_brightness>0) { + if (m_brightness > 0U) { ::sprintf(text, "dim=%u", m_brightness); sendCommand(text); } @@ -844,13 +978,14 @@ void CNextion::close() void CNextion::sendCommandAction(unsigned int status) { - if (m_screenLayout<3U) + if (!(m_screenLayout & LAYOUT_DIY)) return; - char text[30U]; - ::sprintf(text, "MMDVM.status.val=%d", status); - sendCommand(text); - sendCommand("click S0,1"); + char text[30U]; + ::sprintf(text, "MMDVM.status.val=%d", status); + sendCommand(text); + + sendCommand("click S0,1"); } void CNextion::sendCommand(const char* command) @@ -859,8 +994,10 @@ void CNextion::sendCommand(const char* command) m_serial->write((unsigned char*)command, (unsigned int)::strlen(command)); m_serial->write((unsigned char*)"\xFF\xFF\xFF", 3U); + // Since we just firing commands at the display, and not listening for the response, // we must add a bit of a delay to allow the display to process the commands, else some are getting mangled. // 10 ms is just a guess, but seems to be sufficient. - CThread::sleep(10U); - } + CThread::sleep(10U); +} + diff --git a/Nextion.h b/Nextion.h index 1c70134f0..278209728 100644 --- a/Nextion.h +++ b/Nextion.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2018,2020,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,83 +29,87 @@ class CNextion : public CDisplay { public: - CNextion(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool displayClock, bool utc, unsigned int idleBrightness, unsigned int screenLayout, unsigned int txFrequency, unsigned int rxFrequency, bool displayTempInF, const std::string& location); - virtual ~CNextion(); + CNextion(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool displayClock, bool utc, unsigned int idleBrightness, unsigned int screenLayout, unsigned int txFrequency, unsigned int rxFrequency, bool displayTempInF); + virtual ~CNextion(); - virtual bool open(); + virtual bool open(); - virtual void close(); + virtual void close(); protected: - virtual void setIdleInt(); - virtual void setErrorInt(const char* text); - virtual void setLockoutInt(); - virtual void setQuitInt(); - - virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); - virtual void writeDStarRSSIInt(unsigned char rssi); - virtual void writeDStarBERInt(float ber); - virtual void clearDStarInt(); - - virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); - virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); - virtual void writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type); - - virtual void writeDMRBERInt(unsigned int slotNo, float ber); - virtual void clearDMRInt(unsigned int slotNo); - - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); - virtual void writeFusionRSSIInt(unsigned char rssi); - virtual void writeFusionBERInt(float ber); - virtual void clearFusionInt(); - - virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); - virtual void writeP25RSSIInt(unsigned char rssi); - virtual void writeP25BERInt(float ber); - virtual void clearP25Int(); - - virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); - virtual void writeNXDNRSSIInt(unsigned char rssi); - virtual void writeNXDNBERInt(float ber); - virtual void clearNXDNInt(); - - virtual void writePOCSAGInt(uint32_t ric, const std::string& message); - virtual void clearPOCSAGInt(); - - virtual void writeCWInt(); - virtual void clearCWInt(); - - virtual void clockInt(unsigned int ms); + virtual void setIdleInt(); + virtual void setErrorInt(const char* text); + virtual void setLockoutInt(); + virtual void setQuitInt(); + virtual void setFMInt(); + + virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); + virtual void writeDStarRSSIInt(unsigned char rssi); + virtual void writeDStarBERInt(float ber); + virtual void clearDStarInt(); + + virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); + virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); + virtual void writeDMRTAInt(unsigned int slotNo, const unsigned char* talkerAlias, const char* type); + virtual void writeDMRBERInt(unsigned int slotNo, float ber); + virtual void clearDMRInt(unsigned int slotNo); + + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); + virtual void writeFusionRSSIInt(unsigned char rssi); + virtual void writeFusionBERInt(float ber); + virtual void clearFusionInt(); + + virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); + virtual void writeP25RSSIInt(unsigned char rssi); + virtual void writeP25BERInt(float ber); + virtual void clearP25Int(); + + virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); + virtual void writeNXDNRSSIInt(unsigned char rssi); + virtual void writeNXDNBERInt(float ber); + virtual void clearNXDNInt(); + + virtual void writeM17Int(const char* source, const char* dest, const char* type); + virtual void writeM17RSSIInt(unsigned char rssi); + virtual void writeM17BERInt(float ber); + virtual void clearM17Int(); + + virtual void writePOCSAGInt(uint32_t ric, const std::string& message); + virtual void clearPOCSAGInt(); + + virtual void writeCWInt(); + virtual void clearCWInt(); + + virtual void clockInt(unsigned int ms); private: - std::string m_callsign; - std::string m_ipaddress; - unsigned int m_dmrid; - ISerialPort* m_serial; - unsigned int m_brightness; - unsigned char m_mode; - bool m_displayClock; - bool m_utc; - unsigned int m_idleBrightness; - unsigned int m_screenLayout; - CTimer m_clockDisplayTimer; - unsigned int m_rssiAccum1; - unsigned int m_rssiAccum2; - float m_berAccum1; - float m_berAccum2; - unsigned int m_rssiCount1; - unsigned int m_rssiCount2; - unsigned int m_berCount1; - unsigned int m_berCount2; - unsigned int m_txFrequency; - unsigned int m_rxFrequency; - float m_fl_txFrequency; - float m_fl_rxFrequency; - bool m_displayTempInF; - std::string m_location; - - void sendCommand(const char* command); - void sendCommandAction(unsigned int status); + std::string m_callsign; + std::string m_ipaddress; + unsigned int m_dmrid; + ISerialPort* m_serial; + unsigned int m_brightness; + unsigned char m_mode; + bool m_displayClock; + bool m_utc; + unsigned int m_idleBrightness; + unsigned int m_screenLayout; + CTimer m_clockDisplayTimer; + unsigned int m_rssiAccum1; + unsigned int m_rssiAccum2; + float m_berAccum1; + float m_berAccum2; + unsigned int m_rssiCount1; + unsigned int m_rssiCount2; + unsigned int m_berCount1; + unsigned int m_berCount2; + unsigned int m_txFrequency; + unsigned int m_rxFrequency; + double m_fl_txFrequency; + double m_fl_rxFrequency; + bool m_displayTempInF; + + void sendCommand(const char* command); + void sendCommandAction(unsigned int status); }; #endif diff --git a/Nextion_G4KLX/NX3224K024.HMI b/Nextion_G4KLX/NX3224K024.HMI index 61c8067a9..ef8698bed 100644 Binary files a/Nextion_G4KLX/NX3224K024.HMI and b/Nextion_G4KLX/NX3224K024.HMI differ diff --git a/Nextion_G4KLX/NX3224K024.tft b/Nextion_G4KLX/NX3224K024.tft index 417aefd74..b1a66da31 100644 Binary files a/Nextion_G4KLX/NX3224K024.tft and b/Nextion_G4KLX/NX3224K024.tft differ diff --git a/Nextion_G4KLX/NX3224K028.HMI b/Nextion_G4KLX/NX3224K028.HMI index b4ebbc344..f6c147591 100644 Binary files a/Nextion_G4KLX/NX3224K028.HMI and b/Nextion_G4KLX/NX3224K028.HMI differ diff --git a/Nextion_G4KLX/NX3224K028.tft b/Nextion_G4KLX/NX3224K028.tft index 7880b8cb8..28b552d13 100644 Binary files a/Nextion_G4KLX/NX3224K028.tft and b/Nextion_G4KLX/NX3224K028.tft differ diff --git a/Nextion_G4KLX/NX3224T024.HMI b/Nextion_G4KLX/NX3224T024.HMI index 44f1538bd..ae1204dd3 100644 Binary files a/Nextion_G4KLX/NX3224T024.HMI and b/Nextion_G4KLX/NX3224T024.HMI differ diff --git a/Nextion_G4KLX/NX3224T024.tft b/Nextion_G4KLX/NX3224T024.tft index 3699e858f..06ad235ef 100644 Binary files a/Nextion_G4KLX/NX3224T024.tft and b/Nextion_G4KLX/NX3224T024.tft differ diff --git a/Nextion_G4KLX/NX3224T028.HMI b/Nextion_G4KLX/NX3224T028.HMI index 3864b3475..744dd0779 100644 Binary files a/Nextion_G4KLX/NX3224T028.HMI and b/Nextion_G4KLX/NX3224T028.HMI differ diff --git a/Nextion_G4KLX/NX3224T028.tft b/Nextion_G4KLX/NX3224T028.tft index 034441b1c..22094938b 100644 Binary files a/Nextion_G4KLX/NX3224T028.tft and b/Nextion_G4KLX/NX3224T028.tft differ diff --git a/Nextion_G4KLX/NX4024K032.HMI b/Nextion_G4KLX/NX4024K032.HMI index 7df6343ea..85cdc4811 100644 Binary files a/Nextion_G4KLX/NX4024K032.HMI and b/Nextion_G4KLX/NX4024K032.HMI differ diff --git a/Nextion_G4KLX/NX4024K032.tft b/Nextion_G4KLX/NX4024K032.tft index 92b2843e9..04da59ad9 100644 Binary files a/Nextion_G4KLX/NX4024K032.tft and b/Nextion_G4KLX/NX4024K032.tft differ diff --git a/Nextion_G4KLX/NX4024T032.HMI b/Nextion_G4KLX/NX4024T032.HMI index 03cd4a81f..10dbda426 100644 Binary files a/Nextion_G4KLX/NX4024T032.HMI and b/Nextion_G4KLX/NX4024T032.HMI differ diff --git a/Nextion_G4KLX/NX4024T032.tft b/Nextion_G4KLX/NX4024T032.tft index 9405c5ef9..31ba9715b 100644 Binary files a/Nextion_G4KLX/NX4024T032.tft and b/Nextion_G4KLX/NX4024T032.tft differ diff --git a/Nextion_G4KLX/NX4832K035.HMI b/Nextion_G4KLX/NX4832K035.HMI index e1c2cf46c..36930826f 100644 Binary files a/Nextion_G4KLX/NX4832K035.HMI and b/Nextion_G4KLX/NX4832K035.HMI differ diff --git a/Nextion_G4KLX/NX4832K035.tft b/Nextion_G4KLX/NX4832K035.tft index 71fc6d878..ff3678d64 100644 Binary files a/Nextion_G4KLX/NX4832K035.tft and b/Nextion_G4KLX/NX4832K035.tft differ diff --git a/Nextion_G4KLX/NX4832T035.HMI b/Nextion_G4KLX/NX4832T035.HMI index 312817814..cda3ced11 100644 Binary files a/Nextion_G4KLX/NX4832T035.HMI and b/Nextion_G4KLX/NX4832T035.HMI differ diff --git a/Nextion_G4KLX/NX4832T035.tft b/Nextion_G4KLX/NX4832T035.tft index 5643caac9..dd9c7a26b 100644 Binary files a/Nextion_G4KLX/NX4832T035.tft and b/Nextion_G4KLX/NX4832T035.tft differ diff --git a/Nextion_ON7LDS/NX3224T024-L2.HMI b/Nextion_ON7LDS/NX3224T024-L2.HMI index e444afa37..f4896ddcc 100644 Binary files a/Nextion_ON7LDS/NX3224T024-L2.HMI and b/Nextion_ON7LDS/NX3224T024-L2.HMI differ diff --git a/Nextion_ON7LDS/NX3224T024-L2.tft b/Nextion_ON7LDS/NX3224T024-L2.tft index 5ef6c1815..c92909209 100644 Binary files a/Nextion_ON7LDS/NX3224T024-L2.tft and b/Nextion_ON7LDS/NX3224T024-L2.tft differ diff --git a/Nextion_ON7LDS/NX3224T024-L3.HMI b/Nextion_ON7LDS/NX3224T024-L3.HMI index 36d084331..f2c1330e5 100644 Binary files a/Nextion_ON7LDS/NX3224T024-L3.HMI and b/Nextion_ON7LDS/NX3224T024-L3.HMI differ diff --git a/Nextion_ON7LDS/NX3224T024-L3.tft b/Nextion_ON7LDS/NX3224T024-L3.tft index df3405f4d..4ba460964 100644 Binary files a/Nextion_ON7LDS/NX3224T024-L3.tft and b/Nextion_ON7LDS/NX3224T024-L3.tft differ diff --git a/Nextion_ON7LDS/NX3224T028-L2.HMI b/Nextion_ON7LDS/NX3224T028-L2.HMI index 8fca48b86..768ed5675 100644 Binary files a/Nextion_ON7LDS/NX3224T028-L2.HMI and b/Nextion_ON7LDS/NX3224T028-L2.HMI differ diff --git a/Nextion_ON7LDS/NX3224T028-L2.tft b/Nextion_ON7LDS/NX3224T028-L2.tft index 610f8c9ff..2ffd4cea8 100644 Binary files a/Nextion_ON7LDS/NX3224T028-L2.tft and b/Nextion_ON7LDS/NX3224T028-L2.tft differ diff --git a/Nextion_ON7LDS/NX3224T028-L3.HMI b/Nextion_ON7LDS/NX3224T028-L3.HMI index f19c866ea..31ca68802 100644 Binary files a/Nextion_ON7LDS/NX3224T028-L3.HMI and b/Nextion_ON7LDS/NX3224T028-L3.HMI differ diff --git a/Nextion_ON7LDS/NX3224T028-L3.tft b/Nextion_ON7LDS/NX3224T028-L3.tft index cf5c83192..99647e3c8 100644 Binary files a/Nextion_ON7LDS/NX3224T028-L3.tft and b/Nextion_ON7LDS/NX3224T028-L3.tft differ diff --git a/Nextion_ON7LDS/NX4024T032-L2.HMI b/Nextion_ON7LDS/NX4024T032-L2.HMI index 458587411..331aac6a2 100644 Binary files a/Nextion_ON7LDS/NX4024T032-L2.HMI and b/Nextion_ON7LDS/NX4024T032-L2.HMI differ diff --git a/Nextion_ON7LDS/NX4024T032-L2.tft b/Nextion_ON7LDS/NX4024T032-L2.tft index b310ce44a..abec64c35 100644 Binary files a/Nextion_ON7LDS/NX4024T032-L2.tft and b/Nextion_ON7LDS/NX4024T032-L2.tft differ diff --git a/Nextion_ON7LDS/NX4832T035-L2.HMI b/Nextion_ON7LDS/NX4832T035-L2.HMI index 1925206dc..9bb0de2e6 100644 Binary files a/Nextion_ON7LDS/NX4832T035-L2.HMI and b/Nextion_ON7LDS/NX4832T035-L2.HMI differ diff --git a/Nextion_ON7LDS/NX4832T035-L2.tft b/Nextion_ON7LDS/NX4832T035-L2.tft index e2317e218..960795c3d 100644 Binary files a/Nextion_ON7LDS/NX4832T035-L2.tft and b/Nextion_ON7LDS/NX4832T035-L2.tft differ diff --git a/Nextion_ON7LDS/NX4832T035-L3.HMI b/Nextion_ON7LDS/NX4832T035-L3.HMI index 4c809c87c..c7ca2edfe 100644 Binary files a/Nextion_ON7LDS/NX4832T035-L3.HMI and b/Nextion_ON7LDS/NX4832T035-L3.HMI differ diff --git a/Nextion_ON7LDS/NX4832T035-L3.tft b/Nextion_ON7LDS/NX4832T035-L3.tft index 1b93611d7..45ee4687e 100644 Binary files a/Nextion_ON7LDS/NX4832T035-L3.tft and b/Nextion_ON7LDS/NX4832T035-L3.tft differ diff --git a/Nextion_ON7LDS/README-L3 b/Nextion_ON7LDS/README-L3 index 325bf041b..7846be52c 100644 --- a/Nextion_ON7LDS/README-L3 +++ b/Nextion_ON7LDS/README-L3 @@ -85,8 +85,8 @@ NOTE: it might be good to *not* remove fields from the display when you do not Status codes that will be sent: ------------------------------- -The status code gives more information about what was sent in the -changed field. +The status code gives more information about which type of information +was sent to the display. 1 : page MMDVM 2 : page D-Star @@ -95,7 +95,9 @@ changed field. 5 : page P25 6 : page NXDN 7 : page POCSAG - + 8 : page M17 + +MMDVMHOST 11 : IDLE 12 : CW 13 : ERROR text @@ -109,6 +111,7 @@ changed field. 22 : Temperature 23 : Location +DSTAR 41 : D-Star listening 42 : type/my1/my2 45 : your @@ -116,6 +119,7 @@ changed field. 47 : RSSI 48 : ber +DMR 61 : DMR listening1 62 : ID1 63 : TA1 @@ -133,6 +137,7 @@ changed field. 76 : GPS1 (t8,t9,t12) 77 : GPS2 (t10,t11,t13) +YSF 81 : YSF listening 82 : src 83 : dest @@ -140,22 +145,31 @@ changed field. 85 : RSSI 86 : ber +P25 101 : P25 listening 102 : source 103 : dest 104 : RSSI 105 : ber +NXDN 121 : NXDN listening 122 : source 123 : dest 124 : RSSI 125 : ber +POCSAG 132 : RIC 133 : message text 134 : waiting +M17 +141 : M17 listening +142 : source +143 : dest +144 : RSSI +145 : ber Fields (and their numbers) on the pages, used by MMDVMHost ---------------------------------------------------------- @@ -227,3 +241,9 @@ t3 : ber POCSAG t0 : waiting / RIC t1 : message + +M17 +t0 : source +t1 : dst +t2 : rssi +t3 : ber diff --git a/Nextion_ON7LDS/README.md b/Nextion_ON7LDS/README.md index bae6a567d..4cc5bb942 100644 --- a/Nextion_ON7LDS/README.md +++ b/Nextion_ON7LDS/README.md @@ -1,6 +1,15 @@ Nextion Display Layouts by ON7LDS (for MMDVMHost) ================================================= +##### WARNING +These layouts should be opened with Nextion Editor LTS (v0.53) +The fonts that are used are made by me at the time (with 'zi edit') and are (in my opinion) very good readable and compact to show as much as possible. +Nextion has changed a lot since then and sadly, these fonts seem not to be compatible with later versions of Nextion Editor. + + + +##### Use + The screenlayout has to be selected with the parameter **ScreenLayout** in the MMDVM.ini file under the Nextion section. This way, the extra functions are activated. diff --git a/NullController.cpp b/NullController.cpp new file mode 100644 index 000000000..eeb771755 --- /dev/null +++ b/NullController.cpp @@ -0,0 +1,185 @@ +/* +* Copyright (C) 2021 by Jonathan Naylor G4KLX +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "NullController.h" + +#include +#include +#include + +const unsigned char MMDVM_FRAME_START = 0xE0U; + +const unsigned char MMDVM_GET_VERSION = 0x00U; +const unsigned char MMDVM_GET_STATUS = 0x01U; +const unsigned char MMDVM_SET_CONFIG = 0x02U; +const unsigned char MMDVM_SET_MODE = 0x03U; +const unsigned char MMDVM_SET_FREQ = 0x04U; + +const unsigned char MMDVM_FM_PARAMS1 = 0x60U; +const unsigned char MMDVM_FM_PARAMS2 = 0x61U; +const unsigned char MMDVM_FM_PARAMS3 = 0x62U; +const unsigned char MMDVM_FM_PARAMS4 = 0x63U; + +const unsigned char MMDVM_ACK = 0x70U; +const unsigned char MMDVM_NAK = 0x7FU; + +const unsigned char PROTOCOL_VERSION = 2U; + +const char* HARDWARE = "Null Modem Controller"; + +CNullController::CNullController() : +m_buffer(200U, "Null Controller Buffer") +{ +} + +CNullController::~CNullController() +{ +} + +bool CNullController::open() +{ + return true; +} + +int CNullController::read(unsigned char* buffer, unsigned int length) +{ + unsigned int dataSize = m_buffer.dataSize(); + if (dataSize == 0U) + return 0; + + if (length > dataSize) + length = dataSize; + + m_buffer.getData(buffer, length); + + return int(length); +} + +int CNullController::write(const unsigned char* buffer, unsigned int length) +{ + switch (buffer[2U]) { + case MMDVM_GET_VERSION: + writeVersion(); + break; + case MMDVM_GET_STATUS: + writeStatus(); + break; + case MMDVM_SET_CONFIG: + case MMDVM_SET_FREQ: + case MMDVM_SET_MODE: + case MMDVM_FM_PARAMS1: + case MMDVM_FM_PARAMS2: + case MMDVM_FM_PARAMS3: + case MMDVM_FM_PARAMS4: + writeAck(buffer[2U]); + break; + default: + break; + } + + return int(length); +} + + +void CNullController::close() +{ +} + +void CNullController::writeVersion() +{ + unsigned char reply[200U]; + + reply[0U] = MMDVM_FRAME_START; + reply[1U] = 0U; + reply[2U] = MMDVM_GET_VERSION; + + reply[3U] = PROTOCOL_VERSION; + + // Return two bytes of mode capabilities + reply[4U] = 0xFFU; + reply[5U] = 0xFFU; + + // CPU type/manufacturer. 0=Atmel ARM, 1=NXP ARM, 2=St-Micro ARM + reply[6U] = 2U; + + // Reserve 16 bytes for the UDID + ::memset(reply + 7U, 0x00U, 16U); + + uint8_t count = 23U; + for (uint8_t i = 0U; HARDWARE[i] != 0x00U; i++, count++) + reply[count] = HARDWARE[i]; + + reply[1U] = count; + + m_buffer.addData(reply, count); +} + +void CNullController::writeStatus() +{ + unsigned char reply[30U]; + + // Send all sorts of interesting internal values + reply[0U] = MMDVM_FRAME_START; + reply[1U] = 20U; + reply[2U] = MMDVM_GET_STATUS; + + reply[3U] = 0U; + + reply[4U] = 0x00U; + + reply[5U] = 0x00U; + + reply[6U] = 20U; + + reply[7U] = 20U; + reply[8U] = 20U; + + reply[9U] = 20U; + + reply[10U] = 20U; + + reply[11U] = 20U; + + reply[12U] = 20U; + + reply[13U] = 20U; + + reply[14U] = 0x00U; + reply[15U] = 0x00U; + + reply[16U] = 20U; + + reply[17U] = 20U; + + reply[18U] = 0x00U; + reply[19U] = 0x00U; + + m_buffer.addData(reply, 20U); +} + +void CNullController::writeAck(unsigned char type) +{ + unsigned char reply[4U]; + + reply[0U] = MMDVM_FRAME_START; + reply[1U] = 4U; + reply[2U] = MMDVM_ACK; + reply[3U] = type; + + m_buffer.addData(reply, 4U); +} diff --git a/UMP.h b/NullController.h similarity index 59% rename from UMP.h rename to NullController.h index 1acc3c162..1d8da6389 100644 --- a/UMP.h +++ b/NullController.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016 by Jonathan Naylor G4KLX +* Copyright (C) 2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,48 +16,36 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#if !defined(UMP_H) -#define UMP_H +#ifndef NullController_H +#define NullController_H -#include "SerialController.h" -#include "SerialPort.h" +#include "ModemPort.h" -#include +#include "RingBuffer.h" -class CUMP : public ISerialPort -{ +class CNullController : public IModemPort { public: - CUMP(const std::string& port); - virtual ~CUMP(); + CNullController(); + virtual ~CNullController(); virtual bool open(); - bool setMode(unsigned char mode); - - bool setTX(bool on); - - bool setCD(bool on); - - bool getLockout() const; - virtual int read(unsigned char* buffer, unsigned int length); virtual int write(const unsigned char* buffer, unsigned int length); - void clock(unsigned int ms); - virtual void close(); + +#if defined(__APPLE__) + int setNonblock(bool nonblock) { return 0; } +#endif private: - CSerialController m_serial; - bool m_open; - unsigned char* m_buffer; - unsigned int m_length; - unsigned int m_offset; - bool m_lockout; - unsigned char m_mode; - bool m_tx; - bool m_cd; + CRingBuffer m_buffer; + + void writeVersion(); + void writeStatus(); + void writeAck(unsigned char type); }; #endif diff --git a/NullDisplay.cpp b/NullDisplay.cpp index 6219ec824..5708028f9 100644 --- a/NullDisplay.cpp +++ b/NullDisplay.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2018,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,6 +60,10 @@ void CNullDisplay::setQuitInt() { } +void CNullDisplay::setFMInt() +{ +} + void CNullDisplay::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) { #if defined(RASPBERRY_PI) @@ -88,7 +92,7 @@ void CNullDisplay::clearDMRInt(unsigned int slotNo) #endif } -void CNullDisplay::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void CNullDisplay::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { #if defined(RASPBERRY_PI) ::digitalWrite(LED_STATUS, 1); @@ -130,6 +134,20 @@ void CNullDisplay::clearNXDNInt() #endif } +void CNullDisplay::writeM17Int(const char* source, const char* dest, const char* type) +{ +#if defined(RASPBERRY_PI) + ::digitalWrite(LED_STATUS, 1); +#endif +} + +void CNullDisplay::clearM17Int() +{ +#if defined(RASPBERRY_PI) + ::digitalWrite(LED_STATUS, 0); +#endif +} + void CNullDisplay::writePOCSAGInt(uint32_t ric, const std::string& message) { #if defined(RASPBERRY_PI) diff --git a/NullDisplay.h b/NullDisplay.h index 50f40b8cc..e49eac363 100644 --- a/NullDisplay.h +++ b/NullDisplay.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2018,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,18 +26,19 @@ class CNullDisplay : public CDisplay { public: - CNullDisplay(); - virtual ~CNullDisplay(); + CNullDisplay(); + virtual ~CNullDisplay(); - virtual bool open(); + virtual bool open(); - virtual void close(); + virtual void close(); protected: virtual void setIdleInt(); virtual void setErrorInt(const char* text); virtual void setLockoutInt(); virtual void setQuitInt(); + virtual void setFMInt(); virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); virtual void clearDStarInt(); @@ -45,7 +46,7 @@ class CNullDisplay : public CDisplay virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); virtual void clearFusionInt(); virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); @@ -54,6 +55,9 @@ class CNullDisplay : public CDisplay virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); virtual void clearNXDNInt(); + virtual void writeM17Int(const char* source, const char* dest, const char* type); + virtual void clearM17Int(); + virtual void writePOCSAGInt(uint32_t ric, const std::string& message); virtual void clearPOCSAGInt(); diff --git a/NullModem.h b/NullModem.h deleted file mode 100644 index 2698f47f6..000000000 --- a/NullModem.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2011-2018 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef NULLMODEM_H -#define NULLMODEM_H - -#include "Modem.h" -#include "Defines.h" - -#include - - -class CNullModem : public CModem { -public: - CNullModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug); - virtual ~CNullModem(); - - virtual void setSerialParams(const std::string& protocol, unsigned int address){}; - virtual void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency){}; - virtual void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool pocsagEnabled){}; - virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel){}; - virtual void setDMRParams(unsigned int colorCode){}; - virtual void setYSFParams(bool loDev, unsigned int txHang){}; - virtual void setTransparentDataParams(unsigned int sendFrameType){}; - - virtual bool open(); - - virtual unsigned int readDStarData(unsigned char* data){return 0;}; - virtual unsigned int readDMRData1(unsigned char* data){return 0;}; - virtual unsigned int readDMRData2(unsigned char* data){return 0;}; - virtual unsigned int readYSFData(unsigned char* data){return 0;}; - virtual unsigned int readP25Data(unsigned char* data){return 0;}; - virtual unsigned int readNXDNData(unsigned char* data){return 0;}; - virtual unsigned int readTransparentData(unsigned char* data){return 0;}; - - virtual unsigned int readSerial(unsigned char* data, unsigned int length){return 0;}; - - virtual bool hasDStarSpace()const {return true;}; - virtual bool hasDMRSpace1() const {return true;}; - virtual bool hasDMRSpace2() const {return true;}; - virtual bool hasYSFSpace() const {return true;}; - virtual bool hasP25Space() const {return true;}; - virtual bool hasNXDNSpace() const {return true;}; - virtual bool hasPOCSAGSpace() const{return true;}; - - virtual bool hasTX() const {return false;}; - virtual bool hasCD() const {return false;}; - - virtual bool hasLockout() const {return false;}; - virtual bool hasError() const {return false;}; - - virtual bool writeDStarData(const unsigned char* data, unsigned int length){return true;}; - virtual bool writeDMRData1(const unsigned char* data, unsigned int length){return true;}; - virtual bool writeDMRData2(const unsigned char* data, unsigned int length){return true;}; - virtual bool writeYSFData(const unsigned char* data, unsigned int length){return true;}; - virtual bool writeP25Data(const unsigned char* data, unsigned int length){return true;}; - virtual bool writeNXDNData(const unsigned char* data, unsigned int length){return true;}; - virtual bool writePOCSAGData(const unsigned char* data, unsigned int length){return true;}; - - virtual bool writeTransparentData(const unsigned char* data, unsigned int length){return true;}; - - virtual bool writeDStarInfo(const char* my1, const char* my2, const char* your, const char* type, const char* reflector){return true;}; - virtual bool writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type){return true;}; - virtual bool writeYSFInfo(const char* source, const char* dest, const char* type, const char* origin){return true;}; - virtual bool writeP25Info(const char* source, bool group, unsigned int dest, const char* type){return true;}; - virtual bool writeNXDNInfo(const char* source, bool group, unsigned int dest, const char* type){return true;}; - virtual bool writePOCSAGInfo(unsigned int ric, const std::string& message){return true;}; - virtual bool writeIPInfo(const std::string& address){return true;}; - - virtual bool writeDMRStart(bool tx){return true;}; - virtual bool writeDMRShortLC(const unsigned char* lc){return true;}; - virtual bool writeDMRAbort(unsigned int slotNo){return true;}; - - virtual bool writeSerial(const unsigned char* data, unsigned int length){return true;}; - - virtual bool setMode(unsigned char mode){return true;}; - - virtual bool sendCWId(const std::string& callsign){return true;}; - - virtual HW_TYPE getHWType() const {return m_hwType;}; - - virtual void clock(unsigned int ms){}; - - virtual void close(){}; - -private: - HW_TYPE m_hwType; -}; - -#endif diff --git a/OLED.cpp b/OLED.cpp index a46970dbb..da7d91d25 100644 --- a/OLED.cpp +++ b/OLED.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2018,2020,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,7 +20,7 @@ #include "Log.h" static bool networkInfoInitialized = false; -static unsigned char passCounter = 0; +static unsigned char passCounter = 0U; //Logo MMDVM for Idle Screen static unsigned char logo_glcd_bmp[] = @@ -86,7 +86,7 @@ static unsigned char logo_dmr_bmp[] = }; //Logo Fusion 128x16 -const unsigned char logo_fusion_bmp [] = +const unsigned char logo_fusion_bmp[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -107,7 +107,7 @@ const unsigned char logo_fusion_bmp [] = }; //Logo P25 128x16px -const unsigned char logo_P25_bmp [] = +const unsigned char logo_P25_bmp[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xf8, 0x00, @@ -128,7 +128,7 @@ const unsigned char logo_P25_bmp [] = }; // Logo NXDN_sm, 128x16px -const unsigned char logo_NXDN_bmp [] = +const unsigned char logo_NXDN_bmp[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, @@ -148,8 +148,29 @@ const unsigned char logo_NXDN_bmp [] = 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; +// Logo M17_sm, 128x16px +const unsigned char logo_M17_bmp[] = +{ +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x37, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x33, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x77, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x77, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x67, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x60, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + // Logo POCASG/DAPNET, 128x16px -const unsigned char logo_POCSAG_bmp [] = +const unsigned char logo_POCSAG_bmp[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xfe, 0x03, 0xfe, 0xfe, 0x03, 0xdf, 0xf6, 0x00, 0x00, 0x1f, 0xff, @@ -169,15 +190,15 @@ const unsigned char logo_POCSAG_bmp [] = 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; -COLED::COLED(unsigned char displayType, unsigned char displayBrightness, bool displayInvert, bool displayScroll, bool displayRotate, bool slot1Enabled, bool slot2Enabled, CModem* modem) : +COLED::COLED(unsigned char displayType, unsigned char displayBrightness, bool displayInvert, bool displayScroll, bool displayRotate, bool displayLogoScreensaver, bool duplex) : +CDisplay(), m_displayType(displayType), m_displayBrightness(displayBrightness), m_displayInvert(displayInvert), m_displayScroll(displayScroll), m_displayRotate(displayRotate), -m_slot1Enabled(slot1Enabled), -m_slot2Enabled(slot2Enabled), -m_modem(modem), +m_displayLogoScreensaver(displayLogoScreensaver), +m_duplex(duplex), m_ipaddress(), m_display() { @@ -189,436 +210,642 @@ COLED::~COLED() bool COLED::open() { + // SPI + if (m_display.oled_is_spi_proto(m_displayType)) { + // SPI change parameters to fit to your LCD + if (!m_display.init(OLED_SPI_DC, OLED_SPI_RESET, OLED_SPI_CS, m_displayType)) + return false; + } else { + // I2C change parameters to fit to your LCD + if (!m_display.init(OLED_I2C_RESET, m_displayType)) + return false; + } + + m_display.begin(); + + m_display.invertDisplay(m_displayInvert ? 1 : 0); + if (m_displayBrightness > 0U) + m_display.setBrightness(m_displayBrightness); + + if (m_displayRotate > 0U) { + m_display.sendCommand(0xC0); + m_display.sendCommand(0xA0); + } + + // Init done + m_display.setTextWrap(false); // disable text wrap as default + m_display.clearDisplay(); // clears the screen buffer + m_display.display(); // display it (clear display) + + OLED_statusbar(); + + m_display.setCursor(0, OLED_LINE4); + m_display.setTextSize(1); + m_display.print(" -Initializing-"); + m_display.display(); + + return true; +} - // SPI - if (m_display.oled_is_spi_proto(m_displayType)) - { - // SPI change parameters to fit to your LCD - if ( !m_display.init(OLED_SPI_DC,OLED_SPI_RESET,OLED_SPI_CS, m_displayType) ) - return false; - } - else - { - // I2C change parameters to fit to your LCD - if ( !m_display.init(OLED_I2C_RESET, m_displayType) ) - return false; - } - - - m_display.begin(); - - m_display.invertDisplay(m_displayInvert ? 1 : 0); - if (m_displayBrightness > 0U) - m_display.setBrightness(m_displayBrightness); - - if (m_displayRotate > 0U) { - m_display.sendCommand(0xC0); - m_display.sendCommand(0xA0); - } +float COLED::readTemperature(const char* filePath) +{ + std::ifstream file(filePath); + if (!file.is_open()) { + std::cerr << "Error: Could not open file " << filePath << std::endl; + return -1.0F; // Return a negative value to indicate that CPU temp is not available + } - // init done - m_display.clearDisplay(); // clears the screen buffer - m_display.display(); // display it (clear display) + float temperature; + file >> temperature; - OLED_statusbar(); - m_display.setCursor(0,OLED_LINE3); - m_display.print("Startup"); - m_display.display(); + file.close(); - return true; + return temperature / 1000.0F; // The temperature is stored in millidegrees Celsius, so a bit of conversion } void COLED::setIdleInt() { - m_mode = MODE_IDLE; - - m_display.clearDisplay(); - OLED_statusbar(); - -// m_display.setCursor(0,30); -// m_display.setTextSize(3); -// m_display.print("Idle"); - -// m_display.setTextSize(1); - m_display.startscrolldiagright(0x00,0x0f); //the MMDVM logo scrolls the whole screen - m_display.display(); - - unsigned char info[100U]; - CNetworkInfo* m_network; + m_mode = MODE_IDLE; + + m_display.clearDisplay(); + + OLED_statusbar(); + + if (m_displayScroll && m_displayLogoScreensaver) + m_display.startscrolldiagleft(0x00, 0x0f); //the MMDVM logo scrolls the whole screen + + unsigned char info[100U]; + CNetworkInfo* m_network; + + passCounter++; + if (passCounter > 253U) + networkInfoInitialized = false; + + if (!networkInfoInitialized) { + //LogMessage("Initialize CNetworkInfo"); + info[0] = 0; + m_network = new CNetworkInfo; + m_network->getNetworkInterface(info); + m_ipaddress = (char*)info; + delete m_network; + + networkInfoInitialized = true; + passCounter = 0U; + } + + // Let's let the users know if they are in Auto-AP mode... + if (m_ipaddress.find("wlan0_ap") != std::string::npos) { + size_t pos = m_ipaddress.find("wlan0_ap"); + if (pos != std::string::npos) + m_ipaddress.erase(pos, 9); // remove redundant/superfluous "wlan0_ap" from string + + // Read ssid value from /etc/hostapd.conf if it exists... + std::string ssid; + std::ifstream configFile("/etc/hostapd/hostapd.conf"); + if (configFile.is_open()) { + std::string line; + while (std::getline(configFile, line)) { + if (line.find("ssid=") != std::string::npos) { + std::istringstream iss(line); + std::string key, value; + if (std::getline(iss, key, '=') && std::getline(iss, value)) { + ssid = value; + break; + } + } + } + + configFile.close(); + } else { + ssid = "Unknown"; // `/etc/hostapd.conf` does not exist... + } + + if (m_displayLogoScreensaver) { + m_display.setCursor(0, OLED_LINE3); + m_display.setTextSize(1); + m_display.printf("Auto-AP Running..."); + m_display.setCursor(0, OLED_LINE5); + m_display.setTextSize(1); + m_display.printf("SSID: %s", ssid.c_str()); + m_display.setCursor(0, OLED_LINE6); + m_display.setTextSize(1); + m_display.printf("IP: %s", m_ipaddress.c_str()); + } + } else { // Connected to network - no Auto-AP mode; normal display layout... + if (m_displayLogoScreensaver) { + m_display.setCursor(0, OLED_LINE2); + m_display.setTextSize(1); + m_display.print(" -IDLE-"); + m_display.setCursor(0, OLED_LINE4); + m_display.printf("%s", m_ipaddress.c_str()); + + // Display temperature + float tempCelsius = readTemperature("/sys/class/thermal/thermal_zone0/temp"); + if (tempCelsius >= 0.0F) { + // Convert to Fahrenheit + float tempFahrenheit = (tempCelsius * 9.0F / 5.0F) + 32.0F; + m_display.setCursor(0, OLED_LINE5); + m_display.setTextSize(1); + m_display.printf("Temp: %.0fF / %.0fC ", tempFahrenheit, tempCelsius); + } + } + } + + m_display.display(); +} - passCounter ++; - if (passCounter > 253U) - networkInfoInitialized = false; +void COLED::setErrorInt(const char* text) +{ + m_mode = MODE_ERROR; - if (! networkInfoInitialized) { - //LogMessage("Initialize CNetworkInfo"); - info[0]=0; - m_network = new CNetworkInfo; - m_network->getNetworkInterface(info); - m_ipaddress = (char*)info; - delete m_network; + m_display.clearDisplay(); + OLED_statusbar(); - if (m_modem != NULL) - m_modem->writeIPInfo(m_ipaddress); + m_display.setTextWrap(true); // text wrap temorally enable + m_display.setCursor(0, OLED_LINE1); + m_display.printf("%s\n", text); + m_display.setTextWrap(false); - networkInfoInitialized = true; - passCounter = 0; - } + m_display.display(); } -void COLED::setErrorInt(const char* text) +void COLED::setLockoutInt() { - m_mode = MODE_ERROR; + m_mode = MODE_LOCKOUT; - m_display.clearDisplay(); - OLED_statusbar(); + m_display.clearDisplay(); + OLED_statusbar(); - m_display.setCursor(0,OLED_LINE1); - m_display.printf("%s\n",text); + m_display.setCursor(0, 30); + m_display.setTextSize(3); + m_display.print("Lockout"); - m_display.display(); + m_display.setTextSize(1); + m_display.display(); } -void COLED::setLockoutInt() +void COLED::setQuitInt() { - m_mode = MODE_LOCKOUT; + m_mode = MODE_QUIT; - m_display.clearDisplay(); - OLED_statusbar(); + m_display.clearDisplay(); + OLED_statusbar(); - m_display.setCursor(0,30); - m_display.setTextSize(3); - m_display.print("Lockout"); + m_display.setCursor(0, 30); + m_display.setTextSize(2); + m_display.print(" Stopping"); - m_display.setTextSize(1); - m_display.display(); + m_display.setTextSize(1); + m_display.display(); + sleep(2); } -void COLED::setQuitInt() +void COLED::setFMInt() { - m_mode = MODE_QUIT; + m_mode = MODE_FM; - m_display.clearDisplay(); - OLED_statusbar(); + m_display.clearDisplay(); + OLED_statusbar(); - m_display.setCursor(0,30); - m_display.setTextSize(3); - m_display.print("Stopped"); + m_display.setCursor(0, 30); + m_display.setTextSize(3); + m_display.print("FM"); - m_display.setTextSize(1); - m_display.display(); + m_display.setTextSize(1); + m_display.display(); } void COLED::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) { - m_mode = MODE_DSTAR; + m_mode = MODE_DSTAR; - m_display.clearDisplay(); - m_display.fillRect(0,OLED_LINE3,m_display.width(),m_display.height(),BLACK); //clear everything beneath logo + m_display.clearDisplay(); + m_display.fillRect(0, OLED_LINE3, m_display.width(), m_display.height(), BLACK); //clear everything beneath logo - m_display.setCursor(0,OLED_LINE3); - m_display.printf("%s %.8s/%4.4s",type,my1,my2); + m_display.setCursor(0, OLED_LINE3); + m_display.printf("%s %.8s/%4.4s", type, my1, my2); - m_display.setCursor(0,OLED_LINE4); - m_display.printf("-> %.8s",your); + m_display.setCursor(0, OLED_LINE4); + m_display.printf("-> %.8s", your); - m_display.setCursor(0,OLED_LINE5); - m_display.printf("via %.8s",reflector); + m_display.setCursor(0, OLED_LINE5); + m_display.printf("via %.8s", reflector); - m_display.setCursor(0,OLED_LINE6); - m_display.printf("%s",m_ipaddress.c_str()); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); - OLED_statusbar(); - m_display.display(); + OLED_statusbar(); - if (m_modem != NULL) - m_modem->writeDStarInfo(my1, my2, your, type, reflector); + m_display.display(); } void COLED::clearDStarInt() { - m_display.fillRect(0,OLED_LINE3, m_display.width(),m_display.height(),BLACK); //clear everything beneath the logo + m_display.fillRect(0, OLED_LINE3, m_display.width(),m_display.height(), BLACK); //clear everything beneath the logo - m_display.setCursor(40,OLED_LINE3); - m_display.print("Listening"); + m_display.setCursor(40, OLED_LINE3); + m_display.print("Standby"); - m_display.setCursor(0,OLED_LINE5); - m_display.printf("%s",m_ipaddress.c_str()); + m_display.setCursor(0, OLED_LINE5); + m_display.printf("%s", m_ipaddress.c_str()); - m_display.display(); + m_display.display(); } -void COLED::writeDMRInt(unsigned int slotNo,const std::string& src,bool group,const std::string& dst,const char* type) -{ - - if (m_mode != MODE_DMR) { - m_display.clearDisplay(); - m_mode = MODE_DMR; - clearDMRInt(slotNo); - } - // if both slots, use lines 2-3 for slot 1, lines 4-5 for slot 2 - // if single slot, use lines 3-4 - if ( m_slot1Enabled && m_slot2Enabled ) { - - if (slotNo == 1U) { - m_display.fillRect(0,OLED_LINE2,m_display.width(),40,BLACK); - m_display.setCursor(0,OLED_LINE2); - m_display.printf("%s",src.c_str()); - m_display.setCursor(0,OLED_LINE3); - m_display.printf("Slot: %i %s %s%s",slotNo,type,group ? "TG: " : "",dst.c_str()); - } - else - { - m_display.fillRect(0,OLED_LINE4,m_display.width(),40,BLACK); - m_display.setCursor(0,OLED_LINE4); - m_display.printf("%s",src.c_str()); - m_display.setCursor(0,OLED_LINE5); - m_display.printf("Slot: %i %s %s%s",slotNo,type,group ? "TG: " : "",dst.c_str()); - } - - } - else - { - m_display.fillRect(0,OLED_LINE3,m_display.width(),20,BLACK); - m_display.setCursor(0,OLED_LINE3); - m_display.printf("%s",src.c_str()); - m_display.setCursor(0,OLED_LINE4); - m_display.printf("Slot: %i %s %s%s",slotNo,type,group ? "TG: " : "",dst.c_str()); - } - - m_display.fillRect(0,OLED_LINE6,m_display.width(),20,BLACK); - m_display.setCursor(0,OLED_LINE6); - m_display.printf("%s",m_ipaddress.c_str()); - - OLED_statusbar(); - m_display.display(); - - if (m_modem != NULL) - m_modem->writeDMRInfo(slotNo, src, group, dst, type); +void COLED::writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type) +{ + CUserDBentry tmp; + + tmp.set(keyCALLSIGN, src); + + writeDMRIntEx(slotNo, tmp, group, dst, type); } -void COLED::clearDMRInt(unsigned int slotNo) +#define CALLandNAME(u) ((u).get(keyCALLSIGN) + " " + (u).get(keyFIRST_NAME)) + +int COLED::writeDMRIntEx(unsigned int slotNo, const CUserDBentry& src, bool group, const std::string& dst, const char* type) { - // if both slots, use lines 2-3 for slot 1, lines 4-5 for slot 2 - // if single slot, use lines 3-4 - if ( m_slot1Enabled && m_slot2Enabled ){ - if (slotNo == 1U) { - m_display.fillRect(0, OLED_LINE3, m_display.width(), 40, BLACK); - m_display.setCursor(0,OLED_LINE3); - m_display.print("Slot: 1 Listening"); - } - else { - m_display.fillRect(0, OLED_LINE5, m_display.width(), 40, BLACK); - m_display.setCursor(0, OLED_LINE5); - m_display.print("Slot: 2 Listening"); - } - } - else { - m_display.fillRect(0, OLED_LINE4, m_display.width(), 40, BLACK); - m_display.setCursor(0,OLED_LINE4); - m_display.printf("Slot: %i Listening",slotNo); - } - - m_display.fillRect(0, OLED_LINE6, m_display.width(), 20, BLACK); - m_display.setCursor(0,OLED_LINE6); - m_display.printf("%s",m_ipaddress.c_str()); - m_display.display(); + if (m_mode != MODE_DMR) { + m_display.clearDisplay(); + m_mode = MODE_DMR; + clearDMRInt(slotNo); + } + + // if both slots, use lines 2-3 for slot 1, lines 4-5 for slot 2 + // if single slot, use lines 2-3 + if (m_duplex) { + if (slotNo == 1U) { + m_display.fillRect(0, OLED_LINE2, m_display.width(), 40, BLACK); + m_display.setCursor(0, OLED_LINE2); + m_display.printf("%s", CALLandNAME(src).c_str()); + m_display.setCursor(0, OLED_LINE3); + m_display.printf("Slot: %i %s %s%s", slotNo, type, group ? "TG: " : "", dst.c_str()); + } else { + m_display.fillRect(0, OLED_LINE4, m_display.width(), 40, BLACK); + m_display.setCursor(0, OLED_LINE4); + m_display.printf("%s", CALLandNAME(src).c_str()); + m_display.setCursor(0, OLED_LINE5); + m_display.printf("Slot: %i %s %s%s", slotNo, type, group ? "TG: " : "", dst.c_str()); + } + + m_display.fillRect(0, OLED_LINE6, m_display.width(), 20, BLACK); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); + } else { + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + m_display.setCursor(0, OLED_LINE2); + m_display.printf("%s", CALLandNAME(src).c_str()); + m_display.setCursor(0, OLED_LINE3); + m_display.printf("Slot: %i %s %s%s", slotNo, type, group ? "TG: " : "", dst.c_str()); + m_display.setCursor(0, OLED_LINE4); + m_display.printf("%s", src.get(keyCITY).c_str()); + m_display.setCursor(0, OLED_LINE5); + m_display.printf("%s", src.get(keySTATE).c_str()); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", src.get(keyCOUNTRY).c_str()); + } + + OLED_statusbar(); + + m_display.display(); + + // must be 0, to avoid calling writeDMRInt() from CDisplay::writeDMR() + return 0; } -void COLED::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) +void COLED::clearDMRInt(unsigned int slotNo) { + // if both slots, use lines 2-3 for slot 1, lines 4-5 for slot 2 + // if single slot, use lines 2-3 + if (m_duplex){ + if (slotNo == 1U) { + m_display.fillRect(0, OLED_LINE3, m_display.width(), 40, BLACK); + m_display.setCursor(0, OLED_LINE3); + m_display.print("Slot: 1 Standby"); + } else { + m_display.fillRect(0, OLED_LINE5, m_display.width(), 40, BLACK); + m_display.setCursor(0, OLED_LINE5); + m_display.print("Slot: 2 Standby"); + } + } else { + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + m_display.setCursor(0, OLED_LINE3); + m_display.printf("Slot: %i Standby", slotNo); + } + + m_display.fillRect(0, OLED_LINE6, m_display.width(), 20, BLACK); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); + + m_display.display(); +} - m_mode = MODE_YSF; +void COLED::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) +{ + m_mode = MODE_YSF; - m_display.clearDisplay(); - m_display.fillRect(0,OLED_LINE2,m_display.width(),m_display.height(),BLACK); + m_display.clearDisplay(); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); - m_display.setCursor(0,OLED_LINE4); - m_display.printf("%s %.10s", type, source); + m_display.setCursor(0, OLED_LINE4); + m_display.printf("%s %.10s", type, source); - m_display.setCursor(0,OLED_LINE5); - m_display.printf(" %.10s", dest); + m_display.setCursor(0, OLED_LINE5); + m_display.printf(" DG-ID %u", dgid); - OLED_statusbar(); - m_display.display(); + OLED_statusbar(); - if (m_modem != NULL) - m_modem->writeYSFInfo(source, dest, type, origin); + m_display.display(); } void COLED::clearFusionInt() { - m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); - m_display.setCursor(40,OLED_LINE4); - m_display.print("Listening"); + m_display.setCursor(40, OLED_LINE4); + m_display.print("Standby"); - m_display.setCursor(0,OLED_LINE6); - m_display.printf("%s",m_ipaddress.c_str()); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); - m_display.display(); + m_display.display(); } void COLED::writeP25Int(const char* source, bool group, unsigned int dest, const char* type) { - m_mode = MODE_P25; + m_mode = MODE_P25; - m_display.clearDisplay(); - m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + m_display.clearDisplay(); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); - m_display.setCursor(0,OLED_LINE3); - m_display.printf("%s %.10s", type, source); + m_display.setCursor(0, OLED_LINE3); + m_display.printf("%s %.10s", type, source); - m_display.setCursor(0,OLED_LINE4); - m_display.printf(" %s%u", group ? "TG" : "", dest); + m_display.setCursor(0, OLED_LINE4); + m_display.printf(" %s%u", group ? "TG" : "", dest); - OLED_statusbar(); - m_display.display(); + OLED_statusbar(); - if (m_modem != NULL) - m_modem->writeP25Info(source, group, dest, type); + m_display.display(); } void COLED::clearP25Int() { - m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); - m_display.setCursor(40,OLED_LINE4); - m_display.print("Listening"); + m_display.setCursor(40, OLED_LINE4); + m_display.print("Standby"); - m_display.setCursor(0,OLED_LINE6); - m_display.printf("%s",m_ipaddress.c_str()); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); - m_display.display(); + m_display.display(); } void COLED::writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type) { - m_mode = MODE_NXDN; + CUserDBentry tmp; + + tmp.set(keyCALLSIGN, source); + + writeNXDNIntEx(tmp, group, dest, type); +} + +int COLED::writeNXDNIntEx(const CUserDBentry& source, bool group, unsigned int dest, const char* type) +{ + m_mode = MODE_NXDN; + + m_display.clearDisplay(); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); - m_display.clearDisplay(); - m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + m_display.setCursor(0, OLED_LINE2); + m_display.printf("%s %s", type, CALLandNAME(source).c_str()); - m_display.setCursor(0,OLED_LINE3); - m_display.printf("%s %.10s", type, source); + m_display.setCursor(0, OLED_LINE3); + m_display.printf(" %s%u", group ? "TG" : "", dest); - m_display.setCursor(0,OLED_LINE5); - m_display.printf(" %s%u", group ? "TG" : "", dest); + m_display.setCursor(0, OLED_LINE4); + m_display.printf("%s", source.get(keyCITY).c_str()); + + m_display.setCursor(0, OLED_LINE5); + m_display.printf("%s", source.get(keySTATE).c_str()); + + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", source.get(keyCOUNTRY).c_str()); - OLED_statusbar(); - m_display.display(); + OLED_statusbar(); - if (m_modem != NULL) - m_modem->writeNXDNInfo(source, group, dest, type); + m_display.display(); + + // must be 0, to avoid calling writeNXDNInt() from CDisplay::writeNXDN() + return 0; } void COLED::clearNXDNInt() { - m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); - m_display.setCursor(40,OLED_LINE4); - m_display.print("Listening"); + m_display.setCursor(40, OLED_LINE3); + m_display.print("Standby"); - m_display.setCursor(0,OLED_LINE6); - m_display.printf("%s",m_ipaddress.c_str()); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); - m_display.display(); + m_display.display(); } -void COLED::writePOCSAGInt(uint32_t ric, const std::string& message) +void COLED::writeM17Int(const char* source, const char* dest, const char* type) { - m_mode = MODE_POCSAG; + m_mode = MODE_M17; + + m_display.clearDisplay(); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + + m_display.setCursor(0, OLED_LINE3); + m_display.printf("from: %s %s", type, source); + + m_display.setCursor(0, OLED_LINE4); + m_display.printf("to: %s", dest); - m_display.clearDisplay(); - m_display.fillRect(0, OLED_LINE1, m_display.width(), m_display.height(), BLACK); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); - m_display.setCursor(0,OLED_LINE3); - m_display.printf("RIC: %u", ric); + OLED_statusbar(); - m_display.setCursor(0,OLED_LINE5); - m_display.printf("MSG: %s", message.c_str()); + m_display.display(); +} + +void COLED::clearM17Int() +{ + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + + m_display.setCursor(40, OLED_LINE4); + m_display.print("Standby"); - OLED_statusbar(); - m_display.display(); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); - if (m_modem != NULL) - m_modem->writePOCSAGInfo(ric, message); + m_display.display(); +} + +void COLED::writePOCSAGInt(uint32_t ric, const std::string& message) +{ + int pos; + int length = message.length(); + std::string rublic; + + // extract rublic index "(xx-xx)" + switch (ric) { + case 4512U: + case 4520U: + if (length) { + std::string::size_type start = message.find("("); + std::string::size_type end = message.find(") "); + if (start != std::string::npos && end != std::string::npos) { + rublic = message.substr(start, end - start + 1); + pos = end + 2; + break; + } + } + /*FALLTHROUGH*/ + default: + rublic = ""; + pos = 0; + break; + } + + // remove double-quotation leading/trailing message + if (length && message.at(pos) == '\"' && message.at(length - 1) == '\"') { + pos++; + length--; + } + + m_mode = MODE_POCSAG; + + m_display.clearDisplay(); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + + m_display.setCursor(0, OLED_LINE2); + m_display.printf("RIC: %u", ric); + if (!rublic.empty()) + m_display.printf(" / %s", rublic.c_str()); + + m_display.setTextWrap(true); // text wrap temorally enable + m_display.setCursor(0, OLED_LINE3); + // no room to display "MSG: " header + + // due to limitation of AdaFruit_GFX::vprintf() (in ArduiPi_OLED), + // the maximum string length displayed by single printf() call is 63. + // to avoid this, divide POCSAG (max 80 chars) message into some pieces. + while (pos < length) { + int remain = length - pos; + int n = (remain < 40) ? remain : 40; + m_display.printf("%s", message.substr(pos, n).c_str()); + pos += n; + } + m_display.setTextWrap(false); + + OLED_statusbar(); + + m_display.display(); } void COLED::clearPOCSAGInt() { - m_display.fillRect(0, OLED_LINE1, m_display.width(), m_display.height(), BLACK); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); - m_display.setCursor(40,OLED_LINE4); - m_display.print("Listening"); + m_display.setCursor(40, OLED_LINE3); + m_display.print("Standby"); - m_display.setCursor(0,OLED_LINE6); - m_display.printf("%s",m_ipaddress.c_str()); + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); - m_display.display(); + m_display.display(); } void COLED::writeCWInt() { - m_display.clearDisplay(); + m_display.clearDisplay(); + + m_display.setCursor(0, 30); + m_display.setTextSize(2); + m_display.print("CW ID TX"); - m_display.setCursor(0,30); - m_display.setTextSize(3); - m_display.print("CW TX"); + m_display.setTextSize(1); + m_display.display(); - m_display.setTextSize(1); - m_display.display(); - m_display.startscrollright(0x02,0x0f); + if (m_displayScroll) + m_display.startscrollleft(0x02, 0x0f); } void COLED::clearCWInt() { - m_display.clearDisplay(); - - m_display.setCursor(0,30); - m_display.setTextSize(3); - m_display.print("Idle"); - - m_display.setTextSize(1); - m_display.display(); - m_display.startscrollleft(0x02,0x0f); + m_display.clearDisplay(); + + m_display.setCursor(0, OLED_LINE1); + m_display.setTextSize(2); + m_display.setTextSize(1); + m_display.print(" -IDLE-"); + m_display.setCursor(0, OLED_LINE3); + m_display.printf("%s", m_ipaddress.c_str()); + + // Display temperature + float tempCelsius = readTemperature("/sys/class/thermal/thermal_zone0/temp"); + if (tempCelsius >= 0.0F) { + // Convert to Fahrenheit + float tempFahrenheit = (tempCelsius * 9.0F / 5.0F) + 32.0F; + m_display.setCursor(0, OLED_LINE5); + m_display.setTextSize(1); + m_display.printf("Temp: %.0fF / %.0fC ", tempFahrenheit, tempCelsius); + } + + if (m_displayScroll) + m_display.startscrolldiagleft(0x00, 0x0f); + + m_display.display(); } void COLED::close() { - m_display.clearDisplay(); - m_display.fillRect(0, 0, m_display.width(), 16, BLACK); - m_display.startscrollright(0x00,0x01); - m_display.setCursor(0,00); - m_display.setTextSize(2); - m_display.print("-CLOSE-"); - m_display.display(); + m_display.clearDisplay(); + m_display.fillRect(0, 0, m_display.width(), 16, BLACK); - m_display.close(); + if (m_displayScroll) + m_display.startscrollleft(0x00, 0x01); + + m_display.setCursor(0, OLED_LINE3); + m_display.setTextSize(2); + m_display.print(" -OFFLINE-"); + m_display.display(); + + m_display.close(); } void COLED::OLED_statusbar() { - m_display.stopscroll(); - m_display.fillRect(0, 0, m_display.width(), 16, BLACK); - m_display.setTextColor(WHITE); - - m_display.setCursor(0,0); - if (m_mode == MODE_DMR) - m_display.drawBitmap(0, 0, logo_dmr_bmp, 128, 16, WHITE); - else if (m_mode == MODE_DSTAR) - m_display.drawBitmap(0, 0, logo_dstar_bmp, 128, 16, WHITE); - else if (m_mode == MODE_YSF) - m_display.drawBitmap(0, 0, logo_fusion_bmp, 128, 16, WHITE); - else if (m_mode == MODE_P25) - m_display.drawBitmap(0, 0, logo_P25_bmp, 128, 16, WHITE); - else if (m_mode == MODE_NXDN) - m_display.drawBitmap(0, 0, logo_NXDN_bmp, 128, 16, WHITE); - else if (m_mode == MODE_POCSAG) - m_display.drawBitmap(0, 0, logo_POCSAG_bmp, 128, 16, WHITE); - else - m_display.drawBitmap(0, 0, logo_glcd_bmp, 128, 16, WHITE); - - if (m_displayScroll) - m_display.startscrollright(0x00,0x02); + m_display.stopscroll(); + m_display.fillRect(0, 0, m_display.width(), 16, BLACK); + m_display.setTextColor(WHITE); + + m_display.setCursor(0,0); + if (m_mode == MODE_DMR) + m_display.drawBitmap(0, 0, logo_dmr_bmp, 128, 16, WHITE); + else if (m_mode == MODE_DSTAR) + m_display.drawBitmap(0, 0, logo_dstar_bmp, 128, 16, WHITE); + else if (m_mode == MODE_YSF) + m_display.drawBitmap(0, 0, logo_fusion_bmp, 128, 16, WHITE); + else if (m_mode == MODE_P25) + m_display.drawBitmap(0, 0, logo_P25_bmp, 128, 16, WHITE); + else if (m_mode == MODE_NXDN) + m_display.drawBitmap(0, 0, logo_NXDN_bmp, 128, 16, WHITE); + else if (m_mode == MODE_M17) + m_display.drawBitmap(0, 0, logo_M17_bmp, 128, 16, WHITE); + else if (m_mode == MODE_POCSAG) + m_display.drawBitmap(0, 0, logo_POCSAG_bmp, 128, 16, WHITE); + else if (m_displayLogoScreensaver) + m_display.drawBitmap(0, 0, logo_glcd_bmp, 128, 16, WHITE); + + if (m_displayScroll) + m_display.startscrollleft(0x00, 0x01); } + diff --git a/OLED.h b/OLED.h index 3a114351f..cff1dd21f 100644 --- a/OLED.h +++ b/OLED.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2018,2020,2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,68 +29,80 @@ #include "Display.h" #include "Defines.h" +#include "UserDBentry.h" #include +#include +#include +#include // for cpu temp value extraction +#include // for cpu temp value rounding #include "ArduiPi_OLED_lib.h" #include "Adafruit_GFX.h" #include "ArduiPi_OLED.h" #include "NetworkInfo.h" -#include "Modem.h" class COLED : public CDisplay { public: - COLED(unsigned char displayType, unsigned char displayBrighness, bool displayInvert, bool displayScroll, bool displayRotate, bool slot1Enabled, bool slot2Enabled, CModem* modem); - virtual ~COLED(); + COLED(unsigned char displayType, unsigned char displayBrighness, bool displayInvert, bool displayScroll, bool displayRotate, bool displayLogoScreensaver, bool duplex); + virtual ~COLED(); - virtual bool open(); + virtual bool open(); - virtual void setIdleInt(); + virtual void close(); - virtual void setErrorInt(const char* text); - virtual void setLockoutInt(); - virtual void setQuitInt(); +protected: + virtual void setIdleInt(); + virtual void setErrorInt(const char* text); + virtual void setLockoutInt(); + virtual void setQuitInt(); + virtual void setFMInt(); - virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); - virtual void clearDStarInt(); + virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); + virtual void clearDStarInt(); - virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); - virtual void clearDMRInt(unsigned int slotNo); + virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); + virtual int writeDMRIntEx(unsigned int slotNo, const CUserDBentry& src, bool group, const std::string& dst, const char* type); + virtual void clearDMRInt(unsigned int slotNo); - virtual void writeFusionInt(const char* source, const char* dest, const char* type, const char* origin); - virtual void clearFusionInt(); + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); + virtual void clearFusionInt(); - virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); - virtual void clearP25Int(); + virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); + virtual void clearP25Int(); - virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); - virtual void clearNXDNInt(); + virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); + virtual int writeNXDNIntEx(const CUserDBentry& source, bool group, unsigned int dest, const char* type); + virtual void clearNXDNInt(); - virtual void writePOCSAGInt(uint32_t ric, const std::string& message); - virtual void clearPOCSAGInt(); + virtual void writeM17Int(const char* source, const char* dest, const char* type); + virtual void clearM17Int(); - virtual void writeCWInt(); - virtual void clearCWInt(); + virtual void writePOCSAGInt(uint32_t ric, const std::string& message); + virtual void clearPOCSAGInt(); - virtual void close(); + virtual void writeCWInt(); + virtual void clearCWInt(); private: - const char* m_slot1_state; - const char* m_slot2_state; - unsigned char m_mode; - unsigned char m_displayType; - unsigned char m_displayBrightness; - bool m_displayInvert; - bool m_displayScroll; - bool m_displayRotate; - bool m_slot1Enabled; - bool m_slot2Enabled; - CModem* m_modem; - std::string m_ipaddress; - ArduiPi_OLED m_display; - - void OLED_statusbar(); + const char* m_slot1_state; + const char* m_slot2_state; + unsigned char m_mode; + unsigned char m_displayType; + unsigned char m_displayBrightness; + bool m_displayInvert; + bool m_displayScroll; + bool m_displayRotate; + bool m_displayLogoScreensaver; + bool m_duplex; + std::string m_ipaddress; + ArduiPi_OLED m_display; + + float readTemperature(const char* filePath); + + void OLED_statusbar(); }; #endif + diff --git a/OLED.md b/OLED.md index a16934a04..dc1570305 100644 --- a/OLED.md +++ b/OLED.md @@ -12,7 +12,7 @@ As I don’t use monitor or TV connected to Pi, I decreased dedicated video memo To be able to compile you will need the compiler and some others tools, issue a : ``` -sudo apt-get install build-essential git-core libi2c-dev i2c-tools lm-sensors +sudo apt-get install build-essential git-core libi2c-dev i2c-tools lm-sensors wiringpi ``` *italic* Sometimes I2C and SPI modules are not started and thus he cannot start the sample code. The solution to start the modules at startup by adding the two following lines into the file /etc/modules diff --git a/P25Control.cpp b/P25Control.cpp index 6e8750662..4b81bf3af 100644 --- a/P25Control.cpp +++ b/P25Control.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX +* Copyright (C) 2016-2019,2021,2024 by Jonathan Naylor G4KLX * Copyright (C) 2018 by Bryan Biedenkapp N2PLL * * This program is free software; you can redistribute it and/or modify @@ -83,6 +83,7 @@ m_maxRSSI(0U), m_minRSSI(0U), m_aveRSSI(0U), m_rssiCount(0U), +m_enabled(true), m_fp(NULL) { assert(display != NULL); @@ -118,13 +119,20 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) { assert(data != NULL); + if (!m_enabled) + return false; + bool sync = data[1U] == 0x01U; if (data[0U] == TAG_LOST && m_rfState == RS_RF_AUDIO) { + bool grp = m_rfData.getLCF() == P25_LCF_GROUP; + unsigned int dstId = m_rfData.getDstId(); + std::string source = m_lookup->find(m_rfData.getSrcId()); + if (m_rssi != 0U) - LogMessage("P25, transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("P25, transmission lost from %s to %s%u, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", source.c_str(), grp ? "TG " : "", dstId, float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("P25, transmission lost, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("P25, transmission lost from %s to %s%u, %.1f seconds, BER: %.1f%%", source.c_str(), grp ? "TG " : "", dstId, float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits)); LogMessage("P25, total frames: %d, bits: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_rfFrames, m_rfBits, m_rfUndecodableLC, m_rfErrs, float(m_rfErrs * 100U) / float(m_rfBits)); @@ -315,7 +323,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) m_rfFrames++; m_lastDUID = duid; - // Add busy bits + // Add busy bits, inbound busy addBusyBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true); #if defined(DUMP_P25) @@ -371,7 +379,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) m_rfFrames++; m_lastDUID = duid; - // Add busy bits + // Add busy bits, inbound busy addBusyBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true); #if defined(DUMP_P25) @@ -404,14 +412,15 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) return false; } - unsigned int srcId = m_rfData.getSrcId(); + bool grp = m_rfData.getLCF() == P25_LCF_GROUP; unsigned int dstId = m_rfData.getDstId(); - + std::string source = m_lookup->find(m_rfData.getSrcId()); + unsigned char data[P25_TSDU_FRAME_LENGTH_BYTES + 2U]; switch (m_rfData.getLCF()) { case P25_LCF_TSBK_CALL_ALERT: - LogMessage("P25, received RF TSDU transmission, CALL ALERT from %u to %u", srcId, dstId); + LogMessage("P25, received RF TSDU transmission, CALL ALERT from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); ::memset(data + 2U, 0x00U, P25_TSDU_FRAME_LENGTH_BYTES); // Regenerate Sync @@ -423,8 +432,8 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) // Regenerate TDULC Data m_rfData.encodeTSDU(data + 2U); - // Add busy bits - addBusyBits(data + 2U, P25_TSDU_FRAME_LENGTH_BITS, true, false); + // Add busy bits, inbound busy + addBusyBits(data + 2U, P25_TSDU_FRAME_LENGTH_BITS, false, true); // Set first busy bits to 1,1 setBusyBits(data + 2U, P25_SS0_START, true, true); @@ -437,7 +446,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) } break; case P25_LCF_TSBK_ACK_RSP_FNE: - LogMessage("P25, received RF TSDU transmission, ACK RESPONSE FNE from %u to %u", srcId, dstId); + LogMessage("P25, received RF TSDU transmission, ACK RESPONSE FNE from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); ::memset(data + 2U, 0x00U, P25_TSDU_FRAME_LENGTH_BYTES); // Regenerate Sync @@ -449,8 +458,8 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) // Regenerate TDULC Data m_rfData.encodeTSDU(data + 2U); - // Add busy bits - addBusyBits(data + 2U, P25_TSDU_FRAME_LENGTH_BITS, true, false); + // Add busy bits, inbound busy + addBusyBits(data + 2U, P25_TSDU_FRAME_LENGTH_BITS, false, true); // Set first busy bits to 1,1 setBusyBits(data + 2U, P25_SS0_START, true, true); @@ -481,18 +490,22 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) // Regenerate NID m_nid.encode(data + 2U, P25_DUID_TERM); - // Add busy bits + // Add busy bits, inbound busy addBusyBits(data + 2U, P25_TERM_FRAME_LENGTH_BITS, false, true); + bool grp = m_rfData.getLCF() == P25_LCF_GROUP; + unsigned int dstId = m_rfData.getDstId(); + std::string source = m_lookup->find(m_rfData.getSrcId()); + m_rfState = RS_RF_LISTENING; m_rfTimeout.stop(); m_rfData.reset(); m_lastDUID = duid; if (m_rssi != 0U) - LogMessage("P25, received RF end of voice transmission, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("P25, received RF end of voice transmission from %s to %s%u, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", source.c_str(), grp ? "TG " : "", dstId, float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("P25, received RF end of voice transmission, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("P25, received RF end of voice transmission from %s to %s%u, %.1f seconds, BER: %.1f%%", source.c_str(), grp ? "TG " : "", dstId, float(m_rfFrames) / 5.56F, float(m_rfErrs * 100U) / float(m_rfBits)); LogMessage("P25, total frames: %d, bits: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_rfFrames, m_rfBits, m_rfUndecodableLC, m_rfErrs, float(m_rfErrs * 100U) / float(m_rfBits)); @@ -594,7 +607,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) // Regenerate NID m_nid.encode(pdu + 2U, P25_DUID_PDU); - // Add busy bits + // Add busy bits, inbound busy addBusyBits(pdu + 2U, newBitLength, false, true); if (m_duplex) { @@ -645,6 +658,9 @@ void CP25Control::writeNetwork() if (length == 0U) return; + if (!m_enabled) + return; + if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) return; @@ -948,7 +964,7 @@ void CP25Control::createRFHeader() // Add the dummy header m_rfData.encodeHeader(buffer + 2U); - // Add busy bits + // Add busy bits, inbound busy addBusyBits(buffer + 2U, P25_HDR_FRAME_LENGTH_BITS, false, true); m_rfFrames = 0U; @@ -1025,8 +1041,13 @@ void CP25Control::createNetHeader() // Add busy bits if (m_remoteGateway) - addBusyBits(buffer + 2U, P25_HDR_FRAME_LENGTH_BITS, false, false); + // Add busy bits, inbound/outbound + addBusyBits(buffer + 2U, P25_HDR_FRAME_LENGTH_BITS, true, false); + else if (m_duplex) + // Add busy bits, inbound idle + addBusyBits(buffer + 2U, P25_HDR_FRAME_LENGTH_BITS, true, true); else + // Add busy bits, inbound busy addBusyBits(buffer + 2U, P25_HDR_FRAME_LENGTH_BITS, false, true); writeQueueNet(buffer, P25_HDR_FRAME_LENGTH_BYTES + 2U); @@ -1069,8 +1090,13 @@ void CP25Control::createNetLDU1() // Add busy bits if (m_remoteGateway) - addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false, false); + // Add busy bits, inbound/outbound + addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, true, false); + else if (m_duplex) + // Add busy bits, inbound idle + addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, true, true); else + // Add busy bits, inbound busy addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true); writeQueueNet(buffer, P25_LDU_FRAME_LENGTH_BYTES + 2U); @@ -1117,8 +1143,13 @@ void CP25Control::createNetLDU2() // Add busy bits if (m_remoteGateway) - addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false, false); + // Add busy bits, inbound/outbound + addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, true, false); + else if (m_duplex) + // Add busy bits, inbound idle + addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, true, true); else + // Add busy bits, inbound busy addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true); writeQueueNet(buffer, P25_LDU_FRAME_LENGTH_BYTES + 2U); @@ -1144,13 +1175,20 @@ void CP25Control::createNetTerminator() // Add busy bits if (m_remoteGateway) - addBusyBits(buffer + 2U, P25_TERM_FRAME_LENGTH_BITS, false, false); + // Add busy bits, inbound/outbound + addBusyBits(buffer + 2U, P25_TERM_FRAME_LENGTH_BITS, true, false); + else if (m_duplex) + // Add busy bits, inbound idle + addBusyBits(buffer + 2U, P25_TERM_FRAME_LENGTH_BITS, true, true); else + // Add busy bits, inbound busy addBusyBits(buffer + 2U, P25_TERM_FRAME_LENGTH_BITS, false, true); writeQueueNet(buffer, P25_TERM_FRAME_LENGTH_BYTES + 2U); - LogMessage("P25, network end of transmission, %.1f seconds, %u%% packet loss", float(m_netFrames) / 50.0F, (m_netLost * 100U) / m_netFrames); + std::string source = m_lookup->find(m_netData.getSrcId()); + + LogMessage("P25, network end of transmission from %s to %s%u, %.1f seconds, %u%% packet loss", source.c_str(), m_netData.getLCF() == P25_LCF_GROUP ? "TG " : "", m_netData.getDstId(), float(m_netFrames) / 50.0F, (m_netLost * 100U) / m_netFrames); m_display->clearP25(); m_netTimeout.stop(); @@ -1200,3 +1238,28 @@ void CP25Control::closeFile() m_fp = NULL; } } + +bool CP25Control::isBusy() const +{ + return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; +} + +void CP25Control::enable(bool enabled) +{ + if (!enabled && m_enabled) { + m_queue.clear(); + + // Reset the RF section + m_rfState = RS_RF_LISTENING; + m_rfTimeout.stop(); + m_rfData.reset(); + + // Reset the networking section + m_netTimeout.stop(); + m_networkWatchdog.stop(); + m_netData.reset(); + m_netState = RS_NET_IDLE; + } + + m_enabled = enabled; +} diff --git a/P25Control.h b/P25Control.h index 43af0eba6..a130ab79e 100644 --- a/P25Control.h +++ b/P25Control.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX +* Copyright (C) 2016-2019 by Jonathan Naylor G4KLX * Copyright (C) 2018 by Bryan Biedenkapp N2PLL * * This program is free software; you can redistribute it and/or modify @@ -46,6 +46,10 @@ class CP25Control { void clock(unsigned int ms); + bool isBusy() const; + + void enable(bool enabled); + private: unsigned int m_nac; unsigned int m_id; @@ -91,6 +95,7 @@ class CP25Control { unsigned char m_minRSSI; unsigned int m_aveRSSI; unsigned int m_rssiCount; + bool m_enabled; FILE* m_fp; void writeQueueRF(const unsigned char* data, unsigned int length); diff --git a/P25Data.cpp b/P25Data.cpp index 6b246664c..77b4dec09 100644 --- a/P25Data.cpp +++ b/P25Data.cpp @@ -624,7 +624,10 @@ void CP25Data::decodeHeaderGolay(const unsigned char* data, unsigned char* raw) unsigned int g0 = 0U; for (unsigned int j = 0U; j < 18U; j++) g0 = (g0 << 1) | (golay[j] ? 0x01U : 0x00U); - unsigned int c0data = CGolay24128::decode24128(g0); + + unsigned int c0data = 0U; + CGolay24128::decode24128(g0, c0data); + for (int j = 5; j >= 0; j--) { golay[j] = (c0data & 0x01U) == 0x01U; c0data >>= 1; diff --git a/P25LowSpeedData.cpp b/P25LowSpeedData.cpp index 45989e2a4..8b0536801 100644 --- a/P25LowSpeedData.cpp +++ b/P25LowSpeedData.cpp @@ -28,17 +28,17 @@ const unsigned char CCS_PARITY[] = { 0x8FU, 0xB6U, 0xFDU, 0xC4U, 0x6BU, 0x52U, 0x19U, 0x20U, 0x7EU, 0x47U, 0x0CU, 0x35U, 0x9AU, 0xA3U, 0xE8U, 0xD1U, 0x54U, 0x6DU, 0x26U, 0x1FU, 0xB0U, 0x89U, 0xC2U, 0xFBU, 0xA5U, 0x9CU, 0xD7U, 0xEEU, 0x41U, 0x78U, 0x33U, 0x0AU, 0x27U, 0x1EU, 0x55U, 0x6CU, 0xC3U, 0xFAU, 0xB1U, 0x88U, 0xD6U, 0xEFU, 0xA4U, 0x9DU, 0x32U, 0x0BU, 0x40U, 0x79U, - 0xFCU, 0xC5U, 0x8EU, 0xB7U, 0x18U, 0x21U, 0x6AU, 0x53U, 0x0DU, 0x34U, 0x7FU, 0xE9U, 0xD0U, 0x9BU, 0xA2U, 0xA8U, - 0x91U, 0xDAU, 0xE3U, 0x4CU, 0x75U, 0x3EU, 0x07U, 0x59U, 0x60U, 0x2BU, 0x12U, 0xBDU, 0x84U, 0xCFU, 0xF6U, 0x73U, - 0x4AU, 0x01U, 0x38U, 0x97U, 0xAEU, 0xE5U, 0xDCU, 0x82U, 0xBBU, 0xF0U, 0xC9U, 0x66U, 0x5FU, 0x14U, 0x2DU, 0x4EU, - 0x77U, 0x3CU, 0x05U, 0xAAU, 0x93U, 0xD8U, 0xE1U, 0xBFU, 0x86U, 0xCDU, 0xF4U, 0x5BU, 0x62U, 0x29U, 0x10U, 0x95U, - 0xACU, 0xE7U, 0xDEU, 0x71U, 0x48U, 0x03U, 0x3AU, 0x64U, 0x5DU, 0x16U, 0x2FU, 0x80U, 0xB9U, 0xF2U, 0xCBU, 0xC1U, - 0xF8U, 0xB3U, 0x8AU, 0x25U, 0x1CU, 0x57U, 0x6EU, 0x30U, 0x09U, 0x42U, 0x7BU, 0xD4U, 0xEDU, 0xA6U, 0x9FU, 0x1AU, - 0x23U, 0x68U, 0x51U, 0xFEU, 0xC7U, 0x8CU, 0xB5U, 0xEBU, 0xD2U, 0x99U, 0xA0U, 0x0FU, 0x36U, 0x7DU, 0x44U, 0x69U, - 0x50U, 0x1BU, 0x22U, 0x8DU, 0xB4U, 0xFFU, 0xC6U, 0x98U, 0xA1U, 0xEAU, 0xD3U, 0x7CU, 0x45U, 0x0EU, 0x37U, 0xB2U, - 0x8BU, 0xC0U, 0xF9U, 0x56U, 0x6FU, 0x24U, 0x1DU, 0x43U, 0x7AU, 0x31U, 0x08U, 0xA7U, 0x9EU, 0xD5U, 0xECU, 0xE6U, - 0xDFU, 0x94U, 0xADU, 0x02U, 0x3BU, 0x70U, 0x49U, 0x17U, 0x2EU, 0x65U, 0x5CU, 0xF3U, 0xCAU, 0x81U, 0xB8U, 0x3DU, - 0x04U, 0x4FU, 0x76U, 0xD9U, 0xE0U, 0xABU, 0x92U, 0xCCU, 0xF5U, 0xBEU, 0x87U, 0x28U, 0x11U, 0x5AU, 0x63U}; + 0xFCU, 0xC5U, 0x8EU, 0xB7U, 0x18U, 0x21U, 0x6AU, 0x53U, 0x0DU, 0x34U, 0x7FU, 0x46U, 0xE9U, 0xD0U, 0x9BU, 0xA2U, + 0xA8U, 0x91U, 0xDAU, 0xE3U, 0x4CU, 0x75U, 0x3EU, 0x07U, 0x59U, 0x60U, 0x2BU, 0x12U, 0xBDU, 0x84U, 0xCFU, 0xF6U, + 0x73U, 0x4AU, 0x01U, 0x38U, 0x97U, 0xAEU, 0xE5U, 0xDCU, 0x82U, 0xBBU, 0xF0U, 0xC9U, 0x66U, 0x5FU, 0x14U, 0x2DU, + 0x4EU, 0x77U, 0x3CU, 0x05U, 0xAAU, 0x93U, 0xD8U, 0xE1U, 0xBFU, 0x86U, 0xCDU, 0xF4U, 0x5BU, 0x62U, 0x29U, 0x10U, + 0x95U, 0xACU, 0xE7U, 0xDEU, 0x71U, 0x48U, 0x03U, 0x3AU, 0x64U, 0x5DU, 0x16U, 0x2FU, 0x80U, 0xB9U, 0xF2U, 0xCBU, + 0xC1U, 0xF8U, 0xB3U, 0x8AU, 0x25U, 0x1CU, 0x57U, 0x6EU, 0x30U, 0x09U, 0x42U, 0x7BU, 0xD4U, 0xEDU, 0xA6U, 0x9FU, + 0x1AU, 0x23U, 0x68U, 0x51U, 0xFEU, 0xC7U, 0x8CU, 0xB5U, 0xEBU, 0xD2U, 0x99U, 0xA0U, 0x0FU, 0x36U, 0x7DU, 0x44U, + 0x69U, 0x50U, 0x1BU, 0x22U, 0x8DU, 0xB4U, 0xFFU, 0xC6U, 0x98U, 0xA1U, 0xEAU, 0xD3U, 0x7CU, 0x45U, 0x0EU, 0x37U, + 0xB2U, 0x8BU, 0xC0U, 0xF9U, 0x56U, 0x6FU, 0x24U, 0x1DU, 0x43U, 0x7AU, 0x31U, 0x08U, 0xA7U, 0x9EU, 0xD5U, 0xECU, + 0xE6U, 0xDFU, 0x94U, 0xADU, 0x02U, 0x3BU, 0x70U, 0x49U, 0x17U, 0x2EU, 0x65U, 0x5CU, 0xF3U, 0xCAU, 0x81U, 0xB8U, + 0x3DU, 0x04U, 0x4FU, 0x76U, 0xD9U, 0xE0U, 0xABU, 0x92U, 0xCCU, 0xF5U, 0xBEU, 0x87U, 0x28U, 0x11U, 0x5AU, 0x63U}; const unsigned int MAX_CCS_ERRS = 4U; diff --git a/P25Network.cpp b/P25Network.cpp index d0428a8f4..b63b52232 100644 --- a/P25Network.cpp +++ b/P25Network.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2019,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -87,16 +87,17 @@ const unsigned char REC80[] = { const unsigned int BUFFER_LENGTH = 100U; -CP25Network::CP25Network(const std::string& gatewayAddress, unsigned int gatewayPort, unsigned int localPort, bool debug) : -m_socket(localPort), -m_address(), -m_port(gatewayPort), +CP25Network::CP25Network(const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& localAddress, unsigned short localPort, bool debug) : +m_socket(localAddress, localPort), +m_addr(), +m_addrLen(0U), m_debug(debug), m_enabled(false), m_buffer(1000U, "P25 Network"), m_audio() { - m_address = CUDPSocket::lookup(gatewayAddress); + if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) + m_addrLen = 0U; } CP25Network::~CP25Network() @@ -105,12 +106,14 @@ CP25Network::~CP25Network() bool CP25Network::open() { - LogMessage("Opening P25 network connection"); - - if (m_address.s_addr == INADDR_NONE) + if (m_addrLen == 0U) { + LogError("Unable to resolve the address of the P25 Gateway"); return false; + } + + LogMessage("Opening P25 network connection"); - return m_socket.open(); + return m_socket.open(m_addr); } bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, const CP25LowSpeedData& lsd, bool end) @@ -126,7 +129,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 22U); - bool ret = m_socket.write(buffer, 22U, m_address, m_port); + bool ret = m_socket.write(buffer, 22U, m_addr, m_addrLen); if (!ret) return false; @@ -137,7 +140,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 14U); - ret = m_socket.write(buffer, 14U, m_address, m_port); + ret = m_socket.write(buffer, 14U, m_addr, m_addrLen); if (!ret) return false; @@ -150,7 +153,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -165,7 +168,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -180,7 +183,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -191,7 +194,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -202,7 +205,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -213,7 +216,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -226,7 +229,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 16U); - ret = m_socket.write(buffer, 16U, m_address, m_port); + ret = m_socket.write(buffer, 16U, m_addr, m_addrLen); if (!ret) return false; @@ -234,7 +237,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network END Sent", REC80, 17U); - ret = m_socket.write(REC80, 17U, m_address, m_port); + ret = m_socket.write(REC80, 17U, m_addr, m_addrLen); if (!ret) return false; } @@ -255,7 +258,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 22U); - bool ret = m_socket.write(buffer, 22U, m_address, m_port); + bool ret = m_socket.write(buffer, 22U, m_addr, m_addrLen); if (!ret) return false; @@ -266,7 +269,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 14U); - ret = m_socket.write(buffer, 14U, m_address, m_port); + ret = m_socket.write(buffer, 14U, m_addr, m_addrLen); if (!ret) return false; @@ -283,7 +286,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -297,7 +300,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -311,7 +314,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -326,7 +329,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -337,7 +340,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -348,7 +351,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U); - ret = m_socket.write(buffer, 17U, m_address, m_port); + ret = m_socket.write(buffer, 17U, m_addr, m_addrLen); if (!ret) return false; @@ -361,7 +364,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 16U); - ret = m_socket.write(buffer, 16U, m_address, m_port); + ret = m_socket.write(buffer, 16U, m_addr, m_addrLen); if (!ret) return false; @@ -369,7 +372,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control, if (m_debug) CUtils::dump(1U, "P25 Network END Sent", REC80, 17U); - ret = m_socket.write(REC80, 17U, m_address, m_port); + ret = m_socket.write(REC80, 17U, m_addr, m_addrLen); if (!ret) return false; } @@ -381,15 +384,14 @@ void CP25Network::clock(unsigned int ms) { unsigned char buffer[BUFFER_LENGTH]; - in_addr address; - unsigned int port; - int length = m_socket.read(buffer, BUFFER_LENGTH, address, port); + sockaddr_storage address; + unsigned int addrLen; + int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrLen); if (length <= 0) return; - // Check if the data is for us - if (m_address.s_addr != address.s_addr || m_port != port) { - LogMessage("P25 packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port); + if (!CUDPSocket::match(m_addr, address)) { + LogMessage("P25, packet received from an invalid source"); return; } @@ -422,6 +424,11 @@ unsigned int CP25Network::read(unsigned char* data, unsigned int length) return c; } +bool CP25Network::isConnected() const +{ + return (m_addrLen != 0); +} + void CP25Network::close() { m_socket.close(); @@ -431,5 +438,8 @@ void CP25Network::close() void CP25Network::enable(bool enabled) { + if (!enabled && m_enabled) + m_buffer.clear(); + m_enabled = enabled; } diff --git a/P25Network.h b/P25Network.h index 054c772e5..7023c94e8 100644 --- a/P25Network.h +++ b/P25Network.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ class CP25Network { public: - CP25Network(const std::string& gatewayAddress, unsigned int gatewayPort, unsigned int localPort, bool debug); + CP25Network(const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& localAddress, unsigned short localPort, bool debug); ~CP25Network(); bool open(); @@ -43,18 +43,20 @@ class CP25Network { unsigned int read(unsigned char* data, unsigned int length); + bool isConnected() const; + void close(); void clock(unsigned int ms); private: - CUDPSocket m_socket; - in_addr m_address; - unsigned int m_port; - bool m_debug; - bool m_enabled; + CUDPSocket m_socket; + sockaddr_storage m_addr; + unsigned int m_addrLen; + bool m_debug; + bool m_enabled; CRingBuffer m_buffer; - CP25Audio m_audio; + CP25Audio m_audio; }; #endif diff --git a/POCSAGControl.cpp b/POCSAGControl.cpp index 498a0a7a4..056827165 100644 --- a/POCSAGControl.cpp +++ b/POCSAGControl.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2018 Jonathan Naylor, G4KLX +* Copyright (C) 2018,2019,2020 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -67,8 +67,9 @@ m_count(0U), m_output(), m_buffer(), m_ric(0U), -m_text(), +m_data(), m_state(PS_NONE), +m_enabled(true), m_fp(NULL) { assert(display != NULL); @@ -78,6 +79,10 @@ CPOCSAGControl::~CPOCSAGControl() { m_output.clear(); m_buffer.clear(); + + for (std::deque::iterator it = m_data.begin(); it != m_data.end(); ++it) + delete *it; + m_data.clear(); } unsigned int CPOCSAGControl::readModem(unsigned char* data) @@ -95,53 +100,189 @@ unsigned int CPOCSAGControl::readModem(unsigned char* data) return len; } -bool CPOCSAGControl::processData() +void CPOCSAGControl::sendPage(unsigned int ric, const std::string& text) +{ + if (!m_enabled) + return; + + POCSAGData* output = new POCSAGData; + + output->m_ric = ric; + output->m_text = text; + + addAddress(FUNCTIONAL_ALPHANUMERIC, ric, output->m_buffer); + + LogDebug("Local message to %07u, func Alphanumeric: \"%s\"", ric, text.c_str()); + + packASCII(text, output->m_buffer); + + // Ensure data is an even number of words + if ((output->m_buffer.size() % 2U) == 1U) + output->m_buffer.push_back(POCSAG_IDLE_WORD); + + m_data.push_back(output); +} + + +void CPOCSAGControl::sendPageBCD(unsigned int ric, const std::string& text) +{ + if (!m_enabled) + return; + + POCSAGData* output = new POCSAGData; + + output->m_ric = ric; + output->m_text = text; + + addAddress(FUNCTIONAL_NUMERIC, ric, output->m_buffer); + + LogDebug("Local message to %07u, func NUMERIC: \"%s\"", ric, text.c_str()); + + packNumeric(text, output->m_buffer); + + // Ensure data is an even number of words + if ((output->m_buffer.size() % 2U) == 1U) + output->m_buffer.push_back(POCSAG_IDLE_WORD); + + m_data.push_back(output); +} + + +void CPOCSAGControl::sendPageAlert1(unsigned int ric) +{ + if (!m_enabled) + return; + + POCSAGData* output = new POCSAGData; + + output->m_ric = ric; + + addAddress(FUNCTIONAL_ALERT1, ric, output->m_buffer); + + LogDebug("Local message to %07u, func Alert1", ric); + + // Ensure data is an even number of words + if ((output->m_buffer.size() % 2U) == 1U) + output->m_buffer.push_back(POCSAG_IDLE_WORD); + + m_data.push_back(output); +} + + +void CPOCSAGControl::sendPageAlert2(unsigned int ric, const std::string& text) +{ + if (!m_enabled) + return; + + POCSAGData* output = new POCSAGData; + + output->m_ric = ric; + output->m_text = text; + + addAddress(FUNCTIONAL_ALERT2, ric, output->m_buffer); + + LogDebug("Local message to %07u, func Alert2: \"%s\"", ric, text.c_str()); + + packASCII(text, output->m_buffer); + + // Ensure data is an even number of words + if ((output->m_buffer.size() % 2U) == 1U) + output->m_buffer.push_back(POCSAG_IDLE_WORD); + + m_data.push_back(output); +} + +bool CPOCSAGControl::readNetwork() { if (m_network == NULL) - return false; + return true; unsigned char data[300U]; unsigned int length = m_network->read(data); if (length == 0U) + return true; + + if (!m_enabled) return false; - m_ric = 0U; - m_ric |= (data[0U] << 16) & 0x00FF0000U; - m_ric |= (data[1U] << 8) & 0x0000FF00U; - m_ric |= (data[2U] << 0) & 0x000000FFU; + POCSAGData* output = new POCSAGData; + + output->m_ric = 0U; + output->m_ric |= (data[0U] << 16) & 0x00FF0000U; + output->m_ric |= (data[1U] << 8) & 0x0000FF00U; + output->m_ric |= (data[2U] << 0) & 0x000000FFU; unsigned char functional = data[3U]; - m_buffer.clear(); - addAddress(functional); + addAddress(functional, output->m_ric, output->m_buffer); + + char rubric[20U]; + std::string out; switch (functional) { case FUNCTIONAL_ALPHANUMERIC: - m_text = std::string((char*)(data + 4U), length - 4U); - LogDebug("Message to %07u, func Alphanumeric: \"%s\"", m_ric, m_text.c_str()); - packASCII(); + output->m_text = std::string((char*)(data + 4U), length - 4U); + switch (output->m_ric) { + case 4512U: + ::sprintf(rubric, "(%u) \"", output->m_text.at(1U) - 0x1FU); + decodeROT1(output->m_text, 3U, out); + output->m_display = rubric + out + "\""; + break; + case 4520U: + ::sprintf(rubric, "(%u-%u) \"", output->m_text.at(0U) - 0x1FU, output->m_text.at(1U) - 0x20U); + decodeROT1(output->m_text, 2U, out); + output->m_display = rubric + out + "\""; + break; + default: + output->m_display = output->m_text; + break; + } + LogDebug("Message to %07u, func Alphanumeric: %s", output->m_ric, output->m_display.c_str()); + packASCII(output->m_text, output->m_buffer); break; case FUNCTIONAL_NUMERIC: - m_text = std::string((char*)(data + 4U), length - 4U); - LogDebug("Message to %07u, func Numeric: \"%s\"", m_ric, m_text.c_str()); - packNumeric(); + output->m_text = std::string((char*)(data + 4U), length - 4U); + output->m_display = output->m_text; + LogDebug("Message to %07u, func Numeric: \"%s\"", output->m_ric, output->m_display.c_str()); + packNumeric(output->m_text, output->m_buffer); break; case FUNCTIONAL_ALERT1: - m_text.clear(); - LogDebug("Message to %07u, func Alert 1", m_ric); + output->m_display = "Func alert 1"; + LogDebug("Message to %07u, func Alert 1", output->m_ric); break; case FUNCTIONAL_ALERT2: - m_text = std::string((char*)(data + 4U), length - 4U); - LogDebug("Message to %07u, func Alert 2: \"%s\"", m_ric, m_text.c_str()); - packASCII(); + output->m_text = std::string((char*)(data + 4U), length - 4U); + output->m_display = "Func alert 2: " + output->m_text; + LogDebug("Message to %07u, func Alert 2: \"%s\"", output->m_ric, output->m_display.c_str()); + packASCII(output->m_text, output->m_buffer); break; default: break; } // Ensure data is an even number of words - if ((m_buffer.size() % 2U) == 1U) - m_buffer.push_back(POCSAG_IDLE_WORD); + if ((output->m_buffer.size() % 2U) == 1U) + output->m_buffer.push_back(POCSAG_IDLE_WORD); + + m_data.push_back(output); + + return true; +} + +bool CPOCSAGControl::processData() +{ + if (m_data.empty()) + return false; + + POCSAGData* output = m_data.front(); + m_data.pop_front(); + + m_display->writePOCSAG(output->m_ric, output->m_display); + + m_buffer = output->m_buffer; + m_ric = output->m_ric; + + delete output; return true; } @@ -149,11 +290,14 @@ bool CPOCSAGControl::processData() void CPOCSAGControl::clock(unsigned int ms) { if (m_state == PS_NONE) { - bool ret = processData(); + bool ret = readNetwork(); + if (!ret) + return; + + ret = processData(); if (!ret) return; - m_display->writePOCSAG(m_ric, m_text); m_state = PS_WAITING; m_frames = 0U; m_count = 1U; @@ -189,7 +333,6 @@ void CPOCSAGControl::clock(unsigned int ms) bool ret = processData(); if (ret) { - m_display->writePOCSAG(m_ric, m_text); m_state = PS_WAITING; m_count++; } else { @@ -224,7 +367,7 @@ void CPOCSAGControl::clock(unsigned int ms) } } -void CPOCSAGControl::addAddress(unsigned char functional) +void CPOCSAGControl::addAddress(unsigned char functional, unsigned int ric, std::deque& buffer) const { uint32_t word = 0x00000000U; @@ -243,21 +386,21 @@ void CPOCSAGControl::addAddress(unsigned char functional) break; } - word |= (m_ric / POCSAG_FRAME_ADDRESSES) << 13; + word |= (ric / POCSAG_FRAME_ADDRESSES) << 13; addBCHAndParity(word); - m_buffer.push_back(word); + buffer.push_back(word); } -void CPOCSAGControl::packASCII() +void CPOCSAGControl::packASCII(const std::string& text, std::deque& buffer) const { const unsigned char MASK = 0x01U; uint32_t word = 0x80000000U; unsigned int n = 0U; - for (std::string::const_iterator it = m_text.cbegin(); it != m_text.cend(); ++it) { + for (std::string::const_iterator it = text.cbegin(); it != text.cend(); ++it) { unsigned char c = *it; for (unsigned int j = 0U; j < 7U; j++, c >>= 1) { bool b = (c & MASK) == MASK; @@ -267,7 +410,7 @@ void CPOCSAGControl::packASCII() if (n == 20U) { addBCHAndParity(word); - m_buffer.push_back(word); + buffer.push_back(word); word = 0x80000000U; n = 0U; } @@ -276,16 +419,16 @@ void CPOCSAGControl::packASCII() if (n > 0U) { addBCHAndParity(word); - m_buffer.push_back(word); + buffer.push_back(word); } } -void CPOCSAGControl::packNumeric() +void CPOCSAGControl::packNumeric(const std::string& text, std::deque& buffer) const { uint32_t word = 0x80000000U; unsigned int n = 0U; - for (std::string::const_iterator it = m_text.cbegin(); it != m_text.cend(); ++it) { + for (std::string::const_iterator it = text.cbegin(); it != text.cend(); ++it) { char c = *it; const BCD* bcd = NULL; @@ -301,8 +444,8 @@ void CPOCSAGControl::packNumeric() n++; if (n == 5U) { - addBCHAndParity(word); - m_buffer.push_back(word); + addBCHAndParity(word); + buffer.push_back(word); word = 0x80000000U; n = 0U; } @@ -314,7 +457,7 @@ void CPOCSAGControl::packNumeric() word |= BCD_SPACES[n]; addBCHAndParity(word); - m_buffer.push_back(word); + buffer.push_back(word); } } @@ -386,7 +529,7 @@ bool CPOCSAGControl::openFile() struct tm* tm = ::localtime(&t); char name[100U]; - ::sprintf(name, "POCSAG_%04d%02d%02d_%02d%02d%02d.ambe", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); + ::sprintf(name, "POCSAG_%04d%02d%02d_%02d%02d%02d.dat", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); m_fp = ::fopen(name, "wb"); if (m_fp == NULL) @@ -414,3 +557,25 @@ void CPOCSAGControl::closeFile() m_fp = NULL; } } + +void CPOCSAGControl::enable(bool enabled) +{ + if (!enabled && m_enabled) { + m_queue.clear(); + m_output.clear(); + + for (std::deque::iterator it = m_data.begin(); it != m_data.end(); ++it) + delete *it; + m_data.clear(); + + m_state = PS_NONE; + } + + m_enabled = enabled; +} + +void CPOCSAGControl::decodeROT1(const std::string& in, unsigned int start, std::string& out) const +{ + for (size_t i = start; i < in.length(); i++) + out += in.at(i) - 1U; +} diff --git a/POCSAGControl.h b/POCSAGControl.h index 828e4cbe2..42fed7ee8 100644 --- a/POCSAGControl.h +++ b/POCSAGControl.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2018 by Jonathan Naylor G4KLX +* Copyright (C) 2018,2019,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,15 +30,29 @@ #include #include +struct POCSAGData { + unsigned int m_ric; + std::string m_text; + std::string m_display; + std::deque m_buffer; +}; + class CPOCSAGControl { public: CPOCSAGControl(CPOCSAGNetwork* network, CDisplay* display); ~CPOCSAGControl(); + void sendPage(unsigned int ric, const std::string& text); + void sendPageBCD(unsigned int ric, const std::string& text); + void sendPageAlert1(unsigned int ric); + void sendPageAlert2(unsigned int ric, const std::string& text); + unsigned int readModem(unsigned char* data); void clock(unsigned int ms); + void enable(bool enabled); + private: CPOCSAGNetwork* m_network; CDisplay* m_display; @@ -55,20 +69,24 @@ class CPOCSAGControl { std::deque m_output; std::deque m_buffer; - uint32_t m_ric; - std::string m_text; + unsigned int m_ric; + std::deque m_data; POCSAG_STATE m_state; + bool m_enabled; FILE* m_fp; - bool processData(); + bool readNetwork(); void writeQueue(); - void addAddress(unsigned char functional); - void packASCII(); - void packNumeric(); + bool processData(); + void addAddress(unsigned char functional, unsigned int ric, std::deque& buffer) const; + void packASCII(const std::string& text, std::deque& buffer) const; + void packNumeric(const std::string& text, std::deque& buffer) const; void addBCHAndParity(uint32_t& word) const; bool openFile(); bool writeFile(const unsigned char* data); void closeFile(); + + void decodeROT1(const std::string& in, unsigned int start, std::string& out) const; }; #endif diff --git a/POCSAGNetwork.cpp b/POCSAGNetwork.cpp index d61745864..2a4e65049 100644 --- a/POCSAGNetwork.cpp +++ b/POCSAGNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 by Jonathan Naylor G4KLX + * Copyright (C) 2018,2019,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,15 +28,16 @@ const unsigned int BUFFER_LENGTH = 200U; -CPOCSAGNetwork::CPOCSAGNetwork(const std::string& myAddress, unsigned int myPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug) : -m_socket(myAddress, myPort), -m_address(), -m_port(gatewayPort), +CPOCSAGNetwork::CPOCSAGNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug) : +m_socket(localAddress, localPort), +m_addr(), +m_addrLen(0U), m_debug(debug), m_enabled(false), m_buffer(1000U, "POCSAG Network") { - m_address = CUDPSocket::lookup(gatewayAddress); + if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) + m_addrLen = 0U; } CPOCSAGNetwork::~CPOCSAGNetwork() @@ -45,10 +46,12 @@ CPOCSAGNetwork::~CPOCSAGNetwork() bool CPOCSAGNetwork::open() { - LogMessage("Opening POCSAG network connection"); - - if (m_address.s_addr == INADDR_NONE) + if (m_addrLen == 0U) { + LogError("Unable to resolve the address of the DAPNET Gateway"); return false; + } + + LogMessage("Opening POCSAG network connection"); return m_socket.open(); } @@ -57,18 +60,20 @@ void CPOCSAGNetwork::clock(unsigned int ms) { unsigned char buffer[BUFFER_LENGTH]; - in_addr address; - unsigned int port; - int length = m_socket.read(buffer, BUFFER_LENGTH, address, port); + sockaddr_storage address; + unsigned int addrLen; + int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrLen); if (length <= 0) return; - // Check if the data is for us - if (m_address.s_addr != address.s_addr || m_port != port) { - LogMessage("POCSAG packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port); + if (!CUDPSocket::match(m_addr, address)) { + LogMessage("POCSAG, packet received from an invalid source"); return; } + if (m_debug) + CUtils::dump(1U, "POCSAG Network Data Received", buffer, length); + // Invalid packet type? if (::memcmp(buffer, "POCSAG", 6U) != 0) return; @@ -76,9 +81,6 @@ void CPOCSAGNetwork::clock(unsigned int ms) if (!m_enabled) return; - if (m_debug) - CUtils::dump(1U, "POCSAG Network Data Received", buffer, length); - unsigned char len = length - 6U; m_buffer.addData(&len, 1U); m_buffer.addData(buffer + 6U, length - 6U); @@ -113,10 +115,12 @@ void CPOCSAGNetwork::enable(bool enabled) { if (enabled && !m_enabled) reset(); + else if (!enabled && m_enabled) + m_buffer.clear(); unsigned char c = enabled ? 0x00U : 0xFFU; - m_socket.write(&c, 1U, m_address, m_port); + m_socket.write(&c, 1U, m_addr, m_addrLen); m_enabled = enabled; } diff --git a/POCSAGNetwork.h b/POCSAGNetwork.h index fe9520358..beceb9b9e 100644 --- a/POCSAGNetwork.h +++ b/POCSAGNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 by Jonathan Naylor G4KLX + * Copyright (C) 2018,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,7 +29,7 @@ class CPOCSAGNetwork { public: - CPOCSAGNetwork(const std::string& myAddress, unsigned int myPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug); + CPOCSAGNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug); ~CPOCSAGNetwork(); bool open(); @@ -45,11 +45,11 @@ class CPOCSAGNetwork { void clock(unsigned int ms); private: - CUDPSocket m_socket; - in_addr m_address; - unsigned int m_port; - bool m_debug; - bool m_enabled; + CUDPSocket m_socket; + sockaddr_storage m_addr; + unsigned int m_addrLen; + bool m_debug; + bool m_enabled; CRingBuffer m_buffer; }; diff --git a/PseudoTTYController.cpp b/PseudoTTYController.cpp new file mode 100644 index 000000000..97062eb44 --- /dev/null +++ b/PseudoTTYController.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(_WIN32) && !defined(_WIN64) + +#include "PseudoTTYController.h" +#include "Log.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#if defined(__linux__) + #include +#else + #include +#endif + + +CPseudoTTYController::CPseudoTTYController(const std::string& symlink, unsigned int speed, bool assertRTS) : +CUARTController(speed, assertRTS), +m_symlink(symlink) +{ +} + +CPseudoTTYController::~CPseudoTTYController() +{ +} + +bool CPseudoTTYController::open() +{ + assert(m_fd == -1); + + int slavefd; + char slave[300]; + int result = ::openpty(&m_fd, &slavefd, slave, NULL, NULL); + if (result < 0) { + LogError("Cannot open the pseudo tty - errno : %d", errno); + return false; + } + + // Remove any previous stale symlink + ::unlink(m_symlink.c_str()); + + int ret = ::symlink(slave, m_symlink.c_str()); + if (ret != 0) { + LogError("Cannot make symlink to %s with %s", slave, m_symlink.c_str()); + close(); + return false; + } + + LogMessage("Made symbolic link from %s to %s", slave, m_symlink.c_str()); + + m_device = std::string(::ttyname(m_fd)); + + return setRaw(); +} + +void CPseudoTTYController::close() +{ + CUARTController::close(); + + ::unlink(m_symlink.c_str()); +} + +#endif diff --git a/MobileGPS.h b/PseudoTTYController.h similarity index 52% rename from MobileGPS.h rename to PseudoTTYController.h index 8d6957215..228f153d4 100644 --- a/MobileGPS.h +++ b/PseudoTTYController.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 by Jonathan Naylor G4KLX + * Copyright (C) 2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,48 +16,28 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef MobileGPS_H -#define MobileGPS_H - -#include "DMRNetwork.h" -#include "UDPSocket.h" -#include "Timer.h" - -#include +#ifndef PseudoTTYController_H +#define PseudoTTYController_H #if !defined(_WIN32) && !defined(_WIN64) -#include -#include -#include -#include -#include -#include -#include -#include -#else -#include -#endif -class CMobileGPS { -public: - CMobileGPS(const std::string& address, unsigned int port, CDMRNetwork* network); - ~CMobileGPS(); +#include - bool open(); +#include "UARTController.h" - void clock(unsigned int ms); +class CPseudoTTYController : public CUARTController { +public: + CPseudoTTYController(const std::string& symlink, unsigned int speed, bool assertRTS = false); + virtual ~CPseudoTTYController(); - void close(); + virtual bool open(); -private: - CTimer m_idTimer; - in_addr m_address; - unsigned int m_port; - CUDPSocket m_socket; - CDMRNetwork* m_network; + virtual void close(); - bool pollGPS(); - void sendReport(); +protected: + std::string m_symlink; }; #endif + +#endif diff --git a/README.md b/README.md index 953e4cee7..7aca830d9 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,42 @@ -These are the source files for building the MMDVMHost, the program that interfaces to the MMDVM or DVMega on the one side, and a suitable network on the other. It supports D-Star, DMR, P25 Phase 1, NXDN, System Fusion, and POCSAG paging on the MMDVM, and D-Star, DMR, and System Fusion on the DVMega. - -On the D-Star side the MMDVMHost interfaces with the ircDDB Gateway, on DMR it can connect to BrandMeister, DMR+, HB Link, XLX or [DMRGateway](https://github.com/g4klx/DMRGateway) (to connect to multiple DMR networks at once) on System Fusion it connects to the YSF Gateway to allow access to the FCS and YSF networks. On P25 it connects to the P25 Gateway. On NXDN it connects to the NXDN Gateway which provides access to the NXDN and NXCore talk groups. Finally it uses the DAPNET Gateway to access DAPNET to receive paging messages. - -It builds on 32-bit and 64-bit Linux as well as on Windows using Visual Studio 2017 on x86 and x64. It can optionally control various Displays. Currently these are: +These are the source files for building the MMDVMHost, the program that +interfaces to the MMDVM or DVMega on the one side, and a suitable network on +the other. It supports D-Star, DMR, P25 Phase 1, NXDN, System Fusion, M17, +POCSAG, FM, and AX.25 on the MMDVM, and D-Star, DMR, and System Fusion on the DVMega. + +On the D-Star side the MMDVMHost interfaces with the ircDDB Gateway, on DMR it +connects to the DMR Gateway to allow for connection to multiple DMR networks, +or a single network directly. on System Fusion it connects to the YSF Gateway to allow +access to the FCS and YSF networks. On P25 it connects to the P25 Gateway. On +NXDN it connects to the NXDN Gateway which provides access to the NXDN and +NXCore talk groups. On M17 it uses the M17 Gateway to access the M17 reflector system. +It uses the DAPNET Gateway to access DAPNET to receive +paging messages. Finally it uses the FM Gateway to interface to existing FM +networks. + +It builds on 32-bit and 64-bit Linux as well as on Windows using Visual Studio +2019 on x86 and x64. It can optionally control various Displays. Currently +these are: - HD44780 (sizes 2x16, 2x40, 4x16, 4x20) - Support for HD44780 via 4 bit GPIO connection (user selectable pins) - Adafruit 16x2 LCD+Keypad Kits (I2C) - Connection via PCF8574 GPIO Extender (I2C) - Nextion TFTs (all sizes, both Basic and Enhanced versions) -- TFT display sold by Hobbytronics in UK - OLED 128x64 (SSD1306) - LCDproc -The Nextion displays can connect to the UART on the Raspberry Pi, or via a USB to TTL serial converter like the FT-232RL. It may also be connected to the UART output of the MMDVM modem (Arduino Due, STM32, Teensy), or to the UART output on the UMP. - -The HD44780 displays are integrated with wiringPi for Raspberry Pi based platforms. +The Nextion displays can connect to the UART on the Raspberry Pi, or via a USB +to TTL serial converter like the FT-232RL. It may also be connected to the UART +output of the MMDVM modem (Arduino Due, STM32, Teensy). -The Hobbytronics TFT Display, which is a Pi-Hat, connects to the UART on the Raspbery Pi. +The HD44780 displays are integrated with wiringPi for Raspberry Pi based +platforms. -The OLED display needs a extra library see OLED.md +The OLED display needs an extra library see OLED.md -The LCDproc support enables the use of a multitude of other LCD screens. See the [supported devices](http://lcdproc.omnipotent.net/hardware.php3) page on the LCDproc website for more info. +The LCDproc support enables the use of a multitude of other LCD screens. See +the [supported devices](http://lcdproc.omnipotent.net/hardware.php3) page on +the LCDproc website for more info. -This software is licenced under the GPL v2 and is intended for amateur and educational use only. Use of this software for commercial purposes is strictly forbidden. +This software is licenced under the GPL v2 and is primarily intended for amateur and +educational use. diff --git a/RemoteCommand.cpp b/RemoteCommand.cpp new file mode 100644 index 000000000..0e8918d33 --- /dev/null +++ b/RemoteCommand.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2019,2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "RemoteCommand.h" + +#include "UDPSocket.h" +#include "Log.h" + +#include +#include +#include + +const unsigned int BUFFER_LENGTH = 1024U; + +int main(int argc, char** argv) +{ + if (argc < 3) { + ::fprintf(stderr, "Usage: RemoteCommand [argument]\n"); + return 1; + } + + unsigned int port = (unsigned int)::atoi(argv[1]); + std::string cmd = std::string(argv[2]); + + for (int i = 3; i < argc; i++) { + cmd += " "; + cmd += std::string(argv[i]); + } + + if (port == 0U) { + ::fprintf(stderr, "RemoteCommand: invalid port number - %s\n", argv[1]); + return 1; + } + + CRemoteCommand* command = new CRemoteCommand(port); + + return command->send(cmd); +} + +CRemoteCommand::CRemoteCommand(unsigned int port) : +m_port(port) +{ + CUDPSocket::startup(); + + ::LogInitialise(false, ".", "RemoteCommand", 2U, 2U, false); +} + +CRemoteCommand::~CRemoteCommand() +{ + ::LogFinalise(); + + CUDPSocket::shutdown(); +} + +int CRemoteCommand::send(const std::string& command) +{ + sockaddr_storage addr; + unsigned int addrLen; + char buffer[BUFFER_LENGTH]; + int retStatus = 0; + + if (CUDPSocket::lookup("127.0.0.1", m_port, addr, addrLen) != 0) { + ::fprintf(stderr, "Unable to resolve the address of the host\n"); + return 1; + } + + CUDPSocket socket(0U); + + bool ret = socket.open(addr); + if (!ret) + return 1; + + ret = socket.write((unsigned char*)command.c_str(), command.length(), addr, addrLen); + if (!ret) { + socket.close(); + return 1; + } + + ::fprintf(stdout, "Command sent: \"%s\" to port: %u\n", command.c_str(), m_port); + + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + + int len = socket.read((unsigned char*)buffer, BUFFER_LENGTH, addr, addrLen); + if (len > 0) { + buffer[len] = '\0'; + ::fprintf(stdout, "%s\n", buffer); + } + else + { + retStatus = 1; + } + + socket.close(); + + return retStatus; +} diff --git a/RemoteCommand.h b/RemoteCommand.h new file mode 100644 index 000000000..afefce748 --- /dev/null +++ b/RemoteCommand.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef RemoteCommand_H +#define RemoteCommand_H + +#include + +class CRemoteCommand +{ +public: + CRemoteCommand(unsigned int port); + ~CRemoteCommand(); + + int send(const std::string& command); + +private: + unsigned int m_port; +}; + +#endif diff --git a/RemoteCommand.vcxproj b/RemoteCommand.vcxproj new file mode 100644 index 000000000..e4bbb73b6 --- /dev/null +++ b/RemoteCommand.vcxproj @@ -0,0 +1,170 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {5A61AB93-58BB-413A-BBD9-A26284CB37AE} + Win32Proj + RemoteCommand + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + NotUsing + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS + true + pch.h + + + Console + true + ws2_32.lib;%(AdditionalDependencies) + + + + + NotUsing + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS + true + pch.h + + + Console + true + ws2_32.lib;%(AdditionalDependencies) + + + + + NotUsing + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS + true + pch.h + + + Console + true + true + true + ws2_32.lib;%(AdditionalDependencies) + + + + + NotUsing + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS + true + pch.h + + + Console + true + true + true + ws2_32.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RemoteCommand.vcxproj.filters b/RemoteCommand.vcxproj.filters new file mode 100644 index 000000000..190b67ccd --- /dev/null +++ b/RemoteCommand.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/RemoteControl.cpp b/RemoteControl.cpp new file mode 100644 index 000000000..e9f542929 --- /dev/null +++ b/RemoteControl.cpp @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2019,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "RemoteControl.h" +#include "MMDVMHost.h" +#include "Log.h" + +#include +#include +#include +#include + +const unsigned int SET_MODE_ARGS = 2U; +const unsigned int ENABLE_ARGS = 2U; +const unsigned int DISABLE_ARGS = 2U; +const unsigned int PAGE_ARGS = 3U; +const unsigned int CW_ARGS = 2U; + +const unsigned int BUFFER_LENGTH = 100U; + +CRemoteControl::CRemoteControl(CMMDVMHost *host, const std::string address, unsigned int port) : +m_host(host), +m_socket(address, port), +m_command(RCD_NONE), +m_args() +{ + assert(port > 0U); +} + +CRemoteControl::~CRemoteControl() +{ +} + +bool CRemoteControl::open() +{ + return m_socket.open(); +} + +REMOTE_COMMAND CRemoteControl::getCommand() +{ + m_command = RCD_NONE; + m_args.clear(); + + char command[BUFFER_LENGTH]; + char buffer[BUFFER_LENGTH * 2]; + std::string replyStr = "OK"; + sockaddr_storage address; + unsigned int addrlen; + int ret = m_socket.read((unsigned char*)buffer, BUFFER_LENGTH, address, addrlen); + if (ret > 0) { + buffer[ret] = '\0'; + + // Make a copy of the original command for logging. + ::strcpy(command, buffer); + + // Parse the original command into a vector of strings. + char* b = buffer; + char* p = NULL; + while ((p = ::strtok(b, " ")) != NULL) { + b = NULL; + m_args.push_back(std::string(p)); + } + + if (m_args.at(0U) == "mode" && m_args.size() >= SET_MODE_ARGS) { + // Mode command is in the form of "mode [|fixed]" + if (m_args.at(1U) == "idle") + m_command = RCD_MODE_IDLE; + else if (m_args.at(1U) == "lockout") + m_command = RCD_MODE_LOCKOUT; + else if (m_args.at(1U) == "d-star") + m_command = RCD_MODE_DSTAR; + else if (m_args.at(1U) == "dmr") + m_command = RCD_MODE_DMR; + else if (m_args.at(1U) == "ysf") + m_command = RCD_MODE_YSF; + else if (m_args.at(1U) == "p25") + m_command = RCD_MODE_P25; + else if (m_args.at(1U) == "nxdn") + m_command = RCD_MODE_NXDN; + else if (m_args.at(1U) == "m17") + m_command = RCD_MODE_M17; + else + replyStr = "KO"; + } else if (m_args.at(0U) == "enable" && m_args.size() >= ENABLE_ARGS) { + if (m_args.at(1U) == "dstar") + m_command = RCD_ENABLE_DSTAR; + else if (m_args.at(1U) == "dmr") + m_command = RCD_ENABLE_DMR; + else if (m_args.at(1U) == "ysf") + m_command = RCD_ENABLE_YSF; + else if (m_args.at(1U) == "p25") + m_command = RCD_ENABLE_P25; + else if (m_args.at(1U) == "nxdn") + m_command = RCD_ENABLE_NXDN; + else if (m_args.at(1U) == "m17") + m_command = RCD_ENABLE_M17; + else if (m_args.at(1U) == "fm") + m_command = RCD_ENABLE_FM; + else if (m_args.at(1U) == "ax25") + m_command = RCD_ENABLE_AX25; + else + replyStr = "KO"; + } else if (m_args.at(0U) == "disable" && m_args.size() >= DISABLE_ARGS) { + if (m_args.at(1U) == "dstar") + m_command = RCD_DISABLE_DSTAR; + else if (m_args.at(1U) == "dmr") + m_command = RCD_DISABLE_DMR; + else if (m_args.at(1U) == "ysf") + m_command = RCD_DISABLE_YSF; + else if (m_args.at(1U) == "p25") + m_command = RCD_DISABLE_P25; + else if (m_args.at(1U) == "nxdn") + m_command = RCD_DISABLE_NXDN; + else if (m_args.at(1U) == "m17") + m_command = RCD_DISABLE_M17; + else if (m_args.at(1U) == "fm") + m_command = RCD_DISABLE_FM; + else if (m_args.at(1U) == "ax25") + m_command = RCD_DISABLE_AX25; + else + replyStr = "KO"; + } else if (m_args.at(0U) == "page" && m_args.size() >= PAGE_ARGS) { + // Page command is in the form of "page " + m_command = RCD_PAGE; + } else if (m_args.at(0U) == "page_bcd" && m_args.size() >= PAGE_ARGS) { + // BCD page command is in the form of "page_bcd " + m_command = RCD_PAGE_BCD; + } else if (m_args.at(0U) == "page_a1" && m_args.size() == 2) { + // Alert1 page command is in the form of "page_a1 " + m_command = RCD_PAGE_A1; + } else if (m_args.at(0U) == "page_a2" && m_args.size() >= PAGE_ARGS) { + // Alert2 page command is in the form of "page_a2 " + m_command = RCD_PAGE_A2; + } else if (m_args.at(0U) == "cw" && m_args.size() >= CW_ARGS) { + // CW command is in the form of "cw " + m_command = RCD_CW; + } else if (m_args.at(0U) == "reload") { + // Reload command is in the form of "reload" + m_command = RCD_RELOAD; + } else if (m_args.at(0U) == "status") { + if (m_host != NULL) { + m_host->buildNetworkStatusString(replyStr); + } else { + replyStr = "KO"; + } + + m_command = RCD_CONNECTION_STATUS; + } else if (m_args.at(0U) == "hosts") { + if (m_host != NULL) { + m_host->buildNetworkHostsString(replyStr); + } else { + replyStr = "KO"; + } + + m_command = RCD_CONFIG_HOSTS; + } else { + replyStr = "KO"; + } + + ::snprintf(buffer, BUFFER_LENGTH * 2, "%s remote command of \"%s\" received", ((m_command == RCD_NONE) ? "Invalid" : "Valid"), command); + if (m_command == RCD_NONE) { + m_args.clear(); + LogWarning(buffer); + } else { +#if !defined(REMOTE_COMMAND_NO_LOG) + LogMessage(buffer); +#endif + } + + m_socket.write((unsigned char*)replyStr.c_str(), replyStr.length(), address, addrlen); + } + + return m_command; +} + +unsigned int CRemoteControl::getArgCount() const +{ + switch (m_command) { + case RCD_MODE_IDLE: + case RCD_MODE_LOCKOUT: + case RCD_MODE_DSTAR: + case RCD_MODE_DMR: + case RCD_MODE_YSF: + case RCD_MODE_P25: + case RCD_MODE_NXDN: + case RCD_MODE_M17: + return m_args.size() - SET_MODE_ARGS; + case RCD_PAGE: + case RCD_PAGE_BCD: + case RCD_PAGE_A1: + case RCD_PAGE_A2: + return m_args.size() - 1U; + case RCD_CW: + return m_args.size() - 1U; + default: + return 0U; + } +} + +std::string CRemoteControl::getArgString(unsigned int n) const +{ + switch (m_command) { + case RCD_MODE_IDLE: + case RCD_MODE_LOCKOUT: + case RCD_MODE_DSTAR: + case RCD_MODE_DMR: + case RCD_MODE_YSF: + case RCD_MODE_P25: + case RCD_MODE_NXDN: + case RCD_MODE_M17: + n += SET_MODE_ARGS; + break; + case RCD_PAGE: + case RCD_PAGE_BCD: + case RCD_PAGE_A1: + case RCD_PAGE_A2: + n += 1U; + break; + case RCD_CW: + n += 1U; + break; + default: + return ""; + } + + if (n >= m_args.size()) + return ""; + + return m_args.at(n); +} + +unsigned int CRemoteControl::getArgUInt(unsigned int n) const +{ + return (unsigned int)::atoi(getArgString(n).c_str()); +} + +int CRemoteControl::getArgInt(unsigned int n) const +{ + return ::atoi(getArgString(n).c_str()); +} + +void CRemoteControl::close() +{ + m_socket.close(); +} diff --git a/RemoteControl.h b/RemoteControl.h new file mode 100644 index 000000000..a4b288586 --- /dev/null +++ b/RemoteControl.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2019,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef RemoteControl_H +#define RemoteControl_H + +#include "UDPSocket.h" + +#include +#include + +class CMMDVMHost; + +enum REMOTE_COMMAND { + RCD_NONE, + RCD_MODE_IDLE, + RCD_MODE_LOCKOUT, + RCD_MODE_DSTAR, + RCD_MODE_DMR, + RCD_MODE_YSF, + RCD_MODE_P25, + RCD_MODE_NXDN, + RCD_MODE_M17, + RCD_MODE_FM, + RCD_ENABLE_DSTAR, + RCD_ENABLE_DMR, + RCD_ENABLE_YSF, + RCD_ENABLE_P25, + RCD_ENABLE_NXDN, + RCD_ENABLE_M17, + RCD_ENABLE_FM, + RCD_ENABLE_AX25, + RCD_DISABLE_DSTAR, + RCD_DISABLE_DMR, + RCD_DISABLE_YSF, + RCD_DISABLE_P25, + RCD_DISABLE_NXDN, + RCD_DISABLE_M17, + RCD_DISABLE_FM, + RCD_DISABLE_AX25, + RCD_PAGE, + RCD_PAGE_BCD, + RCD_PAGE_A1, + RCD_PAGE_A2, + RCD_CW, + RCD_RELOAD, + RCD_CONNECTION_STATUS, + RCD_CONFIG_HOSTS +}; + +class CRemoteControl { +public: + CRemoteControl(class CMMDVMHost *host, const std::string address, unsigned int port); + ~CRemoteControl(); + + bool open(); + + REMOTE_COMMAND getCommand(); + + unsigned int getArgCount() const; + + std::string getArgString(unsigned int n) const; + unsigned int getArgUInt(unsigned int n) const; + signed int getArgInt(unsigned int n) const; + + void close(); + +private: + CMMDVMHost* m_host; + CUDPSocket m_socket; + REMOTE_COMMAND m_command; + std::vector m_args; +}; + +#endif diff --git a/SMeter.cpp b/SMeter.cpp new file mode 100644 index 000000000..75b36f833 --- /dev/null +++ b/SMeter.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * Copyright (C) 2021 by Geoffrey Merck F4FXL / KC3FRA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "SMeter.h" + +const unsigned int RSSI_S1 = 141U; +const unsigned int RSSI_S9 = 93U; + +void CSMeter::getSignal(unsigned int rssi, unsigned int& signal, unsigned int& plus) +{ + if (rssi > RSSI_S1) { + signal = 0U; + plus = rssi - RSSI_S1; + } else if (rssi > RSSI_S9 && rssi <= RSSI_S1) { + signal = ((RSSI_S1 - rssi) / 6U) + 1U; + plus = (RSSI_S1 - rssi) % 6U; + } else { + signal = 9U; + plus = RSSI_S9 - rssi; + } +} diff --git a/SMeter.h b/SMeter.h new file mode 100644 index 000000000..76c4d6034 --- /dev/null +++ b/SMeter.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * Copyright (C) 2021 by Geoffrey Merck F4FXL / KC3FRA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(SMETER_H) +#define SMETER_H + +class CSMeter +{ +public: + static void getSignal(unsigned int rssi, unsigned int& signal, unsigned int& plus); +}; + +#endif \ No newline at end of file diff --git a/Sync.cpp b/Sync.cpp index 75156af55..1fcb2c499 100644 --- a/Sync.cpp +++ b/Sync.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ #include "YSFDefines.h" #include "P25Defines.h" #include "NXDNDefines.h" +#include "M17Defines.h" #include #include @@ -83,3 +84,25 @@ void CSync::addNXDNSync(unsigned char* data) for (unsigned int i = 0U; i < NXDN_FSW_BYTES_LENGTH; i++) data[i] = (data[i] & ~NXDN_FSW_BYTES_MASK[i]) | NXDN_FSW_BYTES[i]; } + +void CSync::addM17LinkSetupSync(unsigned char* data) +{ + assert(data != NULL); + + ::memcpy(data, M17_LINK_SETUP_SYNC_BYTES, M17_SYNC_LENGTH_BYTES); +} + +void CSync::addM17StreamSync(unsigned char* data) +{ + assert(data != NULL); + + ::memcpy(data, M17_STREAM_SYNC_BYTES, M17_SYNC_LENGTH_BYTES); +} + +void CSync::addM17EOTSync(unsigned char* data) +{ + assert(data != NULL); + + ::memcpy(data, M17_EOT_SYNC_BYTES, M17_SYNC_LENGTH_BYTES); +} + diff --git a/Sync.h b/Sync.h index 3ff325c7a..7f75711c7 100644 --- a/Sync.h +++ b/Sync.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2020,2021 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,6 +33,10 @@ class CSync static void addNXDNSync(unsigned char* data); + static void addM17LinkSetupSync(unsigned char* data); + static void addM17StreamSync(unsigned char* data); + static void addM17EOTSync(unsigned char* data); + private: }; diff --git a/TFTSerial.cpp b/TFTSerial.cpp deleted file mode 100644 index c2338f39e..000000000 --- a/TFTSerial.cpp +++ /dev/null @@ -1,572 +0,0 @@ -/* - * Copyright (C) 2015,2016,2018 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "TFTSerial.h" -#include "Log.h" - -#include -#include -#include - -const unsigned char ROTATION_PORTRAIT_LEFT = 0U; -const unsigned char ROTATION_LANDSCAPE_UD = 1U; -const unsigned char ROTATION_PORTRAIT_RIGHT = 2U; -const unsigned char ROTATION_LANDSCAPE = 3U; - -const unsigned char COLOUR_BLACK = 0U; -const unsigned char COLOUR_BLUE = 1U; -const unsigned char COLOUR_RED = 2U; -const unsigned char COLOUR_GREEN = 3U; -const unsigned char COLOUR_CYAN = 4U; -const unsigned char COLOUR_MAGENTA = 5U; -const unsigned char COLOUR_YELLOW = 6U; -const unsigned char COLOUR_WHITE = 7U; - -const unsigned char FONT_SMALL = 1U; -const unsigned char FONT_MEDIUM = 2U; -const unsigned char FONT_LARGE = 3U; - -// x = 0 to 159, y = 0 to 127 - Landscape -// x = 0 to 127, y = 0 to 159 - Portrait - -CTFTSerial::CTFTSerial(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness) : -CDisplay(), -m_callsign(callsign), -m_dmrid(dmrid), -m_serial(serial), -m_brightness(brightness), -m_mode(MODE_IDLE) -{ - assert(serial != NULL); - assert(brightness >= 0U && brightness <= 100U); -} - -CTFTSerial::~CTFTSerial() -{ -} - -bool CTFTSerial::open() -{ - bool ret = m_serial->open(); - if (!ret) { - LogError("Cannot open the port for the TFT Serial"); - delete m_serial; - return false; - } - - setRotation(ROTATION_LANDSCAPE); - - setBrightness(m_brightness); - - setBackground(COLOUR_WHITE); - - setForeground(COLOUR_BLACK); - - setIdle(); - - return true; -} - -void CTFTSerial::setIdleInt() -{ - // Clear the screen - clearScreen(); - - setFontSize(FONT_LARGE); - - // Draw MMDVM logo - displayBitmap(0U, 0U, "MMDVM_sm.bmp"); - - char text[30]; - ::sprintf(text, "%-6s / %u", m_callsign.c_str(), m_dmrid); - - gotoPosPixel(18U, 55U); - displayText(text); - - gotoPosPixel(45U, 90U); - displayText("IDLE"); - - m_mode = MODE_IDLE; -} - -void CTFTSerial::setErrorInt(const char* text) -{ - assert(text != NULL); - - // Clear the screen - clearScreen(); - - setFontSize(FONT_MEDIUM); - - // Draw MMDVM logo - displayBitmap(0U, 0U, "MMDVM_sm.bmp"); - - setForeground(COLOUR_RED); - - gotoPosPixel(18U, 55U); - displayText(text); - - gotoPosPixel(18U, 90U); - displayText("ERROR"); - - setForeground(COLOUR_BLACK); - - m_mode = MODE_ERROR; -} - -void CTFTSerial::setLockoutInt() -{ - // Clear the screen - clearScreen(); - - setFontSize(FONT_LARGE); - - // Draw MMDVM logo - displayBitmap(0U, 0U, "MMDVM_sm.bmp"); - - gotoPosPixel(20U, 60U); - displayText("LOCKOUT"); - - m_mode = MODE_LOCKOUT; -} - -void CTFTSerial::setQuitInt() -{ - // Clear the screen - clearScreen(); - - setFontSize(FONT_LARGE); - - // Draw MMDVM logo - displayBitmap(0U, 0U, "MMDVM_sm.bmp"); - - gotoPosPixel(20U, 60U); - displayText("STOPPED"); - - m_mode = MODE_QUIT; -} - -void CTFTSerial::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) -{ - assert(my1 != NULL); - assert(my2 != NULL); - assert(your != NULL); - assert(type != NULL); - assert(reflector != NULL); - - if (m_mode != MODE_DSTAR) { - // Clear the screen - clearScreen(); - - setFontSize(FONT_MEDIUM); - - // Draw D-Star insignia - displayBitmap(0U, 0U, "DStar_sm.bmp"); - } - - char text[30U]; - - ::sprintf(text, "%s %.8s/%4.4s", type, my1, my2); - gotoPosPixel(5U, 70U); - displayText(text); - - ::sprintf(text, "%.8s", your); - gotoPosPixel(5U, 90U); - displayText(text); - - if (::strcmp(reflector, " ") != 0) { - ::sprintf(text, "via %.8s", reflector); - gotoPosPixel(5U, 110U); - displayText(text); - } else { - gotoPosPixel(5U, 110U); - displayText(" "); - } - - m_mode = MODE_DSTAR; -} - -void CTFTSerial::clearDStarInt() -{ - gotoPosPixel(5U, 70U); - displayText(" Listening "); - - gotoPosPixel(5U, 90U); - displayText(" "); - - gotoPosPixel(5U, 110U); - displayText(" "); -} - -void CTFTSerial::writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type) -{ - assert(type != NULL); - - if (m_mode != MODE_DMR) { - // Clear the screen - clearScreen(); - - setFontSize(FONT_MEDIUM); - - // Draw DMR insignia - displayBitmap(0U, 0U, "DMR_sm.bmp"); - - if (slotNo == 1U) { - gotoPosPixel(5U, 90U); - displayText("2 Listening"); - } else { - gotoPosPixel(5U, 55U); - displayText("1 Listening"); - } - } - - if (slotNo == 1U) { - char text[30U]; - - ::sprintf(text, "1 %s %s", type, src.c_str()); - gotoPosPixel(5U, 55U); - displayText(text); - - ::sprintf(text, "%s%s", group ? "TG" : "", dst.c_str()); - gotoPosPixel(65U, 72U); - displayText(text); - } else { - char text[30U]; - - ::sprintf(text, "2 %s %s", type, src.c_str()); - gotoPosPixel(5U, 90U); - displayText(text); - - ::sprintf(text, "%s%s", group ? "TG" : "", dst.c_str()); - gotoPosPixel(65U, 107U); - displayText(text); - } - - m_mode = MODE_DMR; -} - -void CTFTSerial::clearDMRInt(unsigned int slotNo) -{ - if (slotNo == 1U) { - gotoPosPixel(5U, 55U); - displayText("1 Listening "); - - gotoPosPixel(65U, 72U); - displayText(" "); - } else { - gotoPosPixel(5U, 90U); - displayText("2 Listening "); - - gotoPosPixel(65U, 107U); - displayText(" "); - } -} - -void CTFTSerial::writeFusionInt(const char* source, const char* dest, const char* type, const char* origin) -{ - assert(source != NULL); - assert(dest != NULL); - assert(type != NULL); - assert(origin != NULL); - - if (m_mode != MODE_YSF) { - // Clear the screen - clearScreen(); - - setFontSize(FONT_MEDIUM); - - // Draw the System Fusion insignia - displayBitmap(0U, 0U, "YSF_sm.bmp"); - } - - char text[30U]; - ::sprintf(text, "%s %.10s", type, source); - - gotoPosPixel(5U, 70U); - displayText(text); - - ::sprintf(text, " %.10s", dest); - - gotoPosPixel(5U, 90U); - displayText(text); - - if (::strcmp(origin, " ") != 0) { - ::sprintf(text, "at %.10s", origin); - gotoPosPixel(5U, 110U); - displayText(text); - } else { - gotoPosPixel(5U, 110U); - displayText(" "); - } - - m_mode = MODE_YSF; -} - -void CTFTSerial::clearFusionInt() -{ - gotoPosPixel(5U, 70U); - displayText(" Listening "); - - gotoPosPixel(5U, 90U); - displayText(" "); - - gotoPosPixel(5U, 110U); - displayText(" "); -} - -void CTFTSerial::writeP25Int(const char* source, bool group, unsigned int dest, const char* type) -{ - assert(source != NULL); - assert(type != NULL); - - if (m_mode != MODE_P25) { - // Clear the screen - clearScreen(); - - setFontSize(FONT_MEDIUM); - - // Draw the P25 insignia - displayBitmap(0U, 0U, "P25_sm.bmp"); - } - - char text[30U]; - ::sprintf(text, "%s %.10s", type, source); - - gotoPosPixel(5U, 70U); - displayText(text); - - ::sprintf(text, " %s%u", group ? "TG" : "", dest); - - gotoPosPixel(5U, 90U); - displayText(text); - - m_mode = MODE_P25; -} - -void CTFTSerial::clearP25Int() -{ - gotoPosPixel(5U, 70U); - displayText(" Listening "); - - gotoPosPixel(5U, 90U); - displayText(" "); - - gotoPosPixel(5U, 110U); - displayText(" "); -} - -void CTFTSerial::writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type) -{ - assert(source != NULL); - assert(type != NULL); - - if (m_mode != MODE_NXDN) { - // Clear the screen - clearScreen(); - - setFontSize(FONT_MEDIUM); - - // Draw the P25 insignia - displayBitmap(0U, 0U, "NXDN_sm.bmp"); - } - - char text[30U]; - ::sprintf(text, "%s %.10s", type, source); - - gotoPosPixel(5U, 70U); - displayText(text); - - ::sprintf(text, " %s%u", group ? "TG" : "", dest); - - gotoPosPixel(5U, 90U); - displayText(text); - - m_mode = MODE_NXDN; -} - -void CTFTSerial::clearNXDNInt() -{ - gotoPosPixel(5U, 70U); - displayText(" Listening "); - - gotoPosPixel(5U, 90U); - displayText(" "); - - gotoPosPixel(5U, 110U); - displayText(" "); -} - -void CTFTSerial::writePOCSAGInt(uint32_t ric, const std::string& message) -{ - gotoPosPixel(15U, 90U); - displayText("POCSAG TX"); - - m_mode = MODE_CW; -} - -void CTFTSerial::clearPOCSAGInt() -{ - gotoPosPixel(45U, 90U); - displayText("IDLE"); -} - -void CTFTSerial::writeCWInt() -{ - gotoPosPixel(45U, 90U); - displayText("CW TX"); - - m_mode = MODE_CW; -} - -void CTFTSerial::clearCWInt() -{ - gotoPosPixel(45U, 90U); - displayText("IDLE"); -} - -void CTFTSerial::close() -{ - m_serial->close(); - delete m_serial; -} - -void CTFTSerial::clearScreen() -{ - m_serial->write((unsigned char*)"\x1B\x00\xFF", 3U); -} - -void CTFTSerial::setForeground(unsigned char colour) -{ - assert(colour >= 0U && colour <= 7U); - - m_serial->write((unsigned char*)"\x1B\x01", 2U); - m_serial->write(&colour, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::setBackground(unsigned char colour) -{ - assert(colour >= 0U && colour <= 7U); - - m_serial->write((unsigned char*)"\x1B\x02", 2U); - m_serial->write(&colour, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::setRotation(unsigned char rotation) -{ - assert(rotation >= 0U && rotation <= 3U); - - m_serial->write((unsigned char*)"\x1B\x03", 2U); - m_serial->write(&rotation, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::setFontSize(unsigned char size) -{ - assert(size >= 1U && size <= 3U); - - m_serial->write((unsigned char*)"\x1B\x04", 2U); - m_serial->write(&size, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::gotoBegOfLine() -{ - m_serial->write((unsigned char*)"\x1B\x05\xFF", 3U); -} - -void CTFTSerial::gotoPosText(unsigned char x, unsigned char y) -{ - m_serial->write((unsigned char*)"\x1B\x06", 2U); - m_serial->write(&x, 1U); - m_serial->write(&y, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::gotoPosPixel(unsigned char x, unsigned char y) -{ - m_serial->write((unsigned char*)"\x1B\x07", 2U); - m_serial->write(&x, 1U); - m_serial->write(&y, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::drawLine(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) -{ - m_serial->write((unsigned char*)"\x1B\x08", 2U); - m_serial->write(&x1, 1U); - m_serial->write(&y1, 1U); - m_serial->write(&x2, 1U); - m_serial->write(&y2, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::drawBox(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bool filled) -{ - if (filled) - m_serial->write((unsigned char*)"\x1B\x0A", 2U); - else - m_serial->write((unsigned char*)"\x1B\x09", 2U); - - m_serial->write(&x1, 1U); - m_serial->write(&y1, 1U); - m_serial->write(&x2, 1U); - m_serial->write(&y2, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::drawCircle(unsigned char x, unsigned char y, unsigned char radius, bool filled) -{ - if (filled) - m_serial->write((unsigned char*)"\x1B\x0C", 2U); - else - m_serial->write((unsigned char*)"\x1B\x0B", 2U); - - m_serial->write(&x, 1U); - m_serial->write(&y, 1U); - m_serial->write(&radius, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::displayBitmap(unsigned char x, unsigned char y, const char* filename) -{ - assert(filename != NULL); - - m_serial->write((unsigned char*)"\x1B\x0D", 2U); - m_serial->write(&x, 1U); - m_serial->write(&y, 1U); - m_serial->write((unsigned char*)filename, (unsigned int)::strlen(filename)); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::setBrightness(unsigned char brightness) -{ - assert(brightness >= 0U && brightness <= 100U); - - m_serial->write((unsigned char*)"\x1B\x0E", 2U); - m_serial->write(&brightness, 1U); - m_serial->write((unsigned char*)"\xFF", 1U); -} - -void CTFTSerial::displayText(const char* text) -{ - assert(text != NULL); - - m_serial->write((unsigned char*)text, (unsigned int)::strlen(text)); -} diff --git a/TFTSerial/DMR_sm.bmp b/TFTSerial/DMR_sm.bmp deleted file mode 100644 index 2fae46a3c..000000000 Binary files a/TFTSerial/DMR_sm.bmp and /dev/null differ diff --git a/TFTSerial/DStar_sm.bmp b/TFTSerial/DStar_sm.bmp deleted file mode 100644 index f4e2afc19..000000000 Binary files a/TFTSerial/DStar_sm.bmp and /dev/null differ diff --git a/TFTSerial/MMDVM_sm.bmp b/TFTSerial/MMDVM_sm.bmp deleted file mode 100644 index 674d1c636..000000000 Binary files a/TFTSerial/MMDVM_sm.bmp and /dev/null differ diff --git a/TFTSerial/NXDN_sm.bmp b/TFTSerial/NXDN_sm.bmp deleted file mode 100644 index 30420d87f..000000000 Binary files a/TFTSerial/NXDN_sm.bmp and /dev/null differ diff --git a/TFTSerial/P25_sm.bmp b/TFTSerial/P25_sm.bmp deleted file mode 100644 index 5ba24f609..000000000 Binary files a/TFTSerial/P25_sm.bmp and /dev/null differ diff --git a/TFTSerial/YSF_sm.bmp b/TFTSerial/YSF_sm.bmp deleted file mode 100644 index 34cfb19b5..000000000 Binary files a/TFTSerial/YSF_sm.bmp and /dev/null differ diff --git a/TFTSurenoo.cpp b/TFTSurenoo.cpp new file mode 100644 index 000000000..7d8f5f750 --- /dev/null +++ b/TFTSurenoo.cpp @@ -0,0 +1,544 @@ +/* + * Copyright (C) 2019 by SASANO Takayoshi JG1UAA + * Copyright (C) 2015,2016,2018,2019,2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#include "TFTSurenoo.h" +#include "Thread.h" +#include "Log.h" + +#include +#include +#include + +/* + * UART-TFT LCD Driver for Surenoo JC22-V05 (128x160) + * other Surenoo UART-LCD will be work, but display area is still 160x128 + * (tested with JC028-V03 240x320 module) + */ +struct layoutdef { + int x_width; + int y_width; + int rotation; + int mode_font_size; + int status_font_size; + int status_margin; +}; + +#define ROTATION_PORTRAIT 0 +#define ROTATION_LANDSCAPE 1 + +#define FONT_SMALL 16 // 8x16 +#define FONT_MEDIUM 24 // 12x24 +#define FONT_LARGE 32 // 16x32 + +static const struct layoutdef Layout[] = { + {160, 128, ROTATION_LANDSCAPE, FONT_MEDIUM, FONT_SMALL, 32}, + {128, 160, ROTATION_PORTRAIT, FONT_MEDIUM, FONT_SMALL, 32}, + {320, 240, ROTATION_LANDSCAPE, FONT_LARGE, FONT_MEDIUM, 48}, + {240, 320, ROTATION_PORTRAIT, FONT_LARGE, FONT_MEDIUM, 48}, +}; + +#define X_WIDTH Layout[m_screenLayout].x_width +#define Y_WIDTH Layout[m_screenLayout].y_width +#define ROTATION Layout[m_screenLayout].rotation + +enum LcdColour { + COLOUR_BLACK, COLOUR_RED, COLOUR_GREEN, COLOUR_BLUE, + COLOUR_YELLOW, COLOUR_CYAN, COLOUR_MAGENTA, COLOUR_GREY, + COLOUR_DARK_GREY, COLOUR_DARK_RED, COLOUR_DARK_GREEN, COLOUR_DARK_BLUE, + COLOUR_DARK_YELLOW, COLOUR_DARK_CYAN, COLOUR_DARK_MAGENTA, COLOUR_WHITE +}; + +#define INFO_COLOUR COLOUR_CYAN +#define EXT_COLOUR COLOUR_DARK_GREEN +#define BG_COLOUR COLOUR_BLACK +#define ERROR_COLOUR COLOUR_DARK_RED +#define MODE_COLOUR COLOUR_YELLOW + +// MODE_FONT_SIZE should be equal or larger than STATUS_FONT_SIZE +#define MODE_FONT_SIZE Layout[m_screenLayout].mode_font_size +#define STATUS_FONT_SIZE Layout[m_screenLayout].status_font_size + +#define STATUS_MARGIN Layout[m_screenLayout].status_margin + +#define MODE_CHARS (X_WIDTH / (MODE_FONT_SIZE / 2)) +#define STATUS_CHARS (X_WIDTH / (STATUS_FONT_SIZE / 2)) +#define STATUS_LINES ((Y_WIDTH - STATUS_MARGIN) / STATUS_FONT_SIZE) +#define statusLineOffset(x) ((STATUS_CHARS + 1) * ((x) + 1)) +#define statusLineNo(x) (x) +#define INFO_LINES statusLineNo(2) + +// This module sometimes ignores display command (too busy?), +// so supress display refresh +#define REFRESH_PERIOD 600 // msec + +#define STR_CRLF "\x0D\x0A" +#define STR_DMR "DMR" +#define STR_DSTAR "D-STAR" +#define STR_MMDVM "MMDVM" +#define STR_NXDN "NXDN" +#define STR_M17 "M17" +#define STR_P25 "P25" +#define STR_YSF "SystemFusion" + +CTFTSurenoo::CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool duplex, unsigned int screenLayout) : +CDisplay(), +m_callsign(callsign), +m_dmrid(dmrid), +m_serial(serial), +m_brightness(brightness), +m_mode(MODE_IDLE), +m_duplex(duplex), +//m_duplex(true), // uncomment to force duplex display for testing! +m_refresh(false), +m_refreshTimer(1000U, 0U, REFRESH_PERIOD), +m_lineBuf(NULL), +m_screenLayout(screenLayout) +{ + assert(serial != NULL); + assert(brightness >= 0U && brightness <= 255U); +} + +CTFTSurenoo::~CTFTSurenoo() +{ +} + +bool CTFTSurenoo::open() +{ + bool ret = m_serial->open(); + if (!ret) { + LogError("Cannot open the port for the TFT Serial"); + delete m_serial; + return false; + } + + m_lineBuf = new char[statusLineOffset(STATUS_LINES)]; + if (m_lineBuf == NULL) { + LogError("Cannot allocate line buffer"); + m_serial->close(); + delete m_serial; + return false; + } + + lcdReset(); + clearScreen(BG_COLOUR); + setIdle(); + + m_refreshTimer.start(); + + return true; +} + +void CTFTSurenoo::setIdleInt() +{ + setModeLine(STR_MMDVM); + + ::snprintf(m_temp, sizeof(m_temp), "%s / %u", m_callsign.c_str(), m_dmrid); + setStatusLine(statusLineNo(0), m_temp); + setStatusLine(statusLineNo(1), "IDLE"); + + m_mode = MODE_IDLE; +} + +void CTFTSurenoo::setErrorInt(const char* text) +{ + assert(text != NULL); + + setModeLine(STR_MMDVM); + setStatusLine(statusLineNo(0), text); + setStatusLine(statusLineNo(1), "ERROR"); + + m_mode = MODE_ERROR; +} + +void CTFTSurenoo::setLockoutInt() +{ + setModeLine(STR_MMDVM); + setStatusLine(statusLineNo(1), "LOCKOUT"); + + m_mode = MODE_LOCKOUT; +} + +void CTFTSurenoo::setQuitInt() +{ + // m_refreshTimer has stopped, need delay here + CThread::sleep(REFRESH_PERIOD); + + setModeLine(STR_MMDVM); + setStatusLine(statusLineNo(1), "STOPPED"); + + refreshDisplay(); + + m_mode = MODE_QUIT; +} + +void CTFTSurenoo::setFMInt() +{ + setModeLine(STR_MMDVM); + setStatusLine(statusLineNo(1), "FM"); + + m_mode = MODE_FM; +} + +void CTFTSurenoo::writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector) +{ + assert(my1 != NULL); + assert(my2 != NULL); + assert(your != NULL); + assert(type != NULL); + assert(reflector != NULL); + + setModeLine(STR_MMDVM); + + ::snprintf(m_temp, sizeof(m_temp), "%s %s/%s", type, my1, my2); + setStatusLine(statusLineNo(0), m_temp); + + ::snprintf(m_temp, sizeof(m_temp), "%s", your); + setStatusLine(statusLineNo(1), m_temp); + + if (::strcmp(reflector, " ") != 0) + ::snprintf(m_temp, sizeof(m_temp), "via %s", reflector); + else + ::strcpy(m_temp, ""); + setStatusLine(statusLineNo(2), m_temp); + + m_mode = MODE_DSTAR; +} + +void CTFTSurenoo::clearDStarInt() +{ + setStatusLine(statusLineNo(0), "Listening"); + for (int i = 1; i < STATUS_LINES; i++) + setStatusLine(statusLineNo(i), ""); +} + +void CTFTSurenoo::writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type) +{ + assert(type != NULL); + + if (m_mode != MODE_DMR) { + setModeLine(STR_DMR); + if (m_duplex) { + setStatusLine(statusLineNo(0), "Listening"); + setStatusLine(statusLineNo(1), "TS1"); + setStatusLine(statusLineNo(2), "Listening"); + setStatusLine(statusLineNo(3), "TS2"); + } + } + + int pos = m_duplex ? (slotNo - 1) : 0; + ::snprintf(m_temp, sizeof(m_temp), "%s %s", type, src.c_str()); + setStatusLine(statusLineNo(pos * 2), m_temp); + + ::snprintf(m_temp, sizeof(m_temp), "TS%d %s%s", slotNo, group ? "TG" : "", dst.c_str()); + setStatusLine(statusLineNo(pos * 2 + 1), m_temp); + + m_mode = MODE_DMR; +} + +int CTFTSurenoo::writeDMRIntEx(unsigned int slotNo, const CUserDBentry& src, bool group, const std::string& dst, const char* type) +{ + assert(type != NULL); + + // duplex mode is not supported + if (m_duplex) + return -1; + + setModeLine(STR_DMR); + setStatusLine(statusLineNo(2), (src.get(keyFIRST_NAME) + " " + src.get(keyLAST_NAME)).c_str()); + setStatusLine(statusLineNo(3), src.get(keyCITY).c_str()); + setStatusLine(statusLineNo(4), src.get(keySTATE).c_str()); + setStatusLine(statusLineNo(5), src.get(keyCOUNTRY).c_str()); + + m_mode = MODE_DMR; + + return 1; +} + +void CTFTSurenoo::clearDMRInt(unsigned int slotNo) +{ + int pos = m_duplex ? (slotNo - 1) : 0; + setStatusLine(statusLineNo(pos * 2), "Listening"); + + if (m_duplex) { + ::snprintf(m_temp, sizeof(m_temp), "TS%d", slotNo); + setStatusLine(statusLineNo(pos * 2 + 1), m_temp); + } else { + for (int i = 1; i < STATUS_LINES; i++) + setStatusLine(statusLineNo(i), ""); + } +} + +void CTFTSurenoo::writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) +{ + assert(source != NULL); + assert(dest != NULL); + assert(type != NULL); + assert(origin != NULL); + + setModeLine(STR_YSF); + + ::snprintf(m_temp, sizeof(m_temp), "%s %s", type, source); + setStatusLine(statusLineNo(0), m_temp); + + ::snprintf(m_temp, sizeof(m_temp), "DG-ID %u", dgid); + setStatusLine(statusLineNo(1), m_temp); + + if (::strcmp(origin, " ") != 0) + ::snprintf(m_temp, sizeof(m_temp), "at %s", origin); + else + ::strcpy(m_temp, ""); + setStatusLine(statusLineNo(2), m_temp); + + m_mode = MODE_YSF; +} + +void CTFTSurenoo::clearFusionInt() +{ + clearDStarInt(); +} + +void CTFTSurenoo::writeP25Int(const char* source, bool group, unsigned int dest, const char* type) +{ + assert(source != NULL); + assert(type != NULL); + + setModeLine(STR_P25); + + ::snprintf(m_temp, sizeof(m_temp), "%s %s", type, source); + setStatusLine(statusLineNo(0), m_temp); + + ::snprintf(m_temp, sizeof(m_temp), "%s%u", group ? "TG" : "", dest); + setStatusLine(statusLineNo(1), m_temp); + + m_mode = MODE_P25; +} + +void CTFTSurenoo::clearP25Int() +{ + clearDStarInt(); +} + +void CTFTSurenoo::writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type) +{ + assert(source != NULL); + assert(type != NULL); + + if (m_mode != MODE_NXDN) + setModeLine(STR_NXDN); + + ::snprintf(m_temp, sizeof(m_temp), "%s %s", type, source); + setStatusLine(statusLineNo(0), m_temp); + + ::snprintf(m_temp, sizeof(m_temp), "%s%u", group ? "TG" : "", dest); + setStatusLine(statusLineNo(1), m_temp); + + m_mode = MODE_NXDN; +} + +int CTFTSurenoo::writeNXDNIntEx(const CUserDBentry& source, bool group, unsigned int dest, const char* type) +{ + assert(type != NULL); + + setModeLine(STR_NXDN); + setStatusLine(statusLineNo(2), (source.get(keyFIRST_NAME) + " " + source.get(keyLAST_NAME)).c_str()); + setStatusLine(statusLineNo(3), source.get(keyCITY).c_str()); + setStatusLine(statusLineNo(4), source.get(keySTATE).c_str()); + setStatusLine(statusLineNo(5), source.get(keyCOUNTRY).c_str()); + + m_mode = MODE_NXDN; + + return 1; +} + +void CTFTSurenoo::clearNXDNInt() +{ + clearDStarInt(); +} + +void CTFTSurenoo::writeM17Int(const char* source, const char* dest, const char* type) +{ + assert(source != NULL); + assert(dest != NULL); + assert(type != NULL); + + if (m_mode != MODE_M17) + setModeLine(STR_M17); + + ::snprintf(m_temp, sizeof(m_temp), "%s %s", type, source); + setStatusLine(statusLineNo(0), m_temp); + + ::snprintf(m_temp, sizeof(m_temp), "%s", dest); + setStatusLine(statusLineNo(1), m_temp); + + m_mode = MODE_M17; +} + +void CTFTSurenoo::clearM17Int() +{ + clearDStarInt(); +} + +void CTFTSurenoo::writePOCSAGInt(uint32_t ric, const std::string& message) +{ + setStatusLine(statusLineNo(1), "POCSAG TX"); + + m_mode = MODE_POCSAG; +} + +void CTFTSurenoo::clearPOCSAGInt() +{ + setStatusLine(statusLineNo(1), "IDLE"); +} + +void CTFTSurenoo::writeCWInt() +{ + setStatusLine(statusLineNo(1), "CW TX"); + + m_mode = MODE_CW; +} + +void CTFTSurenoo::clearCWInt() +{ + setStatusLine(statusLineNo(1), "IDLE"); +} + +void CTFTSurenoo::close() +{ + delete[] m_lineBuf; + + m_serial->close(); + delete m_serial; +} + +void CTFTSurenoo::clockInt(unsigned int ms) +{ + m_refreshTimer.clock(ms); // renew timer status + + if (m_refreshTimer.isRunning() && m_refreshTimer.hasExpired()) { + refreshDisplay(); + m_refreshTimer.start(); // reset timer, wait for next period + } +} + +void CTFTSurenoo::setLineBuffer(char *buf, const char *text, int maxchar) +{ + int i; + + for (i = 0; i < maxchar && text[i] != '\0'; i++) + buf[i] = text[i]; + buf[i] = '\0'; + + m_refresh = true; +} + +void CTFTSurenoo::setModeLine(const char *text) +{ + setLineBuffer(m_lineBuf, text, MODE_CHARS); + + // clear all status line + for (int i = 0; i < STATUS_LINES; i++) setStatusLine(i, ""); +} + +void CTFTSurenoo::setStatusLine(unsigned int line, const char *text) +{ + setLineBuffer(m_lineBuf + statusLineOffset(line), text, STATUS_CHARS); +} + +void CTFTSurenoo::refreshDisplay(void) +{ + if (!m_refresh) return; + + // send CR+LF to avoid first command is not processed + ::snprintf(m_temp, sizeof(m_temp), STR_CRLF); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); + + // config display + setRotation(ROTATION); + setBrightness(m_brightness); + setBackground(BG_COLOUR); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); + CThread::sleep(5); + + // clear display + ::snprintf(m_temp, sizeof(m_temp), "BOXF(%d,%d,%d,%d,%d);", + 0, 0, X_WIDTH - 1, Y_WIDTH - 1, BG_COLOUR); + m_serial->write((unsigned char*)m_temp, ::strlen(m_temp)); + + // mode line + ::snprintf(m_temp, sizeof(m_temp), "DCV%d(%d,%d,'%s',%d);", + MODE_FONT_SIZE, 0, 0, m_lineBuf, MODE_COLOUR); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); + + // status line + for (int i = 0; i < STATUS_LINES; i++) { + char *p = m_lineBuf + statusLineOffset(i); + if (!::strlen(p)) continue; + + ::snprintf(m_temp, sizeof(m_temp), "DCV%d(%d,%d,'%s',%d);", + STATUS_FONT_SIZE, 0, + STATUS_MARGIN + STATUS_FONT_SIZE * i, p, + (!m_duplex && i >= INFO_LINES) ? EXT_COLOUR : INFO_COLOUR); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); + } + + // sending CR+LF finishes commands + ::snprintf(m_temp, sizeof(m_temp), STR_CRLF); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); + + m_refresh = false; +} + +void CTFTSurenoo::lcdReset(void) +{ + ::snprintf(m_temp, sizeof(m_temp), "RESET;" STR_CRLF); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); + CThread::sleep(250); // document says 230ms +} + +void CTFTSurenoo::clearScreen(unsigned char colour) +{ + assert(colour >= 0U && colour <= 63U); + + ::snprintf(m_temp, sizeof(m_temp), "CLR(%d);" STR_CRLF, colour); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); + CThread::sleep(100); // at least 60ms (@240x320 panel) +} + +void CTFTSurenoo::setBackground(unsigned char colour) +{ + assert(colour >= 0U && colour <= 63U); + + ::snprintf(m_temp, sizeof(m_temp), "SBC(%d);", colour); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); +} + +void CTFTSurenoo::setRotation(unsigned char rotation) +{ + assert(rotation >= 0U && rotation <= 1U); + + ::snprintf(m_temp, sizeof(m_temp), "DIR(%d);", rotation); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); +} + +void CTFTSurenoo::setBrightness(unsigned char brightness) +{ + assert(brightness >= 0U && brightness <= 255U); + + ::snprintf(m_temp, sizeof(m_temp), "BL(%d);", brightness); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); +} diff --git a/TFTSurenoo.h b/TFTSurenoo.h new file mode 100644 index 000000000..23e3d0f45 --- /dev/null +++ b/TFTSurenoo.h @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2019 by SASANO Takayoshi JG1UAA + * Copyright (C) 2015,2016,2018,2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(TFTSURENOO_H) +#define TFTSURENOO_H + +#include "Display.h" +#include "Defines.h" +#include "SerialPort.h" +#include "UserDBentry.h" + +#include + +class CTFTSurenoo : public CDisplay +{ +public: + CTFTSurenoo(const std::string& callsign, unsigned int dmrid, ISerialPort* serial, unsigned int brightness, bool duplex, unsigned int screenLayout); + virtual ~CTFTSurenoo(); + + virtual bool open(); + + virtual void close(); + +protected: + virtual void setIdleInt(); + virtual void setErrorInt(const char* text); + virtual void setLockoutInt(); + virtual void setQuitInt(); + virtual void setFMInt(); + + virtual void writeDStarInt(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); + virtual void clearDStarInt(); + + virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); + virtual int writeDMRIntEx(unsigned int slotNo, const CUserDBentry& src, bool group, const std::string& dst, const char* type); + virtual void clearDMRInt(unsigned int slotNo); + + virtual void writeFusionInt(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); + virtual void clearFusionInt(); + + virtual void writeP25Int(const char* source, bool group, unsigned int dest, const char* type); + virtual void clearP25Int(); + + virtual void writeNXDNInt(const char* source, bool group, unsigned int dest, const char* type); + virtual int writeNXDNIntEx(const CUserDBentry& source, bool group, unsigned int dest, const char* type); + virtual void clearNXDNInt(); + + virtual void writeM17Int(const char* source, const char* dest, const char* type); + virtual void clearM17Int(); + + virtual void writePOCSAGInt(uint32_t ric, const std::string& message); + virtual void clearPOCSAGInt(); + + virtual void writeCWInt(); + virtual void clearCWInt(); + + virtual void clockInt(unsigned int ms); + +private: + std::string m_callsign; + unsigned int m_dmrid; + ISerialPort* m_serial; + unsigned int m_brightness; + unsigned char m_mode; + bool m_duplex; + bool m_refresh; + CTimer m_refreshTimer; + char* m_lineBuf; + char m_temp[128]; + unsigned int m_screenLayout; + + void setLineBuffer(char *buf, const char *text, int maxchar); + void setModeLine(const char *text); + void setStatusLine(unsigned int line, const char *text); + void refreshDisplay(); + + void lcdReset(); + void clearScreen(unsigned char colour); + void setBackground(unsigned char colour); + void setRotation(unsigned char rotation); + void setBrightness(unsigned char brightness); +}; + +#endif diff --git a/Thread.cpp b/Thread.cpp index b3344362b..6f76f5b1f 100644 --- a/Thread.cpp +++ b/Thread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,27 +31,27 @@ CThread::~CThread() bool CThread::run() { - m_handle = ::CreateThread(NULL, 0, &helper, this, 0, NULL); + m_handle = ::CreateThread(NULL, 0, &helper, this, 0, NULL); - return m_handle != NULL; + return m_handle != NULL; } void CThread::wait() { - ::WaitForSingleObject(m_handle, INFINITE); + ::WaitForSingleObject(m_handle, INFINITE); - ::CloseHandle(m_handle); + ::CloseHandle(m_handle); } DWORD CThread::helper(LPVOID arg) { - CThread* p = (CThread*)arg; + CThread* p = (CThread*)arg; - p->entry(); + p->entry(); - return 0UL; + return 0UL; } void CThread::sleep(unsigned int ms) @@ -74,28 +74,34 @@ CThread::~CThread() bool CThread::run() { - return ::pthread_create(&m_thread, NULL, helper, this) == 0; + return ::pthread_create(&m_thread, NULL, helper, this) == 0; } void CThread::wait() { - ::pthread_join(m_thread, NULL); + ::pthread_join(m_thread, NULL); } void* CThread::helper(void* arg) { - CThread* p = (CThread*)arg; + CThread* p = (CThread*)arg; - p->entry(); + p->entry(); - return NULL; + return NULL; } void CThread::sleep(unsigned int ms) { - ::usleep(ms * 1000); + struct timespec ts; + + ts.tv_sec = ms / 1000U; + ts.tv_nsec = (ms % 1000U) * 1000000U; + + ::nanosleep(&ts, NULL); } #endif + diff --git a/Tools/DeEmphasis.py b/Tools/DeEmphasis.py new file mode 100644 index 000000000..44320c924 --- /dev/null +++ b/Tools/DeEmphasis.py @@ -0,0 +1,43 @@ +#based on https://github.com/gnuradio/gnuradio/blob/master/gr-analog/python/analog/fm_emph.py + +import math +import cmath +import numpy as np +import scipy.signal as signal +import pylab as pl + +tau = 750e-6 +fs = 8000 +fh = 2700 + +# Digital corner frequency +w_c = 1.0 / tau + +# Prewarped analog corner frequency +w_ca = 2.0 * fs * math.tan(w_c / (2.0 * fs)) + +# Resulting digital pole, zero, and gain term from the bilinear +# transformation of H(s) = w_ca / (s + w_ca) to +# H(z) = b0 (1 - z1 z^-1)/(1 - p1 z^-1) +k = -w_ca / (2.0 * fs) +z1 = -1.0 +p1 = (1.0 + k) / (1.0 - k) +b0 = -k / (1.0 - k) + +btaps = [ b0 * 1.0, b0 * -z1, 0 ] +ataps = [ 1.0, -p1, 0 ] + +# Since H(s = 0) = 1.0, then H(z = 1) = 1.0 and has 0 dB gain at DC + + +taps = np.concatenate((btaps, ataps), axis=0) +print("Taps") +print(*taps, "", sep=",", end="\n") + +f,h = signal.freqz(btaps,ataps, fs=fs) +pl.plot(f, 20*np.log10(np.abs(h))) +pl.xlabel('frequency/Hz') +pl.ylabel('gain/dB') +pl.ylim(top=0,bottom=-30) +pl.xlim(left=0, right=fh*2.5) +pl.show() \ No newline at end of file diff --git a/Tools/PreEmphasis.py b/Tools/PreEmphasis.py new file mode 100644 index 000000000..22c81f61d --- /dev/null +++ b/Tools/PreEmphasis.py @@ -0,0 +1,51 @@ +#based on https://github.com/gnuradio/gnuradio/blob/master/gr-analog/python/analog/fm_emph.py + +import math +import cmath +import numpy as np +import scipy.signal as signal +import pylab as pl + +tau = 750e-6 +fs = 8000 +fh = 2700 + +# Digital corner frequencies +w_cl = 1.0 / tau +w_ch = 2.0 * math.pi * fh + +# Prewarped analog corner frequencies +w_cla = 2.0 * fs * math.tan(w_cl / (2.0 * fs)) +w_cha = 2.0 * fs * math.tan(w_ch / (2.0 * fs)) + +# Resulting digital pole, zero, and gain term from the bilinear +# transformation of H(s) = (s + w_cla) / (s + w_cha) to +# H(z) = b0 (1 - z1 z^-1)/(1 - p1 z^-1) +kl = -w_cla / (2.0 * fs) +kh = -w_cha / (2.0 * fs) +z1 = (1.0 + kl) / (1.0 - kl) +p1 = (1.0 + kh) / (1.0 - kh) +b0 = (1.0 - kl) / (1.0 - kh) + +# Since H(s = infinity) = 1.0, then H(z = -1) = 1.0 and +# this filter has 0 dB gain at fs/2.0. +# That isn't what users are going to expect, so adjust with a +# gain, g, so that H(z = 1) = 1.0 for 0 dB gain at DC. +w_0dB = 2.0 * math.pi * 0.0 +g = abs(1.0 - p1 * cmath.rect(1.0, -w_0dB)) \ +/ (b0 * abs(1.0 - z1 * cmath.rect(1.0, -w_0dB))) + +btaps = [ g * b0 * 1.0, g * b0 * -z1, 0] +ataps = [ 1.0, -p1, 0] + +taps = np.concatenate((btaps, ataps), axis=0) +print("Taps") +print(*taps, "", sep=",", end="\n") + +f,h = signal.freqz(btaps,ataps, fs=fs) +pl.plot(f, 20*np.log10(np.abs(h))) +pl.xlabel('frequency/Hz') +pl.ylabel('gain/dB') +pl.ylim(top=30,bottom=0) +pl.xlim(left=0, right=fh*2.5) +pl.show() \ No newline at end of file diff --git a/SerialController.cpp b/UARTController.cpp similarity index 60% rename from SerialController.cpp rename to UARTController.cpp index 83cc104b6..0d636d811 100644 --- a/SerialController.cpp +++ b/UARTController.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002-2004,2007-2011,2013,2014-2017 by Jonathan Naylor G4KLX + * Copyright (C) 2002-2004,2007-2011,2013,2014-2017,2019,2020,2021 by Jonathan Naylor G4KLX * Copyright (C) 1999-2001 by Thomas Sailor HB9JNX * * This program is free software; you can redistribute it and/or modify @@ -17,33 +17,29 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "SerialController.h" +#include "UARTController.h" #include "Log.h" #include #include -#include - #if defined(_WIN32) || defined(_WIN64) #include #include #else +#include #include #include #include #include #include #include -#if !defined(__APPLE__) -#include -#endif #endif #if defined(_WIN32) || defined(_WIN64) -CSerialController::CSerialController(const std::string& device, SERIAL_SPEED speed, bool assertRTS) : +CUARTController::CUARTController(const std::string& device, unsigned int speed, bool assertRTS) : m_device(device), m_speed(speed), m_assertRTS(assertRTS), @@ -52,11 +48,19 @@ m_handle(INVALID_HANDLE_VALUE) assert(!device.empty()); } -CSerialController::~CSerialController() +CUARTController::CUARTController(unsigned int speed, bool assertRTS) : +m_device(), +m_speed(speed), +m_assertRTS(assertRTS), +m_handle(INVALID_HANDLE_VALUE) +{ +} + +CUARTController::~CUARTController() { } -bool CSerialController::open() +bool CUARTController::open() { assert(m_handle == INVALID_HANDLE_VALUE); @@ -136,7 +140,7 @@ bool CSerialController::open() return true; } -int CSerialController::read(unsigned char* buffer, unsigned int length) +int CUARTController::read(unsigned char* buffer, unsigned int length) { assert(m_handle != INVALID_HANDLE_VALUE); assert(buffer != NULL); @@ -158,7 +162,7 @@ int CSerialController::read(unsigned char* buffer, unsigned int length) return int(length); } -int CSerialController::readNonblock(unsigned char* buffer, unsigned int length) +int CUARTController::readNonblock(unsigned char* buffer, unsigned int length) { assert(m_handle != INVALID_HANDLE_VALUE); assert(buffer != NULL); @@ -190,7 +194,7 @@ int CSerialController::readNonblock(unsigned char* buffer, unsigned int length) return int(bytes); } -int CSerialController::write(const unsigned char* buffer, unsigned int length) +int CUARTController::write(const unsigned char* buffer, unsigned int length) { assert(m_handle != INVALID_HANDLE_VALUE); assert(buffer != NULL); @@ -214,7 +218,7 @@ int CSerialController::write(const unsigned char* buffer, unsigned int length) return int(length); } -void CSerialController::close() +void CUARTController::close() { assert(m_handle != INVALID_HANDLE_VALUE); @@ -224,7 +228,7 @@ void CSerialController::close() #else -CSerialController::CSerialController(const std::string& device, SERIAL_SPEED speed, bool assertRTS) : +CUARTController::CUARTController(const std::string& device, unsigned int speed, bool assertRTS) : m_device(device), m_speed(speed), m_assertRTS(assertRTS), @@ -233,136 +237,176 @@ m_fd(-1) assert(!device.empty()); } -CSerialController::~CSerialController() +CUARTController::CUARTController(unsigned int speed, bool assertRTS) : +m_device(), +m_speed(speed), +m_assertRTS(assertRTS), +m_fd(-1) +{ +} + +CUARTController::~CUARTController() { } -bool CSerialController::open() +bool CUARTController::open() { assert(m_fd == -1); #if defined(__APPLE__) - m_fd = ::open(m_device.c_str(), O_RDWR | O_NOCTTY | O_NONBLOCK); /*open in block mode under OSX*/ + m_fd = ::open(m_device.c_str(), O_RDWR | O_NOCTTY | O_NONBLOCK); /*open in block mode under OSX*/ #else - m_fd = ::open(m_device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY, 0); + m_fd = ::open(m_device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY, 0); #endif - if (m_fd < 0) { - LogError("Cannot open device - %s", m_device.c_str()); - return false; - } + if (m_fd < 0) { + LogError("Cannot open device - %s", m_device.c_str()); + return false; + } - if (::isatty(m_fd) == 0) { - LogError("%s is not a TTY device", m_device.c_str()); - ::close(m_fd); - return false; - } + if (::isatty(m_fd)) + return setRaw(); + + return true; +} - termios termios; - if (::tcgetattr(m_fd, &termios) < 0) { - LogError("Cannot get the attributes for %s", m_device.c_str()); - ::close(m_fd); - return false; - } +bool CUARTController::setRaw() +{ + termios termios; + if (::tcgetattr(m_fd, &termios) < 0) { + LogError("Cannot get the attributes for %s", m_device.c_str()); + ::close(m_fd); + return false; + } + termios.c_iflag &= ~(IGNBRK | BRKINT | IGNPAR | PARMRK | INPCK); + termios.c_iflag &= ~(ISTRIP | INLCR | IGNCR | ICRNL); + termios.c_iflag &= ~(IXON | IXOFF | IXANY); + termios.c_oflag &= ~(OPOST); + termios.c_cflag &= ~(CSIZE | CSTOPB | PARENB | CRTSCTS); + termios.c_cflag |= (CS8 | CLOCAL | CREAD); + termios.c_lflag &= ~(ISIG | ICANON | IEXTEN); + termios.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL); #if defined(__APPLE__) - termios.c_cflag |= (CLOCAL | CREAD); /* ignore modem controls */ - termios.c_cflag &= ~CSIZE; - termios.c_cflag |= CS8; /* 8-bit characters */ - termios.c_cflag &= ~PARENB; /* no parity bit */ - termios.c_cflag &= ~CSTOPB; /* only need 1 stop bit */ - termios.c_cflag &= ~CRTSCTS; /* no hardware flowcontrol */ - - /* setup for non-canonical mode */ - termios.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); - termios.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); - termios.c_oflag &= ~OPOST; - - /* fetch bytes as they become available */ - termios.c_cc[VMIN] = 1; - termios.c_cc[VTIME] = 1; + termios.c_cc[VMIN] = 1; + termios.c_cc[VTIME] = 1; + #define B460800 460800 #else - termios.c_lflag &= ~(ECHO | ECHOE | ICANON | IEXTEN | ISIG); - termios.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON | IXOFF | IXANY); - termios.c_cflag &= ~(CSIZE | CSTOPB | PARENB | CRTSCTS); - termios.c_cflag |= CS8; - termios.c_oflag &= ~(OPOST); - termios.c_cc[VMIN] = 0; - termios.c_cc[VTIME] = 10; + termios.c_cc[VMIN] = 0; + termios.c_cc[VTIME] = 10; #endif - switch (m_speed) { - case SERIAL_1200: - ::cfsetospeed(&termios, B1200); - ::cfsetispeed(&termios, B1200); - break; - case SERIAL_2400: - ::cfsetospeed(&termios, B2400); - ::cfsetispeed(&termios, B2400); - break; - case SERIAL_4800: - ::cfsetospeed(&termios, B4800); - ::cfsetispeed(&termios, B4800); - break; - case SERIAL_9600: - ::cfsetospeed(&termios, B9600); - ::cfsetispeed(&termios, B9600); - break; - case SERIAL_19200: - ::cfsetospeed(&termios, B19200); - ::cfsetispeed(&termios, B19200); - break; - case SERIAL_38400: - ::cfsetospeed(&termios, B38400); - ::cfsetispeed(&termios, B38400); - break; - case SERIAL_115200: - ::cfsetospeed(&termios, B115200); - ::cfsetispeed(&termios, B115200); - break; - case SERIAL_230400: - ::cfsetospeed(&termios, B230400); - ::cfsetispeed(&termios, B230400); - break; - default: - LogError("Unsupported serial port speed - %d", int(m_speed)); - ::close(m_fd); - return false; - } +#if !defined(B38400) || (B38400 != 38400) + switch (m_speed) { +#if defined(B1200) + case 1200U: + ::cfsetospeed(&termios, B1200); + ::cfsetispeed(&termios, B1200); + break; +#endif /*B1200*/ +#if defined(B2400) + case 2400U: + ::cfsetospeed(&termios, B2400); + ::cfsetispeed(&termios, B2400); + break; +#endif /*B2400*/ +#if defined(B4800) + case 4800U: + ::cfsetospeed(&termios, B4800); + ::cfsetispeed(&termios, B4800); + break; +#endif /*B4800*/ +#if defined(B9600) + case 9600U: + ::cfsetospeed(&termios, B9600); + ::cfsetispeed(&termios, B9600); + break; +#endif /*B9600*/ +#if defined(B19200) + case 19200U: + ::cfsetospeed(&termios, B19200); + ::cfsetispeed(&termios, B19200); + break; +#endif /*B19200*/ +#if defined(B38400) + case 38400U: + ::cfsetospeed(&termios, B38400); + ::cfsetispeed(&termios, B38400); + break; +#endif /*B38400*/ +#if defined(B57600) + case 57600U: + ::cfsetospeed(&termios, B57600); + ::cfsetispeed(&termios, B57600); + break; +#endif /*B57600*/ +#if defined(B115200) + case 115200U: + ::cfsetospeed(&termios, B115200); + ::cfsetispeed(&termios, B115200); + break; +#endif /*B115200*/ +#if defined(B230400) + case 230400U: + ::cfsetospeed(&termios, B230400); + ::cfsetispeed(&termios, B230400); + break; +#endif /*B230400*/ +#if defined(B460800) + case 460800U: + ::cfsetospeed(&termios, B460800); + ::cfsetispeed(&termios, B460800); + break; +#endif /*B460800*/ +#if defined(B500000) + case 500000U: + ::cfsetospeed(&termios, B500000); + ::cfsetispeed(&termios, B500000); + break; +#endif /*B500000*/ + default: + LogError("Unsupported serial port speed - %u", m_speed); + ::close(m_fd); + return false; + } +#else + ::cfsetospeed(&termios, m_speed); + ::cfsetispeed(&termios, m_speed); +#endif + + if (::tcsetattr(m_fd, TCSANOW, &termios) < 0) { + LogError("Cannot set the attributes for %s", m_device.c_str()); + ::close(m_fd); + return false; + } - if (::tcsetattr(m_fd, TCSANOW, &termios) < 0) { - LogError("Cannot set the attributes for %s", m_device.c_str()); + if (m_assertRTS) { + unsigned int y; + if (::ioctl(m_fd, TIOCMGET, &y) < 0) { + LogError("Cannot get the control attributes for %s", m_device.c_str()); ::close(m_fd); return false; } - if (m_assertRTS) { - unsigned int y; - if (::ioctl(m_fd, TIOCMGET, &y) < 0) { - LogError("Cannot get the control attributes for %s", m_device.c_str()); - ::close(m_fd); - return false; - } - - y |= TIOCM_RTS; + y |= TIOCM_RTS; - if (::ioctl(m_fd, TIOCMSET, &y) < 0) { - LogError("Cannot set the control attributes for %s", m_device.c_str()); - ::close(m_fd); - return false; - } + if (::ioctl(m_fd, TIOCMSET, &y) < 0) { + LogError("Cannot set the control attributes for %s", m_device.c_str()); + ::close(m_fd); + return false; } + } #if defined(__APPLE__) - setNonblock(false); + setNonblock(false); #endif return true; } #if defined(__APPLE__) -int CSerialController::setNonblock(bool nonblock) +int CUARTController::setNonblock(bool nonblock) { - int flag = ::fcntl(m_fd, F_GETFD, 0); + int flag = ::fcntl(m_fd, F_GETFL, 0); if (nonblock) flag |= O_NONBLOCK; @@ -373,7 +417,7 @@ int CSerialController::setNonblock(bool nonblock) } #endif -int CSerialController::read(unsigned char* buffer, unsigned int length) +int CUARTController::read(unsigned char* buffer, unsigned int length) { assert(buffer != NULL); assert(m_fd != -1); @@ -384,7 +428,6 @@ int CSerialController::read(unsigned char* buffer, unsigned int length) unsigned int offset = 0U; while (offset < length) { - fd_set fds; FD_ZERO(&fds); FD_SET(m_fd, &fds); @@ -422,7 +465,7 @@ int CSerialController::read(unsigned char* buffer, unsigned int length) return length; } -bool CSerialController::canWrite(){ +bool CUARTController::canWrite(){ #if defined(__APPLE__) fd_set wset; FD_ZERO(&wset); @@ -432,8 +475,8 @@ bool CSerialController::canWrite(){ timeo.tv_sec = 0; timeo.tv_usec = 0; - int rc = select(m_fd + 1, NULL, &wset, NULL, &timeo); - if (rc >0 && FD_ISSET(m_fd, &wset)) + int rc = ::select(m_fd + 1, NULL, &wset, NULL, &timeo); + if (rc > 0 && FD_ISSET(m_fd, &wset)) return true; return false; @@ -442,7 +485,7 @@ bool CSerialController::canWrite(){ #endif } -int CSerialController::write(const unsigned char* buffer, unsigned int length) +int CUARTController::write(const unsigned char* buffer, unsigned int length) { assert(buffer != NULL); assert(m_fd != -1); @@ -469,7 +512,7 @@ int CSerialController::write(const unsigned char* buffer, unsigned int length) return length; } -void CSerialController::close() +void CUARTController::close() { assert(m_fd != -1); @@ -478,3 +521,4 @@ void CSerialController::close() } #endif + diff --git a/SerialController.h b/UARTController.h similarity index 72% rename from SerialController.h rename to UARTController.h index 6dfc46101..bdb9bd92e 100644 --- a/SerialController.h +++ b/UARTController.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002-2004,2007-2009,2011-2013,2015-2017 by Jonathan Naylor G4KLX + * Copyright (C) 2002-2004,2007-2009,2011-2013,2015-2017,2020,2021 by Jonathan Naylor G4KLX * Copyright (C) 1999-2001 by Thomas Sailor HB9JNX * * This program is free software; you can redistribute it and/or modify @@ -17,9 +17,10 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef SerialController_H -#define SerialController_H +#ifndef UARTController_H +#define UARTController_H +#include "ModemPort.h" #include "SerialPort.h" #include @@ -28,22 +29,10 @@ #include #endif -enum SERIAL_SPEED { - SERIAL_1200 = 1200, - SERIAL_2400 = 2400, - SERIAL_4800 = 4800, - SERIAL_9600 = 9600, - SERIAL_19200 = 19200, - SERIAL_38400 = 38400, - SERIAL_76800 = 76800, - SERIAL_115200 = 115200, - SERIAL_230400 = 230400 -}; - -class CSerialController : public ISerialPort { +class CUARTController : public ISerialPort, public IModemPort { public: - CSerialController(const std::string& device, SERIAL_SPEED speed, bool assertRTS = false); - virtual ~CSerialController(); + CUARTController(const std::string& device, unsigned int speed, bool assertRTS = false); + virtual ~CUARTController(); virtual bool open(); @@ -58,8 +47,10 @@ class CSerialController : public ISerialPort { #endif protected: + CUARTController(unsigned int speed, bool assertRTS = false); + std::string m_device; - SERIAL_SPEED m_speed; + unsigned int m_speed; bool m_assertRTS; #if defined(_WIN32) || defined(_WIN64) HANDLE m_handle; @@ -71,6 +62,7 @@ class CSerialController : public ISerialPort { int readNonblock(unsigned char* buffer, unsigned int length); #else bool canWrite(); + bool setRaw(); #endif }; diff --git a/UDPController.cpp b/UDPController.cpp new file mode 100644 index 000000000..3996d327e --- /dev/null +++ b/UDPController.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "UDPController.h" +#include "Log.h" + +#include +#include + +const unsigned int BUFFER_LENGTH = 600U; + +CUDPController::CUDPController(const std::string& modemAddress, unsigned int modemPort, const std::string& localAddress, unsigned int localPort) : +m_socket(localAddress, localPort), +m_addr(), +m_addrLen(0U), +m_buffer(2000U, "UDP Controller Ring Buffer") +{ + assert(!modemAddress.empty()); + assert(modemPort > 0U); + assert(localPort > 0U); + + if (CUDPSocket::lookup(modemAddress, modemPort, m_addr, m_addrLen) != 0) + m_addrLen = 0U; +} + +CUDPController::~CUDPController() +{ +} + +bool CUDPController::open() +{ + if (m_addrLen == 0U) { + LogError("Unable to resolve the address of the modem"); + return false; + } + + return m_socket.open(m_addr); +} + +int CUDPController::read(unsigned char* buffer, unsigned int length) +{ + assert(buffer != NULL); + assert(length > 0U); + + unsigned char data[BUFFER_LENGTH]; + sockaddr_storage addr; + unsigned int addrLen; + int ret = m_socket.read(data, BUFFER_LENGTH, addr, addrLen); + + // An error occurred on the socket + if (ret < 0) + return ret; + + // Add new data to the ring buffer + if (ret > 0) { + if (CUDPSocket::match(addr, m_addr)) + m_buffer.addData(data, ret); + } + + // Get required data from the ring buffer + unsigned int avail = m_buffer.dataSize(); + if (avail < length) + length = avail; + + if (length > 0U) + m_buffer.getData(buffer, length); + + return int(length); +} + +int CUDPController::write(const unsigned char* buffer, unsigned int length) +{ + assert(buffer != NULL); + assert(length > 0U); + + return m_socket.write(buffer, length, m_addr, m_addrLen) ? int(length) : -1; +} + +void CUDPController::close() +{ + m_socket.close(); +} diff --git a/UDPController.h b/UDPController.h new file mode 100644 index 000000000..cbb547fdb --- /dev/null +++ b/UDPController.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef UDPController_H +#define UDPController_H + +#include "ModemPort.h" +#include "RingBuffer.h" +#include "UDPSocket.h" + +#include + +class CUDPController : public IModemPort { +public: + CUDPController(const std::string& modemAddress, unsigned int modemPort, const std::string& localAddress, unsigned int localPort); + virtual ~CUDPController(); + + virtual bool open(); + + virtual int read(unsigned char* buffer, unsigned int length); + + virtual int write(const unsigned char* buffer, unsigned int length); + + virtual void close(); + +#if defined(__APPLE__) + int setNonblock(bool nonblock) { return 0; } +#endif + +protected: + CUDPSocket m_socket; + sockaddr_storage m_addr; + unsigned int m_addrLen; + CRingBuffer m_buffer; +}; + +#endif diff --git a/UDPSocket.cpp b/UDPSocket.cpp index ba0e35f42..0792863c2 100644 --- a/UDPSocket.cpp +++ b/UDPSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2016 by Jonathan Naylor G4KLX + * Copyright (C) 2006-2016,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,7 +17,6 @@ */ #include "UDPSocket.h" -#include "Log.h" #include @@ -26,24 +25,45 @@ #include #endif +#if defined(HAVE_LOG_H) +#include "Log.h" +#else +#define LogMessage(fmt, ...) ::fprintf(stderr, fmt "\n", ## __VA_ARGS__) +#define LogError(fmt, ...) ::fprintf(stderr, fmt "\n", ## __VA_ARGS__) +#define LogInfo(fmt, ...) ::fprintf(stderr, fmt "\n", ## __VA_ARGS__) +#endif -CUDPSocket::CUDPSocket(const std::string& address, unsigned int port) : -m_address(address), -m_port(port), -m_fd(-1) +CUDPSocket::CUDPSocket(const std::string& address, unsigned short port) : +m_address_save(address), +m_port_save(port), +m_counter(0U) { -#if defined(_WIN32) || defined(_WIN64) - WSAData data; - int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); - if (wsaRet != 0) - LogError("Error from WSAStartup"); -#endif + for (int i = 0; i < UDP_SOCKET_MAX; i++) { + m_address[i] = ""; + m_port[i] = 0U; + m_af[i] = 0U; + m_fd[i] = -1; + } } -CUDPSocket::CUDPSocket(unsigned int port) : -m_address(), -m_port(port), -m_fd(-1) +CUDPSocket::CUDPSocket(unsigned short port) : +m_address_save(), +m_port_save(port), +m_counter(0U) +{ + for (int i = 0; i < UDP_SOCKET_MAX; i++) { + m_address[i] = ""; + m_port[i] = 0U; + m_af[i] = 0U; + m_fd[i] = -1; + } +} + +CUDPSocket::~CUDPSocket() +{ +} + +void CUDPSocket::startup() { #if defined(_WIN32) || defined(_WIN64) WSAData data; @@ -53,57 +73,125 @@ m_fd(-1) #endif } -CUDPSocket::~CUDPSocket() +void CUDPSocket::shutdown() { #if defined(_WIN32) || defined(_WIN64) ::WSACleanup(); #endif } -in_addr CUDPSocket::lookup(const std::string& hostname) +int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockaddr_storage& addr, unsigned int& address_length) { - in_addr addr; -#if defined(_WIN32) || defined(_WIN64) - unsigned long address = ::inet_addr(hostname.c_str()); - if (address != INADDR_NONE && address != INADDR_ANY) { - addr.s_addr = address; - return addr; - } + struct addrinfo hints; + ::memset(&hints, 0, sizeof(hints)); + + return lookup(hostname, port, addr, address_length, hints); +} - struct hostent* hp = ::gethostbyname(hostname.c_str()); - if (hp != NULL) { - ::memcpy(&addr, hp->h_addr_list[0], sizeof(struct in_addr)); - return addr; +int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockaddr_storage& addr, unsigned int& address_length, struct addrinfo& hints) +{ + std::string portstr = std::to_string(port); + struct addrinfo *res; + + /* port is always digits, no needs to lookup service */ + hints.ai_flags |= AI_NUMERICSERV; + + int err = getaddrinfo(hostname.empty() ? NULL : hostname.c_str(), portstr.c_str(), &hints, &res); + if (err != 0) { + sockaddr_in* paddr = (sockaddr_in*)&addr; + ::memset(paddr, 0x00U, address_length = sizeof(sockaddr_in)); + paddr->sin_family = AF_INET; + paddr->sin_port = htons(port); + paddr->sin_addr.s_addr = htonl(INADDR_NONE); + LogError("Cannot find address for host %s", hostname.c_str()); + return err; } - LogError("Cannot find address for host %s", hostname.c_str()); + ::memcpy(&addr, res->ai_addr, address_length = res->ai_addrlen); - addr.s_addr = INADDR_NONE; - return addr; -#else - in_addr_t address = ::inet_addr(hostname.c_str()); - if (address != in_addr_t(-1)) { - addr.s_addr = address; - return addr; - } + freeaddrinfo(res); + + return 0; +} + +bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type) +{ + if (addr1.ss_family != addr2.ss_family) + return false; - struct hostent* hp = ::gethostbyname(hostname.c_str()); - if (hp != NULL) { - ::memcpy(&addr, hp->h_addr_list[0], sizeof(struct in_addr)); - return addr; + if (type == IMT_ADDRESS_AND_PORT) { + switch (addr1.ss_family) { + case AF_INET: + struct sockaddr_in *in_1, *in_2; + in_1 = (struct sockaddr_in*)&addr1; + in_2 = (struct sockaddr_in*)&addr2; + return (in_1->sin_addr.s_addr == in_2->sin_addr.s_addr) && (in_1->sin_port == in_2->sin_port); + case AF_INET6: + struct sockaddr_in6 *in6_1, *in6_2; + in6_1 = (struct sockaddr_in6*)&addr1; + in6_2 = (struct sockaddr_in6*)&addr2; + return IN6_ARE_ADDR_EQUAL(&in6_1->sin6_addr, &in6_2->sin6_addr) && (in6_1->sin6_port == in6_2->sin6_port); + default: + return false; + } + } else if (type == IMT_ADDRESS_ONLY) { + switch (addr1.ss_family) { + case AF_INET: + struct sockaddr_in *in_1, *in_2; + in_1 = (struct sockaddr_in*)&addr1; + in_2 = (struct sockaddr_in*)&addr2; + return in_1->sin_addr.s_addr == in_2->sin_addr.s_addr; + case AF_INET6: + struct sockaddr_in6 *in6_1, *in6_2; + in6_1 = (struct sockaddr_in6*)&addr1; + in6_2 = (struct sockaddr_in6*)&addr2; + return IN6_ARE_ADDR_EQUAL(&in6_1->sin6_addr, &in6_2->sin6_addr); + default: + return false; + } + } else { + return false; } +} - LogError("Cannot find address for host %s", hostname.c_str()); +bool CUDPSocket::isNone(const sockaddr_storage& addr) +{ + struct sockaddr_in *in = (struct sockaddr_in *)&addr; - addr.s_addr = INADDR_NONE; - return addr; -#endif + return ((addr.ss_family == AF_INET) && (in->sin_addr.s_addr == htonl(INADDR_NONE))); } -bool CUDPSocket::open() +bool CUDPSocket::open(const sockaddr_storage& address) { - m_fd = ::socket(PF_INET, SOCK_DGRAM, 0); - if (m_fd < 0) { + return open(address.ss_family); +} + +bool CUDPSocket::open(unsigned int af) +{ + return open(0, af, m_address_save, m_port_save); +} + +bool CUDPSocket::open(const unsigned int index, const unsigned int af, const std::string& address, const unsigned short port) +{ + sockaddr_storage addr; + unsigned int addrlen; + struct addrinfo hints; + + ::memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_PASSIVE; + hints.ai_family = af; + + /* to determine protocol family, call lookup() first. */ + int err = lookup(address, port, addr, addrlen, hints); + if (err != 0) { + LogError("The local address is invalid - %s", address.c_str()); + return false; + } + + close(index); + + int fd = ::socket(addr.ss_family, SOCK_DGRAM, 0); + if (fd < 0) { #if defined(_WIN32) || defined(_WIN64) LogError("Cannot create the UDP socket, err: %lu", ::GetLastError()); #else @@ -112,27 +200,14 @@ bool CUDPSocket::open() return false; } - if (m_port > 0U) { - sockaddr_in addr; - ::memset(&addr, 0x00, sizeof(sockaddr_in)); - addr.sin_family = AF_INET; - addr.sin_port = htons(m_port); - addr.sin_addr.s_addr = htonl(INADDR_ANY); - - if (!m_address.empty()) { -#if defined(_WIN32) || defined(_WIN64) - addr.sin_addr.s_addr = ::inet_addr(m_address.c_str()); -#else - addr.sin_addr.s_addr = ::inet_addr(m_address.c_str()); -#endif - if (addr.sin_addr.s_addr == INADDR_NONE) { - LogError("The local address is invalid - %s", m_address.c_str()); - return false; - } - } + m_address[index] = address; + m_port[index] = port; + m_af[index] = addr.ss_family; + m_fd[index] = fd; + if (port > 0U) { int reuse = 1; - if (::setsockopt(m_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) == -1) { + if (::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) == -1) { #if defined(_WIN32) || defined(_WIN64) LogError("Cannot set the UDP socket option, err: %lu", ::GetLastError()); #else @@ -141,7 +216,7 @@ bool CUDPSocket::open() return false; } - if (::bind(m_fd, (sockaddr*)&addr, sizeof(sockaddr_in)) == -1) { + if (::bind(fd, (sockaddr*)&addr, addrlen) == -1) { #if defined(_WIN32) || defined(_WIN64) LogError("Cannot bind the UDP address, err: %lu", ::GetLastError()); #else @@ -149,112 +224,140 @@ bool CUDPSocket::open() #endif return false; } + + LogInfo("Opening UDP port on %hu", port); } return true; } -int CUDPSocket::read(unsigned char* buffer, unsigned int length, in_addr& address, unsigned int& port) +int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storage& address, unsigned int &address_length) { assert(buffer != NULL); assert(length > 0U); // Check that the readfrom() won't block - fd_set readFds; - FD_ZERO(&readFds); + int i, n; + struct pollfd pfd[UDP_SOCKET_MAX]; + for (i = n = 0; i < UDP_SOCKET_MAX; i++) { + if (m_fd[i] >= 0) { + pfd[n].fd = m_fd[i]; + pfd[n].events = POLLIN; + n++; + } + } + + // no socket descriptor to receive + if (n == 0) + return 0; + + // Return immediately #if defined(_WIN32) || defined(_WIN64) - FD_SET((unsigned int)m_fd, &readFds); + int ret = WSAPoll(pfd, n, 0); #else - FD_SET(m_fd, &readFds); + int ret = ::poll(pfd, n, 0); #endif - - // Return immediately - timeval tv; - tv.tv_sec = 0L; - tv.tv_usec = 0L; - - int ret = ::select(m_fd + 1, &readFds, NULL, NULL, &tv); if (ret < 0) { #if defined(_WIN32) || defined(_WIN64) - LogError("Error returned from UDP select, err: %lu", ::GetLastError()); + LogError("Error returned from UDP poll, err: %lu", ::GetLastError()); #else - LogError("Error returned from UDP select, err: %d", errno); + LogError("Error returned from UDP poll, err: %d", errno); #endif return -1; } - if (ret == 0) + int index; + for (i = 0; i < n; i++) { + // round robin + index = (i + m_counter) % n; + if (pfd[index].revents & POLLIN) + break; + } + if (i == n) return 0; - sockaddr_in addr; #if defined(_WIN32) || defined(_WIN64) - int size = sizeof(sockaddr_in); + int size = sizeof(sockaddr_storage); #else - socklen_t size = sizeof(sockaddr_in); + socklen_t size = sizeof(sockaddr_storage); #endif #if defined(_WIN32) || defined(_WIN64) - int len = ::recvfrom(m_fd, (char*)buffer, length, 0, (sockaddr *)&addr, &size); + int len = ::recvfrom(pfd[index].fd, (char*)buffer, length, 0, (sockaddr *)&address, &size); #else - ssize_t len = ::recvfrom(m_fd, (char*)buffer, length, 0, (sockaddr *)&addr, &size); + ssize_t len = ::recvfrom(pfd[index].fd, (char*)buffer, length, 0, (sockaddr *)&address, &size); #endif if (len <= 0) { #if defined(_WIN32) || defined(_WIN64) LogError("Error returned from recvfrom, err: %lu", ::GetLastError()); #else LogError("Error returned from recvfrom, err: %d", errno); + + if (len == -1 && errno == ENOTSOCK) { + LogMessage("Re-opening UDP port on %hu", m_port[index]); + close(); + open(); + } #endif return -1; } - address = addr.sin_addr; - port = ntohs(addr.sin_port); - + m_counter++; + address_length = size; return len; } -bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const in_addr& address, unsigned int port) +bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const sockaddr_storage& address, unsigned int address_length) { assert(buffer != NULL); assert(length > 0U); - sockaddr_in addr; - ::memset(&addr, 0x00, sizeof(sockaddr_in)); + bool result = false; - addr.sin_family = AF_INET; - addr.sin_addr = address; - addr.sin_port = htons(port); + for (int i = 0; i < UDP_SOCKET_MAX; i++) { + if (m_fd[i] < 0 || m_af[i] != address.ss_family) + continue; #if defined(_WIN32) || defined(_WIN64) - int ret = ::sendto(m_fd, (char *)buffer, length, 0, (sockaddr *)&addr, sizeof(sockaddr_in)); + int ret = ::sendto(m_fd[i], (char *)buffer, length, 0, (sockaddr *)&address, address_length); #else - ssize_t ret = ::sendto(m_fd, (char *)buffer, length, 0, (sockaddr *)&addr, sizeof(sockaddr_in)); + ssize_t ret = ::sendto(m_fd[i], (char *)buffer, length, 0, (sockaddr *)&address, address_length); #endif - if (ret < 0) { + + if (ret < 0) { #if defined(_WIN32) || defined(_WIN64) - LogError("Error returned from sendto, err: %lu", ::GetLastError()); + LogError("Error returned from sendto, err: %lu", ::GetLastError()); #else - LogError("Error returned from sendto, err: %d", errno); + LogError("Error returned from sendto, err: %d", errno); #endif - return false; - } - + } else { #if defined(_WIN32) || defined(_WIN64) - if (ret != int(length)) - return false; + if (ret == int(length)) + result = true; #else - if (ret != ssize_t(length)) - return false; + if (ret == ssize_t(length)) + result = true; #endif + } + } - return true; + return result; } void CUDPSocket::close() { + for (unsigned int i = 0; i < UDP_SOCKET_MAX; i++) + close(i); +} + +void CUDPSocket::close(const unsigned int index) +{ + if ((index < UDP_SOCKET_MAX) && (m_fd[index] >= 0)) { #if defined(_WIN32) || defined(_WIN64) - ::closesocket(m_fd); + ::closesocket(m_fd[index]); #else - ::close(m_fd); + ::close(m_fd[index]); #endif + m_fd[index] = -1; + } } diff --git a/UDPSocket.h b/UDPSocket.h index e0af272b3..3e75554de 100644 --- a/UDPSocket.h +++ b/UDPSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011,2013,2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2011,2013,2015,2016,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,33 +26,58 @@ #include #include #include +#include #include #include #include #include #else -#include +#include #endif +#if !defined(UDP_SOCKET_MAX) +#define UDP_SOCKET_MAX 1 +#endif + +enum IPMATCHTYPE { + IMT_ADDRESS_AND_PORT, + IMT_ADDRESS_ONLY +}; + class CUDPSocket { public: - CUDPSocket(const std::string& address, unsigned int port = 0U); - CUDPSocket(unsigned int port = 0U); + CUDPSocket(const std::string& address, unsigned short port = 0U); + CUDPSocket(unsigned short port = 0U); ~CUDPSocket(); - bool open(); + bool open(unsigned int af = AF_UNSPEC); + bool open(const sockaddr_storage& address); + bool open(const unsigned int index, const unsigned int af, const std::string& address, const unsigned short port); - int read(unsigned char* buffer, unsigned int length, in_addr& address, unsigned int& port); - bool write(const unsigned char* buffer, unsigned int length, const in_addr& address, unsigned int port); + int read(unsigned char* buffer, unsigned int length, sockaddr_storage& address, unsigned int &address_length); + bool write(const unsigned char* buffer, unsigned int length, const sockaddr_storage& address, unsigned int address_length); void close(); + void close(const unsigned int index); + + static void startup(); + static void shutdown(); + + static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& address_length); + static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& address_length, struct addrinfo& hints); + + static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IMT_ADDRESS_AND_PORT); - static in_addr lookup(const std::string& hostName); + static bool isNone(const sockaddr_storage& addr); private: - std::string m_address; - unsigned short m_port; - int m_fd; + std::string m_address_save; + unsigned short m_port_save; + std::string m_address[UDP_SOCKET_MAX]; + unsigned short m_port[UDP_SOCKET_MAX]; + unsigned int m_af[UDP_SOCKET_MAX]; + int m_fd[UDP_SOCKET_MAX]; + unsigned int m_counter; }; #endif diff --git a/UMP.cpp b/UMP.cpp deleted file mode 100644 index f843322fa..000000000 --- a/UMP.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/* -* Copyright (C) 2016 by Jonathan Naylor G4KLX -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "Defines.h" -#include "Utils.h" -#include "Log.h" -#include "UMP.h" - -#include -#include -#include - -const unsigned char UMP_FRAME_START = 0xF0U; - -const unsigned char UMP_HELLO = 0x00U; - -const unsigned char UMP_SET_MODE = 0x01U; -const unsigned char UMP_SET_TX = 0x02U; -const unsigned char UMP_SET_CD = 0x03U; - -const unsigned char UMP_WRITE_SERIAL = 0x10U; -const unsigned char UMP_READ_SERIAL = 0x11U; - -const unsigned char UMP_STATUS = 0x50U; - -const unsigned int BUFFER_LENGTH = 255U; - -CUMP::CUMP(const std::string& port) : -m_serial(port, SERIAL_115200), -m_open(false), -m_buffer(NULL), -m_length(0U), -m_offset(0U), -m_lockout(false), -m_mode(MODE_IDLE), -m_tx(false), -m_cd(false) -{ - m_buffer = new unsigned char[BUFFER_LENGTH]; -} - -CUMP::~CUMP() -{ - delete[] m_buffer; -} - -bool CUMP::open() -{ - if (m_open) - return true; - - LogMessage("Opening the UMP"); - - bool ret = m_serial.open(); - if (!ret) - return false; - - unsigned char buffer[3U]; - - buffer[0U] = UMP_FRAME_START; - buffer[1U] = 3U; - buffer[2U] = UMP_HELLO; - - // CUtils::dump(1U, "Transmitted", buffer, 3U); - - int n = m_serial.write(buffer, 3U); - if (n != 3) { - m_serial.close(); - return false; - } - - m_open = true; - - return true; -} - -bool CUMP::setMode(unsigned char mode) -{ - if (mode == m_mode) - return true; - - m_mode = mode; - - unsigned char buffer[4U]; - - buffer[0U] = UMP_FRAME_START; - buffer[1U] = 4U; - buffer[2U] = UMP_SET_MODE; - buffer[3U] = mode; - - // CUtils::dump(1U, "Transmitted", buffer, 4U); - - return m_serial.write(buffer, 4U) == 4; -} - -bool CUMP::setTX(bool on) -{ - if (on == m_tx) - return true; - - m_tx = on; - - unsigned char buffer[4U]; - - buffer[0U] = UMP_FRAME_START; - buffer[1U] = 4U; - buffer[2U] = UMP_SET_TX; - buffer[3U] = on ? 0x01U : 0x00U; - - // CUtils::dump(1U, "Transmitted", buffer, 4U); - - return m_serial.write(buffer, 4U) == 4; -} - -bool CUMP::setCD(bool on) -{ - if (on == m_cd) - return true; - - m_cd = on; - - unsigned char buffer[4U]; - - buffer[0U] = UMP_FRAME_START; - buffer[1U] = 4U; - buffer[2U] = UMP_SET_CD; - buffer[3U] = on ? 0x01U : 0x00U; - - // CUtils::dump(1U, "Transmitted", buffer, 4U); - - return m_serial.write(buffer, 4U) == 4; -} - -bool CUMP::getLockout() const -{ - return m_lockout; -} - -int CUMP::write(const unsigned char* data, unsigned int length) -{ - assert(data != NULL); - assert(length > 0U); - - unsigned char buffer[250U]; - - buffer[0U] = UMP_FRAME_START; - buffer[1U] = length + 3U; - buffer[2U] = UMP_WRITE_SERIAL; - - ::memcpy(buffer + 3U, data, length); - - // CUtils::dump(1U, "Transmitted", buffer, length + 3U); - - return m_serial.write(buffer, length + 3U); -} - -// To be implemented later if needed -int CUMP::read(unsigned char* data, unsigned int length) -{ - assert(data != NULL); - assert(length > 0U); - - return 0; -} - -void CUMP::clock(unsigned int ms) -{ - if (m_offset == 0U) { - // Get the start of the frame or nothing at all - int ret = m_serial.read(m_buffer + 0U, 1U); - if (ret < 0) { - LogError("Error when reading from the UMP"); - return; - } - - if (ret == 0) - return; - - if (m_buffer[0U] != UMP_FRAME_START) - return; - - m_offset = 1U; - } - - if (m_offset == 1U) { - // Get the length of the frame - int ret = m_serial.read(m_buffer + 1U, 1U); - if (ret < 0) { - LogError("Error when reading from the UMP"); - m_offset = 0U; - return; - } - - if (ret == 0) - return; - - if (m_buffer[1U] >= 250U) { - LogError("Invalid length received from the UMP - %u", m_buffer[1U]); - m_offset = 0U; - return; - } - - m_length = m_buffer[1U]; - m_offset = 2U; - } - - if (m_offset == 2U) { - // Get the frame type - int ret = m_serial.read(m_buffer + 2U, 1U); - if (ret < 0) { - LogError("Error when reading from the UMP"); - m_offset = 0U; - return; - } - - if (ret == 0) - return; - - switch (m_buffer[2U]) { - case UMP_STATUS: - case UMP_READ_SERIAL: - break; - - default: - LogError("Unknown message, type: %02X", m_buffer[2U]); - m_offset = 0U; - return; - } - - m_offset = 3U; - } - - if (m_offset >= 3U) { - while (m_offset < m_length) { - int ret = m_serial.read(m_buffer + m_offset, m_length - m_offset); - if (ret < 0) { - LogError("Error when reading from the UMP"); - m_offset = 0U; - return; - } - - if (ret == 0) - return; - - if (ret > 0) - m_offset += ret; - } - } - - m_offset = 0U; - - // CUtils::dump(1U, "Received", m_buffer, m_length); - - if (m_buffer[2U] == UMP_STATUS) - m_lockout = (m_buffer[3U] & 0x01U) == 0x01U; -} - -void CUMP::close() -{ - if (!m_open) - return; - - LogMessage("Closing the UMP"); - - m_serial.close(); - - m_open = false; -} diff --git a/UMP/UMP.ino b/UMP/UMP.ino deleted file mode 100644 index 4cf98e301..000000000 --- a/UMP/UMP.ino +++ /dev/null @@ -1,203 +0,0 @@ -/* -* Copyright (C) 2016,2018 by Jonathan Naylor G4KLX -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#if !defined(__AVR_ATmega1280__) && !defined(__AVR_ATmega2560__) && !defined(__AVR_ATmega32U4__) && !defined(__SAM3X8E__) && !defined(__MK20DX256__) -#include -#endif - -#if !defined(PIN_LED) -#define PIN_LED 13 -#endif - -#define PIN_DSTAR 3 -#define PIN_DMR 4 -#define PIN_YSF 5 -#define PIN_P25 6 -#define PIN_NXDN 7 -#define PIN_POCSAG 8 - -#define PIN_TX 10 -#define PIN_CD 11 - -#define PIN_LOCKOUT 12 - -#if defined(__MK20DX256__) -#define FLASH_DELAY 200000U -#else -#define FLASH_DELAY 3200U -#endif - -#if !defined(__AVR_ATmega1280__) && !defined(__AVR_ATmega2560__) && !defined(__AVR_ATmega32U4__) && !defined(__SAM3X8E__) && !defined(__MK20DX256__) -AltSoftSerial mySerial; -#endif - -// Use the LOCKOUT function on the UMP -// #define USE_LOCKOUT - -void setup() -{ - Serial.begin(115200); - -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__) || defined(__SAM3X8E__) || defined(__MK20DX256__) - Serial1.begin(9600); -#else - mySerial.begin(9600); -#endif - - pinMode(PIN_LED, OUTPUT); - pinMode(PIN_DSTAR, OUTPUT); - pinMode(PIN_DMR, OUTPUT); - pinMode(PIN_YSF, OUTPUT); - pinMode(PIN_P25, OUTPUT); - pinMode(PIN_NXDN, OUTPUT); - pinMode(PIN_POCSAG, OUTPUT); - pinMode(PIN_TX, OUTPUT); - pinMode(PIN_CD, OUTPUT); - pinMode(PIN_LOCKOUT, INPUT); - - digitalWrite(PIN_DSTAR, LOW); - digitalWrite(PIN_DMR, LOW); - digitalWrite(PIN_YSF, LOW); - digitalWrite(PIN_P25, LOW); - digitalWrite(PIN_NXDN, LOW); - digitalWrite(PIN_POCSAG, LOW); - digitalWrite(PIN_TX, LOW); - digitalWrite(PIN_CD, LOW); -} - -#define UMP_FRAME_START 0xF0U - -#define UMP_HELLO 0x00U - -#define UMP_SET_MODE 0x01U -#define UMP_SET_TX 0x02U -#define UMP_SET_CD 0x03U - -#define UMP_WRITE_SERIAL 0x10U - -#define UMP_STATUS 0x50U - -#define MODE_IDLE 0U -#define MODE_DSTAR 1U -#define MODE_DMR 2U -#define MODE_YSF 3U -#define MODE_P25 4U -#define MODE_NXDN 5U -#define MODE_POCSAG 6U - -bool m_started = false; -uint32_t m_count = 0U; -bool m_led = false; - -uint8_t m_buffer[256U]; -uint8_t m_offset = 0U; -uint8_t m_length = 0U; - -bool m_lockout = false; - -void loop() -{ - while (Serial.available()) { - uint8_t c = Serial.read(); - - if (m_offset == 0U) { - if (c == UMP_FRAME_START) { - m_buffer[m_offset] = c; - m_offset = 1U; - } - } else if (m_offset == 1U) { - m_length = m_buffer[m_offset] = c; - m_offset = 2U; - } else { - m_buffer[m_offset] = c; - m_offset++; - - if (m_length == m_offset) { - switch (m_buffer[2U]) { - case UMP_HELLO: - m_started = true; - break; - case UMP_SET_MODE: - digitalWrite(PIN_DSTAR, m_buffer[3U] == MODE_DSTAR ? HIGH : LOW); - digitalWrite(PIN_DMR, m_buffer[3U] == MODE_DMR ? HIGH : LOW); - digitalWrite(PIN_YSF, m_buffer[3U] == MODE_YSF ? HIGH : LOW); - digitalWrite(PIN_P25, m_buffer[3U] == MODE_P25 ? HIGH : LOW); - digitalWrite(PIN_NXDN, m_buffer[3U] == MODE_NXDN ? HIGH : LOW); - digitalWrite(PIN_POCSAG, m_buffer[3U] == MODE_POCSAG ? HIGH : LOW); - break; - case UMP_SET_TX: - digitalWrite(PIN_TX, m_buffer[3U] == 0x01U ? HIGH : LOW); - break; - case UMP_SET_CD: - digitalWrite(PIN_CD, m_buffer[3U] == 0x01U ? HIGH : LOW); - break; - case UMP_WRITE_SERIAL: -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__) || defined(__SAM3X8E__) || defined(__MK20DX256__) - Serial1.write(m_buffer + 3U, m_length - 3U); -#else - mySerial.write(m_buffer + 3U, m_length - 3U); -#endif - break; - default: - break; - } - - m_length = 0U; - m_offset = 0U; - } - } - } - - bool lockout = false; -#if defined(USE_LOCKOUT) - lockout = digitalRead(PIN_LOCKOUT) == HIGH; -#endif - if (lockout != m_lockout) { - uint8_t data[4U]; - data[0U] = UMP_FRAME_START; - data[1U] = 4U; - data[2U] = UMP_STATUS; - data[3U] = lockout ? 0x01U : 0x00U; - Serial.write(data, 4U); - - m_lockout = lockout; - } - -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__) || defined(__SAM3X8E__) || defined(__MK20DX256__) - while (Serial1.available()) - Serial1.read(); -#else - while (mySerial.available()) - mySerial.read(); -#endif - - m_count++; - if (m_started) { - if (m_count > FLASH_DELAY) { - digitalWrite(PIN_LED, m_led ? LOW : HIGH); - m_led = !m_led; - m_count = 0U; - } - } else { - if (m_count > (FLASH_DELAY * 3U)) { - digitalWrite(PIN_LED, m_led ? LOW : HIGH); - m_led = !m_led; - m_count = 0U; - } - } -} diff --git a/UserDB.cpp b/UserDB.cpp new file mode 100644 index 000000000..f6c7e1aad --- /dev/null +++ b/UserDB.cpp @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2020 by SASANO Takayoshi JG1UAA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#include "UserDB.h" +#include "Log.h" + +#include +#include +#include + +CUserDB::CUserDB() : +m_table(), +m_mutex() +{ +} + +CUserDB::~CUserDB() +{ +} + +bool CUserDB::lookup(unsigned int id, class CUserDBentry *entry) +{ + bool rv; + + m_mutex.lock(); + + try { + if (entry != NULL) + *entry = m_table.at(id); + else + (void)m_table.at(id); + + rv = true; + } catch (...) { + rv = false; + } + + m_mutex.unlock(); + + return rv; +} + +bool CUserDB::load(std::string const& filename) +{ + LogInfo("Loading ID lookup table from %s", filename.c_str()); + + FILE* fp = ::fopen(filename.c_str(), "rt"); + if (fp == NULL) { + LogWarning("Cannot open ID lookup file - %s", filename.c_str()); + return false; + } + + m_mutex.lock(); + + // Remove the old entries; + m_table.clear(); + + // set index for entries + char buffer[256U]; + if (::fgets(buffer, sizeof(buffer), fp) == NULL) { + LogWarning("ID lookup file has no entry - %s", filename.c_str()); + m_mutex.unlock(); + ::fclose(fp); + return false; + } + + // no index - set default + std::unordered_map index; + if (!makeindex(buffer, index)) { + ::strncpy(buffer, keyRADIO_ID "," keyCALLSIGN "," keyFIRST_NAME, sizeof(buffer)); + makeindex(buffer, index); + ::rewind(fp); + } + + while (::fgets(buffer, sizeof(buffer), fp) != NULL) { + if (buffer[0U] != '#') + parse(buffer, index); + } + + ::fclose(fp); + + size_t size = m_table.size(); + m_mutex.unlock(); + + LogInfo("Loaded %u IDs to lookup table - %s", size, filename.c_str()); + + return size != 0U; +} + +bool CUserDB::makeindex(char* buf, std::unordered_map& index) +{ + int i; + char *p1, *p2; + + // Remove the old index + index.clear(); + + for (i = 0, p1 = tokenize(buf, &p2); p1 != NULL; + i++, p1 = tokenize(p2, &p2)) { + + // create [column keyword] - [column number] table + if (CUserDBentry::isValidKey(p1)) + index[p1] = i; + } + + try { + (void)index.at(keyRADIO_ID); + (void)index.at(keyCALLSIGN); + return true; + } catch (...) { + return false; + } +} + +void CUserDB::parse(char* buf, std::unordered_map& index) +{ + int i; + char *p1, *p2; + std::unordered_map ptr; + unsigned int id; + + for (i = 0, p1 = tokenize(buf, &p2); p1 != NULL; + i++, p1 = tokenize(p2, &p2)) { + + for (auto it = index.begin(); it != index.end(); it++) { + // first: column keyword, second: column number + if (it->second == i) { + ptr[it->first] = p1; + break; + } + } + } + + try { + (void)ptr.at(keyRADIO_ID); + (void)ptr.at(keyCALLSIGN); + } catch (...) { + return; + } + + id = (unsigned int)::atoi(ptr[keyRADIO_ID]); + toupper_string(ptr[keyCALLSIGN]); + + for (auto it = ptr.begin(); it != ptr.end(); it++) { + // no need to regist radio ID + if (it->first == keyRADIO_ID) + continue; + + m_table[id].set(it->first, it->second); + } +} + +void CUserDB::toupper_string(char* str) +{ + while (*str != '\0') { + *str = ::toupper(*str); + str++; + } +} + +char* CUserDB::tokenize(char* str, char** next) +{ + if (*str == '\0') + return NULL; + + char* p = ::strpbrk(str, ",\t\r\n"); + if (p == NULL) { + *next = str + ::strlen(str); + } else { + *p = '\0'; + *next = p + 1; + } + + return str; +} diff --git a/UserDB.h b/UserDB.h new file mode 100644 index 000000000..acae10342 --- /dev/null +++ b/UserDB.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2020 by SASANO Takayoshi JG1UAA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(USERDB_H) +#define USERDB_H + +#include "UserDBentry.h" +#include "Mutex.h" + +class CUserDB { +public: + CUserDB(); + ~CUserDB(); + + bool lookup(unsigned int id, class CUserDBentry *entry); + bool load(std::string const& filename); + +private: + bool makeindex(char* buf, std::unordered_map& index); + void parse(char* buf, std::unordered_map& index); + void toupper_string(char* str); + char* tokenize(char* str, char** next); + + std::unordered_map m_table; + CMutex m_mutex; +}; + +#endif diff --git a/UserDBentry.cpp b/UserDBentry.cpp new file mode 100644 index 000000000..012154479 --- /dev/null +++ b/UserDBentry.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2020 by SASANO Takayoshi JG1UAA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#include "UserDBentry.h" +#include + +CUserDBentry::CUserDBentry() : +m_db() +{ +} + +CUserDBentry::~CUserDBentry() +{ +} + +const std::vector CUserDBentry::keyList { + keyRADIO_ID, keyCALLSIGN, keyFIRST_NAME, keyLAST_NAME, + keyCITY, keySTATE, keyCOUNTRY, +}; + +bool CUserDBentry::isValidKey(const std::string key) +{ + auto it = std::find(keyList.begin(), keyList.end(), key); + return it != keyList.end(); +} + +void CUserDBentry::set(const std::string key, const std::string value) +{ + if (!value.empty() && isValidKey(key)) + m_db[key] = value; +} + +const std::string CUserDBentry::get(const std::string key) const +{ + try { + return m_db.at(key); + } catch (...) { + return ""; + } +} + +void CUserDBentry::clear(void) +{ + m_db.clear(); +} diff --git a/UserDBentry.h b/UserDBentry.h new file mode 100644 index 000000000..cbca92f79 --- /dev/null +++ b/UserDBentry.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020 by SASANO Takayoshi JG1UAA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(USERDBENTRY_H) +#define USERDBENTRY_H + +#include +#include +#include + +#define keyRADIO_ID "RADIO_ID" +#define keyCALLSIGN "CALLSIGN" +#define keyFIRST_NAME "FIRST_NAME" +#define keyLAST_NAME "LAST_NAME" +#define keyCITY "CITY" +#define keySTATE "STATE" +#define keyCOUNTRY "COUNTRY" + +class CUserDBentry { +public: + CUserDBentry(); + ~CUserDBentry(); + + static const std::vector keyList; + static bool isValidKey(const std::string key); + + void set(const std::string key, const std::string value); + const std::string get(const std::string key) const; + void clear(void); + +private: + std::unordered_map m_db; +}; + +#endif diff --git a/Utils.cpp b/Utils.cpp index 9bd8a06c5..091ebf870 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009,2014,2015,2016 Jonathan Naylor, G4KLX + * Copyright (C) 2009,2014,2015,2016,2021 Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -145,21 +145,28 @@ void CUtils::bitsToByteLE(const bool* bits, unsigned char& byte) byte |= bits[7U] ? 0x80U : 0x00U; } -unsigned int CUtils::compare(const unsigned char* bytes1, const unsigned char* bytes2, unsigned int length) +unsigned int CUtils::countBits(unsigned int v) { - assert(bytes1 != NULL); - assert(bytes2 != NULL); + unsigned int count = 0U; - unsigned int diffs = 0U; - - for (unsigned int i = 0U; i < length; i++) { - unsigned char v = bytes1[i] ^ bytes2[i]; - while (v != 0U) { - v &= v - 1U; - diffs++; - } + while (v != 0U) { + v &= v - 1U; + count++; } - return diffs; + return count; } +void CUtils::removeChar(unsigned char * haystack, char needdle) +{ + unsigned int i = 0; + unsigned int j = 0; + + while (haystack[i] != '\0') { + if (haystack[i] != needdle) + haystack[j++] = haystack[i]; + i++; + } + + haystack[j] = '\0'; +} diff --git a/Utils.h b/Utils.h index 96a2d2c9a..1e2ee9e59 100644 --- a/Utils.h +++ b/Utils.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009,2014,2015 by Jonathan Naylor, G4KLX + * Copyright (C) 2009,2014,2015,2021 by Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,7 +30,9 @@ class CUtils { static void bitsToByteBE(const bool* bits, unsigned char& byte); static void bitsToByteLE(const bool* bits, unsigned char& byte); - static unsigned int compare(const unsigned char* bytes1, const unsigned char* bytes2, unsigned int length); + static unsigned int countBits(unsigned int v); + + static void removeChar(unsigned char * haystack, char needdle); private: }; diff --git a/Version.h b/Version.h index ee89f80b0..2d9289c41 100644 --- a/Version.h +++ b/Version.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2023 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20180916"; +const char* VERSION = "20231206"; #endif diff --git a/YSFControl.cpp b/YSFControl.cpp index 79237a061..6467a922f 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -1,1320 +1,1229 @@ -/* - * Copyright (C) 2015,2016,2017,2018 Jonathan Naylor, G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "YSFControl.h" -#include "Utils.h" -#include "Sync.h" -#include "Log.h" - -#include -#include -#include -#include - -// #define DUMP_YSF - -CYSFControl::CYSFControl(const std::string& callsign, bool selfOnly, CYSFNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool lowDeviation, bool remoteGateway, CRSSIInterpolator* rssiMapper) : -m_callsign(NULL), -m_selfCallsign(NULL), -m_selfOnly(selfOnly), -m_network(network), -m_display(display), -m_duplex(duplex), -m_lowDeviation(lowDeviation), -m_remoteGateway(remoteGateway), -m_sqlEnabled(false), -m_sqlValue(0U), -m_queue(5000U, "YSF Control"), -m_rfState(RS_RF_LISTENING), -m_netState(RS_NET_IDLE), -m_rfTimeoutTimer(1000U, timeout), -m_netTimeoutTimer(1000U, timeout), -m_packetTimer(1000U, 0U, 200U), -m_networkWatchdog(1000U, 0U, 1500U), -m_elapsed(), -m_rfFrames(0U), -m_netFrames(0U), -m_netLost(0U), -m_rfErrs(0U), -m_rfBits(1U), -m_netErrs(0U), -m_netBits(1U), -m_rfSource(NULL), -m_rfDest(NULL), -m_netSource(NULL), -m_netDest(NULL), -m_lastFICH(), -m_netN(0U), -m_rfPayload(), -m_netPayload(), -m_rssiMapper(rssiMapper), -m_rssi(0U), -m_maxRSSI(0U), -m_minRSSI(0U), -m_aveRSSI(0U), -m_rssiCount(0U), -m_fp(NULL) -{ - assert(display != NULL); - assert(rssiMapper != NULL); - - m_rfPayload.setUplink(callsign); - m_rfPayload.setDownlink(callsign); - - m_netPayload.setDownlink(callsign); - - m_netSource = new unsigned char[YSF_CALLSIGN_LENGTH]; - m_netDest = new unsigned char[YSF_CALLSIGN_LENGTH]; - - m_callsign = new unsigned char[YSF_CALLSIGN_LENGTH]; - - std::string node = callsign; - node.resize(YSF_CALLSIGN_LENGTH, ' '); - - for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) - m_callsign[i] = node.at(i); - - m_selfCallsign = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memset(m_selfCallsign, 0x00U, YSF_CALLSIGN_LENGTH); - - for (unsigned int i = 0U; i < callsign.length(); i++) - m_selfCallsign[i] = callsign.at(i); -} - -CYSFControl::~CYSFControl() -{ - delete[] m_netSource; - delete[] m_netDest; - delete[] m_callsign; - delete[] m_selfCallsign; -} - -void CYSFControl::setSQL(bool on, unsigned char value) -{ - m_sqlEnabled = on; - m_sqlValue = value; -} - -bool CYSFControl::writeModem(unsigned char *data, unsigned int len) -{ - assert(data != NULL); - - unsigned char type = data[0U]; - - if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) { - if (m_rssi != 0U) - LogMessage("YSF, transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); - else - LogMessage("YSF, transmission lost, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits)); - writeEndRF(); - return false; - } - - if (type == TAG_LOST && m_rfState == RS_RF_REJECTED) { - m_rfPayload.reset(); - m_rfSource = NULL; - m_rfDest = NULL; - m_rfState = RS_RF_LISTENING; - return false; - } - - if (type == TAG_LOST) { - m_rfPayload.reset(); - m_rfState = RS_RF_LISTENING; - return false; - } - - // Have we got RSSI bytes on the end? - if (len == (YSF_FRAME_LENGTH_BYTES + 4U)) { - uint16_t raw = 0U; - raw |= (data[122U] << 8) & 0xFF00U; - raw |= (data[123U] << 0) & 0x00FFU; - - // Convert the raw RSSI to dBm - int rssi = m_rssiMapper->interpolate(raw); - if (rssi != 0) - LogDebug("YSF, raw RSSI: %u, reported RSSI: %d dBm", raw, rssi); - - // RSSI is always reported as positive - m_rssi = (rssi >= 0) ? rssi : -rssi; - - if (m_rssi > m_minRSSI) - m_minRSSI = m_rssi; - if (m_rssi < m_maxRSSI) - m_maxRSSI = m_rssi; - - m_aveRSSI += m_rssi; - m_rssiCount++; - } - - CYSFFICH fich; - bool valid = fich.decode(data + 2U); - - if (valid) - m_lastFICH = fich; - - // Validate the DSQ/DG-ID value if enabled - if (m_sqlEnabled) { - unsigned char cm = m_lastFICH.getCM(); - if (cm == YSF_CM_GROUP2) { - // Using the DG-ID value - unsigned char value = m_lastFICH.getSQ(); - - if (value != m_sqlValue) - return false; - } else { - // Using the DSQ value - bool sql = m_lastFICH.getSQL(); - unsigned char value = m_lastFICH.getSQ(); - - if (!sql || value != m_sqlValue) - return false; - } - } - -#ifdef notdef - // Stop repeater packets coming through, unless we're acting as a remote gateway - if (m_remoteGateway) { - unsigned char mr = m_lastFICH.getMR(); - if (mr != YSF_MR_BUSY) - return false; - } else { - unsigned char mr = m_lastFICH.getMR(); - if (mr == YSF_MR_BUSY) - return false; - } -#endif - - unsigned char dt = m_lastFICH.getDT(); - - bool ret = false; - switch (dt) { - case YSF_DT_VOICE_FR_MODE: - ret = processVWData(valid, data); - break; - - case YSF_DT_VD_MODE1: - case YSF_DT_VD_MODE2: - ret = processDNData(valid, data); - break; - - case YSF_DT_DATA_FR_MODE: - ret = processFRData(valid, data); - break; - - default: - break; - } - - return ret; -} - -bool CYSFControl::processVWData(bool valid, unsigned char *data) -{ - unsigned char fi = m_lastFICH.getFI(); - if (valid && fi == YSF_FI_HEADER) { - if (m_rfState == RS_RF_LISTENING) { - bool valid = m_rfPayload.processHeaderData(data + 2U); - if (!valid) - return false; - - m_rfSource = m_rfPayload.getSource(); - - if (m_selfOnly) { - bool ret = checkCallsign(m_rfSource); - if (!ret) { - LogMessage("YSF, invalid access attempt from %10.10s", m_rfSource); - m_rfState = RS_RF_REJECTED; - return false; - } - } - - unsigned char cm = m_lastFICH.getCM(); - if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) - m_rfDest = (unsigned char*)"ALL "; - else - m_rfDest = m_rfPayload.getDest(); - - m_rfFrames = 0U; - m_rfErrs = 0U; - m_rfBits = 1U; - m_rfTimeoutTimer.start(); - m_rfState = RS_RF_AUDIO; - - m_minRSSI = m_rssi; - m_maxRSSI = m_rssi; - m_aveRSSI = m_rssi; - m_rssiCount = 1U; -#if defined(DUMP_YSF) - openFile(); -#endif - - m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " "); - LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest); - - CSync::addYSFSync(data + 2U); - - CYSFFICH fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_DATA; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - - m_rfFrames++; - - m_display->writeFusionRSSI(m_rssi); - - return true; - } - } else if (valid && fi == YSF_FI_TERMINATOR) { - if (m_rfState == RS_RF_REJECTED) { - m_rfPayload.reset(); - m_rfSource = NULL; - m_rfDest = NULL; - m_rfState = RS_RF_LISTENING; - } else if (m_rfState == RS_RF_AUDIO) { - m_rfPayload.processHeaderData(data + 2U); - - CSync::addYSFSync(data + 2U); - - CYSFFICH fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_EOT; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - - m_rfFrames++; - - if (m_rssi != 0U) - LogMessage("YSF, received RF end of transmission, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); - else - LogMessage("YSF, received RF end of transmission, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits)); - - writeEndRF(); - } - } else { - if (m_rfState == RS_RF_AUDIO) { - // If valid is false, update the m_lastFICH for this transmission - if (!valid) { - // XXX Check these values - m_lastFICH.setFT(0U); - m_lastFICH.setFN(0U); - } - - CSync::addYSFSync(data + 2U); - - CYSFFICH fich = m_lastFICH; - - unsigned char fn = fich.getFN(); - unsigned char ft = fich.getFT(); - - if (fn != 0U || ft != 1U) { - // The first packet after the header is odd, don't try and regenerate it - unsigned int errors = m_rfPayload.processVoiceFRModeAudio(data + 2U); - m_rfErrs += errors; - m_rfBits += 720U; - m_display->writeFusionBER(float(errors) / 7.2F); - LogDebug("YSF, V Mode 3, seq %u, AMBE FEC %u/720 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 7.2F); - } - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_DATA; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - m_rfFrames++; - - m_display->writeFusionRSSI(m_rssi); - - return true; - } - } - - return false; -} - -bool CYSFControl::processDNData(bool valid, unsigned char *data) -{ - unsigned char fi = m_lastFICH.getFI(); - if (valid && fi == YSF_FI_HEADER) { - if (m_rfState == RS_RF_LISTENING) { - bool valid = m_rfPayload.processHeaderData(data + 2U); - if (!valid) - return false; - - m_rfSource = m_rfPayload.getSource(); - - if (m_selfOnly) { - bool ret = checkCallsign(m_rfSource); - if (!ret) { - LogMessage("YSF, invalid access attempt from %10.10s", m_rfSource); - m_rfState = RS_RF_REJECTED; - return false; - } - } - - unsigned char cm = m_lastFICH.getCM(); - if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) - m_rfDest = (unsigned char*)"ALL "; - else - m_rfDest = m_rfPayload.getDest(); - - m_rfFrames = 0U; - m_rfErrs = 0U; - m_rfBits = 1U; - m_rfTimeoutTimer.start(); - m_rfState = RS_RF_AUDIO; - - m_minRSSI = m_rssi; - m_maxRSSI = m_rssi; - m_aveRSSI = m_rssi; - m_rssiCount = 1U; -#if defined(DUMP_YSF) - openFile(); -#endif - - m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " "); - LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest); - - CSync::addYSFSync(data + 2U); - - CYSFFICH fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_DATA; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - - m_rfFrames++; - - m_display->writeFusionRSSI(m_rssi); - - return true; - } - } else if (valid && fi == YSF_FI_TERMINATOR) { - if (m_rfState == RS_RF_REJECTED) { - m_rfPayload.reset(); - m_rfSource = NULL; - m_rfDest = NULL; - m_rfState = RS_RF_LISTENING; - } else if (m_rfState == RS_RF_AUDIO) { - m_rfPayload.processHeaderData(data + 2U); - - CSync::addYSFSync(data + 2U); - - CYSFFICH fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_EOT; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - - m_rfFrames++; - - if (m_rssi != 0U) - LogMessage("YSF, received RF end of transmission, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); - else - LogMessage("YSF, received RF end of transmission, %.1f seconds, BER: %.1f%%", float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits)); - - writeEndRF(); - } - } else { - if (m_rfState == RS_RF_AUDIO) { - // If valid is false, update the m_lastFICH for this transmission - if (!valid) { - unsigned char ft = m_lastFICH.getFT(); - unsigned char fn = m_lastFICH.getFN() + 1U; - - if (fn > ft) - fn = 0U; - - m_lastFICH.setFN(fn); - } - - CSync::addYSFSync(data + 2U); - - unsigned char fn = m_lastFICH.getFN(); - unsigned char dt = m_lastFICH.getDT(); - - switch (dt) { - case YSF_DT_VD_MODE1: { - m_rfPayload.processVDMode1Data(data + 2U, fn); - unsigned int errors = m_rfPayload.processVDMode1Audio(data + 2U); - m_rfErrs += errors; - m_rfBits += 235U; - m_display->writeFusionBER(float(errors) / 2.35F); - LogDebug("YSF, V/D Mode 1, seq %u, AMBE FEC %u/235 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 2.35F); - } - break; - - case YSF_DT_VD_MODE2: { - m_rfPayload.processVDMode2Data(data + 2U, fn); - unsigned int errors = m_rfPayload.processVDMode2Audio(data + 2U); - m_rfErrs += errors; - m_rfBits += 135U; - m_display->writeFusionBER(float(errors) / 1.35F); - LogDebug("YSF, V/D Mode 2, seq %u, Repetition FEC %u/135 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 1.35F); - } - break; - - default: - break; - } - - CYSFFICH fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_DATA; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - m_rfFrames++; - - m_display->writeFusionRSSI(m_rssi); - - return true; - } else if (valid && m_rfState == RS_RF_LISTENING) { - // Only use clean frames for late entry. - unsigned char fn = m_lastFICH.getFN(); - unsigned char dt = m_lastFICH.getDT(); - - switch (dt) { - case YSF_DT_VD_MODE1: - valid = m_rfPayload.processVDMode1Data(data + 2U, fn); - break; - - case YSF_DT_VD_MODE2: - valid = m_rfPayload.processVDMode2Data(data + 2U, fn); - break; - - default: - valid = false; - break; - } - - if (!valid) - return false; - - unsigned char cm = m_lastFICH.getCM(); - if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) - m_rfDest = (unsigned char*)"ALL "; - else - m_rfDest = m_rfPayload.getDest(); - - m_rfSource = m_rfPayload.getSource(); - - if (m_rfSource == NULL || m_rfDest == NULL) - return false; - - if (m_selfOnly) { - bool ret = checkCallsign(m_rfSource); - if (!ret) { - LogMessage("YSF, invalid access attempt from %10.10s", m_rfSource); - m_rfState = RS_RF_REJECTED; - return false; - } - } - - m_rfFrames = 0U; - m_rfErrs = 0U; - m_rfBits = 1U; - m_rfTimeoutTimer.start(); - m_rfState = RS_RF_AUDIO; - - m_minRSSI = m_rssi; - m_maxRSSI = m_rssi; - m_aveRSSI = m_rssi; - m_rssiCount = 1U; -#if defined(DUMP_YSF) - openFile(); -#endif - - // Build a new header and transmit it - unsigned char buffer[YSF_FRAME_LENGTH_BYTES + 2U]; - - CSync::addYSFSync(buffer + 2U); - - CYSFFICH fich = m_lastFICH; - fich.setFI(YSF_FI_HEADER); - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(buffer + 2U); - - unsigned char csd1[20U], csd2[20U]; - memcpy(csd1 + YSF_CALLSIGN_LENGTH, m_rfSource, YSF_CALLSIGN_LENGTH); - memset(csd2, ' ', YSF_CALLSIGN_LENGTH + YSF_CALLSIGN_LENGTH); - - if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) - memset(csd1 + 0U, '*', YSF_CALLSIGN_LENGTH); - else - memcpy(csd1 + 0U, m_rfDest, YSF_CALLSIGN_LENGTH); - - CYSFPayload payload; - payload.writeHeader(buffer + 2U, csd1, csd2); - - buffer[0U] = TAG_DATA; - buffer[1U] = 0x00U; - - writeNetwork(buffer, m_rfFrames % 128U); - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(buffer + 2U); - writeQueueRF(buffer); - } - -#if defined(DUMP_YSF) - writeFile(buffer + 2U); -#endif - - m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " "); - LogMessage("YSF, received RF late entry from %10.10s to %10.10s", m_rfSource, m_rfDest); - - CSync::addYSFSync(data + 2U); - - fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_DATA; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - m_rfFrames++; - - m_display->writeFusionRSSI(m_rssi); - - return true; - } - } - - return false; -} - -bool CYSFControl::processFRData(bool valid, unsigned char *data) -{ - unsigned char fi = m_lastFICH.getFI(); - if (valid && fi == YSF_FI_HEADER) { - if (m_rfState == RS_RF_LISTENING) { - valid = m_rfPayload.processHeaderData(data + 2U); - if (!valid) - return false; - - m_rfSource = m_rfPayload.getSource(); - - if (m_selfOnly) { - bool ret = checkCallsign(m_rfSource); - if (!ret) { - LogMessage("YSF, invalid access attempt from %10.10s", m_rfSource); - m_rfState = RS_RF_REJECTED; - return false; - } - } - - unsigned char cm = m_lastFICH.getCM(); - if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) - m_rfDest = (unsigned char*)"ALL "; - else - m_rfDest = m_rfPayload.getDest(); - - m_rfFrames = 0U; - m_rfState = RS_RF_DATA; - - m_minRSSI = m_rssi; - m_maxRSSI = m_rssi; - m_aveRSSI = m_rssi; - m_rssiCount = 1U; -#if defined(DUMP_YSF) - openFile(); -#endif - - m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, "R", " "); - LogMessage("YSF, received RF header from %10.10s to %10.10s", m_rfSource, m_rfDest); - - CSync::addYSFSync(data + 2U); - - CYSFFICH fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_DATA; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - - m_rfFrames++; - - m_display->writeFusionRSSI(m_rssi); - - return true; - } - } else if (valid && fi == YSF_FI_TERMINATOR) { - if (m_rfState == RS_RF_REJECTED) { - m_rfPayload.reset(); - m_rfSource = NULL; - m_rfDest = NULL; - m_rfState = RS_RF_LISTENING; - } else if (m_rfState == RS_RF_DATA) { - m_rfPayload.processHeaderData(data + 2U); - - CSync::addYSFSync(data + 2U); - - CYSFFICH fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_EOT; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - - m_rfFrames++; - - if (m_rssi != 0U) - LogMessage("YSF, received RF end of transmission, %.1f seconds, RSSI: -%u/-%u/-%u dBm", float(m_rfFrames) / 10.0F, m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); - else - LogMessage("YSF, received RF end of transmission, %.1f seconds", float(m_rfFrames) / 10.0F); - - writeEndRF(); - } - } else { - if (m_rfState == RS_RF_DATA) { - // If valid is false, update the m_lastFICH for this transmission - if (!valid) { - unsigned char ft = m_lastFICH.getFT(); - unsigned char fn = m_lastFICH.getFN() + 1U; - - if (fn > ft) - fn = 0U; - - m_lastFICH.setFN(fn); - } - - CSync::addYSFSync(data + 2U); - - unsigned char fn = m_lastFICH.getFN(); - - m_rfPayload.processDataFRModeData(data + 2U, fn); - - CYSFFICH fich = m_lastFICH; - - // Remove any DSQ/DG-ID information - fich.setSQL(false); - fich.setSQ(0U); - fich.encode(data + 2U); - - data[0U] = TAG_DATA; - data[1U] = 0x00U; - - writeNetwork(data, m_rfFrames % 128U); - - if (m_duplex) { - // Add the DSQ/DG-ID information. - unsigned char cm = fich.getCM(); - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); - fich.setDev(m_lowDeviation); - fich.encode(data + 2U); - writeQueueRF(data); - } - -#if defined(DUMP_YSF) - writeFile(data + 2U); -#endif - - m_rfFrames++; - - m_display->writeFusionRSSI(m_rssi); - - return true; - } - } - - return false; -} - -unsigned int CYSFControl::readModem(unsigned char* data) -{ - assert(data != NULL); - - if (m_queue.isEmpty()) - return 0U; - - unsigned char len = 0U; - m_queue.getData(&len, 1U); - - m_queue.getData(data, len); - - return len; -} - -void CYSFControl::writeEndRF() -{ - m_rfState = RS_RF_LISTENING; - - m_rfTimeoutTimer.stop(); - m_rfPayload.reset(); - - // These variables are free'd by YSFPayload - m_rfSource = NULL; - m_rfDest = NULL; - - if (m_netState == RS_NET_IDLE) { - m_display->clearFusion(); - - if (m_network != NULL) - m_network->reset(); - } - -#if defined(DUMP_YSF) - closeFile(); -#endif -} - -void CYSFControl::writeEndNet() -{ - m_netState = RS_NET_IDLE; - - m_netTimeoutTimer.stop(); - m_networkWatchdog.stop(); - m_packetTimer.stop(); - - m_netPayload.reset(); - - m_display->clearFusion(); - - if (m_network != NULL) - m_network->reset(); -} - -void CYSFControl::writeNetwork() -{ - unsigned char data[200U]; - unsigned int length = m_network->read(data); - if (length == 0U) - return; - - if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) - return; - - m_networkWatchdog.start(); - - bool gateway = ::memcmp(data + 4U, m_callsign, YSF_CALLSIGN_LENGTH) == 0; - - unsigned char n = (data[34U] & 0xFEU) >> 1; - bool end = (data[34U] & 0x01U) == 0x01U; - - if (!m_netTimeoutTimer.isRunning()) { - if (end) - return; - - ::memcpy(m_netSource, data + 14U, YSF_CALLSIGN_LENGTH); - ::memcpy(m_netDest, data + 24U, YSF_CALLSIGN_LENGTH); - - if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) { - m_display->writeFusion((char*)m_netSource, (char*)m_netDest, "N", (char*)(data + 4U)); - LogMessage("YSF, received network data from %10.10s to %10.10s at %10.10s", m_netSource, m_netDest, data + 4U); - } - - m_netTimeoutTimer.start(); - m_netPayload.reset(); - m_packetTimer.start(); - m_elapsed.start(); - m_netState = RS_NET_AUDIO; - m_netFrames = 0U; - m_netLost = 0U; - m_netErrs = 0U; - m_netBits = 1U; - m_netN = 0U; - } else { - // Check for duplicate frames, if we can - if (m_netN == n) - return; - } - - data[33U] = end ? TAG_EOT : TAG_DATA; - data[34U] = 0x00U; - - CYSFFICH fich; - bool valid = fich.decode(data + 35U); - if (valid) { - unsigned char dt = fich.getDT(); - unsigned char fn = fich.getFN(); - unsigned char ft = fich.getFT(); - unsigned char fi = fich.getFI(); - unsigned char cm = fich.getCM(); - - if (::memcmp(m_netDest, " ", YSF_CALLSIGN_LENGTH) == 0) { - if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) - ::memcpy(m_netDest, "ALL ", YSF_CALLSIGN_LENGTH); - } - - // Add any DSQ/DG-ID information - if (cm == YSF_CM_GROUP2) - fich.setSQL(false); - else - fich.setSQL(m_sqlEnabled); - fich.setSQ(m_sqlValue); - - if (m_remoteGateway) { - fich.setVoIP(false); - fich.setMR(YSF_MR_DIRECT); - } else { - fich.setVoIP(true); - fich.setMR(YSF_MR_BUSY); - } - - fich.setDev(m_lowDeviation); - fich.encode(data + 35U); - - // Set the downlink callsign - switch (fi) { - case YSF_FI_HEADER: { - bool ok = m_netPayload.processHeaderData(data + 35U); - if (ok) - processNetCallsigns(data); - } - break; - - case YSF_FI_TERMINATOR: - m_netPayload.processHeaderData(data + 35U); - break; - - case YSF_FI_COMMUNICATIONS: - switch (dt) { - case YSF_DT_VD_MODE1: { - bool ok = m_netPayload.processVDMode1Data(data + 35U, fn, gateway); - if (ok) - processNetCallsigns(data); - - unsigned int errors = m_netPayload.processVDMode1Audio(data + 35U); - m_netErrs += errors; - m_netBits += 235U; - } - break; - - case YSF_DT_VD_MODE2: { - bool ok = m_netPayload.processVDMode2Data(data + 35U, fn, gateway); - if (ok) - processNetCallsigns(data); - - unsigned int errors = m_netPayload.processVDMode2Audio(data + 35U); - m_netErrs += errors; - m_netBits += 135U; - } - break; - - case YSF_DT_DATA_FR_MODE: - m_netPayload.processDataFRModeData(data + 35U, fn, gateway); - break; - - case YSF_DT_VOICE_FR_MODE: - if (fn != 0U || ft != 1U) { - // The first packet after the header is odd, don't try and regenerate it - unsigned int errors = m_netPayload.processVoiceFRModeAudio(data + 35U); - m_netErrs += errors; - m_netBits += 720U; - } - break; - - default: - break; - } - break; - - default: - break; - } - } - - writeQueueNet(data + 33U); - - m_packetTimer.start(); - m_netFrames++; - m_netN = n; - - if (end) { - LogMessage("YSF, received network end of transmission, %.1f seconds, %u%% packet loss, BER: %.1f%%", float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); - writeEndNet(); - } -} - -void CYSFControl::clock(unsigned int ms) -{ - if (m_network != NULL) - writeNetwork(); - - m_rfTimeoutTimer.clock(ms); - m_netTimeoutTimer.clock(ms); - - if (m_netState == RS_NET_AUDIO) { - m_networkWatchdog.clock(ms); - - if (m_networkWatchdog.hasExpired()) { - LogMessage("YSF, network watchdog has expired, %.1f seconds, %u%% packet loss, BER: %.1f%%", float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); - writeEndNet(); - } - } -} - -void CYSFControl::writeQueueRF(const unsigned char *data) -{ - assert(data != NULL); - - if (m_netState != RS_NET_IDLE) - return; - - if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) - return; - - unsigned char len = YSF_FRAME_LENGTH_BYTES + 2U; - - unsigned int space = m_queue.freeSpace(); - if (space < (len + 1U)) { - LogError("YSF, overflow in the System Fusion RF queue"); - return; - } - - m_queue.addData(&len, 1U); - - m_queue.addData(data, len); -} - -void CYSFControl::writeQueueNet(const unsigned char *data) -{ - assert(data != NULL); - - if (m_netTimeoutTimer.isRunning() && m_netTimeoutTimer.hasExpired()) - return; - - unsigned char len = YSF_FRAME_LENGTH_BYTES + 2U; - - unsigned int space = m_queue.freeSpace(); - if (space < (len + 1U)) { - LogError("YSF, overflow in the System Fusion RF queue"); - return; - } - - m_queue.addData(&len, 1U); - - m_queue.addData(data, len); -} - -void CYSFControl::writeNetwork(const unsigned char *data, unsigned int count) -{ - assert(data != NULL); - - if (m_network == NULL) - return; - - if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) - return; - - m_network->write(m_rfSource, m_rfDest, data + 2U, count, data[0U] == TAG_EOT); -} - -bool CYSFControl::openFile() -{ - if (m_fp != NULL) - return true; - - time_t t; - ::time(&t); - - struct tm* tm = ::localtime(&t); - - char name[100U]; - ::sprintf(name, "YSF_%04d%02d%02d_%02d%02d%02d.ambe", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); - - m_fp = ::fopen(name, "wb"); - if (m_fp == NULL) - return false; - - ::fwrite("YSF", 1U, 3U, m_fp); - - return true; -} - -bool CYSFControl::writeFile(const unsigned char* data) -{ - if (m_fp == NULL) - return false; - - ::fwrite(data, 1U, YSF_FRAME_LENGTH_BYTES, m_fp); - - return true; -} - -void CYSFControl::closeFile() -{ - if (m_fp != NULL) { - ::fclose(m_fp); - m_fp = NULL; - } -} - -bool CYSFControl::checkCallsign(const unsigned char* callsign) const -{ - return ::memcmp(callsign, m_selfCallsign, ::strlen((char*)m_selfCallsign)) == 0; -} - -void CYSFControl::processNetCallsigns(const unsigned char* data) -{ - assert(data != NULL); - - if (::memcmp(m_netSource, " ", 10U) == 0 || ::memcmp(m_netDest, " ", 10U) == 0) { - if (::memcmp(m_netSource, " ", YSF_CALLSIGN_LENGTH) == 0) { - unsigned char* source = m_netPayload.getSource(); - if (source != NULL) - ::memcpy(m_netSource, source, YSF_CALLSIGN_LENGTH); - } - - if (::memcmp(m_netDest, " ", YSF_CALLSIGN_LENGTH) == 0) { - unsigned char* dest = m_netPayload.getDest(); - if (dest != NULL) - ::memcpy(m_netDest, dest, YSF_CALLSIGN_LENGTH); - } - - if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) { - m_display->writeFusion((char*)m_netSource, (char*)m_netDest, "N", (char*)(data + 4U)); - LogMessage("YSF, received network data from %10.10s to %10.10s at %10.10s", m_netSource, m_netDest, data + 4U); - } - } -} +/* + * Copyright (C) 2015-2021 Jonathan Naylor, G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "YSFControl.h" +#include "Utils.h" +#include "Sync.h" +#include "Log.h" + +#include +#include +#include +#include + +// #define DUMP_YSF + +CYSFControl::CYSFControl(const std::string& callsign, bool selfOnly, CYSFNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool lowDeviation, bool remoteGateway, CRSSIInterpolator* rssiMapper) : +m_callsign(NULL), +m_selfCallsign(NULL), +m_selfOnly(selfOnly), +m_network(network), +m_display(display), +m_duplex(duplex), +m_lowDeviation(lowDeviation), +m_remoteGateway(remoteGateway), +m_queue(5000U, "YSF Control"), +m_rfState(RS_RF_LISTENING), +m_netState(RS_NET_IDLE), +m_rfTimeoutTimer(1000U, timeout), +m_netTimeoutTimer(1000U, timeout), +m_packetTimer(1000U, 0U, 200U), +m_networkWatchdog(1000U, 0U, 1500U), +m_elapsed(), +m_rfFrames(0U), +m_netFrames(0U), +m_netLost(0U), +m_rfErrs(0U), +m_rfBits(1U), +m_netErrs(0U), +m_netBits(1U), +m_rfSource(NULL), +m_rfDest(NULL), +m_netSource(NULL), +m_netDest(NULL), +m_lastFICH(), +m_netN(0U), +m_rfPayload(), +m_netPayload(), +m_rssiMapper(rssiMapper), +m_rssi(0U), +m_maxRSSI(0U), +m_minRSSI(0U), +m_aveRSSI(0U), +m_rssiCount(0U), +m_enabled(true), +m_fp(NULL) +{ + assert(display != NULL); + assert(rssiMapper != NULL); + + m_rfPayload.setUplink(callsign); + m_rfPayload.setDownlink(callsign); + + m_netPayload.setDownlink(callsign); + + m_netSource = new unsigned char[YSF_CALLSIGN_LENGTH]; + m_netDest = new unsigned char[YSF_CALLSIGN_LENGTH]; + + m_callsign = new unsigned char[YSF_CALLSIGN_LENGTH]; + + std::string node = callsign; + node.resize(YSF_CALLSIGN_LENGTH, ' '); + + for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) + m_callsign[i] = node.at(i); + + m_selfCallsign = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memset(m_selfCallsign, 0x00U, YSF_CALLSIGN_LENGTH); + + for (unsigned int i = 0U; i < callsign.length(); i++) + m_selfCallsign[i] = callsign.at(i); +} + +CYSFControl::~CYSFControl() +{ + delete[] m_netSource; + delete[] m_netDest; + delete[] m_callsign; + delete[] m_selfCallsign; +} + +bool CYSFControl::writeModem(unsigned char *data, unsigned int len) +{ + assert(data != NULL); + + if (!m_enabled) + return false; + + unsigned char type = data[0U]; + + if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) { + if (m_rssi != 0U) + LogMessage("YSF, transmission lost from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + else + LogMessage("YSF, transmission lost from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits)); + writeEndRF(); + return false; + } + + if (type == TAG_LOST && m_rfState == RS_RF_REJECTED) { + m_rfPayload.reset(); + m_rfSource = NULL; + m_rfDest = NULL; + m_rfState = RS_RF_LISTENING; + return false; + } + + if (type == TAG_LOST) { + m_rfPayload.reset(); + m_rfState = RS_RF_LISTENING; + return false; + } + + // Have we got RSSI bytes on the end? + if (len == (YSF_FRAME_LENGTH_BYTES + 4U)) { + uint16_t raw = 0U; + raw |= (data[122U] << 8) & 0xFF00U; + raw |= (data[123U] << 0) & 0x00FFU; + + // Convert the raw RSSI to dBm + int rssi = m_rssiMapper->interpolate(raw); + if (rssi != 0) + LogDebug("YSF, raw RSSI: %u, reported RSSI: %d dBm", raw, rssi); + + // RSSI is always reported as positive + m_rssi = (rssi >= 0) ? rssi : -rssi; + + if (m_rssi > m_minRSSI) + m_minRSSI = m_rssi; + if (m_rssi < m_maxRSSI) + m_maxRSSI = m_rssi; + + m_aveRSSI += m_rssi; + m_rssiCount++; + } + + CYSFFICH fich; + bool valid = fich.decode(data + 2U); + if (!valid) { + unsigned char fi = m_lastFICH.getFI(); + unsigned char ft = m_lastFICH.getFT(); + unsigned char fn = m_lastFICH.getFN(); + unsigned char bt = m_lastFICH.getBT(); + unsigned char bn = m_lastFICH.getBN(); + + if (fi == YSF_FI_COMMUNICATIONS && ft > 0U) { + fn++; + if (fn > ft) { + fn = 0U; + if (bt > 0U) + bn++; + } + } + + m_lastFICH.setFI(YSF_FI_COMMUNICATIONS); + m_lastFICH.setFN(fn); + m_lastFICH.setBN(bn); + } else { + m_lastFICH = fich; + } + +#ifdef notdef + // Stop repeater packets coming through, unless we're acting as a remote gateway + if (m_remoteGateway) { + unsigned char mr = m_lastFICH.getMR(); + if (mr != YSF_MR_BUSY) + return false; + } else { + unsigned char mr = m_lastFICH.getMR(); + if (mr == YSF_MR_BUSY) + return false; + } +#endif + + unsigned char dt = m_lastFICH.getDT(); + + bool ret = false; + switch (dt) { + case YSF_DT_VOICE_FR_MODE: + ret = processVWData(valid, data); + break; + + case YSF_DT_VD_MODE1: + case YSF_DT_VD_MODE2: + ret = processDNData(valid, data); + break; + + case YSF_DT_DATA_FR_MODE: + ret = processFRData(valid, data); + break; + + default: + break; + } + + return ret; +} + +bool CYSFControl::processVWData(bool valid, unsigned char *data) +{ + unsigned char fi = m_lastFICH.getFI(); + unsigned char dgid = m_lastFICH.getDGId(); + + if (valid && fi == YSF_FI_HEADER) { + if (m_rfState == RS_RF_LISTENING) { + bool valid = m_rfPayload.processHeaderData(data + 2U); + if (!valid) + return false; + + m_rfSource = m_rfPayload.getSource(); + + if (m_selfOnly) { + bool ret = checkCallsign(m_rfSource); + if (!ret) { + LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); + m_rfState = RS_RF_REJECTED; + return true; + } + } + + unsigned char cm = m_lastFICH.getCM(); + if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) + m_rfDest = (unsigned char*)"ALL "; + else + m_rfDest = m_rfPayload.getDest(); + + m_rfFrames = 0U; + m_rfErrs = 0U; + m_rfBits = 1U; + m_rfTimeoutTimer.start(); + m_rfState = RS_RF_AUDIO; + + m_minRSSI = m_rssi; + m_maxRSSI = m_rssi; + m_aveRSSI = m_rssi; + m_rssiCount = 1U; +#if defined(DUMP_YSF) + openFile(); +#endif + m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " "); + LogMessage("YSF, received RF header from %10.10s to DG-ID %u", m_rfSource, dgid); + + CSync::addYSFSync(data + 2U); + + CYSFFICH fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_DATA; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); + +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + + m_rfFrames++; + + m_display->writeFusionRSSI(m_rssi); + + return true; + } + } else if (valid && fi == YSF_FI_TERMINATOR) { + if (m_rfState == RS_RF_REJECTED) { + m_rfPayload.reset(); + m_rfSource = NULL; + m_rfDest = NULL; + m_rfState = RS_RF_LISTENING; + } else if (m_rfState == RS_RF_AUDIO) { + m_rfPayload.processHeaderData(data + 2U); + + CSync::addYSFSync(data + 2U); + + CYSFFICH fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_EOT; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + + m_rfFrames++; + + if (m_rssi != 0U) + LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + else + LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, BER: %.1f%%", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits)); + + writeEndRF(); + } + } else { + if (m_rfState == RS_RF_AUDIO) { + // If valid is false, update the m_lastFICH for this transmission + if (!valid) { + // XXX Check these values + m_lastFICH.setFT(0U); + m_lastFICH.setFN(0U); + } + + CSync::addYSFSync(data + 2U); + + CYSFFICH fich = m_lastFICH; + + unsigned char fn = fich.getFN(); + unsigned char ft = fich.getFT(); + + if (fn == 0U && ft == 1U) { + // The first packet after the header is odd + m_rfPayload.processVoiceFRModeData(data + 2U); + unsigned int errors = m_rfPayload.processVoiceFRModeAudio2(data + 2U); + m_rfErrs += errors; + m_rfBits += 288U; + m_display->writeFusionBER(float(errors) / 2.88F); + LogDebug("YSF, V Mode 3, seq %u, AMBE FEC %u/288 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 2.88F); + } else { + unsigned int errors = m_rfPayload.processVoiceFRModeAudio5(data + 2U); + m_rfErrs += errors; + m_rfBits += 720U; + m_display->writeFusionBER(float(errors) / 7.2F); + LogDebug("YSF, V Mode 3, seq %u, AMBE FEC %u/720 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 7.2F); + } + + fich.encode(data + 2U); + + data[0U] = TAG_DATA; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); + + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + m_rfFrames++; + + m_display->writeFusionRSSI(m_rssi); + + return true; + } + } + + return false; +} + +bool CYSFControl::processDNData(bool valid, unsigned char *data) +{ + unsigned char fi = m_lastFICH.getFI(); + unsigned char dgid = m_lastFICH.getDGId(); + + if (valid && fi == YSF_FI_HEADER) { + if (m_rfState == RS_RF_LISTENING) { + bool valid = m_rfPayload.processHeaderData(data + 2U); + if (!valid) + return false; + + m_rfSource = m_rfPayload.getSource(); + + if (m_selfOnly) { + bool ret = checkCallsign(m_rfSource); + if (!ret) { + LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); + m_rfState = RS_RF_REJECTED; + return true; + } + } + + unsigned char cm = m_lastFICH.getCM(); + if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) + m_rfDest = (unsigned char*)"ALL "; + else + m_rfDest = m_rfPayload.getDest(); + + m_rfFrames = 0U; + m_rfErrs = 0U; + m_rfBits = 1U; + m_rfTimeoutTimer.start(); + m_rfState = RS_RF_AUDIO; + + m_minRSSI = m_rssi; + m_maxRSSI = m_rssi; + m_aveRSSI = m_rssi; + m_rssiCount = 1U; +#if defined(DUMP_YSF) + openFile(); +#endif + m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " "); + LogMessage("YSF, received RF header from %10.10s to DG-ID %u", m_rfSource, dgid); + + CSync::addYSFSync(data + 2U); + + CYSFFICH fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_DATA; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); + +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + + m_rfFrames++; + + m_display->writeFusionRSSI(m_rssi); + + return true; + } + } else if (valid && fi == YSF_FI_TERMINATOR) { + if (m_rfState == RS_RF_REJECTED) { + m_rfPayload.reset(); + m_rfSource = NULL; + m_rfDest = NULL; + m_rfState = RS_RF_LISTENING; + } else if (m_rfState == RS_RF_AUDIO) { + m_rfPayload.processHeaderData(data + 2U); + + CSync::addYSFSync(data + 2U); + + CYSFFICH fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_EOT; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + + m_rfFrames++; + + if (m_rssi != 0U) + LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + else + LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, BER: %.1f%%", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits)); + + writeEndRF(); + } + } else { + if (m_rfState == RS_RF_AUDIO) { + // If valid is false, update the m_lastFICH for this transmission + if (!valid) { + unsigned char ft = m_lastFICH.getFT(); + unsigned char fn = m_lastFICH.getFN() + 1U; + + if (fn > ft) + fn = 0U; + + m_lastFICH.setFN(fn); + } + + CSync::addYSFSync(data + 2U); + + unsigned char fn = m_lastFICH.getFN(); + unsigned char dt = m_lastFICH.getDT(); + + switch (dt) { + case YSF_DT_VD_MODE1: { + m_rfPayload.processVDMode1Data(data + 2U, fn); + unsigned int errors = m_rfPayload.processVDMode1Audio(data + 2U); + m_rfErrs += errors; + m_rfBits += 235U; + m_display->writeFusionBER(float(errors) / 2.35F); + LogDebug("YSF, V/D Mode 1, seq %u, AMBE FEC %u/235 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 2.35F); + } + break; + + case YSF_DT_VD_MODE2: { + m_rfPayload.processVDMode2Data(data + 2U, fn); + unsigned int errors = m_rfPayload.processVDMode2Audio(data + 2U); + m_rfErrs += errors; + m_rfBits += 405U; + m_display->writeFusionBER(float(errors) / 4.05F); + LogDebug("YSF, V/D Mode 2, seq %u, Repetition FEC %u/405 (%.1f%%)", m_rfFrames % 128, errors, float(errors) / 4.05F); + } + break; + + default: + break; + } + + CYSFFICH fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_DATA; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); + + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + m_rfFrames++; + + m_display->writeFusionRSSI(m_rssi); + + return true; + } else if (valid && m_rfState == RS_RF_LISTENING) { + // Only use clean frames for late entry. + unsigned char fn = m_lastFICH.getFN(); + unsigned char dt = m_lastFICH.getDT(); + + switch (dt) { + case YSF_DT_VD_MODE1: + valid = m_rfPayload.processVDMode1Data(data + 2U, fn); + break; + + case YSF_DT_VD_MODE2: + valid = m_rfPayload.processVDMode2Data(data + 2U, fn); + break; + + default: + valid = false; + break; + } + + if (!valid) + return false; + + unsigned char cm = m_lastFICH.getCM(); + if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) + m_rfDest = (unsigned char*)"ALL "; + else + m_rfDest = m_rfPayload.getDest(); + + m_rfSource = m_rfPayload.getSource(); + + if (m_rfSource == NULL || m_rfDest == NULL) + return false; + + if (m_selfOnly) { + bool ret = checkCallsign(m_rfSource); + if (!ret) { + LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); + m_rfState = RS_RF_REJECTED; + return true; + } + } + + m_rfFrames = 0U; + m_rfErrs = 0U; + m_rfBits = 1U; + m_rfTimeoutTimer.start(); + m_rfState = RS_RF_AUDIO; + + m_minRSSI = m_rssi; + m_maxRSSI = m_rssi; + m_aveRSSI = m_rssi; + m_rssiCount = 1U; +#if defined(DUMP_YSF) + openFile(); +#endif + // Build a new header and transmit it + unsigned char buffer[YSF_FRAME_LENGTH_BYTES + 2U]; + + CSync::addYSFSync(buffer + 2U); + + CYSFFICH fich = m_lastFICH; + fich.setFI(YSF_FI_HEADER); + fich.encode(buffer + 2U); + + unsigned char csd1[20U], csd2[20U]; + memcpy(csd1 + YSF_CALLSIGN_LENGTH, m_rfSource, YSF_CALLSIGN_LENGTH); + memset(csd2, ' ', YSF_CALLSIGN_LENGTH + YSF_CALLSIGN_LENGTH); + + if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) + memset(csd1 + 0U, '*', YSF_CALLSIGN_LENGTH); + else + memcpy(csd1 + 0U, m_rfDest, YSF_CALLSIGN_LENGTH); + + CYSFPayload payload; + payload.writeHeader(buffer + 2U, csd1, csd2); + + buffer[0U] = TAG_DATA; + buffer[1U] = 0x00U; + + writeNetwork(buffer, m_rfFrames % 128U); + + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(buffer + 2U); + writeQueueRF(buffer); + } + +#if defined(DUMP_YSF) + writeFile(buffer + 2U); +#endif + m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " "); + LogMessage("YSF, received RF late entry from %10.10s to DG-ID %u", m_rfSource, dgid); + + CSync::addYSFSync(data + 2U); + + fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_DATA; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); + + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + m_rfFrames++; + + m_display->writeFusionRSSI(m_rssi); + + return true; + } + } + + return false; +} + +bool CYSFControl::processFRData(bool valid, unsigned char *data) +{ + unsigned char fi = m_lastFICH.getFI(); + unsigned char dgid = m_lastFICH.getDGId(); + + if (valid && fi == YSF_FI_HEADER) { + if (m_rfState == RS_RF_LISTENING) { + valid = m_rfPayload.processHeaderData(data + 2U); + if (!valid) + return false; + + m_rfSource = m_rfPayload.getSource(); + + if (m_selfOnly) { + bool ret = checkCallsign(m_rfSource); + if (!ret) { + LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); + m_rfState = RS_RF_REJECTED; + return true; + } + } + + unsigned char cm = m_lastFICH.getCM(); + if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) + m_rfDest = (unsigned char*)"ALL "; + else + m_rfDest = m_rfPayload.getDest(); + + m_rfFrames = 0U; + m_rfState = RS_RF_DATA; + + m_minRSSI = m_rssi; + m_maxRSSI = m_rssi; + m_aveRSSI = m_rssi; + m_rssiCount = 1U; +#if defined(DUMP_YSF) + openFile(); +#endif + m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " "); + LogMessage("YSF, received RF header from %10.10s to DG-ID %u", m_rfSource, dgid); + + CSync::addYSFSync(data + 2U); + + CYSFFICH fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_DATA; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + + m_rfFrames++; + + m_display->writeFusionRSSI(m_rssi); + + return true; + } + } else if (valid && fi == YSF_FI_TERMINATOR) { + if (m_rfState == RS_RF_REJECTED) { + m_rfPayload.reset(); + m_rfSource = NULL; + m_rfDest = NULL; + m_rfState = RS_RF_LISTENING; + } else if (m_rfState == RS_RF_DATA) { + m_rfPayload.processHeaderData(data + 2U); + + CSync::addYSFSync(data + 2U); + + CYSFFICH fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_EOT; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + + m_rfFrames++; + + if (m_rssi != 0U) + LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, RSSI: -%u/-%u/-%u dBm", m_rfSource, dgid, float(m_rfFrames) / 10.0F, m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + else + LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds", m_rfSource, dgid, float(m_rfFrames) / 10.0F); + + writeEndRF(); + } + } else { + if (m_rfState == RS_RF_DATA) { + // If valid is false, update the m_lastFICH for this transmission + if (!valid) { + unsigned char ft = m_lastFICH.getFT(); + unsigned char fn = m_lastFICH.getFN() + 1U; + + if (fn > ft) + fn = 0U; + + m_lastFICH.setFN(fn); + } + + CSync::addYSFSync(data + 2U); + + unsigned char fn = m_lastFICH.getFN(); + + m_rfPayload.processDataFRModeData(data + 2U, fn); + + CYSFFICH fich = m_lastFICH; + + fich.encode(data + 2U); + + data[0U] = TAG_DATA; + data[1U] = 0x00U; + + writeNetwork(data, m_rfFrames % 128U); + + if (m_duplex) { + fich.setMR(m_remoteGateway ? YSF_MR_NOT_BUSY : YSF_MR_BUSY); + fich.setDev(m_lowDeviation); + fich.encode(data + 2U); + writeQueueRF(data); + } + +#if defined(DUMP_YSF) + writeFile(data + 2U); +#endif + m_rfFrames++; + + m_display->writeFusionRSSI(m_rssi); + + return true; + } + } + + return false; +} + +unsigned int CYSFControl::readModem(unsigned char* data) +{ + assert(data != NULL); + + if (m_queue.isEmpty()) + return 0U; + + unsigned char len = 0U; + m_queue.getData(&len, 1U); + + m_queue.getData(data, len); + + return len; +} + +void CYSFControl::writeEndRF() +{ + m_rfState = RS_RF_LISTENING; + + m_rfTimeoutTimer.stop(); + m_rfPayload.reset(); + + // These variables are free'd by YSFPayload + m_rfSource = NULL; + m_rfDest = NULL; + + if (m_netState == RS_NET_IDLE) { + m_display->clearFusion(); + + if (m_network != NULL) + m_network->reset(); + } + +#if defined(DUMP_YSF) + closeFile(); +#endif +} + +void CYSFControl::writeEndNet() +{ + m_netState = RS_NET_IDLE; + + m_netTimeoutTimer.stop(); + m_networkWatchdog.stop(); + m_packetTimer.stop(); + + m_netPayload.reset(); + + m_display->clearFusion(); + + if (m_network != NULL) + m_network->reset(); +} + +void CYSFControl::writeNetwork() +{ + unsigned char data[200U]; + unsigned int length = m_network->read(data); + if (length == 0U) + return; + + if (!m_enabled) + return; + + if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) + return; + + m_networkWatchdog.start(); + + bool gateway = ::memcmp(data + 4U, m_callsign, YSF_CALLSIGN_LENGTH) == 0; + + unsigned char n = (data[34U] & 0xFEU) >> 1; + bool end = (data[34U] & 0x01U) == 0x01U; + + CYSFFICH fich; + bool valid = fich.decode(data + 35U); + + unsigned char dgid = 0U; + if (valid) + dgid = fich.getDGId(); + + if (!m_netTimeoutTimer.isRunning()) { + if (end) + return; + + ::memcpy(m_netSource, data + 14U, YSF_CALLSIGN_LENGTH); + ::memcpy(m_netDest, data + 24U, YSF_CALLSIGN_LENGTH); + + if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) { + m_display->writeFusion((char*)m_netSource, (char*)m_netDest, dgid, "N", (char*)(data + 4U)); + LogMessage("YSF, received network data from %10.10s to DG-ID %u at %10.10s", m_netSource, dgid, data + 4U); + } + + m_netTimeoutTimer.start(); + m_netPayload.reset(); + m_packetTimer.start(); + m_elapsed.start(); + m_netState = RS_NET_AUDIO; + m_netFrames = 0U; + m_netLost = 0U; + m_netErrs = 0U; + m_netBits = 1U; + m_netN = 0U; + } else { + // Check for duplicate frames, if we can + if (m_netN == n) + return; + } + + data[33U] = end ? TAG_EOT : TAG_DATA; + data[34U] = 0x00U; + + if (valid) { + unsigned char dt = fich.getDT(); + unsigned char fn = fich.getFN(); + unsigned char ft = fich.getFT(); + unsigned char fi = fich.getFI(); + unsigned char cm = fich.getCM(); + + if (::memcmp(m_netDest, " ", YSF_CALLSIGN_LENGTH) == 0) { + if (cm == YSF_CM_GROUP1 || cm == YSF_CM_GROUP2) + ::memcpy(m_netDest, "ALL ", YSF_CALLSIGN_LENGTH); + } + + if (m_remoteGateway) { + fich.setVoIP(false); + fich.setMR(YSF_MR_DIRECT); + } else { + fich.setVoIP(true); + fich.setMR(YSF_MR_BUSY); + } + + fich.setDev(m_lowDeviation); + fich.encode(data + 35U); + + // Set the downlink callsign + switch (fi) { + case YSF_FI_HEADER: { + bool ok = m_netPayload.processHeaderData(data + 35U); + if (ok) + processNetCallsigns(data, dgid); + } + break; + + case YSF_FI_TERMINATOR: + m_netPayload.processHeaderData(data + 35U); + break; + + case YSF_FI_COMMUNICATIONS: + switch (dt) { + case YSF_DT_VD_MODE1: { + bool ok = m_netPayload.processVDMode1Data(data + 35U, fn, gateway); + if (ok) + processNetCallsigns(data, dgid); + + unsigned int errors = m_netPayload.processVDMode1Audio(data + 35U); + m_netErrs += errors; + m_netBits += 235U; + } + break; + + case YSF_DT_VD_MODE2: { + bool ok = m_netPayload.processVDMode2Data(data + 35U, fn, gateway); + if (ok) + processNetCallsigns(data, dgid); + + unsigned int errors = m_netPayload.processVDMode2Audio(data + 35U); + m_netErrs += errors; + m_netBits += 135U; + } + break; + + case YSF_DT_DATA_FR_MODE: + m_netPayload.processDataFRModeData(data + 35U, fn, gateway); + break; + + case YSF_DT_VOICE_FR_MODE: + if (fn == 0U && ft == 1U) { + // The first packet after the header is odd + m_netPayload.processVoiceFRModeData(data + 35U); + unsigned int errors = m_netPayload.processVoiceFRModeAudio2(data + 35U); + m_netErrs += errors; + m_netBits += 288U; + } else { + unsigned int errors = m_netPayload.processVoiceFRModeAudio5(data + 35U); + m_netErrs += errors; + m_netBits += 720U; + } + break; + + default: + break; + } + break; + + default: + break; + } + } + + writeQueueNet(data + 33U); + + m_packetTimer.start(); + m_netFrames++; + m_netN = n; + + if (end) { + LogMessage("YSF, received network end of transmission from %10.10s to DG-ID %u, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_netSource, dgid, float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); + writeEndNet(); + } +} + +void CYSFControl::clock(unsigned int ms) +{ + if (m_network != NULL) + writeNetwork(); + + m_rfTimeoutTimer.clock(ms); + m_netTimeoutTimer.clock(ms); + + if (m_netState == RS_NET_AUDIO) { + m_networkWatchdog.clock(ms); + + if (m_networkWatchdog.hasExpired()) { + LogMessage("YSF, network watchdog has expired, %.1f seconds, %u%% packet loss, BER: %.1f%%", float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); + writeEndNet(); + } + } +} + +void CYSFControl::writeQueueRF(const unsigned char *data) +{ + assert(data != NULL); + + if (m_netState != RS_NET_IDLE) + return; + + if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) + return; + + unsigned char len = YSF_FRAME_LENGTH_BYTES + 2U; + + unsigned int space = m_queue.freeSpace(); + if (space < (len + 1U)) { + LogError("YSF, overflow in the System Fusion RF queue"); + return; + } + + m_queue.addData(&len, 1U); + + m_queue.addData(data, len); +} + +void CYSFControl::writeQueueNet(const unsigned char *data) +{ + assert(data != NULL); + + if (m_netTimeoutTimer.isRunning() && m_netTimeoutTimer.hasExpired()) + return; + + unsigned char len = YSF_FRAME_LENGTH_BYTES + 2U; + + unsigned int space = m_queue.freeSpace(); + if (space < (len + 1U)) { + LogError("YSF, overflow in the System Fusion RF queue"); + return; + } + + m_queue.addData(&len, 1U); + + m_queue.addData(data, len); +} + +void CYSFControl::writeNetwork(const unsigned char *data, unsigned int count) +{ + assert(data != NULL); + + if (m_network == NULL) + return; + + if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) + return; + + m_network->write(m_rfSource, m_rfDest, data + 2U, count, data[0U] == TAG_EOT); +} + +bool CYSFControl::openFile() +{ + if (m_fp != NULL) + return true; + + time_t t; + ::time(&t); + + struct tm* tm = ::localtime(&t); + + char name[100U]; + ::sprintf(name, "YSF_%04d%02d%02d_%02d%02d%02d.ambe", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); + + m_fp = ::fopen(name, "wb"); + if (m_fp == NULL) + return false; + + ::fwrite("YSF", 1U, 3U, m_fp); + + return true; +} + +bool CYSFControl::writeFile(const unsigned char* data) +{ + if (m_fp == NULL) + return false; + + ::fwrite(data, 1U, YSF_FRAME_LENGTH_BYTES, m_fp); + + return true; +} + +void CYSFControl::closeFile() +{ + if (m_fp != NULL) { + ::fclose(m_fp); + m_fp = NULL; + } +} + +bool CYSFControl::checkCallsign(const unsigned char* callsign) const +{ + return ::memcmp(callsign, m_selfCallsign, ::strlen((char*)m_selfCallsign)) == 0; +} + +void CYSFControl::processNetCallsigns(const unsigned char* data, unsigned char dgid) +{ + assert(data != NULL); + + if (::memcmp(m_netSource, " ", 10U) == 0 || ::memcmp(m_netDest, " ", 10U) == 0) { + if (::memcmp(m_netSource, " ", YSF_CALLSIGN_LENGTH) == 0) { + unsigned char* source = m_netPayload.getSource(); + if (source != NULL) + ::memcpy(m_netSource, source, YSF_CALLSIGN_LENGTH); + } + + if (::memcmp(m_netDest, " ", YSF_CALLSIGN_LENGTH) == 0) { + unsigned char* dest = m_netPayload.getDest(); + if (dest != NULL) + ::memcpy(m_netDest, dest, YSF_CALLSIGN_LENGTH); + } + + if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) { + m_display->writeFusion((char*)m_netSource, (char*)m_netDest, dgid, "N", (char*)(data + 4U)); + LogMessage("YSF, received network data from %10.10s to DG-ID %u at %10.10s", m_netSource, dgid, data + 4U); + } + } +} + +bool CYSFControl::isBusy() const +{ + return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; +} + +void CYSFControl::enable(bool enabled) +{ + if (!enabled && m_enabled) { + m_queue.clear(); + + // Reset the RF section + m_rfState = RS_RF_LISTENING; + + m_rfTimeoutTimer.stop(); + m_rfPayload.reset(); + + // These variables are free'd by YSFPayload + m_rfSource = NULL; + m_rfDest = NULL; + + // Reset the networking section + m_netState = RS_NET_IDLE; + + m_netTimeoutTimer.stop(); + m_networkWatchdog.stop(); + m_packetTimer.stop(); + + m_netPayload.reset(); + } + + m_enabled = enabled; +} diff --git a/YSFControl.h b/YSFControl.h index 3f09a76c4..e1076f3fd 100644 --- a/YSFControl.h +++ b/YSFControl.h @@ -1,111 +1,112 @@ -/* - * Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#if !defined(YSFControl_H) -#define YSFControl_H - -#include "RSSIInterpolator.h" -#include "YSFNetwork.h" -#include "YSFDefines.h" -#include "YSFPayload.h" -#include "RingBuffer.h" -#include "StopWatch.h" -#include "YSFFICH.h" -#include "Display.h" -#include "Defines.h" -#include "Timer.h" -#include "Modem.h" - -#include - -class CYSFControl { -public: - CYSFControl(const std::string& callsign, bool selfOnly, CYSFNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool lowDeviation, bool remoteGateway, CRSSIInterpolator* rssiMapper); - ~CYSFControl(); - - void setSQL(bool on, unsigned char value); - - bool writeModem(unsigned char* data, unsigned int len); - - unsigned int readModem(unsigned char* data); - - void clock(unsigned int ms); - -private: - unsigned char* m_callsign; - unsigned char* m_selfCallsign; - bool m_selfOnly; - CYSFNetwork* m_network; - CDisplay* m_display; - bool m_duplex; - bool m_lowDeviation; - bool m_remoteGateway; - bool m_sqlEnabled; - unsigned char m_sqlValue; - CRingBuffer m_queue; - RPT_RF_STATE m_rfState; - RPT_NET_STATE m_netState; - CTimer m_rfTimeoutTimer; - CTimer m_netTimeoutTimer; - CTimer m_packetTimer; - CTimer m_networkWatchdog; - CStopWatch m_elapsed; - unsigned int m_rfFrames; - unsigned int m_netFrames; - unsigned int m_netLost; - unsigned int m_rfErrs; - unsigned int m_rfBits; - unsigned int m_netErrs; - unsigned int m_netBits; - unsigned char* m_rfSource; - unsigned char* m_rfDest; - unsigned char* m_netSource; - unsigned char* m_netDest; - CYSFFICH m_lastFICH; - unsigned char m_netN; - CYSFPayload m_rfPayload; - CYSFPayload m_netPayload; - CRSSIInterpolator* m_rssiMapper; - unsigned char m_rssi; - unsigned char m_maxRSSI; - unsigned char m_minRSSI; - unsigned int m_aveRSSI; - unsigned int m_rssiCount; - FILE* m_fp; - - bool processVWData(bool valid, unsigned char *data); - bool processDNData(bool valid, unsigned char *data); - bool processFRData(bool valid, unsigned char *data); - - void writeQueueRF(const unsigned char* data); - void writeQueueNet(const unsigned char* data); - void writeNetwork(const unsigned char* data, unsigned int count); - void writeNetwork(); - - void writeEndRF(); - void writeEndNet(); - - bool openFile(); - bool writeFile(const unsigned char* data); - void closeFile(); - - bool checkCallsign(const unsigned char* callsign) const; - void processNetCallsigns(const unsigned char* data); -}; - -#endif +/* + * Copyright (C) 2015-2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(YSFControl_H) +#define YSFControl_H + +#include "RSSIInterpolator.h" +#include "YSFNetwork.h" +#include "YSFDefines.h" +#include "YSFPayload.h" +#include "RingBuffer.h" +#include "StopWatch.h" +#include "YSFFICH.h" +#include "Display.h" +#include "Defines.h" +#include "Timer.h" +#include "Modem.h" + +#include + +class CYSFControl { +public: + CYSFControl(const std::string& callsign, bool selfOnly, CYSFNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool lowDeviation, bool remoteGateway, CRSSIInterpolator* rssiMapper); + ~CYSFControl(); + + bool writeModem(unsigned char* data, unsigned int len); + + unsigned int readModem(unsigned char* data); + + void clock(unsigned int ms); + + bool isBusy() const; + + void enable(bool enabled); + +private: + unsigned char* m_callsign; + unsigned char* m_selfCallsign; + bool m_selfOnly; + CYSFNetwork* m_network; + CDisplay* m_display; + bool m_duplex; + bool m_lowDeviation; + bool m_remoteGateway; + CRingBuffer m_queue; + RPT_RF_STATE m_rfState; + RPT_NET_STATE m_netState; + CTimer m_rfTimeoutTimer; + CTimer m_netTimeoutTimer; + CTimer m_packetTimer; + CTimer m_networkWatchdog; + CStopWatch m_elapsed; + unsigned int m_rfFrames; + unsigned int m_netFrames; + unsigned int m_netLost; + unsigned int m_rfErrs; + unsigned int m_rfBits; + unsigned int m_netErrs; + unsigned int m_netBits; + unsigned char* m_rfSource; + unsigned char* m_rfDest; + unsigned char* m_netSource; + unsigned char* m_netDest; + CYSFFICH m_lastFICH; + unsigned char m_netN; + CYSFPayload m_rfPayload; + CYSFPayload m_netPayload; + CRSSIInterpolator* m_rssiMapper; + unsigned char m_rssi; + unsigned char m_maxRSSI; + unsigned char m_minRSSI; + unsigned int m_aveRSSI; + unsigned int m_rssiCount; + bool m_enabled; + FILE* m_fp; + + bool processVWData(bool valid, unsigned char *data); + bool processDNData(bool valid, unsigned char *data); + bool processFRData(bool valid, unsigned char *data); + + void writeQueueRF(const unsigned char* data); + void writeQueueNet(const unsigned char* data); + void writeNetwork(const unsigned char* data, unsigned int count); + void writeNetwork(); + + void writeEndRF(); + void writeEndNet(); + + bool openFile(); + bool writeFile(const unsigned char* data); + void closeFile(); + + bool checkCallsign(const unsigned char* callsign) const; + void processNetCallsigns(const unsigned char* data, unsigned char dgid); +}; + +#endif diff --git a/YSFConvolution.cpp b/YSFConvolution.cpp index 23b117ee4..c79bf2ad7 100644 --- a/YSFConvolution.cpp +++ b/YSFConvolution.cpp @@ -1,141 +1,150 @@ -/* - * Copyright (C) 2009-2016 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "YSFConvolution.h" - -#include -#include -#include - -const unsigned char BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; - -#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) -#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) - -const uint8_t BRANCH_TABLE1[] = {0U, 0U, 0U, 0U, 1U, 1U, 1U, 1U}; -const uint8_t BRANCH_TABLE2[] = {0U, 1U, 1U, 0U, 0U, 1U, 1U, 0U}; - -const unsigned int NUM_OF_STATES_D2 = 8U; -const unsigned int NUM_OF_STATES = 16U; -const uint32_t M = 2U; -const unsigned int K = 5U; - -CYSFConvolution::CYSFConvolution() : -m_metrics1(NULL), -m_metrics2(NULL), -m_oldMetrics(NULL), -m_newMetrics(NULL), -m_decisions(NULL), -m_dp(NULL) -{ - m_metrics1 = new uint16_t[16U]; - m_metrics2 = new uint16_t[16U]; - m_decisions = new uint64_t[180U]; -} - -CYSFConvolution::~CYSFConvolution() -{ - delete[] m_metrics1; - delete[] m_metrics2; - delete[] m_decisions; -} - -void CYSFConvolution::start() -{ - ::memset(m_metrics1, 0x00U, NUM_OF_STATES * sizeof(uint16_t)); - ::memset(m_metrics2, 0x00U, NUM_OF_STATES * sizeof(uint16_t)); - - m_oldMetrics = m_metrics1; - m_newMetrics = m_metrics2; - m_dp = m_decisions; -} - -void CYSFConvolution::decode(uint8_t s0, uint8_t s1) -{ - *m_dp = 0U; - - for (uint8_t i = 0U; i < NUM_OF_STATES_D2; i++) { - uint8_t j = i * 2U; - - uint16_t metric = (BRANCH_TABLE1[i] ^ s0) + (BRANCH_TABLE2[i] ^ s1); - - uint16_t m0 = m_oldMetrics[i] + metric; - uint16_t m1 = m_oldMetrics[i + NUM_OF_STATES_D2] + (M - metric); - uint8_t decision0 = (m0 >= m1) ? 1U : 0U; - m_newMetrics[j + 0U] = decision0 != 0U ? m1 : m0; - - m0 = m_oldMetrics[i] + (M - metric); - m1 = m_oldMetrics[i + NUM_OF_STATES_D2] + metric; - uint8_t decision1 = (m0 >= m1) ? 1U : 0U; - m_newMetrics[j + 1U] = decision1 != 0U ? m1 : m0; - - *m_dp |= (uint64_t(decision1) << (j + 1U)) | (uint64_t(decision0) << (j + 0U)); - } - - ++m_dp; - - assert((m_dp - m_decisions) <= 180); - - uint16_t* tmp = m_oldMetrics; - m_oldMetrics = m_newMetrics; - m_newMetrics = tmp; -} - -void CYSFConvolution::chainback(unsigned char* out, unsigned int nBits) -{ - assert(out != NULL); - - uint32_t state = 0U; - - while (nBits-- > 0) { - --m_dp; - - uint32_t i = state >> (9 - K); - uint8_t bit = uint8_t(*m_dp >> i) & 1; - state = (bit << 7) | (state >> 1); - - WRITE_BIT1(out, nBits, bit != 0U); - } -} - -void CYSFConvolution::encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const -{ - assert(in != NULL); - assert(out != NULL); - assert(nBits > 0U); - - uint8_t d1 = 0U, d2 = 0U, d3 = 0U, d4 = 0U; - uint32_t k = 0U; - for (unsigned int i = 0U; i < nBits; i++) { - uint8_t d = READ_BIT1(in, i) ? 1U : 0U; - - uint8_t g1 = (d + d3 + d4) & 1; - uint8_t g2 = (d + d1 + d2 + d4) & 1; - - d4 = d3; - d3 = d2; - d2 = d1; - d1 = d; - - WRITE_BIT1(out, k, g1 != 0U); - k++; - - WRITE_BIT1(out, k, g2 != 0U); - k++; - } -} +/* + * Copyright (C) 2009-2016,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "YSFConvolution.h" + +#include +#include +#include + +const unsigned char BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; + +#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) +#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) + +const uint8_t BRANCH_TABLE1[] = {0U, 0U, 0U, 0U, 1U, 1U, 1U, 1U}; +const uint8_t BRANCH_TABLE2[] = {0U, 1U, 1U, 0U, 0U, 1U, 1U, 0U}; + +const unsigned int NUM_OF_STATES_D2 = 8U; +const unsigned int NUM_OF_STATES = 16U; +const uint32_t M = 2U; +const unsigned int K = 5U; + +CYSFConvolution::CYSFConvolution() : +m_metrics1(NULL), +m_metrics2(NULL), +m_oldMetrics(NULL), +m_newMetrics(NULL), +m_decisions(NULL), +m_dp(NULL) +{ + m_metrics1 = new uint16_t[20U]; + m_metrics2 = new uint16_t[20U]; + m_decisions = new uint64_t[180U]; +} + +CYSFConvolution::~CYSFConvolution() +{ + delete[] m_metrics1; + delete[] m_metrics2; + delete[] m_decisions; +} + +void CYSFConvolution::start() +{ + ::memset(m_metrics1, 0x00U, NUM_OF_STATES * sizeof(uint16_t)); + ::memset(m_metrics2, 0x00U, NUM_OF_STATES * sizeof(uint16_t)); + + m_oldMetrics = m_metrics1; + m_newMetrics = m_metrics2; + m_dp = m_decisions; +} + +void CYSFConvolution::decode(uint8_t s0, uint8_t s1) +{ + *m_dp = 0U; + + for (uint8_t i = 0U; i < NUM_OF_STATES_D2; i++) { + uint8_t j = i * 2U; + + uint16_t metric = (BRANCH_TABLE1[i] ^ s0) + (BRANCH_TABLE2[i] ^ s1); + + uint16_t m0 = m_oldMetrics[i] + metric; + uint16_t m1 = m_oldMetrics[i + NUM_OF_STATES_D2] + (M - metric); + uint8_t decision0 = (m0 >= m1) ? 1U : 0U; + m_newMetrics[j + 0U] = decision0 != 0U ? m1 : m0; + + m0 = m_oldMetrics[i] + (M - metric); + m1 = m_oldMetrics[i + NUM_OF_STATES_D2] + metric; + uint8_t decision1 = (m0 >= m1) ? 1U : 0U; + m_newMetrics[j + 1U] = decision1 != 0U ? m1 : m0; + + *m_dp |= (uint64_t(decision1) << (j + 1U)) | (uint64_t(decision0) << (j + 0U)); + } + + ++m_dp; + + assert((m_dp - m_decisions) <= 180); + + uint16_t* tmp = m_oldMetrics; + m_oldMetrics = m_newMetrics; + m_newMetrics = tmp; +} + +unsigned int CYSFConvolution::chainback(unsigned char* out, unsigned int nBits) +{ + assert(out != NULL); + + uint32_t state = 0U; + + while (nBits-- > 0) { + --m_dp; + + uint32_t i = state >> (9 - K); + uint8_t bit = uint8_t(*m_dp >> i) & 1; + state = (bit << 7) | (state >> 1); + + WRITE_BIT1(out, nBits, bit != 0U); + } + + unsigned int minCost = m_oldMetrics[0]; + + for (unsigned int i = 0U; i < NUM_OF_STATES; i++) { + if (m_oldMetrics[i] < minCost) + minCost = m_oldMetrics[i]; + } + + return minCost / (M >> 1); +} + +void CYSFConvolution::encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const +{ + assert(in != NULL); + assert(out != NULL); + assert(nBits > 0U); + + uint8_t d1 = 0U, d2 = 0U, d3 = 0U, d4 = 0U; + uint32_t k = 0U; + for (unsigned int i = 0U; i < nBits; i++) { + uint8_t d = READ_BIT1(in, i) ? 1U : 0U; + + uint8_t g1 = (d + d3 + d4) & 1; + uint8_t g2 = (d + d1 + d2 + d4) & 1; + + d4 = d3; + d3 = d2; + d2 = d1; + d1 = d; + + WRITE_BIT1(out, k, g1 != 0U); + k++; + + WRITE_BIT1(out, k, g2 != 0U); + k++; + } +} diff --git a/YSFConvolution.h b/YSFConvolution.h index 457103c6f..b49ddc5db 100644 --- a/YSFConvolution.h +++ b/YSFConvolution.h @@ -1,45 +1,46 @@ -/* - * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#if !defined(YSFConvolution_H) -#define YSFConvolution_H - -#include - -class CYSFConvolution { -public: - CYSFConvolution(); - ~CYSFConvolution(); - - void start(); - void decode(uint8_t s0, uint8_t s1); - void chainback(unsigned char* out, unsigned int nBits); - - void encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const; - -private: - uint16_t* m_metrics1; - uint16_t* m_metrics2; - uint16_t* m_oldMetrics; - uint16_t* m_newMetrics; - uint64_t* m_decisions; - uint64_t* m_dp; -}; - -#endif - +/* + * Copyright (C) 2015,2016.2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(YSFConvolution_H) +#define YSFConvolution_H + +#include + +class CYSFConvolution { +public: + CYSFConvolution(); + ~CYSFConvolution(); + + void start(); + void decode(uint8_t s0, uint8_t s1); + + unsigned int chainback(unsigned char* out, unsigned int nBits); + + void encode(const unsigned char* in, unsigned char* out, unsigned int nBits) const; + +private: + uint16_t* m_metrics1; + uint16_t* m_metrics2; + uint16_t* m_oldMetrics; + uint16_t* m_newMetrics; + uint64_t* m_decisions; + uint64_t* m_dp; +}; + +#endif + diff --git a/YSFDefines.h b/YSFDefines.h index afbaf83c4..0efccc89a 100644 --- a/YSFDefines.h +++ b/YSFDefines.h @@ -1,53 +1,53 @@ -/* - * Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#if !defined(YSFDefines_H) -#define YSFDefines_H - -const unsigned int YSF_FRAME_LENGTH_BYTES = 120U; - -const unsigned char YSF_SYNC_BYTES[] = {0xD4U, 0x71U, 0xC9U, 0x63U, 0x4DU}; -const unsigned int YSF_SYNC_LENGTH_BYTES = 5U; - -const unsigned int YSF_FICH_LENGTH_BYTES = 25U; - -const unsigned char YSF_SYNC_OK = 0x01U; - -const unsigned int YSF_CALLSIGN_LENGTH = 10U; - -const unsigned int YSF_FRAME_TIME = 100U; - -const unsigned char YSF_FI_HEADER = 0x00U; -const unsigned char YSF_FI_COMMUNICATIONS = 0x01U; -const unsigned char YSF_FI_TERMINATOR = 0x02U; -const unsigned char YSF_FI_TEST = 0x03U; - -const unsigned char YSF_DT_VD_MODE1 = 0x00U; -const unsigned char YSF_DT_DATA_FR_MODE = 0x01U; -const unsigned char YSF_DT_VD_MODE2 = 0x02U; -const unsigned char YSF_DT_VOICE_FR_MODE = 0x03U; - -const unsigned char YSF_CM_GROUP1 = 0x00U; -const unsigned char YSF_CM_GROUP2 = 0x01U; -const unsigned char YSF_CM_INDIVIDUAL = 0x03U; - -const unsigned char YSF_MR_DIRECT = 0x00U; -const unsigned char YSF_MR_NOT_BUSY = 0x01U; -const unsigned char YSF_MR_BUSY = 0x02U; - -#endif +/* + * Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(YSFDefines_H) +#define YSFDefines_H + +const unsigned int YSF_FRAME_LENGTH_BYTES = 120U; + +const unsigned char YSF_SYNC_BYTES[] = {0xD4U, 0x71U, 0xC9U, 0x63U, 0x4DU}; +const unsigned int YSF_SYNC_LENGTH_BYTES = 5U; + +const unsigned int YSF_FICH_LENGTH_BYTES = 25U; + +const unsigned char YSF_SYNC_OK = 0x01U; + +const unsigned int YSF_CALLSIGN_LENGTH = 10U; + +const unsigned int YSF_FRAME_TIME = 100U; + +const unsigned char YSF_FI_HEADER = 0x00U; +const unsigned char YSF_FI_COMMUNICATIONS = 0x01U; +const unsigned char YSF_FI_TERMINATOR = 0x02U; +const unsigned char YSF_FI_TEST = 0x03U; + +const unsigned char YSF_DT_VD_MODE1 = 0x00U; +const unsigned char YSF_DT_DATA_FR_MODE = 0x01U; +const unsigned char YSF_DT_VD_MODE2 = 0x02U; +const unsigned char YSF_DT_VOICE_FR_MODE = 0x03U; + +const unsigned char YSF_CM_GROUP1 = 0x00U; +const unsigned char YSF_CM_GROUP2 = 0x01U; +const unsigned char YSF_CM_INDIVIDUAL = 0x03U; + +const unsigned char YSF_MR_DIRECT = 0x00U; +const unsigned char YSF_MR_NOT_BUSY = 0x01U; +const unsigned char YSF_MR_BUSY = 0x02U; + +#endif diff --git a/YSFFICH.cpp b/YSFFICH.cpp index be60510a4..cbe317518 100644 --- a/YSFFICH.cpp +++ b/YSFFICH.cpp @@ -1,287 +1,290 @@ -/* - * Copyright (C) 2016,2017 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "YSFConvolution.h" -#include "YSFDefines.h" -#include "Golay24128.h" -#include "YSFFICH.h" -#include "CRC.h" -#include "Log.h" - -#include -#include -#include - -const unsigned char BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; - -#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) -#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) - -const unsigned int INTERLEAVE_TABLE[] = { - 0U, 40U, 80U, 120U, 160U, - 2U, 42U, 82U, 122U, 162U, - 4U, 44U, 84U, 124U, 164U, - 6U, 46U, 86U, 126U, 166U, - 8U, 48U, 88U, 128U, 168U, - 10U, 50U, 90U, 130U, 170U, - 12U, 52U, 92U, 132U, 172U, - 14U, 54U, 94U, 134U, 174U, - 16U, 56U, 96U, 136U, 176U, - 18U, 58U, 98U, 138U, 178U, - 20U, 60U, 100U, 140U, 180U, - 22U, 62U, 102U, 142U, 182U, - 24U, 64U, 104U, 144U, 184U, - 26U, 66U, 106U, 146U, 186U, - 28U, 68U, 108U, 148U, 188U, - 30U, 70U, 110U, 150U, 190U, - 32U, 72U, 112U, 152U, 192U, - 34U, 74U, 114U, 154U, 194U, - 36U, 76U, 116U, 156U, 196U, - 38U, 78U, 118U, 158U, 198U}; - -CYSFFICH::CYSFFICH(const CYSFFICH& fich) : -m_fich(NULL) -{ - m_fich = new unsigned char[6U]; - - ::memcpy(m_fich, fich.m_fich, 6U); -} - -CYSFFICH::CYSFFICH() : -m_fich(NULL) -{ - m_fich = new unsigned char[6U]; - - memset(m_fich, 0x00U, 6U); -} - -CYSFFICH::~CYSFFICH() -{ - delete[] m_fich; -} - -bool CYSFFICH::decode(const unsigned char* bytes) -{ - assert(bytes != NULL); - - // Skip the sync bytes - bytes += YSF_SYNC_LENGTH_BYTES; - - CYSFConvolution viterbi; - viterbi.start(); - - // Deinterleave the FICH and send bits to the Viterbi decoder - for (unsigned int i = 0U; i < 100U; i++) { - unsigned int n = INTERLEAVE_TABLE[i]; - uint8_t s0 = READ_BIT1(bytes, n) ? 1U : 0U; - - n++; - uint8_t s1 = READ_BIT1(bytes, n) ? 1U : 0U; - - viterbi.decode(s0, s1); - } - - unsigned char output[13U]; - viterbi.chainback(output, 96U); - - unsigned int b0 = CGolay24128::decode24128(output + 0U); - unsigned int b1 = CGolay24128::decode24128(output + 3U); - unsigned int b2 = CGolay24128::decode24128(output + 6U); - unsigned int b3 = CGolay24128::decode24128(output + 9U); - - m_fich[0U] = (b0 >> 4) & 0xFFU; - m_fich[1U] = ((b0 << 4) & 0xF0U) | ((b1 >> 8) & 0x0FU); - m_fich[2U] = (b1 >> 0) & 0xFFU; - m_fich[3U] = (b2 >> 4) & 0xFFU; - m_fich[4U] = ((b2 << 4) & 0xF0U) | ((b3 >> 8) & 0x0FU); - m_fich[5U] = (b3 >> 0) & 0xFFU; - - return CCRC::checkCCITT162(m_fich, 6U); -} - -void CYSFFICH::encode(unsigned char* bytes) -{ - assert(bytes != NULL); - - // Skip the sync bytes - bytes += YSF_SYNC_LENGTH_BYTES; - - CCRC::addCCITT162(m_fich, 6U); - - unsigned int b0 = ((m_fich[0U] << 4) & 0xFF0U) | ((m_fich[1U] >> 4) & 0x00FU); - unsigned int b1 = ((m_fich[1U] << 8) & 0xF00U) | ((m_fich[2U] >> 0) & 0x0FFU); - unsigned int b2 = ((m_fich[3U] << 4) & 0xFF0U) | ((m_fich[4U] >> 4) & 0x00FU); - unsigned int b3 = ((m_fich[4U] << 8) & 0xF00U) | ((m_fich[5U] >> 0) & 0x0FFU); - - unsigned int c0 = CGolay24128::encode24128(b0); - unsigned int c1 = CGolay24128::encode24128(b1); - unsigned int c2 = CGolay24128::encode24128(b2); - unsigned int c3 = CGolay24128::encode24128(b3); - - unsigned char conv[13U]; - conv[0U] = (c0 >> 16) & 0xFFU; - conv[1U] = (c0 >> 8) & 0xFFU; - conv[2U] = (c0 >> 0) & 0xFFU; - conv[3U] = (c1 >> 16) & 0xFFU; - conv[4U] = (c1 >> 8) & 0xFFU; - conv[5U] = (c1 >> 0) & 0xFFU; - conv[6U] = (c2 >> 16) & 0xFFU; - conv[7U] = (c2 >> 8) & 0xFFU; - conv[8U] = (c2 >> 0) & 0xFFU; - conv[9U] = (c3 >> 16) & 0xFFU; - conv[10U] = (c3 >> 8) & 0xFFU; - conv[11U] = (c3 >> 0) & 0xFFU; - conv[12U] = 0x00U; - - CYSFConvolution convolution; - unsigned char convolved[25U]; - convolution.encode(conv, convolved, 100U); - - unsigned int j = 0U; - for (unsigned int i = 0U; i < 100U; i++) { - unsigned int n = INTERLEAVE_TABLE[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } -} - -unsigned char CYSFFICH::getFI() const -{ - return (m_fich[0U] >> 6) & 0x03U; -} - -unsigned char CYSFFICH::getCM() const -{ - return (m_fich[0U] >> 2) & 0x03U; -} - -unsigned char CYSFFICH::getBN() const -{ - return m_fich[0U] & 0x03U; -} - -unsigned char CYSFFICH::getBT() const -{ - return (m_fich[1U] >> 6) & 0x03U; -} - -unsigned char CYSFFICH::getFN() const -{ - return (m_fich[1U] >> 3) & 0x07U; -} - -unsigned char CYSFFICH::getFT() const -{ - return m_fich[1U] & 0x07U; -} - -unsigned char CYSFFICH::getDT() const -{ - return m_fich[2U] & 0x03U; -} - -unsigned char CYSFFICH::getMR() const -{ - return (m_fich[2U] >> 3) & 0x03U; -} - -bool CYSFFICH::getDev() const -{ - return (m_fich[2U] & 0x40U) == 0x40U; -} - -bool CYSFFICH::getSQL() const -{ - return (m_fich[3U] & 0x80U) == 0x80U; -} - -unsigned char CYSFFICH::getSQ() const -{ - return m_fich[3U] & 0x7FU; -} - -void CYSFFICH::setFI(unsigned char fi) -{ - m_fich[0U] &= 0x3FU; - m_fich[0U] |= (fi << 6) & 0xC0U; -} - -void CYSFFICH::setFN(unsigned char fn) -{ - m_fich[1U] &= 0xC7U; - m_fich[1U] |= (fn << 3) & 0x38U; -} - -void CYSFFICH::setFT(unsigned char ft) -{ - m_fich[1U] &= 0xF8U; - m_fich[1U] |= ft & 0x07U; -} - -void CYSFFICH::setMR(unsigned char mr) -{ - m_fich[2U] &= 0xC7U; - m_fich[2U] |= (mr << 3) & 0x38U; -} - -void CYSFFICH::setVoIP(bool on) -{ - if (on) - m_fich[2U] |= 0x04U; - else - m_fich[2U] &= 0xFBU; -} - -void CYSFFICH::setDev(bool on) -{ - if (on) - m_fich[2U] |= 0x40U; - else - m_fich[2U] &= 0xBFU; -} - -void CYSFFICH::setSQL(bool on) -{ - if (on) - m_fich[3U] |= 0x80U; - else - m_fich[3U] &= 0x7FU; -} - -void CYSFFICH::setSQ(unsigned char sq) -{ - m_fich[3U] &= 0x80U; - m_fich[3U] |= sq & 0x7FU; -} - -CYSFFICH& CYSFFICH::operator=(const CYSFFICH& fich) -{ - if (&fich != this) - ::memcpy(m_fich, fich.m_fich, 6U); - - return *this; -} +/* + * Copyright (C) 2016,2017,2019,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "YSFConvolution.h" +#include "YSFDefines.h" +#include "Golay24128.h" +#include "YSFFICH.h" +#include "CRC.h" +#include "Log.h" + +#include +#include +#include + +const unsigned char BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; + +#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) +#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) + +const unsigned int INTERLEAVE_TABLE[] = { + 0U, 40U, 80U, 120U, 160U, + 2U, 42U, 82U, 122U, 162U, + 4U, 44U, 84U, 124U, 164U, + 6U, 46U, 86U, 126U, 166U, + 8U, 48U, 88U, 128U, 168U, + 10U, 50U, 90U, 130U, 170U, + 12U, 52U, 92U, 132U, 172U, + 14U, 54U, 94U, 134U, 174U, + 16U, 56U, 96U, 136U, 176U, + 18U, 58U, 98U, 138U, 178U, + 20U, 60U, 100U, 140U, 180U, + 22U, 62U, 102U, 142U, 182U, + 24U, 64U, 104U, 144U, 184U, + 26U, 66U, 106U, 146U, 186U, + 28U, 68U, 108U, 148U, 188U, + 30U, 70U, 110U, 150U, 190U, + 32U, 72U, 112U, 152U, 192U, + 34U, 74U, 114U, 154U, 194U, + 36U, 76U, 116U, 156U, 196U, + 38U, 78U, 118U, 158U, 198U}; + +CYSFFICH::CYSFFICH(const CYSFFICH& fich) : +m_fich(NULL) +{ + m_fich = new unsigned char[6U]; + + ::memcpy(m_fich, fich.m_fich, 6U); +} + +CYSFFICH::CYSFFICH() : +m_fich(NULL) +{ + m_fich = new unsigned char[6U]; + + memset(m_fich, 0x00U, 6U); +} + +CYSFFICH::~CYSFFICH() +{ + delete[] m_fich; +} + +bool CYSFFICH::decode(const unsigned char* bytes) +{ + assert(bytes != NULL); + + // Skip the sync bytes + bytes += YSF_SYNC_LENGTH_BYTES; + + CYSFConvolution viterbi; + viterbi.start(); + + // Deinterleave the FICH and send bits to the Viterbi decoder + for (unsigned int i = 0U; i < 100U; i++) { + unsigned int n = INTERLEAVE_TABLE[i]; + uint8_t s0 = READ_BIT1(bytes, n) ? 1U : 0U; + + n++; + uint8_t s1 = READ_BIT1(bytes, n) ? 1U : 0U; + + viterbi.decode(s0, s1); + } + + unsigned char output[13U]; + viterbi.chainback(output, 96U); + + unsigned int b0, b1, b2, b3; + bool valid0 = CGolay24128::decode24128(output + 0U, b0); + bool valid1 = CGolay24128::decode24128(output + 3U, b1); + bool valid2 = CGolay24128::decode24128(output + 6U, b2); + bool valid3 = CGolay24128::decode24128(output + 9U, b3); + + if (!valid0 || !valid1 || !valid2 || !valid3) + return false; + + m_fich[0U] = (b0 >> 4) & 0xFFU; + m_fich[1U] = ((b0 << 4) & 0xF0U) | ((b1 >> 8) & 0x0FU); + m_fich[2U] = (b1 >> 0) & 0xFFU; + m_fich[3U] = (b2 >> 4) & 0xFFU; + m_fich[4U] = ((b2 << 4) & 0xF0U) | ((b3 >> 8) & 0x0FU); + m_fich[5U] = (b3 >> 0) & 0xFFU; + + return CCRC::checkCCITT162(m_fich, 6U); +} + +void CYSFFICH::encode(unsigned char* bytes) +{ + assert(bytes != NULL); + + // Skip the sync bytes + bytes += YSF_SYNC_LENGTH_BYTES; + + CCRC::addCCITT162(m_fich, 6U); + + unsigned int b0 = ((m_fich[0U] << 4) & 0xFF0U) | ((m_fich[1U] >> 4) & 0x00FU); + unsigned int b1 = ((m_fich[1U] << 8) & 0xF00U) | ((m_fich[2U] >> 0) & 0x0FFU); + unsigned int b2 = ((m_fich[3U] << 4) & 0xFF0U) | ((m_fich[4U] >> 4) & 0x00FU); + unsigned int b3 = ((m_fich[4U] << 8) & 0xF00U) | ((m_fich[5U] >> 0) & 0x0FFU); + + unsigned int c0 = CGolay24128::encode24128(b0); + unsigned int c1 = CGolay24128::encode24128(b1); + unsigned int c2 = CGolay24128::encode24128(b2); + unsigned int c3 = CGolay24128::encode24128(b3); + + unsigned char conv[13U]; + conv[0U] = (c0 >> 16) & 0xFFU; + conv[1U] = (c0 >> 8) & 0xFFU; + conv[2U] = (c0 >> 0) & 0xFFU; + conv[3U] = (c1 >> 16) & 0xFFU; + conv[4U] = (c1 >> 8) & 0xFFU; + conv[5U] = (c1 >> 0) & 0xFFU; + conv[6U] = (c2 >> 16) & 0xFFU; + conv[7U] = (c2 >> 8) & 0xFFU; + conv[8U] = (c2 >> 0) & 0xFFU; + conv[9U] = (c3 >> 16) & 0xFFU; + conv[10U] = (c3 >> 8) & 0xFFU; + conv[11U] = (c3 >> 0) & 0xFFU; + conv[12U] = 0x00U; + + CYSFConvolution convolution; + unsigned char convolved[25U]; + convolution.encode(conv, convolved, 100U); + + unsigned int j = 0U; + for (unsigned int i = 0U; i < 100U; i++) { + unsigned int n = INTERLEAVE_TABLE[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } +} + +unsigned char CYSFFICH::getFI() const +{ + return (m_fich[0U] >> 6) & 0x03U; +} + +unsigned char CYSFFICH::getCM() const +{ + return (m_fich[0U] >> 2) & 0x03U; +} + +unsigned char CYSFFICH::getBN() const +{ + return m_fich[0U] & 0x03U; +} + +unsigned char CYSFFICH::getBT() const +{ + return (m_fich[1U] >> 6) & 0x03U; +} + +unsigned char CYSFFICH::getFN() const +{ + return (m_fich[1U] >> 3) & 0x07U; +} + +unsigned char CYSFFICH::getFT() const +{ + return m_fich[1U] & 0x07U; +} + +unsigned char CYSFFICH::getDT() const +{ + return m_fich[2U] & 0x03U; +} + +unsigned char CYSFFICH::getMR() const +{ + return (m_fich[2U] >> 3) & 0x03U; +} + +bool CYSFFICH::getDev() const +{ + return (m_fich[2U] & 0x40U) == 0x40U; +} + +unsigned char CYSFFICH::getDGId() const +{ + return m_fich[3U] & 0x7FU; +} + +void CYSFFICH::setFI(unsigned char fi) +{ + m_fich[0U] &= 0x3FU; + m_fich[0U] |= (fi << 6) & 0xC0U; +} + +void CYSFFICH::setBN(unsigned char bn) +{ + m_fich[0U] &= 0xFCU; + m_fich[0U] |= bn & 0x03U; +} + +void CYSFFICH::setBT(unsigned char bt) +{ + m_fich[1U] &= 0x3FU; + m_fich[1U] |= (bt << 6) & 0xC0U; +} + +void CYSFFICH::setFN(unsigned char fn) +{ + m_fich[1U] &= 0xC7U; + m_fich[1U] |= (fn << 3) & 0x38U; +} + +void CYSFFICH::setFT(unsigned char ft) +{ + m_fich[1U] &= 0xF8U; + m_fich[1U] |= ft & 0x07U; +} + +void CYSFFICH::setMR(unsigned char mr) +{ + m_fich[2U] &= 0xC7U; + m_fich[2U] |= (mr << 3) & 0x38U; +} + +void CYSFFICH::setVoIP(bool on) +{ + if (on) + m_fich[2U] |= 0x04U; + else + m_fich[2U] &= 0xFBU; +} + +void CYSFFICH::setDev(bool on) +{ + if (on) + m_fich[2U] |= 0x40U; + else + m_fich[2U] &= 0xBFU; +} + +void CYSFFICH::setDGId(unsigned char id) +{ + m_fich[3U] &= 0x80U; + m_fich[3U] |= id & 0x7FU; +} + +CYSFFICH& CYSFFICH::operator=(const CYSFFICH& fich) +{ + if (&fich != this) + ::memcpy(m_fich, fich.m_fich, 6U); + + return *this; +} diff --git a/YSFFICH.h b/YSFFICH.h index 8a12034c5..a6e8851e8 100644 --- a/YSFFICH.h +++ b/YSFFICH.h @@ -1,59 +1,59 @@ -/* - * Copyright (C) 2016,2017 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#if !defined(YSFFICH_H) -#define YSFFICH_H - -class CYSFFICH { -public: - CYSFFICH(const CYSFFICH& fich); - CYSFFICH(); - ~CYSFFICH(); - - bool decode(const unsigned char* bytes); - - void encode(unsigned char* bytes); - - unsigned char getFI() const; - unsigned char getCM() const; - unsigned char getBN() const; - unsigned char getBT() const; - unsigned char getFN() const; - unsigned char getFT() const; - unsigned char getDT() const; - unsigned char getMR() const; - bool getDev() const; - bool getSQL() const; - unsigned char getSQ() const; - - void setFI(unsigned char fi); - void setFN(unsigned char fn); - void setFT(unsigned char ft); - void setMR(unsigned char mr); - void setVoIP(bool set); - void setDev(bool set); - void setSQL(bool set); - void setSQ(unsigned char sq); - - CYSFFICH& operator=(const CYSFFICH& fich); - -private: - unsigned char* m_fich; -}; - -#endif +/* + * Copyright (C) 2016,2017,2019,2020 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(YSFFICH_H) +#define YSFFICH_H + +class CYSFFICH { +public: + CYSFFICH(const CYSFFICH& fich); + CYSFFICH(); + ~CYSFFICH(); + + bool decode(const unsigned char* bytes); + + void encode(unsigned char* bytes); + + unsigned char getFI() const; + unsigned char getCM() const; + unsigned char getBN() const; + unsigned char getBT() const; + unsigned char getFN() const; + unsigned char getFT() const; + unsigned char getDT() const; + unsigned char getMR() const; + bool getDev() const; + unsigned char getDGId() const; + + void setFI(unsigned char fi); + void setBN(unsigned char bn); + void setBT(unsigned char bt); + void setFN(unsigned char fn); + void setFT(unsigned char ft); + void setMR(unsigned char mr); + void setVoIP(bool set); + void setDev(bool set); + void setDGId(unsigned char id); + + CYSFFICH& operator=(const CYSFFICH& fich); + +private: + unsigned char* m_fich; +}; + +#endif diff --git a/YSFNetwork.cpp b/YSFNetwork.cpp index 63518b459..d41d65110 100644 --- a/YSFNetwork.cpp +++ b/YSFNetwork.cpp @@ -1,201 +1,206 @@ -/* - * Copyright (C) 2009-2014,2016 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "YSFDefines.h" -#include "YSFNetwork.h" -#include "Defines.h" -#include "Utils.h" -#include "Log.h" - -#include -#include -#include - -const unsigned int BUFFER_LENGTH = 200U; - -CYSFNetwork::CYSFNetwork(const std::string& myAddress, unsigned int myPort, const std::string& gatewayAddress, unsigned int gatewayPort, const std::string& callsign, bool debug) : -m_socket(myAddress, myPort), -m_address(), -m_port(gatewayPort), -m_callsign(), -m_debug(debug), -m_enabled(false), -m_buffer(1000U, "YSF Network"), -m_pollTimer(1000U, 5U), -m_tag(NULL) -{ - m_callsign = callsign; - m_callsign.resize(YSF_CALLSIGN_LENGTH, ' '); - - m_address = CUDPSocket::lookup(gatewayAddress); - - m_tag = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memset(m_tag, ' ', YSF_CALLSIGN_LENGTH); -} - -CYSFNetwork::~CYSFNetwork() -{ - delete[] m_tag; -} - -bool CYSFNetwork::open() -{ - LogMessage("Opening YSF network connection"); - - if (m_address.s_addr == INADDR_NONE) - return false; - - m_pollTimer.start(); - - return m_socket.open(); -} - -bool CYSFNetwork::write(const unsigned char* src, const unsigned char* dest, const unsigned char* data, unsigned int count, bool end) -{ - assert(data != NULL); - - unsigned char buffer[200U]; - - buffer[0] = 'Y'; - buffer[1] = 'S'; - buffer[2] = 'F'; - buffer[3] = 'D'; - - for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) - buffer[i + 4U] = m_callsign.at(i); - - if (src != NULL) - ::memcpy(buffer + 14U, src, YSF_CALLSIGN_LENGTH); - else - ::memset(buffer + 14U, ' ', YSF_CALLSIGN_LENGTH); - - if (dest != NULL) - ::memcpy(buffer + 24U, dest, YSF_CALLSIGN_LENGTH); - else - ::memset(buffer + 24U, ' ', YSF_CALLSIGN_LENGTH); - - buffer[34U] = end ? 0x01U : 0x00U; - buffer[34U] |= (count & 0x7FU) << 1; - - ::memcpy(buffer + 35U, data, YSF_FRAME_LENGTH_BYTES); - - if (m_debug) - CUtils::dump(1U, "YSF Network Data Sent", buffer, 155U); - - return m_socket.write(buffer, 155U, m_address, m_port); -} - -bool CYSFNetwork::writePoll() -{ - unsigned char buffer[20U]; - - buffer[0] = 'Y'; - buffer[1] = 'S'; - buffer[2] = 'F'; - buffer[3] = 'P'; - - for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) - buffer[i + 4U] = m_callsign.at(i); - - if (m_debug) - CUtils::dump(1U, "YSF Network Poll Sent", buffer, 14U); - - return m_socket.write(buffer, 14U, m_address, m_port); -} - -void CYSFNetwork::clock(unsigned int ms) -{ - m_pollTimer.clock(ms); - if (m_pollTimer.hasExpired()) { - writePoll(); - m_pollTimer.start(); - } - - unsigned char buffer[BUFFER_LENGTH]; - - in_addr address; - unsigned int port; - int length = m_socket.read(buffer, BUFFER_LENGTH, address, port); - if (length <= 0) - return; - - // Check if the data is for us - if (m_address.s_addr != address.s_addr || m_port != port) { - LogMessage("YSF packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port); - return; - } - - // Ignore incoming polls - if (::memcmp(buffer, "YSFP", 4U) == 0) - return; - - // Invalid packet type? - if (::memcmp(buffer, "YSFD", 4U) != 0) - return; - - if (!m_enabled) - return; - - if (m_debug) - CUtils::dump(1U, "YSF Network Data Received", buffer, length); - - if (::memcmp(m_tag, " ", YSF_CALLSIGN_LENGTH) == 0) { - ::memcpy(m_tag, buffer + 4U, YSF_CALLSIGN_LENGTH); - } else { - if (::memcmp(m_tag, buffer + 4U, YSF_CALLSIGN_LENGTH) != 0) - return; - } - - bool end = (buffer[34U] & 0x01U) == 0x01U; - if (end) - ::memset(m_tag, ' ', YSF_CALLSIGN_LENGTH); - - m_buffer.addData(buffer, 155U); -} - -unsigned int CYSFNetwork::read(unsigned char* data) -{ - assert(data != NULL); - - if (m_buffer.isEmpty()) - return 0U; - - m_buffer.getData(data, 155U); - - return 155U; -} - -void CYSFNetwork::reset() -{ - ::memset(m_tag, ' ', YSF_CALLSIGN_LENGTH); -} - -void CYSFNetwork::close() -{ - m_socket.close(); - - LogMessage("Closing YSF network connection"); -} - -void CYSFNetwork::enable(bool enabled) -{ - if (enabled && !m_enabled) - reset(); - - m_enabled = enabled; -} +/* + * Copyright (C) 2009-2014,2016,2019,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "YSFDefines.h" +#include "YSFNetwork.h" +#include "Defines.h" +#include "Utils.h" +#include "Log.h" + +#include +#include +#include + +const unsigned int BUFFER_LENGTH = 200U; + +CYSFNetwork::CYSFNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& callsign, bool debug) : +m_socket(localAddress, localPort), +m_addr(), +m_addrLen(0U), +m_callsign(), +m_debug(debug), +m_enabled(false), +m_buffer(1000U, "YSF Network"), +m_pollTimer(1000U, 5U), +m_tag(NULL) +{ + m_callsign = callsign; + m_callsign.resize(YSF_CALLSIGN_LENGTH, ' '); + + if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0) + m_addrLen = 0U; + + m_tag = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memset(m_tag, ' ', YSF_CALLSIGN_LENGTH); +} + +CYSFNetwork::~CYSFNetwork() +{ + delete[] m_tag; +} + +bool CYSFNetwork::open() +{ + if (m_addrLen == 0U) { + LogError("Unable to resolve the address of the YSF Gateway"); + return false; + } + + LogMessage("Opening YSF network connection"); + + m_pollTimer.start(); + + return m_socket.open(m_addr); +} + +bool CYSFNetwork::write(const unsigned char* src, const unsigned char* dest, const unsigned char* data, unsigned int count, bool end) +{ + assert(data != NULL); + + unsigned char buffer[200U]; + + buffer[0] = 'Y'; + buffer[1] = 'S'; + buffer[2] = 'F'; + buffer[3] = 'D'; + + for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) + buffer[i + 4U] = m_callsign.at(i); + + if (src != NULL) + ::memcpy(buffer + 14U, src, YSF_CALLSIGN_LENGTH); + else + ::memset(buffer + 14U, ' ', YSF_CALLSIGN_LENGTH); + + if (dest != NULL) + ::memcpy(buffer + 24U, dest, YSF_CALLSIGN_LENGTH); + else + ::memset(buffer + 24U, ' ', YSF_CALLSIGN_LENGTH); + + buffer[34U] = end ? 0x01U : 0x00U; + buffer[34U] |= (count & 0x7FU) << 1; + + ::memcpy(buffer + 35U, data, YSF_FRAME_LENGTH_BYTES); + + if (m_debug) + CUtils::dump(1U, "YSF Network Data Sent", buffer, 155U); + + return m_socket.write(buffer, 155U, m_addr, m_addrLen); +} + +bool CYSFNetwork::writePoll() +{ + unsigned char buffer[20U]; + + buffer[0] = 'Y'; + buffer[1] = 'S'; + buffer[2] = 'F'; + buffer[3] = 'P'; + + for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) + buffer[i + 4U] = m_callsign.at(i); + + if (m_debug) + CUtils::dump(1U, "YSF Network Poll Sent", buffer, 14U); + + return m_socket.write(buffer, 14U, m_addr, m_addrLen); +} + +void CYSFNetwork::clock(unsigned int ms) +{ + m_pollTimer.clock(ms); + if (m_pollTimer.hasExpired()) { + writePoll(); + m_pollTimer.start(); + } + + unsigned char buffer[BUFFER_LENGTH]; + + sockaddr_storage address; + unsigned int addrLen; + int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrLen); + if (length <= 0) + return; + + if (!CUDPSocket::match(m_addr, address)) { + LogMessage("YSF, packet received from an invalid source"); + return; + } + + if (m_debug) + CUtils::dump(1U, "YSF Network Data Received", buffer, length); + + // Invalid packet type? + if (::memcmp(buffer, "YSFD", 4U) != 0) + return; + + if (!m_enabled) + return; + + if (::memcmp(m_tag, " ", YSF_CALLSIGN_LENGTH) == 0) { + ::memcpy(m_tag, buffer + 4U, YSF_CALLSIGN_LENGTH); + } else { + if (::memcmp(m_tag, buffer + 4U, YSF_CALLSIGN_LENGTH) != 0) + return; + } + + bool end = (buffer[34U] & 0x01U) == 0x01U; + if (end) + ::memset(m_tag, ' ', YSF_CALLSIGN_LENGTH); + + m_buffer.addData(buffer, 155U); +} + +unsigned int CYSFNetwork::read(unsigned char* data) +{ + assert(data != NULL); + + if (m_buffer.isEmpty()) + return 0U; + + m_buffer.getData(data, 155U); + + return 155U; +} + +void CYSFNetwork::reset() +{ + ::memset(m_tag, ' ', YSF_CALLSIGN_LENGTH); +} + +bool CYSFNetwork::isConnected() const +{ + return (m_addrLen != 0U); +} + +void CYSFNetwork::close() +{ + m_socket.close(); + + LogMessage("Closing YSF network connection"); +} + +void CYSFNetwork::enable(bool enabled) +{ + if (enabled && !m_enabled) + reset(); + else if (!enabled && m_enabled) + m_buffer.clear(); + + m_enabled = enabled; +} diff --git a/YSFNetwork.h b/YSFNetwork.h index e9a430f98..918134b8f 100644 --- a/YSFNetwork.h +++ b/YSFNetwork.h @@ -1,63 +1,65 @@ -/* - * Copyright (C) 2009-2014,2016 by Jonathan Naylor G4KLX - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef YSFNetwork_H -#define YSFNetwork_H - -#include "YSFDefines.h" -#include "RingBuffer.h" -#include "UDPSocket.h" -#include "Timer.h" - -#include -#include - -class CYSFNetwork { -public: - CYSFNetwork(const std::string& myAddress, unsigned int myPort, const std::string& gatewayAddress, unsigned int gatewayPort, const std::string& callsign, bool debug); - ~CYSFNetwork(); - - bool open(); - - void enable(bool enabled); - - bool write(const unsigned char* src, const unsigned char* dest, const unsigned char* data, unsigned int count, bool end); - - unsigned int read(unsigned char* data); - - void reset(); - - void close(); - - void clock(unsigned int ms); - -private: - CUDPSocket m_socket; - in_addr m_address; - unsigned int m_port; - std::string m_callsign; - bool m_debug; - bool m_enabled; - CRingBuffer m_buffer; - CTimer m_pollTimer; - unsigned char* m_tag; - - bool writePoll(); -}; - -#endif +/* + * Copyright (C) 2009-2014,2016,2020,2021 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef YSFNetwork_H +#define YSFNetwork_H + +#include "YSFDefines.h" +#include "RingBuffer.h" +#include "UDPSocket.h" +#include "Timer.h" + +#include +#include + +class CYSFNetwork { +public: + CYSFNetwork(const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, const std::string& callsign, bool debug); + ~CYSFNetwork(); + + bool open(); + + void enable(bool enabled); + + bool write(const unsigned char* src, const unsigned char* dest, const unsigned char* data, unsigned int count, bool end); + + unsigned int read(unsigned char* data); + + void reset(); + + bool isConnected() const; + + void close(); + + void clock(unsigned int ms); + +private: + CUDPSocket m_socket; + sockaddr_storage m_addr; + unsigned int m_addrLen; + std::string m_callsign; + bool m_debug; + bool m_enabled; + CRingBuffer m_buffer; + CTimer m_pollTimer; + unsigned char* m_tag; + + bool writePoll(); +}; + +#endif diff --git a/YSFPayload.cpp b/YSFPayload.cpp index 41e4d173f..f0fa17f4c 100644 --- a/YSFPayload.cpp +++ b/YSFPayload.cpp @@ -1,957 +1,1027 @@ -/* -* Copyright (C) 2016,2017 Jonathan Naylor, G4KLX -* Copyright (C) 2016 Mathias Weyland, HB9FRV -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; version 2 of the License. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -*/ - -#include "YSFConvolution.h" -#include "YSFPayload.h" -#include "YSFDefines.h" -#include "Utils.h" -#include "CRC.h" -#include "Log.h" - -#include -#include -#include -#include - -const unsigned int INTERLEAVE_TABLE_9_20[] = { - 0U, 40U, 80U, 120U, 160U, 200U, 240U, 280U, 320U, - 2U, 42U, 82U, 122U, 162U, 202U, 242U, 282U, 322U, - 4U, 44U, 84U, 124U, 164U, 204U, 244U, 284U, 324U, - 6U, 46U, 86U, 126U, 166U, 206U, 246U, 286U, 326U, - 8U, 48U, 88U, 128U, 168U, 208U, 248U, 288U, 328U, - 10U, 50U, 90U, 130U, 170U, 210U, 250U, 290U, 330U, - 12U, 52U, 92U, 132U, 172U, 212U, 252U, 292U, 332U, - 14U, 54U, 94U, 134U, 174U, 214U, 254U, 294U, 334U, - 16U, 56U, 96U, 136U, 176U, 216U, 256U, 296U, 336U, - 18U, 58U, 98U, 138U, 178U, 218U, 258U, 298U, 338U, - 20U, 60U, 100U, 140U, 180U, 220U, 260U, 300U, 340U, - 22U, 62U, 102U, 142U, 182U, 222U, 262U, 302U, 342U, - 24U, 64U, 104U, 144U, 184U, 224U, 264U, 304U, 344U, - 26U, 66U, 106U, 146U, 186U, 226U, 266U, 306U, 346U, - 28U, 68U, 108U, 148U, 188U, 228U, 268U, 308U, 348U, - 30U, 70U, 110U, 150U, 190U, 230U, 270U, 310U, 350U, - 32U, 72U, 112U, 152U, 192U, 232U, 272U, 312U, 352U, - 34U, 74U, 114U, 154U, 194U, 234U, 274U, 314U, 354U, - 36U, 76U, 116U, 156U, 196U, 236U, 276U, 316U, 356U, - 38U, 78U, 118U, 158U, 198U, 238U, 278U, 318U, 358U}; - -const unsigned int INTERLEAVE_TABLE_5_20[] = { - 0U, 40U, 80U, 120U, 160U, - 2U, 42U, 82U, 122U, 162U, - 4U, 44U, 84U, 124U, 164U, - 6U, 46U, 86U, 126U, 166U, - 8U, 48U, 88U, 128U, 168U, - 10U, 50U, 90U, 130U, 170U, - 12U, 52U, 92U, 132U, 172U, - 14U, 54U, 94U, 134U, 174U, - 16U, 56U, 96U, 136U, 176U, - 18U, 58U, 98U, 138U, 178U, - 20U, 60U, 100U, 140U, 180U, - 22U, 62U, 102U, 142U, 182U, - 24U, 64U, 104U, 144U, 184U, - 26U, 66U, 106U, 146U, 186U, - 28U, 68U, 108U, 148U, 188U, - 30U, 70U, 110U, 150U, 190U, - 32U, 72U, 112U, 152U, 192U, - 34U, 74U, 114U, 154U, 194U, - 36U, 76U, 116U, 156U, 196U, - 38U, 78U, 118U, 158U, 198U}; - -// This one differs from the others in that it interleaves bits and not dibits -const unsigned int INTERLEAVE_TABLE_26_4[] = { - 0U, 4U, 8U, 12U, 16U, 20U, 24U, 28U, 32U, 36U, 40U, 44U, 48U, 52U, 56U, 60U, 64U, 68U, 72U, 76U, 80U, 84U, 88U, 92U, 96U, 100U, - 1U, 5U, 9U, 13U, 17U, 21U, 25U, 29U, 33U, 37U, 41U, 45U, 49U, 53U, 57U, 61U, 65U, 69U, 73U, 77U, 81U, 85U, 89U, 93U, 97U, 101U, - 2U, 6U, 10U, 14U, 18U, 22U, 26U, 30U, 34U, 38U, 42U, 46U, 50U, 54U, 58U, 62U, 66U, 70U, 74U, 78U, 82U, 86U, 90U, 94U, 98U, 102U, - 3U, 7U, 11U, 15U, 19U, 23U, 27U, 31U, 35U, 39U, 43U, 47U, 51U, 55U, 59U, 63U, 67U, 71U, 75U, 79U, 83U, 87U, 91U, 95U, 99U, 103U}; - -const unsigned char WHITENING_DATA[] = {0x93U, 0xD7U, 0x51U, 0x21U, 0x9CU, 0x2FU, 0x6CU, 0xD0U, 0xEFU, 0x0FU, - 0xF8U, 0x3DU, 0xF1U, 0x73U, 0x20U, 0x94U, 0xEDU, 0x1EU, 0x7CU, 0xD8U}; - -const unsigned char BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; - -#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) -#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) - -CYSFPayload::CYSFPayload() : -m_uplink(NULL), -m_downlink(NULL), -m_source(NULL), -m_dest(NULL), -m_fec() -{ -} - -CYSFPayload::~CYSFPayload() -{ - delete[] m_uplink; - delete[] m_downlink; - delete[] m_source; - delete[] m_dest; -} - -bool CYSFPayload::processHeaderData(unsigned char* data) -{ - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - unsigned char dch[45U]; - - unsigned char* p1 = data; - unsigned char* p2 = dch; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p2, p1, 9U); - p1 += 18U; p2 += 9U; - } - - CYSFConvolution conv; - conv.start(); - - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; - - n++; - uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; - - conv.decode(s0, s1); - } - - unsigned char output[23U]; - conv.chainback(output, 176U); - - bool valid1 = CCRC::checkCCITT162(output, 22U); - if (valid1) { - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - if (m_dest == NULL) { - m_dest = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memcpy(m_dest, output + 0U, YSF_CALLSIGN_LENGTH); - } - - if (m_source == NULL) { - m_source = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memcpy(m_source, output + YSF_CALLSIGN_LENGTH, YSF_CALLSIGN_LENGTH); - } - - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - CCRC::addCCITT162(output, 22U); - output[22U] = 0x00U; - - unsigned char convolved[45U]; - conv.encode(output, convolved, 180U); - - unsigned char bytes[45U]; - unsigned int j = 0U; - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } - - p1 = data; - p2 = bytes; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p1, p2, 9U); - p1 += 18U; p2 += 9U; - } - } - - p1 = data + 9U; - p2 = dch; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p2, p1, 9U); - p1 += 18U; p2 += 9U; - } - - conv.start(); - - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; - - n++; - uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; - - conv.decode(s0, s1); - } - - conv.chainback(output, 176U); - - bool valid2 = CCRC::checkCCITT162(output, 22U); - if (valid2) { - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - if (m_downlink != NULL) - ::memcpy(output + 0U, m_downlink, YSF_CALLSIGN_LENGTH); - - if (m_uplink != NULL) - ::memcpy(output + YSF_CALLSIGN_LENGTH, m_uplink, YSF_CALLSIGN_LENGTH); - - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - CCRC::addCCITT162(output, 22U); - output[22U] = 0x00U; - - unsigned char convolved[45U]; - conv.encode(output, convolved, 180U); - - unsigned char bytes[45U]; - unsigned int j = 0U; - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } - - p1 = data + 9U; - p2 = bytes; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p1, p2, 9U); - p1 += 18U; p2 += 9U; - } - } - - return valid1; -} - -unsigned int CYSFPayload::processVDMode1Audio(unsigned char* data) -{ - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - // Regenerate the AMBE FEC - unsigned int errors = 0U; - errors += m_fec.regenerateYSFDN(data + 9U); - errors += m_fec.regenerateYSFDN(data + 27U); - errors += m_fec.regenerateYSFDN(data + 45U); - errors += m_fec.regenerateYSFDN(data + 63U); - errors += m_fec.regenerateYSFDN(data + 81U); - - return errors; -} - -bool CYSFPayload::processVDMode1Data(unsigned char* data, unsigned char fn, bool gateway) -{ - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - unsigned char dch[45U]; - - unsigned char* p1 = data; - unsigned char* p2 = dch; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p2, p1, 9U); - p1 += 18U; p2 += 9U; - } - - CYSFConvolution conv; - conv.start(); - - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; - - n++; - uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; - - conv.decode(s0, s1); - } - - unsigned char output[23U]; - conv.chainback(output, 176U); - - bool ret = CCRC::checkCCITT162(output, 22U); - if (ret) { - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - switch (fn) { - case 0U: - if (m_dest == NULL) { - m_dest = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memcpy(m_dest, output + 0U, YSF_CALLSIGN_LENGTH); - } - - if (m_source == NULL) { - m_source = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memcpy(m_source, output + YSF_CALLSIGN_LENGTH, YSF_CALLSIGN_LENGTH); - } - - break; - - case 1U: - if (m_downlink != NULL && !gateway) - ::memcpy(output + 0U, m_downlink, YSF_CALLSIGN_LENGTH); - - if (m_uplink != NULL && !gateway) - ::memcpy(output + YSF_CALLSIGN_LENGTH, m_uplink, YSF_CALLSIGN_LENGTH); - - break; - - case 3U: - CUtils::dump(1U, "V/D Mode 1 Data, DT1", output, 20U); - break; - - case 4U: - CUtils::dump(1U, "V/D Mode 1 Data, DT2", output, 20U); - break; - - case 5U: - CUtils::dump(1U, "V/D Mode 1 Data, DT3", output, 20U); - break; - - case 6U: - CUtils::dump(1U, "V/D Mode 1 Data, DT4", output, 20U); - break; - - case 7U: - CUtils::dump(1U, "V/D Mode 1 Data, DT5", output, 20U); - break; - - default: - break; - } - - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - CCRC::addCCITT162(output, 22U); - output[22U] = 0x00U; - - unsigned char convolved[45U]; - conv.encode(output, convolved, 180U); - - unsigned char bytes[45U]; - unsigned int j = 0U; - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } - - p1 = data; - p2 = bytes; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p1, p2, 9U); - p1 += 18U; p2 += 9U; - } - } - - return ret && (fn == 0U); -} - -unsigned int CYSFPayload::processVDMode2Audio(unsigned char* data) -{ - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - unsigned int errors = 0U; - unsigned int offset = 40U; // DCH(0) - - // We have a total of 5 VCH sections, iterate through each - for (unsigned int j = 0U; j < 5U; j++, offset += 144U) { - unsigned int errs = 0U; - - unsigned char vch[13U]; - - // Deinterleave - for (unsigned int i = 0U; i < 104U; i++) { - unsigned int n = INTERLEAVE_TABLE_26_4[i]; - bool s = READ_BIT1(data, offset + n); - WRITE_BIT1(vch, i, s); - } - - // "Un-whiten" (descramble) - for (unsigned int i = 0U; i < 13U; i++) - vch[i] ^= WHITENING_DATA[i]; - - // errors += READ_BIT1(vch, 103); // Padding bit must be zero but apparently it is not... - - for (unsigned int i = 0U; i < 81U; i += 3) { - uint8_t vote = 0U; - vote += READ_BIT1(vch, i + 0U) ? 1U : 0U; - vote += READ_BIT1(vch, i + 1U) ? 1U : 0U; - vote += READ_BIT1(vch, i + 2U) ? 1U : 0U; - - switch (vote) { - case 1U: // 1 0 0, or 0 1 0, or 0 0 1, convert to 0 0 0 - WRITE_BIT1(vch, i + 0U, false); - WRITE_BIT1(vch, i + 1U, false); - WRITE_BIT1(vch, i + 2U, false); - errs++; - break; - case 2U: // 1 1 0, or 0 1 1, or 1 0 1, convert to 1 1 1 - WRITE_BIT1(vch, i + 0U, true); - WRITE_BIT1(vch, i + 1U, true); - WRITE_BIT1(vch, i + 2U, true); - errs++; - break; - default: // 0U (0 0 0), or 3U (1 1 1), no errors - break; - } - } - - // Reconstruct only if we have bit errors. - if (errs > 0U) { - // Accumulate the total number of errors - errors += errs; - - // Scramble - for (unsigned int i = 0U; i < 13U; i++) - vch[i] ^= WHITENING_DATA[i]; - - // Interleave - for (unsigned int i = 0U; i < 104U; i++) { - unsigned int n = INTERLEAVE_TABLE_26_4[i]; - bool s = READ_BIT1(vch, i); - WRITE_BIT1(data, offset + n, s); - } - } - } - - // "errors" is the number of triplets that were recognized to be corrupted - // and that were corrected. There are 27 of those per VCH and 5 VCH per CC, - // yielding a total of 27*5 = 135. I believe the expected value of this - // error distribution to be Bin(1;3,BER)+Bin(2;3,BER) which entails 75% for - // BER = 0.5. - return errors; -} - -bool CYSFPayload::processVDMode2Data(unsigned char* data, unsigned char fn, bool gateway) -{ - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - unsigned char dch[25U]; - - unsigned char* p1 = data; - unsigned char* p2 = dch; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p2, p1, 5U); - p1 += 18U; p2 += 5U; - } - - CYSFConvolution conv; - conv.start(); - - for (unsigned int i = 0U; i < 100U; i++) { - unsigned int n = INTERLEAVE_TABLE_5_20[i]; - uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; - - n++; - uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; - - conv.decode(s0, s1); - } - - unsigned char output[13U]; - conv.chainback(output, 96U); - - bool ret = CCRC::checkCCITT162(output, 12U); - if (ret) { - for (unsigned int i = 0U; i < 10U; i++) - output[i] ^= WHITENING_DATA[i]; - - switch (fn) { - case 0U: - if (m_dest == NULL) { - m_dest = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memcpy(m_dest, output, YSF_CALLSIGN_LENGTH); - } - break; - - case 1U: - if (m_source == NULL) { - m_source = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memcpy(m_source, output, YSF_CALLSIGN_LENGTH); - } - break; - - case 2U: - if (m_downlink != NULL && !gateway) - ::memcpy(output, m_downlink, YSF_CALLSIGN_LENGTH); - break; - - case 3U: - if (m_uplink != NULL && !gateway) - ::memcpy(output, m_uplink, YSF_CALLSIGN_LENGTH); - break; - - case 6U: - CUtils::dump(1U, "V/D Mode 2 Data, DT1", output, YSF_CALLSIGN_LENGTH); - break; - - case 7U: - CUtils::dump(1U, "V/D Mode 2 Data, DT2", output, YSF_CALLSIGN_LENGTH); - break; - - default: - break; - } - - for (unsigned int i = 0U; i < 10U; i++) - output[i] ^= WHITENING_DATA[i]; - - CCRC::addCCITT162(output, 12U); - output[12U] = 0x00U; - - unsigned char convolved[25U]; - conv.encode(output, convolved, 100U); - - unsigned char bytes[25U]; - unsigned int j = 0U; - for (unsigned int i = 0U; i < 100U; i++) { - unsigned int n = INTERLEAVE_TABLE_5_20[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } - - p1 = data; - p2 = bytes; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p1, p2, 5U); - p1 += 18U; p2 += 5U; - } - } - - return ret && (fn == 0U || fn == 1U); -} - -bool CYSFPayload::processDataFRModeData(unsigned char* data, unsigned char fn, bool gateway) -{ - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - unsigned char dch[45U]; - - unsigned char* p1 = data; - unsigned char* p2 = dch; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p2, p1, 9U); - p1 += 18U; p2 += 9U; - } - - CYSFConvolution conv; - conv.start(); - - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; - - n++; - uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; - - conv.decode(s0, s1); - } - - unsigned char output[23U]; - conv.chainback(output, 176U); - - bool ret1 = CCRC::checkCCITT162(output, 22U); - if (ret1) { - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - switch (fn) { - case 0U: - CUtils::dump(1U, "FR Mode Data, CSD1", output, 20U); - - if (m_dest == NULL) { - m_dest = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memcpy(m_dest, output + 0U, YSF_CALLSIGN_LENGTH); - } - - if (m_source == NULL) { - m_source = new unsigned char[YSF_CALLSIGN_LENGTH]; - ::memcpy(m_source, output + YSF_CALLSIGN_LENGTH, YSF_CALLSIGN_LENGTH); - } - - break; - - case 1U: - CUtils::dump(1U, "FR Mode Data, CSD3", output, 20U); - break; - - case 2U: - CUtils::dump(1U, "FR Mode Data, DT2", output, 20U); - break; - - case 3U: - CUtils::dump(1U, "FR Mode Data, DT4", output, 20U); - break; - - case 4U: - CUtils::dump(1U, "FR Mode Data, DT6", output, 20U); - break; - - case 5U: - CUtils::dump(1U, "FR Mode Data, DT8", output, 20U); - break; - - case 6U: - CUtils::dump(1U, "FR Mode Data, DT10", output, 20U); - break; - - case 7U: - CUtils::dump(1U, "FR Mode Data, DT12", output, 20U); - break; - - default: - break; - } - - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - CCRC::addCCITT162(output, 22U); - output[22U] = 0x00U; - - unsigned char convolved[45U]; - conv.encode(output, convolved, 180U); - - unsigned char bytes[45U]; - unsigned int j = 0U; - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } - - p1 = data; - p2 = bytes; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p1, p2, 9U); - p1 += 18U; p2 += 9U; - } - } - - p1 = data + 9U; - p2 = dch; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p2, p1, 9U); - p1 += 18U; p2 += 9U; - } - - conv.start(); - - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; - - n++; - uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; - - conv.decode(s0, s1); - } - - conv.chainback(output, 176U); - - bool ret2 = CCRC::checkCCITT162(output, 22U); - if (ret2) { - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - switch (fn) { - case 0U: - CUtils::dump(1U, "FR Mode Data, CSD2", output, 20U); - - if (m_downlink != NULL && !gateway) - ::memcpy(output + 0U, m_downlink, YSF_CALLSIGN_LENGTH); - - if (m_uplink != NULL && !gateway) - ::memcpy(output + YSF_CALLSIGN_LENGTH, m_uplink, YSF_CALLSIGN_LENGTH); - - break; - - case 1U: - CUtils::dump(1U, "FR Mode Data, DT1", output, 20U); - break; - - case 2U: - CUtils::dump(1U, "FR Mode Data, DT3", output, 20U); - break; - - case 3U: - CUtils::dump(1U, "FR Mode Data, DT5", output, 20U); - break; - - case 4U: - CUtils::dump(1U, "FR Mode Data, DT7", output, 20U); - break; - - case 5U: - CUtils::dump(1U, "FR Mode Data, DT9", output, 20U); - break; - - case 6U: - CUtils::dump(1U, "FR Mode Data, DT11", output, 20U); - break; - - case 7U: - CUtils::dump(1U, "FR Mode Data, DT13", output, 20U); - break; - - default: - break; - } - - for (unsigned int i = 0U; i < 20U; i++) - output[i] ^= WHITENING_DATA[i]; - - CCRC::addCCITT162(output, 22U); - output[22U] = 0x00U; - - unsigned char convolved[45U]; - conv.encode(output, convolved, 180U); - - unsigned char bytes[45U]; - unsigned int j = 0U; - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } - - p1 = data + 9U; - p2 = bytes; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p1, p2, 9U); - p1 += 18U; p2 += 9U; - } - } - - return ret1 && (fn == 0U); -} - -unsigned int CYSFPayload::processVoiceFRModeAudio(unsigned char* data) -{ - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - // Regenerate the IMBE FEC - unsigned int errors = 0U; - errors += m_fec.regenerateIMBE(data + 0U); - errors += m_fec.regenerateIMBE(data + 18U); - errors += m_fec.regenerateIMBE(data + 36U); - errors += m_fec.regenerateIMBE(data + 54U); - errors += m_fec.regenerateIMBE(data + 72U); - - return errors; -} - -void CYSFPayload::writeHeader(unsigned char* data, const unsigned char* csd1, const unsigned char* csd2) -{ - assert(data != NULL); - assert(csd1 != NULL); - assert(csd2 != NULL); - - writeDataFRModeData1(csd1, data); - - writeDataFRModeData2(csd2, data); -} - -void CYSFPayload::writeDataFRModeData1(const unsigned char* dt, unsigned char* data) -{ - assert(dt != NULL); - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - unsigned char output[25U]; - for (unsigned int i = 0U; i < 20U; i++) - output[i] = dt[i] ^ WHITENING_DATA[i]; - - CCRC::addCCITT162(output, 22U); - output[22U] = 0x00U; - - unsigned char convolved[45U]; - - CYSFConvolution conv; - conv.encode(output, convolved, 180U); - - unsigned char bytes[45U]; - unsigned int j = 0U; - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } - - unsigned char* p1 = data; - unsigned char* p2 = bytes; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p1, p2, 9U); - p1 += 18U; p2 += 9U; - } -} - -void CYSFPayload::writeDataFRModeData2(const unsigned char* dt, unsigned char* data) -{ - assert(dt != NULL); - assert(data != NULL); - - data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; - - unsigned char output[25U]; - for (unsigned int i = 0U; i < 20U; i++) - output[i] = dt[i] ^ WHITENING_DATA[i]; - - CCRC::addCCITT162(output, 22U); - output[22U] = 0x00U; - - unsigned char convolved[45U]; - - CYSFConvolution conv; - conv.encode(output, convolved, 180U); - - unsigned char bytes[45U]; - unsigned int j = 0U; - for (unsigned int i = 0U; i < 180U; i++) { - unsigned int n = INTERLEAVE_TABLE_9_20[i]; - - bool s0 = READ_BIT1(convolved, j) != 0U; - j++; - - bool s1 = READ_BIT1(convolved, j) != 0U; - j++; - - WRITE_BIT1(bytes, n, s0); - - n++; - WRITE_BIT1(bytes, n, s1); - } - - unsigned char* p1 = data + 9U; - unsigned char* p2 = bytes; - for (unsigned int i = 0U; i < 5U; i++) { - ::memcpy(p1, p2, 9U); - p1 += 18U; p2 += 9U; - } -} - -void CYSFPayload::setUplink(const std::string& callsign) -{ - m_uplink = new unsigned char[YSF_CALLSIGN_LENGTH]; - - std::string uplink = callsign; - uplink.resize(YSF_CALLSIGN_LENGTH, ' '); - - for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) - m_uplink[i] = uplink.at(i); -} - -void CYSFPayload::setDownlink(const std::string& callsign) -{ - m_downlink = new unsigned char[YSF_CALLSIGN_LENGTH]; - - std::string downlink = callsign; - downlink.resize(YSF_CALLSIGN_LENGTH, ' '); - - for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) - m_downlink[i] = downlink.at(i); -} - -unsigned char* CYSFPayload::getSource() -{ - return m_source; -} - -unsigned char* CYSFPayload::getDest() -{ - return m_dest; -} - -void CYSFPayload::reset() -{ - delete[] m_source; - delete[] m_dest; - - m_source = NULL; - m_dest = NULL; -} +/* +* Copyright (C) 2016,2017,2020 Jonathan Naylor, G4KLX +* Copyright (C) 2016 Mathias Weyland, HB9FRV +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; version 2 of the License. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +*/ + +#include "YSFConvolution.h" +#include "YSFPayload.h" +#include "YSFDefines.h" +#include "Utils.h" +#include "CRC.h" +#include "Log.h" + +#include +#include +#include +#include + +const unsigned int INTERLEAVE_TABLE_9_20[] = { + 0U, 40U, 80U, 120U, 160U, 200U, 240U, 280U, 320U, + 2U, 42U, 82U, 122U, 162U, 202U, 242U, 282U, 322U, + 4U, 44U, 84U, 124U, 164U, 204U, 244U, 284U, 324U, + 6U, 46U, 86U, 126U, 166U, 206U, 246U, 286U, 326U, + 8U, 48U, 88U, 128U, 168U, 208U, 248U, 288U, 328U, + 10U, 50U, 90U, 130U, 170U, 210U, 250U, 290U, 330U, + 12U, 52U, 92U, 132U, 172U, 212U, 252U, 292U, 332U, + 14U, 54U, 94U, 134U, 174U, 214U, 254U, 294U, 334U, + 16U, 56U, 96U, 136U, 176U, 216U, 256U, 296U, 336U, + 18U, 58U, 98U, 138U, 178U, 218U, 258U, 298U, 338U, + 20U, 60U, 100U, 140U, 180U, 220U, 260U, 300U, 340U, + 22U, 62U, 102U, 142U, 182U, 222U, 262U, 302U, 342U, + 24U, 64U, 104U, 144U, 184U, 224U, 264U, 304U, 344U, + 26U, 66U, 106U, 146U, 186U, 226U, 266U, 306U, 346U, + 28U, 68U, 108U, 148U, 188U, 228U, 268U, 308U, 348U, + 30U, 70U, 110U, 150U, 190U, 230U, 270U, 310U, 350U, + 32U, 72U, 112U, 152U, 192U, 232U, 272U, 312U, 352U, + 34U, 74U, 114U, 154U, 194U, 234U, 274U, 314U, 354U, + 36U, 76U, 116U, 156U, 196U, 236U, 276U, 316U, 356U, + 38U, 78U, 118U, 158U, 198U, 238U, 278U, 318U, 358U}; + +const unsigned int INTERLEAVE_TABLE_5_20[] = { + 0U, 40U, 80U, 120U, 160U, + 2U, 42U, 82U, 122U, 162U, + 4U, 44U, 84U, 124U, 164U, + 6U, 46U, 86U, 126U, 166U, + 8U, 48U, 88U, 128U, 168U, + 10U, 50U, 90U, 130U, 170U, + 12U, 52U, 92U, 132U, 172U, + 14U, 54U, 94U, 134U, 174U, + 16U, 56U, 96U, 136U, 176U, + 18U, 58U, 98U, 138U, 178U, + 20U, 60U, 100U, 140U, 180U, + 22U, 62U, 102U, 142U, 182U, + 24U, 64U, 104U, 144U, 184U, + 26U, 66U, 106U, 146U, 186U, + 28U, 68U, 108U, 148U, 188U, + 30U, 70U, 110U, 150U, 190U, + 32U, 72U, 112U, 152U, 192U, + 34U, 74U, 114U, 154U, 194U, + 36U, 76U, 116U, 156U, 196U, + 38U, 78U, 118U, 158U, 198U}; + +// This one differs from the others in that it interleaves bits and not dibits +const unsigned int INTERLEAVE_TABLE_26_4[] = { + 0U, 4U, 8U, 12U, 16U, 20U, 24U, 28U, 32U, 36U, 40U, 44U, 48U, 52U, 56U, 60U, 64U, 68U, 72U, 76U, 80U, 84U, 88U, 92U, 96U, 100U, + 1U, 5U, 9U, 13U, 17U, 21U, 25U, 29U, 33U, 37U, 41U, 45U, 49U, 53U, 57U, 61U, 65U, 69U, 73U, 77U, 81U, 85U, 89U, 93U, 97U, 101U, + 2U, 6U, 10U, 14U, 18U, 22U, 26U, 30U, 34U, 38U, 42U, 46U, 50U, 54U, 58U, 62U, 66U, 70U, 74U, 78U, 82U, 86U, 90U, 94U, 98U, 102U, + 3U, 7U, 11U, 15U, 19U, 23U, 27U, 31U, 35U, 39U, 43U, 47U, 51U, 55U, 59U, 63U, 67U, 71U, 75U, 79U, 83U, 87U, 91U, 95U, 99U, 103U}; + +const unsigned char WHITENING_DATA[] = {0x93U, 0xD7U, 0x51U, 0x21U, 0x9CU, 0x2FU, 0x6CU, 0xD0U, 0xEFU, 0x0FU, + 0xF8U, 0x3DU, 0xF1U, 0x73U, 0x20U, 0x94U, 0xEDU, 0x1EU, 0x7CU, 0xD8U}; + +const unsigned char BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; + +#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) +#define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) + +CYSFPayload::CYSFPayload() : +m_uplink(NULL), +m_downlink(NULL), +m_source(NULL), +m_dest(NULL), +m_fec() +{ +} + +CYSFPayload::~CYSFPayload() +{ + delete[] m_uplink; + delete[] m_downlink; + delete[] m_source; + delete[] m_dest; +} + +bool CYSFPayload::processHeaderData(unsigned char* data) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + unsigned char dch[45U]; + + unsigned char* p1 = data; + unsigned char* p2 = dch; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p2, p1, 9U); + p1 += 18U; p2 += 9U; + } + + CYSFConvolution conv; + conv.start(); + + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; + + n++; + uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; + + conv.decode(s0, s1); + } + + unsigned char output[23U]; + conv.chainback(output, 176U); + + bool valid1 = CCRC::checkCCITT162(output, 22U); + if (valid1) { + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + if (m_dest == NULL) { + m_dest = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memcpy(m_dest, output + 0U, YSF_CALLSIGN_LENGTH); + } + + if (m_source == NULL) { + m_source = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memcpy(m_source, output + YSF_CALLSIGN_LENGTH, YSF_CALLSIGN_LENGTH); + } + + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + CCRC::addCCITT162(output, 22U); + output[22U] = 0x00U; + + unsigned char convolved[45U]; + conv.encode(output, convolved, 180U); + + unsigned char bytes[45U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + p1 = data; + p2 = bytes; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p1, p2, 9U); + p1 += 18U; p2 += 9U; + } + } + + p1 = data + 9U; + p2 = dch; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p2, p1, 9U); + p1 += 18U; p2 += 9U; + } + + conv.start(); + + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; + + n++; + uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; + + conv.decode(s0, s1); + } + + conv.chainback(output, 176U); + + bool valid2 = CCRC::checkCCITT162(output, 22U); + if (valid2) { + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + if (m_downlink != NULL) + ::memcpy(output + 0U, m_downlink, YSF_CALLSIGN_LENGTH); + + if (m_uplink != NULL) + ::memcpy(output + YSF_CALLSIGN_LENGTH, m_uplink, YSF_CALLSIGN_LENGTH); + + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + CCRC::addCCITT162(output, 22U); + output[22U] = 0x00U; + + unsigned char convolved[45U]; + conv.encode(output, convolved, 180U); + + unsigned char bytes[45U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + p1 = data + 9U; + p2 = bytes; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p1, p2, 9U); + p1 += 18U; p2 += 9U; + } + } + + return valid1; +} + +unsigned int CYSFPayload::processVDMode1Audio(unsigned char* data) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + // Regenerate the AMBE FEC + unsigned int errors = 0U; + errors += m_fec.regenerateYSFDN(data + 9U); + errors += m_fec.regenerateYSFDN(data + 27U); + errors += m_fec.regenerateYSFDN(data + 45U); + errors += m_fec.regenerateYSFDN(data + 63U); + errors += m_fec.regenerateYSFDN(data + 81U); + + return errors; +} + +bool CYSFPayload::processVDMode1Data(unsigned char* data, unsigned char fn, bool gateway) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + unsigned char dch[45U]; + + unsigned char* p1 = data; + unsigned char* p2 = dch; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p2, p1, 9U); + p1 += 18U; p2 += 9U; + } + + CYSFConvolution conv; + conv.start(); + + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; + + n++; + uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; + + conv.decode(s0, s1); + } + + unsigned char output[23U]; + conv.chainback(output, 176U); + + bool ret = CCRC::checkCCITT162(output, 22U); + if (ret) { + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + switch (fn) { + case 0U: + if (m_dest == NULL) { + m_dest = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memcpy(m_dest, output + 0U, YSF_CALLSIGN_LENGTH); + } + + if (m_source == NULL) { + m_source = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memcpy(m_source, output + YSF_CALLSIGN_LENGTH, YSF_CALLSIGN_LENGTH); + } + + break; + + case 1U: + if (m_downlink != NULL && !gateway) + ::memcpy(output + 0U, m_downlink, YSF_CALLSIGN_LENGTH); + + if (m_uplink != NULL && !gateway) + ::memcpy(output + YSF_CALLSIGN_LENGTH, m_uplink, YSF_CALLSIGN_LENGTH); + + break; + + case 3U: + // CUtils::dump(1U, "V/D Mode 1 Data, DT1", output, 20U); + break; + + case 4U: + // CUtils::dump(1U, "V/D Mode 1 Data, DT2", output, 20U); + break; + + case 5U: + // CUtils::dump(1U, "V/D Mode 1 Data, DT3", output, 20U); + break; + + case 6U: + // CUtils::dump(1U, "V/D Mode 1 Data, DT4", output, 20U); + break; + + case 7U: + // CUtils::dump(1U, "V/D Mode 1 Data, DT5", output, 20U); + break; + + default: + break; + } + + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + CCRC::addCCITT162(output, 22U); + output[22U] = 0x00U; + + unsigned char convolved[45U]; + conv.encode(output, convolved, 180U); + + unsigned char bytes[45U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + p1 = data; + p2 = bytes; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p1, p2, 9U); + p1 += 18U; p2 += 9U; + } + } + + return ret && (fn == 0U); +} + +unsigned int CYSFPayload::processVDMode2Audio(unsigned char* data) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + unsigned int errors = 0U; + unsigned int offset = 40U; // DCH(0) + + // We have a total of 5 VCH sections, iterate through each + for (unsigned int j = 0U; j < 5U; j++, offset += 144U) { + unsigned int errs = 0U; + + unsigned char vch[13U]; + + // Deinterleave + for (unsigned int i = 0U; i < 104U; i++) { + unsigned int n = INTERLEAVE_TABLE_26_4[i]; + bool s = READ_BIT1(data, offset + n); + WRITE_BIT1(vch, i, s); + } + + // "Un-whiten" (descramble) + for (unsigned int i = 0U; i < 13U; i++) + vch[i] ^= WHITENING_DATA[i]; + + // errors += READ_BIT1(vch, 103); // Padding bit must be zero but apparently it is not... + + for (unsigned int i = 0U; i < 81U; i += 3) { + uint8_t vote = 0U; + vote += READ_BIT1(vch, i + 0U) ? 1U : 0U; + vote += READ_BIT1(vch, i + 1U) ? 1U : 0U; + vote += READ_BIT1(vch, i + 2U) ? 1U : 0U; + + switch (vote) { + case 1U: // 1 0 0, or 0 1 0, or 0 0 1, convert to 0 0 0 + WRITE_BIT1(vch, i + 0U, false); + WRITE_BIT1(vch, i + 1U, false); + WRITE_BIT1(vch, i + 2U, false); + errs++; + break; + case 2U: // 1 1 0, or 0 1 1, or 1 0 1, convert to 1 1 1 + WRITE_BIT1(vch, i + 0U, true); + WRITE_BIT1(vch, i + 1U, true); + WRITE_BIT1(vch, i + 2U, true); + errs++; + break; + default: // 0U (0 0 0), or 3U (1 1 1), no errors + break; + } + } + + // Reconstruct only if we have bit errors. + if (errs > 0U) { + // Accumulate the total number of errors + errors += errs; + + // Scramble + for (unsigned int i = 0U; i < 13U; i++) + vch[i] ^= WHITENING_DATA[i]; + + // Interleave + for (unsigned int i = 0U; i < 104U; i++) { + unsigned int n = INTERLEAVE_TABLE_26_4[i]; + bool s = READ_BIT1(vch, i); + WRITE_BIT1(data, offset + n, s); + } + } + } + + // "errors" is the number of triplets that were recognized to be corrupted + // and that were corrected. There are 27 of those per VCH and 5 VCH per CC, + // yielding a total of 27*5 = 135. I believe the expected value of this + // error distribution to be Bin(1;3,BER)+Bin(2;3,BER) which entails 75% for + // BER = 0.5. + return errors; +} + +bool CYSFPayload::processVDMode2Data(unsigned char* data, unsigned char fn, bool gateway) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + unsigned char dch[25U]; + + unsigned char* p1 = data; + unsigned char* p2 = dch; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p2, p1, 5U); + p1 += 18U; p2 += 5U; + } + + CYSFConvolution conv; + conv.start(); + + for (unsigned int i = 0U; i < 100U; i++) { + unsigned int n = INTERLEAVE_TABLE_5_20[i]; + uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; + + n++; + uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; + + conv.decode(s0, s1); + } + + unsigned char output[13U]; + conv.chainback(output, 96U); + + bool ret = CCRC::checkCCITT162(output, 12U); + if (ret) { + for (unsigned int i = 0U; i < 10U; i++) + output[i] ^= WHITENING_DATA[i]; + + switch (fn) { + case 0U: + if (m_dest == NULL) { + m_dest = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memcpy(m_dest, output, YSF_CALLSIGN_LENGTH); + } + break; + + case 1U: + if (m_source == NULL) { + m_source = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memcpy(m_source, output, YSF_CALLSIGN_LENGTH); + } + break; + + case 2U: + if (m_downlink != NULL && !gateway) + ::memcpy(output, m_downlink, YSF_CALLSIGN_LENGTH); + break; + + case 3U: + if (m_uplink != NULL && !gateway) + ::memcpy(output, m_uplink, YSF_CALLSIGN_LENGTH); + break; + + case 6U: + // CUtils::dump(1U, "V/D Mode 2 Data, DT1", output, YSF_CALLSIGN_LENGTH); + break; + + case 7U: + // CUtils::dump(1U, "V/D Mode 2 Data, DT2", output, YSF_CALLSIGN_LENGTH); + break; + + default: + break; + } + + for (unsigned int i = 0U; i < 10U; i++) + output[i] ^= WHITENING_DATA[i]; + + CCRC::addCCITT162(output, 12U); + output[12U] = 0x00U; + + unsigned char convolved[25U]; + conv.encode(output, convolved, 100U); + + unsigned char bytes[25U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 100U; i++) { + unsigned int n = INTERLEAVE_TABLE_5_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + p1 = data; + p2 = bytes; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p1, p2, 5U); + p1 += 18U; p2 += 5U; + } + } + + return ret && (fn == 0U || fn == 1U); +} + +bool CYSFPayload::processDataFRModeData(unsigned char* data, unsigned char fn, bool gateway) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + unsigned char dch[45U]; + + unsigned char* p1 = data; + unsigned char* p2 = dch; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p2, p1, 9U); + p1 += 18U; p2 += 9U; + } + + CYSFConvolution conv; + conv.start(); + + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; + + n++; + uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; + + conv.decode(s0, s1); + } + + unsigned char output[23U]; + conv.chainback(output, 176U); + + bool ret1 = CCRC::checkCCITT162(output, 22U); + if (ret1) { + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + switch (fn) { + case 0U: + // CUtils::dump(1U, "FR Mode Data, CSD1", output, 20U); + + if (m_dest == NULL) { + m_dest = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memcpy(m_dest, output + 0U, YSF_CALLSIGN_LENGTH); + } + + if (m_source == NULL) { + m_source = new unsigned char[YSF_CALLSIGN_LENGTH]; + ::memcpy(m_source, output + YSF_CALLSIGN_LENGTH, YSF_CALLSIGN_LENGTH); + } + + break; + + case 1U: + // CUtils::dump(1U, "FR Mode Data, CSD3", output, 20U); + break; + + case 2U: + // CUtils::dump(1U, "FR Mode Data, DT2", output, 20U); + break; + + case 3U: + // CUtils::dump(1U, "FR Mode Data, DT4", output, 20U); + break; + + case 4U: + // CUtils::dump(1U, "FR Mode Data, DT6", output, 20U); + break; + + case 5U: + // CUtils::dump(1U, "FR Mode Data, DT8", output, 20U); + break; + + case 6U: + // CUtils::dump(1U, "FR Mode Data, DT10", output, 20U); + break; + + case 7U: + // CUtils::dump(1U, "FR Mode Data, DT12", output, 20U); + break; + + default: + break; + } + + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + CCRC::addCCITT162(output, 22U); + output[22U] = 0x00U; + + unsigned char convolved[45U]; + conv.encode(output, convolved, 180U); + + unsigned char bytes[45U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + p1 = data; + p2 = bytes; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p1, p2, 9U); + p1 += 18U; p2 += 9U; + } + } + + p1 = data + 9U; + p2 = dch; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p2, p1, 9U); + p1 += 18U; p2 += 9U; + } + + conv.start(); + + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; + + n++; + uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; + + conv.decode(s0, s1); + } + + conv.chainback(output, 176U); + + bool ret2 = CCRC::checkCCITT162(output, 22U); + if (ret2) { + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + switch (fn) { + case 0U: + // CUtils::dump(1U, "FR Mode Data, CSD2", output, 20U); + + if (m_downlink != NULL && !gateway) + ::memcpy(output + 0U, m_downlink, YSF_CALLSIGN_LENGTH); + + if (m_uplink != NULL && !gateway) + ::memcpy(output + YSF_CALLSIGN_LENGTH, m_uplink, YSF_CALLSIGN_LENGTH); + + break; + + case 1U: + // CUtils::dump(1U, "FR Mode Data, DT1", output, 20U); + break; + + case 2U: + // CUtils::dump(1U, "FR Mode Data, DT3", output, 20U); + break; + + case 3U: + // CUtils::dump(1U, "FR Mode Data, DT5", output, 20U); + break; + + case 4U: + // CUtils::dump(1U, "FR Mode Data, DT7", output, 20U); + break; + + case 5U: + // CUtils::dump(1U, "FR Mode Data, DT9", output, 20U); + break; + + case 6U: + // CUtils::dump(1U, "FR Mode Data, DT11", output, 20U); + break; + + case 7U: + // CUtils::dump(1U, "FR Mode Data, DT13", output, 20U); + break; + + default: + break; + } + + for (unsigned int i = 0U; i < 20U; i++) + output[i] ^= WHITENING_DATA[i]; + + CCRC::addCCITT162(output, 22U); + output[22U] = 0x00U; + + unsigned char convolved[45U]; + conv.encode(output, convolved, 180U); + + unsigned char bytes[45U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + p1 = data + 9U; + p2 = bytes; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p1, p2, 9U); + p1 += 18U; p2 += 9U; + } + } + + return ret1 && (fn == 0U); +} + +unsigned int CYSFPayload::processVoiceFRModeAudio2(unsigned char* data) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + // Regenerate the IMBE FEC + unsigned int errors = 0U; + errors += m_fec.regenerateIMBE(data + 54U); + errors += m_fec.regenerateIMBE(data + 72U); + + return errors; +} + +unsigned int CYSFPayload::processVoiceFRModeAudio5(unsigned char* data) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + // Regenerate the IMBE FEC + unsigned int errors = 0U; + errors += m_fec.regenerateIMBE(data + 0U); + errors += m_fec.regenerateIMBE(data + 18U); + errors += m_fec.regenerateIMBE(data + 36U); + errors += m_fec.regenerateIMBE(data + 54U); + errors += m_fec.regenerateIMBE(data + 72U); + + return errors; +} + +bool CYSFPayload::processVoiceFRModeData(unsigned char* data) +{ + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + unsigned char dch[45U]; + ::memcpy(dch, data, 45U); + + CYSFConvolution conv; + conv.start(); + + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + uint8_t s0 = READ_BIT1(dch, n) ? 1U : 0U; + + n++; + uint8_t s1 = READ_BIT1(dch, n) ? 1U : 0U; + + conv.decode(s0, s1); + } + + unsigned char output[23U]; + conv.chainback(output, 176U); + + bool ret = CCRC::checkCCITT162(output, 22U); + if (ret) { + CCRC::addCCITT162(output, 22U); + output[22U] = 0x00U; + + unsigned char convolved[45U]; + conv.encode(output, convolved, 180U); + + unsigned char bytes[45U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + ::memcpy(data, bytes, 45U); + } + + return ret; +} + +void CYSFPayload::writeHeader(unsigned char* data, const unsigned char* csd1, const unsigned char* csd2) +{ + assert(data != NULL); + assert(csd1 != NULL); + assert(csd2 != NULL); + + writeDataFRModeData1(csd1, data); + + writeDataFRModeData2(csd2, data); +} + +void CYSFPayload::writeDataFRModeData1(const unsigned char* dt, unsigned char* data) +{ + assert(dt != NULL); + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + unsigned char output[25U]; + for (unsigned int i = 0U; i < 20U; i++) + output[i] = dt[i] ^ WHITENING_DATA[i]; + + CCRC::addCCITT162(output, 22U); + output[22U] = 0x00U; + + unsigned char convolved[45U]; + + CYSFConvolution conv; + conv.encode(output, convolved, 180U); + + unsigned char bytes[45U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + unsigned char* p1 = data; + unsigned char* p2 = bytes; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p1, p2, 9U); + p1 += 18U; p2 += 9U; + } +} + +void CYSFPayload::writeDataFRModeData2(const unsigned char* dt, unsigned char* data) +{ + assert(dt != NULL); + assert(data != NULL); + + data += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES; + + unsigned char output[25U]; + for (unsigned int i = 0U; i < 20U; i++) + output[i] = dt[i] ^ WHITENING_DATA[i]; + + CCRC::addCCITT162(output, 22U); + output[22U] = 0x00U; + + unsigned char convolved[45U]; + + CYSFConvolution conv; + conv.encode(output, convolved, 180U); + + unsigned char bytes[45U]; + unsigned int j = 0U; + for (unsigned int i = 0U; i < 180U; i++) { + unsigned int n = INTERLEAVE_TABLE_9_20[i]; + + bool s0 = READ_BIT1(convolved, j) != 0U; + j++; + + bool s1 = READ_BIT1(convolved, j) != 0U; + j++; + + WRITE_BIT1(bytes, n, s0); + + n++; + WRITE_BIT1(bytes, n, s1); + } + + unsigned char* p1 = data + 9U; + unsigned char* p2 = bytes; + for (unsigned int i = 0U; i < 5U; i++) { + ::memcpy(p1, p2, 9U); + p1 += 18U; p2 += 9U; + } +} + +void CYSFPayload::setUplink(const std::string& callsign) +{ + m_uplink = new unsigned char[YSF_CALLSIGN_LENGTH]; + + std::string uplink = callsign; + uplink.resize(YSF_CALLSIGN_LENGTH, ' '); + + for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) + m_uplink[i] = uplink.at(i); +} + +void CYSFPayload::setDownlink(const std::string& callsign) +{ + m_downlink = new unsigned char[YSF_CALLSIGN_LENGTH]; + + std::string downlink = callsign; + downlink.resize(YSF_CALLSIGN_LENGTH, ' '); + + for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) + m_downlink[i] = downlink.at(i); +} + +unsigned char* CYSFPayload::getSource() +{ + return m_source; +} + +unsigned char* CYSFPayload::getDest() +{ + return m_dest; +} + +void CYSFPayload::reset() +{ + delete[] m_source; + delete[] m_dest; + + m_source = NULL; + m_dest = NULL; +} diff --git a/YSFPayload.h b/YSFPayload.h index 1baac99a3..06b858f27 100644 --- a/YSFPayload.h +++ b/YSFPayload.h @@ -1,64 +1,67 @@ -/* -* Copyright (C) 2016,2017 by Jonathan Naylor G4KLX -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#if !defined(YSFPayload_H) -#define YSFPayload_H - -#include "AMBEFEC.h" - -#include - -class CYSFPayload { -public: - CYSFPayload(); - ~CYSFPayload(); - - bool processHeaderData(unsigned char* bytes); - - bool processVDMode1Data(unsigned char* bytes, unsigned char fn, bool gateway = false); - unsigned int processVDMode1Audio(unsigned char* bytes); - - bool processVDMode2Data(unsigned char* bytes, unsigned char fn, bool gateway = false); - unsigned int processVDMode2Audio(unsigned char* bytes); - - bool processDataFRModeData(unsigned char* bytes, unsigned char fn, bool gateway = false); - - unsigned int processVoiceFRModeAudio(unsigned char* bytes); - - void writeHeader(unsigned char* data, const unsigned char* csd1, const unsigned char* csd2); - - void writeDataFRModeData1(const unsigned char* dt, unsigned char* data); - void writeDataFRModeData2(const unsigned char* dt, unsigned char* data); - - unsigned char* getSource(); - unsigned char* getDest(); - - void setUplink(const std::string& callsign); - void setDownlink(const std::string& callsign); - - void reset(); - -private: - unsigned char* m_uplink; - unsigned char* m_downlink; - unsigned char* m_source; - unsigned char* m_dest; - CAMBEFEC m_fec; -}; - -#endif +/* +* Copyright (C) 2016,2017,2020 by Jonathan Naylor G4KLX +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#if !defined(YSFPayload_H) +#define YSFPayload_H + +#include "AMBEFEC.h" + +#include + +class CYSFPayload { +public: + CYSFPayload(); + ~CYSFPayload(); + + bool processHeaderData(unsigned char* bytes); + + bool processVDMode1Data(unsigned char* bytes, unsigned char fn, bool gateway = false); + unsigned int processVDMode1Audio(unsigned char* bytes); + + bool processVDMode2Data(unsigned char* bytes, unsigned char fn, bool gateway = false); + unsigned int processVDMode2Audio(unsigned char* bytes); + + bool processDataFRModeData(unsigned char* bytes, unsigned char fn, bool gateway = false); + + bool processVoiceFRModeData(unsigned char* bytes); + + unsigned int processVoiceFRModeAudio2(unsigned char* bytes); + unsigned int processVoiceFRModeAudio5(unsigned char* bytes); + + void writeHeader(unsigned char* data, const unsigned char* csd1, const unsigned char* csd2); + + void writeDataFRModeData1(const unsigned char* dt, unsigned char* data); + void writeDataFRModeData2(const unsigned char* dt, unsigned char* data); + + unsigned char* getSource(); + unsigned char* getDest(); + + void setUplink(const std::string& callsign); + void setDownlink(const std::string& callsign); + + void reset(); + +private: + unsigned char* m_uplink; + unsigned char* m_downlink; + unsigned char* m_source; + unsigned char* m_dest; + CAMBEFEC m_fec; +}; + +#endif diff --git a/linux/DMRIDUpdate.sh b/linux/DMRIDUpdate.sh index a5e506014..0b1e5013e 100755 --- a/linux/DMRIDUpdate.sh +++ b/linux/DMRIDUpdate.sh @@ -53,7 +53,7 @@ DMRIDPATH=/path/to/DMR/ID/file DMRIDFILE=${DMRIDPATH}/DMRIds.dat # DMR IDs now served by RadioID.net -DATABASEURL='https://ham-digital.org/status/users.csv' +DATABASEURL='https://database.radioid.net/static/user.csv' # # How many DMR ID files do you want backed up (0 = do not keep backups) diff --git a/linux/DMRIDUpdateBM.sh b/linux/DMRIDUpdateBM.sh index dfe4e86e5..6c48e4f4d 100755 --- a/linux/DMRIDUpdateBM.sh +++ b/linux/DMRIDUpdateBM.sh @@ -92,7 +92,10 @@ then fi # Generate new file -curl 'http://registry.dstar.su/dmr/DMRIds.php' 2>/dev/null | sed -e 's/[[:space:]]\+/ /g' > ${DMRIDFILE} +#curl 'http://registry.dstar.su/dmr/DMRIds.php' 2>/dev/null | sed -e 's/[[:space:]]\+/ /g' > ${DMRIDFILE} +#curl 'http://registry.dstar.su/dmr/DMRIds2.php' 2>/dev/null | sed -e 's/[[:space:]]\+/ /g' > ${DMRIDFILE} +# Generate new format of DMRIds.dat file +curl 'http://registry.dstar.su/dmr/DMRIds2.php' 2>/dev/null > ${DMRIDFILE} # Restart MMDVMHost eval ${RESTARTCOMMAND} diff --git a/linux/init/README.md b/linux/pi-star/init/README.md similarity index 100% rename from linux/init/README.md rename to linux/pi-star/init/README.md diff --git a/linux/init/mmdvmhost b/linux/pi-star/init/mmdvmhost similarity index 100% rename from linux/init/mmdvmhost rename to linux/pi-star/init/mmdvmhost diff --git a/linux/systemd/README.md b/linux/pi-star/systemd/README.md similarity index 100% rename from linux/systemd/README.md rename to linux/pi-star/systemd/README.md diff --git a/linux/pi-star/systemd/mmdvmhost.service b/linux/pi-star/systemd/mmdvmhost.service new file mode 100644 index 000000000..a4de9f314 --- /dev/null +++ b/linux/pi-star/systemd/mmdvmhost.service @@ -0,0 +1,12 @@ +[Unit] +Description=MMDVMHost Radio Servce +After=syslog.target network.target + +[Service] +Type=forking +ExecStart=/usr/local/sbin/mmdvmhost_service start +ExecStop=/usr/local/sbin/mmdvmhost_service stop +ExecReload=/usr/local/sbin/mmdvmhost_service restart + +[Install] +WantedBy=multi-user.target diff --git a/linux/systemd/mmdvmhost.timer b/linux/pi-star/systemd/mmdvmhost.timer similarity index 100% rename from linux/systemd/mmdvmhost.timer rename to linux/pi-star/systemd/mmdvmhost.timer diff --git a/linux/systemd/mmdvmhost_service b/linux/pi-star/systemd/mmdvmhost_service similarity index 100% rename from linux/systemd/mmdvmhost_service rename to linux/pi-star/systemd/mmdvmhost_service diff --git a/linux/systemd/mmdvmhost.service b/linux/systemd/mmdvmhost.service index a4de9f314..27ca4ee67 100644 --- a/linux/systemd/mmdvmhost.service +++ b/linux/systemd/mmdvmhost.service @@ -1,12 +1,12 @@ [Unit] -Description=MMDVMHost Radio Servce +Description=MMDVMHost Radio Service After=syslog.target network.target [Service] +User=mmdvm Type=forking -ExecStart=/usr/local/sbin/mmdvmhost_service start -ExecStop=/usr/local/sbin/mmdvmhost_service stop -ExecReload=/usr/local/sbin/mmdvmhost_service restart +ExecStart=/usr/local/bin/MMDVMHost +Restart=on-abnormal [Install] WantedBy=multi-user.target